概述
我在前一篇博客提到了 为什么选择步进电机 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可以实现对 极低速度的计算。
第二版本的代码已经完善,参考代码 在 这里
初步测试可以使用 ,但是完整的代码必然还需要 设计加减速部分 以及 适应多路电机!
这些等以后有机会再去完善!
最后
以上就是激情曲奇为你收集整理的基于Stm32F407的步进电机的速度控制方案------初步的全部内容,希望文章能够帮你解决基于Stm32F407的步进电机的速度控制方案------初步所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复