IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【C语言】一种简单的S形加速曲线的推导与实现 -> 正文阅读

[嵌入式]【C语言】一种简单的S形加速曲线的推导与实现

1 前言

手上有个42步进电机,可是要么龟爬要么光叫不跑,百度了才知道要有个加速过程,而各种加速中又属S形加速最棒,那我当然要一步到位啦。 以下图片可以很好的展示S形加速的特点:
S形加速
网图侵删。

2 理论分析

2.1 选择曲线

S形曲线有很多,有大佬做了多种曲线的对比:速度规划(梯形、余弦、多项式、7段S型、7段修正S型、15段S型、31段S型)

其中很多分段函数一看就很复杂,需要的参数也很多,我们选一种简单的,仅需要一个表达式就能确定的加速曲线:
加速曲线1

2.2 计算函数方程

首先确定三个输入参数,也就是函数中的常量:
起 始 速 度 V 0 ? ? 目 标 速 度 V 1 ? ? 加 速 时 间 T 起始速度V_0 -- 目标速度V_1-- 加速时间T V0???V1???T
由图可知加速度为二次函数,且极值点 t = T 2 t=\frac{T}{2} t=2T?,所以 a ? t a-t a?t表达式为:
a ( t ) = k ( t ? T 2 ) 2 + n a(t)=k(t-\frac{T}{2})^2+n a(t)=k(t?2T?)2+n
因为函数图像过原点,所以带入 a = 0 , t = 0 a=0,t=0 a=0,t=0可得:
n = ? k T 2 4 n=\frac{-kT^2}{4} n=4?kT2?
所以 加速度公式 为:
a ( t ) = k t 2 ? k T t a(t)=kt^2-kTt a(t)=kt2?kTt
对时间一次积分获得速度:
v ( t ) = 1 3 k t 3 ? 1 2 k T t 2 + C 1 v(t)=\frac{1}{3}kt^3-\frac{1}{2}kTt^2+C_1 v(t)=31?kt3?21?kTt2+C1?
二次积分获得位移:
s ( t ) = 1 12 k t 4 ? 1 6 k T t 3 + C 1 t + C 2 s(t)=\frac{1}{12}kt^4-\frac{1}{6}kTt^3+C_1t+C_2 s(t)=121?kt4?61?kTt3+C1?t+C2?
将三个常量带入速度表达式,可得:
{ V 0 = C 1 V 1 = 1 3 k T 3 ? 1 2 k T ? T 2 + C 1 \left\{ \begin{array}{ll} V_0=C_1 \\ V_1=\frac{1}{3}kT^3-\frac{1}{2}kT*T^2+C_1 \end{array} \right. {V0?=C1?V1?=31?kT3?21?kT?T2+C1??
解之可得系数 k k k
k = 6 ( V 0 ? V 1 ) T 3 k=\frac{6(V_0-V_1)}{T^3} k=T36(V0??V1?)?
以及 速度公式
v ( t ) = 1 3 k t 3 ? 1 2 k T t 2 + V 0 v(t)=\frac{1}{3}kt^3-\frac{1}{2}kTt^2+V_0 v(t)=31?kt3?21?kTt2+V0?
又因为时间为0时位移为0,所以可以获得 位移公式
s ( t ) = 1 12 k t 4 ? 1 6 k T t 3 + V 0 t s(t)=\frac{1}{12}kt^4-\frac{1}{6}kTt^3+V_0t s(t)=121?kt4?61?kTt3+V0?t

2.3 单位分析

因为使用场景是单片机控制步进电机,所以常规的速度单位 m / s m/s m/s用在这里不太合适。

在没有细分的情况下,单片机每发1个脉冲,电机前进1步,对于步距角1.8°的步进电机来说,就是旋转 1 200 \frac{1}{200} 2001?圈。所以速度单位选择"个每秒",也就是Hz。

加速过程秒级显然是我们不可接受的,微秒级的话步进电机也受不了,所以加速的时间单位选择ms。

综上:
加速度 a a a的单位为(Hz/ms)
速度v的单位为(Hz)
位移s的单位为(1000个)

显然位移单位不合常理,我们将位移单位化为(个),可得 位移公式2
s ( t ) = 1 12000 k t 4 ? 1 6000 k T t 3 + 1 1000 V 0 t s(t)=\frac{1}{12000}kt^4-\frac{1}{6000}kTt^3+\frac{1}{1000}V_0t s(t)=120001?kt4?60001?kTt3+10001?V0?t

2.4 模拟验证

假设,起始速度60rpm,目标速度4500rpm,800脉冲转一圈,加速时间50ms,换算可得:
V 0 = 800 H z V 1 = 60000 H z T = 50 m s V_0=800 Hz\\ V_1=60000Hz\\ T=50ms V0?=800HzV1?=60000HzT=50ms
通过Excel仿真计算可得曲线:
加速曲线2

3 两种代码实现

通过速度与时间关系以及速度与位移关系,给出在stm32的两种实现方法,代码在我的Gitee

3.1 速度与时间关系

3.1.1 原理

对于给定的时间T,将0到T之间的每一ms带入到速度公式,计算出加速度表。使用两个定时器,一个提供1ms定时,另一个提供PWM输出,开更新中断,在1ms中断中修改PWM的频率实现速度曲线,在更新中断中记录脉冲次数。

3.1.2 优点

1.计算速度相对快很多,且不受细分以及速度差影响,实测计算不到2ms。
2.占用内存少,速度表仅需要开T个浮点数。

3.1.3 缺点

绝大部分情况下,达到目标速度时脉宽小于1ms,导致并不能准点进入减速,所以实际上的减速曲线是如下两种情况:
加速曲线3
要么不能完成完整的减速流程,要么多余几十个脉冲以 V 0 V_0 V0?走完。

3.1 速度与位移关系

3.1.1 原理

将给定的时间T,带入距离公式,得到总加速脉冲数量 S 0 S_0 S0?,将0到 S 0 S_0 S0?之间所有整数带入位移公式,解一元四次方程,对于每一个s,取唯一一个 V 0 V_0 V0? V 1 V_1 V1?之间的实根,即每一个脉冲对应的速度,获得速度表。在PWM更新中断中修改下一次脉冲的速度,同时记录脉冲次数。

3.1.2 优点

1.加减速流程能够完整完成。
2.仅使用一个定时器。

3.1.3 缺点

计算非常非常耗时间,在stm32f207实测记录如下:
1.使用double类型计算60转加速到4500转,细分x4,时间50ms,用时800ms。
2.将解方程用的double也全都换成float,用时670ms。
3.继续把所有sqrt换成百度的高效sqrt。用时620ms。
4.改成两个脉冲改变一次频率。计算用时320ms。
5.改成5个脉冲改一次。计算用时124ms。
6.将计算速度时的三次方和平方调用pow处理,发现速度还更慢了。计算用时165ms。
7.回到步骤3,将目标速度改为300.计算用时50ms。
8.细分再改成x1。计算用时14ms。
可见计算速度受速度差以及细分影响很大。

另外速度越快,细分越高,所需要的内存越多。

一种解决方式:如果每次的起始速度和目标速度都一样,仅前进距离不同,那么就可以在程序开始时直接算出这个表,后续电机动作不必要再次计算,直接读表即可。

4 测试验证

测试未发现问题,第一种方法问题也不大。

5 参考文献

1.摆线/三次多项式过渡的匀加速度轨迹
2.速度规划(梯形、余弦、多项式、7段S型、7段修正S型、15段S型、31段S型)
3.步进电机S型曲线加减速算法与实现
4.动态加速度信号的时频域积分方法
5.《电机应用开发实战指南—基于STM32》----野火

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:07:25  更:2022-03-21 21:10:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:35:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码