使用L293D电机驱动板和Arduino控制直流,步进和伺服电机
文章来源:本站 发表时间:2021-04-15 23:38:38 点击:
如果您打算组装新的机器人,那么您最终将希望了解如何控制各种电机端子机,例如DC电机,步进电机和伺服器。最简单,最便宜的方法之一是将L293D电机驱动器连接到Arduino。它是一种功能齐全的电动机驱动器,非常适合许多机器人和CNC项目。
它可以驱动:
L293D电机驱动器和74HC595移位寄存器
L293D电机驱动器和74HC595移位寄存器
通过屏蔽为电动机供电时,有三种情况。
警告:
跳线安装到位后,请勿为EXT_PWR输入供电。否则,电机护罩和Arduino可能会损坏!
作为奖励端子机,董事会提供以下功能:
输出端子
L293D屏蔽层上未使用的引脚屏蔽层上未使用数字引脚#2,#13和模拟引脚A0-A5。
模拟引脚在右下角断开连接,并且引脚2的分支较小。如果要使用这些引脚,可以将一些接头连接到它。
安装AFMotor库
为了与屏蔽层通信,我们需要安装AFMotor.h库,以便我们可以发出简单的命令来控制DC,步进和伺服电机。
要安装该库,请导航至“ sketch”>“包含库”>“管理库...”,然后等待库管理器下载库索引并更新已安装库的列表。
输入“ motor shield”以过滤搜索。应该有几个条目。查找Adafruit提供的Adafruit Motor Shield库(V1固件)。单击条目,然后选择“安装”。
L293D直流电动机的驱动器
现在我们了解屏蔽的所有知识,我们可以将其连接到Arduino!
首先将开发板插入Arduino的顶部。
接下来,将电源连接到电动机。尽管您可以将4. 5至25V之间的电压的直流电动机连接到板上,但在我们的实验中,我们使用的是额定为9V的直流电动机。因此,我们将外部9V电源连接到EXT_PWR端子。
现在,将电动机连接到M1,M2,M3或M4电动机端子。在我们的实验中,我们将其连接到M4。
下图将使您全面了解如何使用L293D电动机驱动器护罩来控制DC电动机的速度和旋转方向,并可作为更实际的实验和项目的基础。
#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_DCM电动机(motorPort#);创建一个库对象。在这里,您需要声明电动机连接的电动机端口号。对于端口M1,写1,对于M2,写2,依此类推。
如果要将多个电动机连接到驱动器,请为每个电动机创建一个单独的对象。例如,以下代码段创建了两个AFmotor对象。
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
L293D步进电机驱动器
让我们将步进电机连接到L293D。首先将开发板插入Arduino的顶部。
用于28BYJ-48单极步进器
如果使用28BYJ-48单极步进电机,则这些电机的额定电压为5V,每转可提供48步。因此,将外部5V电源连接到EXT_PWR端子。
请记住要卸下PWR跳线。
现在,将电动机连接到M1-M2(端口号1)或M3-M4(端口号2))步进电机端子。在我们的实验中,我们将其连接到M3-M4。
p>
对于NEMA 17双极步进器
如果使用NEMA 17双极步进电机,则这些电机的额定电压为12V,每转可提供200步。因此,将外部12V电源连接到EXT_PWR端子。
请记住要卸下PWR跳线。
现在,将电动机连接到M1-M2(端口号1)或M3-M4(端口号2))步进电机端子。在我们的实验中,我们将其连接到M3-M4。
p>
Arduino代码
下图将使您全面了解如何使用L293D控制单极性或双极性步进电机。除了stepsPerRevolution参数之外,两个电机都是相同的。
在尝试绘制草图之前,请根据电动机的规格更改此参数。例如,对于NEMA 17,将其设置为200,对于28BYJ-48,将其设置为48。
#include
// 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);创建一个库对象。在这里,您需要传递电动机每转的步数和电动机所连接的端口号作为参数。
#p#分页标题#e#在代码的设置和循环部分中,我们只需调用以下两个函数即可控制电动机的速度和旋转方向。
L293D驱动伺服电机
使用L293D驱动伺服器非常容易。
电机接线实际上通过两个3引脚连接器将Arduino的16位PWM输出引脚#9和#10断开到边缘。
Servos的电源来自Arduino的板载5V稳压器,因此您无需将任何东西连接到EXT_PWR端子。
当我们使用板载PWM引脚时,草图将使用IDE的内置Servo库。
#include
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);
}
}