电子说
概述
原始的Adafruit Motorshield套件是我们最受欢迎的套件之一,因此我们决定做得更好。我们已经升级了屏蔽套件,使其成为驱动DC和步进电机的最佳,最简便的方法。该防护罩将帮助您快速完成下一个机器人项目!我们保留了驱动多达4个DC电动机或2个步进电动机的能力,但又进行了许多改进:
我们现在有了TB6612 MOSFET驱动器,而不是L293D达林顿驱动器,每通道电流能力为1.2A(您可以自行设计达到3A峰值,每次约20ms)。它还具有更低的电机压降,因此您可以从电池中获得更多的扭矩,并且还具有内置的反激二极管。
我们没有使用闩锁和Arduino的PWM引脚,而是使用了专用的PWM驱动器芯片。该芯片可处理I2C上的所有电动机和速度控制。仅两个GPIO引脚(SDA和SCL)加上5v和GND。驱动多台电动机是必需的,并且由于它是I2C,因此您还可以将任何其他I2C设备或屏蔽连接到同一引脚。这也使其与Uno,Leonardo,Due和Mega R3等任何Arduino兼容。
完全可堆叠的设计:5个地址选择引脚意味着最多32个可堆叠屏蔽:那是64个步进器或128个直流电机!这么多步进器到底能做什么?我不知道,但是如果您有什么建议,请给我们发照片,因为那将是一个非常光荣的项目。
还有许多其他小的改进,例如电源引脚上的极性保护FET和较大的原型设计区域。屏蔽层已在Adafruit进行了组装和测试,因此您所要做的就是在直的或堆叠的插头和接线端子上焊接。
让我们再次检查一下这些规格:
2个用于Arduino高分辨率专用计时器的5V“业余”伺服器连接-无抖动!
4个H桥:TB6612芯片组为每个桥提供 1.2A strong》(对于短暂的20ms峰值为3A),具有热关断保护,内部反冲保护二极管。可以在4.5VDC到13.5VDC的电压下运行电动机。
最多4个具有单独的8位速度选择(因此,分辨率约为0.5%)的双向DC 电动机。
》
最多2个具有单线圈,双线圈,交错或微步进的步进电机(单极或双极)。
上电时电机会自动禁用
大型接线端子连接器,可轻松连接电线(18-26AWG)和电源
Arduino重置按钮位于顶部
受极性保护的2针接线端子和跳线连接外部电源,用于单独的逻辑/电机电源
经测试与Arduino UNO,Leonardo,ADK/Mega R3,Diecimila和Duemilanove兼容。与Due与3.3v逻辑跳线一起使用。可与Mega/ADK R2及更早版本的2个跳线一起使用。
下载易于使用的Arduino软件库,查看示例,即可开始使用!
5v 或 3.3v 兼容的逻辑电平-可配置跳线。
从Arduino 1.5.6-r2 BETA开始,Due Wire库中存在一个错误,阻止多个Motor Shields与Due一起正常使用!
常见问题解答
该防护罩可以使用多少个电机?
您可以使用2个在5V电压下运行的DC业余伺服器和最多4个DC电动机或2个步进电动机(或1个步进和2个DC电动机) 5-12VDC
我可以连接更多电机吗?
是的,通过堆叠盾牌!堆叠的每个屏蔽都将添加 4个DC电动机或2个步进电动机(或另外1个步进电动机和2个DC电动机)。
随着伺服触点进入Arduino的#9和#10引脚,您将不会获得更多的伺服连接。
如果我还需要更多
看看我们可爱的伺服屏蔽罩,它也可以与该马达屏蔽罩堆叠,并增加了16个每个盾牌可免费运行的伺服器http://learn.adafruit.com/adafruit-16-channel-pwm-slash-servo-shield
这是什么Arduinos盾是否兼容?
经测试可与Duemilanove,Diecimila,Uno一起使用(所有版本),莱昂纳多和Mega/ADK R3及更高版本。
如果您将屏蔽层的SDA引脚与Digital 20以及SCL引脚与Digital 21的跳线焊接起来,则它可以与Mega R2及更低版本配合使用。要与Due或其他3.3v处理器一起使用,必须将开发板配置为3.3v逻辑电平。找到标记为“ Logic”的3个打击垫的集合。在中心焊盘和5v之间切出一条小线,并在中心处从3.3v添加一个跳线。
从Arduino 1.5.6-r2 BETA开始,Due Wire库中存在一个错误,阻止多个Motor Shields正常工作!
我在尝试运行示例代码时遇到以下错误:“错误:Adafruit_MotorShield.h:没有此类文件或目录。。..”
确保已安装Adafruit_MotorShield库
我如何安装库?
在http://learn.com上检查有关该主题的教程页面。 adafruit.com/adafruit-motor-shield-v2-for-arduino/install-soft ware
帮助!我的马达不起作用! - 救命!我的电机不工作!。..但是伺服系统工作正常!
电源指示灯是点燃?如果板载绿色电源LED指示灯不亮,则步进电机和直流电机连接将无法工作!
您必须通过POWER接线端子或Arduino上的DC筒形插孔将5-12VDC电源连接到屏蔽层和VIN跳线。
i》
绿色电源LED有什么用?
LED指示 DC/步进电机电源正在工作。如果没有明亮地点亮,则直流/步进电机将不会运行。伺服端口由5V供电,不使用直流电动机电源
电动机屏蔽层上未使用哪些引脚?
GND和5v(默认)或3.3v电压为板载逻辑供电。 (可通过跳线选择5v或3v操作)
屏蔽层使用SDA和SCL i2c引脚来控制DC和步进电机。在Arduino UNO上,这些也称为A4和A5。在Mega上,它们也被称为Digital 20和21。在Leonardo上,它们也被称为Digital 2和3。请勿将带有这些屏蔽的Arduino上的这些引脚与i2c传感器/驱动器一起使用。
由于屏蔽使用I2C进行通信,因此可以将任何其他i2c传感器或驱动器连接到SDA/SCL引脚,只要它们不使用地址 0x60 (屏蔽的默认地址)或 0x70 (此芯片用于组控制的“所有呼叫”地址)
如果要使用伺服连接,它们位于针脚#9和#10上。如果您不使用连接器,那么这些引脚将不使用。
您可以将任何其他引脚用于其他用途
请注意,引脚A4和A5连接到SDA和SCL,以兼容经典Arduino。这些引脚不能在其他处理器上使用。
如何连接未使用的引脚?
所有针脚都沿着屏蔽的边缘分成0.1“间距的插头
我的电动机运行时Arduino吓坏了!屏蔽层破损了吗?
电动机需要很多时间的电源,并可能导致“掉电”,从而使Arduino复位,因此,屏蔽罩设计用于单独的(分体)电源-一个用于电子设备,一个用于电动机,这样做可以防止掉电。请阅读用户手册以获取有关以下信息:适当的电源。
我正在尝试构建此机器人,它似乎无法在9V电池上运行。。..
您不能用9V电池为电动机供电。电动机必须使用AA电池或铅酸电池。
此屏蔽能否控制小型3V电机?
我有良好的固态电源,但是直流电动机似乎“断路了”
尝试在两个之间焊接一个陶瓷或碟形0.1uF电容器。电机接线片(在电机本身上!)将减少可能反馈回电路的噪声(感谢macegr!)
当电动机开始运行时,其他任何功能均不起作用
许多小型直流电动机都有很多“电刷噪声”。这会反馈到Arduino电路并导致不稳定的操作。可以通过在电机上焊接一些0.1uF陶瓷噪声抑制电容器来解决此问题。
总共需要3个。电机端子之间有1个,每个端子与电机外壳之间有1个。
但是我的电动机上已经装有电容器,但仍然无法工作。
div》
为什么不只是在屏蔽层中设计电容器?
它们在那里无效。必须在源头处抑制噪声,否则电动机导线将像天线一样工作并将其广播到系统的其余部分!
为什么我的步进电机什么也不会走
由于屏蔽是由i2c控制的,因此最大步进速率为受i2c总线速度的限制。默认总线速度为100KHz,可以通过编辑Arduino安装文件夹中的库文件将其提高到400KHz。可以在 硬件/库/wire/utility/twi.h 中找到该文件。
用“ #define TWI_FREQ 100000L”
查找行将其更改为“ #define TWI_FREQ 400000L”
或者,您可以将以下代码添加到setup()函数中:(注意:此行必须在对begin()的调用后 插入)
TWBR =((F_CPU/400000l)-16)/2;//将i2c时钟更改为400KHz
此屏蔽使用了哪些I2C地址?
可从0x60-0x7F寻址屏蔽。 0x70是所有董事会都将应答的“所有呼叫”地址。
我的防护罩无法与我的LED背包一起使用。
某些背包的默认地址为0x70。这是电动机护罩上控制器芯片的“全部呼叫”地址。如果您重新定位背包,它将与防护罩一起使用。
安装标题和终端
安装标准接头
防护罩随附0.1 “标准接头连接器。标准接头连接器不允许堆叠,但机械强度更高,而且价格也便宜得多!如果要在顶部堆叠屏蔽,请勿执行此步骤,因为焊接后无法卸载接头连接器in!向下跳至堆栈教程的底部
的接头中
将0.1”接头分成6、8和/或10针长的部分,并将长端滑入Arduino
将组装好的屏蔽层放置在带插头的Arduino的顶部,以便插头的所有短部分都通过外部的焊盘粘住
将每个插针焊接到屏蔽层中以进行安全连接
接下来,将连接端子块,电源跳线和伺服连接器
就是这样!现在您可以安装接线端子和跳线。..
安装接线端子及更多
安装普通或堆叠式接头连接器后,必须安装接线端子。
接下来,我们将安装端子块。这些就是我们将电源和电动机连接到屏蔽层的方式。它们比直接焊接更容易使用,只需使用小螺丝刀松开/连接电线!
首先,我们必须将它们焊接。
将3针端子块滑入2针端子块,因此您有2 x 5针和1 x 2针块。两套5针脚设置在任一侧。 2针引脚靠近屏蔽层的底部。确保接线端子的开口孔面向 out !
将板翻转过来,以便您可以看到并焊接接线端子的插针
焊接器在外部电源接线盒的两个引脚中
两个电动机模块中的焊料,每个5个垫块
Tha接线端子就可以了。接下来,伺服连接。
确定接下来,拿起 2x3排针,并将其短脚放到顶部角上,上面写着SERVO 1和SERVO 2
您可能需要稍微倾斜一下角度才能拿到零件可以插入两组3针孔中。我们这样做是为了避免将其翻转时掉落!
然后将板翻转过来并焊接6个引脚
最后,折断2针插头,并将其放在POWER接线端子旁边,短腿向下,如果需要,用胶带将其固定并焊接。 br》
div》使用堆栈头安装
您将需要为此步骤购买Arduino堆叠接头,但防护罩并未随附。
我们没有在2x3堆叠接头中显示焊接,但是您也应该在其中焊接-即使此屏蔽不使用它,上面的那个也可能需要那些引脚!
首先将10针,2 x 8针和6针堆叠接头从顶部滑入屏蔽的外排。然后将板翻转过来,使其靠在四个接头上。如有必要,请拉直腿。
每个标头钉一个针,使它们在更多焊接之前就位。如果接头弯曲,则可以在重新定位时重新加热一个针脚以将其弄直
一旦您弄平了所有标头,返回并焊接每个接头的其余引脚。
安装软件
安装Adafruit Motor Shield V2库
要在Arduino上使用盾牌,您需要安装Adafruit Motorshield v2库。 此库与用于v1防护罩的旧版AF_Motor库不兼容。但是,如果您有用于较旧的防护罩的代码,则修改代码以使用新的防护罩并不难。我们不得不稍微改变一下接口以支持屏蔽堆叠,我们认为这是值得的!可以从Arduino库管理器中获得它,因此我们建议使用它。
从IDE中打开库管理器。..
,然后键入 adafruit motor 来查找库。点击安装
如果计划将AccelStepper用于加速控制或同时控制多个步进电机,则还需要下载并安装AccelStepper库:
AccelStepper库
有关如何安装Arduino库的更多详细信息,请查看我们的详细教程!
运行示例代码
直流电动机
该库附带了一些示例,可帮助您快速入门。我们建议您开始使用直流电动机示例。您可以使用任何可以由6V-12VDC供电的直流电动机。首先,重新启动IDE以确保已加载新库。
将屏蔽层插入Arduino并将DC电动机连接到电动机端口1 -电动机是双向的,哪条线进入哪个接线端子都没有关系。连接到顶部的两个端子端口,而不连接到中间的引脚(GND)。有关红色和蓝色电线的示例,请参见下图。请确保拧紧接线盒以确保连接良好!
还必须提供5-12VDC来为电动机供电。可以通过两种方式
您可以通过 DC Barrel Jack 和插入所示的VIN跳线为Arduino供电。作为下方黑色绿色电源LED旁边的黑色高大手柄
,您可以通过DC Barrel插孔或 USB端口为Arduino供电。然后通过5-12VDC电动机电源端子端口,绿色电源LED旁边的双接线端子并移除VIN跳线
如果电源端子排旁边的绿色LED指示灯没有亮起,请不要继续!
正确连接了电动机,并且您的电源LED点亮了,我们可以上传代码。
在IDE中,加载 File-》 Examples-》 Adafruit_MotorShield-》 DCMotorTest
您应该看到并听到DC电动机打开后再来回移动的情况,如果看不到机芯,请附上纸条或胶带作为“标志”,可以帮助您直观地查看机芯。
步进电机测试
您可以还要测试步进电机与屏蔽的连接。屏蔽可以运行单极性(5线和6线)和双极性(4线)的步进器。它不能与其他任何数量的电线一起运行步进器!代码与单极或双极电机相同,接线方式略有不同。
将屏蔽层插入Arduino,并将步进电机连接到电机端口2 -与DC电机不同,该导线订单确实很重要。连接到顶部的两个终端端口(线圈1)和底部的两个终端端口(线圈2)。
如果您使用的是双极电机,请不要连接到中间引脚(GND)。
如果您使用的是5芯的单极电机,请将公共线连接到GND
如果您使用的是6线制单极电机,则可以将两根“中心线圈线”连接到GND
您还必须提供5-12VDC直流电源发动机。可以通过两种方式完成此操作
您可以通过 DC Barrel Jack 和插入VIN跳线(如图所示)为Arduino供电。黑色手柄紧贴在下面绿色的电源LED旁边
您可以通过DC Barrel插孔或 USB端口为Arduino供电。然后通过5-12VDC电动机电源端子端口,绿色电源LED旁边的双接线端子对屏蔽层供电。并卸下VIN跳线
如果绿色LED不能亮起不要继续-您必须通过VIN跳线或接线端子
确认电机已正确连接并且电源LED点亮,我们可以上传代码。
在IDE中,加载 File-》 Examples-》 Adafruit_MotorShield-》 StepperTest
您应该看到并听到步进电机打开后再来回移动,如果看不到运动,则在纸或胶带上贴上“标志”可以帮助您直观地看到运动。有四种移动步进器的方法,它们具有变化的速度,转矩和平滑度折衷。此示例代码将演示全部四个。
图书馆参考
类Adafruit_MotorShield; Adafruit_MotorShield类表示电动机屏蔽罩,必须使用任何DCMotor或StepperMotors对其进行实例化。您需要为系统中的每个屏蔽声明一个Adafruit_MotorShield。
Adafruit_MotorShield( uint8_t addr = 0x60);
构造函数使用一个可选参数来指定屏蔽的i2c地址。构造函数的默认地址(0x60)与出厂时板子的默认地址匹配。如果系统中有多个屏蔽,则每个屏蔽必须具有唯一的地址。
void begin(uint16_t freq = 1600); begin()必须在setup()中调用以初始化屏蔽。可选的频率参数可用于指定默认最大值以外的值:1.6KHz PWM频率。
Adafruit_DCMotor * getMotor(uint8_t n); 此函数返回由屏蔽控制的4个预定义直流电动机对象之一。该参数指定关联的电机通道:1-4。
Adafruit_StepperMotor * getStepper( uint16_t步长,uint8_t n); 此函数返回由屏蔽控制的2个预定义步进电机对象之一。
第一个参数指定每转的步数。
第二个参数指定相关的步进通道:1-2。
void setPWM(uint8_t引脚,uint16_t val);
void setPin(uint8_t引脚,布尔值val); 这些是控制引脚的底层功能在板载PWM驱动器芯片上。这些功能仅供内部使用。
Adafruit_DCMotor类 Adafruit_DCMotor类表示直流电动机附在盾牌上。您必须为系统中的每个电动机声明一个Adafruit_DCMotor。
Adafruit_DCMotor(void) ; 构造函数不接受任何参数。通常,通过分配如下所示的从屏蔽类检索的电机对象来初始化电机对象:
下载:file
复制代码
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Select which ‘port’ M1, M2, M3 or M4. In this case, M1
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
// You can also make another motor on port M2
Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2); // Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Select which ‘port’ M1, M2, M3 or M4. In this case, M1
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
// You can also make another motor on port M2
Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);
void run(uint8_t);
run()函数控制电机状态。该参数可以具有以下三个值之一:
FORWARD -向前旋转
BACKWARD -旋转反向
释放-停止旋转
请注意,“ FORWARD”和“ BACKWARD”方向是任意的。如果它们与您的车辆或机器人的实际方向不匹配,请简单地交换电动机导线。
还请注意,“ RELEASE”只是切断电动机的电源。它不施加任何制动。
void setSpeed(uint8_t);
setSpeed()函数控制传递给电动机的功率水平。速度参数的值介于0到255之间。
请注意,setSpeed仅控制传递给电动机的功率。电动机的实际速度取决于几个因素,包括:电动机,电源和负载。
Adafruit_StepperMotor类 Adafruit_StepperMotor类表示连接到屏蔽罩的步进电机。您必须为系统中的每个步进电机声明一个Adafruit_StepperMotor。
Adafruit_StepperMotor(void ); 构造函数不接受任何参数。步进电机通常通过分配从屏蔽中获取的步进器对象进行初始化,如下所示:
下载:文件
复制代码
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2); // Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);
无效步长(uint16_t步长,uint8_t目录,uint8_t样式=单); step()函数控制步进运动。
第一个参数指定要移动多少步。
第二个参数指定方向:FORWARD或BACKWARD
最后一个参数指定步进样式:SINGLE,DOUBLE ,INTERLEAVED或MICROSTEP
ste()函数是同步的,直到所有步骤完成后才返回。完成后,电动机将保持通电状态,以施加“保持扭矩”以保持位置。
void setSpeed(uint16_t); setSpeed()函数控制步进电动机的旋转速度。速度以RPM指定。
uint8_t一步(uint8_t目录,uint8_t样式); oneStep()函数是由step()调用的低级内部函数。但是单独调用以实现更高级的功能(例如加速或协调多个步进电机的同时运动)可能会很有用。方向和样式参数与step()相同,但是onestep()仅精确执行一次。
注意:调用step()的步数为1的方法与调用onestep()的方法不同。步进函数具有一个延迟,该延迟取决于setSpeed()中设置的速度。 onestep()没有延迟。
void释放(void) ; release()函数会切断电动机的所有电源。如果不需要保持扭矩来保持位置,则调用此函数以降低功率要求。
动力马达
马达需要大量能量,尤其是廉价的马达,因为它们的效率较低。
电压要求:
首先要弄清楚的重要因素找出电动机要使用的电压。如果幸运的话,您的电动机带有一些规格。一些小型的业余电动机仅打算以1.5V的电压运行,但6-12V电动机的使用却一样普遍。该屏蔽罩的电机控制器设计为在 5V至12V 范围内运行。
MOST 1.5-3V电机将无法工作
当前要求:
要解决的第二件事是您的电动机需要多少电流。该套件随附的电机驱动器芯片旨在为每个电机提供高达1.2 A的电流,峰值电流为3A。请注意,一旦接近2A,您可能会在电机驱动器上放一个散热器,否则会出现热故障,可能烧坏芯片。
您不能运行电机不用9V电池,所以不要浪费时间/电池!
使用大号铅酸或NiMH电池组。它还非常建议您设置两个电源(拆分电源),一个用于Arduino,另一个用于马达。 99%的“奇怪的电动机问题” ”是由于共享电源和/或电源不足导致电源线上的噪声!即使是小型直流电动机,它们停转时也可以吸收3安培的电流。
设置防护罩以为Hobby Servos供电
Servos的电源与Arduino使用的相同稳压5V电源关闭。 对于建议的小型业余伺服器来说,这是可以的。基本上,使用USB端口或DC桶式插孔为Arduino供电,就可以了。如果您想要更强大的功能,请切断去往可选伺服电源端子的走线,并连接自己的5-6V电源!
设置用于为直流和步进电动机供电的屏蔽
电动机是通过“高压电源”供电的,而不是稳压的5V电源。 请勿将电机电源连接至Arduino的5V电源引脚。除非您确定自己知道自己在做什么,否则这是一个非常非常糟糕的主意!您可能会损坏Arduino和/或USB端口!
您可以在两个地方获得电动机的“高压电源”。
一个是DC桶式插孔。
在Arduino板上
是另一个在屏蔽板上的2端子模块,其标签为 DC Motor Power 5-12VDC 。
Arduino上的DC插孔带有保护二极管,因此,如果插入错误的电源,您将无法搞砸。接线盒具有保护FET,因此,如果向后连接电池电源,则不会损坏arduino/屏蔽罩,但也不会起作用!
这是它的工作方式:
如果您想为Arduino和电机使用单个DC电源
说墙上适配器或具有6-12VDC输出的单个电池组,只需将其插入Arduino的DC插孔或屏蔽板上的2针电源接线盒即可。将电源跳线放在电动机护罩上。
请注意,如果电池电源无法提供恒定功率,您可能会遇到Arduino重置问题,因此这不是为电机项目供电的建议方法。您不能为此使用9V电池,它必须是4至8节AA电池或单/双铅酸电池组。
如果您要使用USB断开 Arduino的电源,而要断开DC电源的电机的电源
这是为电动机项目供电的建议方法,因为它具有分离的电源,一个逻辑电源和一个电动机电源
如果您要 2个用于Arduino和电机的独立直流电源。
将Arduino的电源插入DC插孔,然后将电机电源连接到电源端子块。确保已将跳线从电动机护罩上卸下。
无论如何,如果要使用直流电动机/步进系统,电动机护罩LED应当点亮,指示电动机功率良好
使用RC Servos
业余伺服器是进行电机控制的最简单方法。它们具有3针0.1英寸母头连接器,带+ 5V,接地和信号输入。电机屏蔽罩将Arduino针脚9和10的PWM输出线简单地引出到两个3针头连接器,从而易于插入和连接。他们可能会消耗大量功率,因此9V电池的使用时间不会超过几分钟!
使用板载PWM的好处是它非常精确,并且可以在后台运行。您可以使用内置的 Servo 库
使用伺服非常容易,请阅读Arduino官方文档以了解如何使用它们,并在IDE中查看示例Servo草图。/p》
为Servos供电
为Servos供电来自Arduino的板载5V稳压器,直接由Arduino上的USB或DC电源插孔供电。如果您需要外部电源,请在板子底部切割5v走线并连接5V或6V直流电源直接提供给 Opt伺服电源输入。 高级用户使用外部电源,因为您可能通过错误连接电源而意外损坏伺服器!
使用外部伺服电源时,请注意不要使其与处理器板上的USB插座外壳短路。用一些胶带将USB插座的顶部绝缘。
使用直流电动机
直流电动机用于各种机器人项目。
电动机护罩最多可双向驱动4台直流电动机。这意味着它们可以向前和向后驱动。使用高质量的内置PWM,速度也可以以0.5%的增量变化。这意味着速度非常平稳,不会变化!
请注意,H桥芯片并不适合驱动1.2A的连续负载,因此适用于小型电动机。检查数据表以获取有关电机的信息,以验证其是否正常!
电动机
要连接电动机,只需将两根导线焊接到端子上,然后将它们连接到M1,M2,M3或M4。然后在您的草图中按照以下步骤操作
包含所需的库
请确保您 #include 所需的库
下载:文件
复制代码
#include
#include
#include “utility/Adafruit_MS_PWMServoDriver.h” #include
#include
#include “utility/Adafruit_MS_PWMServoDriver.h”
创建Adafruit_MotorShield对象
下载:文件
复制代码
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_MotorShield AFMS = Adafruit_MotorShield();
创建直流电动机对象
从Adafruit_MotorShield请求直流电动机:
下载:文件
复制代码
Adafruit_DCMotor *myMotor = AFMS.getMotor(1); Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
和 getMotor(port#)。 端口 #是它连接到的端口。如果您正在使用M1的 1 ,M2使用 2 ,M3使用 3 和M4使用 4
连接到控制器
在您的setup()函数中,调用Adafruit_MotorShield对象上的begin():
下载:文件
复制代码
AFMS.begin(); AFMS.begin();
设置默认速度
使用 setSpeed( speed )设置电动机的速度》 速度 的范围是从0(停止)到255(全速)。您可以随时设置速度。
下载:文件
复制代码
myMotor-》setSpeed(150); myMotor-》setSpeed(150);
运行电动机
要运行电动机,请致电运行(方向),其中 方向 是 FORWARD , BACKWARD 或 RELEASE 。当然,Arduino实际上并不知道电机是“前进”还是“后退”,因此,如果您想更改其认为前进的方式,只需将电机和屏蔽层的两根线互换即可。
下载:文件
复制代码
myMotor-》run(FORWARD); myMotor-》run(FORWARD);
使用步进电机
步进电机非常适合(半)精确控制,非常适合许多机器人和CNC项目。该电机护罩最多可支持2个步进电机。对于双极和单极电动机,该库的工作原理相同。
对于单极电动机:要连接步进电机,首先要弄清楚哪些引脚连接到哪个线圈,以及哪个引脚是中心抽头。如果它是5线制电动机,则两个线圈的中心抽头将为1。在线上有很多关于如何反向工程线圈引出线的教程。中心抽头应同时连接到电机屏蔽输出块的GND端子上。那么线圈1应该连接到一个电动机端口(例如M1或M3),线圈2应该连接到另一个电动机端口(M2或M4)。
对于双极型电动机:与单极电动机一样,除了没有5号线接地。代码完全相同。
运行步进器比运行直流电动机要复杂得多,但仍然很容易
包括所需的库
请确保您 #include 所需的库
下载:文件
复制代码
#include
#include
#include “utility/Adafruit_PWMServoDriver.h” #include
#include
#include “utility/Adafruit_PWMServoDriver.h”
创建Adafruit_MotorShield对象
下载:文件
复制代码
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_MotorShield AFMS = Adafruit_MotorShield();
创建步进电机对象
从 Adafruit_MotorShield 请求步进电机:
下载:文件
复制代码
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2); Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);
。.. with cc = 1》。
getStepper(steps, stepper#) ind表示电机每转多少步。 7.5度/步的电动机具有360/7.5 = 48步。
Steps是其连接到的端口。如果您使用的是M1和M2,则其端口为 1 。如果您使用的是M3和M4,请指明端口 2
设置默认速度
使用Stepper#设置电动机的速度,其中rpm是您希望步进器每分钟转多少转。
运行电动机
然后每次您希望电动机运动时,都调用setSpeed(rpm)程序。 #steps 是您要执行的步骤。方向为 FORWARD 或 BACKWARD ,步长类型为 SINGLE , DOUBLE , INTERLEAVE 或 MICROSTEP 。
“单”表示单线圈激活
“双”表示一次激活2个线圈(以获得更高的转矩) )
“交错”表示它在单倍和双倍之间交替以获得两倍的分辨率(但当然是速度的一半)。
“微步进”是一种使用线圈的方法
在资源页面中有大量关于这些不同步进方法的优缺点的信息。
您可以使用任何一种步进方法您可以将其“动态”更改为所需的最小功率,更大的扭矩或更高的精度。
默认情况下,电机在完成步进后将“保持”位置。如果要释放所有线圈以使其自由旋转,请调用step(#steps, direction, steptype)
步进命令为“阻塞”,并且在完成步骤后将返回。
因为步进命令为“阻塞” ‘-您每次要移动步进电机时,都必须指示它们。如果您想拥有更多的“后台任务”步进器控件,请查看AccelStepper库(与 Adafruit_MotorShield 的安装方式类似),其中提供了一些示例,这些示例可同时控制三个步进器并以不同的加速度
Python和CircuitPython
我们为各种直流电动机和步进器套件(称为Adafruit CircuitPython MotorKit)编写了一个方便的CircuitPython库,该库可为您处理所有复杂的设置。您需要做的就是从库中导入适当的类,然后可以使用该类的所有功能。我们将向您展示如何导入MotorKit类,并使用它来通过Adafruit Stepper + DC Motor Shield来控制DC和步进电机。
CircuitPython微控制器接线
首先请按照上一页中的说明完全组装Shield。无需将屏蔽线连接到地铁的布线。下面的示例显示了将两个直流电动机连接到Shield后,将其连接到Metro的情况。您需要将桶形插孔连接到电源端子,以将适当的外部电源连接到Shield。 没有外部电源,Shield将无法运行!
将两根电动机导线从第一台电动机连接到 Shield上的M1端子 。
将来自第二个电动机的两条电动机导线连接到屏蔽罩上的 M2端子。
连接 》将电源端子的正侧连接到桶形插孔的正侧。
将电源端子的负侧连接到桶形千斤顶的负侧。
MotorKit和必需库的CircuitPython安装
您需要在Metro公猪上安装一些库d。
首先请确保您的电路板正在运行最新版本的Adafruit CircuitPython。
接下来,您需要安装必要的库以使用硬件-仔细按照以下步骤操作从Adafruit的CircuitPython库捆绑包中找到并安装这些库。我们的CircuitPython入门指南上有一个很棒的页面,介绍如何安装库捆绑包。
如果选择,您可以在板上单独手动安装库:
adafruit_pca9685
adafruit_bus_device
adafruit_register
adafruit_motor 》
adafruit_motorkit
在继续之前,请确保您开发板的lib文件夹或根文件系统具有 adafruit_pca9685 》 .mpy,adafruit_register,adafruit_motor, adafruit_bus_device 和 adafruit_motorkit 文件和文件夹 已复制。
Nextconnect到电路板的串行REPL,因此您位于CircuitPython上。》》》 提示。
CircuitPython用法
为演示用法,我们将初始化该库并使用Python代码控制DC并逐步
首先,您需要导入并初始化MotorKit类。
下载:文件
复制代码
from adafruit_motorkit import MotorKit
kit = MotorKit() from adafruit_motorkit import MotorKit
kit = MotorKit()
直流电动机
Shield上的四个电动机点分别为motor1,motor2,motor3和motor4。
在此示例中,我们将使用motor1。
注意:对于像商店出售的小型直流电动机,您可能会遇到电气噪声问题,这些问题会在电路板上产生并且行为不稳定。如果您看到不稳定的行为,例如电机不旋转或在高速电机上板复位,则可能是问题所在。有关电容器的信息,请参见此电机指南常见问题页面,您可以将其焊接到电机上以降低噪声。
现在要移动电动机,您可以设置throttle属性。我们不称其为速度,因为它与特定的每分钟转数(RPM)不相关。 RPM取决于电动机和未知电压。
例如,要以全速向前驱动电动机M1,请将其设置为1.0:
下载:文件
复制代码
kit.motor1.throttle = 1.0 kit.motor1.throttle = 1.0
要以半油门速度向前运行,请使用小数点:
下载:文件
复制代码
kit.motor1.throttle = 0.5 kit.motor1.throttle = 0.5
或使用负向油门反转方向:
下载:文件
复制代码
kit.motor1.throttle = -0.5 kit.motor1.throttle = -0.5
您可以使用0的油门来停止电动机:
下载:文件
复制代码
kit.motor1.throttle = 0 kit.motor1.throttle = 0
使电动机惯性停车然后自由旋转将油门设为None。
下载:文件
复制代码
kit.motor1.throttle = None kit.motor1.throttle = None
用CircuitPython控制直流电动机!借助直流电动机,您可以构建有趣的运动项目,例如机器人或遥控车,它们可以轻松地四处滑动。
步进电机
类似的直流电机,步进电机有stepper1和stepper2。 stepper1由M1和M2端子组成,stepper2由M3和M4端子组成。
在示例中,我们将使用stepper1 。
最基本的功能(也是默认值)是执行一个线圈步骤。
下载:文件
复制代码
kit.stepper1.onestep() kit.stepper1.onestep()
也可以使用两个可选的关键字参数。要使用这些文件,您还需要导入步进器。
下载:文件
复制代码
from adafruit_motor import stepper from adafruit_motor import stepper
然后您可以访问以下选项:
direction,应为以下常量值之一:
stepper.FORWARD(默认值)
stepper.BACKWARD。
style,应为以下值之一:
stepper.SINGLE(默认值),用于整步旋转到单个线圈通电的位置
stepper.DOUBLE用于整步旋转到两个线圈通电的位置,以提供更大的扭矩
stepper.INTERLEAVED用于半步旋转交错单线圈和双线圈位置和扭矩
stepper.MICROSTEP微步旋转到两个线圈部分处于活动状态的位置。
release() 所有线圈,以便电动机可以自由旋转,并且不使用任何功率
该函数以微步长返回当前步长“位置”,方便地了解步进器已移动了多远,或者您可以忽略结果。
进行双线圈后退调用:
下载:文件
复制代码
kit.stepper1.onestep(direction=stepper.BACKWARD, style=stepper.DOUBLE) kit.stepper1.onestep(direction=stepper.BACKWARD, style=stepper.DOUBLE)
您甚至可以使用循环来连续调用onestep并移动步进器,例如向前循环200个微步以实现平滑移动:
下载:文件
复制代码
for i in range(200):
kit.stepper1.onestep(style=stepper.MICROSTEP) for i in range(200):
kit.stepper1.onestep(style=stepper.MICROSTEP)
这是从CircuitPython控制步进电机的全部!步进机是方便的电动机,适用于需要平滑或精确控制某些物体的情况,例如3D打印机和CNC机器使用步进机在表面上精确移动工具。
完整示例代码
对于直流电动机:
下载:Project Zip 或 motorkit_dc_motor_simpletest.py | 在Github上查看
复制代码
“”“Simple test for using adafruit_motorkit with a DC motor”“”
import time
from adafruit_motorkit import MotorKit
kit = MotorKit()
kit.motor1.throttle = 1.0
time.sleep(0.5)
kit.motor1.throttle = 0
“”“Simple test for using adafruit_motorkit with a DC motor”“”
import time
from adafruit_motorkit import MotorKit
kit = MotorKit()
kit.motor1.throttle = 1.0
time.sleep(0.5)
kit.motor1.throttle = 0
对于步进电机:
下载:Project Zip 或 motorkit_stepper_simpletest.py | 在Github上查看
复制代码
“”“Simple test for using adafruit_motorkit with a stepper motor”“”
from adafruit_motorkit import MotorKit
kit = MotorKit()
for i in range(100):
kit.stepper1.onestep()
“”“Simple test for using adafruit_motorkit with a stepper motor”“”
from adafruit_motorkit import MotorKit
kit = MotorKit()
for i in range(100):
kit.stepper1.onestep()
堆叠盾牌
关于此屏蔽设计的一件很酷的事情是可以堆叠屏蔽。堆叠的每个屏蔽层都可以控制另外2个步进器或4个DC电动机(或两者的混合)。您最多可以堆叠32个罩,总共64个步进器或128个DC电动机!大多数人可能只会堆叠两个或三个,但嘿,你永远不会知道。 (请注意,如果从这些屏蔽板之一驱动64个步进器,请给我们发张照片,好吗?)
请注意,堆叠屏蔽板不会增加伺服连接-这些硬连接至Arduino数字9和10引脚。如果您需要控制很多伺服器,则可以使用我们的16通道伺服器防护罩并将其与该防护罩堆叠起来,以增加疯狂的大量伺服器。
堆叠防护罩非常容易。您要堆叠的每个屏蔽必须安装堆叠头。查看我们的说明以了解操作方法。除非最终要在顶部屏蔽层上放一些东西,否则顶部屏蔽层不必具有堆叠头。
堆叠屏蔽层时唯一要注意的是每个屏蔽层都必须具有唯一的I2C地址。默认地址为 0x60 。您可以将屏蔽的地址调整为从0x60到0x7F的范围,以获取总共32个唯一的地址。
寻址盾牌
必须为链中的每个板分配一个唯一的地址。这是通过板下边缘的地址跳线完成的。每块板的I2C基址为0x60。使用地址跳线编程的二进制地址将添加到基本I2C地址。要编程地址偏移量,请使用一滴焊料桥接地址中每个二进制“ 1”的对应地址跳线。
最右边的跳线是地址位#0,然后到左边是地址位#1,依此类推,直到地址位#4
面板0:地址= 0x60偏移=二进制0000(无需跳线)《板1:地址= 0x61偏移=二进制0001(如上图所示的桥A0)
板2:地址= 0x62偏移=二进制0010(A0左侧的桥A1)
板3:地址= 0x63偏移量=二进制0011(桥A0和A1,两个最右边的跳线)
板4:地址= 0x64偏移量=二进制0100(桥A2,中间的跳线)等
请注意,地址0x70是屏蔽板上控制器芯片的“全部调用”地址。所有板都将响应地址0x70-不管地址跳线设置如何。
多个屏蔽的编写代码
与较早的AF_Motor库不同,Adafruit_MotorShield库具有控制多个屏蔽的功能。首先,我们必须为每个屏蔽创建一个电动机屏蔽控制器,并为其分配地址。
Adafruit_MotorShield AFMSbot(0x61);//最右边的跳线关闭
Adafruit_MotorShield AFMStop(0x60);//默认地址,没有跳线
一个电机屏蔽层将被称为AFMSbot(底部屏蔽层,因此我们要记住),另一个是AFMStop(顶部屏蔽层),这样我们就可以将它们分开。创建屏蔽对象时,请在上面指定为其设置的地址。
然后,我们可以请求将电机连接到每个电机上。
//在顶部屏蔽上,连接两个步进器,每个步进器具有200个步骤
Adafruit_StepperMotor * myStepper2 = AFMStop.getStepper(200,1);
Adafruit_StepperMotor * myStepper3 = AFMStop.getStepper(200,2);
//在200步的底部屏蔽层上,将步进器连接到端口M3/M4
Adafruit_StepperMotor * myStepper1 = AFMSbot.getStepper(200,2);
//和一个直流电动机到端口M1
Adafruit_DCMotor * myMotor1 = AFMSbot.getMotor(1);
您可以从任何端口请求步进或直流电动机,只需在调用 getMotor 或 getStepper 时确保使用正确的AFMS控制器对象即可。在使用已连接的电动机之前,必须先调用开始。
AFMSbot.begin();//启动底部屏蔽
AFMStop.begin();//启动顶部屏蔽
您可以通过设置两个屏蔽并运行 File-》 Examples-》 Adafruit_MotorShield-》 StackingTest 来亲自尝试此代码示例
资源
汽车创意和教程
维基百科上有很多有关步进电机的信息
关于步进电机类型的琼斯
Jason涉及对步进电机引线的反向工程
》
PCB文件在GitHub上
示意图,单击以进行嵌入
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !