舵机驱动
舵機的驅動是以PWM信號的占空比來控制的,該PWM信號的周期位20ms,寬度在0.5ms——2.5ms之間,驅使舵機轉動角在0——180度之間,一些常用角度對應脈寬如下表:
| 0 | 0.5 ms |
| 45 | 1 ms |
| 90 | 1.5 ms |
| 135 | 2 ms |
| 180 | 2.5 ms |
在實際應用過程中,肯定會用到其他的一些非特殊角,就是上面表中沒有的角度,便會用到脈寬與角度轉換公式:脈寬=轉動角 / 90 + 0.5。在用單片機驅動舵機時,可以用定時器產生PWM信號,也可用延時函數來實現PWM信號,為了提高精度,定時器是不二選擇。由于脈寬是一個小數并非整數,所以定時器初值就設定100us,也就是0.1ms。程序如下:
#include<reg52.h>sbit servo=P3^0; unsigned char count=0,angle=0,pulse_width=0;void InitTimer0(void) {TMOD = 0x01;//0.1ms 11.0592MHz晶振TH0 = 0xFF;TL0 = 0xA4;EA = 1;ET0 = 1;TR0 = 1; }void IntTimer0()interrupt 1 {TH0 = 0xFF;TL0 = 0xA4;if(count<pulse_width)servo=1;elseservo=0;count++; //0.1ms次數加1count=count%200; //保持周期為20ms,即count加到200時,在模200就等于0,開始下一周期 }void main() {angle=90; //設置舵機轉動90度,此值可在0——180之間變動pulse_width=(angle/90+0.5)*10;InitTimer0();while(1); }總結
- 上一篇: 【STM32】修改芯片型号后报 Erro
- 下一篇: Windows MinGW配置C、C++