步进电机的斜坡功能 在STM32F410RB上使用PWM时钟和TMC电机驱动器

Ramp Function for stepper motor Using PWM clock on STM32F410RB and TMC motor driver

提问人:Juan Lasso Velasco 提问时间:10/31/2023 最后编辑:Juan Lasso Velasco 更新时间:10/31/2023 访问量:43

问:

不知道我是否应该在电气工程论坛上问这个问题,因为它在技术上与固件相关,所以如果这是错误的地方,请提前道歉。我目前正在为基于 STM32F410RB 的电路板编写固件,该电路板将通过向某些 TMC262 电机驱动器的 STEP/DIR 接口发送 PWM 信号来驱动步进电机。

我遇到的问题或困惑在于实现斜坡功能,该功能将控制PWM信号的频率,因此电机可以上升到目标速度并斜坡回落。 到目前为止,我见过的改变 TIM PWM 信号频率的唯一方法是改变计数器周期 (ARR) 和/或预分频器值 (PSC),这两者都是整数值。之所以会出现这个问题,是因为即使是这些值的最小变化(增加或减少1)也会对PWM信号的最终频率产生重大影响,从而导致在一个时钟周期内速度变化高达10RPM。这阻止了我使电机执行从起始速度到目标速度的平滑斜坡。

我不知道是否有人知道动态改变PWM频率的更好方法,可以提供这些平滑(或更平滑)的斜坡转换。我知道我可以在代码中手动创建这些脉冲,而无需使用 STM32 芯片上的专用 PWM 硬件,但我觉得这是一个已解决的问题,我只是遗漏了一些东西。

我正在将 HAL 库与 STM32CubeMX 生成的设置代码一起使用,以防有用。我对这两个都没有任何问题,但也许我想要的这些接口是不可能的。

任何帮助都是值得赞赏的。

STM32 PWM 步进电机 NUCLEO

评论

0赞 Chris_B 11/1/2023
对我来说,这听起来像是您正在使用大型预分频器将定时器速度降低到所需的频率。如果这是真的,我建议简单地使用尽可能小的预分频器并相应地增加 AAR。如果您的预分频器为 0(如果可能),例如您的定时器时钟(取决于总线)为 64 MHz,则 AAR 寄存器中的变化为 1 将使定时器输出频率改变 1/64M
0赞 Juan Lasso Velasco 11/1/2023
@Chris_B,我明白你的意思了。我当然可以对 ARR 进行更精细的控制,只要我不开始将其设置得太低。唯一的问题是变化仍然不是线性的,而且由于 ARR 是一个整数值,除非我将其固定为一个值,否则没有很好的方法来控制电机的加速度。不过,这很可能是以这种方式驱动它的最佳解决方案。
0赞 Chris_B 11/2/2023
如果 1 的增量会产生巨大的差异,那么您只是没有正确设置计时器参数。我经常使用 PWM,在 170 MHz MCU(具有 170 MHz 定时器基频)上获得具有 25 kHz 基频的 PWM 的典型设置为:预分频器 0,AAR 170M/25k = 6800。这意味着我可以将脉冲宽度调整 6800 步 (=你的 1),这超过 12 位。如果此 6800 代表 0-10 伏的输出电压范围,则相当于约 1.5 mV - 这肯定足以产生平滑的电压输出斜坡。

答: 暂无答案