Programare practică arduino

Este timpul ca Arduino să ruleze motoarele :)

Pentru a face acest lucru, hai să folosim cel mai popular driver folosit pentru a controla motorul - chipul L293D.







L293D conține două drivere pentru controlul motoarelor cu putere redusă. Are două perechi de intrări pentru semnale de comandă și două perechi de ieșiri pentru conectarea motoarelor electrice. În plus, L293D are două intrări pentru a permite fiecăruia dintre drivere. Aceste intrări sunt utilizate pentru a controla viteza de rotație a motoarelor electrice folosind PWM.

Să luăm în considerare diagrama bloc L293D, care a rezultat în foaia de date (numerotarea cazului SO):

Programare practică arduino

La ieșirile OUTPUT1 și OUTPUT2 este conectat motorul electric MOTOR1 (pentru cip în carcasa DIP - picioarele 3 și 6).
În consecință, MOTOR2 este conectat la ieșirile OUTPUT3 și OUTPUT4 (picioarele 11 și 14).

Semnalele aplicate la ENABLE1 (2) controlează driverul corespunzător (picioarele 1 și respectiv 9).

Prin alimentarea semnalului ENABLE1 HIGH (sau pur și simplu conectarea cu plusul sursei de alimentare de + 5V) - activați driverul primului motor.
Dacă nu sunt aplicate semnale pentru intrările INPUT1 și INPUT2, motorul nu se va roti.
Prin alimentarea HIGH la INPUT1 și LOW to INPUT2, vom determina rotirea motorului. Și dacă acum schimbați semnalele în loc și dați semnalul LOW la INPUT1 și semnalul HIGH la INPUT2 - vom determina rotirea motorului în direcția opusă.

În mod similar pentru al doilea șofer.

Programare practică arduino

Randament Vss (picior 16) este responsabil pentru cele mai multe circuite de putere, și de ieșire Vs (picior 8) este responsabil pentru un motor alimentat - prevede separarea cip de putere și gestionat de motor, care permite conectarea motoarelor cu tensiunea de alimentare diferită de tensiunea de alimentare cip. Separarea surselor de alimentare ale microcircuitelor și a motoarelor electrice este, de asemenea, necesară pentru a reduce interferența cauzată de vârfurile de tensiune asociate funcționării motoarelor.

Patru contacte GND (picioarele 4, 5, 12, 13) trebuie conectate la sol. De asemenea, aceste contacte asigură disiparea căldurii de pe cip.

Dacă utilizați cipul L293E. atunci curentul de sarcină permis pentru fiecare canal va fi deja 1A (iar curentul de vârf este 2A), dar va trebui să folosim diode de protecție externe, pe care L293D le-a încorporat în chip.

Să încercăm să modelăm modul în care Arduino face față gestionării motoarelor :)

Lansați Proteus și deschideți proiectul cu Arduino :)
Să adăugăm în program șoferul nostru - L293D

Conectați terminalele Vss și Vs la polul pozitiv al bateriei, GND PIN-ul este conectat la sol, și la terminalele 3,6 și 11,14 prin conectarea motoarelor - și, respectiv, MOTOR1 MOTOR2.

Programare practică arduino

Într-un circuit real - în paralel cu motorul trebuie să suda condensator - ajută să facă față cu interferența de la motorul de operare (este o practică comună - dezasambla orice jucărie cu un motor și veți vedea că dreptul la un motor de sudat valoare nominală condensator ceramic undeva în 0,1 Uf)

Și cum să conectați intrările driverelor? În primul rând, să vedem cum funcționează în practică :)
Încarcă Blink schița MC sau Blink_HL, și mai departe, așa cum se arată în figură, și conectați INPUT1 ENABLE1 cu pini digitale 13 conectat la LED, și INPUT2 conectați la sol. Să conducem simularea și să vedem că motorul se rotește într-o direcție o secundă și apoi se oprește pentru o secundă. Ie a luat motocicleta Blink :)







Deci, se pare că pentru a controla un motor necesită trei porturi (unul dintre ele este PWM).
Dacă nu este nevoie să controlați viteza motorului, puteți salva pe porturile PWM (ENABLE1 și ENABLE2). Apoi, pentru a gestiona un motor, va trebui să utilizați două porturi.

Deci, definiți porturile (în paranteze - numărul corespunzător al piciorului MK din cartografiere):

Să ne schimbăm proiectul în Proteus:

Programare practică arduino

Și acum vom scrie o schiță.

Pentru comoditate - vom stoca numerele de port nu în variabile obișnuite de tip int, ci combinăm structura lor:


Cu toate acestea, dacă declarați o astfel de structură în codul de schiță, de exemplu:


Atunci când încercăm să compilam, obținem eroarea:

eroare: variabila sau câmpul 'set_m_pins' declarat void În funcția 'void setup ()':
- Faptul este că structurile de date suplimentare trebuie declarate în fișierele header (.h).
Ie trebuie să creați un fișier de bibliotecă și să îl conectați la schiță cu directiva #include

Cu toate acestea, compilatorul nu-i place referirea la un nou tip de date pe pointer.


Trei secunde, ambele motoare se rotesc înainte, apoi pentru o jumătate de secundă cel de-al doilea motor se rotește înapoi și apoi din nou înainte.

Programare practică arduino


Și schița va fi astfel:

Funcțiile de rotație au doi parametri - numărul motorului (1-2) și viteza de rotație (0-255). Dacă numărul diferă de la 1-2, rotația este setată direct la ambele motoare.

La vârful degetelor mele era un cip L293E - deci trebuie să folosiți diode de protecție (1N4007), care pentru două motoare ai nevoie de câte 8 bucăți :)

Programare practică arduino

În mod similar, L293E nu este 16, ci mai mult de 20 de picioare:

Programare practică arduino

Cu toate acestea, pentru testare este posibilă asamblarea unui circuit pentru un singur motor;)

Programare practică arduino

În consecință, trebuie să faceți modificări în schiță:


- Ne mișcăm motorul cu 3 secunde înainte și apoi cu o secundă în urmă.

Programare practică arduino

Este spinning :)

Din nou, a venit peste această întrebare.
În conformitate cu schema de mai sus: este posibil să se utilizeze PWM a ciclului de sarcină corespunzătoare în loc de rezistor?

Ie motor la 1V, coroana dă 9V. Furnizăm motorul direct de pe coroană (și nu de la 5V ca în figura de mai sus). Deci, noi controlam tranzistorul de genul acesta:
analogWrite (motor, 28);

Permiteți-mi să explic: 28 = 255/9 (care este, dacă se aplică PWM tranzistor cu o valoare de 255, producția ar fi 9V, dar trebuie să 1B).

Cum va fi vorba despre o astfel de manipulare?

Explicați despre legarea acestui micruhi? Pentru ce sunt diode? Și TB6612FNG de mai sus necesită legare?

Curea pentru L293?
Dacă cip utilizare L293E, curentul de sarcină admisibilă pe fiecare canal va avea 1A (un vârf de curent - 2A), dar trebuie să utilizeze diode de protecție externă care au L293D integrate într-un cip în sine. Ie pentru conductele D (nu sunt strict impuse). Sunt necesare diode (atât integrate, cât și externe) pentru a elimina emisiile de auto-inducție de la motor.
Și pentru TB6612FNG, sunt necesare numai conducte.

Mulțumesc, Zoltberg. M-am gândit deja.

spuneți-mi, aici este chipul L293C, tipul D nu este în magazin, C nu are diode interne, trebuie să fie lipite la ieșirile mikruhi ca pe circuitul D? ce diode sunt necesare?

Aici:

Programare practică arduino

Diodele, de exemplu 1n4007 - foarte bune. popular =)

Vă mulțumesc foarte mult pentru răspunsul dvs.!

Întrebarea este cum puteți controla motorul pentru sarcina pe care o creează? Ie când servomotorul ajunge la "oprire", iar sarcinile sare în sus, astfel încât alimentarea cu energie electrică să se oprească automat. Dispozitivul este planificat pentru utilizare în condiții de stradă, gheață, murdărie și tot ceea ce poate împiedica deplasarea servomotorului, așadar aș vrea să mă protejez de ...

Bine ai venit! vă rog să-mi spuneți cum să construiți în mod corespunzător o schemă pentru ARDUINO UNO și L293D, combinând motorul și iluminarea cu LED-uri cu abilitatea de a schimba luminozitatea.

Programare practică arduino







Trimiteți-le prietenilor: