【EmbeddedDev】BBB控制直流电机的转速与方向

本文介绍如何使用H桥(L293D)控制直流电机的正转和反转,并通过示例代码展示了如何利用BeagleBone Black进行速度控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


情景
需要实现电机的正转与反转。

解决方案
使用H桥来切换电机的电源两端输入, 从而实现正转与反转。我们将使用L293D型号, 一个H桥单片机。
一下是所需要准备的:
如下图 Figure 4-4 连接面包板,确保L293D已经正确放置,其有一端是凹下去的, 容易辨认。
H-bridge Motor
Figure 4-4. 通过H桥来驱动直流电机


例 4-3 中的代码(h-bridgeMotor.js) 和 (例 4-2 )的通过三极管来驱动直流电机的代码很相似。附加的代码指定了电机转动的方向。
Example 4-3. 代码之通过H桥来驱动直流电机(h-bridgeMotor.js)
#!/usr/bin/env node

// This example uses an H-bridge to drive a DC motor in two directions

var b = require('bonescript');

var enable = 'P9_21';    // Pin to use for PWM speed control
    in1    = 'P9_15',
    in2    = 'P9_16',
    step = 0.05,    // Change in speed
    min  = 0.05,    // Min duty cycle
    max  = 1.0,     // Max duty cycle
    ms   = 100,     // Update time, in ms
    speed = min;    // Current speed;

b.pinMode(enable, b.ANALOG_OUTPUT, 6, 0, 0, doInterval);b.pinMode(in1, b.OUTPUT);b.pinMode(in2, b.OUTPUT);

function doInterval(x) {
    if(x.err) {
        console.log('x.err = ' + x.err);
        return;
    }
    timer = setInterval(sweep, ms);}

clockwise();        // Start by going clockwise

function sweep() {
    speed += step;
    if(speed > max || speed < min) {
        step *= -1;
        step>0 ? clockwise() : counterClockwise();
    }
    b.analogWrite(enable, speed);
    console.log('speed = ' + speed);}

function clockwise() {
    b.digitalWrite(in1, b.HIGH);
    b.digitalWrite(in2, b.LOW);}

function counterClockwise() {
    b.digitalWrite(in1, b.LOW);
    b.digitalWrite(in2, b.HIGH);}

process.on('SIGINT', function() {
    console.log('Got SIGINT, turning motor off');
    clearInterval(timer);         // Stop the timer
    b.analogWrite(enable, 0);     // Turn motor off});
浅析
H桥提供了一个简单的方式去切换电机的引导线, 从而实现了反转。4-5说明了H桥的工作原理。
H-bridge Schematic
Figure 4-5. H-bridge原理图
连接到电机(符号M表示)的4个开关就是H桥。在左图中,两个开关是断开的, 电机左端连着正极, 右端连着地极,这样使得电机往其中一个方向旋转。而右图则刚好相反,使得电机往反方向旋转。
代码中,in1和in2用来分别控制两个开关对。(L293D有4对这样的开关, 但我们只用了其中两对)。因此要顺时针转,只要设置in1为HIGH, in2为LOW;逆时针转,则设置相反的值。
function clockwise() {
    b.digitalWrite(in1, b.HIGH);
    b.digitalWrite(in2, b.LOW);}

function counterClockwise() {
    b.digitalWrite(in1, b.LOW);
    b.digitalWrite(in2, b.HIGH);}
L293D有一个"启用"pin脚(pin 9, 在底部右边), 可以通过PWM信号来控制转速。(详情参考 Controlling the Speed of a DC Motor )
在代码末尾, 方法process.on()可以检测用户是否按了Ctrl+C, 是的话则停止时钟并且关闭电机。如果你没有发出这样的信号,它会一直旋转。
驱动5V直流电机
之前的例子是使用了3.3V工作电压的直流电机。如果是5V工作电压的电机呢?可以切换BBB pin脚获得 (从BBB上的P9_7接到L293D的pin8) 如图 4-6 所示. 如果你的电机不会产生过大电流, 这样会正常工作。
如果5V不够, 或者BBB供电不足, 则需要外接电源了。 如图4-7 所示:
H-bridge Schematic for 5V
Figure 4-6. 通过H桥来驱动5V直流电机
H-bridge Schematic for External Supply
Figure 4-7. 通过H桥来驱动外接电源的直流电机
总结: H桥提供了一种方式去控制直流电机的转向, 同时提供了引脚支持PWM信号来控制转速。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值