梯形加减速算法与S 形加减速算法

  • 梯形加减速算法其特点是:算法简便,占用时少、响应快、效率高,实现方便。但匀加速和匀减速阶段不符合步进电机速度变化规律,在变速和匀速转折点不能平滑过渡。启动、停止、高速运动段会产生较大的冲击和振动及噪音所以这种算法主要应用在对升降速过程要求不高的场合,如简单的定长送料。也就是说在一些精密的场合,梯形加减速算法并不适用。
  • S 形加减速算法:还是以梯形加减速章节提到的模型为例,如果滑块从启动速度到目标速度的加减速不是以固定的比例进行加速/减速,而在加减速的变化过程中速度曲线呈现一个英文字母“S”形的,我们称之为 S 形加减速算法。

可以获知 OA 段其实就是滑块的加速部分、AB 则是匀速部分,BC 则是减速部分。

  • 在 OA 加速过程中,速度刚开始是缓慢增加,后来增加得越来越快,而在中点时刻,增加又有所放慢,但依然继续增加逼近设定的速度。实际这一阶段又分成了三个阶段
  • 在 AB 匀速过程中,加速到设定速度之后,以设定速度匀速步进;
  • 在 BC 减速部分中,以设定的速度开始按照加速度段的变化规律做减速变化,直到速度降至 0 后停止。

梯形加减速的缺点,梯形加减速在启动、停止和高速运动的过程中会产生很大的冲击力振动和噪声,所以多数会应用于简单的定长送料的应用场合中,例如常见的3D 打印机使用的就是梯形加减速算法;但是相比较 S 形加减速在启动停止以及高速运动时的速度变化的比较慢,导致冲击力噪音就很小,但这也决定了他在启动停止时需要较长的时间,所以多数适用于精密的工件搬运与建造。

S形曲线加减速的的原理

S模型解析

S 形加减速算法对于曲线并没有具体的限定和轨迹,可以是指数函数、正弦函数只要满足于速度的变化曲线是一个“S”形。

  • 在图中一共有两幅曲线图像,其中红色的是速度的曲线,可以看出整体都属于速度的上升阶段,在加速的过程中一共可以分为两个阶段,分别为前半部分和后半部分,前半部分是加速度匀速递增的曲线,称为:加加速阶段曲线,后半部分是加速度匀速递减的曲线超,所以称为:减加速度阶段曲线。

  • 上图中蓝色的曲线是加速度的变化曲线,按照速度变化的规律共分成前半段加速度匀速递增和后半部分加速度匀速递减,也可以简单理解为一次函数,前半段一次函数的斜率是大于 0 的,后半部分的斜率是小于 0 的;加速度从 0 开始变化,到了最大值开始减小,最后为 0,由于加速度的斜率是相同的,所以斜率大于 0 和小于 0 两段曲线是关于加速度最大值所对应的速度中心对称的。

曲线加减速七段式模型

虽然该算法具有平稳、精度高的特点,但是也可以感受到该算法的参数复杂,大大降低到了工作效率,而且对硬件的要求也比较高。因此,本文介绍的是一种五段 S 曲线加减速算法并通过查表的方式进行实现,这是一种简单但具有实时性和高精度的加减速控制算法,非常适合资源紧凑的小型嵌入式系统

S 曲线加减速五段式模型

  • T1、T2、T3、T4、T5 分别代表加加速阶段、减加速阶段、恒速阶段、加减速阶段和减减速阶段的时间。为了使该开始点和结束点的加加速度在减加速阶段为零,加加速阶段的时间必须等于减加速阶段的时间,即 T1=T2,T4=T5=T。

  • 以加速段为例,第一分为加加速段,这部分是加速度 a 从 0 增大到最大值 Amax,第二部分是减加速度段,Amax 从最大值减少至 0(注意是加速度的变化!在加速度段,速度是一直在增加的!)也就是说两部的划分是看加速度 a 的最大值,减速度段也同理,只不过加速度是相反变化的。

确定已知量和未知量

S 形加减速我们需要求解的未知量如下

  • (1)加速阶段时的加加速度段脉冲数,使用 n1 进行表示
  • (2)加速阶段时的减加速度段需要脉冲数,使用 n2 进行表示
  • (3)下一个变化的脉冲的周期使用 Cn 进行表示

同梯形算法一样,无论速度怎么变化,给定的距离是不变的,只要知道加速度段的距离和减速段的距离,确定加速阶段和减速阶段需要提供多少个脉冲,然后让控制器一个一个把脉冲送出去即可。但是这里需要说明的是,因为本文采用五段 S 曲线加减速算法模型使用对称结构,所以当我们知道了加速度段距离求解算法,同理就知道了减速度距离的求解算法,它俩算法一样,只是速度排序为倒序关系。所以这里不用另外求解减速度段的距离,这也是五段式的优点

在进行 S 形加减速前我们必须要确定的目标量有如下

  • (1)电机需要步进的距离,即用户必须要明确需要电机步进的步数,使用 step 表示
  • (2)加速度所需时间,使用 ts1 表示
  • (3)减速度所需时间,使用 ts2 表示
  • (4)最大速度大小,决定电机匀速时的速度值,用 v 表示

这几个参数一起决定电机将以多快的速度接进目标值,需要注意的是,因为 s 型加减速的加速度和减速度是随时间变化的,这一点和梯形的加速度是固定的有所不同,所以不能确定,但是只要我们给出确定的时间和末速度就可以算出要步进的步数。确定了目标量,下面将对未知量进行具体求解。

获取加加速度段的步数 S1

因为加速度段被分成了加加速度段和减加速度段,并且对应着两个不同的加速度,一个以加加速的方式逼近目标值,一个以减加速的方式逼近目标值,所以两部分所需要的步数也是不相同的,因为求解加速度段所需要的步数,可以通过求解加加速度段与减加速度段的和进行得出:

  • 要获取位移(步数),可知先获取速度,对速度 v 的积分就可以得到位移:

  • 要先求取速度,可对加速度 a 积分则得速度的变化量

  • 实际的速度 V1 为初始速度加速度的变化量,如下:a 为加速度,加速度 a 从 0 变化到最大值,有如下:(其中 J 是加加速度(jerk),即速度的变化率,)因为这里为加加速度段,对应的时间 t 也是在一定范围内(t=[0,t1])

  • 知道加速度,并带入我们之前设置好的时间,就可以知道加加速度段所需要的距离,遗憾的是我们还不知道加加速度,所以需要先求解加加速度,根据图形模型可知,加速度和时间的比值就是加加速度(斜率),速度是等于加速度的积分:

  • 而加速度在加速度段呈现两种变化,也就是在加速段有两种加速度斜率,我们知道在减加速度部段的加速斜率是以加加速度部段为基础反向变化的,所以只要知道加加速度段斜率就可知减加速度斜率:

  • 第一部分和第二部分的加速是以加速度最大值作为划分的,而加速度最大值下对应着从初速度速度到末速度的中点速度,当加速度 a 随着时间变化到最大值时速度 V= Vm,由于初速度为 0,中点速度即为末速度的一半,这里的时间为 t=T1,可得加加速度:

  • 由于 Vt 是用户设置的已知的,所以就可以求出 J1

为了使 S1 的数值直接对应步数,即 S1 的单位为 Step,(如 S1=2,则为 2步,即需要两个脉冲),在设定速度时,Vm 的单位应该设置为 Step/s,表示 1 秒内可步进多少步数,这样设置还有一个好处是,速度 v 的倒数 1/V(每一步对应的时间)直接对应要输出脉冲的周期。那么知道了加加速度段的距离,再求解减加速度段的距离就能得到加速段的距离。

获取减加速度段的步数 S2

  • 要获取减加速度段的位移,同样要知道速度和加速度,而减加速度段的加加速度 J 是和加加速度段是相反的,即为-J,所以有加速度为 a2,其中时间 t 在初始时 t=t1,t1 为加加速度段的所用时间,t2-t1 为减加速段所用时间,则有(t=[t1,t2]):

  • 对加速度进行积分则可得到对应的速度为(t=[t1,t2])

  • 其中 Vt 为这个阶段的末速度:(t=[t1,t2])

  • 则对速度进行积分求得位移

  • 已知加加速阶段时间与减加速阶段时间相等,即 t2-t1 = t1,所以减加速度段的位移段 S2

  • 因最终加速度段的位移等于

确定下一个脉冲的周期

  • 下一个脉冲的周期决定了电机速度的快慢,根据我们前面的论述,速度的倒数对应每一个脉冲的周期 Tn(Tn=Cn*1/Ft)。

  • 对应的定时器计数值

  • 求出每一步对应的速度,以加加速度段为例,加加速度 J 已经确定,根据位移公式

  • 知道每一步速度下对应的时间 t,而这个 t 可以通过位移

知道第一步所需的时间 t1,通过 t1 计算出对应的速度 V,速度的倒数 1/V,就是第二步脉冲的周期,然后将第一步时间 t1 加上第二步周期 T2 就是位移公式中步进到第二步的时间总和,以此循环即可得出每一步的脉冲周期,当然了,如果是减加速度段,就使用减加速度段的公式即可。