如果您打算构建自己的机器人,则需要控制各种电机,例如直流电机、步进电机和伺服系统,没有比 L293D 电机驱动器扩展板更好的选择了。它能够控制所有这些电机;不需要额外的模块。
L293D 电机驱动器扩展板具有各种低到中等复杂度项目所需的所有功能。它可以控制:
该扩展板的大脑是两个 L293D 电机驱动器和一个 74HC595 移位寄存器。
L293D是一款双通道H桥电机驱动器,可以控制两个直流电机或单个步进电机。由于该扩展板包含两个此类电机驱动器,因此它最多可以控制四个直流电机或两个步进电机。
另一方面,74HC595移位寄存器将Arduino的四个数字引脚扩展到两个L293D芯片的八个方向控制引脚。
支持 4.5 至 25 伏的电机电压范围。该电源可以与 Arduino 共享或单独使用。为了在两者之间进行选择,在两端电源连接器附近提供了一个标记为 PWR 的特殊跳线。
当跳线就位时,通过 Arduino 直流电源插孔为电机供电。在这种情况下,电机和 Arduino 并未在物理上相互隔离。这种方法使得扩展板更容易使用,因为它只需要一个电源;但只有当电机电源电压小于12V时才可以使用此方法。
移除跳线后,电机电源将与 Arduino 断开,从而使电机与 Arduino 物理隔离。但在这种情况下,您必须为标有 EXT_PWR 的两端电源连接器提供单独的电机电源。
警告:
在跳线就位时向 EXT_PWR 两端电源连接器供电将使两个电源短路,可能会损坏电机护罩以及 Arduino!
两个 L293D IC 的输出通道均通过两个标记为 M1、M2、M3 和 M4 的 5 针螺丝端子延伸至屏蔽边缘。这些端子可连接总共四个工作电压为 4.5 – 25V 的直流电机。
模块上的每个通道可为直流电机提供高达 600 mA(1.2A 峰值)的电流。然而,提供给电机的电流量取决于电机电源的容量。
您还可以将两个步进电机连接到输出端子。一个步进电机连接到M1-M2,另一个连接到M3-M4。
如果您有 5 线单极步进电机,请将中心抽头线连接到中心接地端子。
该扩展板将 16 位 PWM 输出线引至两个 3 针接头连接器,您可以使用它们连接两个伺服电机。
不幸的是,伺服电机直接由 Arduino 的 5V 电源供电,这通常是一个坏主意。这样做可能会导致 Arduino 的板载 5V 稳压器过热,并且还会在 5V 电源上引入电噪声。从好的方面来说,它在这些电源引脚上有一个 100uF 的电容器,这有点帮助。
所以,如果你想使用这个功能,只能使用像SG90这样的小型舵机。
包括一个下拉电阻器阵列,可在加电期间保持电机关闭。
板载LED指示电机电源工作正常。如果它不亮,电机将不会运行。
RESET按钮只不过是Arduino的重置按钮。它已被带到顶部以便于访问。
右下角提供了 6 个模拟引脚(A0 至 A5)以及 5V 和接地连接。您可以使用标头填充它们,使它们可用于连接各种传感器。
对于直流和步进电机控制,扩展板使用引脚 D3、D4、D5、D6、D7、D8、D11 和 D12。
D9和D10用于控制伺服电机。D10 连接到舵机 1,而 D9 连接到舵机 2。
请注意,扩展板不使用 D2 或 D13 引脚,但是可以先使用原型板再使用驱动板,即可使用这两个引脚,或者自己动手加焊两根针。
要与扩展板通信,我们必须首先安装 AFMotor.h 库。这将使我们能够通过简单的命令控制直流电机、步进电机和伺服电机。
要安装库,请导航到Sketch > Include Library > Manage Libraries...等待库管理器下载库索引并更新已安装库的列表。
输入'motorshield'来过滤您的搜索。查找Adafruit的Adafruit Motor Shield 库(V1 固件)。单击该条目,然后选择安装。
现在我们已经了解了有关扩展板的所有知识,我们可以开始将其连接到 Arduino!
首先将电机护罩安装在 Arduino 顶部。
接下来,连接电机电源。在我们的实验中,我们使用直流变速箱电机,也称为“TT”电机,常见于两轮驱动机器人中。它们的额定电压为 3 至 12V。因此,我们将外部9V电源连接到EXT_PWR端子。
最后,将电机连接到 M1、M2、M3 或 M4 端子之一。我们将其连接到 M4。
下面的草图将向您展示如何使用 L293D 电机驱动器扩展板控制直流电机的速度和旋转方向,并且可以作为更多实际实验和项目的基础。
该草图使直流电机沿一个方向加速,然后减速停止。一转后,电机反转其旋转方向并重复该过程。
#include
AF_DCMotor motor(4);
void setup()
{
//Set initial speed of the motor & stop
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop()
{
uint8_t i;
// Turn on motor
motor.run(FORWARD);
// Accelerate from zero to maximum speed
for (i=0; i<255; i++)
{
motor.setSpeed(i);
delay(10);
}
// Decelerate from maximum speed to zero
for (i=255; i!=0; i--)
{
motor.setSpeed(i);
delay(10);
}
// Now change motor direction
motor.run(BACKWARD);
// Accelerate from zero to maximum speed
for (i=0; i<255; i++)
{
motor.setSpeed(i);
delay(10);
}
// Decelerate from maximum speed to zero
for (i=255; i!=0; i--)
{
motor.setSpeed(i);
delay(10);
}
// Now turn off motor
motor.run(RELEASE);
delay(1000);
}
该草图首先包含 AFMotor.h 库。
第二行AF_DCMotor motor(motorPort#)
创建一个库对象。此处,您必须指定电机所连接的电机端口号。为端口 M1 写入 1,为端口 M2 写入 2,依此类推。
如果要将多个电机连接到屏蔽,请为每个电机创建一个单独的对象。例如,以下代码片段创建两个 AFmotor 对象。
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
在代码的设置和循环部分,我们只需调用下面列出的两个函数来控制电机的速度和方向。
setSpeed(speed)
功能控制电机的速度。范围speed
从 0 到 255,其中 0 表示关闭,255 表示全油门。在程序中,您可以随时更改速度。run(cmd)
功能控制电机的旋转方向。以下是有效值cmd
:
setSpeed(0)
。由于电机护罩缺乏动态制动,电机可能需要一些时间才能停止旋转。我们的下一个实验将涉及将步进电机连接到 L293D 扩展板。首先将电机护罩安装在 Arduino 顶部。
28BYJ-48 单极步进电机的额定电压为 5V,每转提供 48 步。因此,将外部 5V 电源连接到 EXT_PWR 端子。
最后,将电机连接到步进电机端子 M1-M2(端口#1)或 M3-M4(端口#2)。我们将其连接到 M3-M4。
NEMA 17 双极步进电机的额定电压为 12V,每转可提供 200 步。因此,需要将外部 12V 电源连接到 EXT_PWR 端子。
不要忘记拆下 PWR 跳线。
最后,将电机连接到步进电机端子 M1-M2(端口#1)或 M3-M4(端口#2)。我们将其连接到 M3-M4。