APP下载

基于STC15F2K60S2的多路PWM舵机控制器设计

2018-09-04姚强王亚刚

软件导刊 2018年6期
关键词:舵机中断上位

姚强 王亚刚

摘 要:舵机控制器在机器人控制技术中有重要应用,其性能优劣直接关系到多舵机系统能否正常工作。为解决采用控制芯片设计的舵机控制器多路数输出和高精度之间的矛盾,设计了一种新的舵机控制器,硬件采用高性能STC15F2K60S2单片机,在最大限度内缩短了中断服务时间,PWM波控制精度可达0.5us;软件采用分时复用思想,PWM波在20ms的信号周期内输出路数多达32路。经仿真软件验证,该设计在保证控制路数足够多的前提下极大提高了控制精度,并成功应用于7自由度持镜机械臂控制。

关键词:舵机控制器;STC15F2K60S2;PWM;持镜机械臂

DOI:10.11907/rjdk.172881

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2018)006-0132-04

Abstract:The steering gear controller plays an important role in robot control technology, and it has a direct influence on the multi-steering system. In order to solve the contradiction between multi-controlling channels and low accuracy of the steering gear controller, we adopt controller IC to design a new type of steering gear controller. The high-performance STC15F2K60S2 microcontroller is used to shorten the time of the interrupt service to the maxium. The control precision of PWM wave can reach 0.5us. The thought of time-sharing is adopted to produce no more than 32 PWM channels in 20ms signal period. The simulation software verifies that on the premise of enough controlling channels the new design greatly improves the controlling precision and can be successfully applied in controlling seven-DOF endoscope arm.

Key Words:steering gear controller; STC15F2K60S2; PWM; endoscope arm

0 引言

舵机控制器设计是机械臂控制的关键技术之一。目前舵机的PWM控制信号生成方法可概括为3大类:第一类是基于分立器件的产生方法[1],它的实现电路比较复杂,而且精度难以控制,信号质量不高;第二类是基于可编程逻辑器件(PLD)的产生方法[2-3],该方法可产生多路高精度PWM,但是设计复杂,成本较高,只有在高要求场合下才可使用;第三类是基于单片机的产生方法[4-6],简单易实现,成本较低,而且精度也较高。但是传统的基于单片机的舵机控制器存在一个难以调和的矛盾,即输出PWM多路数和PWM高精度不可兼得,如7路高精度舵机控制器[7-8],24路低精度舵机控制器[9]和基于74HC595扩展的多路舵机控制器[10]。为解决这一问题,设计了一款基于高性能8位单片机STC15F2K60S2的舵机控制器。

1 PWM舵机控制器硬件设计

1.1 舵机控制原理[11]

舵机一般有3根引线,分别是电源线、地线、信号线。Robo-Soul公司生产的LDX-218舵机所需的电压为6-7.4V,其中信号线是PWM输入线,通过改变PWM脉宽可以达到控制舵机转动角度的目的。如图1所示,PWM信号周期为20ms,高电平最小为0.5ms,最大为2.5ms,对应电机的转动角度为0°和180°。

1.2 舵机控制器硬件设计方案

1.2.1 控制芯片选择

本设计采用宏晶科技公司生产的STC15F2K60S2单时钟/机器周期(1T)单片机,它是高速、低功耗和超强抗干扰新一代8051单片机,指令代码完全兼容传统8051,但速度快7-12倍;工作频率为5~35MHz,相当于普通8051的60~420MHz。鉴于舵机控制器需要32路PWM输出,选择LQFP44封装,它具有通用P0、P1、P2、P3和P4五个通用I/0口,不需要外部晶振,通过程序即可设置内部晶振频率,满足舵机控制器多I/O口和高执行效率的要求,控制芯片及外围电路如图2所示。

1.2.2 串口通讯电路设计

选择CH340T作为USB转串口芯片,USB既作为通讯接口,接收上位机传输过来的控制信号,同时也给单片机供电。用单片机的串口1作为通讯接口,即P3.0口和P3.1口,其电路图如3所示。

2 PWM舵机控制器软件设计

2.1 输出多路PWM算法实现

2.1.1 多路PWM产生原理

如图4所示,设置芯片内部晶振频率为24M,采用1个16位定时器,基准时间是1个机器周期为0.5us。上位机将角度数据转化为下位机定时器初值。对于0°-180°之间的任意角度可按照(1)式轉换,其中θ为待转角度,f为下位机晶振频率,12个时钟周期(1个机器周期)定时器进行一次减1操作。

2.1.2 软件设计

上位机主要完成数据预处理工作,包括将角度转换为下位机定时器初值,对32路PWM定时器初值进行排序,在充分考虑时间和空间复杂度的基础上选择插入排序算法[12]按照升序进行排列。

下位机主要完成如下操作步骤:

Step1:将上位机传输过来的32路PWM定时器计数值的每1路封装成1个结构体。

Struct PWM_Tcnt

{

unsigned int count;//计数值

bit flag; //对应的输出端口

}

Step2:定义一个结构体数组并初始化

Struct PWM_Tcnt PWMOUT[33];

Step3:按照如下算法更新结构体数组。

PWMOUT[i].count=PWMOUT[i+1].count-PWMOUT[i+1].count,i=1,2...31PWMOUT[32]=2^16-20ms0.5us-PWMOUT[32].count

Step4:将所有PWM输出口置高,开启定时中断。

Step5: 中断处理任务中关闭定时时间已到的PWM输出端口,同时更新下一路计数值。

Step6:在周期20ms剩余时间内完成接收上位机数据。

Step7:周期定时20ms时间一到,立即跳转至Step1。

产生多路PWM信号流程图分为上位机和下位机,上位机和下位机通过串口1通信,如图5所示。

2.2 舵机调速方法

舵机属于位置伺服控制系统,通过改变PWM脉冲宽度对角度实现精确控制,如控制舵机转动θ角度,此时对应的脉冲宽度为Pw,可以设置脉冲宽度按照阶梯型递增, 如图6所示。舵机角速度就受脉冲宽度的切换速度控制,进而达到舵机调速目的,其步进值Inc通过N调节,如式(2)。

3 方法验证

在单片机仿真与开发领域,Proteus 有独特的优势,它可以从理论层面验证可行性,从而缩短开发周期,降低开发成本。仿真实验中选用AT89C52对8路PWM输出进行方法验证,经实验证明该算法能稳定输出8路稳定PWM波形,如图7所示。

4 7自由度持镜机械臂的舵机控制实验结果及分析

4.1 舵机控制器试验结果

为了验证方案实际控制效果,针对图8(a)所示的7自由度持镜机械臂[13-14]样机进行控制实验,机械臂的7个自由度分别是机械臂整体上下滑动、肩旋转、肩摆动、肘旋转、肘摆动、腕旋转和腕摆动,如图8(b)所示。对机械臂的旋转范围、定位精度、重复精度[15-16]进行评定,评定结果如表1所示,评定方法如下:

旋转范围:PWM脉宽设置为0.5ms和2.5ms,测定关节的旋转角度,测10次求取平均值。

定位精度:测定脉宽为0.5ms、0.7ms、0.9ms、1.1ms、1.3ms、1.5ms、1.7ms、1.9ms、2.1ms、2.3ms和2.5ms的10组关节旋转角度数据,定位精度为10次不同位置偏差值的均值。

重复精度:测定同一位置固定转角10次,其重复精度可按如下公式求得:

4.2 舵机控制器试验结果分析

实验结果存在误差,这些误差有来源于硬件的,如舵机固有误差和传感器误差等,还有来自PWM生成算法本身的软件误差。本文主要分析来源于算法本身的误差。PWM脉宽的控制精度主要由进入中断、退出中断和中断服务程序处理三段时间的大小决定,其中进入中断、退出中断时间相对稳定,可通过修改定时时间弥补和完善;对于中断服务时间则需要通过高性能芯片尽量缩短中断服务时间来弥补。本设计采用的芯片PWM是一款廉价高性能单片机、对于工作频率要求不是很高,如50HZ就能够达到理想效果。

5 结语

采用高性能单片机STC15F2K60S2作为控制芯片,它能够最大限度缩短中断服务处理重装定时器初值和拉低相应PWM输出端口程序所耗费的时间,同时它还具有多个I/O口,便于扩展多路PWM输出的需求。首先对多路PWM脉冲宽度排序,然后置高所有PWM输出端口,再按照脉宽由窄至宽的顺序清零输出端口,最后所有PWM输出端口拉低后,再重复上述过程即可实现多路PWM连续输出。该方法具有多路输出和高精度的特点,适宜于应用在多舵机控制场合。另外针对于舵机调速只给出引导方法,具体实现还有待进一步研究。

参考文献:

[1] 侯志勇.由时基电路 NE555 组成的 PWM直流电机调速电路[J].河南机专学报,1997,5(1):30-33.

[2] 林王坚,冯浩,华亮.一种基于 VHDL与 CPLD器件的 PWM发生器[J].机电工程,2008,25(2):93-99.

[3] 张岩,宋翔.基于 FPGA 的高精度PWM 发生器设计与实现[J].微计算机信息,2009,25(1-2):160-163.

[4] 冯晓伟,王雷阳,李正生.多路舵机控制PWM发生器的设计与Proteus仿真[J].现代电子技术,2011,34(11):167-169.

[5] 方庆山,林春方.一种基于AT89C2051的多路舵机控制方案设计[J].微特电机,2009,1(7):56-58.

[6] 付丽,刘卫国,伊强.单片机控制的多路舵机用PWM波产生方法[J].微特电机,2006, 3(4): 28-33.

[7] 刘歌群,卢京潮,闫建国,薛尧舜.用单片机产生7路舵机控制PWM波的方法[J].机械与电子,2004,1(2):76-78.

[8] 韩庆瑶,洪草根,朱晓光.基于AVR单片机的多舵机控制系统设计及仿真[J].计算机测量与控制,2011,19(2): 332-335.

[9] 梁锋,王志良,解仑,徐文学.多舵机控制在类人机器人上的应用[J].机器人技术,2008,24(1-2):227-229.

[10] 邵平,莫燕斌,连晋平,陈元滨.一种基于74HC595产生舵机用多路PWM波的方法[J].肇庆学院学报,2013,34(5):1-5.

[11] 王晓枫,华云松.基于双足负载机器人的大功率舵机的设计[J].电子科技,2017,30(3):170-173.

[12] 刘模群.排序算法时间复杂度研究[J].软件导刊,2012,11(6):35-38.

[13] 袁金生.冗余自由度持镜机械臂的设计[D].哈尔滨:哈尔滨工业大学,2011.

[14] 董光友.腹腔微创手术机器人机械臂的设计及研究法[D].长春:吉林大学,2016.

[15] 费业泰.误差理论与数值处理[M].北京:机械工业出版社,1983.

[16] 何洪军,张东宁,馬传宝.机械手臂重复定位精度和运动速度测量实验研究[J].微特电机,2016,44(3):34-36.

(责任编辑:江 艳)

猜你喜欢

舵机中断上位
含齿隙弹载舵机的全局反步模糊自适应控制
特斯拉 风云之老阿姨上位
基于dsPIC单片机的飞艇舵机控制实现
跟踪导练(二)(5)
千里移防,卫勤保障不中断
基于高速同步485总线通信的多通道舵机控制器设计
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
以新思路促推现代农业上位
基于云模型的舵机同步控制