Hallo
Ich habe kürzlich mit der Mikrocontroller-Programmierung angefangen und
versuche gerade einen Brushless-Controller zu bauen. Im Moment teste ich
die MOSFETs + PWM mit ein paar in Serie geschalteten LEDs.
Mir ist aufgefallen, dass (bei gleichem Prescaler und Output
Compare-Wert) die LEDs bei den von Timer1 gesteuerten MOSFETs blinken.
Bei den von Timer2 gesteuerten MOSFETs hingegen lassen sich die LEDs
ohne sichtbares Blinken dimmen. Wenn ich den Prescaler bei Timer1 tiefer
setze, habe ich dieses Problem nicht mehr. Da es sich um zwei
verschiedene Timer handelt (16 und 8bit) nehme ich an, dass ich gewisse
Einstellungen vornehmen muss, damit beide die gleiche Frequenz ausgeben
können. Ich habe schon ein paar Modi (Phase Correct, Fast Pwm)
durchprobiert, jedoch konnte ich dieses Problem einfach nicht lösen.
Könnte mir jemand mit der Lösung dieses Problem helfen? Mein Ziel ist
es, dass beide Timer bei gleichem Prescaler und OCRxx *die gleiche
Frequenz ausgeben* (wenn dies überhaupt möglich ist). Ich benutze einen
ATmega644 und habe zuletzt erfolglos diese Einstellungen verwendet:
1 | //PWM initialisieren
|
2 | inline void initialize_MOSFET_PWM()
|
3 | {
|
4 | //Timer 1 (16Bit): Fast-PWM, 8bit bis 255
|
5 | TCCR1A = (1<<WGM22) | (0<<WGM21) | (1<<WGM20) | (1<<COM2B1) | (1<<COM2A1);
|
6 | TCCR1B = PRESCALER_256;
|
7 |
|
8 | //Timer 2 (8Bit): Fast-PWM bis 255
|
9 | TCCR2A = (1<<WGM21) | (1<<WGM20) | (1<<COM2B1);
|
10 | TCCR2B = PRESCALER_256;
|
11 | }
|
Ich bin neu auf dem Gebiet. Seid also nicht zu hart zu mir :)
Gruss
Adrian