调节步进电机速度时调PSC和调ARR的区别

发布于:2025-08-03 ⋅ 阅读:(14) ⋅ 点赞:(0)

在步进电机控制中,调节速度通常是通过改变脉冲频率实现的。代码中选择调节ARR(Auto-Reload Register)而非PSC(Prescaler)的原因如下:

1. ARR 与 PSC 的核心区别

• ARR(自动重载寄存器):决定定时器的计数周期(即脉冲频率)。

 公式:脉冲频率 = 定时器时钟 / (ARR + 1)  
 ◦ 优点:直接控制输出频率,细粒度调整(ARR 取值范围大,如 0-65535)。

• PSC(预分频器):对时钟源分频,改变计数基频。

 公式:计数频率 = 定时器时钟 / (PSC + 1)  
 ◦ 缺点:调整范围有限(PSC 通常较小,如 0-65535),且改变 PSC 需重新初始化定时器,效率低。

2. 代码中选择 ARR 的原因

在您的代码中,速度调节通过 SetMotor1RPM 和 SetMotor2RPM 函数实现:

void SetMotor1RPM(float rpm) {
    const uint32_t timer_clock = 84000000; // 84MHz 时钟
    const uint32_t steps_per_rev = 3200;   // 每转步数
    float freq = (rpm * steps_per_rev) / 60.0f; // 计算所需频率
    uint32_t arr = (uint32_t)(timer_clock / freq) - 1; // 关键:通过 ARR 设置频率
    __HAL_TIM_SET_AUTORELOAD(&htim5, arr); // 动态修改 ARR
    __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_3, arr / 2); // 占空比 50%
}

为何不调 PSC?

动态调速需求:步进电机在梯形速度剖面(加速/匀速/减速)中需频繁调整频率。修改 ARR 只需一条指令,而修改 PSC 需停止定时器并重新配置,破坏实时性。

• 精度要求:例如在 84MHz 时钟下:

 ◦ 若用 PSC 调速:PSC 每增加 1,频率跳跃较大(如 84MHz → 42MHz → 28MHz...),无法精确匹配 RPM。

 ◦ 用 ARR 调速:ARR 从 100 到 65535,可精确生成 1.28kHz 到 840kHz 的脉冲,适配不同 RPM。

• 代码简化:固定 PSC 为 0(即无分频),专注 ARR 调整,避免硬件重新初始化。

  1. PSC 的适用场景

PSC 通常在以下情况使用:
• 极低速需求:若 RPM 极低(如 0.1 RPM),需超低脉冲频率(如 5.3Hz),此时可设 PSC 分频以扩大 ARR 范围。

• 时钟源超频:定时器时钟远高于所需频率时(如 84MHz 驱动 1kHz 脉冲),设 PSC 分频可避免 ARR 溢出(>65535)。

代码选择 ARR 调速是因为:

  1. 直接控制脉冲频率,动态响应快。
  2. 精度高,适配步进电机的实时梯形速度剖面。
  3. 避免频繁操作 PSC 导致的性能损失。

PSC 更适合超低速或时钟分频场景,在您的代码中无需修改。


网站公告

今日签到

点亮在社区的每一天
去签到