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

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

梯形调速算法

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

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

  • ①加速过程

  • ②匀速过程

  • ③减速过程

①加速过程所用到的加速度为:

一般加速过程与减速过程所用的加速度绝对值是相同的,减速过程相当于加速度为-a.

所以总的行程图中速度曲线下阴影部分三个过程的面积:

由于加速过程与减速过程所用到的加速度绝对值相等,所以,所以

梯形速度调速算法很简单,比较容易实现,但是这个算法却有缺陷。

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

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

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

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

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

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

S-曲线调速算法

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

这样来看看这些拐点:

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

对于函数,可以看出:

前面说,那么,意味着在0、1时刻,加速度为0。

假设速度曲线函数为:

则其一阶导数为:

这样就可以得出下面的方程组了:

解出a和b:

因此,调速曲线就得到了:

其加速度曲线为:

整个过程的加速度曲线长这样:

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

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

总结一下

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


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

嵌入式Linux

微信扫描二维码,关注我的公众号

前凸后翘的步进电机调速算法~相关推荐

  1. 步进电机调速,S曲线调速算法你会吗?

    [导读] 大家好,我是逸珺. 今天想分享一种超级实用的步进电机调速算法,这种算法在步进电机调速方案中可以说是一种非常优异的方案. 梯形调速算法 为啥需要设计一个调速算法呢?步进电机不是给多少脉冲就动多 ...

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

    [导读] 大家好,我是逸珺. 今天想分享一种超级实用的步进电机调速算法,这种算法在步进电机调速方案中可以说是一种非常优异的方案. 梯形调速算法 为啥需要设计一个调速算法呢?步进电机不是给多少脉冲就动多 ...

  3. 电机调速程序c语言,步进电机调速控制系统设计C语言程序及说明.doc

    步进电机调速控制系统设计C语言程序及说明.doc 步进电机调速控制系统设计C语言程序及说明使用元器件单片机8051.步进电机17H185H-04A.128细分/3.0A步进电机驱动器.LED显示器.实 ...

  4. 步进电机循环脉冲c语言程序,基于C语言的步进电机调速.doc

    课 程 设 计 (论文) 题目 基于C语言的步进电机调速 目 录 0. 前言3 1.基本理论4 2. 方案设计4 2.1 步进电机5 2.2 8255芯片5 3. 硬件电路的工作原理5 3.1 步进电 ...

  5. 电机控制系统php,步进电机调速控制系统资料(原理图+单片机源码)

    #include #define unint unsigned int void delay(); void anjian(); void frun(); void zrun(); code unsi ...

  6. 基于单片机的步进电机调速系统设计(#0509)

    电机控制在监控器材.医疗器械.电动阀门.电动窗帘.家用电器.旋转灯具等方面有着广泛的应用,因此设计一款可控性好.精度高的电机控制系统是一件非常有意义的事. 功能描述 1.采用51单片机作为主控制器: ...

  7. 交流与直流电机 调速方法 分类 原理 优缺点 应用

    http://hi.baidu.com/gzmh2008/item/480c5fefae80200e570f1d52 三相交流电机调速有哪些方法 1 变极调速.2变频调速.3变转差率调速... 三相交 ...

  8. 用Arduino实现霍尔编码减速电机PI调速(增量式)

    这个调速算法是用在搬运机器人上的,一方面之前没有用过PID算法,另一方面在Arduino上实现的资料也比较少,所以我想把自己的尝试过程记录下来,如果能帮到别人再好不过了. 1.硬件线路连接 这里我使用 ...

  9. 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速-萌新入门

    ** 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速 ** 分享一个萌新入门小工程 一.原件连接: 第一种直接用51开发板 第二种用最小单元加unl2003驱动 二.开发板电路 ...

最新文章

  1. sqoop 基本使用
  2. 给Android Studio设置代码字体大小与界面字体样式
  3. mysql 批量插入数据过多的解决方法
  4. Powershell查看AD 组成员的变化
  5. 从应用到底层 36张图带你进入Redis世界
  6. 考研计算机专业介绍,2021考研:计算机专业考试科目简介
  7. Leetcode--191. 位1的个数
  8. [转]Eclipse创建Maven项目
  9. php实现从尾到头打印列表
  10. 20135226黄坤信息安全系统设计基础期末总结
  11. 淘宝店铺950自定义模块实现1920全屏代码
  12. JavaScript中的文档碎片
  13. 计算机硬盘图标怎么更改,Win7硬盘图标怎么改 win7修改硬盘盘符图标的方法
  14. 六 Python 字典与集合
  15. 基于全球模式比较计划CMIP6与区域气候-化学耦合模式 WRF-Chem 的未来大气污染变化模拟
  16. oracle下的inventory文件夹,Oracle软件安装目录信息Inventory作用以及如何重建此目录 - 2...
  17. 云安全类型及预防方法
  18. IEEE Transactions on Industrial Informatics(TII)投稿须知
  19. 2015年十大最具有影响力的免费网站推广方式
  20. 【Neo4j】第 9 章:预测关系

热门文章

  1. 一个 js 中值传递和引用传递的坑。
  2. 【原创】什么是 wire protocol
  3. Linux基础(九)--定时任务
  4. 建立管理SQL Server登录帐户
  5. Java多线程编程:变量共享分析(Thread)
  6. JAVA读取2g数据的速度_Java 读取大容量excel
  7. Python 自动生成环境依赖包 requirements
  8. amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!
  9. innerHTML和value的区别
  10. MFC CPropertySheet 多页面切换 实例