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.