摘要
一种关于步进电机加速度计算的新算法。该算法可以将电机的速度参数化并进行实时计算。利用简单的定点数算法,该算法可以在低端MCU上运行,且不需要使用查找表。在加速度确定的情况下,该算法通过对基于时间的线性趋势进行精确近似,为电机加减速进行控制。
注意
- 这是一篇翻译。
- 原文链接在这里。
- 需要读者了解步进电机的基础知识,比如步进、微步、转矩等。可以参考这里(繁体中文)或Stepper Motor。
正文
一般认为步进电机的速度与时间之间线性趋势过于复杂,难以进行实时计算。方程8就是关于步进时延的计算。以往的解决方法之一是使用数组来存储预先计算好的线性关系数据。然而该方法缺乏弹性且占用过多内存。另一个解决方法是使用功能更强的器件,比如高端的MCU或电机控制IC,当然价格也更贵。本文提出的算法通过C语言和定点数(24.8格式
)算法,提供了可以在中端PIC控制器上运行的实现。
通常MCU都集成了一个16位的时钟模块,可以用来产生周期性信号以驱动电机产生步进(或微步
)。这样就将电机步进(以及步进时间
)与时钟(以及时钟分辨率
)相关。对于混合式步进电机,一个步进产生的转角是固定值:1.8°(也有0.9的,更精细,更平稳,当然也更贵
)。这意味电机转动一圈所需要的步进为:
也即发出200个步进脉冲可以驱使电机转动一圈。
时钟频率应该尽可能的高,同时也要在电机从静止开始加速这一时间内,为电机提供足够长的时延(保证有足够长时间的步进驱动信号,信号延续时间太短的话,电机没有足够的能量做出动作
)。比如可以使用频率为1MHz的时钟。这样一个最大速度为 300 rpm (每分钟转速
)的电机需要一个等效为 1000 的时延(也即累积1000个时钟脉冲信号
)方才产生一个驱动信号。为了使高速运转的电机仍能平滑的加速,一个较高的时钟频率是非常有必要的。
注意
- 关于步进电机加速度控制的实现,请参考:AccelStepper(C++)。
基本方程
方程1:脉冲的时间
产生 c 个时钟脉冲所需要的时间为:
方程1
ƒ:时钟频率,单位为赫兹(Hz)。 c:时钟脉冲个数。
例子 ƒ = 1MHz c = 1000 则所需时间为:
方程2:电机的速度
电机的速度通常使用角速度来描述(因为电机运动模式是转动
)。角速度单位为 弧度每秒:rad/s。在 c 个时钟脉冲内,电机的角速度 ω 方程为:
方程2
α:电机步进角,单位为弧度:rad。 1 rad = 180 / π = 57.3° 1 rad/s = 30 / π = 9.55 rpm
方程3:加速度
在两个连续驱动脉冲 c1 和 c2 内,加速度 ω’ (单位为
rad/s2) 为:
例子 c1=1000 c2=2000 ƒ=1000000MHz 则加速度为:
对于一个线性变化的速度/时间关系,为便于计算,方程3假定在每一个步进脉冲间隔内,电机是均速转动的(实际上并不是
),这个速度取自间隔的中间点。如图1所示:
图1:线性关系:移动距离:m =12 steps。
注意 ω’ 与速度直方图成反比关系。
方程4:速度线性趋势的精确计算
在速度的线性趋势图中,加速度 ω’ 为常量。某一时刻的速度为:ω(t)=ω’ t。结合电机某时刻已转过的角度 θ(t),有:
同样,亦有:
其中,n≥0,为实际情况下的步进数。此时电机位于角度θ=nα。结合两式,则可推导出方程5。
方程5:步进所用的时间
驱动电机逐行 n 个步进所用的时间为:
方程6:两次步进之间的时钟脉冲数量
在第 n 个(n≥0)与第 n+1 个步进信号之间,间隔的时钟脉冲数量为:
方程7:第一个步进需要的时钟脉冲
初始时钟脉冲 c0 由方程7得出。
方程8:第n步进需要的时钟脉冲
注意 c0 设置了加速度,等比于
在实际情况下,在每一次步进时都要使用方程8进行平方根计算,这会有精度损失,并且方程中的减法会进一步导致精度下降。
方程9:连续两次步进之间的线性关系
对线性趋势进行近似,根据 方程8 比较前后两个步进所需时钟脉冲,得到:
方程10:泰勒级数
后续会使用泰勒级数对方程9进行近似计算。
方程11:近似
使用方程10对方程9进行二次近似,得到方程11:
注意 关于近似理论,请参考这里。
方程12
为便于计算,对方程11进行移项,得到方程12:
方程13
最终,对方程12进行整理,建立与实际物理意义无关的一般意义方程:方程13。方程中使用 i 表示从 0 开始的第 n 个步进。对于给定的加速度,n决定了第 i 次的速度增量。当从静止开始加速时,ni=i, i=1, 2, …。
方程14
n值取负表示减速。特别地,对于方程14,当 ni=i-m,在总计m个步进中,可以用于减速直到停止。
方程15:近似算法的精度问题
近似算法的精度可见下表:
步进n | 精确(方程9) | 近似(方程11) | 相对误差 |
---|---|---|---|
1 | 0.4142 | 0.6000 | 0.4485 |
2 | 0.7673 | 0.7778 | 0.0136 |
3 | 0.8430 | 0.8462 | 0.00370 |
4 | 0.8810 | 0.8824 | 0.00152 |
5 | 0.9041 | 0.9048 | 7.66E-4 |
6 | 0.9196 | 0.9200 | 4.41E-4 |
10 | 0.9511 | 0.9512 | 9.42E-5 |
100 | 0.9950 | 0.9950 | 9.38E-8 |
1,000 | 0.9995 | 0.9995 | 9.37E-11 |
表1:近似算法的精度 表1显示近似算法是精确的,即使是在步进 n 较小时。并且,相对误差以 n3 的速度缩小。然而,当 n=1 时误差则相当大。可以使用以下两个方法来减小 n=1 的误差:
- 将 n=1 作为特殊情况处理。使用 c1=0.4056⋅c0 作为不精确的起始值,并且使用方程7来计算 c0。
- 忽略 n=1 的不准确性。用方程15来代替方程7。
疑问 如何得到0.4056和0.676这两个常数?是通过不断尝试、比较,还是使用了魔法?
前一种方法测能够得到几乎完美的线性趋势。
后一种方法则能更快的启动。好处是能帮助电机运转:步进电机依靠0-1脉冲产生步进,由此获得转矩,当然转角误差也随之而来。同时可以在16位时钟上允许更大范围的加速度,并且还有简单方便的优势。因此,推荐使用这种方式,并忽略 **n=1** 时的不精确(`这样做真的好么?`)。
图2:步进电机速度趋势
图3:趋势上行开始时
图4:趋势上行结束时
图2到图4是应用以上几种方法对目标电机在 1 秒内从 0 rpm 加速到 120 rpm的比较。为清楚起见,基于方程2计算并展示了步进在速度上变化。理想的趋势应该接近一条直线。
在方程12中, 可以近似为 。这样产生的效果就是: – 算法的趋势仍旧是线性的。 – c0 更接近方程7显示的“真实值”:对于同样的加速度,c0 为真实值的88.6%,原来是66.7%。 – 加、减速计算不能再使用单个方程比如方程13。
方程16:计算步进数的函数
从方程4和方程5可得到根据速度和加速度计算步进数 n 的函数:
方程17
由方程16,得到方程17,并推断达到某一给定速度所需要的步进数是反比例于加速度的:
这使得在某一时间点改变加速度成为可能:通过改变方程13中的步进数 n。更进一步,使用带符号的 ω’ 值使得带符号的步进值 n 可得到正确的计算结果。此时仅有 ω’=0 时需要特殊处理。这样就可以加减速了。
方程18
方程17提供的步进值 n 对 tn 是正确的.然而,cn 本身就是间隔 tn…tn+1 内的平均值。故而,虽然方程17已足够精确,但在步进值 n 上加一个半步长可以获得更精确的结果:
表2显示了改变加速度引起的数值变化:从 10 到 5 又在第200步时到 -20。这是一种对复杂变化进行分段分析的方法:
步进i | ni | ci(方程13) | ω’(方程3) | 备注 |
---|---|---|---|---|
198 | 198 | 2,813.067 | ||
199 | 199 398.5 -100.25 |
2,806.008 | 10 | |
200 | 399.5 | 2,803.498 | 5 | etc |
201 | 400.5 | 2,799.001 | 5 | 同上 |
200 | -99.25 | 2,820.180 | -20 | etc |
201 | -98.25 | 2,834.568 | -20 | 同上 |
方程19:减速
在加减速的线性趋势中,当进行 m 步的短距离移动时,如果加速时(趋势上行
)某点 ω’1 与减速时(趋势下行
)某点 ω’2 重合,而此时电机尚未达到最大速度,也即,加速到中途就需要减速,此时,根据方程17,得到方程19来计算减速所需要的步数:
ω’1:加速度。 ω’2:减速度(负的加速度)。 对 n 取整,套用方程14可计算出 cn…cm-1。
- 其它情况 对于其它情况,可用方程17或方程18进行这样的计算: 电机在某一加速度 ω’1 下运行了n1 步后达到某一速度,此时开始使用减速度 ω’2,求电机从运行到停止所需要的步进数 n2。对 n2 取整并应用 方程14 可计算出 c1…cm-1。
Good Luck.
今天的文章【译】步进电机速度的实时控制分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/21735.html