Forum: Mikrocontroller und Digitale Elektronik AVR Timer & PWM


von Karlheinz Druschel (Gast)


Lesenswert?

Hi Leuts,

ich bin nun mal ein Einsteiger, deshalb stelle ich vielleicht eine
doofe Frage, aber ich bin ja lernbereit :-)
Ich muss für eine Motorsteuerung ein PWM Signal erzeugen.
Ok, mit den AVR´s geht das ja relativ einfach über den PWM Mode vom
Timer 1.
Aber ich will ja lernen und eine eigene Routine zum Erzeugen von
PWM-Signalen schreiben.
Üblicherweise nehme ich dazu eine Zähler, zähle hoch und wieder runter,
....
Aber der Timer 1 bietet mir ja eine Auflösung von 16 bit (PWM nur 8,9
oder 10 Bit).
Was spricht dagegen, die beiden Compare-Interrupts des Timers 1 zu
nutzen ?
Also Timer 1 bestimmt die Frequenz des Signals. Er zählt von 0 bis zum
Comparewert und wird automatisch zurückgesetzt. In der
Compate-Interruptroutine für CompareA setzte ich das PWM Signal
zurück.
Damit bestimme ich die Frequenz des Signals.
Compare B benutze ich für die Impulsbreite. D.h. in der entsprechenden
Interruptroutine setze ich das PWM Signal auf 1.
Wenn also der Timer anfängt zu zählen und den Comparewert B erreicht
(der kleiner sein muss als der Wert CompareA), dann wird das Signal
gesetzt.
Beim erreichen von CompareA wird das Signal gelöscht und der Timer
setzt sich automatisch zurück.
Sollte dies nicht auch ein brauchbares PWM-Signal geben ?

Greetings
Karlheinz

von Peter D. (peda)


Lesenswert?

Viele Wege führen nach Rom. Du kannst eine PWM auch vollständig in
Software machen.

Aber das jemand eine Motorspannung mit 16 Bit einstellen will, sehe ich
zum ersten mal. 8 Bit sollten allemal reichen.



Peter

von Karlheinz Druschel (Gast)


Lesenswert?

Na wie gesagt, mir fehlt da ein wenig die erfahrung mit PWM.
Ich denke halt generell, bei 16 Bit habe ich eine höhere Auflösung als
bei 8 Bit, kann also feiner dran rumspielen.
Ist ja nur so zum testen ....



Greetings
Karlheinz

von Uwe (Gast)


Lesenswert?

Hi!
Vorsicht mit CTC-Betrieb. Wenn ich es recht verstanden habe wird schon
beim 1.Compareereignis zurückgesetzt(sofern eingestellt)Wenn möglich
ohne CTC und in CompareA-ISR Timer1 auf 0 setzen.

MFG Uwe

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
Noch kein Account? Hier anmelden.