Conectarea servomotorului la microcontroler - blogul Xelfaer

În rețeaua o mulțime de articole legate de conectarea actuatori la microcontrolere, dar în esență cele mai multe utilizări, cum ar fi platforme Arduino sau clonele sale deja existente, dar conectarea la normal MK suficiente informații săraci. O mașină de articole a fost împinsă, un serviceman dormea ​​(a murit cu moartea curajoasă din cauza supraîncălzirii - dar nu în zadar în cele din urmă), iar scopul a fost atins. În acest articol voi încerca să vă spun ce sa întâmplat în cele din urmă și cu ce probleme am întâlnit.

Mai întâi ai nevoie de un microcontroler. Pentru ideile mele a durat doar 2 canale PWM și a fost selectat inițial MK ATmega8, dar apoi sa decis să utilizeze ATTiny2313, deoarece firmware-ul nu va lua o mulțime de spațiu, și are 4 canale PWM, astfel încât ideea părea mai profitabile. Servo-ul a fost cumpărat de TowerPro SG90, care recent a reușit să găsească o foaie de date mai mult sau mai puțin bună. Compară prețurile la diferite magazine (la radio pentru un motiv oarecare, la toate, sau nu au auzit despre ele sau nu au nici o deloc) în țara noastră, cel mai scump la prețul de transport maritim + a ajuns la un zelectro.

Diagrama arată minimul necesar pentru MK. Desigur, ai putea arunca un rezonator de cuarț și să folosiți generatorul intern de ceas MK, dar din moment ce folosesc o machetă, am decis să folosesc un cuarț extern. Conectorul JP1 este utilizat pentru a conecta unitatea servo. Prin încheierea №1 conectorul JP1 conectează semnalul de sârmă servo încheiat №2 conectat la sursa de putere unică + 5V, iar ieșirea №3 - GND trebuie să fie conectat printr-o sursă de alimentare separată pentru GND MC.
Imediat trebuie să spună de ce folosesc o sursă de alimentare separată: ca elementul de acționare consumă destul de mult de ea alimentat de portul USB al PC-ului si vine servo ax subtensiune a început convulsiv zvâcneau.

Apoi puteți începe să scrieți firmware pentru MK. În primul rând, trebuie să calculați valorile pentru PWM. Pentru a calcula, să folosim formula:

Fpwm = Fosc / n * (1 + TOP);
unde: Fosc este frecvența rezonatorului de cuarț, n este divizorul de frecvență


înlocuiți datele noastre pentru calcul:


PS. pentru cei care sunt prea leneși să gândească în atașament este un calculator pentru calcularea valorii.

De asemenea, avem nevoie de valori extreme de poziție pentru unitatea servo, care este indicată de obicei în fișa tehnică a servomotorului. Pentru acest model a trebuit să aleagă metoda bază științifică menționate în fișa tehnică: 0 = aproximativ 1000 și 180 = 3400. Pentru claritate, pune în aplicare un arbore de rotație continuă servo de la 0 ° la 180 ° și înapoi.

Codul firmware în sine este:

#include
#include

// *** Programul principal *** //
int principal # 40; vid # 41;
# 123;
DDRD = 0x00; // setați toate porturile DDRD ca intrări
PORTD = 0x00; // setați logic 0 la toate porturile DDRD

// setați Timer1 la modul PWM rapid 14 (ieșire la portul PB3)
TCCR1A = # 40; 1 < TCCR1B = # 40; 1 <

DDRB | = # 40; 1 <<3 ) ; //устанавливаем PB3 как выход

ICR1 = 29999; // perioadă = 20 ms

în timp ce # 40; 1 # 41;
# 123;
pentru # 40; i = 1000; eu <3400 ; i = i + 10 ) //перемещение вала сервы от 0 до 180 градусов
# 123;
OCR1A = i;
_delay_ms # 40; 10 # 41; ;
# 125;

pentru # 40; i = 3400; i> 1000; i = i - 10 # 41; // deplasați servomotorul de la 180 la 0 grade
# 123;
OCR1A = i;
_delay_ms # 40; 10 # 41; ;
# 125;
# 125; ;
# 125;

Articole similare