什么是舵機:
舵機如下所示:
有三根線,一般依次是地,電源(5V左右),信號(信號的幅值>=3.3V),不清楚各個腳打開舵機一測量就知道了。
2. 其工作原理是:
控制信號由接收機的通道進入信號調(diào)制芯片,獲得直流偏置電壓。它內(nèi)部有一個基準電路,產(chǎn)生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出到電機驅動芯片決定電機的正反轉。當電機轉速一定時,通過級聯(lián)減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。當然我們可以不用去了解它的具體工作原理,知道它的控制原理就夠了。就象我們使用晶體管一樣,知道可以拿它來做開關管或放大管就行了,至于管內(nèi)的電子具體怎么流動是可以完全不用去考慮的。
3. 舵機的控制:
舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms范圍內(nèi)的角度控制脈沖部分。以180度角度伺服為例,那么對應的控制關系是這樣的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
重要說明:
1:上面部分還是成線形關系的,Y=90X-45(X單位是ms,Y單位是度數(shù):)
2:上面所說的0度 45度等是指度 45度位置(什么意思呢:我說明一下就知道了,就拿45度位置來說,若舵機停在0度位置,下載45度位置程序后則舵機停在45度,即順時針走了45度,若當時舵機在135度位置,則反轉90度到45度位置。所以舵機不存在正轉反轉問題。這點非常重要。
3:若想轉動到45度位置,要一直產(chǎn)生1.0ms的高電平(即PA0=1;Delay(1ms);PA0=0;Delay(20ms);要不停的產(chǎn)生這個高低電平,產(chǎn)生PWM脈沖
請看下形象描述吧:
下面是我在ATMEGA32上的測試程序,開發(fā)軟件:ICC AVR
#include <iom32v.h> typedef struct BYTE_BIT { unsigned BIT0:1; unsigned BIT1:1; unsigned BIT2:1; unsigned BIT3:1; unsigned BIT4:1; unsigned BIT5:1; unsigned BIT6:1; unsigned BIT7:1; }BYTEBIT; #define SET_BIT8_FORMAT(Addr) (*((volatile BYTEBIT *)&Addr)) # define PORTB_BIT SET_BIT8_FORMAT(PORTB) # define _PB0 PORTB_BIT.BIT0 # define _PB1 PORTB_BIT.BIT1 # define _PB2 PORTB_BIT.BIT2 # define _PB3 PORTB_BIT.BIT3 # define _PB4 PORTB_BIT.BIT4 # define _PB5 PORTB_BIT.BIT5 # define _PB6 PORTB_BIT.BIT6 # define _PB7 PORTB_BIT.BIT7 /*delay(1)延時時間為300US delay(80)延時時間為20mS delay(4)延時時間為1mS delay(8)延時時間為2mS delay(6)延時時間為1.55mS delay(2)延時時間為0.55MS delay(10)延時時間為2.5mS */ void Delay(int j) { int i; for(;j>0;j--) { for(i=0;i<35;i++); } } void main(void) { int i,j; DDRB=0XFF; while(1) { //2.0ms 135度位置 _PB7=1; Delay(8); _PB7=0; Delay(74); /* //1.0ms 45度位置 _PB7=1; Delay(4); _PB7=0; Delay(78); //1.5ms 90度位置 _PB7=1; Delay(6); _PB7=0; Delay(78); // 2.5ms 180度位置 _PB7=1; Delay(10); _PB7=0; Delay(72); //0.5ms 0度位置 _PB7=1; Delay(2); _PB7=0; Delay(78); */ } }