Skocz do zawartości

Zasilanie serwomechanizmu


Pomocna odpowiedź

Napisano

Witam

Jakiego zasilacza użyć do zasilania serwomechanizmu, czy zasilacz komputerowy będzie dobrym rozwiązaniem (będzie to ramie więc nie ma potrzeby przemieszczania się)?

od bidy da rade zasilacz z linii 5V - jeszcze sobie sprawdz jakie charakterystyki ma te Twoje serwo na takim napieciu. Czy nie spada mu mocno sila.

podłączyłem zasilanie z zasilacza komputerowego no i problem taki że serwo nie działa, jak je chwycić to czuć że niby lekko skacze ale nic z tego nie ma. Na Wikipedii możemy przeczytać nt. zasilacza impulsowego jakim jest zasilacz komputerowy, że:

źle skonstruowany lub zbudowany ze złej jakości elementów może powodować zakłócenia na wysokiej częstotliwości oraz niestabilną pracę podłączonych urządzeń
Czy to może być przyczyną nie działania serwa (HX12K - nowe)?

P.S ubiegając pytania, tak - to jest słabej jakości zasilacz marki Codegen 😎

Atmega8, program przepisany z książki, działa, sprawdzone miernikiem końcówki PWM (skacze od 1 do 3V etc.)

przypadkowo atmege zablokowałem więc na wszelkie pytania dotyczące oprogramowania odpowiem w poniedziałek, ale załóżmy z góry że program działa dobrze.

kwarc 10Mhz, reload = 10, próbowałem też z 6,5 i 20

okazuje się, że to nie zasilacz był winny tylko ja. Nie ustawiłem fusebitów na uC i szczerze mówiąc nie wiem jak to zrobić, mam kwarc 10Mhz, program bascom avr czy może mi ktoś wyjaśnić którą opcje wybrać?

Jakiś czas temu znalazłem taką przydatną listę:

1. 0000 = częstotliwość z zewnętrznego generatora,
2. 0001 = oscylator w wewnątrz procesora o częstotliwości 1MHz,
3. 0010 = wewnętrzny oscylator 2MHz,
4. 0011 = wewnętrzny oscylator 4MHz,
5. 0100 = wewnętrzny oscylator 8MHz,
6. 0101 = zewnętrzny oscylator RC 1MHz,
7. 0110 = zewnętrzny oscylator RC 2MHz,
8. 0111 = zewnętrzny oscylator RC 4MHz,
9. 1000 = zewnętrzny oscylator RC 8MHz,
10. 1001 = zewnętrzny kwarc z kondensatorami 2MHz,
11. 1010 = zewnętrzny kwarc z kondensatorami 2-4MHz,
12. 1011 = zewnętrzny kwarc z kondensatorami 4-6MHz,
13. 1100 = zewnętrzny kwarc z kondensatorami 6-8MHz,
14. 1101 = zewnętrzny kwarc z kondensatorami 8-10MHz,
15. 1110 = zewnętrzny kwarc z kondensatorami 10-16MHz.

Ja ją sobie wydrukowałem i polecam to zrobić każdemu, chyba że komuś się chce tego uczyć na pamięć.

w programie brak pozycji 1110

//ustawiłem tak

CKSEL[3..0] - Fusebits opcję Fusebit A987 - 0001:Internal RC oscylator 1 MHz

Zmienić ustawienia na – 1111:1111 external XTAL.

Po tej zmianie zatwierdzić ją przyciskając JEDEN RAZ przycisk po prawej stronie [WRITE FS].

CKOPT - Fusebits High opcję Fusebit H – 1:CKOPT 1

Zmienić ustawienia na – 0:CKOPT 0

Po tej zmianie zatwierdzić ją przyciskając JEDEN RAZ przycisk po prawej stronie [Write FSH].

nie zablokował się, ale nie wiem czy pracuje na 10Mhz ($crystal 10000000)

$regfile = "m8def.dat"
$crystal = 10000000




     Config Portc = Output
     Portc = &B11111111


Do
   Portc.5 = 0
   Wait 1
   Portc.5 = 1


Loop

End

Program tego typu też nie działa, a mianowicie na pinc 5 cały czas 0, program do sterowania serwami (taki najprostszy) też zachowuje się tak samo.

jakieś pomysły?

Polecam korzystać z AVR8 Burn-O-Mat, program naprawdę godny polecenia, współpracuje z avrdude, dzięki temu także z USBasp. Używając go nie musimy uczyć się na pamięć znaczenia poszczególnych fusebitów (które w zależności od uC są i tak różne), wybranie odpowiedniego źródła taktowania sprowadza się jedynie do wybrania interesującego nas wariantu z listy.

no więc tak, doczytałem of fusach, niby ustawione lecimy dalej PWM prze lutowany na nóżkę PD.1

$regfile = "m8def.dat"
$crystal = 10000000
   Config Port1 = Output
Config Servos = 1 , Servo1 = Portd.1 , Reload = 10
Do
    Servo(1) = 255
    Servo(1) = 1
Loop

program ten daje około 3,8V na nóżce serwo się nie kręci, programy z waitms działają.

screen z ustawień:

//teraz nie wiem dlaczego przy kompilacji obojętnie czego daje komunikat difference at 000xx

Atmega nie ma portu1.

Twoj kod jest błędny.

Sprawdź ten:

$regfile = "m8def.dat"
$crystal = 10000000
Config PinD.1=output

Config Servos = 1 , Servo1 = Portd.1 , Reload = 10 
enable interrupts       
Do
    Servo(1) = 255
    waitms 1000
    Servo(1) = 1
    waitms 1000
Loop
end

kod jest dobry ponieważ to jest portD.1 (przepisane z książki pana Marcina Wiązania), problem leży w płytce, ale dzięki za zainteresowanie

Kod jest błędny z samej racji nie włączenia ogólnego zezwolenia na przerwania 🙂. Pomimo wszystko, sprawdź swój program... nawet kompilować się nie chce( z powodu braku portu1 [albo to po prostu błąd przy przepisywaniu na diodę, ale myślę, że robiłeś to metodą kopiuj wklej, tylko jakim cudem kompilator nie krzyczał o błędzie])

Pomimo wszystko, wrzuć mój program w bascoma, poddaj kompilacji i wrzuć w procka...

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