PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit ATMEGA8



Gucky
12.11.2007, 14:30
Hallo,
Ich möchte für eine Motorsteuerung mit einem ATMEGA8 die PWM verwenden und komme aufgrund bescheidener Englischkentnisse mit den Beschreibungen im Datenblatt des Controllers nicht so gut zurecht.
Einen einfachen Counter mit 8 und 16 Bit habe ich ohne Interrupt's programmieren können, stoße jedoch bei der PWM auf große Probleme. ](*,)
Muß ich hierzu Interupt's programmieren oder kann man ein einfaches Puls-Pausen-Verhältnis z.B. über den Timer 1 ohne Interrupt hinkriegen ? 8-[
Würde mich freuen, wenn mir jemand helfen könnte.

Gruß Gucky. :)

wkrug
12.11.2007, 17:45
Der Timer1 des ATMEGA 8 bietet hier sehr viele Möglichkeiten eine PWM zu realisieren.
Die entscheidenden Register sind die WGM Bits die je nach dem gewünschten PWM Modus eingestellt werden müssen.
Die Vergleichswerte (PWM Pulsbreiten) müssen dann im OCR1A bzw. OCR1B eingestellt werden. Die Pulse kommen dann am OC1A bzw. OC1B raus. Die PWM Erzeugung läuft grundsätzlich ohne Interrupts.
Das Updaten der Register OCR1A/B würd ich aber im Overflow Interrupt des Timers 1 machen um keine ungewollten Phasensprünge zu bekommen.
Die Ports OC1A und B müssen als Ausgänge geschaltet sein (DDR- Register).
Lass dir bei dem Datenblatt von jemanden mit guten Englischkenntnissen helfen - du wirst das Datenblatt noch öfter brauchen.


// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Start
// Mode: PWM Phase Correct top=03FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA3;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

Dieser Beispielcode generiert bei einem 8MHz Quarz eine PWM Frequenz von ca. 7,5 kHz für beide PWM Ausgänge des Timers 1.
Die Konfiguration ist zur Zeit nur im Simulator getestet, die Schaltung dazu muss ich noch aufbauen.