brushless controller mit PWM ansteuern!

OP #685027
Lesenswert?
• ▲
▼
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;
}
Gast #685147
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren