STM32F103步进电机梯形匀加速算法

最近公司的一个项目用带驱动器的步进电机,奈何,经理让我搞个匀加速的启动和停止。以前从来没考虑过算法的我,走了很多弯路,不过最后还是解决了这个问题。

梯形加减速应该是指数加速算法和S型加速算法中最简单也最容易实现的一个算法。
STM32F103步进电机梯形匀加速算法_第1张图片
(图画的不好见谅)
在加速阶段和减速阶段将时间分成很多等分,这样由vt关系可得,s=v*t就是单位时间内,发送给步进电机的脉冲数(我的细分数1000,也就是1000个脉冲一圈,为了方便解释,将脉冲数理解成距离,因为脉冲数也可以换算成距离,根据带动的齿轮之类的。)

在我的代码中我是将加速阶段分成了10个相等的时间段,由宏定义表示
STM32F103步进电机梯形匀加速算法_第2张图片

硬件资源

STM32的PWM波(间接驱动驱动器),定时器外部时钟模式2(发送脉冲多少脉冲值的计数)

软件设计

要求,主板每次发送一定得脉冲让步进电机运转一定的距离,奈何启动频率过高,会让步进电机还没建立磁场下一个脉冲就来了,以至于脉冲与目标行动的距离出现误差,于是就需要匀加速。
STM32F103步进电机梯形匀加速算法_第3张图片
这里我用了一个结构体,在代码中注释都很清楚。

那么,开始的第一步,就是计算好需要的脉冲值
(START_FT+(START_F(ADD_SPEED1)T+…+(START_F(ADD_SPEED9)T)/10002

而我们设定好一个起始的频率,和一个目标频率,还有时间段的长度,以及加速次数,就可以计算出满足加速和减速阶段的最小脉冲值。
如果不满足这个脉冲值,会造成步进电机停止的时候不是以最小的频率停止。
达到目标频率后要以目标频率去匀速运动

剩下的就是代码中对,每次加速的时刻的判断,和每次减速时刻的判断

而代码中,对目标频率,起始频率,加速时间,加速次数都可以直接修改宏定义就可以了。

源码和参考资料链接
https://download.csdn.net/download/weixin_42783751/11117775

你可能感兴趣的:(工作笔记)