欢迎光临
我们一直在努力

电机驱动板L293D

122509i23o4ol5ahd4to4e

本产品购买链接:点我购买

杜邦线及面包线:引脚:公对母、母对母。接线柱:公对公

==产品概述==
这是一个拥有全功能的电机驱动板,使用它可以完成许多简单到中等难度的制作。
#支持2个5V舵机,连接到arduino的高分辨率计时器
#最多支持4个直流电机,使用独立的8位速度选择(大约0.5%的解析度)
#最多支持2个步进电机(无极或者双极),步进电机可以是单线圈的,双线圈的,interleaved或者micro-stepping
#4路H桥:L293D芯片给每路桥提供0.6A电流(峰值1.2A),并带有热保护,4.5V到25V
#当电压过高时,下拉电阻保证电机保持停止状态
#大终端接线端子(10-22AWG),方便连接电线
#带有Arduino复位按钮
#提供2个外接电源接线端子,保证数字和逻辑电源分离
#适配Mega,Uno

1、将L293D插在Arduino上使用,一定要插紧,但是L293D和Arduino上下之间金属不要接触到,以免发生短路。

2、数字引脚2那里有个孔,可以焊接个排针上去,用来接一个传感器(例:做蓝牙小车,可以接蓝牙模块上去)
==Arduino与L293D接线方式== 

165726ngjorjtl8g3toto5.png

使用方式:将L293D插在Arduino UNO上使用!接口对应插接,请勿插反或错位。

==Arduino+L293D 驱动一个直流电机、一个舵机、一个步进电机的接线方式==

L293D Arduino

蓝色接线端子说明:请将蓝色接线端子的螺丝拧松,随后将导线或者杜邦线(或面包线)放入接线端子,拧紧螺丝即可。

线序说明:粉橙为一组,蓝黄为一组,分别接M3-M4  两两一接。

#外部供电建议9-12V的电源进行供电,否则直流电机可能无法运转,同时USB供电5V。

供电须知:(不看必后悔。请认真读完!)

1、外部供电为9V可能带不起多个电机,使用USB同时供电。9V+5V=14V或者12V+5V=17V的方案。

2、外部供电电压和USB供电一起使用时,外部供电+USB供电=不要高于24V

3、外部供电需要稳压电源,电流保持在1A左右。电流过高,会引起芯片发烫并烧毁。

4、技术手册是4.5V-25V,测试下来建议外部供电5-12V就够了,外部供电不宜过高,电压不稳定,容易烧坏板子。

#使用外部供电时,请将L293D驱动板上的跳线帽拔掉。

#如需使用MEGA2560主控板+L293D,请对应孔位将L293D插在MEGA2560上。

==例子程序==
1、驱动直流电机(小马达)程序:

#include <AFMotor.h>

AF_DCMotor motor(1);

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");

  // turn on motor
  motor.setSpeed(200);
 
  motor.run(RELEASE);
}

void loop() {
  uint8_t i;
 
  Serial.print("tick");
 
  motor.run(FORWARD);
  for (i=0; i<255; i++) {
    motor.setSpeed(i); 
    delay(10);
}
 
  for (i=255; i!=0; i--) {
    motor.setSpeed(i); 
    delay(10);
}
 
  Serial.print("tock");

  motor.run(BACKWARD);
  for (i=0; i<255; i++) {
    motor.setSpeed(i); 
    delay(10);
}
 
  for (i=255; i!=0; i--) {
    motor.setSpeed(i); 
    delay(10);
}
 

  Serial.print("tech");
  motor.run(RELEASE);
  delay(1000);
}

2、驱动9g舵机程序:

#include <AFMotor.h>
#include <Servo.h>

// DC motor on M2
AF_DCMotor motor(2);
// DC hobby servo
Servo servo1;
// Stepper motor on M3+M4 48 steps per revolution
AF_Stepper stepper(48, 2);

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor party!");
 
  // turn on servo
  servo1.attach(9);
  
  // turn on motor #2
  motor.setSpeed(200);
  motor.run(RELEASE);
}

int i;

// Test the DC motor, stepper and servo ALL AT ONCE!
void loop() {
  motor.run(FORWARD);
  for (i=0; i<255; i++) {
    servo1.write(i);
    motor.setSpeed(i); 
    stepper.step(1, FORWARD, INTERLEAVE);
    delay(3);
}
 
  for (i=255; i!=0; i--) {
    servo1.write(i-255);
    motor.setSpeed(i); 
    stepper.step(1, BACKWARD, INTERLEAVE);
    delay(3);
}
 
  motor.run(BACKWARD);
  for (i=0; i<255; i++) {
    servo1.write(i);
    motor.setSpeed(i); 
    delay(3);
    stepper.step(1, FORWARD, DOUBLE);
}
 
  for (i=255; i!=0; i--) {
    servo1.write(i-255);
    motor.setSpeed(i); 
    stepper.step(1, BACKWARD, DOUBLE);
    delay(3);
}
}

3、驱动步进电机程序:

#include <AFMotor.h>

AF_Stepper motor(48, 2);

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  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);

#ifdef MICROSTEPPING
  Serial.println("Micrsostep steps");
  motor.step(100, FORWARD, MICROSTEP);
  motor.step(100, BACKWARD, MICROSTEP);
#endif
}

==程序效果==
上传指定程序测试指定负载是否运作。

电源

驱动板是可以接受Arduino板的电力的,但是,arduino也就那么点电压,带一两个小直流电机还好说,东西搞多了,也是供不应求的.不过幸好L293D支持外部供电,通过上图中的外接电源接口,就可以进行外部供电.

进行外部供电的时候,需要将外接电源接口旁边的黄色跳线帽拔掉.

可以给每个电机最多600ma电流,1.2A的峰值电流。

电流超过1A的话,需要放散热块.

建议使用18650电池.

引脚使用

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

 数字引脚2和13可用。

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

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

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

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

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

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

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

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

    数字信号9:1号舵机

    数字信号10: 2号舵机

所以只要相应的引脚没被L293D驱动板使用到,就可以可以拿来用的但前提是得自己焊出引脚来。焊引脚的地方就是上图中的预留孔位.

电机连接

L293D可以驱动4个直流电机(M1~M4),两个中间白色圈中的接口一般不用.

L293D还可以接两个舵机,分别用数字引脚9和10控制.

软件

使用L293D需要安装AFMotor库文件.

与直流电机有关的函数

确保导入AFMotor库文件并#include < AFMotor.h>后,有这么几个函数需要用到

  1. AF_DCMotor motorname(motornum,frequency);

    • motorname

      给电机起个名字,然后这个名字就是此电机在程序中的代号了

    • motornum

      用来选择你要给哪个电机取名字,参数范围为1~4

    • frequency

      用来设定此电机信号控制的频率.

      M1和M2可以使用MOTOR12_64KHZ,MOTOR12_8KHZ,MOTOR12_2KHZ,或者MOTOR12_1KHZ等常量

      M3和M4使用MOTOR34_64KHZ,MOTOR34_8KHZ,MOTOR34_1KHZ

  2. setSpeed(speed)

    • setSpeed用来设置电机的速度
    • 参数speed的取值范围从0(停止)到255(全速)
    • motorname.setSpeed(speed)
  3. run(direction)

    • 开跑

    • direction可以使用FORWARD,BACKWARD,RELEASE三个常量

示范:

#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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
与步进电机有关的函数

确保导入AFMotor库文件并#include < AFMotor.h>后,有这么几个函数需要用到

  1. AF_Stepper steppername(steps,portnumber)

    • steppername

      给电机起个名字,然后这个名字就是此电机在程序中的代号了

    • steps

      设置电机每转的步数,比如设置36,则每步走1/36转

    • portnumber

      选择电机的通道,范围为1(通道1,2)和2(通道3和4)

  2. Step(steps,direction,style)

    • step

      转动的步数

    • direction

      转动的方向FORWARD 或者 BACKWARD

    • style

      步进的模式,可以选择的参数:

      • SINGLE – 一次只给一相线圈供电
      • DOUBLE – 一次给两项项圈都供电,得到更大的扭矩
      • INTERLEAVE – 电机会运转得更柔滑,因为步数增加了一倍,同时速度也减小一半
      • MICROSTEP – 电机会运转的更柔滑,精度更高,但扭矩也会减小

如果想更精细地控制步进电机,可以使用AccelStepper library,这个库带有电机加减速度功能。

示范:

#include <AFMotor.h>
AF_Stepper motor(200,2);
void setup(){
motor.step(200,FORWARD,SINGLE);
motor.release();
delay(1000);
}
void loop(){
motor.step(100,FORWARD,SINGLE);
motor.step(100,BACKWARD,SINGLE);
motor.step(100,FORWARD,DOUBLE);
motor.step(100,BACKWARD,DOUBLE);
motor.step(100,FORWARD,INTERLEAVE);
motor.step(100,BACKWARD,INTERLEAVE);
motor.step(100,FORWARD,MICROSTEP);
motor.step(100,BACKWARD,MICROSTEP);
}

==问题解答==
*我可以用这个驱动板带动多少个电机?
系统运行在5V时你可以使用2个直流电机或4个直流电动机或者2个步进电动机(也可以是1步进和2个直流电动机)
*我的驱动板坏了吗?
LED灯亮了吗?此灯显示直流或步进电机的工作,如果它不亮,然电机将不能运行。请检查5V供电或电源。
*可以控制小于3V的电机吗?
不可以,它不能为小于3V的电机工作除非你将它们强行运行在6V,然后它们会烧坏的更快。
*当电机运行时我的Arduino死机了!板是坏的?
电机运行需要大量的电流,并可能引起瞬间断电,复位Arduino。因为这个原因,请设计分开的电源(一个用于Arduino和一个用于电机驱动板。这样做会防止瞬间断电。请阅读有关适当的电源和 用户手册 。)
*我的电源没有问题,但直流电动机似乎“切断”或“跳过”。
对电机接线端子之间焊上陶瓷或0.1uF电容,这将减少电流噪音,防止干扰到电路。
*如果我需要更大的600mA电流驱动电机?
你可以使用sn754410替代L293D(有风险)或背驮式焊接一些L293D在现有的前端。
*我可以将Arduino直接连接到直流/步进电机吗?
直流/步进电机不可以直接连接到Arduino,必须使用电机驱动板。
*我怎样才能找到其它未使用的管脚?
模拟引脚(模拟A0-A5也称数字引脚14-19岁)在右下角,你也可以在其上方的三排预留针孔中焊接插针。
*我尝试运行此代码收到以下错误:”error: AFMotor.h: No such file or directory….”
确保你在Arduino IDE 中已经安装了afmotor库。(附件中)
*我有两个步进电机,我想同时运行它们,但是示例代码只能控制1个?
步进电机的库step()例程没有同时运行两个步进电机的能力。相反,你将不得不“交错”使用它们。例如,有两个步进电机运行100次你必须写这样的代码:
for (i=0; i<100; i++) {
motor1.step(1, FORWARD, SINGLE);
motor2.step(1, FORWARD, SINGLE);
}
如果你想要更多的智能控制,请检阅accelstepper库其具有一定的并发控制步进电机的实例(编者按:有谁找到了这个吗?)
*驱动板与UNO R3 或 Mega R3兼容吗?
与R3 UNO 或 MEGA兼容。其PWM信号在使用ATmega168与ATmega328的arduino控制板上,其产生在3,5,6,9,10,11端口。 Arduino Mega控制板,可以产生于2-13号端口。在更古老的基于ATmega8的arduino控制板上,PWM信号只能产生于9,10,11号端口。
*为什么驱动板的输出部分没有设计电容?
这不会有效,电流噪声必须控制在源头,因电机产生的电流噪声会像天线一样传播到周围。

《《《相关使用说明》》》
==电源使用说明==
#这个驱动板仅仅设计运行在4.5V至25V之间。如果连接1.5-3V的电机,大多数将不工作。
#驱动板的设计是为了提供每个电机高达600 mA,峰值1.2A的电流。值得注意的是,一旦长时间超过1A你必须把电机驱动芯片L293D安装上散热片,否则你可能烧坏芯片。
#一个9V电池不能运行你的电机,应该使用大的铅酸、镍氢电池,非常建议您设置两个电源(拆分供应)一个Arduino和一个电机。 99%奇怪的运行问题都是由于从共享电源传来的电流噪声或没有足够稳定的电源!
#如何建立Arduino +驱动板电源连接。给直流电机供电的高电压电源提供的是不稳定的5V电压。 不要给Arduino直接连接电动机电源5V的线。这是一个非常坏的主意,除非你确定你知道你在做什么!
#有两个地方你可以接入电源,一是Arduino电路板上的直流插座,一个是驱动板上有EXT_PWR标记的接线端子。
这里将描述它是如何工作的:
如果你想用一个单一的直流电源为Arduino和驱动板供电,只需将电机驱动板插入Arduino电路板上,然后将电源插头插入Arduino电路板的直流插座。
如果你想用USB电缆提供Arduino的直流电源,先将USB电缆插好。然后打开电源。不要动驱动板上标记的PWR跳线端子上的跳线。
如果你想用2个独立的直流电源为Arduino和电机驱动板供电。确保跳线从电机驱动板标记的PWR跳线端子去掉。
无论哪种方式,如果你想使用的直流/步进电机接线正确,LED灯应该点亮,指示电机驱动板运行良好。
==舵机连接方式说明==
    盛辉(我们国内一般使用的小舵机)舵机是一种容易控制的舵机:它有三根线,一根是+5V,一根是gnd,另一个是控制信号线。这块电机驱动模块可以提供3口的16位PWM输出,这样电机很容易连接到驱动板上。它们会消耗大量的能量所以9v的电池只会持续十几分钟。
使用电机驱动板上的PWM最大的好处是它非常的精确。你可以使用Servo 库的例程进行测试。
使用舵机是非常简单的,你可以阅读Arduino官网上关于如何使用舵机和Servo例程的帖子。
http://www.arduino.cc/en/Reference/Servo
舵机的电源来自arduino上的5V电源管理(降压)模块输出,由arduino板上的USB或者直流电源插口输入。如果你需要另外的电源,你可以将 servo的电源引脚不让它们接入arduino上,而是直接连接另外的5V或者6V电源。使用外置电源只适用于有经验的朋友,否则可能造成电源接反电机烧毁的情况!
==步进电机连接方式说明==
步进电机可以用来精确控制,很适合用于许多机器人或者CNC制作。这个电机驱动板做多支持2个步进电机。双极性和单极性电机都适合这个库。
对于双极性电机(42二相四线电机):其中由两相,相1的两线连接到驱动板上的M1或者M3,相2的两线连接到驱动板上对于的M2或者M4上。
运转一个步进电机比运转一个直流电机稍微复杂些,但总体还是比较简单的。
1.确认你已经代码中声明了#include <AFMotor.h>
2.使用AF_Stepper(steps,stepper#)函数来配置:steps指的是电机每圈需要的步数。一个步距角为7.5度的电机,需要360/7.5 = 48步;stepper指的是连接的端口。如果你使用了M1和M2,那端口就是1;反之,端口就是2.
3.使用setSpeed(rpm)设定电机的速度,这里的速度是指电机每分钟转动的圈数。
4.每次你想让电机转动,你都必须使用step(#steps,direction,steptype)程序。其中,#steps是指你想让电机走的步数,direction选项可以是FORWARD或者BACKWARD,然后steptype可以是SINGLE,DOUBLE,也可以是 INTERLEAVE或者MICROSTEP.
“Single”指的是单相激活,“double”意味着双相瞬间激活(为了得到大的扭矩),“interleave”意味着single和double 模式交替运行,带来的是双倍的精确度,但同时速度也下降了一半;“Microstepping”是一种使用PWM方式,以此得到平滑运动的模式。
你可以更加自己的想法随意切换模式。
5.预置地,每次电机运动完后都会“锁住”。如果你想释放它,你可以使用release()
6.The stepping commands are “blocking” and will return once the steps have finished.You have to instruct the Stepper motors each time you want to move.(不知道怎么翻)如果你想更精细地控制步进电机,可以使用AccelStepper library,这个库带有电机加减速度功能。
==直流电机连接方式说明==

直流电机适应于许多机器人项目

这块电机模块可以最多驱动4个电机同时正反向运动。使用高精度的PWM输出,速度可以以每次0.5%的幅度变化。这意味着电机会运转非常柔和。

需要注意的是,这里的H桥芯片并不是用来驱动额定电流超过0.6A或峰值电流超过1.2A的电机的,只是适用于小的电机。在使用你的电机前,首先请确认电机的参数是否符合。

下面会教你如何运转起一个直流电机:

1.确认你导入#include <AFMotor.h>

2.建立AF_DCMotor(motor#,frequency)函数,其中第一参数motor#示意你的电机连到了1,2,3或者4中的哪个端口;frequency则代表了信号控制的频率。如果连接电机1和2,你可以选择MOTOR12_64KHZ,MOTOR12_8KHZ,MOTOR12_2KHZ,或者MOTOR12_1KHZ。像64KHZ这么高的频率不会发出噪声,但是低频率会有效降低电源。电机3和4只能以1KHZ运行,并且会忽略任何给定的设置。

3.你可以使用setSpeed(speed)函数来设置电机的速度,speed参数的范围从0(停止)到255(全速)。你可以在这个范围内任意设定。

4.想让电机转动,你可以调用run(direction),其中direction参数可以是FORWARD,BACKWARD,RELEASE。当然arduino并不知道哪个方向是正向,哪个是反向,所以如果运转的方向与你设定的相反,你只需要将电机接在驱动板上的两个线反向连接。

 

==相关下载==

L293D驱动板资料:http://pan.baidu.com/s/1qXYynxy

未经允许不得转载:Arduino-Maker » 电机驱动板L293D

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

中贝斯特创客空间蘑菇云创客教育