野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11380|回复: 2

步进电机驱动问题咨询

[复制链接]
发表于 2021-1-26 10:58:43 | 显示全部楼层 |阅读模式
拜读了野火的 F103 佛晓的电机驱动程序,步进电机的速度环或者位置环的位置式和增量式代码里面的
野火论坛202101261057405121..png
野火论坛202101261058144147..png

是怎么计算的,为什么这么计算,请大神们赐教。

野火论坛202101261058014052..png
回复

使用道具 举报

发表于 2021-1-27 09:53:08 | 显示全部楼层
先解释下公式里面几个变量的含义。
TARGET_SPEED是步进电机的目标转速,单位是转/s,ENCODER_TOTAL_RESOLUTION是编码器经过4倍频之后的总分辨率,单位是脉冲/圈,
SAMPLING_PERIOD是PID的计算周期,程序里PID的计算周期和编码器数值的读取周期是一样的,所以这个也是编码器值的读取周期。
由于PID输入和输出的都是编码器相关的量,所以目标值也需要是编码器相关,那么用步进电机的目标转速*编码器总分辨率/采样周期,就得到在一个PID计算周期内的编码器值。

OC_Pulse_num是输出比较计数器的值,他的大小等于步进电机脉冲周期的一半,改变OC_Pulse_num就能改电机速度。
PULSE_RATIO的值等于步进电机转一圈所需要的脉冲数除以编码器转一圈产生的脉冲数,为什么需要这个变量呢?
因为反馈回来的和参与PID计算的都是编码器的值,而我们想要得到当前情况下的步进脉冲速度,所以用两个单圈脉冲数做比值,得出一个对应关系。
回复 支持 反对

使用道具 举报

发表于 2021-1-27 09:56:12 | 显示全部楼层
本帖最后由 ZZZ_XXJ 于 2021-1-27 09:57 编辑

因为参与pid计算的变量和pid算出来的结果都是跟编码器相关,所以要想办法把pid的结果转换成步进电机相关,
cont_val * PULSE_RATIO * SAMPLING_PERIOD这一串就是算出经过pid调整之后的新的步进电机脉冲频率,单位是Hz,
但是算出这个频率还不够,因为STM32只能通过OC_Pulse_num来控制步进电机的速度,所以还需要算出此时OC_Pulse_num的值。
用新的步进电机脉冲频率除以定时器的计数频率,可以得到一个值,然后周期是频率的倒数,再除以2(也就是右移1位),就算出了OC_Pulse_num的值

程序里的式子为了少做几次除法运算给化简过了,可能不太好看懂

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-21 18:57 , Processed in 0.028702 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表