Adafruit Motorshield套件的使用

电子说

1.3w人已加入

描述

概述

原始的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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分