Skocz do zawartości

Zasilanie serwomechanizmu


Pomocna odpowiedź

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


Config Portd = Output
Config Servos = 1 , Servo1 = Portd.1 , Reload = 10

 Enable Interrupts


Do
    Servo(1) = 255
    Wait 1
    Servo(1) = 0
    wait 1
Loop
End
End

nadal nic, nowa płytka, tak samo jak wcześniej programy ze zwykłą zmianą stanu portu np po 1 sekundzie działają bez zarzutu, a przy tym brak jakiegokolwiek sygnału na wyjściu.

A jakim napięciem zasilasz tą ATmegę? Niektóre serwa potrzebują sygnału w którym stan wysoki ma 5V.

Masz jakikolwiek sprzęt, który jest w stanie sprawdzić, czy na nóżce pojawia się sygnał PWM?

Ogółem tą funkcją w bascomie niewiele wskórasz (mam złe doświadczenia). Pogoogluj o wykorzystaniu sprzętowego PWM do tego celu, albo spróbuj na funkcji pulseout...

Nawyk ma rację, spróbuj zrobić to sam, zamiast korzystać z jakichś gotowych funkcji, bo one nigdy nie wiadomo, co robią (przeważnie robią dużo, długo i bez sensu).

O BASCOMie nie mam pojęcia, ale w C coś takiego...

int main(void)
{
DDRB |= 0b110;
TCCR1A = 0b10100010;	// Clear OC1A/B on compare match, Fast PWM mode
TCCR1B = 0b00011010;	// clkIO/8 = 1MHz
ICR1 = 20000;			// TOP value -> period = 20ms
OCR1A = 1500;		// All values in [us]
OCR1B = 1500;
while(1);
}

...powinno w ATmedze8 taktowanej 8MHz ustawić serwa podłączone do pinów B.1 i B.2 w pozycji środkowej. Pozycję serw zmieniasz modyfikując OCR1A i OCR1B w zakresie (to zależy od serwa) powiedzmy 900..2100.

Ja oprogramowałem ostatnio robota HEXOR II, dzięki "Config servos itd. " i muszę przyznać, że jak na tak prymitywny sposób wysterowania ,serwa hexora radziły sobie bez problemu. W razie zainteresowania się tą dyrektywą, chętnie pomogę. Proszę nas poinformować jeszcze o ustawieniach fusebitów (mam nadzieje że dzielnik przez 8 dawno został wyłączony)

Program poniższy musi działać. Sprawdź dokładnie czy na serwa podajesz napięcie ok 5 V oraz czy połączenie serwa z kontrolerem jest poprawne.

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

Config Servos = 1 , Servo1 = Portd.1 , Reload = 5
enable interrupts       
waitms 10
Do
    Servo(1) = 150
    waitms 800
    Servo(1) = 125
    waitms 800
 Servo(1) = 175
    waitms 800
Loop
  • 1 miesiąc później...

no więc Panowie i Panie, problem rozwiązany już dawno temu, ale dopiero teraz mi się przypominało o tym temacie a więc, jak usłyszycie to spadniecie z krzeseł...podawałem sygnał na masę a nie na kabel sygnałowy.

Wiem że to bardzo trywialne lecz niestety w błąd wprowadził mnie sprzedawca który to źle opisał kable.

// zbędne usunąłem // treker

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