專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

AVR單片機(jī)控制舵機(jī)(含程序)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年05月24日   【字體:

什么是舵機(jī):

舵機(jī)如下所示:

  

 

有三根線,一般依次是地,電源(5V左右),信號(hào)(信號(hào)的幅值>=3.3V),不清楚各個(gè)腳打開(kāi)舵機(jī)一測(cè)量就知道了。

2.     其工作原理是:

控制信號(hào)由接收機(jī)的通道進(jìn)入信號(hào)調(diào)制芯片,獲得直流偏置電壓。它內(nèi)部有一個(gè)基準(zhǔn)電路,產(chǎn)生周期為20ms,寬度為1.5ms的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負(fù)輸出到電機(jī)驅(qū)動(dòng)芯片決定電機(jī)的正反轉(zhuǎn)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過(guò)級(jí)聯(lián)減速齒輪帶動(dòng)電位器旋轉(zhuǎn),使得電壓差為0,電機(jī)停止轉(zhuǎn)動(dòng)。當(dāng)然我們可以不用去了解它的具體工作原理,知道它的控制原理就夠了。就象我們使用晶體管一樣,知道可以拿它來(lái)做開(kāi)關(guān)管或放大管就行了,至于管內(nèi)的電子具體怎么流動(dòng)是可以完全不用去考慮的。

3.     舵機(jī)的控制:

舵機(jī)的控制一般需要一個(gè)20ms左右的時(shí)基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms范圍內(nèi)的角度控制脈沖部分。以180度角度伺服為例,那么對(duì)應(yīng)的控制關(guān)系是這樣的:

   0.5ms--------------0度;

   1.0ms------------45度;

   1.5ms------------90度;

   2.0ms-----------135度;

   2.5ms-----------180度;

 

重要說(shuō)明:

 

1:上面部分還是成線形關(guān)系的,Y=90X-45(X單位是ms,Y單位是度數(shù):)

 

2:上面所說(shuō)的0度 45度等是指度 45度位置(什么意思呢:我說(shuō)明一下就知道了,就拿45度位置來(lái)說(shuō),若舵機(jī)停在0度位置,下載45度位置程序后則舵機(jī)停在45度,即順時(shí)針走了45度,若當(dāng)時(shí)舵機(jī)在135度位置,則反轉(zhuǎn)90度到45度位置。所以舵機(jī)不存在正轉(zhuǎn)反轉(zhuǎn)問(wèn)題。這點(diǎn)非常重要。

3:若想轉(zhuǎn)動(dòng)到45度位置,要一直產(chǎn)生1.0ms的高電平(即PA0=1;Delay(1ms);PA0=0;Delay(20ms);要不停的產(chǎn)生這個(gè)高低電平,產(chǎn)生PWM脈沖

 

請(qǐng)看下形象描述吧:

 

 

下面是我在ATMEGA32上的測(cè)試程序,開(kāi)發(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)延時(shí)時(shí)間為300US
delay(80)延時(shí)時(shí)間為20mS
delay(4)延時(shí)時(shí)間為1mS
delay(8)延時(shí)時(shí)間為2mS
delay(6)延時(shí)時(shí)間為1.55mS
delay(2)延時(shí)時(shí)間為0.55MS
delay(10)延時(shí)時(shí)間為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);

        */
     }

}
關(guān)閉窗口

相關(guān)文章