概述
原始的Adafruit Motorshield套件是我們最受歡迎的套件之一,因此我們決定做得更好。我們已經(jīng)升級了屏蔽套件,使其成為驅(qū)動DC和步進電機的最佳,最簡便的方法。該防護罩將幫助您快速完成下一個機器人項目!我們保留了驅(qū)動多達4個DC電動機或2個步進電動機的能力,但又進行了許多改進:
我們現(xiàn)在有了TB6612 MOSFET驅(qū)動器,而不是L293D達林頓驅(qū)動器,每通道電流能力為1.2A(您可以自行設(shè)計達到3A峰值,每次約20ms)。它還具有更低的電機壓降,因此您可以從電池中獲得更多的扭矩,并且還具有內(nèi)置的反激二極管。
我們沒有使用閂鎖和Arduino的PWM引腳,而是使用了專用的PWM驅(qū)動器芯片。該芯片可處理I2C上的所有電動機和速度控制。僅兩個GPIO引腳(SDA和SCL)加上5v和GND。驅(qū)動多臺電動機是必需的,并且由于它是I2C,因此您還可以將任何其他I2C設(shè)備或屏蔽連接到同一引腳。這也使其與Uno,Leonardo,Due和Mega R3等任何Arduino兼容。
完全可堆疊的設(shè)計:5個地址選擇引腳意味著最多32個可堆疊屏蔽:那是64個步進器或128個直流電機!這么多步進器到底能做什么?我不知道,但是如果您有什么建議,請給我們發(fā)照片,因為那將是一個非常光榮的項目。
還有許多其他小的改進,例如電源引腳上的極性保護FET和較大的原型設(shè)計區(qū)域。屏蔽層已在Adafruit進行了組裝和測試,因此您所要做的就是在直的或堆疊的插頭和接線端子上焊接。
讓我們再次檢查一下這些規(guī)格:
2個用于Arduino高分辨率專用計時器的5V“業(yè)余”伺服器連接-無抖動!
4個H橋:TB6612芯片組為每個橋提供 1.2A strong》(對于短暫的20ms峰值為3A),具有熱關(guān)斷保護,內(nèi)部反沖保護二極管。可以在4.5VDC到13.5VDC的電壓下運行電動機。
最多4個具有單獨的8位速度選擇(因此,分辨率約為0.5%)的雙向DC 電動機。
》
最多2個具有單線圈,雙線圈,交錯或微步進的步進電機(單極或雙極)。
上電時電機會自動禁用
大型接線端子連接器,可輕松連接電線(18-26AWG)和電源
Arduino重置按鈕位于頂部
受極性保護的2針接線端子和跳線連接外部電源,用于單獨的邏輯/電機電源
經(jīng)測試與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業(yè)余伺服器和最多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盾是否兼容?
經(jīng)測試可與Duemilanove,Diecimila,Uno一起使用(所有版本),萊昂納多和Mega/ADK R3及更高版本。
如果您將屏蔽層的SDA引腳與Digital 20以及SCL引腳與Digital 21的跳線焊接起來,則它可以與Mega R2及更低版本配合使用。要與Due或其他3.3v處理器一起使用,必須將開發(fā)板配置為3.3v邏輯電平。找到標(biāo)記為“ Logic”的3個打擊墊的集合。在中心焊盤和5v之間切出一條小線,并在中心處從3.3v添加一個跳線。
從Arduino 1.5.6-r2 BETA開始,Due Wire庫中存在一個錯誤,阻止多個Motor Shields正常工作!
我在嘗試運行示例代碼時遇到以下錯誤:“錯誤:Adafruit_MotorShield.h:沒有此類文件或目錄。。..”
確保已安裝Adafruit_MotorShield庫
我如何安裝庫?
在http://learn.com上檢查有關(guān)該主題的教程頁面。 adafruit.com/adafruit-motor-shield-v2-for-arduino/install-soft ware
幫助!我的馬達不起作用! - 救命!我的電機不工作!。..但是伺服系統(tǒng)工作正常!
電源指示燈是點燃?如果板載綠色電源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傳感器/驅(qū)動器一起使用。
由于屏蔽使用I2C進行通信,因此可以將任何其他i2c傳感器或驅(qū)動器連接到SDA/SCL引腳,只要它們不使用地址 0x60 (屏蔽的默認地址)或 0x70 (此芯片用于組控制的“所有呼叫”地址)
如果要使用伺服連接,它們位于針腳#9和#10上。如果您不使用連接器,那么這些引腳將不使用。
您可以將任何其他引腳用于其他用途
請注意,引腳A4和A5連接到SDA和SCL,以兼容經(jīng)典Arduino。這些引腳不能在其他處理器上使用。
如何連接未使用的引腳?
所有針腳都沿著屏蔽的邊緣分成0.1“間距的插頭
我的電動機運行時Arduino嚇壞了!屏蔽層破損了嗎?
電動機需要很多時間的電源,并可能導(dǎo)致“掉電”,從而使Arduino復(fù)位,因此,屏蔽罩設(shè)計用于單獨的(分體)電源-一個用于電子設(shè)備,一個用于電動機,這樣做可以防止掉電。請閱讀用戶手冊以獲取有關(guān)以下信息:適當(dāng)?shù)碾娫础?/p>
我正在嘗試構(gòu)建此機器人,它似乎無法在9V電池上運行。。..
您不能用9V電池為電動機供電。電動機必須使用AA電池或鉛酸電池。
此屏蔽能否控制小型3V電機?
我有良好的固態(tài)電源,但是直流電動機似乎“斷路了”
嘗試在兩個之間焊接一個陶瓷或碟形0.1uF電容器。電機接線片(在電機本身上?。p少可能反饋回電路的噪聲(感謝macegr?。?/p>
當(dāng)電動機開始運行時,其他任何功能均不起作用
許多小型直流電動機都有很多“電刷噪聲”。這會反饋到Arduino電路并導(dǎo)致不穩(wěn)定的操作??梢酝ㄟ^在電機上焊接一些0.1uF陶瓷噪聲抑制電容器來解決此問題。
總共需要3個。電機端子之間有1個,每個端子與電機外殼之間有1個。
但是我的電動機上已經(jīng)裝有電容器,但仍然無法工作。
div》
為什么不只是在屏蔽層中設(shè)計電容器?
它們在那里無效。必須在源頭處抑制噪聲,否則電動機導(dǎo)線將像天線一樣工作并將其廣播到系統(tǒng)的其余部分!
為什么我的步進電機什么也不會走
由于屏蔽是由i2c控制的,因此最大步進速率為受i2c總線速度的限制。默認總線速度為100KHz,可以通過編輯Arduino安裝文件夾中的庫文件將其提高到400KHz??梢栽?硬件/庫/wire/utility/twi.h 中找到該文件。
用“ #define TWI_FREQ 100000L”
查找行將其更改為“ #define TWI_FREQ 400000L”
或者,您可以將以下代碼添加到setup()函數(shù)中:(注意:此行必須在對begin()的調(diào)用后 插入)
TWBR =((F_CPU/400000l)-16)/2;//將i2c時鐘更改為400KHz
此屏蔽使用了哪些I2C地址?
可從0x60-0x7F尋址屏蔽。 0x70是所有董事會都將應(yīng)答的“所有呼叫”地址。
我的防護罩無法與我的LED背包一起使用。
某些背包的默認地址為0x70。這是電動機護罩上控制器芯片的“全部呼叫”地址。如果您重新定位背包,它將與防護罩一起使用。
安裝標(biāo)題和終端
安裝標(biāo)準(zhǔn)接頭
防護罩隨附0.1 “標(biāo)準(zhǔn)接頭連接器。標(biāo)準(zhǔn)接頭連接器不允許堆疊,但機械強度更高,而且價格也便宜得多!如果要在頂部堆疊屏蔽,請勿執(zhí)行此步驟,因為焊接后無法卸載接頭連接器in!向下跳至堆棧教程的底部
的接頭中
將0.1”接頭分成6、8和/或10針長的部分,并將長端滑入Arduino
將組裝好的屏蔽層放置在帶插頭的Arduino的頂部,以便插頭的所有短部分都通過外部的焊盤粘住
將每個插針焊接到屏蔽層中以進行安全連接
接下來,將連接端子塊,電源跳線和伺服連接器
就是這樣!現(xiàn)在您可以安裝接線端子和跳線。..
安裝接線端子及更多
安裝普通或堆疊式接頭連接器后,必須安裝接線端子。
接下來,我們將安裝端子塊。這些就是我們將電源和電動機連接到屏蔽層的方式。它們比直接焊接更容易使用,只需使用小螺絲刀松開/連接電線!
首先,我們必須將它們焊接。
將3針端子塊滑入2針端子塊,因此您有2 x 5針和1 x 2針塊。兩套5針腳設(shè)置在任一側(cè)。 2針引腳靠近屏蔽層的底部。確保接線端子的開口孔面向 out !
將板翻轉(zhuǎn)過來,以便您可以看到并焊接接線端子的插針
焊接器在外部電源接線盒的兩個引腳中
兩個電動機模塊中的焊料,每個5個墊塊
Tha接線端子就可以了。接下來,伺服連接。
確定接下來,拿起 2x3排針,并將其短腳放到頂部角上,上面寫著SERVO 1和SERVO 2
您可能需要稍微傾斜一下角度才能拿到零件可以插入兩組3針孔中。我們這樣做是為了避免將其翻轉(zhuǎn)時掉落!
然后將板翻轉(zhuǎn)過來并焊接6個引腳
最后,折斷2針插頭,并將其放在POWER接線端子旁邊,短腿向下,如果需要,用膠帶將其固定并焊接。 br》
div》使用堆棧頭安裝
您將需要為此步驟購買Arduino堆疊接頭,但防護罩并未隨附。
我們沒有在2x3堆疊接頭中顯示焊接,但是您也應(yīng)該在其中焊接-即使此屏蔽不使用它,上面的那個也可能需要那些引腳!
首先將10針,2 x 8針和6針堆疊接頭從頂部滑入屏蔽的外排。然后將板翻轉(zhuǎn)過來,使其靠在四個接頭上。如有必要,請拉直腿。
每個標(biāo)頭釘一個針,使它們在更多焊接之前就位。如果接頭彎曲,則可以在重新定位時重新加熱一個針腳以將其弄直
一旦您弄平了所有標(biāo)頭,返回并焊接每個接頭的其余引腳。
安裝軟件
安裝Adafruit Motor Shield V2庫
要在Arduino上使用盾牌,您需要安裝Adafruit Motorshield v2庫。 此庫與用于v1防護罩的舊版AF_Motor庫不兼容。但是,如果您有用于較舊的防護罩的代碼,則修改代碼以使用新的防護罩并不難。我們不得不稍微改變一下接口以支持屏蔽堆疊,我們認為這是值得的!可以從Arduino庫管理器中獲得它,因此我們建議使用它。
從IDE中打開庫管理器。..
,然后鍵入 adafruit motor 來查找?guī)?。點擊安裝
如果計劃將AccelStepper用于加速控制或同時控制多個步進電機,則還需要下載并安裝AccelStepper庫:
AccelStepper庫
有關(guān)如何安裝Arduino庫的更多詳細信息,請查看我們的詳細教程!
運行示例代碼
直流電動機
該庫附帶了一些示例,可幫助您快速入門。我們建議您開始使用直流電動機示例。您可以使用任何可以由6V-12VDC供電的直流電動機。首先,重新啟動IDE以確保已加載新庫。
將屏蔽層插入Arduino并將DC電動機連接到電動機端口1 -電動機是雙向的,哪條線進入哪個接線端子都沒有關(guān)系。連接到頂部的兩個端子端口,而不連接到中間的引腳(GND)。有關(guān)紅色和藍色電線的示例,請參見下圖。請確保擰緊接線盒以確保連接良好!
還必須提供5-12VDC來為電動機供電。可以通過兩種方式
您可以通過 DC Barrel Jack 和插入所示的VIN跳線為Arduino供電。作為下方黑色綠色電源LED旁邊的黑色高大手柄
,您可以通過DC Barrel插孔或 USB端口為Arduino供電。然后通過5-12VDC電動機電源端子端口,綠色電源LED旁邊的雙接線端子并移除VIN跳線
如果電源端子排旁邊的綠色LED指示燈沒有亮起,請不要繼續(xù)!
正確連接了電動機,并且您的電源LED點亮了,我們可以上傳代碼。
在IDE中,加載 File-》 Examples-》 Adafruit_MotorShield-》 DCMotorTest
您應(yīng)該看到并聽到DC電動機打開后再來回移動的情況,如果看不到機芯,請附上紙條或膠帶作為“標(biāo)志”,可以幫助您直觀地查看機芯。
步進電機測試
您可以還要測試步進電機與屏蔽的連接。屏蔽可以運行單極性(5線和6線)和雙極性(4線)的步進器。它不能與其他任何數(shù)量的電線一起運行步進器!代碼與單極或雙極電機相同,接線方式略有不同。
將屏蔽層插入Arduino,并將步進電機連接到電機端口2 -與DC電機不同,該導(dǎo)線訂單確實很重要。連接到頂部的兩個終端端口(線圈1)和底部的兩個終端端口(線圈2)。
如果您使用的是雙極電機,請不要連接到中間引腳(GND)。
如果您使用的是5芯的單極電機,請將公共線連接到GND
如果您使用的是6線制單極電機,則可以將兩根“中心線圈線”連接到GND
您還必須提供5-12VDC直流電源發(fā)動機??梢酝ㄟ^兩種方式完成此操作
您可以通過 DC Barrel Jack 和插入VIN跳線(如圖所示)為Arduino供電。黑色手柄緊貼在下面綠色的電源LED旁邊
您可以通過DC Barrel插孔或 USB端口為Arduino供電。然后通過5-12VDC電動機電源端子端口,綠色電源LED旁邊的雙接線端子對屏蔽層供電。并卸下VIN跳線
如果綠色LED不能亮起不要繼續(xù)-您必須通過VIN跳線或接線端子
確認電機已正確連接并且電源LED點亮,我們可以上傳代碼。
在IDE中,加載 File-》 Examples-》 Adafruit_MotorShield-》 StepperTest
您應(yīng)該看到并聽到步進電機打開后再來回移動,如果看不到運動,則在紙或膠帶上貼上“標(biāo)志”可以幫助您直觀地看到運動。有四種移動步進器的方法,它們具有變化的速度,轉(zhuǎn)矩和平滑度折衷。此示例代碼將演示全部四個。
圖書館參考
類Adafruit_MotorShield; Adafruit_MotorShield類表示電動機屏蔽罩,必須使用任何DCMotor或StepperMotors對其進行實例化。您需要為系統(tǒng)中的每個屏蔽聲明一個Adafruit_MotorShield。
Adafruit_MotorShield( uint8_t addr = 0x60);
構(gòu)造函數(shù)使用一個可選參數(shù)來指定屏蔽的i2c地址。構(gòu)造函數(shù)的默認地址(0x60)與出廠時板子的默認地址匹配。如果系統(tǒng)中有多個屏蔽,則每個屏蔽必須具有唯一的地址。
void begin(uint16_t freq = 1600); begin()必須在setup()中調(diào)用以初始化屏蔽??蛇x的頻率參數(shù)可用于指定默認最大值以外的值:1.6KHz PWM頻率。
Adafruit_DCMotor * getMotor(uint8_t n); 此函數(shù)返回由屏蔽控制的4個預(yù)定義直流電動機對象之一。該參數(shù)指定關(guān)聯(lián)的電機通道:1-4。
Adafruit_StepperMotor * getStepper( uint16_t步長,uint8_t n); 此函數(shù)返回由屏蔽控制的2個預(yù)定義步進電機對象之一。
第一個參數(shù)指定每轉(zhuǎn)的步數(shù)。
第二個參數(shù)指定相關(guān)的步進通道:1-2。
void setPWM(uint8_t引腳,uint16_t val);
void setPin(uint8_t引腳,布爾值val); 這些是控制引腳的底層功能在板載PWM驅(qū)動器芯片上。這些功能僅供內(nèi)部使用。
Adafruit_DCMotor類 Adafruit_DCMotor類表示直流電動機附在盾牌上。您必須為系統(tǒng)中的每個電動機聲明一個Adafruit_DCMotor。
Adafruit_DCMotor(void) ; 構(gòu)造函數(shù)不接受任何參數(shù)。通常,通過分配如下所示的從屏蔽類檢索的電機對象來初始化電機對象:
下載:file
復(fù)制代碼
// 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()函數(shù)控制電機狀態(tài)。該參數(shù)可以具有以下三個值之一:
FORWARD -向前旋轉(zhuǎn)
BACKWARD -旋轉(zhuǎn)反向
釋放-停止旋轉(zhuǎn)
請注意,“ FORWARD”和“ BACKWARD”方向是任意的。如果它們與您的車輛或機器人的實際方向不匹配,請簡單地交換電動機導(dǎo)線。
還請注意,“ RELEASE”只是切斷電動機的電源。它不施加任何制動。
void setSpeed(uint8_t);
setSpeed()函數(shù)控制傳遞給電動機的功率水平。速度參數(shù)的值介于0到255之間。
請注意,setSpeed僅控制傳遞給電動機的功率。電動機的實際速度取決于幾個因素,包括:電動機,電源和負載。
Adafruit_StepperMotor類 Adafruit_StepperMotor類表示連接到屏蔽罩的步進電機。您必須為系統(tǒng)中的每個步進電機聲明一個Adafruit_StepperMotor。
Adafruit_StepperMotor(void ); 構(gòu)造函數(shù)不接受任何參數(shù)。步進電機通常通過分配從屏蔽中獲取的步進器對象進行初始化,如下所示:
下載:文件
復(fù)制代碼
// 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()函數(shù)控制步進運動。
第一個參數(shù)指定要移動多少步。
第二個參數(shù)指定方向:FORWARD或BACKWARD
最后一個參數(shù)指定步進樣式:SINGLE,DOUBLE ,INTERLEAVED或MICROSTEP
ste()函數(shù)是同步的,直到所有步驟完成后才返回。完成后,電動機將保持通電狀態(tài),以施加“保持扭矩”以保持位置。
void setSpeed(uint16_t); setSpeed()函數(shù)控制步進電動機的旋轉(zhuǎn)速度。速度以RPM指定。
uint8_t一步(uint8_t目錄,uint8_t樣式); oneStep()函數(shù)是由step()調(diào)用的低級內(nèi)部函數(shù)。但是單獨調(diào)用以實現(xiàn)更高級的功能(例如加速或協(xié)調(diào)多個步進電機的同時運動)可能會很有用。方向和樣式參數(shù)與step()相同,但是onestep()僅精確執(zhí)行一次。
注意:調(diào)用step()的步數(shù)為1的方法與調(diào)用onestep()的方法不同。步進函數(shù)具有一個延遲,該延遲取決于setSpeed()中設(shè)置的速度。 onestep()沒有延遲。
void釋放(void) ; release()函數(shù)會切斷電動機的所有電源。如果不需要保持扭矩來保持位置,則調(diào)用此函數(shù)以降低功率要求。
動力馬達
馬達需要大量能量,尤其是廉價的馬達,因為它們的效率較低。
電壓要求:
首先要弄清楚的重要因素找出電動機要使用的電壓。如果幸運的話,您的電動機帶有一些規(guī)格。一些小型的業(yè)余電動機僅打算以1.5V的電壓運行,但6-12V電動機的使用卻一樣普遍。該屏蔽罩的電機控制器設(shè)計為在 5V至12V 范圍內(nèi)運行。
MOST 1.5-3V電機將無法工作
當(dāng)前要求:
要解決的第二件事是您的電動機需要多少電流。該套件隨附的電機驅(qū)動器芯片旨在為每個電機提供高達1.2 A的電流,峰值電流為3A。請注意,一旦接近2A,您可能會在電機驅(qū)動器上放一個散熱器,否則會出現(xiàn)熱故障,可能燒壞芯片。
您不能運行電機不用9V電池,所以不要浪費時間/電池!
使用大號鉛酸或NiMH電池組。它還非常建議您設(shè)置兩個電源(拆分電源),一個用于Arduino,另一個用于馬達。 99%的“奇怪的電動機問題” ”是由于共享電源和/或電源不足導(dǎo)致電源線上的噪聲!即使是小型直流電動機,它們停轉(zhuǎn)時也可以吸收3安培的電流。
設(shè)置防護罩以為Hobby Servos供電
Servos的電源與Arduino使用的相同穩(wěn)壓5V電源關(guān)閉。 對于建議的小型業(yè)余伺服器來說,這是可以的?;旧?,使用USB端口或DC桶式插孔為Arduino供電,就可以了。如果您想要更強大的功能,請切斷去往可選伺服電源端子的走線,并連接自己的5-6V電源!
設(shè)置用于為直流和步進電動機供電的屏蔽
電動機是通過“高壓電源”供電的,而不是穩(wěn)壓的5V電源。 請勿將電機電源連接至Arduino的5V電源引腳。除非您確定自己知道自己在做什么,否則這是一個非常非常糟糕的主意!您可能會損壞Arduino和/或USB端口!
您可以在兩個地方獲得電動機的“高壓電源”。
一個是DC桶式插孔。
在Arduino板上
是另一個在屏蔽板上的2端子模塊,其標(biāo)簽為 DC Motor Power 5-12VDC 。
Arduino上的DC插孔帶有保護二極管,因此,如果插入錯誤的電源,您將無法搞砸。接線盒具有保護FET,因此,如果向后連接電池電源,則不會損壞arduino/屏蔽罩,但也不會起作用!
這是它的工作方式:
如果您想為Arduino和電機使用單個DC電源
說墻上適配器或具有6-12VDC輸出的單個電池組,只需將其插入Arduino的DC插孔或屏蔽板上的2針電源接線盒即可。將電源跳線放在電動機護罩上。
請注意,如果電池電源無法提供恒定功率,您可能會遇到Arduino重置問題,因此這不是為電機項目供電的建議方法。您不能為此使用9V電池,它必須是4至8節(jié)AA電池或單/雙鉛酸電池組。
如果您要使用USB斷開 Arduino的電源,而要斷開DC電源的電機的電源
這是為電動機項目供電的建議方法,因為它具有分離的電源,一個邏輯電源和一個電動機電源
如果您要 2個用于Arduino和電機的獨立直流電源。
將Arduino的電源插入DC插孔,然后將電機電源連接到電源端子塊。確保已將跳線從電動機護罩上卸下。
無論如何,如果要使用直流電動機/步進系統(tǒng),電動機護罩LED應(yīng)當(dāng)點亮,指示電動機功率良好
使用RC Servos
業(yè)余伺服器是進行電機控制的最簡單方法。它們具有3針0.1英寸母頭連接器,帶+ 5V,接地和信號輸入。電機屏蔽罩將Arduino針腳9和10的PWM輸出線簡單地引出到兩個3針頭連接器,從而易于插入和連接。他們可能會消耗大量功率,因此9V電池的使用時間不會超過幾分鐘!
使用板載PWM的好處是它非常精確,并且可以在后臺運行。您可以使用內(nèi)置的 Servo 庫
使用伺服非常容易,請閱讀Arduino官方文檔以了解如何使用它們,并在IDE中查看示例Servo草圖。/p》
為Servos供電
為Servos供電來自Arduino的板載5V穩(wěn)壓器,直接由Arduino上的USB或DC電源插孔供電。如果您需要外部電源,請在板子底部切割5v走線并連接5V或6V直流電源直接提供給 Opt伺服電源輸入。 高級用戶使用外部電源,因為您可能通過錯誤連接電源而意外損壞伺服器!
使用外部伺服電源時,請注意不要使其與處理器板上的USB插座外殼短路。用一些膠帶將USB插座的頂部絕緣。
使用直流電動機
直流電動機用于各種機器人項目。
電動機護罩最多可雙向驅(qū)動4臺直流電動機。這意味著它們可以向前和向后驅(qū)動。使用高質(zhì)量的內(nèi)置PWM,速度也可以以0.5%的增量變化。這意味著速度非常平穩(wěn),不會變化!
請注意,H橋芯片并不適合驅(qū)動1.2A的連續(xù)負載,因此適用于小型電動機。檢查數(shù)據(jù)表以獲取有關(guān)電機的信息,以驗證其是否正常!
電動機
要連接電動機,只需將兩根導(dǎo)線焊接到端子上,然后將它們連接到M1,M2,M3或M4。然后在您的草圖中按照以下步驟操作
包含所需的庫
請確保您 #include 所需的庫
下載:文件
復(fù)制代碼
#include
#include
#include “utility/Adafruit_MS_PWMServoDriver.h” #include
#include
#include “utility/Adafruit_MS_PWMServoDriver.h”
創(chuàng)建Adafruit_MotorShield對象
下載:文件
復(fù)制代碼
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_MotorShield AFMS = Adafruit_MotorShield();
創(chuàng)建直流電動機對象
從Adafruit_MotorShield請求直流電動機:
下載:文件
復(fù)制代碼
Adafruit_DCMotor *myMotor = AFMS.getMotor(1); Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
和 getMotor(port#)。 端口 #是它連接到的端口。如果您正在使用M1的 1 ,M2使用 2 ,M3使用 3 和M4使用 4
連接到控制器
在您的setup()函數(shù)中,調(diào)用Adafruit_MotorShield對象上的begin():
下載:文件
復(fù)制代碼
AFMS.begin(); AFMS.begin();
設(shè)置默認速度
使用 setSpeed( speed )設(shè)置電動機的速度》 速度 的范圍是從0(停止)到255(全速)。您可以隨時設(shè)置速度。
下載:文件
復(fù)制代碼
myMotor-》setSpeed(150); myMotor-》setSpeed(150);
運行電動機
要運行電動機,請致電運行(方向),其中 方向 是 FORWARD , BACKWARD 或 RELEASE 。當(dāng)然,Arduino實際上并不知道電機是“前進”還是“后退”,因此,如果您想更改其認為前進的方式,只需將電機和屏蔽層的兩根線互換即可。
下載:文件
復(fù)制代碼
myMotor-》run(FORWARD); myMotor-》run(FORWARD);
使用步進電機
步進電機非常適合(半)精確控制,非常適合許多機器人和CNC項目。該電機護罩最多可支持2個步進電機。對于雙極和單極電動機,該庫的工作原理相同。
對于單極電動機:要連接步進電機,首先要弄清楚哪些引腳連接到哪個線圈,以及哪個引腳是中心抽頭。如果它是5線制電動機,則兩個線圈的中心抽頭將為1。在線上有很多關(guān)于如何反向工程線圈引出線的教程。中心抽頭應(yīng)同時連接到電機屏蔽輸出塊的GND端子上。那么線圈1應(yīng)該連接到一個電動機端口(例如M1或M3),線圈2應(yīng)該連接到另一個電動機端口(M2或M4)。
對于雙極型電動機:與單極電動機一樣,除了沒有5號線接地。代碼完全相同。
運行步進器比運行直流電動機要復(fù)雜得多,但仍然很容易
包括所需的庫
請確保您 #include 所需的庫
下載:文件
復(fù)制代碼
#include
#include
#include “utility/Adafruit_PWMServoDriver.h” #include
#include
#include “utility/Adafruit_PWMServoDriver.h”
創(chuàng)建Adafruit_MotorShield對象
下載:文件
復(fù)制代碼
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_MotorShield AFMS = Adafruit_MotorShield();
創(chuàng)建步進電機對象
從 Adafruit_MotorShield 請求步進電機:
下載:文件
復(fù)制代碼
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2); Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);
。.. with cc = 1》。
getStepper(steps, stepper#) ind表示電機每轉(zhuǎn)多少步。 7.5度/步的電動機具有360/7.5 = 48步。
Steps是其連接到的端口。如果您使用的是M1和M2,則其端口為 1 。如果您使用的是M3和M4,請指明端口 2
設(shè)置默認速度
使用Stepper#設(shè)置電動機的速度,其中rpm是您希望步進器每分鐘轉(zhuǎn)多少轉(zhuǎn)。
運行電動機
然后每次您希望電動機運動時,都調(diào)用setSpeed(rpm)程序。 #steps 是您要執(zhí)行的步驟。方向為 FORWARD 或 BACKWARD ,步長類型為 SINGLE , DOUBLE , INTERLEAVE 或 MICROSTEP 。
“單”表示單線圈激活
“雙”表示一次激活2個線圈(以獲得更高的轉(zhuǎn)矩) )
“交錯”表示它在單倍和雙倍之間交替以獲得兩倍的分辨率(但當(dāng)然是速度的一半)。
“微步進”是一種使用線圈的方法
在資源頁面中有大量關(guān)于這些不同步進方法的優(yōu)缺點的信息。
您可以使用任何一種步進方法您可以將其“動態(tài)”更改為所需的最小功率,更大的扭矩或更高的精度。
默認情況下,電機在完成步進后將“保持”位置。如果要釋放所有線圈以使其自由旋轉(zhuǎn),請調(diào)用step(#steps, direction, steptype)
步進命令為“阻塞”,并且在完成步驟后將返回。
因為步進命令為“阻塞” ‘-您每次要移動步進電機時,都必須指示它們。如果您想擁有更多的“后臺任務(wù)”步進器控件,請查看AccelStepper庫(與 Adafruit_MotorShield 的安裝方式類似),其中提供了一些示例,這些示例可同時控制三個步進器并以不同的加速度
Python和CircuitPython
我們?yōu)楦鞣N直流電動機和步進器套件(稱為Adafruit CircuitPython MotorKit)編寫了一個方便的CircuitPython庫,該庫可為您處理所有復(fù)雜的設(shè)置。您需要做的就是從庫中導(dǎo)入適當(dāng)?shù)念?,然后可以使用該類的所有功能。我們將向您展示如何?dǎo)入MotorKit類,并使用它來通過Adafruit Stepper + DC Motor Shield來控制DC和步進電機。
CircuitPython微控制器接線
首先請按照上一頁中的說明完全組裝Shield。無需將屏蔽線連接到地鐵的布線。下面的示例顯示了將兩個直流電動機連接到Shield后,將其連接到Metro的情況。您需要將桶形插孔連接到電源端子,以將適當(dāng)?shù)耐獠侩娫催B接到Shield。 沒有外部電源,Shield將無法運行!
將兩根電動機導(dǎo)線從第一臺電動機連接到 Shield上的M1端子 。
將來自第二個電動機的兩條電動機導(dǎo)線連接到屏蔽罩上的 M2端子。
連接 》將電源端子的正側(cè)連接到桶形插孔的正側(cè)。
將電源端子的負側(cè)連接到桶形千斤頂?shù)呢搨?cè)。
MotorKit和必需庫的CircuitPython安裝
您需要在Metro公豬上安裝一些庫d。
首先請確保您的電路板正在運行最新版本的Adafruit CircuitPython。
接下來,您需要安裝必要的庫以使用硬件-仔細按照以下步驟操作從Adafruit的CircuitPython庫捆綁包中找到并安裝這些庫。我們的CircuitPython入門指南上有一個很棒的頁面,介紹如何安裝庫捆綁包。
如果選擇,您可以在板上單獨手動安裝庫:
adafruit_pca9685
adafruit_bus_device
adafruit_register
adafruit_motor 》
adafruit_motorkit
在繼續(xù)之前,請確保您開發(fā)板的lib文件夾或根文件系統(tǒng)具有 adafruit_pca9685 》 .mpy,adafruit_register,adafruit_motor, adafruit_bus_device 和 adafruit_motorkit 文件和文件夾 已復(fù)制。
Nextconnect到電路板的串行REPL,因此您位于CircuitPython上?!贰贰?提示。
CircuitPython用法
為演示用法,我們將初始化該庫并使用Python代碼控制DC并逐步
首先,您需要導(dǎo)入并初始化MotorKit類。
下載:文件
復(fù)制代碼
from adafruit_motorkit import MotorKit
kit = MotorKit() from adafruit_motorkit import MotorKit
kit = MotorKit()
直流電動機
Shield上的四個電動機點分別為motor1,motor2,motor3和motor4。
在此示例中,我們將使用motor1。
注意:對于像商店出售的小型直流電動機,您可能會遇到電氣噪聲問題,這些問題會在電路板上產(chǎn)生并且行為不穩(wěn)定。如果您看到不穩(wěn)定的行為,例如電機不旋轉(zhuǎn)或在高速電機上板復(fù)位,則可能是問題所在。有關(guān)電容器的信息,請參見此電機指南常見問題頁面,您可以將其焊接到電機上以降低噪聲。
現(xiàn)在要移動電動機,您可以設(shè)置throttle屬性。我們不稱其為速度,因為它與特定的每分鐘轉(zhuǎn)數(shù)(RPM)不相關(guān)。 RPM取決于電動機和未知電壓。
例如,要以全速向前驅(qū)動電動機M1,請將其設(shè)置為1.0:
下載:文件
復(fù)制代碼
kit.motor1.throttle = 1.0 kit.motor1.throttle = 1.0
要以半油門速度向前運行,請使用小數(shù)點:
下載:文件
復(fù)制代碼
kit.motor1.throttle = 0.5 kit.motor1.throttle = 0.5
或使用負向油門反轉(zhuǎn)方向:
下載:文件
復(fù)制代碼
kit.motor1.throttle = -0.5 kit.motor1.throttle = -0.5
您可以使用0的油門來停止電動機:
下載:文件
復(fù)制代碼
kit.motor1.throttle = 0 kit.motor1.throttle = 0
使電動機慣性停車然后自由旋轉(zhuǎn)將油門設(shè)為None。
下載:文件
復(fù)制代碼
kit.motor1.throttle = None kit.motor1.throttle = None
用CircuitPython控制直流電動機!借助直流電動機,您可以構(gòu)建有趣的運動項目,例如機器人或遙控車,它們可以輕松地四處滑動。
步進電機
類似的直流電機,步進電機有stepper1和stepper2。 stepper1由M1和M2端子組成,stepper2由M3和M4端子組成。
在示例中,我們將使用stepper1 。
最基本的功能(也是默認值)是執(zhí)行一個線圈步驟。
下載:文件
復(fù)制代碼
kit.stepper1.onestep() kit.stepper1.onestep()
也可以使用兩個可選的關(guān)鍵字參數(shù)。要使用這些文件,您還需要導(dǎo)入步進器。
下載:文件
復(fù)制代碼
from adafruit_motor import stepper from adafruit_motor import stepper
然后您可以訪問以下選項:
direction,應(yīng)為以下常量值之一:
stepper.FORWARD(默認值)
stepper.BACKWARD。
style,應(yīng)為以下值之一:
stepper.SINGLE(默認值),用于整步旋轉(zhuǎn)到單個線圈通電的位置
stepper.DOUBLE用于整步旋轉(zhuǎn)到兩個線圈通電的位置,以提供更大的扭矩
stepper.INTERLEAVED用于半步旋轉(zhuǎn)交錯單線圈和雙線圈位置和扭矩
stepper.MICROSTEP微步旋轉(zhuǎn)到兩個線圈部分處于活動狀態(tài)的位置。
release() 所有線圈,以便電動機可以自由旋轉(zhuǎn),并且不使用任何功率
該函數(shù)以微步長返回當(dāng)前步長“位置”,方便地了解步進器已移動了多遠,或者您可以忽略結(jié)果。
進行雙線圈后退調(diào)用:
下載:文件
復(fù)制代碼
kit.stepper1.onestep(direction=stepper.BACKWARD, style=stepper.DOUBLE) kit.stepper1.onestep(direction=stepper.BACKWARD, style=stepper.DOUBLE)
您甚至可以使用循環(huán)來連續(xù)調(diào)用onestep并移動步進器,例如向前循環(huán)200個微步以實現(xiàn)平滑移動:
下載:文件
復(fù)制代碼
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上查看
復(fù)制代碼
“”“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上查看
復(fù)制代碼
“”“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()
堆疊盾牌
關(guān)于此屏蔽設(shè)計的一件很酷的事情是可以堆疊屏蔽。堆疊的每個屏蔽層都可以控制另外2個步進器或4個DC電動機(或兩者的混合)。您最多可以堆疊32個罩,總共64個步進器或128個DC電動機!大多數(shù)人可能只會堆疊兩個或三個,但嘿,你永遠不會知道。 (請注意,如果從這些屏蔽板之一驅(qū)動64個步進器,請給我們發(fā)張照片,好嗎?)
請注意,堆疊屏蔽板不會增加伺服連接-這些硬連接至Arduino數(shù)字9和10引腳。如果您需要控制很多伺服器,則可以使用我們的16通道伺服器防護罩并將其與該防護罩堆疊起來,以增加瘋狂的大量伺服器。
堆疊防護罩非常容易。您要堆疊的每個屏蔽必須安裝堆疊頭。查看我們的說明以了解操作方法。除非最終要在頂部屏蔽層上放一些東西,否則頂部屏蔽層不必具有堆疊頭。
堆疊屏蔽層時唯一要注意的是每個屏蔽層都必須具有唯一的I2C地址。默認地址為 0x60 。您可以將屏蔽的地址調(diào)整為從0x60到0x7F的范圍,以獲取總共32個唯一的地址。
尋址盾牌
必須為鏈中的每個板分配一個唯一的地址。這是通過板下邊緣的地址跳線完成的。每塊板的I2C基址為0x60。使用地址跳線編程的二進制地址將添加到基本I2C地址。要編程地址偏移量,請使用一滴焊料橋接地址中每個二進制“ 1”的對應(yīng)地址跳線。
最右邊的跳線是地址位#0,然后到左邊是地址位#1,依此類推,直到地址位#4
面板0:地址= 0x60偏移=二進制0000(無需跳線)《板1:地址= 0x61偏移=二進制0001(如上圖所示的橋A0)
板2:地址= 0x62偏移=二進制0010(A0左側(cè)的橋A1)
板3:地址= 0x63偏移量=二進制0011(橋A0和A1,兩個最右邊的跳線)
板4:地址= 0x64偏移量=二進制0100(橋A2,中間的跳線)等
請注意,地址0x70是屏蔽板上控制器芯片的“全部調(diào)用”地址。所有板都將響應(yīng)地址0x70-不管地址跳線設(shè)置如何。
多個屏蔽的編寫代碼
與較早的AF_Motor庫不同,Adafruit_MotorShield庫具有控制多個屏蔽的功能。首先,我們必須為每個屏蔽創(chuàng)建一個電動機屏蔽控制器,并為其分配地址。
Adafruit_MotorShield AFMSbot(0x61);//最右邊的跳線關(guān)閉
Adafruit_MotorShield AFMStop(0x60);//默認地址,沒有跳線
一個電機屏蔽層將被稱為AFMSbot(底部屏蔽層,因此我們要記?。?,另一個是AFMStop(頂部屏蔽層),這樣我們就可以將它們分開。創(chuàng)建屏蔽對象時,請在上面指定為其設(shè)置的地址。
然后,我們可以請求將電機連接到每個電機上。
//在頂部屏蔽上,連接兩個步進器,每個步進器具有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);
您可以從任何端口請求步進或直流電動機,只需在調(diào)用 getMotor 或 getStepper 時確保使用正確的AFMS控制器對象即可。在使用已連接的電動機之前,必須先調(diào)用開始。
AFMSbot.begin();//啟動底部屏蔽
AFMStop.begin();//啟動頂部屏蔽
您可以通過設(shè)置兩個屏蔽并運行 File-》 Examples-》 Adafruit_MotorShield-》 StackingTest 來親自嘗試此代碼示例
資源
汽車創(chuàng)意和教程
維基百科上有很多有關(guān)步進電機的信息
關(guān)于步進電機類型的瓊斯
Jason涉及對步進電機引線的反向工程
》
PCB文件在GitHub上
示意圖,單擊以進行嵌入
責(zé)任編輯:wv
-
驅(qū)動器
+關(guān)注
關(guān)注
53文章
8271瀏覽量
146841
發(fā)布評論請先 登錄
相關(guān)推薦
評論