W tym artykule opiszę tylko idę sterowania serwomechanizmem, oraz zaprezentuje prosty przykład programu dla kontrolera AVR.
Serwomechanizm modelarski, to bardzo praktyczny element, umożliwia ustawienie jakiego elementu na określonej pozycji. Serwomechanizmy steruje się poprzez impulsy podawane z określana częstotliwością (50Hz). Czas tych impulsów powinien się mieścić w zakresie od 1,5ms do 2,5 mili sekundy, a zależnie od tego czasu serwo ustawia się pod odpowiednim kątem i utrzymuje tą pozycje aż do zmiany sygnału.
Wiemy już jakie parametry ma spełniać sygnał, przypomina on trochę sygnał ze zmodulowanym współczynnikiem wypełnienia, czyli pwm. Można by bez problemu wykorzystać pwm do takiego sterowania, ale w trybie 14 licznika pierwszego, gdzie to maksymalna wartość dla licznika jest określana poprzez rejestr ICR1, a czas impulsu na wyjściu określa nam rejestr OCR1A oraz OCR1B (zależnie od wyjścia). W ten sposób otrzymujemy dokładnie wyregulowaną częstotliwość, oraz wypełnienie.
Poniżej przedstawiam prosty program służący do sterowania serwem.
#define F_CPU 1000000 #include <avr/io.h> int main() { DDRA = 0xff; //konfiguracja portow
TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //tryb pracy licznika(15), ustawienie prescalera na 1,
TCCR1B = (1<<CS10)|(1<<WGM12)|(1<<WGM13); //ustawienie wyjścia z licznika
ICR1 = 20000; //ustawienie okresu na 20ms(czestotliwosc 50Mz) OCRA1 = 2000; //określenie czasu impylsu }
Jak widać wcale nie jest to takie trudne. Komentarze wydaje mi się, że mówią wystarczająco dużo, więc nie opisuje szczegółów. Częstotliwość kwarcu ustawiona na 1MHz i preskalera na 1 znacznie ułatwia obliczenia. W takim programie można także sterować drugim serwem, a jego ustawienie określa rejestr OCR1B.


RaV
/ 21 października 2011Bardzo ciekawy, przydatny artykuł. Życzę więcej takich wpisów.