ich will meinen brushless regler mit dem mikrocontroller ATmega128 ansteuern! dazu habe ich folgendes programm geschrieben: das programm gibt alle 20ms einen puls zwischen 0.5 und 2ms aus! Grundsätzliche frage: funktionieren servo ansteuerungen eigentlich alle mit diesen zeiten, oder wie werden diese angesteurt? könnt ih mal einen blich übers programm werfen, könnte funktionieren oder? #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 14745600 // clock #define PRESCALE_FACTOR 8 // prescale factor 8 #define PRESCALE_FACT (1<<CS11) #define PULS_PERIOD 50 //50Hz -> 20ms #define MAXPULS_FREQ 500 // 500Hz -> 2ms #define MINPULS_PRESC 4 //MinPuls ist 4 mal kleiner als MaxPuls #define TIMERSTART_VALUE 0-65536/(F_CPU/PRESCALE_FACTOR)*PULS_PERIOD //passt den startwert für den timer an, damit timer genau 20ms braucht bis overflow #define MAXTIMER_VALUE F_CPU/(MAXPULS_FREQ*PRESCALE_FACTOR) #define MINTIMER_VALUE F_CPU/(MAXPULS_FREQ*MINPULS_PRESC*PRESCALE_FACTOR) SIGNAL(SIG_OVERFLOW1){ PORTB|=(1<<PB5); TCNT1=TIMERSTART_VALUE; } void init(){ DDRB|=(1<<PB5); // set PB5 (OC1A) to output /***normal timer mode of operation***/ TCCR1A|=(1<<COM1A1); // clear OCnx on compare match TCCR1B|= PRESCALE_FACT;// timer prescaling TIMSK|=(1<<TOIE1); //overflow interrupt enable TCNT1=TIMERSTART_VALUE; sei(); //enable interrupts } //speed Werte 0-255 erlaubt void setMotorSpeed(unsigned char speed){ OCR1A=TIMERSTART_VALUE+MINTIMER_VALUE+(MAXTIMER_VALUE-MINTIMER_VALUE)/25 5*speed; } int main(void){ init(); setMotorSpeed(128); while(1); return 0; }
Ja, die Servos werden mit diesen Pulsen angesteuert, die Machbarkeit nicht immer einfach. Bedenkend, dass das Minimum zwischen 0.8..1ms und das Maximum bei 1.6..2.2ms sein soll, welche Aufloesung haettest du denn gerne ? 8bit ? 8bit auf 1.4ms verteilt waere dann machbar mit einem 5.6MHz clock oder schneller, ohne Vorteiler. Der 2.2ms Counter muesste dann auf ca 400 hoch zaehlen. Dh, der PWM muesste auf der Pulsbreite mindestens 9 bit haben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.