Learning Objectives
- 說明直流馬達怎麼反轉與調速,讀懂 H 橋驅動板的 IN1、IN2、EN
- 用 50 Hz 的 PWM 脈波寬度控制伺服馬達的角度
- 照相位順序讓步進馬達的線圈通電,比較全步與半步
- 依需求選擇合適的馬達
讓作品動起來
自走車要前進後退、機械手臂要轉到某個角度、印表機的噴頭要一格一格精準移動:這三件事剛好對應三種最常用的馬達。
| 直流馬達 | 伺服馬達 | 步進馬達 | |
|---|---|---|---|
| 控制什麼 | 轉速與方向 | 角度(常見 0~180°) | 一次轉固定的角度(一步) |
| 怎麼控制 | 電壓(PWM)與正負極 | 50 Hz 脈波的寬度 | 依順序讓線圈通電 |
| 知道自己在哪嗎 | 不知道 | 知道(內部有位置感測器) | 不知道,靠「數步數」 |
| 常見用途 | 輪子、風扇、幫浦 | 舵、夾爪、轉向 | 印表機、雕刻機、轉盤 |
上一課學過:馬達需要的電流遠超過 GPIO 能提供的,而且是會產生反向電壓的線圈。所以三種馬達都要經過驅動電路, 而且最好用獨立的電源(例如電池盒),再和開發板共地。馬達啟動時電流很大,和開發板共用電源容易讓電壓下降、開發板重新開機。
直流馬達與 H 橋
直流馬達的兩條線接上電源就會轉;正負極對調,就反轉;電壓越高轉得越快。
用一個電晶體只能控制「轉或不轉」。要能反轉,需要四個開關排成 H 字形的 H 橋(H-bridge):
+V ──┬────────────┬──
S1 S2
├──( 馬達 )──┤
S3 S4
GND ──┴────────────┴──
S1 與 S4 導通,電流從左往右流過馬達;S2 與 S3 導通,電流反過來。絕對不能讓同一邊的上下兩個開關同時導通(S1 與 S3), 那會讓電源直接短路到地。市售的驅動板(例如 L298N、TB6612FNG 模組)把 H 橋與保護電路做好了,用三支腳控制:
| IN1 | IN2 | EN(PWM) | 結果 |
|---|---|---|---|
| 1 | 0 | 大於 0 | 正轉,轉速看工作週期 |
| 0 | 1 | 大於 0 | 反轉 |
| 相同 | 相同 | 大於 0 | 煞車:馬達兩端接在一起,很快停下 |
| 任意 | 任意 | 0 | 滑行:四個開關都斷開,慢慢停下 |
煞車與滑行的細節依驅動晶片而不同,以規格書為準。
逐步看:正轉、調速、煞車、反轉
驅動板的 IN1、IN2 接 GPIO26、27,EN 接 GPIO25(PWM)。電路畫面上「直流馬達」卡片的數字是轉速比例,負數代表反轉。
伺服馬達:脈波寬度決定角度
伺服馬達(servo)裡面有小馬達、減速齒輪、一個量角度的位置感測器(通常是可變電阻)和控制電路。 它一直比較「現在的角度」與「被要求的角度」,自己修正,這叫閉迴路控制:放開之後就停在那個角度,有外力推它也會頂回去。
控制線上送的是 PWM:頻率 50 Hz(週期 20 ms),高電位的寬度決定角度。常見規格是 1 ms 到 2 ms(1.5 ms 是中間), 很多小型伺服接受更寬的範圍;Uedu 的模擬器用 0.5 ms 對應 0°、2.5 ms 對應 180°。實際範圍看規格,超出範圍可能讓伺服頂到極限、發熱。
from machine import Pin, PWM
servo = PWM(Pin(18), freq=50)
def set_angle(deg):
us = 500 + deg / 180 * 2000 # 0°=500 微秒,180°=2500 微秒
servo.duty_ns(int(us * 1000)) # duty_ns:高電位維持幾奈秒
伺服有三條線:電源(常見 5V)、GND、訊號。多顆伺服同時動作時電流不小,要用獨立的電源。 另外有一種連續旋轉伺服,脈波寬度控制的是轉速與方向,不是角度。
步進馬達:照順序讓線圈通電
步進馬達裡面有好幾組線圈圍著一個磁鐵轉子。讓某一組線圈通電,轉子就被吸過去對齊; 照順序換下一組線圈通電,轉子就跟著轉一小格,這一格叫一步。送幾步就轉幾格,不需要感測器也知道轉了多少, 但如果負載太重、轉得太快,轉子跟不上就會失步,程式卻不知道。
入門常見的 28BYJ-48 有四組線圈(A、B、C、D),搭配 ULN2003 驅動板(裡面是電晶體陣列與續流二極體)。三種通電順序:
| 模式 | 順序 | 特色 |
|---|---|---|
| 單相全步 | A → B → C → D | 一次一組線圈,最省電,力量較小 |
| 雙相全步 | AB → BC → CD → DA | 一次兩組,力量較大 |
| 半步 | A → AB → B → BC → C → CD → D → DA | 每步只轉一半的角度,比較細、比較順 |
28BYJ-48 內部有減速齒輪,規格是輸出軸轉一圈約 2048 個全步、4096 個半步(實際齒輪比略有差異,要精準定位時需要校正)。 順序反過來送,馬達就反轉;順序錯了(例如 A → C → B),轉子會抖動或不轉。
下面先用 LED 看半步的順序,再到馬達實驗室親手操作三種馬達。
逐步看:半步順序
四顆 LED 代表 28BYJ-48 的四組線圈(模擬器沒有步進馬達零件,用 LED 看哪幾組通電)。 程式照半步的順序送 8 步,看亮燈的組合怎麼「一組、兩組」交替往前移。
小測驗:直流與伺服
H 橋驅動板上 IN1=0、IN2=1、EN 是 100% 的 PWM,馬達會怎樣?
下面的程式會印出什麼?
def pulse_us(deg):
return 500 + deg / 180 * 2000
print(pulse_us(0), pulse_us(90), pulse_us(180))
伺服馬達放開之後還會停在原本的角度,被輕輕推動也會轉回來,原因是什麼?
小測驗:步進馬達
28BYJ-48 依規格半步模式轉一圈是 4096 步。下面的程式會印出什麼?
steps_per_rev = 4096
deg = 90
print(steps_per_rev * deg // 360)
單相全步原本照 A → B → C → D 的順序會正轉,改成 D → C → B → A 會怎樣?
想做一個每次精準轉 15° 的展示轉盤,不想加角度感測器,最適合哪一種馬達?
重點整理
- 直流馬達:電壓決定轉速(用 PWM 調整),正負極對調就反轉;用 H 橋驅動板的 IN1、IN2 控制方向、EN 控制速度。
- 伺服馬達:50 Hz 的 PWM,高電位的寬度決定角度;內部有位置感測器,是閉迴路控制。
- 步進馬達:照順序讓線圈通電,一次轉固定的一步;半步更細,順序反過來就反轉;沒有回授,負載太重會失步。
- 三種馬達都要經過驅動電路,用獨立電源並和開發板共地。
下一課介紹開發板和模組之間怎麼「說話」:UART、I2C、SPI 三種序列通訊。