舵机控制程序要点.pdf
《舵机控制程序要点.pdf》由会员分享,可在线阅读,更多相关《舵机控制程序要点.pdf(24页珍藏版)》请在三一文库上搜索。
1、在机器人机电控制系统 中,舵机控制效果是性能 的重要影响因素 。舵机可 以在微机电系统和航模中 作为基本的输出执行机 构,其简单的控制和输出 使得单片机系统非常容易 与之接口。 舵机是一种位置伺服的 驱动器,适用于那些需要 角度不断变化并可以保持 的控制系统。其工作原理 是:控制信号由接收机的 通道进入信号调制芯片, 获得直流偏置电压。它内 部有一个基准电路,产生 周期为 20ms,宽度为 1.5ms的基准信号, 将获 得的直流偏置电压与电位 器的电压比较,获得电压 差输出。最后,电压差的 正负输出到电机驱动芯片 决定电机的正反转。当电 机转速一定时,通过级联 减速齿轮带动电位器旋 转,使得电
2、压差为 0 ,电机 停止转动。舵机的控制信 号是 PWM信号,利用占 空比的变化改变舵机的位 置 。一般舵机的控制要求如图1 所示。 图 1 舵机的控制要求 单片机实现舵机转角控制 可以使用 FPGA、模拟电路、单片机来产生舵机的控制信号,但FPGA 成本 高且电路复杂。 对于脉宽调制信号的脉宽变换, 常用的一种方法是采用调制信号 获取有源滤波后的直流电压,但是需要50Hz( 周期是 20ms) 的信号,这对运放 器件的选择有较高要求,从电路体积和功耗考虑也不易采用。5mV 以上的控制电压的变化就 会引起舵机的抖动,对于 机载的测控系统而言,电 源和其他器件的信号噪声 都远大于 5mV , 所
3、以滤波 电路的精度难以达到舵机 的控制精度要求 。 也可以用单片机作为舵机的控制单元,使PWM 信号的脉冲宽度实现微秒级 的变化,从而提高舵机的转角精度。 单片机完成控制算法, 再将计算结果转化为 PWM 信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完 全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。 单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产 生基本的 PWM 周期信号,本设计是产生20ms 的周期信号;其次是脉宽的调 整,即单片机模拟 PWM 信号的输出,并且调整占空比。当系统中只需要实现一 个舵机的控制,采用的控制方式是改变单片机的一个定时
4、器中断的初值,将 20ms 分为两次中断执行, 一次短定时中断和一次长定时中断。这样既节省了硬 件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。 具体的设计过程 : 例如想让舵机转向左极 限的角度,它的正脉冲为 2ms ,则负脉冲为 20ms-2ms=18ms, 所 以开始时在控制口发送高 电平,然后设置定时器在 2ms后发生中断, 中断发 生后,在中断程序里将控 制口改为低电平,并将中 断时间改为 18ms,再过 18ms进入下一次定时中 断,再将控制口改为高电 平,并将定时器初值改为 2ms , 等待下次中断到来, 如此往复实现 PWM信号 输出到舵机。 用修改定时 器中断初值
5、的方法巧妙形 成了脉冲信号,调整时间 段的宽度便可使伺服机灵 活运动。 为保证软件在定时中断里采集其他信号,并且使发生PWM 信号的程序不影 响中断程序的运行 (如果这些程序所占用时间过长,有可能会发生中断程序还未 结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过 程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是 20ms 。 软件流程如图 2 所示。 图 2 产生 PWM 信号的软件流程 如果系统中需要控制几个舵机的准确转动,可以用单片机和计数器进行脉冲 计数产生 PWM 信号。 脉冲计数可以利用51 单片机的内部计数器来实现,但是从软件系统的稳定 性和
6、程序结构的合理性看, 宜使用外部的计数器, 还可以提高 CPU 的工作效率。 实验后从精度上考虑,对于FUTABA 系列的接收机,当采用1MHz 的外部晶振 时,其控制电压幅值的变化为0.6mV ,而且不会出现误差积累,可以满足控制 舵机的要求。最后考虑数字系统的离散误差,经估算误差的范围在0.3% 内, 所以采用单片机和8253 、8254 这样的计数器芯片的PWM 信号产生电路是可 靠的。图 3 是硬件连接图。 图 3 PWA 信号的计数和输出电路 (点击放大 ) 基于 8253 产生 PWM 信号的程序主要包括三方面内容: 一是定义 8253寄存器 的地址,二是控制字的写入,三是数据的写
7、入。软件流程如图4 所示,具体代 码如下。 1./ 关键程序及注释: 2./ 定时器 T0 中断,向 8253 发送控制字和数据 3.void T0Int() interrupt 1 4. 5. TH0 = 0xB1; 6. TL0 = 0xE0; /20ms的时钟基准 7./ 先写入控制字,再写入计数值 8. SERVO0 = 0x30; /选择计数器0,写入控制字 9. PWM0 = BUF0L; /先写低,后写高 10. PWM0 = BUF0H; 11. SERVO1 = 0x70; /选择计数器1,写入控制字 12. PWM1 = BUF1L; 13. PWM1 = BUF1H; 1
8、4. SERVO2 = 0xB0; /选择计数器2,写入控制字 15. PWM2 = BUF2L; 16. PWM2 = BUF2H; 17. 图 4 基于 8253 产生 PWA 信号的软件流程 当系统的主要工作任务就是控制多舵机的工作,并且使用的舵机工作周期均 为 20ms 时,要求硬件产生的多路PWM 波的周期也相同。 使用 51 单片机的内 部定时器产生脉冲计数,一般工作正脉冲宽度小于周期的1/8 ,这样可以在 1 个周期内分时启动各路PWM 波的上升沿,再利用定时器中断 T0 确定各路 PWM 波的输出宽度,定时器中断T1 控制 20ms 的基准时间。 第 1 次定时器中断 T0 按
9、 20ms的 1/8 设置初值,并设置输出I/O 口,第 1 次 T0 定时中断响应后,将当前输出I/O 口对应的引脚输出置高电平,设置该 路输出正脉冲宽度,并启动第2 次定时器中断,输出I/O 口指向下一个输出口。 第 2 次定时器定时时间结束后,将当前输出引脚置低电平,设置此中断周期为 20ms 的 1/8 减去正脉冲的时间,此路PWM 信号在该周期中输出完毕,往复 输出。在每次循环的第16 次(28=16)中断实行关定时中断T0 的操作,最后 就可以实现 8 路舵机控制信号的输出。 也可以采用外部计数器进行多路舵机的控制,但是因为常见的 8253 、 8254 芯片都只有 3 个计数器,
10、所以当系统需要产生多路PWM 信号时,使用上述方法 可以减少电路, 降低成本, 也可以达到较高的精度。 调试时注意到由于程序中脉 冲宽度的调整是靠调整定时器的初值,中断程序也被分成了8 个状态周期,并 且需要严格的周期循环,而且运行其他中断程序代码的时间需要严格把握。 在实际应用中,采用51 单片机简单方便地实现了舵机控制需要的PWM 信 号。对机器人舵机控制的测试表明,舵机控制系统工作稳定,PWM 占空比 (0.5 2.5ms 的正脉冲宽度 )和舵机的转角 (-90 90 )线性度较好。 如何使用 AT89S52 编写这样一个程序。 要求,单片机控制舵机,让舵机到中间位置后,左转15 度,
11、延迟 2ms, 右转 15 度。(度数不要求精确) 。 舵机为 0.52.5ms。 晶振 12M #include unsigned int pwm; unsigned char flag; sbit p10=P10; void timer0() interrupt 1 using 1 p10=!p10; pwm=20000-pwm; TH0=pwm/256; TL0=pwm%256; flag+; if(flag #define uint8 unsigned char #define uint16 unsigned int sbit key1=P14; sbit key2=P15; /PWM
12、的输出端口 sbit PWM_OUT0=P00; sbit PWM_OUT1=P01; sbit PWM_OUT2=P02; sbit PWM_OUT3=P03; sbit PWM_OUT4=P04; sbit PWM_OUT5=P05; sbit PWM_OUT6=P06; sbit PWM_OUT7=P07; /PWM的数据值 uint16 PWM_Value8=1500,1000,1500,1000,1750,2000,2500,2000; uint8 order1; / 定时器扫描序列 /*= 定时器 T0 的中断服务程序 一个循环 20MS = 8*2.5ms =*/ void ti
13、mer0(void) interrupt 1 using 1 switch(order1) case 1: PWM_OUT0=1; TH0=-PWM_Value0/256; TL0=-PWM_Value0%256; break; case 2: PWM_OUT0=0; TH0=-(2700-PWM_Value0)/256; TL0=-(2700-PWM_Value0)%256; break; case 3: PWM_OUT1=1; TH0=-PWM_Value1/256; TL0=-PWM_Value1%256; break; case 4: PWM_OUT1=0; TH0=-(2700-PW
14、M_Value1)/256; TL0=-(2700-PWM_Value1)%256; break; case 5: PWM_OUT2=1; TH0=-PWM_Value2/256; TL0=-PWM_Value2%256; break; case 6: PWM_OUT2=0 ; TH0=-(2700-PWM_Value2)/256; TL0=-(2700-PWM_Value2)%256; break; case 7: PWM_OUT3=1; TH0=-PWM_Value3/256; TL0=-PWM_Value3%256; break; case 8: PWM_OUT3=0; TH0=-(27
15、00-PWM_Value3)/256; TL0=-(2700-PWM_Value3)%256; break; case 9: PWM_OUT4=1; TH0=-PWM_Value4/256; TL0=-PWM_Value4%256; break; case 10: PWM_OUT4=0; TH0=-(2700-PWM_Value4)/256; TL0=-(2700-PWM_Value4)%256; break; case 11: PWM_OUT5=1; TH0=-PWM_Value5/256; TL0=-PWM_Value5%256; break; case 12: PWM_OUT5=0; T
16、H0=-(2700-PWM_Value5)/256; TL0=-(2700-PWM_Value5)%256; break; case 13: PWM_OUT6=1; TH0=-PWM_Value6/256; TL0=-PWM_Value6%256; break; case 14: PWM_OUT6=0; TH0=-(2700-PWM_Value6)/256; TL0=-(2700-PWM_Value6)%256; break; case 15: PWM_OUT7=1; TH0=-PWM_Value7/256; TL0=-PWM_Value7%256; break; case 16: PWM_O
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 舵机 控制程序 要点
链接地址:https://www.31doc.com/p-5211828.html