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



Teraz jest 9 sty 2025, o 19:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 13 wrz 2016, o 13:17 
Offline
Użytkownik

Dołączył(a): 19 sty 2015
Posty: 29
Pomógł: 0

Witam wszystkich!!
Mam problem z wysterowaniem serwomechanizmów. Korzystam z ATmegi32, 16MHz. Wykorzystuję programowe pwm, wbudowany przetwornik ADC. Do sterowania służy joystick.
O ile jedno serwo udało mi się wysterować i działa stabilnie, bez żadnych niechcianych drgnięć o tyle przy dwóch serwach mój sposób się już nie sprawdza, ponieważ działają one niestabilnie (a co dopiero bedzie przy 6). Proszę o pomoc, jakiś pomysł, nakierowanie mnie na właściwą ścieżkę :D

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

_________________
sig off ;(



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

Dołączył(a): 26 mar 2014
Posty: 34
Pomógł: 11

Lepszym sposobem było by sterowanie serwami jedno po drugim (zwłaszcza kiedy ma być ich 6) tzn. kiedy ustawisz wyjście serwa w stan wysoki i czekasz 1,5 - 2,5ms, to wtedy ustawiasz stan niski dla tego serwa, a dla kolejnego dopiero w tym momencie ustawiasz stan wysoki i tak po kolei dla wszystkich serw.
Sygnał sterujący jednym serwem trwa 20ms, więc dzieląc go przez 2,5ms (maksymalny czas trwania stanu wysokiego), wychodzi że w tym czasie można po kolei wysterować do 8 serw.

Wygląda to mniej więcej tak (przykład dla 2 serw, atmega8, taktowanie 8MHz):
Inicjalizacja timera:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obsługa przerwania:

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


Wartość OCRA oznacz czas po jakim włączane są kolejne serwa, a do OCRB wpisujesz wartość w zależności od położenia serwa od 1500 do 2500 ale tak żeby nie przekroczyć wartość w OCRA (wtedy nie wykona się przerwanie COMPB).
W ten sposób można zrealizować to na jednym timerze, z precyzją do 1000 pozycji serw (teoretycznie :) ), a przerwania od timera nie obciążają zbytnio mikrokontrolera, bo przerwanie wywoływane jest co ok 1ms (w zależności od położenia danego serwa), a nie jak w twoim przypadku co kilkanaście us.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2016, o 17:48 
Offline
Użytkownik

Dołączył(a): 26 cze 2016
Posty: 186
Pomógł: 7

Mario17 napisał(a):
Lepszym sposobem było by sterowanie serwami jedno po drugim (zwłaszcza kiedy ma być ich 6) tzn. kiedy ustawisz wyjście serwa w stan wysoki i czekasz 1,5 - 2,5ms, to wtedy ustawiasz stan niski dla tego serwa, a dla kolejnego dopiero w tym momencie ustawiasz stan wysoki i tak po kolei dla wszystkich serw.
Sygnał sterujący jednym serwem trwa 20ms, więc dzieląc go przez 2,5ms (maksymalny czas trwania stanu wysokiego), wychodzi że w tym czasie można po kolei wysterować do 8 serw.


Nie wiem jak teraz, ale drzewiej to standardowo impuls sterujący był co 20 ms, więc to chyba bardzo dobra rada.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 07:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2015
Posty: 116
Pomógł: 16

Przy 6 serwach ,rozważ zastosowanie układu PCA9685 firmy NXP. Jest to 16 kanałowy, 12 bitowy kontroler PWM sterowany magistralą I2C.
Pozdr.



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 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