回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【雕爷学编程】Arduino动手做(154)---AFMotor电机扩展板模块 中等

头像 驴友花雕 2023.07.07 25 5

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十四:L293D四路电机驱动扩展板 motor control shield 马达板 Adafruit Motor Shield模块 Arduino AFMotor 电机扩展板


00.jpg0.jpg

知识点:L293D芯片

L293D是ST公司生产的一种高电压、小电流电机驱动芯片,其设计用于在4.5 V至36 V的电压下提供高达600 mA的双向驱动电流。可以用于驱动电感性负载,例如继电器,螺线管,DC和双极步进电机,以及在正电源应用中的其他大电流/高压负载。

每个输出都是一个完整的图腾柱驱动电路,带有一个达林顿晶体管沉和一个伪达林顿源。驱动程序成对启用,驱动程序1和2由1,2EN启用,驱动程序3和4由3,4EN启用。

L293D的工作温度范围为0°C至70°C。


01- (1) (1).jpg

L293D特性

电源电压范围:4.5V至36V

单独的输入逻辑电源

内部ESD保护

热关断

高噪声抗扰度输入的

通标L293和L293DSGS的功能替代

输出电流1A每通道(600毫安L293D)

峰值输出电流每通道2A(1.2 L293D)

输出钳位二极管的感性瞬态抑制(L293D)

L293D参数

制造商: STMicroelectronics

产品种类: 电机/运动控制器和驱动器

类型: Driver

工作电源电压: 4.5 V to 36 V

封装 / 箱体: POWERDIP

封装: Tube


02.jpg

该器件是单片集成的高电压,高电流的四通道驱动器,旨在接受标准的DTL或TTL逻辑电平并驱动感性负载(例如继电器螺线管,直流和步进电机)和开关功率晶体管。为了简化用作两个桥接器的使用,每对通道都配备了一个使能输入。 独立为逻辑电路提供了电源输入,允许在较低电压下工作,并包括内部钳位二极管。该设备适合在高达5 kHz的频率下切换应用。L293D用16引线塑料组装具有4个中心引脚连接到gether并用于散热的包装L293DD装配在20引线表面中具有8个中心引脚连接到gether并用于散热的安装座。

内部电路框图

 

03.jpg
03-.jpg
03-0.jpg

1,2EN:启用驱动器通道1和2(高可用有效输入)

<1-4> A:驱动器输入,同相

<1-4>Y:驱动输出

3,4EN:启用驱动器通道3和4(高允许有效输入)

4、5、12、13:设备接地和散热器引脚。通过多个实心通孔连接到印刷电路板接地层

V CC1:用于内部逻辑转换的5V电源

V CC2:驱动器的电源VCC 4.5 V至36 V


03-3.jpg

L293D电气特性
(对于每个通道,VS = 24 V,VSS = 5 V,Tamb = 25°C,除非另有规定)

 

04.jpg
04-0.jpg
04-1.jpg
04-2.jpg
04-3.jpg
04-4.jpg
04-5.jpg
04-6.jpg

L293D(双H桥路)工作原理(视频21分钟)

L293D驱动电机原理视频讲解

https://www.bilibili.com/video/BV1Kz4y1R7u6/?spm_id_from=333.788.videocard.15


04-7.jpg

L293D四路电机驱动模块 扩展板 motor control shield 马达板


07.jpg

这是一款常用的直流电机驱动模块,采用293D芯片小电流直流电机驱动芯片。管脚被做成了rduino兼容的,也方便了爱好者快速的基于rduino的开发。

rduino 是一款很好的电子制作入门,有了电机扩展板可以很好的成为机器人开发平台。这里介绍一款能驱动各种简单到稍复杂项目的全功能的电机扩展板。

适用范围:rduino初学者,rduino实验器材平台,rduino互动电子,Arduino机器人等。

特点:功能多,操作方便,有强大的驱动库支持及功能更新。

缺点:I/O占用较多在同时驱动四路电机的情况下(相对rduino I/O少的版本而言),小功率。

可驱动4路直流电机或者2路步进电机的同时还能驱动2路舵机,支持最新rduino UNO, rduino Mega 2560

可以这样搭配:

驱动四路直流电机和两路舵机

驱动两路直流电机和一路步进电机和两路舵机

驱动两路步进电机和两路舵机


06 (1).jpg

L293D四路电机扩展板特点

  * 2个5V伺服电机(舵机)端口 联接到Arduino的高解析高精度的定时器-无抖动!

  * 多达4个双向直流电机及4路PWM调速(大约0.5%的解析度)

  * 多达2个步进电机正反转控制,单/双步控制,交错或微步及旋转角度控制。

  * 4路H-桥:L293D 芯片每路桥提供.0.6A(峰值1.2A)电流并且带有热断电保护,4.5V to 36V。

  * 下拉电阻保证在上电时电机保持停止状态。

  * 大终端接线端子使接线更容易(10 - 22AWG)和电源。

  * 带有Arduino复位按钮。

  * 2个大终端外部电源接线端子 保证逻辑和电机驱动电源分离。

  * 兼容Mega, Diecimila, & Duemilanove。

  *下载方便使用的Arduino软件库快速进行项目开发。


05 (1).jpg

L293D四路电机扩展板电原理图


08.jpg08-0.png

L293D四路电机扩展板模块原理

使用L293D来驱动电机的,中间有一个74HC595芯片,是将串行信号转为并行信号的,因为该模块是为arduino设计的,arduino的I/O口较少,控制4个直流电机需要12个引脚,使用74HC595可以减少4个引脚的使用,也可以取掉74HC595芯片,焊接接线,直接使用51单片机并行控制2个L293D芯片从而控制电机。

 

74HC595

74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。简单的说,先将模块的引脚7置0,然后模块的引脚4(74HC595芯片的数据输入时钟端)接受到一个上升沿,就将芯片中的8位数据左移一位,空出低位将引脚8(74HC595芯片的串行数据输入端)的0或1信号写入低位,写入八次就将控制4个电机的8位信号写入74HC595的芯片中了(M3M4M3M2M1M1M2M4),然后在给引脚12一个上升沿,就将芯片中的数据输出在芯片的引脚上(Q0~Q7)。

 

程序计数器——74HC595(视频6分32秒)

https://www.bilibili.com/video/BV1ME411T7EY/?from=search&seid=17494597794294138238


08-.jpg

电机和驱动器

电机是许多机器人和电子项目不可分割的一部分,根据应用的不同,它们可以使用不同的类型。以下是有关不同类型电机的一些信息:

直流电机(DC Motor):直流电机是最常见的电机,可用于许多应用。我们可以在遥控车、机器人等中看到它。这种电机结构简单。它将通过向其端部施加适当的电压并通过切换电压极性来改变其方向来开始滚动。直流电机的速度由施加的电压直接控制。当电压电平小于最大容许电压时,速度会降低。

步进电机(Stepper Motor):在一些项目中,如3D打印机、扫描仪和数控机床,我们需要准确了解电机旋转步数。在这些情况下,我们使用步进电机。步进电机可将整个旋转分成多个相等的步长。每步的旋转量由电机结构决定。这些电机具有非常高的精度。

伺服电机(Servo Motor):伺服电机是一种简单的直流电机,带有位置控制服务。通过使用伺服电机,您将能够控制轴的旋转量并将其移动到特定位置。它们通常尺寸小,是机器人手臂的最佳选择。

TT马达直流减速电机,作为一款被广泛应用于电子DIY,机器人制作,智能车制作环节重点动力装置,以其组装简单,扩展性能强,价格低廉等诸多特点受到广大师生和电子爱好者的喜欢。

主要参数

额定电压:4.5-6V

空载转速:90±10rpm (具体视减速比而定)

负载电流:190mA(250mA 最大)

最大扭矩:0.8Kg·cm

这里做实验准备使用TT马达

 

webwxgetmsgimg (5).jpg

为什么用L293D驱动电机?
驱动电动机需要大电流。另外,旋转方向和速度是两个需要控制的重要参数。这些要求可以通过使用微控制器(或像Arduino这样的开发板)来处理。但有个问题;微控制器无法提供足够的电流来运行电机,如果直接将电机连接到微控制器,可能会损坏微控制器。例如,Arduino UNO引脚限制为40mA电流,远小于控制小型电机所需的100-200mA电流。要解决这个问题,我们应该使用电机驱动器。电机驱动器可以连接到微控制器以接收命令并以高电流运行电机。L293D是最受欢迎的电机驱动器之一,可驱动直流电机,电流负载高达1A.L293D有4个输出,适用于4线步进电机。 L293D也可用于驱动伺服电机。

 

07-1 (1).jpg

L293D四路电机扩展板支持Arduino UNO. Arduino Mega2560

可以这样搭配

驱动四路直流电机和两路舵机

驱动两路直流电机和一路步进电机和两路舵机

驱动两路步进电机和两路舵机

可以同时控制4个直流电机和2个步进电机和两个伺服电机(舵

机)。有专门的代码库。导入库后,简单使用。


12 (1).jpg

L293D四路电机扩展板接线图


09 (1).jpg11.jpg

在L293D上哪些引脚我们可以使用呢?

所有的六个模拟输入引脚都是可用的。它们也可以当做数字芯片来使用。(引脚14到19),数字引脚2和13可用。

下面的引脚只有在下面提到的直流或者步进电机工作时才会被用到

    数字引脚11: 1号直流电机或者1号步进电机

    数字引脚3: 2号直流电机或者1号步进电机

    数字引脚5: 3号直流电机或者2号步进电机

    数字引脚6:4号直流电机或者2号步进电机

下面的引脚只有在下面的直流或者步进电机工作时才会被用到

    数字信号4,7,8,和12通过74hc595(serial-to-parallel)来驱动直流或者步进电机

数字引脚4:DIR CLK触发

数字引脚7:DIR EN指令的允许端EN

数字引脚8:DIR SER

数字引脚12:DIR ATCH中断连接

下面的引脚只有在舵机工作时才会被用到

    数字信号9:1号舵机

    数字信号10: 2号舵机

所以只要相应的引脚没被L293D驱动板使用到,你也是可以拿来用的但前提是你得自己焊出引脚来。另外,GND、5V引脚必须也要连接,否则的话就无法稳定地控制直流电动机。


10 (1).jpg

外接电源供电

如下图所示,AFMotor电机扩展板上配有外接电源接口。该接口所连接的直流电源可以为电机和Arduino开发板供电。

 

使用AFMotor电机扩展板驱动电机时,首要考虑的问题就是如何为扩展板供电。如果电源输出功率达不到驱动电机的要求,那么电机是无法正常工作的。在考虑如何选择电源时,我们需要重点关注两个方面 ,一个是电源电压,一个是电源电流。

注意:外接电源极性千万不要接反,否则会对扩展板造成损坏!

外接电源电压要求

AFMotor扩展板中起关键作用的芯片是L293D。该芯片所允许的直流电源电压范围是4.5V ~25V。因此AFMotor扩展板外接电源接口允许我们连接的电源也是4.5V ~25V。请注意:这是一个很宽泛的电压指标。具体我们应该连接的电源电压有多大,这是由被驱动的电机工作电压来决定的。

外接电源电流要求

与上面提到的电源电压要求相同,外接电源的电流要求也是由被驱动的电机来决定的。通常我们使用AFMotor电机扩展板所驱动的电机就是普通的模型电机(如以上电源讲解中的图片所示)。对于这一类型的电机,它们的工作电流大约是500mA左右,因此我们只要为扩展板配一个500 mA~1000 mA的外接电源就足够了。请注意,假如您所驱动的电机工作电流超过500mA,那么就要考虑为扩展板上的L293D加装散热片了。


14 (1).jpg

电源使用

为直流电动机,电压和电流需求供电电动机需要大量能量,尤其是便宜的电动机,因为它们的效率较低。首先要弄清楚电动机要使用的电压。如果幸运的话,您的电动机带有一些规格。一些小型的业余电动机仅打算以1.5V的电压运行,但6-12V电动机的使用却一样普遍。该屏蔽罩的电机控制器设计为在 4.5V至25V 范围内运行。

 

MOST 1.5-3V电动机将无法工作

电流要求:要弄清的第二件事是电动机需要多少电流。该套件随附的电机驱动器芯片旨在为每个电机提供高达600 mA的电流,峰值电流为1.2A。请注意,一旦接近1A,您可能会希望在电机驱动器上放一个散热器,否则会出现热故障,从而可能烧坏芯片。

 

使用SN754410

某些人使用SN754410电机驱动器芯片是因为它与引脚兼容,具有输出二极管,每个电机可提供1A电流,峰值2A电流。在仔细阅读数据表并与TI技术支持和电源工程师进行讨论之后,看来输出二极管仅设计用于ESD保护,并且将其用作反冲保护是一种黑客行为,并且不能保证性能。因此,该套件不随SN754410一起提供,而是使用带有集成反冲保护二极管的L293D。如果您愿意冒险,并且需要额外的流动资金,请随时购买SN754410并更换提供的芯片。

 

需要更多电源吗?请购买另一组L293D驱动器并将其焊接在板上的顶部(背负式)。瞧,当前功能加倍!您可以在顶部再焊接2个芯片,否则可能不会为您带来很多好处

 

您不能用9V电池来驱动电动机,因此甚至不浪费时间/电池! 使用大号铅酸或镍氢电池。它还非常建议您设置两个电源(分离电源),一个用于Arduino,另一个用于电机。 99%的“怪异电机问题” 是由于共享电源线上的噪声引起的供应和/或没有足够的供应!

 

如何设置Arduino + Shield来为电机供电 Servos的电源是与Arduino使用的相同的5V电压。建议使用小型业余伺服器。如果您想要更好的东西,请切断去往伺服连接器上+的走线,并为您自己的5-6V电源接线!

 

直流电动机由“高压电源”供电,而不是经过调节的5V电源。请勿将电动机电源连接到5V线。除非您确定自己知道自己在做什么,否则这是一个非常非常糟糕的主意!

 

可以在两个地方获得电动机的“高压电源”。一个是Arduino板上的DC插孔,另一个是屏蔽板上标有 EXT_PWR 的2端子块.Arduino上的DC插孔具有保护二极管,因此您将无法弄乱如果插入错误的电源,情况可能会变得非常糟糕。但是,屏蔽层上的 EXT_PWR端子没有保护二极管(出于相当充分的理由)。请小心不要将其向后插入,否则您将破坏电机护罩和/或Arduino!

如果您想要一个为Arduino和电机提供单个DC电源,只需将其插入Arduino的DC插孔或屏蔽板上的2针PWR_EXT模块。将电源跳线放在电动机的护罩上。

 

如果您有Diecimila Arduino,请将Arduino电源跳线设置为EXT。

 

请注意,如果电池电源无法提供恒定的电源,您可能会遇到Arduino重置问题,但这不是建议您为电机项目供电的方法

如果您想让 Arduino的USB电源关闭,而电机的电源是直流电源,插入USB电缆。然后将电动机电源连接到屏蔽板上的PWR_EXTblock。请勿将跳线放在防护罩上。这是为电机项目供电的建议方法

(如果您有Diecimila Arduino,请不要忘记将Arduino电源跳线设置为USB。如果您有Diecimila,则可以交替执行以下操作:将DC电源插入

如果您要 2个用于Arduino和电机的独立直流电源。请插入Arduino的电源插入DC插孔,然后将电动机电源连接到PWR_EXT块。确保将跳线从电动机护罩上卸下。

如果您有Diecimila Arduino,请将Arduino跳线设置为EXT。这是为电动机项目供电的建议方法。

无论哪种方式,如果要使用直流电动机/步进系统,电动机的护罩LED均应点亮,指示电动机功率良好。

 

这是它的工作方式:

 

13 (1).jpg

安装AFMotor电机库

使用AFMotor电机扩展板驱动电机以前,需要先将AFMotor库安装到Arduino IDE中。如果您不知道如何进行操作,请点击这里进入Arduino IDE安装库的说明页面(http://www.taichi-maker.com/home ... ll-arduino-library/)。

 

在这里我们向您推荐两个电机程序库。一个是必须安装的,一个是可按您需要选择安装的。

必装的库是AFMotor库。这个库是AFMotor扩展板的开发团队Adafruit专门为该扩展板编写的。它的优点是非常简单易用,但是功能相对单一。假如您只是驱动直流模型电机,那么这个AFMotor库就足够了。

 

但是如果您还想用AFMotor扩展板驱动28BYJ-48步进电机的话,AFMotor库虽然也可以实现这一功能,但是它的功能太简单了。所以我们建议您使用AccelStepper库来控制步进电机。请注意:AccelStepper库本身不能配合AFMotor电机扩展板工作。只有安装了AFMotor库以后,AccelStepper库在AFMotor库的配合下才能用于AFMotor电机扩展板驱动步进电机。这也就是说,无论您是否使用AccelStepper库,都要首先安装AFMotor库。

 

以下是这两个库的下载链接:

下载 AFMotor库(https://pan.baidu.com/s/1xVViDOb_VIb0qenXVdGErw)

下载 AccelStepper库(https://pan.baidu.com/s/1PXKIEiSYR-P_3IpY5cs7tw)


13-.jpg

Arduino实验开源代码


 

代码
/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十四:L293D四路电机驱动扩展板 motor control shield 马达板 

Adafruit Motor Shield模块 Arduino AFMotor 电机扩展板

 1、安装库:百度搜索“AFMotor库”— 下载 — 拷贝到Arduino-libraries 文件夹中

 2、实验之一:测试驱动M2直流电机

*/



#include <AFMotor.h>

AF_DCMotor motor(2, MOTOR12_64KHZ);

void setup() {

 motor.setSpeed(200);

}

void loop() {

 motor.run(FORWARD);

 delay(1000);

 motor.run(BACKWARD);

 delay(1000);

 motor.run(RELEASE);

 delay(1000);

}

Arduino AFMotor 电机扩展板实验场景图

 

21.jpg

评论

user-avatar
  • 花生编程

    花生编程2023.08.30

    赞赞赞

    0
    • 花生编程

      花生编程2023.08.30

      厉害

      0
      • 三春牛-创客

        三春牛-创客2023.08.28

        赞赞赞

        0
        • 三春牛-创客

          三春牛-创客2023.08.28

          厉害

          0
          • hacker_

            hacker_2023.08.23

            666

            0
            icon 他的勋章
              展开更多