首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >步进电机的加速和中断

步进电机的加速和中断
EN

Stack Overflow用户
提问于 2021-02-26 14:51:40
回答 1查看 49关注 0票数 0

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

代码语言:javascript
运行
复制
    while (1)
    {
        PORT_STEP.OUT |= STEP1;
        delay_us(100);
        PORT_STEP.OUT &= ~STEP1;
        delay_us(100);
    }
}

这样它就会不断地运行。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-02-26 18:22:27

嗯,看起来你开的是一个“步/向”的步进机。这些类型的驱动器为每个脉冲设置一个步长。

为了达到不同的速度,你必须在同一时间产生或多或少的脉冲,或者换句话说,改变周期中的延迟(你的delay_us(100))。两个"delay_us(200)“的速度将减半,两个"delay_us(50)”的速度将加倍。

要使斜率上升,您可以从长延迟开始,并将其减小到最终值;要使斜率下降,您需要进行越来越大的延迟,直到它们足够长,可以完全停止以生成脉冲。延迟的变化速度将调节坡道斜率(加速度)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66381326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档