Hallo
Je nach Servotyp liegt die Mitte des Drehbereichs bei Impulslängen von ca. 1ms bis 1,5ms Dauer (ms bedeutet Millisekunden oder 1/1000 Sekunde). Der Impuls sollte alle 20ms wiederholt werden.
In der orginalen asuro-Library von der CD dauert ein Sleep(1) genau 1/72000 Sekunde, Sleep(72) dauert entsprechend eine 1ms. (Bei den neueren Libs wird ein 36kHz-Timer verwendet, deshalb dauert hier Sleep(36) eine Millisekunde.) Für 20ms Impulswiederholung müßte man Sleep(20*72-Impulslänge) warten. Da Sleep() aber einen 8bit-Parameter benötigt, muss man die Impulspause auf mehrere Aufrufe von Sleep verteilen. 20*72 wären 1440 Sleep(1)-Aufrufe, davon muss man noch die Impulsdauer abziehen und den Rest auf 255er Sleep()-Aufrufe verteilen:
(ungetestet)Code:#include "asuro.h" #define libversion 72 // 72kHz oder 36kHz Library int Impulspause; char Servoimpuls = libversion; // 72 (oder 36) für eine Millisekunde (Servomitte?) int main(void) { Init(); while(1) { BackLED(OFF,ON); // Impulsstart Sleep(Servoimpuls); BackLED(OFF,OFF); // Impulsende Impulspause=libversion*20-Servoimpuls; // Anfang Pause; Dauer berechnen while(Impulspause > 255) // 255er-Schritte { Sleep(255); Impulspause -= 255; } Sleep(Impulspause); // Restpause } return(0); }
Gruß
mic







Zitieren

Lesezeichen