风筝
发表于: 2019-8-19 23:00:23 | 显示全部楼层

在本篇文章中,您将学习如何使用Arduino L293D电机驱动器扩展板驱动直流电机、步进电机和伺服电机。


电机和驱动器

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


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


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


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


但我们无法将这些电机直接连接到微控制器或控制器开发板(如Arduino)以控制它们,因为它们可能需要比微控制器驱动更多的电流,因此我们需要驱动器。驱动器是电动机和控制单元之间的接口电路,以便于驱动。驱动器有许多不同的类型。在本文中,您将学习如何使用L293D电机扩展板。


L293D扩展板(Shield)是基于L293的驱动板,可同时驱动4个直流电机和2个步进电机/伺服电机。

l293_0.jpg


该模块的每个通道的最大电流为1.2A,如果电压大于25v或小于4.5V,则不起作用。因此,请根据其标称电压和电流选择合适的电机。


如何使用Arduino L293D电机驱动器扩展板?

使用该模块的6个模拟引脚(也可以用作数字引脚)时,arduino的引脚2和引脚13是空闲的。


在使用伺服电机时,使用引脚9、10、2。

在使用直流电机时,#1使用引脚11,#2使用引脚3,#3使用引脚5,#4使用引脚6,他们全都使用4、7、8和12引脚。

在使用伺服电机时,#1使用引脚11和3,#2使用引脚5和6,他们全都使用4、7、8和12引脚。


您可以通过有线连接使用空闲引脚。


如果您向Arduino和扩展板提供独立的电源,请确保已断开扩展板上的跳线。

l293d.jpg


驱动直流电机

l293_1-1.jpg

  1. #include <AFMotor.h>
复制代码

首先您需要包含控制电机的库:

  1. AF_DCMotor motor(1, MOTOR12_64KHZ)
复制代码

定义您正在使用的直流电机。

第一个参数代表扩展板中的电机数量,第二个参数代表电机速度控制频率。对于1号和2号电机,第二个参数可以是MOTOR12_2KHZ、MOTOR12_8KHZ、MOTOR12_8KHZ和MOTOR12_8KHZ;对于3号和4号电机,第二个参数可以是MOTOR12_8KHZ、MOTOR12_8KHZ和MOTOR12_8KHZ。如果为空,则默认为1KHZ。

  1. motor.setSpeed(200);
复制代码

定义电机速度。可以设置为0到255。

  1. void loop() {
  2. motor.run(FORWARD);      
  3. delay(1000);
  4. motor.run(BACKWARD);      
  5. delay(1000);  
  6. motor.run(RELEASE);      
  7. delay(1000);
  8. }
复制代码

motor.run()函数指定电机的运动状态。状态可以是FORWARD、BACKWARD和RELEASE。 RELEASE与制动器相同,但可能需要一些时间才能完全停止电机。


建议在每个电机引脚上焊接一个100nF电容,以降低噪声。


驱动伺服电机

l293_3-1.jpg

Arduino IDE库和示例适用于驱动伺服电机。

  1. #include <servo.h>
复制代码

包含驱动伺服电机所需的库

  1. Servo myservo;
复制代码

定义伺服电机对象。

  1. void setup()
  2. {
  3.   myservo.attach(9);   
  4. }
复制代码

确定连接伺服的引脚(sevo#1的引脚9和伺服#2的引脚10)

  1. void loop()  
  2. {  
  3.   myservo.write(val);                  
  4.   delay(15);                           
  5. }
复制代码

确定电机旋转量。根据电机类型,在0到360或0到180之间。


驱动步进电机

l293_2-1.jpg

  1. #include <AFMotor.h>
复制代码

确定您需要的库

  1. AF_Stepper motor(48, 2);
复制代码

定义步进电机对象。第一个参数是电机步进分辨率。第二个参数是连接到扩展板的步进电机的编号。

  1. void setup() {
  2.   motor.setSpeed(10);   
  3.   motor.onestep(FORWARD, SINGLE);  
  4.   motor.release();
  5.   delay(1000);
  6. }

  7. void loop() {
  8.   motor.step(100, FORWARD, SINGLE);  
  9.   motor.step(100, BACKWARD, SINGLE);
  10.   
  11.   motor.step(100, FORWARD, DOUBLE);  
  12.   motor.step(100, BACKWARD, DOUBLE);

  13.   motor.step(100, FORWARD, INTERLEAVE);  
  14.   motor.step(100, BACKWARD, INTERLEAVE);  

  15.   motor.step(100, FORWARD, MICROSTEP);  
  16.   motor.step(100, BACKWARD, MICROSTEP);  
  17. }
复制代码

以rpm为单位确定电机速度。

第一个参数是移动所需的步数,第二个参数是确定方向(FORWARD或BACKWARD),第三个参数确定步骤类型:SINGLE(激活线圈)、DOUBLE(激活两个线圈以获得更大的扭矩) ,INTERLEAVED(线圈数量从一到两连续变化,反之亦然到双倍精度,但在这种情况下,速度减半)和MICROSTEP(为了更加精确,更改步骤缓慢完成。在这种情况下, 扭矩较低)。
默认情况下,当电机停止移动时,它会保持其状态。

必须使用motor.release()函数释放电机。


以上就是本篇文章的全部内容。如有需要,请随时在本帖下面进行回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 11:25 , Processed in 0.040441 second(s), 7 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表