51单片机控制舵机

舵机简介

舵机一般由舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等。一般情况下舵机的信号线为黄色或白色,电源分4.8V和6V,分别对应不同的转矩标准。

舵机工作原理

舵机的控制信号是周期为20ms的脉宽调制信号(pwm),其中脉冲宽度从0.5ms~2.5ms,相对应的舵盘位置0~180度,成线性变化。即给它提供一个一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩如何变化,直到给它提供另外一个宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机转动信号。由此,舵机是一种位置伺服驱动器,;转动范围不超过180度。

当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

PWM控制方法

PWM通过占空比来控制舵机,占空比周期T=20ms,高电平方波持续时间为0.5ms~2.5ms.对应舵机角度为:


我使用晶振为11.0592MHZ的51单片机进行舵机控制:

T = 20ms,我们可以定时器0(方式1)来计数。每次0.1ms。如果计数达到200则说明一个周期到了,计数清0 

11.0592MHz的晶振       ( 0.1ms       TH0 = 0xff,TL0 = 0xa3  ) 

对于t = 0.5ms~2.5ms 的产生,写程序时我们可以采用全局变量。让全局变量等于5~25之间,因为舵机的一个计数周期是0.1ms,这样全局变量的5~25正好就是0.5ms~2.5ms


PWM波产生思路:将信号管脚线初始化为低电平,然后写一个while循环,在循环中将该管脚置为为高电平,延时,再拉低为低电平,如此循环产生PWM波,以高电平产生时间来控制舵机转动角度。

注意:5mv以上的控制电压的变化就会引起电机的抖动。

基于单片机的控制:

使用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。

单片机系统实现对舵机输出转角的控制,必须先完成两个任务:

1、产生    PWM周期信号,本设计产生一个20ms的周期信号;

2、脉宽的调整,即单片机模拟PWM信号的输出,并调整占空比。

当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。


 具体的设计过程:例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到舵机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使伺服机灵活运动。


  为保证软件在定时中断里采集其他信号,并且使发生PWM信号的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是20ms。

如果系统中需要控制几个舵机的准确转动,可以用单片机和计数器进行脉冲计数产生PWM信号。

脉冲计数可以利用51单片机的内部计数器来实现,但是从软件系统的稳定性和程序结构的合理性看,宜使用外部的计数器,还可以提高CPU的工作效率。

 当系统的主要工作任务就是控制多舵机的工作,并且使用的舵机工作周期均为20ms时,要求硬件产生的多路PWM波的周期也相同。使用51单片机的内部定时器产生脉冲计数,一般工作正脉冲宽度小于周期的1/8,这样可以在1个周期内分时启动各路PWM波的上升沿,再利用定时器中断T0确定各路PWM波的输出宽度,定时器中断T1控制20ms的基准时间。

   第1次定时器中断T0按20ms的  1/8设置初值,并设置输出I/O口,第1次T0定时中断响应后,将当前输出I/O口对应的引脚输出置高电平,设置该路输出正脉冲宽度,并启动第2次定时器中断,输出I/O口指向下一个输出口。第2次定时器定时时间结束后,将当前输出引脚置低电平,设置此中断周期为20ms的1/8减去正脉冲的时间,此路PWM信号在该周期中输出完毕,往复输出。在每次循环的第16次(2×8=16)中断实行关定时中断T0的操作,最后就可以实现8路舵机控制信号的输出。
   
   在实际应用中,采用51单片机简单方便地实现了舵机控制需要的PWM信号。对机器人舵机控制的测试表明,舵机控制系统工作稳定,PWM占空比 (0.5~2.5ms 的正脉冲宽度)和舵机的转角(-90°~90°)线性度较好。


    








   

 

  





猜你喜欢

转载自blog.csdn.net/qq_36192043/article/details/80812947