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功能
IN1D2方向控制 1
IN2D3方向控制 2
ENAD5 (PWM)馬達速度控制
12V / GND外部電源馬達供電
GNDArduino 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 橋輸出方向,高/低組合決定前進或後退
IN1IN2馬達方向
HIGHLOW前進
LOWHIGH後退
LOWLOW停止
HIGHHIGH停止 / 急剎

四、多馬達控制

L298N 有 兩組輸出(OUT1/OUT2、OUT3/OUT4),可同時控制兩個 DC 馬達。 對應腳位可用:

馬達ENIN1IN2
M1ENAIN1IN2
M2ENBIN3IN4

程式邏輯與單馬達相同,只需對應 ENB 與 IN3/IN4 腳位。


五、注意事項

  1. 電源供應
    • 馬達可能瞬間拉高電流,建議外接穩定電源。
    • Arduino 本身 5V 腳位不足以直接供電給馬達。
  2. 散熱
    • L298N 會發熱,尤其在大電流運行下,需加散熱片或風扇。
  3. PWM 頻率
    • Arduino Uno PWM 頻率約 490 Hz(腳 5,6 ~ 490Hz,腳 3,9,10,11 ~ 980Hz)
    • 高頻 PWM 可以減少馬達噪音

六、延伸應用

  • 機器人底盤控制(差速驅動)
  • 自動化輸送帶速度調節
  • 電動小車與車模專案

Similar Posts