Skocz do zawartości

[Atmega8][BASCOM]Problem z serwem.


Pomocna odpowiedź

Napisano

Witam serdecznie.

Zaczynam przygodę z serwami. Zakupiłem TG9e i powstał następujący problem.

Z tego co widze po kodach innych użytkowników oraz po poradniach, aby ustawić serwo w danej pozycji należy wysłać na nie impuls o danym czasie trwania, w każdym razie robicie to w sposób Serwo(1)=150 np i orczyk ustawia sie na danym odchyleniu, Serwo(1)=80, inne odchylenie itp i zamykacie to w pętli loop aby ciagle to było wysyłane. Ja mianowicie wgrałem na moją atmege8 program z kompendium

:

$regfile = "m8def.dat" 
$crystal = 12000000 
Config Servos = 1 , Servo1 = Portd.1 , Reload = 10 
Config Portd = Output 
Enable Interrupts 
Dim Zmienna As Integer 'Nasze "odchylenie" serwa 
Zmienna = 150 'Czas trwania impulsu będzie wynosić Zmienna*Reload=1500us (1,5ms) 
Do 
  Servo(1) = Zmienna 
  Waitms 1000 
Loop 
End 

I serwo zachowuje się w sposób następujący. Po podłaczeniu zasilania dziwny skok w lewo (niezaleznie od kodu, nawet bez atmegi przeskakuje i to moje pytanie dlaczego) a następnie niezależnie od wpisanej wartości czy dam zmienna 150 czy 80 dąży do jednego odchylenia i to tylko w lewą stronę ! Jedyna różnica to prędkość skoków gdzyż przy zmienna 150 robi to malutkimi skoczkami a przy zmienna 80 trzy przeskoki i juz stoi. Jeżeli ręcznie przechyle je w lewo to nic sie nie dzieje , jedynie idzie od maxymalnego odchylenia po prawej o jakies 70 stopni w lewo i to jest finalne położenie w każdym przypadku. Czy ktoś jest w stanie mi pomóc? i wyjaśnic co jest tego przyczyną? może ja nie do konca rozumiem idee tego sprzętu.

z góry dziękuję i pozdrawiam

Ja też się borykam/łem z tym problemem. Zauważyłem natomiast następujące rzeczy:

Servo to potężny generator zakłóceń, który może zawiesić procesor, lub zdestabilizować jego pracę. Dobrze jest rozdzielić szynę zasilania serv i reszty elektroniki. Filtrowanie zasilanie także pomaga,W moim przypadku w pewien sposób pomogło to że CPU zasilam przez diodę + kondensator 100uF, dzięki temu skoki napięcia na zasilaniu, nie restartują mi CPU.

  • Pomogłeś! 1

To z założenia ten kod programu powinien natychmiastowo jednym przesunięciem ustawić orczyk w jednej pozycji i go tam trzymać? a po zmianie wartości na przesunąć o pewien kąt w lewo od położenia 150 i dalej stać w miejscu? Bo tak jak mówie serwo wariuje, skoczki małe robi, zatrzymuje się, nie idzie dalej , idzie w jedną stronę itp.

[ Dodano: 02-08-2011, 20:01 ]

Btw. zmienilem taktowanie z 12M na 8M gdyż na takim taktuje atmega8 (kod najprawdopodobniej pod inną)

Tak. Serwo powinno przejść do jednej pozycji i tam się zatrzymać o ile będziesz do niego wysyłał cały czas sygnał. Gdzieś czytałem, że serwa czasami mają tendencję to przesuwania pozycji neutralnej. Wtedy należy przeczyścić jakąś cześć serwa. Poczytaj coś na forach modelarskich o tym.

BlackJack Nieźle! W końcu coś ruszyło do przodu! Przy oddzielnym źródle zasilania serwo zachowuje sie calkiem inaczej, jakby troche bardziej sensownie, zaczynam kolejną próbę edycji kodu celem dojscia do ładu i składu. Kto by pomyślał!

[ Dodano: 02-08-2011, 20:23 ]

Teraz dla odmiany po zapodaniu oddzielnego układu zasilania zawsze kręci się skokowo w prawo, niezależnie od zadanej wartości wrrrrr

Nie programuję w bascomie, ale czy napewno co 20ms wysyłasz sygnał trwający około 1.5ms?

[ Dodano: 02-08-2011, 20:43 ]

A tak dokładnie co 18.5ms, bo cały cykl powinien trwać 20ms.

Nie do końca rozumiem idee tego reload itp także ciężko mi odpowiedzieć na Twoje pytanie, ale program wziąłem z kompendium wiedzy o serwach z tego forum także podejrzewam, że powinno działać 🙂 Poza tym patrzyłem na programy innych użytkowników i wszystko było zorganizowane tak samo. Może ktoś od Bascoma się wypowie?🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...