使用L298N电机驱动器控制四线步进电机
喺呢個教學入面,我哋會探討點樣用L298N摩打驅動器配合Arduino嚟控制一個4線步進摩打。L298N係一個多功能嘅雙H橋驅動器,等我哋可以有效咁控制步進摩打嘅方向同速度。完成呢個指南之後,你就會有一個功能齊全嘅設置,可以令步進摩打順時針同逆時針轉動,仲可以用可變電阻嚟控制佢嘅速度。


為咗幫你更清楚了解成個過程,我建議你睇吓相關嘅影片,入面有接線同編碼嘅視覺示範(影片喺01:30)。
硬件解釋
L298N摩打驅動器係設計嚟控制摩打,等我哋可以令佢向前同向後轉動。佢用H橋配置,即係話佢可以切換施加喺摩打上嘅電壓極性,從而反轉方向。呢個驅動器可以處理高達46V嘅供電電壓,同埋每通道2A嘅連續電流,適合好多應用場合。
喺我哋嘅設置入面,我哋會用四個控制引腳嚟管理步進摩打。關鍵引腳係ENA同ENB,一定要設為HIGH(5V)嚟啟用驅動器。IN1、IN2、IN3同IN4呢啲引腳會控制摩打嘅繞組狀態,令佢可以向想要嘅方向行一步。
數據手冊細節
| 製造商 | STMicroelectronics |
|---|---|
| 零件編號 | L298N |
| 邏輯/IO電壓 | 5 V |
| 供電電壓 | 5–46 V (VS) |
| 輸出電流(每通道) | 每通道最大2 A(連續) |
| 峰值電流(每通道) | 最大3 A |
| PWM頻率建議 | 1 kHz至20 kHz |
| 輸入邏輯閾值 | 0.8 V(低),2.0 V(高) |
| 電壓降 / RDS(on) / 飽和 | 最大1.5 V |
| 熱限制 | 最高150 °C |
| 封裝 | DIP-15 |
| 備註 / 變體 | 亦有扁平版本(L298P) |
- 確保
ENA同ENB連接到5V,先至可以正常運作。 - 高電流應用要加足夠嘅散熱片,防止過熱。
- Arduino同摩打驅動器之間要保持共同接地。
- 小心接線極性,避免整壞摩打或者驅動器。
- 喺電源引腳附近加去耦電容嚟過濾雜訊。
- 根據摩打規格調整PWM頻率,以達到最佳性能。
接線指示

要將L298N摩打驅動器接到Arduino同步進摩打,首先連接電源。將L298N上嘅VIN引腳連接到你嘅12V電源。跟住,將L298N上嘅GND引腳連接到電源嘅接地,同時都要連接到Arduino嘅接地。
而家,對於控制引腳,將ENA連接到Arduino嘅引腳2,ENB連接到引腳3。跟住,將IN1連接到引腳8,IN2連接到引腳9,IN3連接到引腳10,IN4連接到Arduino嘅引腳11。最後,將步進摩打嘅電線連接到L298N嘅輸出端子。確保摩打嘅兩對電線正確咁連接到輸出。
代碼示例同講解
喺代碼入面,我哋首先包含Stepper.h函式庫,嚟簡化步進摩打嘅控制。我哋定義每轉一圈嘅總步數,呢個對準確移動嚟講好重要。代碼入面嘅關鍵識別符包括stepsPerRevolution,用嚟設定完整轉一圈所需嘅步數,同埋myStepper,用嚟用指定引腳初始化步進物件。
const int stepsPerRevolution = 200; // 改呢個數值嚟配合每轉一圈嘅步數
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // 初始化步進函式庫
呢段摘錄用適當嘅引腳初始化步進摩打。喺setup()函數入面,我哋設定摩打嘅速度,並透過將引腳2同3設為HIGH嚟啟用驅動器。
void setup() {
myStepper.setSpeed(300); // 設定速度為60 rpm
pinMode(2,OUTPUT); // 用於EN1
digitalWrite(2,HIGH); // 啟用EN1
pinMode(3,OUTPUT); // 用於EN2
digitalWrite(3,HIGH); // 啟用EN2
}
喺loop()函數入面,摩打會順時針同逆時針各轉一圈,中間有延遲。咁樣你就可以觀察到摩打嘅運作。
void loop() {
myStepper.step(stepsPerRevolution); // 向一個方向轉一圈
delay(500); // 等半秒
myStepper.step(-stepsPerRevolution); // 向另一個方向轉一圈
delay(500); // 等半秒
}
呢段摘錄示範咗點樣控制摩打向兩個方向轉動。完整代碼會喺文章下面載入,方便你參考。
示範 / 預期效果
一旦所有接線正確並且程式碼已上傳,你應該會見到步進電機向一個方向轉動一整圈,然後再向相反方向轉動一整圈。此外,如果你加入電位器嚟控制速度,調整佢就會改變電機嘅轉動速度。要留意電機嘅電流;當你增加速度時,電機可能會汲取更多電流,如果唔妥善管理嘅話,可能會導致過熱(喺影片 09:45 度)。
如果電機冇按預期轉動,檢查接線,確保所有連接都穩固而且方向正確。同時,確認電源電壓適合你嘅步進電機。
影片時間標記
- 00:00 - 簡介
- 01:30 - 接線講解
- 05:00 - 程式碼概覽
- 09:45 - 電機控制示範
/*
Stepper Motor Control - one revolution
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor should revolve one revolution in one direction, then
one revolution in the other direction.
Created 11 Mar. 2007
Modified 30 Nov. 2009
by Tom Igoe
Modified by Ahmad S. for Robojax.com
on May 19, 2018 at 19:31, in Ajax, Ontario, Canada
*/
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(300);
// initialize the serial port:
Serial.begin(9600);
// L298N for Robojax.com
pinMode(2,OUTPUT);// for EN1
digitalWrite(2,HIGH);// enable EN1
pinMode(3,OUTPUT);// for EN1
digitalWrite(3,HIGH); // enable EN2
}
void loop() {
// step one revolution in one direction:
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
// L298N for Robojax.com
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
/*
Stepper Motor Control - one step at a time
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor will step one step at a time, very slowly. You can use this to
test that you've got the four wires of your stepper wired to the correct
pins. If wired correctly, all steps should be in the same direction.
Use this also to count the number of steps per revolution of your motor,
if you don't know it. Then plug that number into the oneRevolution
example to see if you got it right.
Created 30 Nov. 2009
by Tom Igoe
Modified by Ahmad S. for Robojax.com
on May 19, 2018 at 19:31, in Ajax, Ontario, Canada
*/
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
int stepCount = 0; // number of steps the motor has taken
void setup() {
// initialize the serial port:
Serial.begin(9600);
// L298N for Robojax.com
pinMode(2,OUTPUT);// for EN1
digitalWrite(2,HIGH);// enable EN1
pinMode(3,OUTPUT);// for EN1
digitalWrite(3,HIGH); // enable EN2
}
void loop() {
// step one step:
// L298N for Robojax.com
myStepper.step(-1);
Serial.print("steps:");
Serial.println(stepCount);
stepCount++;
delay(200);
}
你可能需要嘅嘢
-
亞馬遜
-
亞馬遜
資源與參考資料
暫時冇資源。
文件📁
数据表 (pdf)
-
Datashet for L298N Dual H-bridge motor driver
robojax_L298N datasheet.pdf0.18 MB