如何使用Arduino和L293D电机驱动器芯片来控制小型DCmotor的方向和速度

电子说

1.3w人已加入

描述

概述

在本课程中,您将学习如何使用Arduino和L293D电机驱动器芯片来控制小型DCmotor的方向和速度。

电位器控制电动机的速度,并通过按钮控制方向。

零件

要构建本课中描述的项目,您将需要以下零件。

零件 数量

小型6V直流电动机

1

L293D IC

1

10kΩ可变电阻器(pot)

1

触摸开关

1

Arduino

半面包板

1

Arduino

Arduino Uno R3

1

跳线包

1

实验

在获得用于控制电机的Arduino板之前,我们应该先对L293D电机控制芯片进行实验,以了解其工作原理。

我们可以仅使用Arduino向电动机提供5V电压。

Arduino

请注意电动机的旋转方式。您可以通过将电动机轴夹在手指之间来做到这一点。交换电动机导线,使原先要达到+ 5V的电动机导线到达GND,反之亦然。电动机将沿相反方向旋转。

这为我们提供了有关L293D芯片工作原理的线索。它的控制销使我们能够执行等效的交换电动机端子以反转电动机方向的操作。

按如下所示构建面包板。 Arduino仍然只是供电,但是我们可以在让Arduino接管之前手动对控制引脚进行实验。

Arduino

我们感兴趣的L293D的三个引脚是引脚1(启用),引脚2(In1)和引脚7(In2)。 )。使用紫色,黄色和橙色的跳线将它们连接到5V或GND。

如上所示,电动机应该在一个方向上旋转,我们将其称为A方向。

如果将引脚1(使能)移至GND时,无论使用控制引脚In1和In2做什么,电动机都将停止。启用可打开和关闭所有功能。这对于使用PWM输出控制电动机速度非常有用。将引脚1重新连接至5V,以便电动机再次启动。

现在尝试将In1(引脚2,黄色)从5V移至GND。In1和In2现在都已连接至GND,因此电动机将再次停止。/p》

将In2从GND移至5V将导致电动机沿相反方向(B方向)旋转。

最后,将In1移回5V,以使In1和In2都处于5V导致电动机停止。

引脚In1和In2对电动机的影响总结在下表中:

In1In2电动机

GNDGND已停止

5VGND向A方向转动

GND5V向B方向转动

5V5V已停止

面包板布局

现在我们已经掌握了直接控制电机的功能,我们可以让Arduino管理 Enable , In1 和 In2 引脚。

构建面包板时,需要确保IC正确定位。凹口应位于面包板的顶部。

Arduino

Arduino代码

将以下草图加载到您的Arduino上。

下载:文件

复制代码

/*

Adafruit Arduino - Lesson 15. Bi-directional Motor

*/

int enablePin = 11;

int in1Pin = 10;

int in2Pin = 9;

int switchPin = 7;

int potPin = 0;

void setup()

{

pinMode(in1Pin, OUTPUT);

pinMode(in2Pin, OUTPUT);

pinMode(enablePin, OUTPUT);

pinMode(switchPin, INPUT_PULLUP);

}

void loop()

{

int speed = analogRead(potPin) / 4;

boolean reverse = digitalRead(switchPin);

setMotor(speed, reverse);

}

void setMotor(int speed, boolean reverse)

{

analogWrite(enablePin, speed);

digitalWrite(in1Pin, ! reverse);

digitalWrite(in2Pin, reverse);

} /*

Adafruit Arduino - Lesson 15. Bi-directional Motor

*/

int enablePin = 11;

int in1Pin = 10;

int in2Pin = 9;

int switchPin = 7;

int potPin = 0;

void setup()

{

pinMode(in1Pin, OUTPUT);

pinMode(in2Pin, OUTPUT);

pinMode(enablePin, OUTPUT);

pinMode(switchPin, INPUT_PULLUP);

}

void loop()

{

int speed = analogRead(potPin) / 4;

boolean reverse = digitalRead(switchPin);

setMotor(speed, reverse);

}

void setMotor(int speed, boolean reverse)

{

analogWrite(enablePin, speed);

digitalWrite(in1Pin, ! reverse);

digitalWrite(in2Pin, reverse);

}

定义了引脚,并在“设置”功能中正常设置了它们的模式。

在循环功能中,电机速度的值为通过将锅中的模拟读数除以4可以找到。

因数为4,因为模拟读数将在0到1023之间,并且模拟输出需要在0到255之间。

如果按下按钮,电机将正向运行,否则将反向运行。 “ reverse”变量的值仅设置为从开关引脚读取的值。因此,如果按下按钮,它将为False,否则将为True。

速度和反向值将传递给名为“ setMotor”的函数,该函数将设置驱动器芯片上的适当引脚以控制

下载:文件

复制代码

void setMotor(int speed, boolean reverse)

{

analogWrite(enablePin, speed);

digitalWrite(in1Pin, ! reverse);

digitalWrite(in2Pin, reverse);

} void setMotor(int speed, boolean reverse)

{

analogWrite(enablePin, speed);

digitalWrite(in1Pin, ! reverse);

digitalWrite(in2Pin, reverse);

}

首先,通过对enable引脚使用AnalogWrite来设置速度。无论L293的in1和in2引脚设置为什么,L293的使能引脚都可以打开或关闭电动机。

要控制电动机的方向,in1和in2引脚必须为

如果in1为HIGH而in2为LOW,则电动机将以一种方式旋转;如果in1为LOW而in2为HIGH,则电动机将以相反的方向旋转。/p》

‘!’命令的意思是“不是”。因此,in1的第一个digitalWrite命令将其设置为与“ reverse”的值相反的值,因此,如果reverse为HIGH则将其设置为LOW,反之亦然。

in2的第二个digitalWrite将引脚设置为“ reverse”的值。这意味着它将永远与in1是相反的。

L293D

这是一个非常有用的芯片。它实际上可以独立控制两个电动机。在本课程中,我们仅使用一半的芯片,芯片右侧的大多数引脚用于控制第二个电机。

Arduino

第二个电动机将连接在OUT3和OUT4之间。您还需要另外三个控制引脚。

EN2已连接到Arduino上的PWM使能输出引脚

IN3和IN4已连接到Arduino上的数字输出。

L293D具有两个+ Vpin(8和16)。 ‘+ Vmotor(8)引脚为电机供电,而+ V(16)则为芯片逻辑供电。我们已经将它们都连接到Arduino 5V引脚。但是,如果您使用的是功率更高的电机或更高电压的电机,则可以使用连接到正电源的引脚8为电机提供单独的电源,而第二个电源的接地端则连接到Arduino的接地端。/p》

其他要做的事情

您可以尝试更改草图以控制电动机,而无需使用电位器或开关。它可能会在向前方向上开始缓慢,然后逐渐变快,然后变慢,然后反转,重复此模式。

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分