AFMotor Shield 电机扩展板

来自Duinopeak_COM
跳转至: 导航搜索

产品简介


Afmotor-front.jpgAfmotor-back.jpg
如果你想找到一款能驱动多个直流电机,步进电机,舵机的扩展板,那么这款驱动板正是你所需的。这里介绍一款能驱动各种简单到稍复杂项目的全功能的电机扩展板。 这是一款常用的直流电机驱动模块,采用293D芯片小电流直流电机驱动芯片。管脚被做成了Arduino兼容的,也方便了爱好者快速的基于Arduino的开发。

规格参数

  • 引出 2个5V伺服电机端口
  • 多达4个双向DC电机驱动各自带有8位速度选择(大约0.5%的解析度)
  • 多达2个步进电机(单极或双极) 单线圈,双线圈,交错或微步。
  • 板载4路H-桥:L293D芯片每路桥提供.0.6A(峰值1.2A)电流并且带有热断电保护,4.5V to 36V。
  • 下拉电阻保证在上电时电机保持停止状态。
  • 大接线端子使接线更容易(10 - 22AWG)和电源。
  • 板载Arduino复位按钮。
  • 2个大终端外部电源接线端子 保证逻辑和电机驱动电源分离。
  • 兼容UNO,Mega, Diecimila, & Duemilanove。
  • 下载方便使用的Arduino软件库快速进行开发。

AFMotor电源

直流电机供电电压和电流需求 电机需要很多的能量,尤其是便宜的电机因为它们效率很低。最重要的是要搞清楚电机将要使用的电压。如果你幸运的话你的电机可能会有某种参数规格。一些小的业余电机仅运行在1.5V,但它们常被用作6V或者12V电机来使用。这款电机驱动被设计成可以运行从4.5V到36V(无论如何,在理论上来说应该可以降低到大概2.5V)。 电流需求:第二件事就是要搞清楚你的电机将需要多大的电流。与驱动板配套的驱动芯片被设计为为每路电机提供最高600mA的电流和1.2A的峰值电流。(详情见“参考手册”文件夹内数据手册)当你的电流接近1A的时候你可能想在驱动芯片上加上散热片了。否则会热失效,有可能烧毁驱动芯片。 关于使用SN754410:一些人使用SN754410电机驱动芯片由于它们的引脚兼容,有输出二极管并且可以提供每路电机1A的电流,2A的峰值电流。。在仔细查阅了数据手册和与他们的技术支持工程师讨论之后看来这个输出二极管只是被用作ESD保护,如果你把它用作kickback-protection是一个Hack并且性能得不到保证。出于这个原因这个套件并没有选用SN754410而使用了L293D带有内置的反冲保护二极管。如果你愿意冒这个险需要更大的电流,那么不要犹豫换上SN754410. 需要更大的功率?买另一块L293D驱动然后将它背驮式的焊接在其中以个驱动芯片上面,瞧!双倍的电流能力,你可以焊接2个或者更多。 不能用一个9V叠层电池来驱动电机,所以不要浪费你的时间和电池!使用一个大的铅酸电池或镍氢电池组。同样也非常推荐你使用两个独立电源一个为Arduino另一个为电机驱动。99%奇怪的问题都是由于来自公用一个电源电源线路噪音或者电源没有足够的功率!

如何设置Arduino+Shield驱动板来为电机供电呢 舵机是由Arduino使用的常规5V来供电的。对小的业余舵机来说没有关系。如果你使用功率更大的,划断连接到+的线然后连接到你自己的舵机电源! 直流电机是由一个高电压电源来供电并不是常规的5V电源。不要把电机电源连接到5V线。这是非常非常糟糕的想法除非你知道你在做什么! 有两种方法可以让你的电机使用高电压供电。一个是Arduino板上的DC插座另一个是电机驱动板上的2线接线端子标识为EXT_PWR。Arduino板上的DC插座有一个保护二极管所以如果你接错了电源也不会烧掉板子。然而驱动板上的EXT_PWR端子没有保护二极管(因为一个相当好的理由)。所以非常要小心不要接反否则有可能会烧掉你的驱动板或者Arduino! 这是它的工作原理:
500px
如果你只想使用一个单独的直流电源来为Arduino和电机供电,只需简单那的将电源插入Arduino的DC插座或者驱动板上的2线接线端子EXT_PWR上。然后将驱动板上的电源跳冒插上。 如果你使用一个Diecimila Arduino,设置Arduino电源跳线为EXT。 请注意你可能会遇到Arduino重置如果电源电量不足的话,所以并不向你推荐这种电机项目的供电方法 如果你想让Arduino有USB供电,电机由另外一个直流电源来供电。插入USB转接线。然后连接电源到驱动板上的PWR_EXT端子。注意不要吧驱动板上的跳冒放上去。推荐用这种方法来为你的电机项目供电。 (如果你使用Diecimila Arduino,不要忘了设置Arduino电源跳冒为USB,如果你是使用Diecimila Arduino你可以插入DC电源到Arduino,然后把驱动板上的电源跳冒放上)。
300px
如果你想使用两个独立的直流电源来给Arduino和电机供电,吧电源插入Arduino的DC插座,然后连接吧电机电源连接到驱动板的PWR_EXT接线端子。确保拿掉电机驱动板上的跳冒。 如果你使用Diecimila Arduino,设置Arduino跳冒为EXT。推荐用这种方法为你的电机项目供电。 那种方式都可以,如果你想使用一个DC电机/步进电机系统,电机驱动板上的LED应该发亮表示电机供电正常。

应用示例

特别说明: 要使用这款驱动板你需要安装库文件到Arduino-IDE中,除非你自己知道怎么写驱动程序,嘿嘿! 只要将库文件解压到Arduino安装目的的libraries目录下 即可 例如:D:\Program Files\arduino-0021\libraries 然后重新打开Arduino IDE就可以使用了 有例子代码可供参考

驱动舵机(Servos)
500px
业余舵机 业余舵机是最容易控制的。他们有一个3线的接口分别是5V,GND,和信号输入。电机驱动简单的带出16位PWM输出成2排3端插头所以可以很方便的插拔。他们可以很耗电所以一个9V电池将不会持续多余几分钟! 使用板载的PWM有个好处就是它非常准确并且可以在后台处理逻辑。你可以使用Arduino自带的Servo库来控制舵机。

驱动直流电机
500px
直流电机用在所有类型的机器人项目。电机驱动板可以双向驱动最多4路电机。它们可以正转和反转。使用高质量的内建PWM速度同样可以以0.5%的增量变化,意味着速度非常平稳! 注意H桥芯片并不是真正可以负荷超过0.6A或者峰值超过1.2A ,所以比较合适小功率电机。查阅数据手册关于电机部分资料来确认是否合适。 连接电机简单的将两只引线连接到接线端子M1, M2, M3, 或者 M4.然后在你的程序中按照这些步骤: 确保include< AFMotor.h>头文件 使用DCMotor(motor#, frequency)创建DCMotor对象,构造函数带两个参数。第一个为要连接的电机的端口1,2,3,4。Frequency是速度控制信号的值。对于电机1和2你可以选择MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, 或者 MOTOR12_1KHZ。一个高频率像64KHz将不会发出声音但是一个低频率像1KHz的将更省电。电机3和4只能运行在1KHz的频率下,将会忽略给定的任何频率设置。 然后你可以通过setSpeed(speed)函数来设置电机的速度,speed的范围为从0(停止)到255(全速)。你可以随便设置你想要的速度。 打开电机通过调用run(direction)direction是FORWARD, BACKWARD or RELEASE。当然Arduino实际上并不知道电机正转还是反转。所以如果你想改变你认为的正转的方向,只需要交换电机引线即可

#include <AFMotor.h>

AF_DCMotor motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
  
  motor.setSpeed(200);     // set the speed to 200/255
}

void loop() {
  Serial.print("tick");
  
  motor.run(FORWARD);      // turn it on going forward
  delay(1000);

  Serial.print("tock");
  motor.run(BACKWARD);     // the other way
  delay(1000);
  
  Serial.print("tack");
  motor.run(RELEASE);      // stopped
  delay(1000);
}

步进电机
500px
双极四线步进电机 步进电机对半精度的控制是非常好的。对许多机器人和CNC项目也很理想。这款电机驱动支持最多2路步进电机。库可以很好的支持两相和连接单极步进电机首先要搞清楚那些引脚连接到哪些绕组(线圈),和哪些引脚连接到中间绕组(线圈)的。如果它是一个5线步进电机那么将会有1个两组线圈的中间抽头。有很多关于如何对线圈引脚进行逆向工程的教程。中间抽头应该被连接到电机驱动板的输出GND接线头,然后线圈1应该改被连接到一个电机端口(M1或者M3)线圈2应该被连接到其他电机端口(M2或者M4)。

对双极步进电机来说:它和单极步进电机一样除了没有第五个连接到低的引线。代码也同样一样。

驱动步进电机要比直流电机稍微复杂但是在这里仍然很简单。 确保include<AFMotor.h>头文件 使用MS_Stepper (steps, stepper#)创建MS_Stepper对象,构造函数带两个参数。第一个为步进电机每转需要多少步,一个7.5度/步电机有360/7.5=48步。stepper#是连接到哪个端口。如果你使用M1和M2,他是端口1,如果你使用M3和M4他为端口2。 通过setSpeed(rpm)函数来设置你想要的每分钟步进电机转动的圈数。 然后每次你希望步进电机转动只需调用step(#steps, direction, steptype)函数。#steps是你想要步进电机走多少步。Direction是FORWARD或者BACKWARD,steptype是SINGLE,DOUBLE,INTERLEAVE或者MICROSTEP。“single”是指单线圈启用,“double”是指双线圈启用(对于大力矩的需要),“interleave”是指在single和double之间交替来得到双倍的解析度(当然速度减半)。“Microstepping”是一种方法用PWM在每步之间来创建平滑的运动。有大量的关于不同stepping之间的利弊的文章。你可以使用你想要的步进方法。你可以在运行中改变为你想要最小功耗,最大力矩或者更高精度。 默认电机将保持在它停止时的位置。如果你想释放全部的线圈,那么你需要调用realease()函数。步进命令将在动作完成之后立刻返回。

#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   

  motor.step(100, 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); 
}

如果你希望两个步进电机立即运行,需要下面代码

void doublestep (int steps, int direction, int style) {
  while (steps--) {
    motor1.step(1, direction, style); 
    motor2.step(1, direction, style); 
  }
}

常见问题

我最多可以连接几个电机? 最多可以同时连接4个直流电机或者2个步进电,和2个舵机(伺服电机)。 一共有以下方案可以选择: 1.连接4个直流电机和2个舵机 2.连接2个直流电机和1个步进电机和2个舵机 3.连接2个步进电机和2个舵机

哪些端口连接到直流/步进电机? 直流或者步进电机并不是直接连接到Arduino。它们并连接到74HC595锁存器然后由Arduino对它进行控制。你不能直接控制电机,你必须使用电机驱动板库来驱动电机。

这款驱动板占用arduino的那些端口? 全部的6个模拟端口未被占用,他们同样可以作为数字端口使用(pin14-19).这些端口一般用来连接传感器等。 数字端口2和13未被占用。 以下端口被占用 数字端口11:直流电机#1/步进#1(PWM) 数字端口 3:直流电机#2/步进#1(PWM) 数字端口 5:直流电机#3/步进#2(PWM) 数字端口 6:直流电机#4/步进#2(PWM) 当使用任何直流或者步进电机时数字端口4,7,8和12被占用,通过74HC595(串转并)锁存器来控制直流或者步进电机。

如果使用舵机下列端口将被占用: 数字端口 9:舵机控制#1 数字端口 10:舵机控制#2

如何连接未使用的端口? 模拟端口(0-5也可以做为数字端口14-19)在右下角被引出你可以直接使用。

常见异常: 我运行例子代码是出现了下面的错误: "error: AFMotor.h: No such file or directory...." 确保你正确安装了库文件(见代码文件夹),将附件中的库文件解压到arduino安装目的的libraries目录下即可,例如:D:\Program Files\arduino-0021\libraries 然后重新打开Arduino IDE就可以使用了,有例子代码可供参考。

如何安装库到Arduino IDE中? 安装Arduino兼容全功能驱动板库到Arduino IDE中 只要将附件中的库文件解压到arduino安装目的的libraries目录下即可 例如:D:\Program Files\arduino-0021\libraries 然后重新打开Arduino IDE就可以使用了


资源