【步进电机 stepping motor】二 梯形加减速

前言:

声明:学习笔记来自正点原子B站教程,仅供学习交流!!

1. 梯形加减速算法概述

【步进电机 stepping motor】二 梯形加减速_第1张图片

        梯形加减速一共分为三个阶段,OA 加速部分、AB 匀速部分 和 BC 减速部分。 在 OA 加速过程中,由低于步进电机的启动频率开始启动(模型中由 0 启动),以固定的加速度增加速度到目标值;在 AB 匀速过程中,以最大速度匀速运动; 在 BC 减速部分中,以加速度不变的速度递减到 0; 这种算法是一种在加速过程和减速过程中加速度不变的匀变速控制算法,由于速度变化的曲线有折点,所以在启动、停止、匀速段中很容易产生冲击和振动

2. 算法基础

2.1 脉冲时间间隔的精确计算

        步进电机的转动需要控制器发送脉冲,如果控制器以恒定速度发送脉冲,那么步进电机就以恒定速度转动;如果控制器以加速度发送脉冲,那么步进电机就以加速度运动;所以只要改变脉冲的频率 就可以改变速度的变化,也就是说调整脉冲之间的时间间隔就可以改变速度。

【步进电机 stepping motor】二 梯形加减速_第2张图片

  • t_{0}表示第1个脉冲发送时刻
  • t_{1}表示第2个脉冲发送时刻
  • t_{2}表示第3个脉冲发送时刻
  • t_{t}表示定时器的计数周期
  • C_{0}表示定时器从t_{0} ~ t_{1}时刻的定时器计数值
  • C_{1}表示定时器从 t_{1} ~ t_{2} 时刻的定时器计数值
  • \delta t表示两个脉冲之间的间隔时间

        以 stm32 的高级定时器 8 为例,使用定时器PWM输出模式给控制器发送脉冲。高级定时器 8 的时钟频率为 168MHZ, 如果将分频值设置为 5,那么定时器的时钟频率则为:f_{t}=168/(5+1)=28MHZ, 相当于计数 28M 次正好为一秒,周期与频率为倒数关系,所以分频值为 5 的定时器 8 的计数周期t_{t} = 1/f_{t}C_{0}C_{1}的值即为ARR寄存器的值,所以我们在固定的定时器频率下,只需要改变ARR的值,即可改变电机的速度。

2.2 公式推导

1. 电机转过的角度θ的计算:

                                                                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        \theta = n*\alpha                                                                                                                                     (1)

                                                                                             S = v_{0}t + \frac{1}{2}at^{^{2}} \rightarrow \theta = w_{0}t + \frac{1}{2}\dot{w_{0}}t^{^{2}}                                                                                                         (2)

n表示驱动电机的脉冲数,α表示电机的步距角,\theta为转过的角度 , w{_{0}}为初角速度,ώ为加角速度,t为所用的时间,

一般情况下,初角速度都为0,所以得到电机转过θ所用的时间t_{n}

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​              ​​​​​​​        t _{n}= \sqrt{\frac{2*\theta }{\dot{w}}}                                                                                                                                     (3)

2. 间隔时间 \delta t

                                                                                                        \delta t = C_{n}*t_{t} = t_{n} - t_{n - 1}                                                                                                                  (4)

结合公式(3)和公式(4),可得出: 

                                                                                                        C_{n} = \frac{1}{t_{t}}\sqrt{\frac{2\alpha}{\dot{w}} }(\sqrt{n+1} -\sqrt{n})                                                                                                           (5)

上式中n表示转过\theta_{n-1}角度时,所用的脉冲数

3.  求加减速阶段第n个周期内计数器的值 

 即令公式(5)的参数n = 0,即

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​C_{0} = \frac{1}{t_{t}}\sqrt{\frac{2\alpha }{\dot{w}}}                                                                                                                                 (6)

将公式(6)带入公式(5),即

                                                                                                             C_{n} = C_{0}(\sqrt{n + 1} - \sqrt{n})                                                                                                               (7)  根据泰勒公式的一个特例麦克劳林公式:

将上面公式代入公式(7),即:

【步进电机 stepping motor】二 梯形加减速_第3张图片

最终化简得出以下公式:

                                                                                                                C_{n} = C_{n - 1} - \frac{2C_{n - 1}}{4n + 1}                                                                                                                     (8) 

通过公式(8)和公式(6)即可推到出每个周期内的计时器的值,及每步的频率。经过化简的公式(8)有一定的误差,其得出的结果比公式(7)快。所以我们对公式(6)乘以0.676加以校正

         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​C_{0} = 0.676 * \frac{1}{t_{t}}\sqrt{\frac{2\alpha }{\dot{w}}}                                                                                                                 (9)

通过公式(8)和公式(9),我们就可以知道电机加速每一步的PWM频率

4.  求匀速阶段计数器的值 

                                                                                                                        w = \frac{\alpha}{\delta t}                                                                                                                                   (10)

其中w为角速度,\alpha为步距角,\delta t为间隔时间

 将公式(10)带入公式(4),即

                                                                                                                        C = \frac{\alpha f_{t}}{w}                                                                                                                                    (11)

通过公式(11),我们就可以知道电机匀速时的PWM频率

5. 脉冲数和加速度成反比

将公式(1)带入公式(2):

         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​t _{n}= \sqrt{\frac{2\alpha *n }{\dot{w}}}                                                                                                                        (12)

3. 梯形加减速的计算过程

我们通过控制定时器输出PWM波形来描绘上述梯形,至少需要知道以下变量:

1. 加速阶段

  • 加速初始PWM频率,即我们要求的ARR寄存器的值C_{0}        
  • 加速度accel

  • 加速阶段时需要多少脉冲数,以n1表示

2. 匀速阶段

  • 匀速所需要的脉冲数
  • 匀速阶段的PWM频率

3. 减速阶段

  •  减速阶段需要的脉冲数量
  •  减速度decel

3.1 三角形运动

        三角形运动是由于速度偏大,而加速度偏小,导致在加速阶段速度没有达到最大值而进入匀速阶段时,就必须进入减速阶段的情况

【步进电机 stepping motor】二 梯形加减速_第4张图片

上图中,已知参数: 

  • Max-\omega:用户设置的最大速度 
  • accel:加速度大小
  • decel:减速度大小
  • Step:位移总步数

未知量:

  • accel-lim:加速度曲线与减速度曲线的交点
  • max-s-lim:加速度一共需要的步数
  • decel-val:减速度所需要的步数

        从上图可以看出,三角形运动没有匀速阶段,加速度过了即减速阶段,当accel-lim < max-s-lim时,运动模型即为三角形运动

1. 计算加速度步数

从上图可以看出,加速度的末速度w1与减速度的w2是相等的,所以:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \dot{w1}*t1 = \dot{w2}*t2                                                                                                                        (13)

其中,\dot{w1}为加速度,t1为加速度时间,\dot{w2}为减速度,t2为减速度时间

将公式(13)带入公式(12):

                                                                                                        \dot{w1}*n1 = \dot{w2}*n2                                                                                                                      (14)

两边同时加上\dot{w2}*n1后,化简得到:

                                                                                    \dot{w1}*n1 + \dot{w2}*n1 = \dot{w2}*n2 + \dot{w2}*n1

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  (\dot{w1} + \dot{w2})*n1 = \dot{w2}*(n2 + n1)

                                                                                                                  n1 = \frac{\dot{w2}*(n1 + n2))}{\dot{w1} + \dot{w2}}                                                                                                                (15)

又因为此时为三角形运动,所以n1 + n2为总步数,可以求出加速度步数

2. 计算减速度步数

                                                                                                n2 = - (Step - n1)                                                                                                                            (16)

3.2 梯形运动 

        如果加速度设置的足够大,那么在进入减速阶段之前达到最大速度,那么则会进行一段时间的匀速运动,运动图形如下:

【步进电机 stepping motor】二 梯形加减速_第5张图片

上图中,已知参数: 

  • Max-\omega:用户设置的最大速度 
  • accel:加速度大小
  • decel:减速度大小
  • Step:位移总步数

未知量:

  • accel-lim:加速度曲线与减速度曲线的交点
  • max-s-lim:加速度一共需要的步数
  • decel-val:减速度所需要的步数

          从上图可以看出,梯形运动中,是先进行匀减速,之后进入匀速阶段,最后进行匀减速的运动,当accel-lim > max-s-lim时,运动模型即为梯形运动

1. 计算加速度步数

        梯形公式,最大速度即为max-\omega,带入公式(1)和(2),即为

                                                                                                                               \partial n = \frac{1}{2}*\dot{w}^{2}t

                                                                                                                               \partial n = \frac{w^{2}}{2\dot{w}}

                                                                                                                                n = \frac{w^{2}}{2\partial\dot{w}}​​​​​​​                                                                                                                

                                                                                                                                n1 = \frac{max_w^{2}}{2\partial\dot{w}}                                                                                                                (17)

其中,n即为加速度步数,w即为max-\omega\alpha为电机步距角,\dot{w}为加速度

2. 计算减速不步数

        将公式(17)带入公式(14)

                                                                                                                        n2 = -n1*\frac{\dot{w1}}{\dot{w2}}                                                                                                                (18)

4. 算法优化

由于算法在计算过程中涉及到一些浮点型运算,大量的浮点型运算会使得效率大大降低,为了使得计算速度得到更好的优化,我们做如下优化:

  • 对于加减速的每一步来说,都需要重新计算下一步的时间,计算的过程中可能会出现除不尽的项式,为了更有利的加减速,可以采用加速向上取整,减速向下取整的原则来做运算,也可以采用余数累计的方法,在这里使用的是将余数累计的方法来提高间隔时间的精度和准确性。

                                                                                                                C_{n} = C_{n - 1} - \frac{2C_{n-1} - rest}{4n+1}                                                                                                        (19)

求余公式:

                                                                                                New-Rest = (2*C_{n - 1} + Rest)(mod(4*n+1))                                                                     (20)

5. 实现步骤

在给定步距角α、定时器频率f_{t},加速度\dot{w1},减速度\dot{w2},最大速度max-w,总步数Step的情况下:

  • 匀加速阶段

        1. 判断三角形运动还是梯形运动:

                                                                                                    accel-lim = n1 = \frac{\dot{w2}*(n1 + n2))}{\dot{w1} + \dot{w2}}

                                                                                                        max-s-lim = \frac{max-w^{2}}{2\dot{w1*\alpha }}

        如果accel-lim < max-s-lim则为三角形运动,则减速步数:

                                                                                                                                n2 = - (Step - n1)

        否则则为梯形运动,则减速步数

                                                                                                                            n2 = -n1*\frac{\dot{w1}}{\dot{w2}}     

        2. 求加速度第一步的定时器值,即C{_{0}}

                                                                                                                         C_{0} = 0.676 * \frac{1}{t_{t}}\sqrt{\frac{2\alpha }{\dot{w}}}

        3. 加速阶段每步定时器的值 

                                                                                                                       C_{n} = C_{n - 1} - \frac{2C_{n-1} - rest}{4n+1}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​    New-Rest = (2*C_{n - 1} + Rest)(mod(4*n+1))

  • 匀速阶段

        加速阶段的最大速度运行

  • 匀减速阶段

        1. 判断每步定时器值

                                                                                                                        C_{n} = C_{n - 1} - \frac{2C_{n-1} - rest}{4n+1}

                                                                                                     New-Rest = (2*C_{n - 1} + Rest)(mod(4*n+1))

你可能感兴趣的:(电机专题,单片机,嵌入式硬件)