---
title: 步進馬達的原理與驅動—PART5
description: "**作者：Bird** 前面兩回我們介紹了 L293D 這一顆可以用來驅動一顆雙…"
url: "https://makerpro.cc/docs/principles-and-drive-of-stepper-motor-part5/"
updated: "2025-04-01"
category: 步進馬達
---

# 步進馬達的原理與驅動—PART5

**作者：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 中的範例電路：

 ![](https://makerpro.cc/wp-content/uploads/2024/01/1-4.png)

（圖片來源：Bird 提供）

圖中右方連接到 OUT1A、OUT1B、OUT2A、OUT2B 的那個符號，就是雙極雙相步進馬達。經過前面幾回對 L293D 的介紹，聰明的讀者應該可以猜到，A4988 裡面也有兩組 H 電橋，OUT1A、OUT1B 應該是一組電橋的輸出，而 OUT2A、OUT2B 則是另外一組電橋的輸出。由於 H 電橋可以改變電流的方向（從 OUT2A 流向 OUT2B，或是從 OUT2B 流向 OUT2A），所以這樣的結構就可以用來驅動雙極雙相步進馬達。

下圖就是 A4988 的 datasheet 中揭露的，關於它內部的驅動電路結構：

 ![](https://makerpro.cc/wp-content/uploads/2024/01/2-4.png)

（圖片來源：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 的電橋啓動與否。

簡化過的電路長這樣：

 ![](https://makerpro.cc/wp-content/uploads/2024/01/3-3.png)

（圖片來源：Bird 提供）

這裡有一個很簡單的 Arduino 程式，可以控制這個電路，讓 A4988 驅動步進馬達用每秒大約 100 步的速度，前進 200 步，然後停住。

### 程式碼

 // Pin definition const DIR = 2; const STEP = 3; const EN = 4; void setup() { pinMode(DIR, OUTPUT); pinMode(STEP, OUTPUT); pinMode(EN, OUTPUT); } void loop() { digitalWrite(EN, LOW); // enable A4988 driver digitalWrite(DIR, HIGH); // set rotation direction int i; for(i=0; i<200; i++) { digitalWrite(STEP, HIGH); // start pulse delayMicroseconds(2); // pulse width ~ 2us digitalWrite(STEP, LOW); // complete 1 pulse. delay(10); } while(1); // stop here }

這個程式非常簡單：它將 EN 腳設爲 low，啟動 A4988 的驅動電路，然後將 DIR 腳設爲 high，選定一個旋轉的方向。至於馬達實際上會往哪個方向轉，則跟實際的接線、馬達的腳位有關。

接著，這個程式就在 STEP 接腳上以差不多每秒 100 次的速度送出 200 個寬度是 2us 的脈波。

 ![](https://makerpro.cc/wp-content/uploads/2024/01/4-3.png)

（圖片來源：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。

 ![](https://makerpro.cc/wp-content/uploads/2024/01/5-3.png)

（圖片來源：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 其它許多強大的功能。

（責任編輯：賴佩萱）
