基于Stm32F407的步进电机的速度控制方案------初步

我在前一篇博客提到了 为什么选择步进电机  https://jeason.blog.csdn.net/article/details/91128577

这里跟大家分享一下我的步进电机的速度控制思路(最终初步解决了问题)

这里我选择的是 Stm32F407 作为主控芯片,我的大致速度控制思路就是通过调整PSC 和ARR的值来实现对速度的控制。对应于我的代码的定时器框图如下(我用的是TIM14)

为了实现修改定时器的频率我们需要修改对应的PSC和ARR的值、  这里的定时器模式我选择是PWM模式

对应的定时器部分的初始化代码如下

以上代码完成了定时器的IO复用和对应的时钟的初始化,这里我们不在赘述!  我们接下来就是需要通过修改 定时器对应的PSC和ARR值来实现对定时器输出的脉冲的频率进行调整

 所以我考虑的是 我们写一个数组,将不同的转速下对应的PSC和ARR值都分别写入数组,每一次当我们需要设置新的速度是我们就去查找对应速度对应的PSC和对应的ARR值

这是速度设置的函数,代码部分只是简单的对数据的搬迁   查表获得对应的速度信息

接下来是 PSC和ARR的计算函数,这一部分我没有完成,

我希望可以通过我们需要的速度自动计算出比较合理的PSC和ARR值  Step_Speed[ ][ ]  第一个参数是速度   我们的速度设想单位是转每分钟、  我们已知的参数是 定时器所在总线的时钟频率, 步进电机的细分数。 这一部分的代码比较难实现,一方面是参数PSC、和ARR都是整数,且数字大小严格显示在 unsigned short范围(如果是32位定时器 另说)现在的情况是  (PSC-1)*(ARR-1) = (一个关于转速,细分,系统时钟 的数字) 目前还没有找到有效的算法可以对一个数字进行拆分。

经过再次的研究  问题已经得到了解决  最新的速度计算代码部分如下

这里采用了固定 PSC的方案,  PSC固定 简化了运算的逻辑,在 步进电机转速的低速段部分,我采用了手工计算的  PSC值

这里 考虑到了  可以简单的计算出  速度单位 6(任意设定的一个数字没什么实际意义) 之后的所有速度,依据速度的比例关系 通过修改 PSC可以实现对 极低速度的计算。

第二版本的代码已经完善,参考代码 在 这里

初步测试可以使用 ,但是完整的代码必然还需要 设计加减速部分 以及 适应多路电机!

这些等以后有机会再去完善!

发布了35 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41534481/article/details/91128837