周团坤,张 莹,杨晓明,张 尼,沈 坤
(西安西北有色地质研究院有限公司,西安 710054)
步进电机的工作原理,是每接收一个电脉冲信号就按照设定的方向转过一个固定的角度,可以通过控制电脉冲信号数量的方式来控制电机的角位移量,控制单位时间内脉冲信号的数量来控制电机的速度[1]。但是在实际使用过程中,由于控制不合理,步进电机启动和停止时会发生失步或过冲现象,因此电机启动和停止时必须有一个加速和减速的过程。
常见的加减速算法有直线加减速、指数曲线加减速、S形曲线加减速等[2],这些算法各有特点。S形曲线加减速由于其加速度和速度曲线的连续性[3-4],能够保证步进电机在运动过程中速度和加速度没有突变,减小冲击,提高步进电机的平稳性,常被应用于精确控制如数控系统、医疗器械和机器人系统等。
传统的S形加减速曲线算法,需要控制器实时计算曲线得到电机的运行所需脉冲频率,对控制器性能要求较高[5]。本文通过对S形加减速曲线进行离散化的方法,将电机运行加减速所需速度比值先行存进数组中,在控制电机运行以前即算出每一步所需的脉冲频率,因此简化了控制器的运算量。并且,采用了2个定时器的设计,一个定时器负责输出脉冲,另一个定时器负责对脉冲计数,从而达到精确控制步进电机的目的。
STM32F103RC是ST公司生产的一款使用ARM Cortex-M3 32位RISC内核的高性能单片机。主时钟频率为72 MHz,片内集成256 kB闪存和48 kB的 SRAM,STM32F103RC包含 2个 12位的 ADC、4个通用16位定时器、2个PWM定时器和2个普通16位定时器,还包含多种标准、先进的通讯接口。
STM32作为主控制器,通过Modbus通讯协议,接收上位机人机界面(HMI)的运动指令以及设定参数,如位移、速度、方向等,使STM32按照设定的运动参数输出相应的控制脉冲至步进电机驱动器,继而控制步进电机的运动状态。Modbus协议功能完善、协议开放、使用简单,已经成为一种通用的工业标准[6]。系统中,使用Modbus协议中的RTU模式,人机界面(HMI)作为主机,可输入方向、位移、速度、启停等信息;STM32作为从机,接收HMI的指令与参数,计算并输出脉冲给步进电机驱动器从而控制步进电机。系统的构成如图1所示。
图1 系统构成Fig.1 System components
S形加减速曲线是目前较新的运动控制算法[7],它是由被控对象在加减速阶段的速度曲线呈S形而得来的。S形加减速曲线算法并不是一种固定的算法,其中logistic函数的图形是一个连续光滑的S形,同时是一个严格的递增函数,在线性和非线性之间显示出很好的平衡[8]。在此,利用该函数得到0~1之间的一段S形曲线,以此作为各时刻速度的系数,构建步进电机的加减速曲线。其定义公式为
式中:a为函数倾斜参数,控制函数的斜率,a值越大曲线的线性部分斜率越大。当x取一组对称数列,如-5,-4.9,…,0,…,4.9,5 时,a 分别取值1.0,2.0,3.0,对应的曲线如图2所示。可以看出,曲线均呈S形且中心对称,开始增长缓慢,然后在某一范围内迅速增长,达到一定程度后,增长又缓慢下来,最终趋于一个稳定值。这正好适合电机的加速轨迹,既符合了加速曲线的形态,又可以快速进入目标速度。
图2 具有不同倾斜参数a的logistic函数Fig.2 Logistic function with different cutting parameters
当选取a=1时,x值从-5开始,以0.1作为步进,到5结束,可以得到101个从0到1递增的值,其图形如图2中a=1曲线所示。这样,就把加速曲线离散化为101个点,相当于用100个台阶对曲线进行逼近,如此完成了对S形加减速曲线的离散化。离散化后各点对应的线速度为
式中:vi为各点对应的线速度;vp为目标线速度;xi为各点对应的x值。
由于步进电机属于开环控制系统,没有信号反馈,为了更精确控制步进电机,采用由2个定时器共同控制步进电机的设计思路,如图3所示。
图3 定时器设置Fig.3 Timer setting
2个定时器分别称为定时器P和定时器C。定时器P的作用是发出脉冲至与门Y输入端YP,定时器C以定时器P的脉冲为时钟源进行计数,并输出控制与门输入端YC,步进电机运行时定时器C恒输出高电平值与门YC端。与门输出端直接连接驱动器,驱动步进电机。当定时器C计数值达到设定值时,进入定时器C中断,在中断中设置与门输入端YC为低电平,阻断与门输出,然后关闭定时器P和定时器C。
先选取高级定时器或者通用定时器作为定时器P,在此选取通用定时器3即TIM3为定时器P,设置定时器P工作于PWM模式2,使用系统时钟源72 MHz,预分频器设为71,允许自动重装载预装载,占空比设置为50%,设置完成后关闭定时器P。计算定时器输出PWM频率公式为
式中:SYSclk为72 MHz;PSC为 71;当ARR取值范围为0~65535时,TIM3输出脉冲频率范围为16 Hz~1 MHz,基本满足步进电机的需求。
然后,选取可以与定时器P搭配的定时器作为定时器C,设置定时器C时钟源为定时器P的输出。允许定时器C溢出中断,设置完毕后关闭定时器C。
线速度与转速的转换公式为
式中:v为线速度;n为转速;d为电机转轴的直径。根据式(4),人机界面HMI输入的线速度,可以转换为
式中:vp为设定的线速度。步进电机转速公式为
可以得出步进电机转速为
式中:f为步进电机接收到的脉冲频率;θ为步进电机细分后的固有步距角。根据式(3),可以得出相应线速度下的TIM3自动重装寄存器值为
综合式(5)、式(7)、式(8)可以得出相应的线速度下,TIM3自动重装值寄存器值为
然后建立一个数组TIM3_ARR[101],则根据式(2)可知:
式中:xi从-5开始,以0.1作为步进,到5结束。
最后,设人机界面输入的线位移为S,则完成线
位移所需的脉冲数为
这样,就得到了加速各阶段TIM3自动重装寄存器的值,以及完成位移所需的总脉冲数。
S形曲线加减速通常有2种情况,一种是3段式,包括加速阶段、匀速阶段及最后的减速阶段,如图4(a)所示;另一种是2段式,包括加速阶段和减速阶段,如图 4(b)所示。
图4 两种S形曲线Fig.4 Two S-curves
这2种S形曲线的区别在于其匀速阶段,因此在控制时应区别对待。在控制器接收到HMI发送的线速度和线位移值后,可以根据式(10)得出各加速阶段的定时器自动重装寄存器值,根据式(11)得到所需的总脉冲数。然后,根据实际情况设置加速阶段所需总时间T,则加速阶段每段分配到的时间为。
整个软件执行过程如下:
过程1定时器P开始以加速第1阶段的自动重装寄存器值TIM3_ARR[0]启动,开始输出脉冲信号至驱动器从而驱动步进电机以加速第1阶段的速度运行,并且定时器C开始计数;
过程2经过时间t后,先检查定时器C统计到的脉冲数是否超过总脉冲数的1/2,如果已经超过则表明本次加减速曲线为2段式曲线,然后转到过程5;如果没有超出,则将定时器P的自动重装寄存器按顺序依次重装载,然后重复过程2;
过程3当定时器P自动重装寄存器值装载到TIM3_ARR[100]时,即表示整个加速阶段完成,此时读取定时器C统计到的脉冲数Pac。由于加速阶段和减速阶段是一个对称的结构,因此匀速阶段的脉冲数Pun应为Pun=Pall-2Pac。定时器C清零,开始重新计数,并设置计数目标为Pun,即匀速阶段完成后定时器C溢出进入中断;
过程4进入定时器C溢出中断,此时匀速阶段已完成,准备开始进入减速阶段,定时器P自动重装寄存器值设为TIM3_ARR[99],定时器C清零,并将计数目标设为Pac,溢出则说明减速阶段完成;
过程5经过时间t后,将定时器P的自动重装寄存器值按降序依次装载,然后重复过程5;
过程6进入定时器C溢出中断或者定时器P自动重装寄存器已装载至最低位,首先将定时器C输出至与门的YC设为低电平,阻断驱动器接收脉冲,然后将定时器P、定时器C关闭。整个S形曲线加减速完成。
软件流程如图5所示。
图5 软件流程Fig.5 Software flow chart
为了验证步进电机的实际运行速度变化是否符合S曲线,采用光电式脉冲编码器配合上位机软件示波器作为测试系统。设置步进电机线速度为120 mm/s,线位移为280 mm,步进电机型号为42BYGH101混合式步进电机,步距角1.8°,驱动器细分数设为16细分,电机轴转子直径为6 mm。实测的速度曲线截屏如图6所示,其中横坐标轴为时间,纵坐标轴为电机线速度。由图可见,加减速过程曲线S形特征明显,曲线中间部分为匀速过程,速度保持在120 mm/s。验证结果表明,符合试验预期,该S形曲线离散化,能够使步进电机快速平滑地按照S形曲线完成加/减速过程。
图6 S形曲线加减速离散化验证Fig.6 S-curve acceleration and deceleration discretization verification
在步进电机的加减速过程中,S形曲线是常用的一种较为精确的算法,启动和停止时都比较平稳,可以根据不同的电机性能调整速度的变化率。本文在常用的S形曲线的基础上提出了一种离散化的解决方法,简化了S形曲线复杂的计算,并且通过双定时器的应用,提高了电机控制的精度。试验证明,通过该方法STM32控制器很好地驱动步进电机,完成S形曲线加/减速过程,解决了步进电机失步、堵转等问题。目前方法已应用于步进电机实际控制工作中。
[1]坂本正文.步进电机应用技术[M].王自强,译.北京:科学出版社,2015:1-14.
[2]崔洁,杨凯,肖雅静,等.步进电机加减速曲线的算法研究[J].电子工业专用设备,2013,43(8):45-49.
[3]蔡锦达,石恩琪,储茂兵.基于单片机的步进电机S形曲线调速控制[J].包装工程,2007,28(7):77-78.
[4]唐小琦,何王勇,李勇波.一种预判插补时间的S形加减速插补算法[J].中国机械工程,2011,22(23):2794-2797.
[5]王勇,王伟,杨文涛.步进电机升降速曲线控制系统设计及其应用[J].控制工程,2008,15(5):576-579.
[6]朱懿,蒋念平.Modbus协议在工业控制系统中的应用[J].微计算机信息,2006,22(10):118-120.
[7]李晓菲,胡鸿.步进电机加减速控制规律[J].机电产品开发与创新,2006,19(1):122-123.
[8]陈爱国,黄文玲,杨红红.步进电机升降速曲线的研究[J].机电产品开发与创新,2003,16(2):47-49.