收藏 分享(赏)

4 舵机控制器软件的设计.doc

上传人:cjc2202537 文档编号:1195287 上传时间:2018-06-17 格式:DOC 页数:10 大小:387.50KB
下载 相关 举报
4 舵机控制器软件的设计.doc_第1页
第1页 / 共10页
4 舵机控制器软件的设计.doc_第2页
第2页 / 共10页
4 舵机控制器软件的设计.doc_第3页
第3页 / 共10页
4 舵机控制器软件的设计.doc_第4页
第4页 / 共10页
4 舵机控制器软件的设计.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、4 舵机控制器软件的设计舵机控制器的控制核心为单片机 AT89C2051。文中,程序用 C5l 编写,工作方式为前后台工作方式。单片机程序包括系统初始化程序、串口通信程序、上位机命令解释与 PWM 脉宽生成程序和多路 PWM 波形输出程序。串行通信程序和多路 PWM 波形输出程序采用中断方式。串口通信格式为渡特率 9600bps、8 位数据位、1 位停止位、无校验、ASCII 码字符通信。串口通信程序用于接收上位机发送过来的控制命令。控制命令采用自定义文本协议,即协议内容全部为 ASCII 码字符。通信协议格式如图 7 所示。例如,要控制通道 1 的 PWM 脉宽,脉宽系数为 25,则通信协议

2、内容为“#”“1”“0”“2”“5”“!”这 6 个字符。这时通道 l 的 PWM 占空比为 25256=O098。一个通道号对应一个 PWM 脉冲输出端口。本设计为 8 个通道,号码为 l8,对应单片机的 P1oP17。起始符和终止符起到帧同步的作用。串口通信程序流程如图 8 所示。图 8 中,CHNo 存放的是 PWM 通道号 ASCII 码,Dutyl00、DutylO、Duoyl分别存放的是脉宽系数的百位数、十位数和个位数的 ASCII 码(注意,若高位数为 O,则该位的字符应为“0”,不能省略。如 25,完整字符应为“O”“2”“5”。CharNo 为信号量,用于对串口接收的字符顺序

3、以及串口中断与上位机命令解释程序之间进行同步。6 结论本文提出的多路舵机控制器设计方法,以单片机 AT89C2051 为核心,由外部振荡电路提供 PWM 脉冲的定时基准,控制部分与舵机驱动部分由两个电源供电,两者电气隔离。这种设计方案的优点是:PWM 波形由外部振荡电路提供定时基准,与单片机内部振荡器的频率无关,不影响串口通信、定时器等参数的配置。PWM 波形的调整精度可任意确定。本没计思路可应用于任意多路的 PWM 输出,只要单片机能提供足够多的输出端口,例如将 AT89C2051 换成 AT89S5l,就可以提供至少 24 路的 PWM 输出(P0、Pl、P2)。控制参数由 SCI 串口输

4、入,适应面广,上位机可以是 PC 机、单片机或是PLC。本方法具有一般性,任何单片机只要能提供 SCI 中断、外部中断就可以应用本方法。图 1 舵机的控制要求单片机实现舵机转角控制可以使用 FPGA、模拟电路、单片机来产生舵机的控制信号,但 FPGA成本高且电路复杂。对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要 50Hz(周期是 20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用。5mV 以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于 5mV,所以滤波电路的精度难以达到舵

5、机的控制精度要求。也可以用单片机作为舵机的控制单元,使 PWM 信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为 PWM 信号输出到舵机,由于单片机系统是一个数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的 PWM 周期信号,本设计是产生 20ms 的周期信号;其次是脉宽的调整,即单片机模拟 PWM 信号的输出,并且调整占空比。当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将 20ms 分为两次中断执行,

6、一次短定时中断和一次长定时中断。这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。具体的设计过程:例如想让舵机转向左极限的角度,它的正脉冲为 2ms,则负脉冲为 20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在 2ms 后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为 18ms,再过 18ms 进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为 2ms,等待下次中断到来,如此往复实现 PWM 信号输出到舵机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使伺服机灵活运动。为保证软件在定时中断

7、里采集其他信号,并且使发生 PWM 信号的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是 20ms。软件流程如图 2 所示。如图 2 产生 PWM 信号的软件流程如果系统中需要控制几个舵机的准确转动,可以用单片机和计数器进行脉冲计数产生 PWM 信号。脉冲计数可以利用 51 单片机的内部计数器来实现,但是从软件系统的稳定性和程序结构的合理性看,宜使用外部的计数器,还可以提高 CPU的工作效率。实验后从精度上考虑,对于 FUTABA

8、 系列的接收机,当采用1MHz 的外部晶振时,其控制电压幅值的变化为 0.6mV,而且不会出现误差积累,可以满足控制舵机的要求。最后图 4 基于 8253 产生 PWA 信号的软件流程当系统的主要工作任务就是控制多舵机的工作,并且使用的舵机工作周期均为 20ms 时,要求硬件产生的多路 PWM 波的周期也相同。使用 51单片机的内部定时器产生脉冲计数,一般工作正脉冲宽度小于周期的 1/8,这样可以在 1 个周期内分时启动各路 PWM 波的上升沿,再利用定时器中断 T0 确定各路 PWM 波的输出宽度,定时器中断 T1 控制 20ms 的基准时间。第 1 次定时器中断 T0 按 20ms 的 1

9、/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.52.5ms 的正脉冲宽度)和舵机的转角(-9090)线性度较好。1. 什么是舵机:在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和

11、输出使得单片机系统非常容易与之接口。舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。还是看看具体的实物比较过瘾一点:2. 其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为

12、0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。3. 舵机的控制:舵机的控制一般需要一个 20ms 左右的时基脉冲,该脉冲的高电平部分一般为0.5ms2.5ms 范围内的角度控制脉冲部分。以 180 度角度伺服为例,那么对应的控制关系是这样的:0.5ms-0 度;1.0ms-45 度;1.5ms-90 度;2.0ms-135 度;2.5ms-180 度;请看下形象描述吧:这只是一种参考数值,具体的参数,请参见舵机的技术参数。小型舵机的工作电压一般为

13、4.8V 或 6V,转速也不是很快,一般为 0.22/60度或 0.18/60 度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。要精确的控制舵机,其实没有那么容易,很多舵机的位置等级有 1024 个,那么,如果舵机的有效角度范围为 180 度的话,其控制的角度精度是可以达到 180/1024 度约 0.18 度了,从时间上看其实要求的脉宽控制精度为 2000/1024us 约 2us。如果你拿了个舵机,连控制精度为 1 度都达不到的话,而且还看到舵机在发抖。在这种情况下,只要舵机的电压没有抖动,那抖动的就是你的控制脉冲了。而这个脉冲为什

14、么会抖动呢?当然和你选用的脉冲发生器有关了。一些前辈喜欢用 555 来调舵机的驱动脉冲,如果只是控制几个点位置伺服好像是可以这么做的,可以多用几个开关引些电阻出来调占空比,这么做简单吗,应该不会啦,调试应该是非常麻烦而且运行也不一定可靠的。其实主要还是他那个年代,单片机这东西不流行呀,哪里会哟!使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制 1 个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约 2 微秒的脉宽控制精度了。听说 AVR 也有控制 32 个舵机的试验板,不过精度能不能达到 2 微秒可能还是要泰克才知

15、道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以 2 微秒的宽度递增。为什么 FPPA 就可以很方便地将脉宽的精度精确地控制在 2 微秒甚至 2 微秒一下呢。主要还是 delay memory 这样的具有创造性的指令发挥了功效。该指令的延时时间为数据单元中的立即数的值加 1 个指令周期(数据 0 出外,详情请参见 delay 指令使用注意事项)因为是 8 位的数据存储单元,所以 memory 中的数据为(0255),记得前面有提过,舵机的角度级数一般为 1024 级,所以只用一个存储空间来存储延时参数好像还不够用的,所以我们可以采用 2 个内存单元来

16、存放舵机的角度伺服参数了。所以这样一来,我们可以采用这样的软件结构了:舵机驱动的应用场合: 1. 高档遥控仿真车,至少得包括左转和右转功能,高精度的角度控制,必然给你最真实的驾车体验.2. 多自由度机器人设计,为什么日本人设计的机器人可以上万 RMB 的出售,而国内设计的一些两三千块也卖不出去呢,还是一个品质的问题.3. 多路伺服航模控制,电动遥控飞机,油动遥控飞机,航海模型等伺服电机的工作原理:伺服电机是一个典型闭环反馈系统,其原理可由下图表示:减速齿轮组由电机驱动,其输出端带动一个线性的比例电位器作位置检测,该电位器把转角坐标转换为一比例电压反馈给控制线路板,控制线路板将其与输入的控制脉冲

17、信号比较,产生纠正脉冲,并驱动电机正向或反向地转动,使齿轮组的输出位置与期望值相符,令纠正脉冲最终趋于为 0,从而达到使伺服电机精确定位的目的。标准的伺服电机有三条控制线。分别为:电源、地及控制。电源线与地线用于提供内部的直流电机及控制电路所需的能源,电压通常介于 4V6V 之间,该电源应尽可能与处理系统的电源隔离(因为伺服马达会产生噪音)。甚至小伺服电机在重负载时也会拉低放大器的电压,所以整个系统的电源供应的比例必须合理。伺服电机的电源引线:伺服电机电源引线三条线中橙色的线是控制线,连到控制芯片上。红色的线是电源正极线,工作电压是 5V。 黑色的是地线伺服电机的运动速度:伺服电机的瞬时运动速度是由其内部的直流电机和变速齿轮组的配合决定的,在恒定的电压驱动下,其数值唯一。但其平均运动速度可通过分段停顿的控制方式来改变,例如,我们可把动作幅度为 90的转动细分为 128 个停顿点,通过控制每个停顿点的时间长短来实现 090变化的平均速度。对于多数伺服电机来说,速度的单位由“度数/秒”来决定。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 大学论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报