历史上的今天
今天是:2025年04月14日(星期一)
2020年04月14日 | 基于Stm32F407的多路(6路)步进电机速度控制函数
2020-04-14 来源:eefocus
应学弟们的要求特意将步进电机的速度控制函数完善。
重点:这里只是速度控制函数, 没有加减速曲线! 没有记录步数! 只是简单的把步进电机当成直流电机用! 很初级的一个程序!
程序的下载链接在这里 开发平台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 + 定时器 一定是有解决方案的! 剩下更高级的代码 看情况 在研究吧!
生命不息,折腾不止!
史海拾趣
|
current license file does not support the …… device 我用的是Quartus9.1,不过选哪个器件编辑都会有这个问题… 查看全部问答> |
|
bootLoader中“unresolved external symbol”问题 在BootLoader的main.c的OEMPreDownload()函数调用nand.cpp文件中的ReadOSImageFromBootMedia()函数,编译的时候一直出现: BUILD: [01:0000000651:ERRORE] main.obj : error LNK2019: unresolved external symbol ReadOSImageFromBootMedia refere ...… 查看全部问答> |
|
我在没有安装PLATFORM BUILDER的情况下,安装cetk,但是提示如下错误: 无法打开此安装程序包,请确认该程序包存在,并且您有权访问他或者与相关的 程序供应商联系以确认这是一个有效的Wondows Installer 程序包。 请问问什么? &nb ...… 查看全部问答> |
|
最近接到了一个新的传感器--TCS230. 在网上查了些资料,感觉到这个片子可能很没有像51那样成熟,或者成熟了都商业话了,网上的介绍很少,只能硬着头皮研究官方的英文,初步了解TCS230的工作原理。 首先,了解一下工作流程: 1。校准为白色(白 ...… 查看全部问答> |
|
【玩转C2000 Launchpad】SCI+ADC+NIKIA5110 做了一个下午的PLC实验,晚上才有时间发一个贴! 照例上完整工程: 演示视频: 28027的SCI模块具有以下几个特点: 1、和普通I/O 口共用发送SCITXD 和接收SCIRXD引脚; 2、四种错误判别机制:极性(parity)、溢出(overrun)、帧(framing)、 ...… 查看全部问答> |
|
在线研讨会介绍 研讨会主题: 人体传感器网络与穿戴式设备 举办时间:2014年7月29日 上午 10:00-11:00 举办地点:在线 研讨会简介: 2014年的穿戴式智能设备市场持续火热,国内外厂商扎 ...… 查看全部问答> |
|
我想问一下,目前我已经可以用msp430afe253能实现测量出当机器工作时候的电压,换算成电流之后误差能在1-2mA,可是当机器待机的时候,对于这个精度不行,因为想外接一个ad,能在待机的时候,用这个ad转换器能测出误差在1-2uA,请问各位有没有什么可 ...… 查看全部问答> |




