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



Teraz jest 3 mar 2026, o 16:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 
Autor Wiadomość
PostNapisane: 13 lis 2016, o 17:59 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

Witam

Jestem totalnie początkujący i potrzebuje pomocy w napisaniu kodu do sterowania serwomechanizmami. Posiadam serwo sg90 oraz mikroprocesor atmega8, próbowalem kopiowac rozne kody z sieci ale żaden nie działał. Prosze o jakies wskazówki od czego zacząć i jak uruchomic moje serwo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 18:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

witam,
Najpierw powinieneś zacząć od poznania sposobu sterowania tym serwem.
Trzeba dostarczyć co 20ms sygnał o długości od 0,5ms do 2,5ms.
Im bliżej 0,5 tym bardziej serwo wychyli się w jedną stronę, a im bliżej 2,5ms tym bardziej w drugą stronę. Pozycja środkowa 0° to sygnały około 1,5ms.

Następnie odpalasz timer - dobrze jest użyć PWM sprzętowy, tak ustawiony by powtarzał sygnał co 20ms.

------------------------ [ Dodano po: 11 minutach ]

Trochę masz w tym wątku. http://forum.atnel.pl/topic16532.html#p171931
Musisz przejrzeć notę od ATmega8 i ustawić timer np. tryb14, potem wartościami ICR uzyskać 20ms, a OCRem długość sygnału - (+-90°)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Tu masz ds: http://www.ee.ic.ac.uk/pcheung/teaching ... asheet.pdf
Piszesz funkcję pwm(uint8 pos) w której wysyłasz pwm np. pwm( 0 ) to równo 1ms czyli w lewo, a pwm(50) to 1.5ms czyli środek i pwm(100) to 2ms czyli w prawo i masz w ten sposób sterowanie.
Jak funkcję taką zrobić, masz opisane w BB.

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 19:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

ustaw timer_1 w rejestrach TCCR1A i TCCR1B .
np.
tryb 14 fast pwm ustawiając WGM'y, wg noty.
uc na 8 MHz, preskaler np na 8, ICR na 20000, to otrzymasz f=50Hz.(20ms).
Potem ustaw reakcję na porównanie z OCR np
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

nie zapomnij ustawić wyjścia sprzętowego PWM na OC1A , jest na PD5.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i zmieniając wartość OCR1A w zakresie np.=1000 (1ms) do =2500 (2,5ms) serwo powinno reagować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 21:22 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

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


mam cos takiego ale niedziala i nie wiem w czym jest problem



Popraw wklejanie kodów topic14999.html --- SunRiver



Ostatnio edytowano 13 lis 2016, o 22:16 przez Theecco, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sie 2013
Posty: 165
Lokalizacja: Sycyna Południowa
Pomógł: 4

Testowałem ostatnio to serwo na tym kodzie na Atmedze328, taktowanie 8MHz, powinno działać na atmedze8:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie wiem czy taki urok serwa czy ja coś nie tak robiłem w kodzie, ale jak wpisałem do rejestru OCR1A wartość 0 to serwo skręcało w prawo na max wartość i dość mocno się grzało dlatego w kodzie jest
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
która temu zapobiega.



Ostatnio edytowano 13 lis 2016, o 22:04 przez hopek, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 21:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Skoro ICR jest 19999
To wpisałeś OCR.. Z wartością 19999-800=19199
A w rejestr TCCR1A COM1A1 , czyli załącza przy porównaniu z ICR.
A stan niski przy OCR.
Sygnał jest o niebo za długi.
Albo OCR zmniejsz do 800-2200, albo wpisz w TCCR1A tak żeby przy porównaniu był stan niski.
CSy wielką literą. I czy masz 8 MHz ?
I wklej kod w syntax C.!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 22:18 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

Zmieniłem OCR i dalej nic



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 22:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

preskaler masz ustawiony na 1, to czy uc jest na 1MHz ?

------------------------ [ Dodano po: 1 minucie ]

sorka, CS10 i CS11 to 64.

------------------------ [ Dodano po: 3 minutach ]

a.. to u kolegi hopek są oba. :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 22:28 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

tak



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 22:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

a wprowadziłem cię w błąd z pinem :roll:
OC1A jest w ATmega_8 na PB1.
to w ATmega_32 jest na PD5. :?

------------------------ [ Dodano po: 4 minutach ]

i wpisz większy delay bo co 100ms zmiana w skrajne położenia to dość szybko. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 22:49 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

zmieniłem na PB1, ustawilem taktowanie 8Mhz, preskaler ustawiony na 8 dalej nie dziala



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 22:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

jak możesz to wklej tu jeszcze raz kod ten aktualny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2016, o 22:58 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

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  
PostNapisane: 13 lis 2016, o 23:24 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

DLA ATMEGA8 8MHz ...

ICR1=20000; // tu definiujesz 50Hz (powinieneś to wiedzieć)

Oczywiście PWM powinien być zakresie 30 do max 60Hz ....

Tu masz jak ustawić Timer1 Fast PWM


TCCR1A|=(0<<COM1A0)|(1<<COM1A1)|(0<<COM1B0)|(0<<COM1B1)|(0<<FOC1A)|(0<<FOC1B)|(1<<WGM11)|(0<<WGM10);
TCCR1B|=(0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(0<<CS10);



Wiesz co tu wyżej się dzieje ??



Zasilanie serwa 5V poza procem .... sygnał powinieneś mieć na PB1
Oczywiście zakładam że ci się chciało sprawdzić co jest na którym przewodzie serva
jak również obejrzałeś jakie sygnały i ich czasy dają jaki efekt ??

w pętli głównej chyba wiesz co dać ....

(jak mówiłem ... od początku ... tak dalej będziesz miał problem)
Nie mówiac że zapewne jeszcze źle popodpinałeś ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2016, o 13:20 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

Dziękuje bardzo po zmodyfikowaniu ustawień Timera wszystko działa
wklejam działający kod moze komus sie przyda :)
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  
PostNapisane: 14 lis 2016, o 16:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Gratulacje!! Muszę powyciągać serwa z przepaści szufladowej :)

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 12:46 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

dzisiaj odpalilem ponownie moj kod sterujący i nie dziala serwo piszczy i nie porusza sie wie ktos dlaczego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 13:02 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

SG90 ma to do siebie ...
czasem wystarczy je ręcznie na wyłaczonym zasilaniu poruszać ...
i zmiany w programie ... coś zmieniałeś ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 13:16 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

czyli poprostu jest to wina sg90 a nie kodu? w kodzie usunąłem (0<<FOC1A)|(0<<FOC1B) (0<<ICNC1)|(0<<ICES1) ale dopiero po tym jak odpalilem serwo i zaobaczylem ze niedziala


serwo wychyla sie tylko w jedną strone i nieodbija w drugą



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 14:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Moje serwo 92R, działa w zakresie 0,5 - 2,5 ms.
Potestuj z wartościami OCR1A. Od 500 - 2500.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 14:15 
Offline
Nowy

Dołączył(a): 13 lis 2016
Posty: 10
Pomógł: 0

potestowane zadnej zmiany ale podłączyłem drugie serwo rowniez sg90 i ono wogóle nie reaguje



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 15:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Skoro jedno działa, to je odepnij i podłącz to drugie. Bez żadnych zmian w programie, będziesz wiedział czy to serwo czy soft.
Mam zasadę której staram się trzymać - jedna zmiana na raz :)

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 17:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

A może jest tak, ze męczysz się z programem, a problemem jest zasilanie? Pamiętaj, że serwa są dość prądożerne. Spróbuj na zewnętrznym zasilaczu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2016, o 17:31 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

No jak puszcza z USBASP lub z USB zasilanie na SG90 ... to sie może zdziwić :P

Nie tylko stabilnością działania ...

co akurat w przypadku SG90 można pominąc bo są wysoce niestabilne serva
i ich charakterystyka bynajmniej jest ... pomijalna -- niska trwałość i jakośc zębatek, i potencjometru dają się znac juz
po kilkunastu minutach używania ...

Niemniej ... zacząć należy od programu przywrócić stan początkowy , sprawdzić zasilanie i dopiero pisac że jest problem
zakładam że zestaw to trochę chińskiego drutu, stykówka i takie tam ... to tez dobrze nie wróży ...

o tym jest setki razy pisane na forum ... ale najlepiej napisać no nic nie robiłem i nie działa, a działało :) :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2016, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Gdyby ktoś nie był pewien czy działa jego serwo. !!!
Na tym prostym kodzie właśnie śmiga SG92R. ;)
ATmega_8, 8MHz,
W tym przypadku, podawany jest sygnał co 20 ms.
Długość sygnału 0,5ms. - 2,5ms. na PB1.

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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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