单片机
返回首页

AVR单片机控制舵机

2012-08-02 来源:21ic

什么是舵机:

舵机如下所示:

  点击浏览下一页

有三根线,一般依次是地,电源(5V左右),信号(信号的幅值>=3.3V),不清楚各个脚打开舵机一测量就知道了。

2.其工作原理是:

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。

3.舵机的控制:

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:

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

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

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

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

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

重要说明:

1:上面部分还是成线形关系的,Y=90X-45(X单位是ms,Y单位是度数:)

2:上面所说的0度 45度等是指度 45度位置(什么意思呢:我说明一下就知道了,就拿45度位置来说,若舵机停在0度位置,下载45度位置程序后则舵机停在45度,即顺时针走了45度,若当时舵机在135度位置,则反转90度到45度位置。所以舵机不存在正转反转问题。这点非常重要。

3:若想转动到45度位置,要一直产生1.0ms的高电平(即PA0=1;Delay(1ms);PA0=0;Delay(20ms);要不停的产生这个高低电平,产生PWM脉冲

请看下形象描述吧:

 点击浏览下一页

下面是我在ATMEGA32上的测试程序,开发软件:ICC AVR

#include 


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);

        */
     }

}
进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 光控音效发生器电路

  • 离子检测器电路分析

  • 非常简单的150W功放电路图

  • 优化电路板布局的简单方法

  • 一个简单的立体声平衡指示器电路

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章