網頁

基於GRBL的CNC之A4988步進馬達驅動器篇



A4988 是一顆有轉換器、溫度與短路或過載保護的步進馬達驅動器,最高微步距可以劃分達1/16,同時外部電壓最大可達35V,電流約±2A,不過這個參數是A4988晶片的一個數據,實際上使用的模組大概都建議最高在1~1.5A就好。它的好處是只要輸入正逆轉方向、輸出的步距就可以,不需要在控制器上面做複雜的相位控制,可以大大的減少應用上的困難。同時它上面有一顆可變電阻,可以用於調整最大輸出電流,所以用在像光碟機那種小型的步進馬達也是沒問題的。

如果要"深入"的了解A4988這顆晶片還是最好去詳讀它的DATASHEET,不過我看到現在還是有些地方看不太懂,雖然以應用上來講只要會調整電流大小以及微步劃分就夠了。

接著我依序介紹A4988每一支腳的用途,以及電流的調整、微步劃分與如何控制,可以搭配下面這張圖來看。


圖片來源:https://a.pololu-files.com/picture/0J3360.1200.png?d94ef1356fab28463db67ff0619afadf

ENABLE:
這支腳是控制晶片內部的DMOS輸出,一旦輸出HIGH的時候會關閉輸出,也就是馬達關閉的意思,這支腳會連接到Arduino的D8腳上,也就是Stepper Enable/Disable的腳位,當輸入移動指令時這支腳位會輸出LOW,開啟A4988的輸出以帶動馬達。在GRBL Shield板子上這支腳有一顆上拉電阻10k連接到5V,確保平時馬達是關閉的,必須要控制器輸出LOW(D8腳)的時候馬達才會啟動。



如果想要保持馬達是開啟的狀態,可以將Shield板左上角的EN/GND腳插一根短路pin,這樣就可以讓A4988晶片無時無刻保持制動的狀態了。



MS1~3:
這幾支腳是用於控制微步的,在手冊上有清楚的寫到不同的排序會有不一樣的微步劃分,在Shield板上平常是空接的(LOW),而短路pin插入後就會連接到5V,等於HIGH的意思,一般都是全插下去取得最高的精度劃分1/16。


圖片來源:https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf

每一軸的控制板都有3組腳位供選擇。


RESET:
這支腳位顧名思義就是讓晶片RESET的,在A4988的電路板上有一顆100k的上拉電阻,因此平常是保持HIGH的狀態,而從上面的圖可以看到這支腳平常與SLEEP腳短路再一起,因為當SLEEP腳為HIGH時晶片進入正常工作模式,當LOW時為睡眠模式。但是平常都是使用ENABLE腳控制馬達開關,因此這支腳自然而然就被鎖在HIGH的狀態了。至於SLEEP跟ENABLE腳的差別,我在下面解釋一下(大概的理解,因為詳細的還不是很理解)。

SLEEP:
這支腳是用於控制晶片進入睡眠模式,但一般都與RESET共用上拉電阻保持HIGH的模式。在手冊中說到睡眠模式是最大限度地減少馬達不使用時的功耗(To minimize power consumption when the motor is not in use),同時關閉FETs、電流調節器與電荷泵(這個我不太知道甚麼意思,只知道好像是幫助用於驅動FET用的)。
竟然這麼省電,那為什麼不用SLEEP腳取代ENABLE腳?
我在說明書上看到當SLEEP從LOW變HIGH時(甦醒),步進馬達會回到Home microstep position,這個意思我們可以看到手冊中驅動時的一個時序圖,當4個時序(脈波)跑完時會完成一組循環,也就是當沒有微步劃分時每四格會回到一次Home microstep position,但是當我們機器在運作的時候我們當然不希望重新啟動後相位又回到Home microstep position,假如我們是在下圖3的時序進入睡眠模式,結果喚醒後又回到1,這樣機器的位置就會跑掉了,但ENABLE腳位就不會有這個問題,它只是關閉FET的輸出,當喚醒時一樣會保持上次的位置,這才是我們要的狀態。


圖片來源:https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf

STEP:
這個腳位是控制步進馬達旋轉角度使用的,什麼時序、相位、電流大小等等的問題,控制板都已經幫我們搞定了。只要比照上面那張圖我們就能知道輸出幾個脈波會旋轉幾度即可。

DIR:
這支腳是用於控制旋轉方向的,不是LOW就是HIGH,用於控制正逆轉。

VMOT:
這是用於外部電源的正電使用,輸出範圍為8~35V。在板子上有接一顆100uF的電容穩壓。

GND:
外部電源接地腳。

2B2A1B1A:
連接步進馬達的腳位,四線式的步進馬達用電阻檔量測有導通的兩支腳接在同樣的號碼上(例如2B2A兩支是有導通的,可以看最上面的圖)。

VDD:
A4988使用的晶片電源,範圍為3.3~5V。

GND:
訊號電源接地腳。


接著我們要介紹一下A4988是如何調整電流的,當初入門3D印表機的時候是讀這篇文章調整4988步進馬達驅動板電流上限。一般大家的建議是驅動器的最大電流最好限制在步進馬達標註電流的0.7~0.8倍。

關於步進馬達電流的迷思,其實不用一定要調整到該參數的電壓,基本上調整最大電流到能夠驅動、不失步就可以了,因為硬要用到最大電流有時候只是讓A4988的晶片負荷加重,尤其是1A以上的電流時晶片最好除了散熱片還要外掛風扇,不然很容易就燒掉。如果說調整到最大的電流但還是會失步,那就要檢查一下是不是機構的部分有卡住,或是負荷實在太重,這樣就要考慮更大顆的馬達或是更高電流的驅動器了(記得兩個要匹配不要差太多)。

在A4988晶片的手冊上設定的最大工作電流為:
ITripMAX = VREF /(8×RS)

RS是晶片旁的參考電阻,位置大概會接近在連接步進馬達的4根pin附近,會有兩顆一樣的數字。因為生產A4988電路板的很多,因此一定要看好自己電路板的參考電阻RS是多少,不然看錯了電流算起來會差非常的多,外面有0.2、0.1、0.05歐姆不等的數字,像我的板子是R100電阻,也就是0.1歐姆的意思。




其中VREF是晶片讀取的參考電壓,而參考電壓是利用一顆電阻+一顆可變電阻透過分壓達成的。而這個數字每一家廠商所生產的也會有不一樣的電阻,以我的板子來說固定電阻是30kΩ,可變電阻為10kΩ,以下我來介紹一下怎麼計算。



以下我把可變電阻的電阻稱為VR而電阻為R0,透過分壓定律我們可以知道。
VREF=Vi * (VR / VR+R0)

因此我們可以知道VREF介於0~1.25之間(下圖),這是因為固定電阻把分壓的上限給鎖定了,有些廠商會故意設計的高一些,避免轉到太大使得電流讓晶片負荷不了。




而板子的VREF上限在搭配上面的公式1.25/(8*0.1)=1.5625A,就可以得到我這塊板子的電流上限。

也因此我們不一定要在上電的情況下調整參考電壓,可以用歐姆檔在斷電的情況下量測可變電阻的左下角與金屬上蓋(旋轉的部分,被我轉斷了....),這樣就可以知道目前的VR電阻為多少,搭配固定電阻就可以算出分壓VREF
而可變電阻在旋轉時順時針旋轉電阻會增加,逆時針則減少。但要注意的是當平口旋轉到上方時,繼續往順時針旋轉電阻會重新由小變大,會有一小段是沒有電阻的(斷路),可以看我上面那張外蓋噴掉的板子就知道為甚麼了。



不過簡單的方法還是直接量測參考電壓比較快,直接用電錶的電壓檔負極接GND正極接可變電阻的金屬上蓋就好,記住量測的時候要小心不要短路了喔。以下圖以0.976的VREF來說電流就1.22A左右。



知道了A4988的調整之後就不用瞎子摸象的調整自己的機器了,之前都不會調整還讓馬達跟晶片過熱停掉,如果因為這樣還燒晶片真的是得不償失。最後要記得A4988插上GRBL Shield或RAMPS板子時要弄好方向,我就有一次插錯一口氣燒3片A4988晶片,很痛啊。

--------------------
這裡補充DRV8825的電流調整(其它腳位都跟A4988差不多,能相容)
ITripMAX = VREF /(5×RS)

而有些廠商的Rs為0.1歐姆,所以精簡公式之後。
ITripMAX = VREF*2