【问题标题】:Stepper motor acceleration and break步进电机加速和刹车
【发布时间】:2021-02-26 06:51:40
【问题描述】:

我必须制作一个项目,我必须通过按钮控制步进电机。我使用 ATXMEGA256a3u 微控制器。 当我启动电机时,它必须在几秒钟内加速到恒定速度,然后在序列结束时它必须减速并停止。 我编写了一个代码来初始化和启动电机,但我对使用步进电机不太熟悉。 我启动电机的代码是: 无效启动马达(无效) { PORT_STEP.OUT |= (EN1 + STEP1 + DIR1); PORT_STEP.OUT &= ~(EN1); PORT_STEP.DIR |= (EN1 + STEP1 + DIR1);

    while (1)
    {
        PORT_STEP.OUT |= STEP1;
        delay_us(100);
        PORT_STEP.OUT &= ~STEP1;
        delay_us(100);
    }
}

这样它会不断运行。 感谢您的帮助。

【问题讨论】:

  • 搜索短语“duty cycle”。

标签: c avr atmelstudio


【解决方案1】:

好吧,看来您正在驾驶“步进/方向”步进驱动器。这种驱动器为每个脉冲迈出一步。

要实现不同的速度,您必须在同一时间内产生更多或更少的脉冲,或者换句话说,改变周期中的延迟(您的 delay_us(100))。两个“delay_us(200)”速度减半,两个“delay_us(50)”速度加倍。

要进行加速,您可以从较长的延迟开始,然后将其减少到最终值;要进行斜坡下降,您会进行越来越大的延迟,直到它们足够长以完全停止以产生脉冲。延迟变化的速度将调节斜坡斜率(加速度)。

最后一点:您使用了两个延迟 - 不需要它们相等,也许您可​​以将一个固定并在另一个上进行操作。但即使改变两者也不是问题(这取决于应用程序)。如果您的驱动程序可以选择不同的微步进值(1/8192、1/4096 或其他值)也可以使用这些值,这可以简化您的程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多