舵机驱动
舵機(jī)的驅(qū)動(dòng)是以PWM信號(hào)的占空比來控制的,該P(yáng)WM信號(hào)的周期位20ms,寬度在0.5ms——2.5ms之間,驅(qū)使舵機(jī)轉(zhuǎn)動(dòng)角在0——180度之間,一些常用角度對(duì)應(yīng)脈寬如下表:
| 0 | 0.5 ms |
| 45 | 1 ms |
| 90 | 1.5 ms |
| 135 | 2 ms |
| 180 | 2.5 ms |
在實(shí)際應(yīng)用過程中,肯定會(huì)用到其他的一些非特殊角,就是上面表中沒有的角度,便會(huì)用到脈寬與角度轉(zhuǎn)換公式:脈寬=轉(zhuǎn)動(dòng)角 / 90 + 0.5。在用單片機(jī)驅(qū)動(dòng)舵機(jī)時(shí),可以用定時(shí)器產(chǎn)生PWM信號(hào),也可用延時(shí)函數(shù)來實(shí)現(xiàn)PWM信號(hào),為了提高精度,定時(shí)器是不二選擇。由于脈寬是一個(gè)小數(shù)并非整數(shù),所以定時(shí)器初值就設(shè)定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次數(shù)加1count=count%200; //保持周期為20ms,即count加到200時(shí),在模200就等于0,開始下一周期 }void main() {angle=90; //設(shè)置舵機(jī)轉(zhuǎn)動(dòng)90度,此值可在0——180之間變動(dòng)pulse_width=(angle/90+0.5)*10;InitTimer0();while(1); }總結(jié)
- 上一篇: 【STM32】修改芯片型号后报 Erro
- 下一篇: Apache httpd 配置HTTPS