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



Teraz jest 6 kwi 2026, o 17:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
Autor Wiadomość
PostNapisane: 6 maja 2015, o 19:47 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Witam,

Sprzęt:
-Atmega644P + kwarc 16mgh,
-Serwo TowerPro GS-5010, (na pinie PD5/OC1A)
-potencjometr A10k. (na pinie PA0/ADC0)
-środowisko Eclipse Luna,
-Fusbity ustawiane za pomocą MkAVRCalculator, programator Atnel.

Problem:
Za pomocą załączonego kodu, gdy steruje potencjometrem, ciężko ustawić je w zadanej pozycji. Albo szarpie i nie może się ustawić albo od razu przesuwa się do końca i szarpie. Pewnie coś źle zrobiłem w kodzie. Takie problemy mam zarówno na taktowaniu obecnym 16mgh jak i na fabrycznym 1mgh. Pewnie coś źle obliczyłem.

Może ktoś mądrzejszy ode mnie poradzi co tu jest nie tak?

Oto kod:

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: 6 maja 2015, o 20:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

...nie za dużo ciut ? :)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 20:17 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Zmniejszyłem zakres do:

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


Jest trochę lepiej ale dalej serwo i orczyk wykonują drgania w każdą stronę. Nie można tego jakoś zniwelować?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 20:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Myślałem, że zauważysz; przedtem ICR miałeś 320.000 - Twoim zamiarem ( chyba) było 32.000
Kiedyś bawiłem się serwem, ale poszedłem inną drogą - jak chcesz to spróbuj:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Co prawda inny uC, ale to nie problem.
Szczerze mówiąc nie pamiętam jak to chodziło, a teraz nie chce mi się spinać tego żeby sprawdzić.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 21:58 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Może te filmy zbliżą problem. Nadal gdy chcę zatrzymać serwo zaczyna ono drgać. Na pewno jest gdzieś jakaś liczba skopana w kodzie, tylko że ja nie potrafię jej odnaleźć :( Proszę pomóżcie.

Oto filmy:

[youtube]
https://www.youtube.com/watch?v=QpwNJqa ... e=youtu.be
[/youtube]

[youtube]
https://www.youtube.com/watch?v=Px0jEcXOJtA
[/youtube]

Nie mogę do tego dojść. Wszędzie gdzie patrzę to wszystkim się ładnie serwo obraca tylko mi tak skacze...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 22:22 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

A to nie są czasem szumy z ADC?
Jak wbijesz klawiszami jakieś zadane wartości, też jest to samo?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2015, o 22:27 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Szumy z ADC? Nie pomyślałem o tym... Jak z palca wbijam programowo jakąś wartość to nie drga. Ustawia się jak trzeba i stoi. Jak sprawdzić w takim razie czy to szumy? Jakiś filtr zastosować jakąś metodą?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 15:26 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

Już sprawdziłeś.
Do przyswojenia seria poradników o ADC, a w nim o uśrednianiu wyników.
Możesz też potestować z innymi potencjometrami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 20:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Uśrednianie jest bardzo ważne. W swoich projektach mam co najmniej wynik z 16 pomiarów, a czasem z 64. Poprawa widoczna jest gołym okiem.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 20:49 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Już się zabieram za poradniki. Spróbuję to zrobić na mikrostykach i pewnie przeniosę temat do innego działu. Dzięki za pomoc, teraz już wiem gdzie szukać przyczyn.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 21:06 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Witam,

Sprzęt:
-Atmega644P, takt. 1mgh,
-serwo SG-5010 (PB0),
-środowisko Eclipse,
-mikrostyki (PA0, PA1),

Chciałbym kierować serwem jak silnikiem, wciskam przycisk jedzie aż osiągnie granicę czyli 180stopni, puszczam przycisk to przestaje jechać. Dane są dwa mikrostyki odpowiednio w lewo i prawo. Po wgraniu kodu serwo zaczyna zachowywać się jak chce i zaczyna kręcić się samo we wszystkich kierunkach. Oto kod:

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


Czy ktoś wie co zrobiłem nie tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 21:42 
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

A chcesz korzystać ze sprzętowego PWM czy nie? Widzę że masz skonfigurowany Timer 1 w Fast PWM, ale nie jest podpięte do PD5/OC1A. Program powinien wyglądać mniej więcej tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W sprzętowym PWM przerwania nie są potrzebne. Wypełnienie zmienia się wpisując jakąś liczbę do rejestru OCR1A (dla kanału A)

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 21:51 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Tylko, że ja finalnie będę musiał sterować 5 serwami, każde dostanie 2 mikrostyki. Dlatego też robię to w przerwaniu by użyć jednego timera dla wszystkich serwonapędów. Gdybym miał sterować jednym serwem to ok rozwiązanie jak najbardziej, ale muszę się dowiedzieć jak to zrobić programowo. Może jakiś jeszcze inny pomysł? :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 22:13 
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

Niepotrzebnie zerujesz port A i pozbywasz się podciągania. Porównywać należy wartość timera ze zmienną odpowiadającą za wypełnienie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 22:53 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Działa elegancko! Dokładnie o to i chodziło. Ostatnie pytanie brzmi:

1. Czy można jakoś zwiększyć prędkość serwa? Regulacja ICR1 w dół trochę daje ale niewiele, poza tym serwo traci wtedy na dokładności.

Nie mogłem spać i wykombinowałem:) Mój sposób to:

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


Od razu przyspieszyło :) Chociaż tyle sam wykombinowałem bo wszystko to kolega Krauser zrobił elegancko.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 17:13 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Witam,

Napisałem taki program:
Przycisk KEY1 daj obrót 2 serw w przeciwnych kierunkach o 180stopni, przycisk KEY2 to samo w drugą stronę.
Program bez problemu się kompiluje i wgrywa, Eclipse nie pokazuje żadnych błędów. Po naciśnięciu któregokolwiek przycisku serwa jednak nie reagują.

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


Czy ktoś wie co znowu źle zrobiłem w kodzie?

Połączenia są na pewno ok bo bardzo podobny program do sterowanie ręcznego działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 17:41 
Offline
Użytkownik

Dołączył(a): 05 lip 2013
Posty: 26
Pomógł: 0

Może jestem ślepy, ale gdzie tu jest funkcja odpowiedzialna za generowanie sygnału do sterowania serwami?

A tak poza tym to sygnał PWM sterujący serwami ma częstotliwość 50 Hz, więc okres wynosi 20 ms. Stan wysoki trwa teoretycznie od 1 ms (lewa pozycja) do 2 ms (prawa pozycja).
Z doświadczenia wiem, że szerokość impulsów może być większa.W przypadku serwa TowerPro SG90 jest to 0,5 - 2,5 ms.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 17:46 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

Nie bardzo rozumiem filozofię tego programu.
Masz zdefiniowane przesunięcia bitowe:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


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


UPSS! Sorry. Coś mi na oczy padło, to inne zmienne!



Ostatnio edytowano 11 maja 2015, o 17:50 przez jerrylu, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 17:47 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Już to empirycznie sprawdziłem i sygnał od 600 do 2500 daje obrót 90stopni. Po wydłużeniu do 4500 otrzymałem obrót o 180stopni. Serwo to TowerPro SG-5010.

Funkcja za generowanie sygnału? Znaczy się czegoś tam brakuje? Posiłkowałem się tym kodem:

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


Działa na zasadzie sterowanie ręcznego. Wciskam przycisk to serwo się obraca, puszczam to się zatrzymuje. Ten kod na pewno działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 17:53 
Offline
Użytkownik

Dołączył(a): 05 lip 2013
Posty: 26
Pomógł: 0

Panicz74 napisał(a):
Funkcja za generowanie sygnału? Znaczy się czegoś tam brakuje? Posiłkowałem się tym kodem:


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


Spróbój tak:
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: 11 maja 2015, o 18:32 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Faktycznie nie dopisałem tej linijki. Po uruchomieniu tego programu serwa pracują jednak bardzo nierówno. Coś tam widzą, że coś się dzieje ale działanie wygląda tak:

https://www.youtube.com/watch?v=dKUNLwu ... e=youtu.be

Działanie ręczne działa bez problemu, więc serwa są ok.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 19:33 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Problem rozwiązany. Powodem były braki w kodzie:

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: 19 maja 2015, o 00:13 
Offline
Użytkownik

Dołączył(a): 20 mar 2015
Posty: 104
Pomógł: 0

Jeszcze taka sprawa bo zmagam się z nią już jakiś czas.

Co należy dopisać do kodu aby serwa nie ruszały jednocześnie tylko po kolei??
Zabiegi z "delay" nie pomagają, wręcz przeciwnie, serwa w ogóle nie reagują.



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: 23 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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