NTP 時鐘結束,micromouse 專案隨即開始。(早就開始了,只是到現在才分享第一篇)
其實我一開始是想做 Maker 版的 Zenbo,不過後來跟 Bird 討論的結果被打槍了,聽說是再戰個十年或許才有機會… (但我也沒放棄!我好想試試!) 總之,目前結論是先將專案的方向往 micromouse 發展 (micromouse 也是個不簡單的專案),以下連結供大家參考:什麼是 micromouse?
不管是 micromouse 還是 Maker 版的 Zenbo,我都要使用步進馬達作為移動的媒介,那就會連帶帶出 CNC shield 以及 A4988 這顆 stepping motor driver。(因為本篇我猜會很長,廢話不多說直接進入正題吧)
步進馬達 (stepping motor)
網路上對於步進馬達有諸多的說法,像是 step motor, stepper motor 等等,個人喜歡 stepping motor。
而步進馬達又分成許多種類,其中有 “相” 數 (有 2, 3, 5 相) 和接線 (導線 4, 5, 6 條) 數量的差別,有 2 相四線式,2 相六線式,也有 3 相三線式,甚至 5 相五線式。(相數即代表有多少組線圈,相數越多,基本步進腳就會越小,而我使用的步進馬達為 2 相四線式,基本步進角為 1.8 度 <即一步是為 1.8 度,所以 200 步 (360 度) 為一圈>)
而 2 相四線式和 2 相六線式最大的不同就在於導線數量,2 相四線為雙極馬達,也就是說電流會有兩個方向 (即依順序產生不同的極性),而 2 相六線為單極馬達 (電流只會有單一方向)。
步進馬達的原理就是對馬達的線圈通電流 (是為『激磁』),然後切換通電的順序,產生不同方向的磁性,使得馬達中的永久磁鐵會因為電流產生相對應的不同極性而有轉動的結果。以我所使用的 2 相四線馬達為例:
激磁方式 (A+, A-, B+, B-) :
1. A+ 通電,A- 為出口 (A+ 為正極,A- 為負極)
2. B+ 通電,B- 為出口 (B+ 為正極,B- 為負極)
3. A- 通電,A+ 為出口 (A- 為正極,A+ 為負極)
4. B- 通電,B+ 為出口 (B- 為正極,B+ 為負極)
而使用步進馬達最主要的原因就是因為它非常非常地準確,記得在 瓦力號系列文章 中有提到伺服馬達的壞處,PWM 即使兩邊馬達參數設定相同,仍然無法走直線 (解決方式詳見文章不多贅述),而步進馬達由於是利用 “度” 來計算 “步數”,所以並不會有伺服馬達的先天缺陷。
參考資料:控制四線步進馬達
CNC shield & A4988
簡單的介紹了步進馬達的原理,和我所使用的種類後 (其實我個人覺得以上滿無聊的,大家可能對於接下來可能會爆炸或是燒掉的東西比較感興趣),接著就是要來分享那些讓步進馬達可以動起來的 component。
CNC shield 簡單來說是一個 Arduino UNO 的擴充板,其上並沒有太多的主動元件,上面有四個插槽 (sockets),分別可以裝上步進馬達驅動器 (即 stepping motor driver,也就是這裡提到的 A4988 <另一個 DRV8825 也是常見的 stepping motor driver,功能上並沒有差太多,只是可變電位器 (trimpot) 所在的方向和 A4988 不同,需要特別注意 (至於為什麼等等會說明),兩個 driver 可以混用>)
而剛才提到 CNC shield 上方的四個插槽分別是控制 X, Y, Z 軸外加一個 A 軸的步進馬達。之所以這樣設計其實是因為 CNC shield 通常都是被拿來用在 3D printers 做精確的馬達控制,X, Y, Z 軸很明顯的就是控制馬達的三維方向,至於 A 軸就是用來處理塑料 (eg. ABS) 的。
也因為 CNC shield 多半用在 3D printers,所以網路上能找到的資料幾乎通通指向 3D printers 的應用,因此我要來寫寫 CNC shield 如果用在這種車子的專案上,會是怎麼樣的表現。
在談 CNC shield 之前先來講講如果不用 CNC shield 作媒介 A4988 是如何有效驅動步進馬達的。
(小弟我看了好幾份文件,這張圖示真的畫的非常非常清楚)
上圖可以清楚的看到,有四根 pin 腳會連接到 MCU (即 Arduino UNO 或是其他的開發版,我個人是用 UNO),兩根 Digital pin (圖上分別是 pin 3 和 pin 4) 控制單顆步進馬達的 “方向 (正轉逆轉)" 和 “步 (用 HIGH LOW 一個狀態改變,即一個 pulse 作為一步,下一篇文章分享會做說明) (還有關於 microstep 的使用)",另外兩根分別為 VCC (MCU 給 A4988 5V 供電) 和 GND。
再來是供給給馬達的電源,8-35V (我用的 2 相四線步進馬達是吃 12V),電池正極從 A4988 VMOT pin 腳進來。
MS1, MS2, MS3, 是做微步控制的 pin 腳,雖然我用不到但還是可以分享一下:
(這個 HIGH LOW 如果用 CNC shield 會更方便,連 code 都不用寫)
ENABLE pin 很重要,logic LOW 使 A4988 有效。
SLEEP 和 RESET 不是在此不是重點,只說明確保他們都在 logic HIGH 即可。
最後就是最重要的步進馬達,2 相四線有四根導線,從 Bird 那裡獲得的步進馬達跟市面上的教學文件所說的導線顏色 (紅綠一組 <1A1B> 黃藍一組 <2A2B>) 都不一樣,我的長這樣:
(我的步進馬達導線是兩紅兩黃,網路也找不到何為一組的資訊)
所以 Bird 就告訴了我一個方法,用電源供應器去試試看到底是兩紅一組還是一紅一黃一組。
測試的結果發現是一紅一黃一組,而且測試的過程中很有趣,如果接線先把 VCC 接在紅線 GND 接在黃線,通電,步進馬達會稍微動了一下 (其實就是一步,也就是 1.8 度),所以照上面講的原理,我下一個就應該要讓另外一隻紅線接 VCC,另外一隻黃線接 GND,果然又動了一下。
再來就是把第一次接的紅線接到 GND,第一次接的黃線接到 VCC (我只是照著原理做,沒有很複雜),當然結果又動了一下。以上實驗我得知我的接線照 A4988 datasheet 的規定,第一次的紅線為 2B (or 1B),第一次的黃線為 2A (or 1A),第二次的接線以此類推,就會完成如上圖的接線了 (<紅黃><黃紅>上圖由上到下)。
p.s 上圖可以看到有個金屬片被黏在 A4988 的上方,那是用來散熱的!
參考資料:How To Control a Stepper Motor with A4988 Driver and Arduino
之所以要先講完單獨使用 A4988 的狀況,就是因為要對比出如果使用了 CNC shield 這個擴充板,麻煩直接省一大半!
剛剛漏漏長的解釋直接利用一顆 CNC shield 插上 UNO 後再把 A4988 插到對應的插槽就解決 (好拉也是沒有這麼誇張),但切記!A4988 如果插反!絕對會看到驚人的爆炸畫面!記得 CNC shield 上方有標示 “EN" 的 label,請將 A4988 的 ENABLE pin 對上此 EN,確定對到後在狠狠地插下去 (還好小弟沒有炸掉它,但燒了一堆板子…這個之後分享…)
上面的 pin 腳解釋就是 CNC shield 擴充板對應的 pin 腳功能,也就是說 CNC shield 完美地把 A4988 和 MCU 整合起來,不用考慮一堆有的沒的東西,在 code 裡面設定這些 pin 腳 A4988 就可以 work 成功驅動馬達了!(只有我很興奮嗎!)
而我只需要兩個軸 (X, Y) 因為我的 micromouse 只有兩個輪子。
各個 CNC shield 對應的 pin 腳功能我就不一一介紹,畢竟很多 pin 腳我其實用不到 (沒辦法,人家是設計給 3D printers 用的,我有點大材小用沒錯),而下一篇文章的分享中,會提到我用了哪些 pin 並且分享軟體面實際是如何操作的。
其實我想把原理和應用,雙管齊下一併分享,但後來發現真的會太長 (應該會長到嚇死人…) 所以還是得分成兩篇的篇幅做敘述。
而目前的專案進度我正在嘗試讓車子利用超聲波不斷校正做避障,完美的貼著牆壁走。不說不知道,看起來步進馬達用 “步” (角度) 的精準度非常夠,應該不需要校正?
的確,在不考慮其他現實因素的情況下,他絕對走直線,但 real world 的狀況會有一堆有的沒的因素導致不是那麼理想的結果,像是最常見的摩擦力就是個大重點。
最後就用一張現在 micromouse 專案的照片吊吊胃口吧!
引用通告: Micromouse – – 自造者萊恩
引用通告: Micromouse – ISR 怎麼寫? (二) – 自造者萊恩
文章和排版都很詳細美觀
讚讚
謝謝喔!難得有人來回覆xd 我會持續更新在做的東西的!歡迎常來哈
讚讚
超音波的單位只有到公分,所以當持續移動可能就會有累積誤差的問題,
比步進的機率要來得高吧…?
讚讚
請教, ARDUINO+A4988有辦法控制5線的步進馬達嗎? 如何接線? 程式如何寫? 網路查的大多是4 線!
讚讚
請教. A4988可以控制5線式的步進馬達嗎?
讚讚
讚!
讚讚