Arduino PWM 控制馬達教學:搭配 L298N 馬達驅動板
PWM(Pulse Width Modulation,脈寬調變)是控制直流馬達速度的常用方法。 搭配 L298N 馬達驅動板,Arduino 可以同時控制馬達的方向與速度,非常適合機器人或自動化專案。
一、PWM 與馬達控制概念
PWM 控制速度
- PWM 是透過改變訊號的「高電位佔比(Duty Cycle)」來控制平均電壓。
- 範例:
- Duty Cycle 100% → 馬達全速轉
- Duty Cycle 50% → 馬達半速轉
- Duty Cycle 0% → 馬達停止
高電位時間 ↑
低電位時間 ↓
Duty Cycle = 高電位 / (高電位 + 低電位)
L298N 功能
- L298N 是雙 H 橋馬達驅動板,可控制 直流馬達方向 和 速度。
- 透過 Arduino 的 PWM 腳控制 EN(Enable)腳,調整速度;透過 IN1 / IN2 腳控制方向。
二、硬體接線示意
假設控制一個 DC 馬達:
| L298N 腳位 | 連接 Arduino | 功能 |
|---|---|---|
| IN1 | D2 | 方向控制 1 |
| IN2 | D3 | 方向控制 2 |
| ENA | D5 (PWM) | 馬達速度控制 |
| 12V / GND | 外部電源 | 馬達供電 |
| GND | Arduino GND | 共地 |
注意:
- L298N 馬達電源應與 Arduino 供電分開(馬達可能需要 6~12V)
- 共地一定要連好,避免控制訊號不穩
三、Arduino PWM 控制程式範例
控制單個馬達方向與速度
// 腳位設定
int enA = 5; // PWM 控制速度
int in1 = 2; // 方向腳位
int in2 = 3;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
}
// 前進函式
void motorForward(int speed) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, speed); // 0~255
}
// 後退函式
void motorBackward(int speed) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, speed);
}
void loop() {
motorForward(200); // 前進
delay(2000);
motorBackward(150); // 後退
delay(2000);
analogWrite(enA, 0); // 停止
delay(1000);
}
程式解析
analogWrite(enA, speed)→ 用 PWM 控制 ENA 腳電壓,改變馬達速度(0~255)digitalWrite(in1/in2)→ 控制 H 橋輸出方向,高/低組合決定前進或後退
| IN1 | IN2 | 馬達方向 |
|---|---|---|
| HIGH | LOW | 前進 |
| LOW | HIGH | 後退 |
| LOW | LOW | 停止 |
| HIGH | HIGH | 停止 / 急剎 |
四、多馬達控制
L298N 有 兩組輸出(OUT1/OUT2、OUT3/OUT4),可同時控制兩個 DC 馬達。 對應腳位可用:
| 馬達 | EN | IN1 | IN2 |
|---|---|---|---|
| M1 | ENA | IN1 | IN2 |
| M2 | ENB | IN3 | IN4 |
程式邏輯與單馬達相同,只需對應 ENB 與 IN3/IN4 腳位。
五、注意事項
- 電源供應
- 馬達可能瞬間拉高電流,建議外接穩定電源。
- Arduino 本身 5V 腳位不足以直接供電給馬達。
- 散熱
- L298N 會發熱,尤其在大電流運行下,需加散熱片或風扇。
- PWM 頻率
- Arduino Uno PWM 頻率約 490 Hz(腳 5,6 ~ 490Hz,腳 3,9,10,11 ~ 980Hz)
- 高頻 PWM 可以減少馬達噪音
六、延伸應用
- 機器人底盤控制(差速驅動)
- 自動化輸送帶速度調節
- 電動小車與車模專案
