基于51单片机的模拟舵机控制实验

控制/MCU

1877人已加入

描述

一、实验原理

1、舵机转动的原理(如下图所示)

PWM波

1.根据上图我们可以得知,要想控制舵机转动指定的角度,必须要让它在一定的周期(20ms)中,获得一定时间(分别是0.5ms、1ms、1.5ms、2ms、2.5sm)的高电平,具体对应关系,上图中已给出。

2.现在我们要做的就是生成一个周期为20ms的PWM波,通过设定一个比较值(最大为20ms),用来控制我们的高电平时间,进而控制舵机转动指定角度。

2、生成PWM波的原理

1.用定时来实现,设定一个初始值,使其溢出时间为500us,再设定一个计数值,控制PWM波的周期,该值最大为40(500us*40=20 000us),如此便设定了周期为20ms;计数值会一直和比较值做比较,这样就可以实现高电平时间的控制。

2.通过上述三个值的调节,就可以实现舵机不同角度的转动。

二、关键代码

/*定时器0初始化函数*/
void Timer0_Init()  
{
  TMOD &= 0xF0;    //设置定时器模式
  TMOD |= 0x01;    //设置定时器模式
  TL0 = 0x33;    //设置定时初始值      晶振为11.0592M
  TH0 = 0xFE;    //设置定时初始值
  ET0 = 1;      //打开定时器0的中断
  TF0 = 0;      //清除溢出中断标志位
  TR0 = 1;      //定时器0开始计时
  EA = 1;        //开总中断
}


/*中断服务程序子函数*/
void Timer0() interrupt 1     
{

  TL0 = 0x33;    
  TH0 = 0xFE;         //重新赋计数初值为500us

  count++;          //计次,每500us  count+1
  count%=40;        //周期为20ms

  if(count< PWM_count)
  {                  
    SG_PWM=1;
  }
  else
  {
    SG_PWM=0;
  }
}

注:若要实现不同角度的控制,只需要改变 PWM_count的值就好。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分