完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
应学弟们的要求特意将步进电机的速度控制函数完善。
重点: 这里只是速度控制函数, 没有加减速曲线! 没有记录步数! 只是简单的把步进电机当成直流电机用! 很初级的一个程序! 程序的下载链接在 这里 开发平台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 + 定时器 一定是有解决方案的! 剩下更高级的代码 看情况 在研究吧! 生命不息,折腾不止! |
|
|
|
只有小组成员才能发言,加入小组>>
2386 浏览 0 评论
8910 浏览 4 评论
36486 浏览 19 评论
4981 浏览 0 评论
24307 浏览 34 评论
1375浏览 2评论
1627浏览 1评论
2017浏览 1评论
1441浏览 0评论
386浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:34 , Processed in 1.280601 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号