使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第1张图片

如果您打算构建自己的机器人,则需要控制各种电机,例如直流电机、步进电机和伺服系统,没有比 L293D 电机驱动器扩展板更好的选择了。它能够控制所有这些电机;不需要额外的模块。

L293D 电机驱动器扩展板具有各种低到中等复杂度项目所需的所有功能。它可以控制:

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第2张图片

硬件概述

驱动芯片组

该扩展板的大脑是两个 L293D 电机驱动器和一个 74HC595 移位寄存器。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第3张图片

L293D是一款双通道H桥电机驱动器,可以控制两个直流电机或单个步进电机。由于该扩展板包含两个此类电机驱动器,因此它最多可以控制四个直流电机或两个步进电机。

另一方面,74HC595移位寄存器将Arduino的四个数字引脚扩展到两个L293D芯片的八个方向控制引脚。

电机电源连接

支持 4.5 至 25 伏的电机电压范围。该电源可以与 Arduino 共享或单独使用。为了在两者之间进行选择,在两端电源连接器附近提供了一个标记为 PWR 的特殊跳线。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第4张图片

当跳线就位时,通过 Arduino 直流电源插孔为电机供电。在这种情况下,电机和 Arduino 并未在物理上相互隔离。这种方法使得扩展板更容易使用,因为它只需要一个电源;但只有当电机电源电压小于12V时才可以使用此方法。

移除跳线后,电机电源将与 Arduino 断开,从而使电机与 Arduino 物理隔离。但在这种情况下,您必须为标有 EXT_PWR 的两端电源连接器提供单独的电机电源。

警告:

在跳线就位时向 EXT_PWR 两端电源连接器供电将使两个电源短路,可能会损坏电机护罩以及 Arduino!

直流电机连接

两个 L293D IC 的输出通道均通过两个标记为 M1、M2、M3 和 M4 的 5 针螺丝端子延伸至屏蔽边缘。这些端子可连接总共四个工作电压为 4.5 – 25V 的直流电机。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第5张图片

模块上的每个通道可为直流电机提供高达 600 mA(1.2A 峰值)的电流。然而,提供给电机的电流量取决于电机电源的容量。

步进电机连接

您还可以将两个步进电机连接到输出端子。一个步进电机连接到M1-M2,另一个连接到M3-M4。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第6张图片

如果您有 5 线单极步进电机,请将中心抽头线连接到中心接地端子。

伺服电机连接

该扩展板将 16 位 PWM 输出线引至两个 3 针接头连接器,您可以使用它们连接两个伺服电机。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第7张图片

不幸的是,伺服电机直接由 Arduino 的 5V 电源供电,这通常是一个坏主意。这样做可能会导致 Arduino 的板载 5V 稳压器过热,并且还会在 5V 电源上引入电噪声。从好的方面来说,它在这些电源引脚上有一个 100uF 的电容器,这有点帮助。

所以,如果你想使用这个功能,只能使用像SG90这样的小型舵机。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第8张图片

包括一个下拉电阻器阵列,可在加电期间保持电机关闭。

板载LED指示电机电源工作正常。如果它不亮,电机将不会运行。

RESET按钮只不过是Arduino的重置按钮。它已被带到顶部以便于访问。

右下角提供了 6 个模拟引脚(A0 至 A5)以及 5V 和接地连接。您可以使用标头填充它们,使它们可用于连接各种传感器。

Arduino 到屏蔽引脚的连接

对于直流和步进电机控制,扩展板使用引脚 D3、D4、D5、D6、D7、D8、D11 和 D12。

D9和D10用于控制伺服电机。D10 连接到舵机 1,而 D9 连接到舵机 2。

请注意,扩展板不使用 D2 或 D13 引脚,但是可以先使用原型板再使用驱动板,即可使用这两个引脚,或者自己动手加焊两根针。

安装 AFMotor 库

要与扩展板通信,我们必须首先安装 AFMotor.h 库。这将使我们能够通过简单的命令控制直流电机、步进电机和伺服电机。

要安装库,请导航到Sketch > Include Library > Manage Libraries...等待库管理器下载库索引并更新已安装库的列表。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第9张图片

输入'motorshield'来过滤您的搜索。查找AdafruitAdafruit Motor Shield 库(V1 固件)。单击该条目,然后选择安装。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第10张图片

实验 1 – 使用 L293D 屏蔽驱动直流电机

现在我们已经了解了有关扩展板的所有知识,我们可以开始将其连接到 Arduino!

接线

首先将电机护罩安装在 Arduino 顶部。

接下来,连接电机电源。在我们的实验中,我们使用直流变速箱电机,也称为“TT”电机,常见于两轮驱动机器人中。它们的额定电压为 3 至 12V。因此,我们将外部9V电源连接到EXT_PWR端子。

最后,将电机连接到 M1、M2、M3 或 M4 端子之一。我们将其连接到 M4。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第11张图片

Arduino代码

下面的草图将向您展示如何使用 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
    • 向前– 向前旋转电机。
    • 向后– 向后旋转电机。
    • RELEASE(释放) ——这会停止电机,相当于setSpeed(0)。由于电机护罩缺乏动态制动,电机可能需要一些时间才能停止旋转。

实验 2 – 使用 L293D 屏蔽驱动步进电机

我们的下一个实验将涉及将步进电机连接到 L293D 扩展板。首先将电机护罩安装在 Arduino 顶部。

28BYJ-48 单极步进器接线

28BYJ-48 单极步进电机的额定电压为 5V,每转提供 48 步。因此,将外部 5V 电源连接到 EXT_PWR 端子。

最后,将电机连接到步进电机端子 M1-M2(端口#1)或 M3-M4(端口#2)。我们将其连接到 M3-M4。

使用 L293D 电机驱动器扩展板和 Arduino 控制直流、步进和伺服_第12张图片

将单极步进电机连接至 L293D 电机扩展板和 Arduino

NEMA 17 双极步进器的接线

NEMA 17 双极步进电机的额定电压为 12V,每转可提供 200 步。因此,需要将外部 12V 电源连接到 EXT_PWR 端子。

不要忘记拆下 PWR 跳线

最后,将电机连接到步进电机端子 M1-M2(端口#1)或 M3-M4(端口#2)。我们将其连接到 M3-M4。

你可能感兴趣的:(单片机,嵌入式硬件)