张航宁, 李文新, 梁 绪
兰州空间技术物理研究所,兰州 730000
步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机,由于其结构简单、开环精度高、成本低等优点而在大量中低端场合得到广泛应用.步进电机的加减速过程需要遵循一定的速度曲线,目前常用的速度曲线方案主要有梯形、指数形、抛物线形和S形等.
最近几年人们对步进电机的研究主要专注于解决步进电机存在的低速易振荡和高速易失步等问题[1-2],以及精度不够高、扭矩纹波大、能量效率低[3-4]等问题,或重点研究电机模型以及如何设计速度曲线能够充分利用步进电机的矩频特性[5-7],但在很多由微控制器驱动的嵌入式系统中,对电机性能要求不高,而且由于受到微控制器的计算速度的影响,过于复杂的算法也限制了电机和CPU系统性能的发挥[8],对于临时修改运行参数的情况也少有研究.
为了精确地设计梯形速度曲线,文献[9]提出了利用定时器生成脉冲的方法,在每次定时器溢出后重新计算下一次定时器计时时长并设置为下一次定时器的溢出值.文献[10]在其基础上进行了改进,将步进电机必须从零速度开始的限制条件推广到可以从任意速度启动,首先提出了“实时”设计速度曲线的思想,并从理论上对误差进行了分析.在人们不断提出速度曲线的理论方法时,也不断有人将这一算法进行应用,如文献[11]将这一算法应用于FPGA,文献[8]将其应用于微控制器,并提出了如何使加速度不突变的方法等.但这些方法和应用场景都不适用于需要随时对电机运行参数进行修改的场合,如机器人或雷达等场合中需要对目标进行随动跟踪,不断调整跟踪目标和运动速度等.虽然文献[12]在使用这一算法时考虑到了在到达期望速度时就临时开始减速的特殊情况,但对于需要临时改变速度、加速度、方向等,以及初速不为零等特殊情况处理仍然较为复杂,且国内外尚未找到合适的能解决所有特殊情况的解决方案.
自抗扰控制理论是韩京清提出的一种简单实用的控制方法[13],其核心由跟踪微分器(tracking differentiator, TD)、扩张状态观测器(extended state observer,ESO)和状态误差非线性组合控制律(state error nonlinear control law, SENCL) 3个部分组成.自抗扰控制算法中的跟踪微分器一般用于输入指令信号及其微分信号的滤波[14],由于其良好的滤波和跟踪效果,在得到了广泛应用的同时[15-17]人们也对其进行了大量改进[18-19],其跟踪输入信号的思想却可用于步进电机指定脉冲步数的控制中.
为了完善地解决前文所述特殊情况,本文利用跟踪微分器的思想提出了一种新的方法,将电机的设定转动角度看作原始信号,电机的实际转动角度看作跟踪信号,并提出了将控制周期和电机脉冲信号周期独立的方法,这一速度曲线设计复杂的难题.文献[20]对跟踪微分器中的离散系统最速控制综合函数进行了修正,达到了最小步数.本文根据实际需求,在其基础上对其进行部分修改,加入温和的最大速度限制功能,使得跟踪微分器在限制步进电机转速的同时能够保持速度变化连续.另外提出了最速控制函数的另一种形式,使其能够缩短在微控制器上的运行时间.
本文将这一套使用了具有微控制器运行加速和温和最大速度限制功能的跟踪微分器,且控制周期与脉冲周期独立的步进电机控制策略称为步进电机的“脉冲自适应跟踪”算法(pulse adaptive tracking, PAT).目前PAT算法已经成功应用于两相四线混合式步进电机驱动的小型六轴桌面机械臂,该算法作为机械臂关节电机的底层驱动算法,可使机械臂在工作和运动过程中任意修改运行参数,减轻了顶层算法设计的难度,并在一定程度上简化了机械臂轨迹规划的任务设计.
本文所述算法的主要难点有两个,一是如何将跟踪微分器中的速度映射到步进电机的脉冲宽度上以及这种做法带来的累积误差和速度颤振问题,二是在跟踪微分器中加入最大速度限制并避免速度突变问题.
跟踪微分器是一个将带噪声的原始输入信号v(t)输出为输入的跟踪(滤波)信号x1(t)和它的微分信号x2(t)的算法.以位置信号为例,将某一位置以某一速度运动的物体施加一个持续的加速度u(t),在满足|u(t)|≤r的条件下能使该物体在最短时间内静止在参考点,在这一过程中,x1(t)就是位置信号,x2(t)就是速度信号.本文所述的跟踪微分器均为常见的二阶跟踪微分器.对于二阶离散系统
将其中的u[k]取
u[k]=fhan(x1,x2,r,h)
(3)
则可使状态变量处于x=[x1x2]T的信号尽可能快地回到[0 0]T点.其中的非线性函数fhan()被称作离散系统最速控制综合函数.文献[13]中给出的函数表达式为
(4)
首先提出几个关于周期的概念.
1)脉冲周期T0,指最终输出给步进电机的脉冲;
2)控制周期,即式(2)中的步长h,跟踪微分器的计算更新周期;
3)计时单元周期T,或最低速度分辨率,脉冲周期T0是T的整数倍,16位定时器中为1~65 536倍.
PAT算法的基本思路为,设置计时单元周期T及控制周期h,本文以T=10 us和h=20 ms为例.在每个控制周期中运行跟踪微分器,即根据当前的x1、x2、h和设置的最大加速度参数r计算u[k]=fhan(x1,x2,r,h),按照式(1)和(2)更新了状态量x1和x2后,设置脉冲周期为x2的倒数并四舍五入取整作为步进电机的脉冲周期.算法流程如图1所示(为表述方便及结果清晰起见,以下内容中的算法说明及仿真中均忽略了每半个脉冲周期翻转电平的步骤).
图1 PAT算法流程图Fig.1 Flowchart for PAT algorithm
该算法最重要的特点是控制周期与电机脉冲周期相互独立,如图2所示,其中控制周期固定,而脉冲周期由每个控制周期内的算法计算得到,因此避免了文献[10]中提到的控制周期不固定所带来的复杂计算问题.
图2 同步周期与异步周期比较Fig.2 Comparison of synchronous and asynchronous periods
这一算法有很多潜在问题.第一,在目前的微控制器中广泛使用16位定时器,因此由x1的倒数计算得到的脉宽可能超过定时器的重装载寄存器上限.第二,变量x2和脉冲步数均可以代表角度,若使用前文所述算法根据x2来计算u,相当于跟踪微分器的更新和步进电机脉冲步数的更新相互独立,而由于取整过程中存在误差,以及电机脉冲周期与控制周期不同步,这两个本应完全相等的变量之间的误差会越来越大.第二个问题可以采用的解决方法是,在式(3)中将脉冲步数代入,即
u=fhan(θ,x2,r,h)
(5)
其中,θ为步进电机当前的脉冲步数,相当于加入了反馈.但这一加入误差的做法引入了第三个问题,原本的最速控制函数因为加入的这一误差又产生了新的误差,因此解决了累积误差问题的同时又引入了速度颤振问题.
另外,步进电机的工作需要限制最大速度以保持扭矩,而跟踪微分器本身并没有这一功能,需要对其进行适当改进.
所有问题总结如下:
1)最长脉宽问题(或最慢速度问题);
2)取整过程的累积误差问题;
3)由(2)引入的速度颤振问题;
4)最大速度限制问题.
问题(2)已通过加入反馈解决,下文分别介绍其余问题的解决方法.
跟踪微分器的核心是离散系统最速控制综合函数.在文献[21]中,作者给出的离散系统最速控制综合函数fsun的公式为
(6)
其中
原论文中的公式有误,此处已更正.这一公式的另一种简化写法如下:
其中 sat() 函数也对应地简化为
公式的这两种写法等价,形式不同而结果相同,后者算法的运行速度略快.
速度对应变量x1,而速度要求不能突变,因此需要对式(3)进行扩展,改为
u=fhan(x1,x2,h,r,p)
(7)
其中r,p分别为最大限制加速度和最大限制速度.加入最大速度限制功能有几点考虑,若只对速度施加死区限制,则会发生提速时速度连续,但降速时速度突变的问题;若只对降速情况进行处理,则在接近限制速度边界处会产生超调.
综合考虑以上两点,解决的思路是预测下一时刻的速度是否低于限制速度,以x2>0为例,如果
x2+hu>p
则认为当前处于超速状态,而由于进行了一步预测,因此当前情况下如果令下一步的u=r会使速度低于限制速度,则当前步应计算出一个u
p=x2[k]+hu[k]
反之当x2<0时
-p=x2[k]+hu[k]
使用sign()函数将两式合并,得
将该式加入式(7),则式(4)为
(8)
1.2节中提到脉冲周期T0是T的整数倍,一般情况下16位定时器带来的速度分辨率足以满足大多数场合使用.若分辨率不满足要求,可串联多个定时器使用,或部分微控制器带有定时器的预分频寄存器可用于扩展定时周期.尽管分辨率足够高,但速度过低时仍需关闭定时器而避免超过定时器计时上限.
此处理方法的不连续为跟踪微分器引入了额外的误差,关闭定时器的同时跟踪微分器尚未停止工作,因此需要对跟踪微分器进行程序清零操作.
算法仿真应尽可能接近实际的硬件实现情况,但部分硬件实现仍然可以在算法仿真中忽略.具体思路为,控制器的控制周期设为20 ms,与硬件实现相同.由于步进电机的控制方式为脉冲控制,每个上升沿转过一个步距角,因此脉冲波形的产生则可以在算法仿真中用增减1代替,而在实际的硬件实现中需要每半个脉冲周期翻转一次电平,或根据电机参数保持一定时间的高电平脉宽.
跟踪微分器相平面以及加入限制最大速度的相平面图如图3所示.
图3 跟踪微分器相平面Fig.3 Phase plane of tracking differentiator
下面以常见的两相四线混合式步进电机为例进行仿真,该电机一转200个脉冲,即一个脉冲对应π/100(rad).限制最大速度、运行过程中不改变参数的基本功能仿真如图4所示.从图中可以看出,如果不进行程序清零操作,达到稳态后会出现速度颤振问题.
图4 基本功能仿真Fig.4 Basic simulation results
运行过程中目标发生变化的仿真结果如图5所示.在1.5 s处设定的目标角度由15π(rad)改为-10π(rad),可见电机可以稳定地换向并重新前往设定目标.这一仿真加入程序清零步骤后,尽管仍有微小抖动,但颤振问题得以解决.
图5 设定目标突变仿真Fig.5 Simulation for changing target pulse
速度指令的突变仿真结果如图6所示.初始速度为12π(rad/s),设定最大限制速度为10π(rad/s),1.5 s时将最大限制速度降至5π(rad/s),并在3 s时恢复.可见速度-时间曲线连续,没有突变,电机转动平滑稳定.
图6 最大限制速度突变仿真Fig.6 Simulation for changing maximum limiting speed
具体的硬件实现有两种方法,一种是前文所述固定定时器的周期为10us,也就是仿真的最小时间单位,在每个控制周期内计算当前周期内的脉冲宽度近似等长的定时器周期数,到达计算出的定时器周期数后翻转电平;另一种是直接设置定时器周期并使其产生的脉冲宽度等于计算值,在定时器溢出中断中翻转电平.两种方法各有优缺点但效果相近,本文的算法仿真和硬件实现均使用第一种方法.
引脚输出的波形如图7所示.(a)(b)为连续的一段波形,(a)图展示前往设定目标的波形,(b)图展示到达目标并换向的波形.两图中上面的信号为脉冲信号,下面的信号为方向信号.
图7 引脚输出波形Fig.7 Pin output waveforms
用增量式旋转编码器对步进电机的转角进行测试如图8所示.8(a)为电机减速直到停止时编码器的输出波形,8(b)为中间临时修改最大限制速度并恢复的波形.
由于嵌入式系统对运行速度要求严格,因此有必要对算法耗时进行测试.2.1节的两种算法在不同平台下的运行耗时见表1(原文公式为算法一,PAT算法中的公式为算法二).
运行速度测试表明,在两个平台上算法二的运行速度均略快于算法一.STM32上的测试使用100 kHz和1 MHz的定时中断进行了两次测试,运行时间中包括了进出中断的时间.所有测试均未使用编译优化.
图8 编码器输出波形Fig.8 Encoder output waveforms
表1 运行速度测试Tab.1 Running speed test
本文介绍了步进电机的PAT算法中使用跟踪微分器设计梯形速度曲线的具体方法和出现的各种难题,完成了对于电机各种转速状态和变化的目标位置,给定限制最大速度和最大加速度即可自动实时设计速度曲线的目标.本文也对各种典型情况进行了仿真,展示了PAT算法的可靠性和稳定性.目前PAT算法已被成功应用于步进电机驱动的机械臂中,且预计将会在其他使用步进电机且有相关需求的场合得到广泛应用.