categorii: Circuite de micro-controler
Număr de vizualizări: 19709
Comentarii la articol: 0

Control motor și servo cu Arduino

 

În proiectele simple ale sistemelor de automatizare, este adesea necesar nu numai să citiți citirile senzorilor, ci și să setați mecanisme de mișcare. Pentru aceasta, se utilizează o varietate de motoare electrice. Cea mai simplă și mai populară opțiune este un motor cu curent continuu. A câștigat dragostea iubitorilor prin accesibilitatea sa, ușurința de reglare a vitezei. Dacă sarcina este de a muta orice mecanism într-un unghi sau o distanță dată, este convenabil să utilizați un servomotor sau un motor pasager.

În acest articol, ne uităm la servos și motoare cu curent continuu, conectându-le la o placă Arduino și reglând DCT.

Control motor și servo cu Arduino

Motor DC

Cel mai frecvent motor electric care este utilizat în dispozitive portabile, jucării, modele controlate radio și alte dispozitive. Magneții permanenți sunt fixați pe stator pe motoare electrice mici și o înfășurare la rotor.

Motor DC

Curentul este furnizat înfășurării prin ansamblul perii. Periile sunt realizate din grafit, uneori se găsesc contacte de alunecare din cupru. Perii alunecă peste lamelele situate la un capăt al rotorului. Dacă nu intrați în detalii, atunci viteza de rotație a acesteia depinde de curentul de înfășurare a armăturii.

Colecție Motor Anchor

La motoarele de curent continuu mari, pe stator, există o înfășurare de excitație conectată la înfășurarea rotorului (prin ansamblul perii) într-un anumit mod (serie, paralel sau excitat mixt). Astfel, se realizează cuplul dorit și numărul de rotații.


Controlul vitezei

Motor electric cu curent continuu

Când este conectat la rețea, motorul cu curent continuu începe să se rotească la viteza nominală. Pentru a reduce viteza trebuie să limitezi curentul. Pentru a face acest lucru, sunt introduse rezistențe la balast, dar aceasta reduce eficiența instalației în ansamblu și apare o sursă de căldură în exces. Pentru o reglare mai eficientă a tensiunii și a curentului, se utilizează o altă metodă - Control PWM.

Control PWM

O metodă de control al semnalului (tensiune) modulat pe lățimea impulsului este de a genera valoarea de tensiune dorită prin schimbarea lățimii impulsului, cu o durată constantă a perioadei (frecvență).

Adică, perioada este împărțită în două părți:

1. Impulsul timpului.

2. Pauză timp.

Raportul dintre timpul pulsului și timpul total al perioadei se numește ciclu de serviciu:

Ks = ti / tper

reciproc este numit "ciclu de serviciu":

D = 1 / KZ = tper / t și

Pentru a descrie modul de operare al controlerului PWM, sunt utilizate ambele concepte: atât ciclul de serviciu, cât și ciclul de serviciu.

Consumul curent al motorului depinde de puterea acestuia. Numărul de revoluții, așa cum s-a spus, depinde de curent. Curentul poate fi reglat modificând cantitatea de tensiune aplicată înfășurărilor. De fapt, atunci când este alimentat cu o tensiune care depășește valoarea nominală conform certificatului de motor, viteza sa va depăși, de asemenea, viteza nominală. Totuși, astfel de moduri de funcționare sunt periculoase pentru motor, deoarece un curent mai mare curge în înfășurări, ceea ce provoacă o încălzire crescută.

Dacă deteriorarea motorului din impulsuri de scurtă durată sau din modurile de funcționare pe termen scurt în mod repetat este minimă, atunci în timpul funcționării prelungite la înaltă tensiune și turații, acesta se va arde sau rulmenții acestuia se vor încălzi și se vor înfunda, iar înfășurările se vor arde dacă nu este deconectată sursa de alimentare.

Dacă tensiunea de intrare este prea mică, motorul mic poate să nu aibă pur și simplu suficientă putere pentru a se deplasa. Prin urmare, este necesar să se descopere experimental viteza și tensiunea normală pentru un anumit motor care să nu depășească nominalul.


Ne conectăm la arduino

Am avut un motor mic, se pare de la un casetofon, ceea ce înseamnă că tensiunea sa nominală va fi sub 5 volți, atunci puterea de ieșire a arduino va fi suficientă. O voi alimenta de la pinul „5V”, adică de la ieșirea stabilizatorului liniar situat pe placă. Conform schemei pe care o vedeți mai jos.

Nu știu curentul acestui motor, așa că l-am conectat la curent și am instalat un tranzistor cu efect de câmp între motor și pinul de putere, pe poarta căruia a fost aplicat un semnal de la ieșirea PWM, oricare dintre cele disponibile poate fi utilizat.

Schema de conectare a motorului DC Arduino

Pentru a regla viteza, am adăugat un rezistor variabil la circuit, conectând-o la intrarea analogică A0. Pentru o conexiune rapidă, am folosit o placă de pană fără lipit, care se mai numește și panou.

Am instalat o rezistență de limitare a curentului în cablajul tranzistorului (pentru a reduce curentul de încărcare a porții, acest lucru va salva portul de la ardere și alimentarea de la microcontroler din subsidență și înghețarea sa) cu 240 de ohmi și l-am tras la sol cu ​​un rezistor de 12 kOhm, acest lucru trebuie făcut pentru a-l face mai stabil rezervorul de obturator a funcționat și a fost descărcat mai repede.

Sunt descrise detalii despre tranzistoarele cu efect de câmp într-un articol de pe site-ul nostru web. Am folosit un mosfet puternic, comun și nu prea scump, cu un n-canal și diodă inversă IRF840 încorporată.

O parte executivă și definitorie a circuitului

Așa arată ansamblul standului meu de laborator:

Motor cu curent continuu și arduino

Funcția de control PWM se numește atunci când scrieți la valorile corespunzătoare (3, 5, 6, 9, 10, 11) de la 0 la 255 cu comanda AnalogWrite (pin, valoare). Logica operei sale este prezentată în graficele de mai jos.

Funcția de control PWM

Un astfel de semnal se aplică la poarta tranzistorului:

Un astfel de semnal este aplicat la poarta tranzistorului

Codul programului la dizgrație este scurt și simplu, în detaliu toate aceste funcții au fost descrise în articole anterioare despre arduino.

int senzorPin = A0; // intrare de la potențiometru

int motorPin = 3; // Ieșire PWM către poarta camerei

void setup () {

pinMode (motorPin, OUTPUT);

}

void loop () {

analogWrite (motorPin, hartă (analogRead (senzor Pin), 0, 1023, 0, 256));

}

În funcția analogWrite, aloc o valoare ieșirii PWM, prin comanda hartă, utilizarea acesteia vă permite să eliminați mai multe linii de cod și o variabilă.


Aceasta este o schemă de lucru și este excelent pentru observarea proceselor atunci când controlați puterea de încărcare, luminozitatea LED-urilor, viteza motoarelor, trebuie doar să conectați sarcina dorită în loc de motor. În același timp, în loc de 5V, orice tensiune poate fi aplicată la sarcină, de exemplu 12V, nu uitați să conectați sursa de alimentare minus la contact, de exemplu 12V, nu uitați să conectați sursa de alimentare minus la pinul GND de pe placa microcontrolerului.

În arduino, frecvența PWM, când este apelată prin funcția analogWrite, este de numai 400 Hz, la valorile minime de tensiune, s-a auzit un zgomot al frecvenței corespunzătoare de la înfășurările motorului.

Arduino și servo

servo

Un motor care poate fi într-o poziție predeterminată și expus la factori externi, de exemplu, o deviere forțată a arborelui, își menține poziția neschimbată - se numește servomotor. În general, definiția sună puțin diferit:

Servo este un motor cu feedback negativ.

De obicei, trei fire ies dintr-un servomotor:

  • Plus putere.

  • Putere mai putina.

  • Semnal de control.

Servomotorul este format din:

  • Motor DC (sau motor fără perii);

  • Taxe de gestiune;

  • Transmițător de poziție (codificator pentru servos cu unghiul de rotație de 360 ​​° sau potențiometru pentru servos cu unghi de rotație de 180 °);

  • Reducerea angrenajului (scade viteza motorului și crește cuplul pe arborele de antrenare).

Unitatea de control compară semnalul cu senzorul de poziție încorporat și semnalul care a trecut prin firul de comandă, dacă acestea diferă, atunci există o rotație într-un unghi în care diferența dintre semnal este nivelată.

Principiul funcționării servo

Principalele caracteristici ale servos-urilor:

  • Viteza de rotire (timpul în care arborele se rotește printr-un unghi de 60 °);

  • Cuplu (kg / cm, adică câte kilograme poate rezista motorul pe pârghia la 1 cm de ax);

  • Tensiunea de alimentare;

  • Consum curent;

  • Prin metoda de control (analog sau digital, nu există nicio diferență semnificativă, dar digitalul este mai rapid și mai stabil).

De obicei, perioada semnalului este de 20 ms, iar durata pulsului de control:

  • 544 μs - corespunde 0 °;

  • 2400 μs - corespunde unui unghi de 180 °.

În cazuri rare, lungimea impulsului poate diferi, de exemplu, 760 și respectiv 1520 μs, aceste informații pot fi clarificate în documentația tehnică pentru acționare. Unul dintre cele mai populare servos-uri hobby este Tower Pro SG90 și modele similare.Este ieftin - aproximativ 4 dolari.

Sevroprivod pentru arduino

El ține 1,8 kg / cm pe arbore și completează cu el șuruburile de montaj și pârghiile cu șuruburi pentru arbore. De fapt, acest copil este destul de puternic și este foarte problematic să-l oprești cu un singur deget - unitatea în sine începe să scadă din degete - așa este puterea sa.


Servo control și Arduino

Așa cum am menționat deja, controlul se realizează prin modificarea duratei impulsului, dar nu confundați această metodă cu PWM (PWM), numele ei corect este PDM (Pulse Duration Modulation). Abaterile ușoare ale frecvenței semnalului (20 ms - durata, frecvența 50 Hz) nu joacă un rol special. Însă nu vă abateți de la frecvență cu mai mult de 10 Hz, motorul poate funcționa brusc sau se poate arde.

Servo control și Arduino

Conexiunea la arduino este destul de simplă, puteți alimenta unitatea de la un pin de 5v, dar nu este de dorit. Cert este că, la început, există un mic salt în curent, acest lucru poate provoca o dezactivare a puterii și Ieșiri false ale microcontrolerului. Deși este posibilă o unitate mică (tip SG90), dar nu mai mult.

Pentru a controla astfel de servos cu arduino, aveți biblioteca Servo încorporată în IDE, are un set mic de comenzi:

  • attach () - adăugați o variabilă la pin. Exemplu: numele Drive.attach (9) - conectăm un servo la pinul 9. Dacă unitatea dvs. are nevoie de lungimi non-standard de impulsuri de comandă (544 și 2400 μs), atunci acestea pot fi setate separate de virgulă după numărul de pin, de exemplu: servo.attach (pin, unghiul min (μs), unghiul maxim în ISS));

  • write () - stabilește unghiul de rotație al arborelui în grade;

  • writeMicroseconds () - stabilește unghiul prin lungimea pulsului în microsecunde;

  • read () - determină poziția curentă a arborelui;

  • atașat () - Verifică dacă un știft este setat cu un servomotor conectat;

  • detach () - anulează comanda de atașare.

Această bibliotecă vă permite să controlați 12 servos de la UNO, Nano și placi similare (mega368 și 168), în timp ce capacitatea de a utiliza PWM pe pinul 9 și 10 dispare. Dacă aveți MEGA, puteți controla cele 48 de servere, dar PWM-ul de pe pinii 11 și 12 va dispărea, dacă utilizați până la 12 servos, atunci PWM va rămâne complet funcțional pe toate contactele.

Dacă ați conectat această bibliotecă, nu veți putea lucra cu receptoare / emițătoare de 433 MHz. Există o bibliotecă Servo2 pentru aceasta, care este altfel identică.

Biblioteca Servo2

Iată un exemplu de cod pe care l-am folosit pentru experimente cu un servomotor, acesta este în setul standard de exemple:

#include // conectați biblioteca

Servo myservo; // nume declarat variabil pentru myservo servo

int potpin = 0; // pin pentru conectarea potențiometrului de reglare

int val; // variabilă pentru a salva rezultatele citirii semnalului de la potențiometru

void setup () {

myservo.attach (9); // setați 9 pini ca ieșire de control pentru servo

}

void loop () {

val = analogRead (potpin); // rezultatele citirii potențiometrului salvat în trans. val, acestea vor fi cuprinse între 0 și 1023

val = hartă (val, 0, 1023, 0, 180); // traduceți intervalul de măsurare de la intrarea analogică 0-1023

// în gama de sarcini pentru servo 0-180 grade

myservo.write (val); // trece conversia semnal de la pot-ra la control intrare servo

întârziere (15); // este nevoie de întârziere pentru funcționarea stabilă a sistemului

 

Conectăm servo-ul la Arduino

concluzie

Folosirea celor mai simple motoare electrice împerecheate cu un arduino este o sarcină destul de simplă, în timp ce stăpânirea acestui material vă extinde capabilitățile în domeniul automatizării și roboticii. Cele mai simple roboți sau modele de mașini controlate radio constau în astfel de motoare, iar servos-urile sunt folosite pentru a controla rotația roților.

În exemplele luate în considerare, un potențiometru a fost utilizat pentru a seta unghiul de rotație sau viteza de rotație, orice altă sursă de semnal poate fi utilizată în schimb, de exemplu, poate apărea rotația sau modificarea vitezei ca urmare a informațiilor primite de la senzori.

Un exemplu de utilizare a servosului în energie alternativă: urmărirea unghiului de incidență a luminii solare și ajustarea poziției panourilor solare în centrale.

Pentru a implementa un astfel de algoritm, puteți utiliza mai multe fotorezistul sau alte dispozitive optoelectronice pentru măsurarea cantității de lumină incidentă și, în funcție de citirile acestora, setați unghiul de rotație al panoului solar.

Consultați și la i.electricianexp.com:

  • Cum este aranjat și funcționează servo
  • Arduino și motorul pas cu pas: fundamentele, schemele, conexiunea și controlul
  • Dispune de conectarea dispozitivelor la Arduino
  • Cum să distingi un motor de inducție de un motor cu curent continuu
  • Cum să conectați codificatorul incremental la Arduino

  •