基于Stm32F407的多路(6路)步进电机速度控制函数

应学弟们的要求特意将步进电机的速度控制函数完善。

重点:  这里只是速度控制函数, 没有加减速曲线! 没有记录步数!  只是简单的把步进电机当成直流电机用! 很初级的一个程序!

程序的下载链接在      这里 开发平台Keil5 单片机 Stm32F407

接下来 我就程序的实现过程给大家进行分享   

第一部分是实现的机制介绍  详细链接 在这里!   主要就是通过修改 PSC和ARR寄存器的值,我们可以修改 定时器的溢出频率!而我们的定时器模式设置成 PWM输出模式, CCR寄存器 我们设置一个较小的值*(我们要控制脉冲的频率 ,所以单个脉冲的宽度是我们不关心的!)   修改了 PSC 和ARR值之后 我们就可以实现对步进电机的速度进行控制了!    详细的请看介绍!

这是测试部分的代码,只是简单的初始化和  对每一个 步进电机的速度进行赋值操作(需要加减速曲线的只需要自己去拟合就好了)

这是宏定义部分,  电机的方向控制引脚没有设置  读者需要自行设定

步进电机 的初始化部分 包含三个大类的东西 :1 方向引脚 初始化 2.速度信息对应于PSC 和ARR的关系 生成(

    Steps_Creat(Step_Speed,Step_Speed_Max);  这个函数

3.定时器的初始化, 定时器初始化部分我们不需要考虑太多 ,PSC和ARR 都是需要后期修改的

以上是步数信息的初始化部分,注意:步进电机不能完全停止,(此时 PSC ARR 应该是无穷大,但是实际达不到,这里只是近似停止)  速度 和 ARR之间的关系是一个反比例函数,通过计算 我们可以将速度 展开,对于低速段,我们需要像如上程序一样 手动配置,(如果不手动配置 ARR值会非常大,(反比例函数)) 这是第二部分的代码  速度生成 

通过修改这个 最大速速可以控制生成的速度数量,但是在高速段 速度有失真的风险!!!!(此时 ARR值非常小,可能速度值差的比较大 而 ARR值 不变 我测试过 Step_Spees_Max取 400  还是可以用的)

这是速度赋值函数 大致分为以下几个部分1 验证速度是否安全(超出内存边界会 产生 hard fault)2. 判断速度方向信息  控制对应的 方向 I O   3 通过查表,将 速度信息 对应的 ARR 和 PSC 写入到对应的 定时器 寄存器中

以下是一个定时器的配置过程 

配置过程没有任何的新意 ,只是简单的配置成 PWM输出模式, 选好对应的 IO  设置 对应的寄存器  六路的配置基本相似。

自己测试的是步进电机可以转动, 剩下的 要提升的部分暂时还是懒得写,就是  一个速度曲线的拟合过程。

这里提一下 我的步进电机程序其实也可以半闭环的,只需要讲  脉冲引脚接到定时器的 计数引脚 通过对输出脉冲进行计数还是可以实现半闭环的, 但是这样一来 又会涉及到 步数的规划以及加减速的设计   比较复杂,我用不到,暂且就不去做这一部分了,这一份代码在我看来还是初级部分的代码,远远没有达到我所期望的 高效率。  在我的设想中 DMA + 定时器 一定是有解决方案的!   剩下更高级的代码   看情况 在研究吧!

生命不息,折腾不止!

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

猜你喜欢

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