作者:Bird
前面兩回我們介紹了 L293D 這一顆可以用來驅動一顆雙極性步進馬達的驅動 IC,但 L293D 其實只是個單純的電橋驅動 IC,我們仍然需要利用微控制器或程式來產生 A1-A4 這四個控制電橋動作的控制訊號,才能驅使步進馬達轉動。
雖然已經很方便了,但我們還想再懶一點。有沒有 IC 可以順便一起幫我們產生驅動步進馬達所需要的控制訊號呢?
這一次我們要介紹的步進馬達驅動 IC:A4988,就有這樣的功能。這是一顆功能更強大、更複雜,可以做更多事的步進馬達驅動 IC,它甚至有個特異功能叫做 microstep,可以讓一圈 100 步的步進馬達變成 200 步、400 步、甚至 800 步。
身世 #
A4988 是 Allegro Microsystems 這間半導體公司的產品。Allegro 是一間成立於 1990 年、總部位於美國 New Hampshire 的 NASDAQ 上市公司,它除了供應像 A4988 這一類的馬達驅動 IC 之外,在磁性感應器的技術上也獨步全球,是全世界最大的霍爾磁性感測器供應商,而且在這個半導體產業不斷整併、拆分、上市、下市的二十一世紀中,它一直默默地存在,堅持只做自己擅長的產品,沒有參與任何的商業戰爭,算是相當特別的一家半導體公司。
Allegro Microsystems 的許多產品如霍爾感應器涉及特殊製程,因此他們的產品到目前爲止都是由自己的全資子公司 Polar Semiconductors 在美國明尼蘇達州製造,沒有委外代工。
除了步進馬達的驅動 IC 外,Allegro 更有名的產品其實是無刷馬達(BLDC)的驅動 IC,而且它有一系列可靠度極高、符合車用安全 ASIL-D、ISO 26262 等規格的產品,可用於汽車的電子控制轉向系統、線傳油門、剎車等設計,而且控制無刷馬達所需要的霍爾角度感測器、霍爾電流感測器,Allegro 也都有供應,算是汽車電子零件供應鏈中非常重要的供應商。
而我們要介紹的 A4988 這一顆 IC,大概是 Allegro 最簡單的產品之一!
電路 #
我們先來看一下 A4988 的應用電路。這是它 datasheet 中的範例電路:

(圖片來源:Bird 提供)
圖中右方連接到 OUT1A、OUT1B、OUT2A、OUT2B 的那個符號,就是雙極雙相步進馬達。經過前面幾回對 L293D 的介紹,聰明的讀者應該可以猜到,A4988 裡面也有兩組 H 電橋,OUT1A、OUT1B 應該是一組電橋的輸出,而 OUT2A、OUT2B 則是另外一組電橋的輸出。由於 H 電橋可以改變電流的方向(從 OUT2A 流向 OUT2B,或是從 OUT2B 流向 OUT2A),所以這樣的結構就可以用來驅動雙極雙相步進馬達。
下圖就是 A4988 的 datasheet 中揭露的,關於它內部的驅動電路結構:

(圖片來源:Bird 提供)
很清楚可以看到兩個由 MOSFET 構成的 H-bridge 電橋驅動電路,每組電橋對地的電流都有引出來到 SENSE 接腳上。我們在 SENSE1、SENSE2 接腳上串聯一個很小的電阻到地之後,藉由測量電阻上的壓降,就能估算流過電阻的電流,也就是流過電橋以及馬達線圈的電流,用來做電流的控制。事實上在 A4988 內部就有把 SENSE1、SENSE2 接腳上的電壓拉到前面的控制電路中去測量,用以控制驅動馬達的電流。
控制訊號 #
在 L293D 的應用中,我們要分別用 A1 – A4 四個訊號去控制四個半橋電路的導通與否,來決定步進馬達轉不轉、往哪個方向轉, 但在 A4988 上,這件事情變得更簡單了。
A4988 用來控制馬達旋轉的訊號只有兩個:DIR 跟 STEP。DIR 是一個狀態訊號,決定馬達往哪個方向轉,high 是一個方向,low 則是另外一個方形,而 STEP 是一個觸發訊號,每輸入一個脈波,馬達就走一步,輸入兩個脈波,馬達就走兩步,一直給脈波,馬達就一直轉。
就這麼簡單。
如果你曾經自己用 MCU 寫過步進馬達的控制程式、自己用查表或是演算法產生過讓步進馬達旋轉所需要的波形,第一次看到 A4988 這樣的步進馬達專用控制 IC,一定會對它的簡潔感到非常驚訝。
我們來看一個實際的例子:用 Arduino Uno 來控制 A4988。
我們將 Arduino Uno 的 pin #2 接到 A4988 的 DIR、pin #3 接到 A4988 的 STEP。除此之外,我們再多拉一支腳:將 pin #4 接到 A4988 的 EN,用來控制 A4988 的電橋啓動與否。
簡化過的電路長這樣:

(圖片來源:Bird 提供)
這裡有一個很簡單的 Arduino 程式,可以控制這個電路,讓 A4988 驅動步進馬達用每秒大約 100 步的速度,前進 200 步,然後停住。
程式碼 #
這個程式非常簡單:它將 EN 腳設爲 low,啟動 A4988 的驅動電路,然後將 DIR 腳設爲 high,選定一個旋轉的方向。至於馬達實際上會往哪個方向轉,則跟實際的接線、馬達的腳位有關。
接著,這個程式就在 STEP 接腳上以差不多每秒 100 次的速度送出 200 個寬度是 2us 的脈波。

(圖片來源:Bird 提供)
A4988 能接受的最短 STEP 脈波寬度是 1 us,在實際上的應用中我們很少會送寬度這麼窄的脈波給它。實際上用 Arduino UNO 控制時,如果 ATMega MCU 的頻率是 16MHz, digitalWrite() 大概要花 6 us,因此就算在 high 和 low 之間不加任何 delay 也不會太快,以我們上面的寫法來看,脈波的實際寬度應該會落在 8 us 左右,而 low 那一段的時間也因爲 digitalWrite() 執行所需要的時間,會變成 10 ms + 6 us,也就是 10.006 ns。

(圖片來源:Bird 提供)
因此真正的脈波週期會是 10 ms + 2 us + 6 us + 6 us = 10.014 ms,而頻率就是 1000 / 10.014 = 99.86 Hz,也就是說,這個程式會讓馬達以每秒 99.86 步的速度,旋轉 200 步,所以差不多它旋轉 2 秒就會停下來。
小結 #
這一回我們簡單介紹了 Allegro Microsystem 的步進馬達驅動 IC A4988,並利用 Arduino UNO 來控制它,做了一個很簡單的示範。
下一回我們要繼續探討 A4988 其它許多強大的功能。
(責任編輯:賴佩萱)