php网站搭建环境搭建,化工网站建设推广,东莞市寮步镇防疫新闻最新,建设网站能自学吗1. 前言#xff1a;
最近项目又用到了步进电机#xff0c;为了在运动中加减速更加平稳决定研究一下S型加减速#xff0c;原来用过野火的s型加减速程序#xff0c;云里雾里的移植成功了#xff0c;今天再翻来程序看一脸懵逼#xff0c;重新学习了一下发现所有公式都能看懂…1. 前言
最近项目又用到了步进电机为了在运动中加减速更加平稳决定研究一下S型加减速原来用过野火的s型加减速程序云里雾里的移植成功了今天再翻来程序看一脸懵逼重新学习了一下发现所有公式都能看懂了连起来就看不懂了决定好好研究一下顺便做个笔记记录一下方便以后回顾。野火、正点、硬石三家的资料都看过了讲的内容几乎都是一模一样难道好的设计都是心有灵犀狗头当你单看一家资料时你会产生很多疑问当你看完三家的资料之后你就会发现打开了新世界的大门原来是可以这么理解啊各有各自详细的讲解部分。我感觉带着问题去找答案不太好理解不如带着答案去分析问题以下内容大部分均来自正点原子教程。
2. S 形曲线加减速的简介
加减速的变化过程中速度曲线呈现一个英文字母“S”形的我们称之为 S 形加减速算法。则上述将这个过程描述为如下图所示 可以获知 OA 段其实就是滑块的加速部分、 AB 则是匀速部分 BC 则是减速部分。 ⚫ 在 OA 加速过程中速度刚开始是缓慢增加后来增加得越来越快而在中点时刻增加又有所放慢但依然继续增加逼近设定的速度。实际这一阶段又分成了三个阶段 ⚫ 在 AB 匀速过程中加速到设定速度之后以设定速度匀速步进; ⚫ 在 BC 减速部分中以设定的速度开始按照加速度段的变化规律做减速变化直到速度降至 0 后停止。 梯形加减速的缺点梯形加减速在启动、停止和高速运动的过程中会产生很大的冲击力振动和噪声所以多数会应用于简单的定长送料的应用场合中例如常见的3D 打印机使用的就是梯形加减速算法 但是相比较 S 形加减速在启动停止以及高速运动时的速度变化的比较慢导致冲击力噪音就很小但这也决定了他在启动停止时需要较长的时间所以多数适用于精密的工件搬运与建造。
3.S 形曲线加减速的的原理分析
3.1 七段式S曲线加减速
实际上要实现 S 型可以采用的方法有很多在传统的 S 形曲线加减速算法中,它包括七个 运动阶段 加加速阶段 恒加速阶段 减加速阶段 恒速阶段 加减速阶段恒定减速阶段和减减速阶段。 虽然该算法具有平稳、精度高的特点但是也可以感受到该算法的参数复杂 大大降低到了工作效率而且对硬件的要求也比较高。因此 本文介绍的是一种五段 S 曲线加减速算法并通过查表的方式进行实现这是一种简单但具有实时性和高精度的加减速控制算法非常适合资源紧凑的小型嵌入式系统。
3.2 五段式S曲线加减速 在图 17.2.1 中 T1、 T2、 T3、 T4、 T5 分别代表加加速阶段、 减加速阶段、 恒速阶段、 加减速阶段和减减速阶段的时间。为了使该开始点和结束点的加加速度在减加速阶段为零加加速阶段的时间必须等于减加速阶段的时间即 T1T2 T4T5T。 以加速段为例第一部分为加加速段这部分是加速度 a 从 0 增大到最大值 Amax第二部分是减加速度段 Amax 从最大值减少至 0注意是加速度的变化在加速度段速度是一直在增加的也就是说两部的划分是看加速度 a 的最大值,减速度段也同理只不过加速度是相反变化的。
4.S型加减速的加速度段参数 Vo初速度Vt末速度t加速时间
看到这大体的s型加减速原理都能看明白但似乎又什么都没明白该怎么转化成程序呢我们控制步进电机的转速一般是控制定时器为输出比较模式下的输出比较值就是调整脉冲的周期周期越短频率越高电机运动就越快。带着答案去分析问题就是现在我们已经知道在s型加减速中加速度段传入的参数有Vo初速度Vt末速度t加速时间在设定速度时 Vt 的单位应该设置为 Step/s表示 1 秒内可步进多少步数 这样设置还有一个好处是速度 v 的倒数 1/V每一步对应的时间直接对应要输出脉冲的周期对速度积分就得到路程S就是为总步数了就知道了整个s加速过程中的总步数程序上就知道创建多长的数组来存放每一步的速度值了于是乎就有点头绪了。 同梯形算法一样无论速度怎么变化给定的距离是不变的只要知道加速度段的距离和减速段的距离确定加速阶段和减速阶段需要提供多少个脉冲然后让控制器一个一个把脉冲送出去即可。但是这里需要说明的是因为本文采用五段 S 曲线加减速算法模型使用对称结构 所以当我们知道了加速度段距离求解算法同理就知道了减速度距离的求解算法它俩算法一样只是速度排序为倒序关系。 所以这里不用另外求解减速度段的距离这也是五段式的优点如下图所示
5.计算加速度段的位移S。
加速度段被分成了加加速度段和减加速度段并且对应着两个不同的加速度一个以加加速的方式逼近目标值一个以减加速的方式逼近目标值所以两部分所需要的步数也是不相同的因为求解加速度段所需要的步数可以通过求解加加速度段与减加速度段的和。
5.1 获取加加速度段的步数 S1 到这里我就好奇加速度a的变化量应该会影响s型加减速的曲线形状那么怎么去确定那一个唯一的s型曲线呢S型加减速的曲线并没有限定是什么曲线可以是指数也可以是正弦曲线在这里分析的是s型加减速是基于加速度匀速变化的曲线所以就可以确定一条s型曲线了。 5.2 计算加加速度J1,即速度的变化率jerk
而加速度在加速度段呈现两种变化也就是在加速段有两种加速度斜率我们知道在减加速度部段的加速斜率是以加加速度部段为基础反向变化的所以只要知道加加速度段斜率就可知减加速度斜率。 由于 Vt 是用户设置的已知的所以就可以求出 J1 需要注意的是为了使 S1 的数值直接对应步数 即 S1 的单位为 Step如 S12 则为 2步即需要两个脉冲在设定速度时 Vm 的单位应该设置为 Step/s表示 1 秒内可步进多少步数 这样设置还有一个好处是速度 v 的倒数 1/V每一步对应的时间直接对应要输出脉冲的周期。 那么知道了加加速度段的距离再求解减加速度段的距离就能得到加速段的距离。
5.3 获取减加速度段的步数 S2 6. 确定下一个脉冲的周期 这里一开始稍微有点疑惑速度一直是变化的为什么对t1时刻这点的速度V倒数就是第二步脉冲的周期 在硬石教程里面看到这样一句话只要t变化足够小,那么速度变化就越平滑,得到的速度曲线就越接近目标曲线,这样的曲线实际上就以多段直线拟合成曲线个人理解是每一步的脉冲周期都很小可以近似看做该时刻的速度的倒数如有不对欢迎指正。
7. 程序设计
程序方面就参考正点原子的例程里面注释的还算详细后面有空再补上。 整体流程 1.用户设置参数vo:初速度;vt:末速度;AcTime:加速时间;DeTime:减速时间;step:要走的步数; 2.求解未知量根据已知量求解中点速度、加速度、加加速段步数以及减加速段步数等 3.生成速度表设置s1计算第一步时间以及速度求解出速度表 4. 实现第一步由速度表求解第一步C值设置定时器比较值以及开启脉冲输出中断使能 5.中断服务函数由速度表得到每一步定时器计数值判断当前运动状态分别为加速段、匀速段、减速段和停止状态。
8. 扩展
#T梯形加减速算法 #SPTA算法 #七段S形加减速算法原理分析 #AVR446算法