Utilizarea unui driver de motor L298N pentru a controla un motor pas cu pas cu 4 fire
În acest tutorial, vom explora cum să controlăm un motor pas cu pas cu 4 fire folosind driverul de motor L298N împreună cu un Arduino. L298N este un driver dual cu punte H versatil care ne permite să controlăm eficient direcția și viteza motoarelor pas cu pas. Până la sfârșitul acestui ghid, vei avea o configurație funcțională care poate roti motorul pas cu pas în ambele direcții și să-i controlezi viteza folosind un potențiometru.


Pentru a te ajuta să înțelegi mai bine procesul, recomand să urmărești videoclipul asociat, care oferă o demonstrație vizuală a cablajului și a codului (în videoclip la 01:30).
Hardware Explicat
Driverul de motor L298N este proiectat pentru a controla motoarele permițându-ți să le conduci atât în direcție înainte, cât și înapoi. Folosește o configurație cu punte H, ceea ce înseamnă că poate comuta polaritatea tensiunii aplicate motorului, inversând astfel direcția acestuia. Acest driver poate gestiona o tensiune de alimentare de până la 46V și un curent continuu de 2A pe canal, făcându-l potrivit pentru multe aplicații.
În configurația noastră, vom folosi patru pini de control pentru a gestiona motorul pas cu pas. Pinii cheie sunt ENA și ENB, care trebuie setați la HIGH (5V) pentru a activa driverul. Pinii IN1, IN2, IN3 și IN4 vor controla stările înfășurărilor motorului, permițându-i să facă pași în direcția dorită.
Detalii din Fișa Tehnică
| Producător | STMicroelectronics |
|---|---|
| Număr de piesă | L298N |
| Tensiune logică/IO | 5 V |
| Tensiune de alimentare | 5–46 V (VS) |
| Curent de ieșire (pe canal) | 2 A max/canal (continuu) |
| Curent de vârf (pe canal) | 3 A max |
| Ghid frecvență PWM | 1 kHz până la 20 kHz |
| Praguri logice de intrare | 0,8 V (jos), 2,0 V (sus) |
| Cădere de tensiune / RDS(on) / saturație | 1,5 V max |
| Limite termice | 150 °C max |
| Pachet | DIP-15 |
| Note / variante | Disponibil și în versiuni plate (L298P) |
- Asigură-te că
ENAșiENBsunt conectate la 5V pentru o funcționare corectă. - Folosește un radiator adecvat pentru aplicații cu curent ridicat pentru a preveni supraîncălzirea.
- Menține o masă comună între Arduino și driverul de motor.
- Fii atent la polaritatea cablajului pentru a evita deteriorarea motorului sau a driverului.
- Implementează condensatoare de decuplare lângă pinii de alimentare pentru a filtra zgomotul.
- Ajustează frecvența PWM în funcție de specificațiile motorului pentru performanță optimă.
Instrucțiuni de Cablare

Pentru a cabla driverul de motor L298N la Arduino și motorul pas cu pas, începe prin conectarea sursei de alimentare. Conectează pinul VIN de pe L298N la sursa ta de 12V. Apoi, conectează pinul GND de pe L298N la masa sursei tale de alimentare și, de asemenea, la masa Arduino.
Acum, pentru pinii de control, conectează ENA la pinul 2 de pe Arduino și ENB la pinul 3. Apoi, conectează IN1 la pinul 8, IN2 la pinul 9, IN3 la pinul 10 și IN4 la pinul 11 de pe Arduino. În final, conectează firele motorului pas cu pas la bornele de ieșire ale L298N. Asigură-te că cele două perechi de fire de la motor sunt conectate corect la ieșiri.
Exemple de Cod și Explicații
În cod, includem mai întâi biblioteca Stepper.h pentru a simplifica controlul motorului pas cu pas. Definim numărul total de pași pe rotație, care este crucial pentru o mișcare precisă. Identificatorii cheie din cod includ stepsPerRevolution, care setează numărul de pași necesari pentru o rotație completă, și myStepper, care inițializează obiectul stepper cu pinii specificați.
const int stepsPerRevolution = 200; // schimbă aceasta pentru a se potrivi cu numărul de pași pe rotație
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // inițializează biblioteca stepper
Acest fragment inițializează motorul pas cu pas cu pinii corespunzători. În funcția setup(), setăm viteza motorului și activăm driverul setând pinii 2 și 3 la HIGH.
void setup() {
myStepper.setSpeed(300); // setează viteza la 60 rpm
pinMode(2,OUTPUT); // pentru EN1
digitalWrite(2,HIGH); // activează EN1
pinMode(3,OUTPUT); // pentru EN2
digitalWrite(3,HIGH); // activează EN2
}
În funcția loop(), motorul face un pas de o rotație completă în ambele direcții, în sensul acelor de ceasornic și în sens invers, cu o întârziere între ele. Acest lucru îți permite să observi funcționarea motorului.
void loop() {
myStepper.step(stepsPerRevolution); // face un pas de o rotație într-o direcție
delay(500); // așteaptă jumătate de secundă
myStepper.step(-stepsPerRevolution); // face un pas de o rotație în cealaltă direcție
delay(500); // așteaptă jumătate de secundă
}
Acest fragment demonstrează cum să controlezi motorul pentru a se roti în ambele direcții. Codul complet este încărcat mai jos, după articol, pentru referința ta.
Demonstrație / Ce să Te Aștepți
Odată ce totul este conectat corect și codul este încărcat, ar trebui să vezi motorul pas cu pas rotindu-se o revoluție completă într-o direcție, urmată de o revoluție completă în direcția opusă. În plus, dacă integrezi potențiometrul pentru controlul vitezei, ajustarea acestuia va schimba viteza de rotație a motorului. Fii atent la curentul motorului; pe măsură ce crești viteza, motorul poate consuma mai mult curent, ceea ce poate duce la supraîncălzire dacă nu este gestionat corespunzător (în videoclip la 09:45).
Dacă motorul nu se rotește conform așteptărilor, verifică cablajul pentru a te asigura că toate conexiunile sunt sigure și orientate corect. De asemenea, verifică dacă tensiunea sursei de alimentare este adecvată pentru motorul tău pas cu pas.
Marcaje de timp din videoclip
- 00:00 - Introducere
- 01:30 - Explicația cablajului
- 05:00 - Prezentarea codului
- 09:45 - Demonstrația controlului motorului
/*
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);
}
Lucruri de care ai putea avea nevoie
-
Amazon
-
Amazon
Resurse și referințe
Încă nu sunt resurse.
Fișiere📁
Fișă tehnică (pdf)
-
Fișă tehnică pentru driver motor dual punte H L298N
robojax_L298N datasheet.pdf0.18 MB