赞
踩
如果您打算构建自己的机器人,则需要控制各种电机,例如直流电机、步进电机和伺服系统,没有比 L293D 电机驱动器扩展板更好的选择了。它能够控制所有这些电机;不需要额外的模块。
L293D 电机驱动器扩展板具有各种低到中等复杂度项目所需的所有功能。它可以控制:
该扩展板的大脑是两个 L293D 电机驱动器和一个 74HC595 移位寄存器。
L293D是一款双通道H桥电机驱动器,可以控制两个直流电机或单个步进电机。由于该扩展板包含两个此类电机驱动器,因此它最多可以控制四个直流电机或两个步进电机。
另一方面,74HC595移位寄存器将Arduino的四个数字引脚扩展到两个L293D芯片的八个方向控制引脚。
支持 4.5 至 25 伏的电机电压范围。该电源可以与 Arduino 共享或单独使用。为了在两者之间进行选择,在两端电源连接器附近提供了一个标记为 PWR 的特殊跳线。缺省时这个跳线是短接状态,也就是说扩展板给开发板提供电源。但是要注意L293D支持高达25伏特的输入电压,如果给它接入高于12伏特的电压时要断开pwr跳线,然后单独给开发板提供电源。
另外L293D会产生1.5伏的压降,所以如果希望给6伏的电机供电时,至少要提供7.5伏的电压。
移除跳线后,电机电源将与 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 电机驱动器扩展板控制直流电机的速度和旋转方向,并且可以作为更多实际实验和项目的基础。
该草图使直流电机沿一个方向加速,然后减速停止。一转后,电机反转其旋转方向并重复该过程。
L293D可以同时驱动四个电机,如果使用AFMotor.h库,那么就需要单独为每一个电机建立一个实例。
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
我们在这里建立了4个AF_DCMotor的实例,来分别对应四个电机。当然也如果使用motor1来驱动第四个电机,就可以写成:AF_DCMotor motor1(4)。利用这四个变量就可以控制电机的运动了。
下面的代码,只使用了一个变量,驱动了一个电机。只是测试使用的程序。
- #include <AFMotor.h>
-
- AF_DCMotor motor(4);//驱动连接在m4
-
- 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。
将单极步进电机连接至 L293D 电机扩展板和 Arduino
NEMA 17 双极步进电机的额定电压为 12V,每转可提供 200 步。因此,需要将外部 12V 电源连接到 EXT_PWR 端子。
不要忘记拆下 PWR 跳线。
最后,将电机连接到步进电机端子 M1-M2(端口#1)或 M3-M4(端口#2)。我们将其连接到 M3-M4。
下面的示意图将向您展示如何使用 L293D 扩展板控制单极或双极步进电机,除了参数之外,这两种电机都是相同的stepsPerRevolution
。
在运行草图之前,请修改此参数以匹配电机的规格。例如,对于 NEMA 17,将其设置为 200;对于 28BYJ-48,将其设置为 48。
- #include <AFMotor.h>
-
- // Number of steps per output rotation
- // Change this as per your motor's specification
- const int stepsPerRevolution = 48;
-
- // connect motor to port #2 (M3 and M4)
- AF_Stepper motor(stepsPerRevolution, 2);
-
- void setup() {
- Serial.begin(9600);
- Serial.println("Stepper test!");
-
- motor.setSpeed(10); // 10 rpm
- }
-
- void loop() {
- Serial.println("Single coil steps");
- motor.step(100, FORWARD, SINGLE);
- motor.step(100, BACKWARD, SINGLE);
-
- Serial.println("Double coil steps");
- motor.step(100, FORWARD, DOUBLE);
- motor.step(100, BACKWARD, DOUBLE);
-
- Serial.println("Interleave coil steps");
- motor.step(100, FORWARD, INTERLEAVE);
- motor.step(100, BACKWARD, INTERLEAVE);
-
- Serial.println("Micrsostep steps");
- motor.step(100, FORWARD, MICROSTEP);
- motor.step(100, BACKWARD, MICROSTEP);
- }
该草图首先包含 AFMotor.h 库。
第二行AF_Stepper motor(48, 2)
创建一个库对象。此处,您必须指定电机的每转步数以及电机所连接的端口号。
在代码的设置和循环部分,我们只需调用下面列出的两个函数来控制电机的速度和方向。
setSpeed(rpm)
设置电机的速度,其中rpm
是您希望步进器转动的每分钟转数。step(#steps, direction, steptype)
每次您希望电机移动时都会调用该函数。#steps
是您希望它执行的步数。可以direction
是 FORWARD 或 BACKWARD,并且stepstyle
可以是以下任意一项:
我们的最终实验将涉及使用 L293D 屏蔽驱动伺服电机。
该扩展板将 16 位 PWM 输出引脚 D9 和 D10 连接到两个 3 引脚接头连接器,可用于连接两个伺服电机。请记住,D10 连接到伺服器 1,而 D9 连接到伺服器 2。
伺服电机直接由 Arduino 的 5V 电源供电,因此无需将任何东西连接到 EXT_PWR 端子。
将伺服电机接线至 L293D 电机扩展板和 Arduino
该草图基于伺服下 Arduino 示例中的标准扫描草图。它将伺服电机的轴来回扫过 180 度。
- #include <Servo.h>
-
- Servo myservo; // create servo object to control a servo
- int pos = 0; // variable to store the servo position
-
- void setup()
- {
- // attaches the servo on pin 10 to the servo object
- myservo.attach(10);
- }
-
- void loop()
- {
- // sweeps from 0 degrees to 180 degrees
- for(pos = 0; pos <= 180; pos += 1)
- {
- myservo.write(pos);
- delay(15);
- }
- // sweeps from 180 degrees to 0 degrees
- for(pos = 180; pos>=0; pos-=1)
- {
- myservo.write(pos);
- delay(15);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。