(二) Marlin-2.1.x 源码解析:步进电机S曲线加速

源码文件

涉及源代码文件

Marlin/src/module/planner.h /.cpp
Marlin/src/module/stepper.h /.cpp

电机加减速控制

在电机运动控制中会频繁涉及加减速问题。如下图所示,电机速度从 t = 1 t=1 t=1时刻开始,以 2 m m 2 / s 2{mm}^2/s 2mm2/s的加速度加速到 4 m m / s 4mm/s 4mm/s。如果采用线性加速模式,由于速度函数不可导,会在加速开始和结尾( t = 1 t=1 t=1 t = 2 t=2 t=2)时刻产生无穷大的加速度,宏观表现就是电机运行过程中会出向明显的震动和噪音。
线性加速
解决这个问题的方法之一就是采用S曲线加速。通过平滑速度曲线,以确保加速开始和结尾过程的加速度是有限的,从而保证了电机的平稳运行。
S曲线加速

Marlin的S曲线加速 S_CURVE_ACCELERATION

S形曲线可以有多种数学表达,Marlin 固件中采用的是5阶贝塞尔曲线。

标准的贝塞尔5阶多项式公式为:

V t = ( 1 − t ) 5 P 0 + 5 t ( 1 − t ) 4 P 1 + 10 t 2 ( 1 − t ) 3 P 2 + 10 t 3 ( 1 − t ) 2 P 3 + 5 t 4 ( 1 − t ) P 4 + t 5 P 5 , t ∈ [ 0 , 1 ] V_t=(1-t)^5P_0+5t(1-t)^4P_1+10t^2(1-t)^3P_2+10t^3(1-t)^2P_3+5t^4(1-t)P_4+t^5P_5, t\in[0,1] Vt=(1t)5P0+5t(1t)4P1+10t2(1t)3P2+10t3(1t)2P3+5t4(1t)P4+t5P5,t[0,1]

由公式可以得到:

V 0 = P 0 V_0=P_0 V0=P0 表示初始速度
V 1 = P 5 V_1=P_5 V1=P5 表示末尾速度

展开上式可得

V t = A t 5 + B t 4 + C t 3 + D t 2 + E t + F , t ∈ [ 0 , 1 ] V_t=At^5+Bt^4+Ct^3+Dt^2+Et+F,t\in[0,1] Vt=At5+Bt4+Ct3+Dt2+Et+F,t[0,1]
其中的控制参数,
A = − P 0 + 5 P 1 − 10 P 2 + 10 P 3 − 5 P 4 + P 5 A=-P_0 + 5P_1 - 10P_2+10P_3- 5P_4+P_5 A=P0+5P110P2+10P35P4+P5
B = 5 P 0 − 20 P 1 + 30 P 2 − 20 P 3 + 5 P 4 B = 5P_0 - 20P_1 + 30P_2 - 20P_3 + 5P_4 B=5P020P1+30P220P3+5P4
C = − 10 P 0 + 30 P 1 − 30 P 2 + 10 P 3 C = -10P_0 + 30P_1 - 30P_2 + 10P_3 C=10P0

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值