Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 10 kwi 2026, o 04:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
 Tytuł: servo sg90
PostNapisane: 27 gru 2015, o 19:39 
Offline
Użytkownik

Dołączył(a): 31 mar 2014
Posty: 43
Pomógł: 0

Witam , probuję napisać program do sterowania dwoma sg90, steruje się nimi poprzez pwm podając impuls od dlugosci od 1-2ms, całkowity okres 50Hz. Wykorzystuje atmege 32, timer 1 mam już zajęty także nie mogę sterować za pomocą fast pwm. Próbuję to zrobić poprzez tryb ctc . Taktowanie procesora 8Mhz, preskaler 1024, do OCR0 wpisana na stałe wartość = 39. Serwo niestety nie rusza, źle policzyłem częstotliwość ? Poniżej przedstawiam część kodu. Rezultat jest taki że serwo jedynie 'pyka'

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: servo sg90
PostNapisane: 27 gru 2015, o 20:16 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Nie napisałeś jaką chciałeś mieć częstotliwość, ale sądząc po warunku i == 200 to będzie 10 000 Hz (okres 0,1 ms). Ty masz teraz 195 Hz.
Proponuję preskaler 8 i wartość w OCR = 8 MHz / 8 / 10 kHz - 1 = 99.

Skoro cały okres wynosi 20 ms, a masz warunek i == 200 to dla 2 ms powinien być warunek i == 20

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: servo sg90
PostNapisane: 27 gru 2015, o 22:24 
Offline
Użytkownik

Dołączył(a): 31 mar 2014
Posty: 43
Pomógł: 0

Potrzebuje częstotliwosci 50Hz, 8000000/1024 = 7812,5 Hz/ 50 = 156 taka wartosc wpisywalem na poczatku do OCR0. Włączałem pin przy warunku 0 wyłączalem przy warunku 2 . Zmniejszyłem wartość OCR0 czterokrotnie zeby zwiekszyc rozdzielczosc, dlatego wartosc w OCR0 jest teraz 39. Zeby wysterowac serwo trzeba dawać impulsy o czasie od 1-2ms

------------------------ [ Dodano po: 12 minutach ]

Narazie chciałem zrobić to w inny sposob po porstu na delayach, w momencie kiedy wpisze recznie wartości tak jak ponizej, jest ok , serwo sie obraca, ale w momencie kiedy chce aby serwo obracało się powoli od jednej strony do drugiej, poprzez zwiększanie zadanego impulsu tak jak jest to zakomentowane, serwo obraca się powoli ale startuje w zupełnie innym położeniu o jakieś 40 stopni dalej. Próbowałem już różnymi pętlami, a nawet w tak prosty sposób jak poniżej i nadal ustawia się w złym położeniu, jest tu coś źle czego nie widzę ?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: servo sg90
PostNapisane: 28 gru 2015, o 19:48 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

ostr napisał(a):
Potrzebuje częstotliwosci 50Hz

Zastanów się, aby zwiększyć licznik i do 200 przerwanie musi być wywoływane 200 razy częściej niż 50 razy na sekundę.

Odnośnie _delay_us(up) to przeczytaj drugą uwagę http://www.nongnu.org/avr-libc/user-man ... delay.html
Można zrobić to tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO