|
如果您计划组装一台机器人,最终会想了解如何控制各种电机,如直流电机、步进电机和伺服电机。最简单、最便宜的方法之一是使用L293D电机驱动扩展板和Arduino开发板。它是一个功能齐全的电机扩展板 - 非常适合许多机器人和CNC项目。
它可以驱动: ● 4个双向直流电机,8位速度选择(0-255) ● 2个步进电机(单极或双极),带单线圈、双线圈、交错或微步进。 ● 2个伺服电机
L293D电机驱动器和74HC595移位寄存器 L293D是一款双通道H桥电机驱动器,能够驱动一对直流电机或单个步进电机。
由于该扩展板带有两个L293D电机驱动芯片组,这意味着它可以单独驱动多达四个直流电机,使其成为构建四轮机器人平台的理想选择。
该扩展板总共提供4个H桥,每个H桥可为电机提供高达0.6A的电流。该扩展板还带有一个74HC595移位寄存器,将Arduino的4个数字引脚扩展到两个 L293D芯片的8个方向控制引脚。
电源
通过扩展板为电机供电有三种方式: ● Arduino和电机的单直流电源:如果您想为Arduino和电机提供单直流电源,只需将其插入Arduino上的DC插孔或扩展板上的2针EXT_PWR端子。将电源跳线放在电机扩展板上。只有在电机电源电压低于12V时才能使用此方法。 ● (推荐)Arduino通过USB供电,电机通过直流电源:如果您想让Arduino通过USB断电,电机通过直流电源断电,请插入USB线。然后将电机电源连接到扩展板上的EXT_PWR端子。不要将跳线放在扩展板上。 ● 为Arduino和电机提供两个独立的直流电源:如果您想为Arduino和电机提供两个独立的直流电源。将Arduino的电源插入DC插孔,并将电机电源连接到EXT_PWR端子。确保从电机扩展板上拆下跳线。
输出端子 两个L293D芯片的输出通道都通过两个5针螺钉端子 M1、M2、M3和 M4断开。您可以将四个电压在4.5到25V之间的直流电机连接到这些端子。
模块上的每个通道可以为直流电机提供高达600mA的电流。但是,提供给电机的电流取决于系统的电源。您还可以将两个步进电机连接到输出端子。一个步进电机连接到电机端口M1-M2,另一个连接到M3-M4。
如果您碰巧有单极步进电机,还提供GND端子。您可以将两个步进电机的中心抽头连接到此端子。
扩展板将16位 PWM输出线引出到两个3针排针,您可以将两个伺服电机连接到这些排针。
安装AFMotor库 为了与扩展板通信,我们需要安装AFMotor.h库,以便我们可以发出简单的命令来控制直流、步进和伺服电机。
要安装库,请导航到 Sketch > Include Library > Manage Libraries... 等待库管理器下载库索引并更新已安装库的列表。
输入“motor shield”过滤您的搜索。应该有几个条目。查找Adafruit Motor Shield library(V1 Firmware) by Adafruit。单击该条目,然后选择安装。
使用L293D扩展板驱动直流电机 现在我们了解了有关扩展板的一切,我们可以开始将它连接到Arduino开发板上!
首先将扩展板插入Arduino顶部。接下来,将电源连接到电机。虽然您可以将电压在4.5到25V之间的直流电机连接到扩展板,但在我们的实验中,使用的是额定电压为9V的直流电机。因此,我们将外部9V电源连接到EXT_PWR端子。
现在,将电机连接到M1、M2、M3 或M4电机端子。在我们的实验中,将它连接到M4。
下面的草图将让您全面了解如何使用L293D电机驱动器扩展板来控制直流电机的速度和旋转方向,并可以作为更多实际实验和项目的基础。
- 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库。
接下来创建库对象。这里需要声明电机连接的电机端口号。对于端口M1写入1,对于M2写入2,依此类推。如果要将多个电机连接到扩展板,请为每个电机创建单独的对象。例如,以下代码片段创建了两个AFmotor对象。 - AF_DCMotor motor1(1);
- AF_DCMotor motor2(2);
复制代码
在代码的setup()和loop()函数部分,我们只需调用以下两个函数来控制电机的速度和旋转方向。 ● setSpeed(speed) 函数设置电机的速度。速度范围从0到255,0表示关闭,255表示全速。您可以在程序中随时设置速度。 ● run(cmd) 函数设置电机的运行模式。 cmd 的有效值为: ● FORWARD – 向前运行(实际旋转方向取决于电机接线) ● BACKWARD - 向后运行(旋转将与 FORWARD 方向相反) ● RELEASE – 停止电机。这会切断电机的电源,相当于 setSpeed(0)。电机扩展板不实现动态制动,因此电机可能需要一些时间才能减速。 |