欢迎访问端子机|全自动端子机|剥线机|电脑剥线机|昆山市博科鑫源电子设备有限公司网站!
全国服务热线
0512-57980713

栏目导航

联系方式
  • 13776304479
  • 0512-50339330
  • bkdzsbr@163.com
  • 江苏省昆山市玉山镇丁泾路99号3号房

使用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);
	}
}