Witam, mam pytanie odnośnie sterowania serwo tower pro sg90 mini. W datasheet jest informacja o tym, że steruje się sygnałem o wypelnieniu 1-2ms, którego okres wynosi 20ms (50 Hz ). Po napisaniu ponizszego kodu okazuje się ( lub pomylilem sie w obliczeniach ), ze wypelnienie ktorym steruje się serwo wynosi od 1 do 5 ms.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ze względu na budowe projektu nie moge uzyc timera 16 bitowego, wiec sygnal PWM generowany jest programowo poprzez timer 8 bitowy. Powyzszy kod przedstawia inicjalizację timera.Tryb CTC, układ taktowany z częstotliwością 8 Mhz, preskaler ustawiony na 8 , wartość rejestru OCR0 równa 50. 8 MHz / 8 / (49+1) daje częstotliwość generowania przerwań 20 kHz. Aby osiagnac wymagany okres 50 Hz, napisalem programowy dzielnik czestotliwosci.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zmienna inter inkrementuje sie z kazdym wywolaniem przerwania az do wartosci 400. 20 kHz / 400 = 50 Hz. Wyjscia PB1 oraz PB2 ustawianesą przy wartosci zmiennej inter rownej 0 , a zerowane w zaleznosci od tego co wpisze do zmiennej time i time2 ( co tworzy wypelnienie sygnalu ). Zatem jesli wszystko policzylem poprawnie to powinienem sterowac serwomechanizmem w zakresie wartosci zmiennej time i time 2 od 10 do 20. Tymczasem wartość 30 oznacza ustawienie sie serwomechanizmu na srodku, 10 maksymalnie w lewo, 50 maksymalnie w prawo.
Prosiłbym o weryfikację kodu
Pozdrawiam