Definiții servomotor :
Un servomotor este un dispozitiv ce conține :
Un servomotor este un motor electric cu viteza de rotație reglabila, cu o plaja larga de valori, in ambele sensuri, utilizat pentru a deplasa o sarcina.
Un servomotor este un actuator rotativ sau un motor care permite controlul precis a pozitiei unghiulare, vitezei si accelerației.
Controlul unui servomotor
Controlul servomotoarelor se face utilizand semnale PWM ( Pulse Width Modulation ) generat de microcontroller.
Conform figurii de mai sus, daca semnalul de feedback ( Senzor de poziție ) diferă de intrarea data ( Poziție dorita ) un semnal de eroare este generat si este aplicat ca intrare in motor, iar motorul ( arborele ) se rotește. Cand semnalul servomotorul ( arborele ) ajunge in poziția dorita semnalul de feedback va fi același cu poziția dorita iar semnalul de eroare devine 0 (zero), motorul oprindu-se.
Deoarece intrarea in servomotor este diferența dintre semnalul de feedback si semnalul necesar ( poziția dorita ), prin urmare viteza motorului este proporțională cu diferența dintre poziția curenta si poziția dorita.
Semnalul PWM se creează prin schimbarea rapida a stării unui pin de ieșire intre LOW si HIGH, controlând timpul in care pinul de ieșire sta in starea HIGH.
Factorul de umplere ( Duty Cycle) = reprezinta procentul din perioada unui semnal in care acesta se afla in starea HIGH:
\[f_{u}=\frac{t_{HIGH}}{t_{HIGH}+t_{LOW}}\times 100=\frac{t_{HIGH}}{T}\times 100\]
,unde:
Exemplu:
Factor de umplere 50%:
\[t_{HIGH} = este \, in \, starea \,HIGH \,jumătate \,din \, perioada \,semnalului.\]
\[t_{LOW} = este \, in \, starea \,LOW \,cealaltă \,jumătate \,din \, perioada \,semnalului.\]
Factor de umplere 25%:
\[t_{HIGH} = este \, in \, starea \,HIGH \,25\% \,din \, perioada \,semnalului.\]
\[t_{LOW} = este \, in \, starea \,LOW \,75\% \,din \, perioada \,semnalului.\]
Dacă factorul de umplere crește, va crește tensiunea și implicit puterea furnizată pe pinul PWM.
De obicei pentru servomotoare frecvența cu care se trimit impulsurile PWM este de 50-60Hz, dar este bine și indicat să consultăm foaia de catalog ( datasheet-ul ) a servomotorului.
\[T=\frac{1}{f}\]
De obicei un impuls de 1ms va mișca servomotorul la -90o invers acelor de ceasornic, un impuls de 1,5ms va mișca arborele in poziția neutră ( care este la 0o ) și un impuls de 2ms va mișca arborele la 90o în sensul acelor de ceasornic.
Caracteristici :
Pentru mai multe detalii va rog sa consultați foaia de catalog ( datasheet ) aici.!!!!!
Este de preferat ca alimentarea servomotorului să se facă de la o sursă externă și nu de pe placa Arduino, chiar dacă placa Arduino este capabilă să suporte servomotorul.
Următorul cod va roti servomotorul la 0 grade, așteptăm 1 secunda, apoi îl rotim la 90 grade, așteptăm 1 secunda apoi îl rotim la 180 grade si viceversa:
// Include librăria Servo.h
#include <Servo.h>
// Declaram pinul la care este conectat servomotorul
int servoPin = 3;
// Cream obiectul servo1
Servo Servo1;
void setup() {
// trebuie sa atașăm servomotorul la pinul folosit ( pin 3 )
Servo1.attach(servoPin);
}
void loop(){
// Mișcă servomotorul la 0 grade
Servo1.write(0);
delay(1000);
// Mișcă servomotorul la 90 grade
Servo1.write(90);
delay(1000);
// Mișcă servomotorul la 180 grade
Servo1.write(180);
delay(1000);
}
Atenție!! Utilizarea librarii servo.h duce automat la dezactivarea funcționalității PWM pentru pinii 9 si 10 pentru Arduino UNO si alte plăci similare.
Codul de program este unul simplu : declarăm un obiect tip servo ( servo1) apoi îl inițializăm folosind funcția servo1.attach().
Comanda de atașare atașează un obiect servo1 creat la un pin desemnat. Comanda atașare poate avea fie
un parametru, ca în cazul nostru, sau trei parametri. Dacă se utilizează trei parametri, primul parametru este pinul, al doilea este unghiul minim (0 grade) în lățimea impulsului în microsecunde (implicit la 544), iar al treilea parametru este unghiul maxim de grad (180 de grade) în lățimea impulsului în microsecunde (implicit la 2400). În majoritatea cazurilor puteți seta pur și simplu pinul și ignora al doilea și al treilea parametru.
În loop() am dat comandă de mișcare a servomotorului folosind funcția servo1.write(x), unde x este un număr întreg cuprins intre 0 si 180 – poziția unghiulară în care va fi mutat servomotorul.
Arduino are o funcție încorporată servo.write () care simplifică controlul servomotoarelor. Cu toate acestea, nu toate servomotoarele respectă aceleași temporizări pentru toate pozițiile. De obicei, 1 milisecundă înseamnă 0 grade, 1,5 milisecunde înseamnă 90 de grade și, desigur, 2 milisecunde înseamnă 180 de grade. Unele servomotoare au intervale mai mici sau mai mari.
Pentru un control mai bun, putem folosi funcția servo.writeMicroseconds(us), care ia numărul exact de microsecunde ca parametru. Amintiți-vă, 1 milisecundă este egal cu 1.000 microsecunde.
Există o ”rasă” specială de servomotoare etichetate ca servomotoare cu rotație continuă. În timp ce un servomotor normal merge într-o anumită poziție în funcție de semnalul de intrare, un servomotor cu rotație continuă fie se rotește în sensul acelor de ceasornic, fie în sens invers acelor de ceasornic, cu o viteză proporțională cu semnalul.
Pentru de exemplu, funcția Servo1.write(0) va face servomotorul să se rotească în sens invers acelor de ceasornic la viteză maximă. Funcția Servo1.write(90) va opri motorul și Servo1.write(180) va roti motorul în sensul acelor de ceasornic la viteză maximă.
Lasă un răspuns