第一:你的伺服電機是什么樣的?是不是就是舵機?如果是舵機——SG90——它的控制是這樣的:知識:舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms范圍內的角度控制脈沖部分。以180度角度伺服為例,那么對應的控制關系是這樣的:
0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 程序是這樣的: void DJZD (void)//舵機轉動子函數 { unsigned char i;//舵機信號脈沖次數 for (i=0;i<75;i++)//通過試驗,從0度轉動到180度,至少要循環75次 { DJ=1; Delay50us(GT); DJ=0; Delay50us(DT); } DJ=0;
} GT=20;DT=380;轉動到45度
GT=30;DT=370;轉動到90度,其它角度自己可以算。
這里的角度是固定的,不存在45度加45度的說法。注意!!!
第二:步進電機——以下以四相五線步進電機為例
知識:我的步進電機參數為:步距角5.625度,是減速電機1:64;即是說:每一次脈沖,電機轉動角度為5.625/64度
所以,轉動45度,就應該有45*64/5.625=512次脈沖。
程序如下:
- void Motor() //電機旋轉子函數
- {
- unsigned char i;
- for(i=0;(i<8);i++) //四相單雙八拍
- {
- if (jd==0) //jd為0則停轉
- {
- Rotation=0xf0;
- break;
- }
- if (k==0)
- {
- Rotation=FFW2[i]; //輸出正轉的相
- }
- else
- {
- Rotation=FFW1[i]; //輸出反轉的相
- }
- Delay(Time); //Time改變這個參數可以調整電機轉速
- jd--;
- }
- }
復制代碼
其中,變量jd(角度)在主程序中就應該賦值512,若再加45度,則可以再來一次就行。這里的角度,是可以累加的,不是固定的。其它角度自己可以算,當然要注意自己的步進電機參數。
|