Shield driver motor L298P
Mecanice Driver
, Shieldul de actionare motor L298P poate porni doua motoare DC la pana la 2A fiecare, in plus avand multe caracteristici utile in construirea unui vehicul robotic. FunduMoto L298P este un shield motor cu multiple functii, bazat pe chipul de actionare L298P si este potrivit pentru Arduino Uno sau alt Arduino cu pini I O compatibili. Caracteristici principale: Porneste doua motoare DC la 4.8 – 24V la pana la 2A curent de varf (2.5A varf). Diode Schottky integrate pentru protectie de auto-inductie Porneste un servomotor cu putere regulata, dedicata, de 5V. Buzzer integrat Comutator de resetare la distanta Doi conectori Bluetooth Conector senzor de distanta cu ultrasunete Conector LED RGB Sase pini analogici digitali la terminatii cu 3 pini, de 5V si Gnd, disponibili pentru fiecare intrare pentru conectarea usoara a senzorului Conectori femela de stivuire pentru suportul unui card fiica Optional, poate alimenta un Arduino de pe shield. Subsistem pentru puterea logica Arduino 5V este adus la shield, fiind disponibil prin cele 6 seturi de pini de senzor rosii, de 5V, de conectorul Ping galben pentru senzorii de distanta cu ultrasunete si de doi conectori digitali albastri. Este, de asemenea utilizat pentru alimentarea portiunii logice a chipului L298P. Acest lucru asigura o putere curata, de 5V, independenta de motoare. Arduino 3.3V este adus la shield si este disponibil pe cei doi conectori Bluetooth. Arduino poate fi alimentat separat folosind conectorul de alimentare obisnuit, USB-la-DC, ori direct de la shield. Pentru aceasta optiune trebuie sa folosesti jumperul de langa condensatorul electrolitic etichetat OPT . Cand acest jumper este indepartat, Arduino trebuie alimentat separat. Cand jumperul este instalat, alimentarea de la conectorul de putere de motor, VMS, este conectata la pinul Vin de pe Arduino, care alimenteaza regulatorul de 5V integrat. Pentru utilizarea acestei optiuni, intrarea de alimentare a motorului trebuie sa fie de cel putin 6.5V pentru a putea alimenta regulatorul. Daca se alimenteaza Arduino de pe shield, pentru evitarea unui conflict de putere, mufa de putere DC de pe Arduino nu trebuie utilizata, dar poate fi utilizat USB-ul. Subsistem pentru puterea motorului Puterea motorului intra pe terminalul cu surub de 2 pozitii. VMS este tensiunea de motor pozitiva, care poate varia intre 4.8V si 24V. Daca folosesti aceasta intrare pentru alimentarea Arduino, instaland jumperul OPT , tensiunea maxima de intrare la aceasta terminatie ar trebui limitata la 12V pentru evitarea supratemperaturii la regulatorul Arduino. 1x 2 Terminatii cu surub (puterea motorului) VMS Vcc motor, care trebuie sa fie intre 4.8V si 24V GND Impamantarea motorului Aceasta putere a motorului este servita unui regulator de 5V, montat in partea inferioara a shieldului. Cei 5V alimenteaza conectorul servo alb, izolandu-se, astfel, orice zgomot electric servo care s-ar putea intoarce la cei 5V ce alimenteaza partea logica. Ca regulatorul de 5V sa functioneze, voltajul VMS trebuie sa fie de cel putin 6.3V. De notat ca, daca jumperul OPT este montat si USB-ul conectat, insa nu exista putere pe conectorul de motor VMS, se va incerca folosirea puterii USB pentru alimentarea motoarelor DC. Aceasta situatie este de evitat. Daca jumperul OPT este montat iar puterea vine pe mufa DC pe Arduino, va functiona insa zgomotul de motor DC va fi cuplat in alimentarea logica de 5V, ceea ce ar putea cauza un comportament haotic, lucru care nu este recomandat. In general, daca folosesti motoarele, pentru o operare stabila, ar trebui sa aduci puterea motorului pe conectorul de putere VMS. Pornirea motoarelor DC L298O are doua canale H-Bridge complete, care ofera viteza maxima si controlul directiei. Cele doua canale de actionare a motorului DC pot opera la tensiuni intre 4.8V si 24V, la curenti de pana la 2A (2.5A varf) per canal. Poti, de asemenea, sa ai doua motoare care impart un canal de actionare a motorului, atat timp cat curentul combinat ramane la 2A si nu te deranjeaza ca motoarele sa ofere aceeasi directie si viteza. Acesta este cazul tipic atunci cand ai un vehicul robotic de actionare cu 4 roti iar cele doua roti de pe fiecare parte opereaza la aceeasi viteza si pe aceeasi directie. Sistemul de actionare L298P al motorului foloseste pinii Arduino D10, D11, D12 si D13 pentru controlul motorului. Pinii 10 si 11 sunt pini PWM si se conecteaza la pinii EN de la chip pentru controlul vitezei prin modularea intrarii de activare. D10 controleaza viteza motorului A iar D11 controleaza viteza motorului B. Pinii 12 si 13 sunt conectati la intrarile IN pentru controlul directiei. Pinul 12 controleaza directia motorului A iar pinul 13 controleaza directia motorului B. De obicei, pentru determinarea directiei de rotatie a fiecarui motor se utilizeaza doi pini, insa acest shield are un invertor ce ofera o versiune inversata a semnalului la cei doi pini. Acest lucru reduce numarul de pini utilizati pe Arduino insa elimina abilitatea de franare dinamica, ceea ce nu constituie un inconvenient la majoritatea proiectelor. Reducerea pinilor de control al vitezei la o valoare PWM de zero, va produce oprirea. Pini de viteza Controlul vitezei Pini de directie Controlul directiei Motor A D10 PWM 0-100 D12 HIGH Inainte LOW Invers Motor B D11 PWM 0-100 D13 HIGH Inainte LOW Invers Conexiunile motorului DC Conexiunile motorului sunt printr-un bloc terminal cu 4 suruburi, cu doua terminatii pentru fiecare motor, etichetate MOTORA si MOTORB . Pinii + – pentru fiecare motor nu sunt etichetati, astfel ca realizezi conexiunile intr-un mod oarecum arbitrar si relativ la cum vezi operarea inainte versus operarea invers a motorului. Mai exact, daca motorul merge in directie opusa fata de cea asteptata, trebuie doar sa inversezi conexiunea pentru acel motor. 1 x Terminatie cu 4 suruburi (controlul motorului) Legatura pozitiva a motorului A Legatura negativa a motorului A Legatura pozitiva a motorului B Legatura negativa a motorului B Aceste puncte de conexiune la motor sunt reflectate, pentru mai multa flexibilitate, pe o terminatie femela cu 4 pini. Aceste legaturi de actionare a motorului au atasate si LED-uri galbele si verzi, a caror luminozitate variaza in functie de puterea semnalului PWM. 1 x 4 Terminatii femela (negre) MA Conexiunea motorului A (x2) MB Conexiunea motorului B (x2) Conexiunile servomotorului Servomotoarele sunt dispozitive cu 3 fire si necesita 5V, impamantare si un semnal PWM pentru stabilirea pozitiei. Shieldul utilizeaza D9 pentru semnalul PWM. O caracteristica interesanta a acestor module este regulatorul dedicat de 5V pentru alimentarea servomotorului si prevenirea intoarcerii zgomotului electric in puterea logica de 5V. Servomotoarele sunt, de obicei, utilizate la intoarcerea unui volan mic sau la rotirea unui senzor, cum ar fi senzorul de distanta cu ultrasunete pentru evitarea obstacolelor. Pentru a utiliza servomotorul, ai nevoie de minim 6.3V la conectorul de alimentare a motorului astfel ca regulatorul sa functioneze. Daca nu folosesti un servomotor, poti folosi D9 si cei 5V dedicati in alte scopuri. 1x 3 Terinatii servomotor (albe) G Impamantare +5V 5V dedicati pentru alimentarea servomotorului 9 D9 este pinul PWM de pe care este pornit servomotorul. Acest pin este disponibil pentru alte utilizari in cazul in care nu este folosit la pornirea unui servomotor. Conexiunile cu pini intre Arduino si shield Toate intrarile si iesirile sunt accesibile prin terminatiile femela cu stivuire de pe shiled, exceptand IOREF si cei doi pini I2C de langa conectorul USB, pentru suportul unui shield fiica, atat timp cat nu apare conflictul cu pinii utilizati. In plus, multi dintre acesti pini sunt accesibili altor terminatii pentru conectare usoara. Shieldul utilizeaza urmatorii pini ce raman disponibili daca nu se foloseste functia respectiva: Controlul senzorului de distanta cu ultrasunete D7, D8 Controlul servomotorului D9 Controlul motorului DC D10,D11, D12, D13 Buzzer D4 Bluetooth Pe placa exista doi conectori Bluetooth. Primul conector este o terminatie cu 4 pini pentru putere de 3.3V, impamantare, TX si RX. Acest tip de conector este compatibil cu modulele Bluetooth HC-06 si cu alte modele. Pinul receptor are un divizor de tensiune de 1K 2K pentru schimbarea de nivel la iesirea TX de la Arduino pentru a fi compatibila cu 3.3V. 1 x 4 Terminatii Bluetooth femela BT2 (negre) + 3.3V – Impamantare T D0 (RX) R D1 (TX) Cealalta terminatie Bluetooth este de tip mascul, de 12 pini. TX, RX, 5V si impamantarea sunt legate la aceasta terminatie. Singurii conectori Bluetooth de 12 pini sunt, in general, asociati cu automobile, astfel ca acest conector nu pare sa aiba mare utilitate. Spatierea pinilor este de 2mm si nu de 2.54mm, standard. Senzor de distanta ultrasonic O interfata robotica des intalnita este cea a senzorului ultrasonic de distanta, cum este HY-SRF05, care functioneaza trimitand un ping ultrasonic si cronometrand timpul pana la intoarcerea acestuia. Placa are o terminatie de 4 pini pentru conectarea senzorului. 1 x 4 Terminatii mascul de ping (galbeni) + 5V R Intoarcere (D8) T Declansator (D7) G Impamantare Senzori analogici digitali O problema des intalnita la conectarea senzorilor la un Arduino este necesitatea conexiunilor de impamantare Vcc, precum si o intrare analogica sau intrare iesire digitala. Aceasta placa ofera acces la pinii A0-A5 unor terminatii in linie care ofera si separat puncte de putere si impamantare pentru fiecare pin A0-A5. Terminatiile albe sunt liniile de semnal, terminatiile rosii ofera 5V iar cele negre sunt de impamantare. Pinii A0-A5 poti fi utilizati fie pentru intrari analogice, fie ca intrari iesiri digitale, astfel ca sunt suportate ambele variante de senzori. 3 x 6 Terminatii (alb rosu negru) A0 5V Impamantare A1 5V Impamantare A2 5V Impamantare A3 5V Impamantare A4 5V Impamantare A5 5V Impamantare Exista, de asemenea, o terminatie cu 3 pini, albastra, pentru cei 5V, impamantare si D2 care poate fi utilizat pentru un senzor digital sau alta conexiune la distanta. 1 x 3 Terminatii (albastru) G Impamantare + 5V S D2 – I O digitale LED RGB , Ca masura de precautie, exista si terminatia cu 5 pini care ofera D3, D5, D6, 5V si impamantarea. Astfel, 3 iesiri PWM, impreuna cu puterea si impamantarea sunt aduse pe un singur conector, lucru util in multe cazuri, de exemplu la controlul unui LED RGB. 1 x 5 Terminatii (albastru) 5V – Acest pin este nemarcat dar se afla langa D7 B D6 – B ar putea fi utilizat pentru culoarea albastru la LED-ul RGB G D5 – G ar putea fi utilizat pentru culoarea verde la LED-ul RGB – Impamantarea R D3 – R ar putea fi utilizat pentru culoarea rosu la LED-ul RGB Buzzer Acest buzzer este conectat la D4 si este pe mod activ HIGH. Comutator de resetare Shieldul are un buton de resetare la distanta plasat special pentru acces usor. Exemplu de program pentru shieldul L298P –- L298P Motor Shield Code for exercising the L298P Motor Control portion of the shield The low level motor control logic is kept in the function 39;Motor 39; The following pin designations are fixed by the shield int const BUZZER 4; Motor A int const ENA 10; int const INA 12; Motor B int const ENB 11; int const INB 13; int const MIN_SPEED 27; Set to minimum PWM value that will make motors turn int const ACCEL_DELAY 50; delay between steps when ramping motor speed up or down. Initialization void setup() { pinMode(ENA, OUTPUT); set all the motor control pins to outputs pinMode(ENB, OUTPUT); pinMode(INA, OUTPUT); pinMode(INB, OUTPUT); pinMode(BUZZER, OUTPUT); Serial.begin(9600); Set comm speed for serial monitor messages } Main void loop() { Run both motors Forward at 75% power Motor( 39;C 39;, 39;F 39;, 75); delay(3000); Run both motors in Reverse at 75% power but sound beeper first Motor( 39;C 39;, 39;F 39;, 0); Stop motors delay(1000); digitalWrite(BUZZER,HIGH);delay(500);digitalWrite(BUZZER,LOW); delay(500); digitalWrite(BUZZER,HIGH);delay(500);digitalWrite(BUZZER,LOW); delay(1000); Motor( 39;C 39;, 39;R 39;, 75); Run motors forward at 75% delay(3000); now run motors in opposite directions at same time at 50% speed Motor( 39;A 39;, 39;F 39;, 50); Motor ( 39;B 39;, 39;R 39;, 50); delay(3000); now turn off both motors Motor( 39;C 39;, 39;F 39;, 0); delay(3000); Run the motors across the range of possible speeds in both directions Maximum speed is determined by the motor itself and the operating voltage Accelerate from zero to maximum speed for (int i 0; i 100; i++) { Motor( 39;C 39;, 39;F 39;, i); delay(ACCEL_DELAY); } delay (2000); Decelerate from maximum speed to zero for (int i 100; i 0; –i) { Motor( 39;C 39;, 39;F 39;, i); delay(ACCEL_DELAY); } delay (2000); Set direction to reverse and accelerate from zero to maximum speed for (int i 0; i 100; i++) { Motor( 39;C 39;, 39;R 39;, i); delay(ACCEL_DELAY); } delay (2000); Decelerate from maximum speed to zero for (int i 100; i 0; –i) { Motor( 39;C 39;, 39;R 39;, i); delay(ACCEL_DELAY); } Turn off motors Motor( 39;C 39;, 39;F 39;, 0); delay (3000); } Motor function does all the heavy lifting of controlling the motors mot motor to control either 39;A 39; or 39;B 39;. 39;C 39; controls both motors. dir Direction either 39;F 39;orward or 39;R 39;everse speed Speed. Takes in 1-100 percent and maps to 0-255 for PWM control. Mapping ignores speed values that are too low to make the motor turn. In this case, anything below 27, but 0 still means 0 to stop the motors. void Motor(char mot, char dir, int speed) { remap the speed from range 0-100 to 0-255 int newspeed; if (speed 0) newspeed 0; Don 39;t remap zero, but remap everything else. else newspeed map(speed, 1, 100, MIN_SPEED, 255); switch (mot) { case 39;A 39;: Controlling Motor A if (dir 39;F 39;) { digitalWrite(INA, HIGH); } else if (dir 39;R 39;) { digitalWrite(INB, LOW); } analogWrite(ENA, newspeed); break; case 39;B 39;: Controlling Motor B if (dir 39;F 39;) { digitalWrite(INB, HIGH); } else if (dir 39;R 39;) { digitalWrite(INB, LOW); } analogWrite(ENB, newspeed); break; case 39;C 39;: Controlling Both Motors if (dir 39;F 39;) { digitalWrite(INA, HIGH); digitalWrite(INB, HIGH); } else if (dir 39;R 39;) { digitalWrite(INA, LOW); digitalWrite(INB, LOW); } analogWrite(ENA, newspeed); analogWrite(ENB, newspeed); break; } Send what we are doing with the motors out to the Serial Monitor. Serial.print ( Motor: ); if (mot 39;C 39;) Serial.print ( Both ); else Serial.print (mot); Serial.print ( t Direction: ); Serial.print (dir); Serial.print ( t Speed: ); Serial.print (speed); Serial.print ( t Mapped Speed: ); Serial.println (newspeed); }