概述
原始的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上
示意图,单击以进行嵌入
凌力尔特推出超高效双输出同步降压型DC/DC控制器LTC38
击进的AMD,份额大幅增长
realme智能手环亮正式相,但续航是个大问题
苹果手机电池能换么_苹果手机电池更换教程_苹果手机换电池多少钱
掌握通讯线缆的五个口诀,室外光缆施工需要资质吗?
Adafruit Motorshield套件的使用
睿思芯科荣获创新南山2023“创业之星”大赛行业二等奖
全球年度Top 5 唯一RISC-V单板计算机入选
数字化革命下,车企如何转型升级?
厂商曝苹果iPhone 13已开始打样
游泳池水质监测仪哪家好
APS智能排程之 AMRP外购料需求计划
如何提升白光LED光效,有哪些解决方案
4G LTE呈现跳跃式增长:今年用户将超过一亿
探析2019年汽车工业技术及市场趋势
华为nova系列新机发布,支持40W超级快充技术
电子元器件的不同发展阶段剖析
多晶硅产业回归理性及发展机遇分析
录音机全自动停机装置电路图
可穿戴设备卖不好的原因在哪?