步进电机调速,S曲线调速算法很香

[导读] 大家好,我是逸珺。

今天想分享一种超级实用的步进电机调速算法,这种算法在步进电机调速方案中可以说是一种非常优异的方案。

梯形调速算法

为啥需要设计一个调速算法呢?步进电机不是给多少脉冲就动多少步吗?但是带上负载了就可能失步,所谓失步,简单理解就是实际电机轴转过的度数,没有输入脉冲对应度数多。为什么会这样呢?电机的扭矩有可能无法驱动负载。一般会做一个启动加速控制过程,停止的时候做一个减速控制,中间做一个匀速控制。这就是比较常见的梯形调速控制算法。

在这里插入图片描述

这样一个梯形调速算法,相当于步进电机的运动过程包含三个阶段:

  • ①加速过程
  • ②匀速过程
  • ③减速过程

①加速过程所用到的加速度为:
a = V n t 0 a=\frac{V_n}{t_0} a=t0Vn
一般加速过程与减速过程所用的加速度绝对值是相同的,减速过程相当于加速度为-a.

所以总的行程图中速度曲线下阴影部分三个过程的面积:
S = V n × t 0 2 + V n ( t 1 − t 0 ) + V n × ( t 2 − t 1 ) 2 S=\frac{V_n\times t_0}{2}+V_n(t_1-t_0)+\frac{V_n\times (t_2-t_1)}{2} S=2Vn×t0+Vn(t1t0)+2Vn×(t2t1)
由于加速过程与减速过程所用到的加速度绝对值相等,所以 t 2 − t 1 = t 0 t_2-t_1=t_0 t2t1=t0,所以

S = V n × t 0 2 + V n ( t 1 − t 0 ) + V n × t 0 2 = V n t 0 + V n ( t 1 − t 0 ) \begin{aligned} S&=\frac{V_n\times t_0}{2}+V_n(t_1-t_0)+\frac{V_n\times t_0}{2}\\ &={V_n t_0}+V_n(t_1-t_0)\\ \end{aligned} S=2Vn×t0+Vn(t1t0)+2Vn×t0=Vnt0+Vn(t1t0)
梯形速度调速算法很简单,比较容易实现,但是这个算法却有缺陷。

在这里插入图片描述

图中红色圆圈的位置,加速度从a突变为0,或从0突变为-a,这些突变点会带来什么后果呢?来看看其加速度曲线:

在这里插入图片描述

电机带着负载运动,比如常见的丝杆将电机的旋转运动,转化直线运动,又或者齿轮或滚珠结构,带动负载进行旋转运动。具有一定的质量的负载,在加速度突变情况下,很有可能会造成机械振动。

比较专业一点的术语称为急动(Jerk),其实就是考察加速度的变化率的,也可以称为加加速度,我们知道速度的变化率就是加速度,而加速度的变化率就是加加速度。

如果用数学语言来装下逼,就是速度函数对时间的一阶导数就是加速度,而对加速度曲线的一阶导数就是加加速度。因此上图中加速度在 0 , t 0 , t 1 , t 2 0,t_0,t_1,t_2 0,t0,t1,t2时刻突变,意味着加加速度为无穷大。

对于给定的负载,加加速度越大,产生的不需要的振动能量就越大,振动能量的频谱也就越宽。这意味着加速度变化越快,振动就越强大,激发的振动模式数量也就越多。由于振动能量被系统机械吸收,如果振动频率与机械和控制系统中的共振相匹配,则可能会导致稳定时间增加或精度降低。

这样一说,好像就有思路了,我们如果能做到加速度的变化率是连续的,是否这种变化就会变得平滑呢?运动是不是就更柔性?所谓变化率连续,是不是就是相对于加速度函数的导数曲线是连续的就可以了?

S-曲线调速算法

假定来归一化速度曲线为从0加速到1,假设能做出如下调速曲线:

在这里插入图片描述

这样来看看这些拐点:

在这里插入图片描述

看速度曲线先是比较缓慢的增加,然后再比较快速的增加,然后在慢慢第逼近到期望的设定速度,因此这是一个变加速过程。再来做一个进一步的假设,把加速度过程的时间也做一个归一化:

在这里插入图片描述

对于 v ( t ) v(t) v(t)函数,可以看出:
v ( 0 ) = 0 v ( 1 ) = 1 v ′ ( 0 ) = 0 v ′ ( 1 ) = 0 \begin{aligned} &v(0)=0\\ &v(1)=1\\ &v'(0)=0\\ &v'(1)=0\\ \end{aligned} v(0)=0v(1)=1v(0)=0v(1)=0
前面说 a = v ′ ( t ) a=v'(t) a=v(t),那么 v ′ ( 0 ) = v ′ ( 1 ) = 0 v'(0)=v'(1)=0 v(0)=v(1)=0,意味着在0、1时刻,加速度为0。

假设速度曲线函数为:
v ( t ) = a t 3 + b t 2 v(t)=at^3+bt^2 v(t)=at3+bt2
则其一阶导数为:
v ′ ( t ) = 3 a t 2 + 2 b t v'(t)=3at^2+2bt v(t)=3at2+2bt
这样就可以得出下面的方程组了:
a + b = 1 3 a + 2 b = 0 \begin{aligned} &a+b=1\\ &3a+2b=0\\ \end{aligned} a+b=13a+2b=0
解出a和b:
a = − 2 b = 3 \begin{aligned} &a=-2\\ &b=3\\ \end{aligned} a=2b=3
因此,调速曲线就得到了:
v ( t ) = − 2 t 3 + 3 t 2 v(t)=-2t^3+3t^2 v(t)=2t3+3t2
其加速度曲线为:
a ( t ) = − 6 t 2 + 6 t a(t)=-6t^2+6t a(t)=6t2+6t
整个过程的加速度曲线长这样:

在这里插入图片描述

这样一来,加速度就是连续变化的,没有突变点。解决了之前提到的急动的问题。由于加速、减速过程完全对称,因此我们关心的运动距离控制,则很容易用下图中绿色区域的面积计算得到:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-enlskITW-1628228031405)(pic/image-20210804195529588.png)]

有了这样的数学模型,编码实现就是水到渠成的事情了。

总结一下

电机速度控制,一般尽量做到柔性调速,本文分享的步进电机的S-曲线调速数学算法模型,是一个非常棒的算法模型。速度一开始缓慢增加到快速增加,再回到缓慢增加直到速度达到设定期望速度。从设计上,兼顾了快速启停,又能尽最大程度降低加速度突变这一对矛盾。希望对有兴趣的朋友有所帮助。

性调速,本文分享的步进电机的S-曲线调速数学算法模型,是一个非常棒的算法模型。速度一开始缓慢增加到快速增加,再回到缓慢增加直到速度达到设定期望速度。从设计上,兼顾了快速启停,又能尽最大程度降低加速度突变这一对矛盾。希望对有兴趣的朋友有所帮助。
—— The End ——

推荐阅读 点击蓝色字体即可跳转
☞ 使用FreeRTOS要好好理解任务状态机?
☞ 手把手教你在STM32F4上跑freeRTOS
☞ 图解FreeRTOS原理系列之任务管理器基本框架
☞ 傅里叶变换、拉普拉斯变换、Z 变换的联系是什么?为什么要变换?

欢迎转发、留言、点赞、分享给您的朋友,感谢您的支持!
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值