首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Beaglebone黑色GPIO控制运行步进电机非常缓慢。怎样才能提高速度?

Beaglebone黑色GPIO控制运行步进电机非常缓慢。怎样才能提高速度?
EN

Stack Overflow用户
提问于 2017-12-16 02:18:08
回答 1查看 579关注 0票数 1

我为Beaglebone编写了一个设备驱动程序,它简单地旋转我的28BJY-48步进电机,通过ULN2003A板连接。一切工作正常,电机旋转,但我发现有必要使用msleep(1)后,每个引脚切换到高电机“捕获”信号。如果我让循环在没有任何睡眠时间的情况下运行,马达就不会发生任何变化。

我想做的是加快马达的转动速度。

我的逻辑是,信号太快,马达无法响应。我知道信号是发送的,因为发光二极管与电机线圈串联起来了。

我已经阅读了Elegoo 在这里找到供参考提供的数据表和说明。

为了便于理解,我附上了接线图:

我已将P8的下列GPIOs指定为控件:

代码语言:javascript
复制
GPIO11 - IN1 - BLUE wire (coil 4)
GPIO12 - IN2 - PINK wire (coil 3)
GPIO15 - IN3 - YELLOW wire (coil 2)
GPIO16 - IN4 - ORANGE wire (coil 1)

我控制GPIOs的方式是使用ioremap()

下面是控制马达的代码的一部分:

代码语言:javascript
复制
static ssize_t motor_rotate(int i) { //0 rotates right, 1 rotates left
    int c = 0;

    motor_stop();

    while(c < 2000) 
    {   
        *gpio_dataout_addr |= PIN11;
        //msleep(1);
        *gpio_dataout_addr &= (0xFFFFFFFF ^ PIN16);
        *gpio_dataout_addr |= PIN12;
        //msleep(1);
        *gpio_dataout_addr &= (0xFFFFFFFF ^ PIN11);
        *gpio_dataout_addr |= PIN15;
        //msleep(1);
        *gpio_dataout_addr &= (0xFFFFFFFF ^ PIN12);
        *gpio_dataout_addr |= PIN16;
        //msleep(1);
        *gpio_dataout_addr &= (0xFFFFFFFF ^ PIN15);

        c++;
    }

    motor_stop();

    return 0;   
}

static ssize_t motor_stop(void){
    *gpio_dataout_addr &= (0xFFFFFFFF ^ (PIN11 | PIN12 | PIN15 | PIN16));

    return 0;
}

我的马达连接到独立于Beaglebone的5v电源上。任何正确方向的帮助或指示都将受到感谢。

另外,是否有一种方法可以同时将2个引脚设置为低引脚和2个引脚到高引脚?我的代码在设置另一个高点之前先设置一个引脚低。我想知道我能否一步一步地做到这两件事。我好像搞不懂这点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-17 19:45:21

经过进一步的回顾和研究,我发现问题不在于电压、电机或电路板,而在于我的代码本身。

根据这个链接我发现睡眠的最低限度是20毫秒左右。任何低于20 my (在我的例子中,1ms)将运行在20 my。因此,实现<20 of延迟的适当功能如下:

usleep_range()使用了1000到2000的范围,以更快的旋转速度给了我很好的结果.然而,当我握着马达时,我觉得它跳了几步,虽然眼睛看不见它。我认为这要么是电压故障,要么是电动机的限制。需要进一步分析,以排除跳过的原因。

我仍然在玩这个范围,以确定什么是最佳的非跳跃范围。

udelay()也能工作,但是系统似乎冻结在某些永久循环中,并且需要硬重新启动。需要进一步的分析,以确定到底是什么导致系统挂起后,完成旋转循环。

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

https://stackoverflow.com/questions/47841965

复制
相关文章

相似问题

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