Documente Academic
Documente Profesional
Documente Cultură
PWM | H-Bridge
Prezentare generală
Putem controla viteza motorului DC prin simpla control a tensiunii de intrare la motor
și cea mai obișnuită metodă de a face acest lucru este prin utilizarea semnalului PWM.
PWM sau modulația lățimii impulsurilor este o tehnică care ne permite să ajustăm
valoarea medie a tensiunii care se deplasează la dispozitivul electronic prin pornirea și oprirea
alimentării la viteză rapidă. Tensiunea medie depinde de ciclul de funcționare sau de timpul în
care semnalul este pornit față de timpul în care semnalul este oprit într-o singură perioadă de
timp.
Deci, în funcție de dimensiunea motorului, putem conecta o ieșire PWM Arduino la
baza tranzistorului sau la poarta unui MOSFET și putem controla viteza motorului prin controlul
ieșirii PWM. Semnalul PWM Arduino de putere redusă pornește și se oprește la poarta de la
MOSFET prin care este condus motorul de mare putere.
Pe de altă parte, pentru a controla direcția de rotație, trebuie doar să inversăm direcția
fluxului curent prin motor și cea mai obișnuită metodă de a face acest lucru este folosirea unui
pod H. Un circuit H-Bridge conține patru elemente de comutare, tranzistoare sau MOSFET-uri,
cu motorul în centru, care formează o configurație tip H. Prin activarea a două comutatoare
particulare în același timp, putem schimba direcția fluxului curent, schimbând astfel direcția de
rotație a motorului.
Deci, dacă combinăm aceste două metode, PWM și H-Bridge, putem avea un control
complet asupra motorului DC. Există multe drivere DC care au aceste caracteristici, iar L298N
este unul dintre ele.
L298N Driver
L298N este un conducător motor dublu H-Bridge, care permite controlul vitezei și
direcției a două motoare cc în același timp. Modulul poate conduce motoarele DC care au
tensiuni între 5 și 35V, cu un curent de vârf de până la 2A.
Arduino și L298N
Acum să facem niște aplicații practice. În primul exemplu vom controla viteza
motorului cu ajutorul unui potențiometru și vom schimba direcția de rotație cu ajutorul unui
buton. Iată schemele de circuite.
Descriere:
Deci, mai întâi trebuie să definim pinii și unele variabile necesare pentru program. În
secțiunea de configurare trebuie să setăm modurile pin și direcția inițială de rotație a motorului.
În secțiunea buclă, începem prin citirea valorii potențiometrului și apoi mapăm valoarea pe care
o obținem de la 0 la 1023, la o valoare de la 0 la 255 pentru semnalul PWM sau de la ciclul de
funcționare de la 0 la 100% Semnal PWM. Apoi, folosind funcția analogWrite () trimitem
semnalul PWM la pinul Enable al plăcii L298N, care de fapt conduce motorul.
Apoi, verificăm dacă am apăsat butonul și dacă este adevărat, vom schimba direcția de
rotație a motorului prin setarea inversă a stărilor Input 1 și Input 2. Butonul de comandă va
funcționa ca buton de comutare și de fiecare dată când îl apăsăm, va schimba direcția de rotație a
motorului.
Deci, odată ce am învățat acest lucru, acum putem construi mașina noastră robustă
Arduino. Iată circuitul schematic:
Tot ce avem nevoie este 2 Motoare DC, driverul L298N, o placă Arduino și un joystick
pentru control. În ceea ce privește sursa de alimentare, am ales să folosesc trei baterii Li-ion de
3.7V, furnizând un total de 11V. Am scos șasiul din placaj de 3 mm, am atașat motoarele la
acesta folosind suporturi din metal, roți atașate la motoare și în față atașat o roată rotativă.
Acum, să aruncăm o privire la codul Arduino și să vedem cum funcționează. (Jos de tot puteți găsi codul
complet)
1. int xAxis = analogRead(A0); // Read Joysticks X-axis
2. int yAxis = analogRead(A1); // Read Joysticks Y-axis
Similar, dacă mișcăm axa Y a joystick-ului înainte și valoarea merge peste 550, vom
seta motoarele să meargă înainte și să convertească citirile de la 550 la 1023 în valori PWM de la
0 la 255. Dacă joystick-ul rămâne în centrul său viteza motoarelor va fi zero.
Apoi, să vedem cum folosim axa X pentru controlul stânga și la dreapta al mașinii.
Din nou, mai întâi trebuie să convertim citirile din axa X în valori de viteză de la 0 la
255. Pentru deplasarea spre stânga, folosim această valoare pentru a micșora viteza stânga a
motorului și pentru a mări viteza motorului drept. Aici, din cauza funcțiilor aritmetice, folosim
două declarații suplimentare "if" pentru a limita intervalul de viteză al motorului de la 0 la 255.
Aceeași metodă este folosită pentru deplasarea autovehiculului spre dreapta.
În funcție de tensiunea aplicată și motorul însuși, la viteze mai mici, motorul nu poate
începe să se miște și produce un sunet buruiat. În cazul meu, motoarele nu s-au putut deplasa
dacă valoarea semnalului PWM a fost sub 70. Prin urmare, folosind aceste două declarații de
fapt, am limitat de fapt intervalul de viteză de la 70 la 255. La final, trimitem doar vitezele finale
ale motorului sau Semnalul PWM către pinii de acționare ai driverului L298N.
1. // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM
value was below value of 70)
2. if (motorSpeedA < 70) {
3. motorSpeedA = 0;
4. }
5. if (motorSpeedB < 70) {
6. motorSpeedB = 0;
7. }
8. analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
9. analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
Source:https://howtomechatronics.com/tutorials/arduino/arduino-dc-motor-control-tutorial-l298n-pwm-h-bridge/