电机的控制方式一般分为开环控制与闭环控制两种控制方式,其中开环控制原理框图如下:
对于步进电机,控制脉冲的输入并不依赖于转子的位置,而是按一固定的规律发出控制脉冲,如果励磁变化太快,电机不能移动到新的位置,那么实际负载位置与理想位置就会产生一个偏差,就有可能出现失步或者过冲现象,所以需要使用加减速算法。
梯形加减速算法,S加减速算法等就是步进电机开环控制的应用。
使用步进电机驱动器驱动步进电机。当脉冲提供给驱动器时,在过于短的时间里,控制系统发出的脉冲数太多,也就是脉冲频率过高,将导致步进电机堵转。要解决这个问题,一般采用加减速的办法。
就是说,在步进电机起步时,要给逐渐升高的脉冲频率,减速时的脉冲频率需要逐渐降低。
加速过程,是由基础频率(低于步进电机的直接启动的最高频率)与跳变频率(逐渐加快的频率)组成加速曲线(降速过程反之)。跳变频率是指步进电机在基础频率上逐渐提高的频率,此频率不能太大,否则会产生堵转和丢步。
加减速曲线一般为直线(梯形)、指数或者S型曲线等。
直线(梯形) 定义:指按直线方式(从启动速度到目标速度的加减速),以一定的比例进行加速/减速。
“S”型曲线定义:加速/减速开始时速度比较缓慢,然后逐渐加快。在加速/减速接近结束时速度再次减慢下来,从而使移动较为稳 定。S 字加减速的类型有 Sin 曲线、2 次曲线、循环曲线、3 次曲线。
假设选型完毕,使用步进电机驱动器驱动步进电机,细分数为32,步进电机步距角为1.8°,即200个脉冲转动一圈。
使用定时器来产生PWM波:定时器计数器,计数小于num值时,输出高电平,大于num值小于2*num值时,输出低电平。这样就产生了一个脉冲。
定时器配置模式可以选择输出比较模式,使用此模式输出PWM波,简单来说就是当计数器与捕获/比较寄存器当前值匹配时,输出比较功能做出不同的动作。比如:当计数器比捕获/比较寄存当前值小时,输出高电平,达到比较值(捕获/比较寄存器当前值)后,翻转电平输出低电平。再重新设置新的比较值,如此反复,即可输出PWM波。
为让步进电机尽量不出现丢步和过冲情况,在电机启动和停止过程使用加减速是非常有必要的。在加减速阶段,加速度、速度、和位置对应关系如图1所示:
图 1 加速度、速度和位置对应关系
δt是两个脉冲之前的时间间隔,所以它的大小将决定着步进电机转速,为让电机转速符合加减速曲线,一个非常重要的步骤是计算合适时间间隔δt,在加减速阶段,δt可以认为是线性变化的,而在平稳速度阶段δt也是平稳不变的。使用定时器的计数频率来离散步进控制步进电机运动和处理时间间隔,见图2:
图2 速度曲线与步进电机脉冲/速度
如果要步进电机以恒定的速度旋转,我们就需要以固定的频率发送脉冲,
我们通过控制器的定时器功能来实现脉冲的发送,如图3所示:
图 3 步进电机控制脉冲
t0 为脉冲发送的起始时刻,t1 为发送第二个脉冲的时刻,t2 为发送第三个脉冲的时刻。t0 与t1 之间的时间间隔(时间延时)为 ,其中C0 为定时器在t0 与t1 这段时间的定时器计数值, 为定时器的计数周期。t1 与t2 之间的时间间隔为δt =C1tt,其中C1 为定时器在t1 与t2 这段时间的计数值,tt为定时器的计数周期。
比如说我们在程序中配置定时器预分频器为35,那定时器时钟频率为72MHz/(35+1)=2MHz,那么周期值 就是1/2M,C就是以 为基本单位的一个完整步进脉冲的定时器计数值。
假定产生脉冲的定时器的计数频率为ft,那么 = 1/ft,可以推出以下公式(中括号里边为单位,下同):
公式 1 脉冲时间间隔
其中:
spr:steps per round,
步进电机旋转一圈脉冲数,
为与电机相关常数
n:脉冲数
rad:弧度单位
1rad/sec = 60/2π ≈ 9.55rpm
rpm:转每分钟(rounds per minutes),
常用转速单位
某个时刻的速度可以由加速度来求得:
公式 3 加速度求出速度
对应的电机旋转角度(即位置)也是可以求得:
公式 4 旋转角度(位置)计算
第 n 个步进脉冲后产生的轴偏移角度θ= nα所以前 n 个脉冲的总时间和第 n 个步进脉冲的脉冲周期时间:
公式 5 第n个脉冲相关时间计算
最终,可以求得第 n 个脉冲实际需求的定时器计数值:
公式 6 第n个脉冲实际需求的定时器计数值
由于一般控制器的计算能力是有限的,连续两次计算开方根会很费时,因此考虑使用多项式来展开来减少运算。根据泰勒公式的一个特例:麦克劳林公式:
公式 8 麦克劳林公式
根据上式,可以对Cn进行一些转换出来,以期用简单的计算方法得出Cn:
公式 9 Cn转换计算
最后,可以得到Cn:
公式 10 第n个脉冲实际需求的定时器计数值
这个公式比连续开两次方的计算方式快很多,但是代入原式时发现当n=1时有 0.4485的偏差,我们可以将C0乘一个系数0.676来解决这个误差。
如果需要改变加速度或者减速度,那么就要重新计算一个n值。时间tn和脉冲数n(步数)作为加速度 、速度ω和步距角α的参数,反过来我们可以得到:
公式 11 时间tn和脉冲数n
联合上面两个式子,可以得到:
公式 12 达到最大速度需要的步数与加速度成反比
这个式子表示当达到给定的最大速度时需要的步数与加速度成反比,由于电机加速到最大时跟电机开始减速时的速度是一样的,我们可以得到(减速过程从右往左看,建立新的坐标,也是一个加速过程):
公式 13 加速到最大速度等于开始减速速度
这样我们只需要改变n的值就可以改变加速度的值。其中n1、n2为加速步数和减速步数,加速度1和减速度w(点)2都为正值((w(点)2)为正值而非常规的负值,是因为从右往左看建立新的坐标,减速过程变成了加速过程)。公式13推导方法可以由下面的不受最大速度限制的加减速曲线得来(将加速部分和减速部分拼在一起就和不受最大速度限制的加减速曲线一样,所以放在下面一起推导了)。公式13对应曲线图4为:
图 4 受最大速度限制的加减速曲线
图 5为不受最大速度限制的加减速曲线。黄线对应的为最大速度speed。
其中n1为加速步数,n2为减速步数。
步进电机旋转给定的步数,必须在适当的步数时开始减速,使其结束的时候速度为 0。
在图5这样的加减速曲线中,由于不受最大速度限制,总步数仅由加速步数和加减速步数,没有匀加速步数存在。分析图中图像,以n1和n2为界限砍成两个图像,右边的减速图像,从右往左看建立坐标,它也是一个加速过程所以斜率标注加速度w(点)2为正值而不是常规理解的负值,需要切成两个图像从右往左看成加速过程。由斜率公式(K)=y/x推出y=K*x,两个三角形高相等,对高列方程,联立可解得:
这说明了斜率(加速度)和脉冲数(步数)的关系。等式两边同加
做一个变换可以得到公式14:
公式 14 加速段脉冲数
此时总步数等于n1+n2,公式14是为了计算方便,列出了加速步数n1和总步数的关系。公式12计算的到达最大速度的步数n值和公式14的n1值(加速步数)作比较,可以判断曲线是情况1:匀加速、匀速、匀减速,受到最大速度限制。
还是情况2:匀加速、匀减速,受制于减速的开始,加速阶段无法到达最大速度。
结合前几点的数学模型,控制步进电机运动,在给定步数的情况下:
速度从0开始开始加速,到达最大速度后匀速,运动到一定步数后减速,最后停下来到达指定步数。
为实现梯形加减速控制,需要四个参数来描述:
step:步数 accel:加速度 decel:减速度 speed:最大速度
算法实现主要参考主要参考《AVR446_Linear speed control of stepper motor》。该文档代码中把速度speed、加速度accel以及减速度decel做了放大100倍处理。accel、decel为正值,即decel为正值,不带符号。从右往左看,减速过程也是一个加速的过程。
场景区分:
持续加速直到达到所需的速度。
未达到所需的速度就要开始减速。
场景1:持续加速直到达到所需的速度
已知参数:step、加速度accel、减速度decel 和 speed,
待求参数:max_s_lim、accel_lim、减速距离decel_val。
max_s_lim 是加速到最大速度所需步数,根据公式12可得。
accel_lim 是减速开始之前的步数(忽略最大速度限制),根据公式14可得。即前面原理分析提到过的场景区分,结合图片更清晰。其中:'
分母乘以100是为了保持放大倍数平衡。
如果max_s_lim<accel_lim,加速度受制于最大速度speed,由公式13可以推出减速距离decel_val。
添加一个负号使得减速距离为负值,和总步数相加即可得到减速开始时候的步数。
场景2:未达到所需的速度就要开始减速
第二种场景是运行的步数不足以进行加速到最大速度就要开始减速。
如果max_s_lim>accel_lim,加速度受制于减速的开始,无法加速到最大速度,减速距离decel_val为:
若加速度等于减速度,有
添加一个负号使得减速距离为负值,和总步数相加即可得到减速开始时候的步数。
定时器中断处理
定时器中断产生步脉冲并且只有在步进电机移动时进入。这个中断处理速度属性的四个不同的状态,分别为stop-accel-run-decel-stop。
速度的这种行为通过状态机在定时器中断中实现。如图所示。start为开始状态,accel为加速状态,run为匀速状态,decel为减速状态。
计算部分流程图:
定时器比较中断流程图:
联系客服