Skocz do zawartości

[C] Problem ze sterowaniem serw


kampo

Pomocna odpowiedź

Witam.

Posiadam serwa: 1201MG, 1501MG, 6001HB i 1711MG (wszystkie Power HD).

Problem wygląda tak, że serwo 6001HB działa mi poprawnie z poniższym kodem, ale 1201 i 1501 w ogóle się nie ruszają (w dłoni czuję, że coś tam drga, ale mogę tymi serwami kręcić, więc nawet nie są zablokowane). Natomiast 1711 zachowuje się conajmniej dziwnie - nieważne, jakie wartości będzie mieć OCR1A, ono cały czas kręci się poza zakresem, tj. najpierw idzie do samego końca, z chęcią szło by dalej, potem wraca, zatrzymuje się po przebyciu około 45 stopni. I tak w kółko.

Kombinuję z tym PWM już od kilku dni i nie mam pojęcia, co może być nie tak, tym bardziej, że jedno serwo działa, a są sterowane niby na tej samej zasadzie.

#define F_CPU 8000000UL

int main(void)
{
TCCR1A |= (1<<WGM11) | (1<<COM1A1) | (1<<COM1A0);
TCCR1B |= (1<<WGM13) | (1<<WGM12) | (1<<CS11);

ICR1 = 19999;

DDRB |= (1<<5);

while(1) {
	OCR1A = ICR1 - 1800;
	_delay_ms(1000);
	OCR1A = ICR1 - 1000;
	_delay_ms(1000);
}
}

Kontroler to AtMega128, działa na wew. oscylatorze na 8MHz.

Pozdrawiam.

Link do komentarza
Share on other sites

spojrzałem do noty ATmegi128 i porównałem Twoje ustawienia z tabelkami. Zgodnie z tym co widzę:

-taktowanie procesora 8MHz,
-masz prescaler 8,
-używasz trybu FAST PWM z wartością TOP równą ICR1,
-wartość TOP to 1999.

Czyli z równania

Fclk / ( N * (1+TOP) ) gdzie

Fclk -taktowanie procesora,
N - prescaler,
TOP = ICR1

wychodzi częstotliwość sprzętowego generowania sygnału pwm równa 500 Hz. W przypadku serwomechanizmów modelarskich stosuje się częstotliwości około 50 Hz. Mogę się oczywiście mylić i to nie tu leży błąd.

Link do komentarza
Share on other sites

Timer wygląda dobrze, przecież okres wynosi 20000 więc częstotliwość to jednak 50Hz. Ja też bym szukał w zasilaniu, w przypadkowych resetach procesora podczas startu lub ruchu mocnego serwa itp. Trzeba zobaczyć schemat połączeń albo chociaż opis - w szczególności systemu zasilania. Z czego płytka procesora, z czego serwo itp. Jeżeli okaże się, że np. wszystko jedzie z kabelka USB, to mamy problem rozwiązany.

Warto jeszcze sprawdzić fusebity odpowiadające za 8MHz albo dla pewności pomrugać diodą z programowymi opóźnieniami = 1000ms, to jest niezły test rzeczywistego taktowania CPU.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Timer wygląda dobrze, przecież okres wynosi 20000 więc częstotliwość to jednak 50Hz. Ja też bym szukał w zasilaniu, w przypadkowych resetach procesora podczas startu lub ruchu mocnego serwa itp. Trzeba zobaczyć schemat połączeń albo chociaż opis - w szczególności systemu zasilania. Z czego płytka procesora, z czego serwo itp. Jeżeli okaże się, że np. wszystko jedzie z kabelka USB, to mamy problem rozwiązany.

Warto jeszcze sprawdzić fusebity odpowiadające za 8MHz albo dla pewności pomrugać diodą z programowymi opóźnieniami = 1000ms, to jest niezły test rzeczywistego taktowania CPU.

Fusebity są ok (z 5x sprawdzałem 😃 ). Jeśli chodzi o układ, to wszystko jest na płytce stykowej, zasilane z LiPo za pośrednictwem stabilizatora liniowego 5V, 1A. Ten się trochę grzał, ale przyjąłem, że to dlatego, że przepływa przez niego prąd już w okolicach 1A, a nie spalił się, więc serwo nie wyciska > 1A. Może faktycznie to jest wąskim gardłem, dlatego słabsze serwo działa, a mocne nie, ale tu znowu wracamy do serwa 1711 - słabe, a nie działa (przynajmniej poprawnie) 😉

Mam też równolegle podłączoną diodę do sygnału PWM i ona zachowuje się normalnie, tj. świeci jaśniej i mniej jaśniej. Także reset procka bym raczej wykluczył.

Pozdrawiam.

Link do komentarza
Share on other sites

Mamy winowajców: stabilizator 1A i płytka stykowa

Przy momencie około 12kg serwo będzie pobierało dużo większy prąd niż 1A. Niestety nie znalazłem nigdzie deklaracji producenta. Najlepiej będzie jak wymienisz stabilizator.

Jeśli masz dostęp do zasilacza stabilizowanego na minimum 5A to podepnij swoje serwo i wtedy pomierz prądy jakie tam płyną. Ciekawym doświadczeniem będzie też podpięcie sondy prądowej oscyloskopu i zobaczenie co się dzieje z prądem przy starcie Twojego serwa.

Nie wiem jak podajesz zasilanie, ale płytka stykowa nie nadaje się do pracy przy wyższych prądach.

  • Lubię! 1
Link do komentarza
Share on other sites

Stabilizator grzeje się od każdego prądu, nie musi to być 1A. Oczywiście im więcej prądu tym bardziej. Przekraczając 1A nie spalasz go, tylko scalak zmniejsza swoje napięcie wyjściowe. Jeżeli serwo podczas startu lub pracy bierze tyle lub więcej, 5V spada i procesor się resetuje (np. w ciągu 1ms, bo tyle trwa szpilka prądu) po czym podejmuje pracę i PPM jest niby wciąż generowany. Umieść w programie opóźnienie zaraz po starcie np. 1 sekundowe a dopiero po tym czasie zaczynaj generować PPM. Wtedy każdy reset będzie widoczny jak przerwa w impulsach i łatwo to dostrzeżesz. Masz włączony BOD? Na jakim poziomie napięcia?

Płytka stykowa jest dobra co najwyżej do zapalania diodek, ale nie zasilania silników. Podłącz masę serwa wprost do minusa akumulatora bez pośrednictwa styków. Czy możesz dać osobne stabilizatory na procesor i na serwa? Wspólne zasilanie silników/serw i logiki cyfrowej to proszenie się o kłopoty. To w połączeniu z płytką stykową daje już mieszankę wybuchową..

EDIT: Pisaliśmy razem 🙂

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Wtrącę coś jeszcze nt. grzania się stabilizatora napięcia. Będzie się on grzał nawet przy małym prądzie, ale i tak wszystko zależy od mocy jaka na nim jest tracona.

P = U * I

Zakładając, że zasilasz z akumulatora 12VDC i za stabilizatorem chcesz uzyskać np. 5VDC, to mamy 7V spadku napięcia i jeszcze przepuścisz przez niego 1A to moc wynosi P = 7V * 1A = 7W. Standardowa obudowa TO-220 rozprasza chyba ok. 1,5W. Za długo wtedy nie pożyje taki stabilizator 😋

  • Lubię! 1
Link do komentarza
Share on other sites

Czyli byłem w grubym błędzie, myśląc, że złożę wstępnie układ na płytce stykowej, a do tego, że serwo nie pobiera dużo prądu 😥

Na stabilizatorze mam założony radiator, a grzał się tak, że jak zasilanie było włączone kilka minut, to dmuchałem/wyłączałem na chwilę. Zasilane było z akumulatora 11,1V. Co do 1A na stabilizatorze, to byłem pewny, że jeśli ten prąd przekroczę, to stabilizator się uszkodzi nieodwracalnie, a nie że tylko spadnie napięcie wyjściowe. Z założenia zasilanie dla serw i dla logiki będzie osobno (z jednego akumulatora).

BOD mam wyłączony. Przyznam, że dopiero teraz się dowiedziałem, że coś takiego istnieje.

Generalnie podłączyłem serwo bezpośrednio do akumulatora, PWM i działa 😅 Sam wpadłbym pewnie na to za miesiąc, jeśli w ogóle. Wielkie dzięki panowie 😉

Pozdrawiam.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.