Forum: Mikrocontroller und Digitale Elektronik verständnisproblem beim aufarbeiten (pwm)


von tester (Gast)


Lesenswert?

Hallo,

ich bin dabei verschiedene PWM signale über einen atmega324pa laufen 
lassen zu wollen. nun bin ich dabei das thema timer + pwm nochmal 
aufzurollen, da ich da schon eine ziemlich lange zeit raus bin. im 
ersten moment dacht ich gut einfach, aber irgendwie hab ich grad ein 
verständnisproblem und hoffe ihr könnt mir helfen

ich möchte über timer2 (16bit) den fast-pwm mode für LEDs verwenden. 
laut datenblatt ist die formel f_PWM = f_CLK / ( N * 256 )

diesen wert initialisiere ich nun in das OCR2A register, is das richtig?
um nun die pulsbreite (duty) einzustellen muss das OCR2A register 
angepasst werden (je nach einstellung)

was ich dabei nicht verstehe, wenn ich dieses register für die 
pulsbreite anpasse, passe ich ja automatisch auch die frequenz an oder 
seh ich das falsch? ich hab gerade "ein brett vorm kopf", wie ich 
beispielsweise eine feste frequenz beibehalte aber den duty (also 
verhältnis der längen von HIGH und LOW) verändern kann.

danke und grüße vom verwirrten

von Karl H. (kbuchegg)


Lesenswert?

tester schrieb:

> ich möchte über timer2 (16bit)

Nope. Timer 2 ist ein 8 Bit Timer

> den fast-pwm mode für LEDs verwenden.
> laut datenblatt ist die formel f_PWM = f_CLK / ( N * 256 )

jaein.

> diesen wert initialisiere ich nun in das OCR2A register, is das richtig?

welchen?
den f_PWM, den du da errechnet hast?

Das kann man so nicht direkt sagen. Denn die PWM Frequenz ist meistens 
eigentlich recht uninteressant, solange sie nur hoch genug ist. Bei 
einer PWM ist man viel mehr am duty-Cylce interessiert. Der ist viel 
wichtiger.


Beim Timer 2 gibt es ja 2 Fast-PWM Modi. Siehe die Tabelle 15.8 auf 
Seite 156 des Datenblatts.
http://www.atmel.com/images/doc7674.pdf


Im Modus 3, kannst du sowohl mit dem A Kanal, als auch mit dem B-Kanal 
jeweils eine eigenständige PWM erzeugen.
Je nachdem, welchen Kanal du willst, sind dann die COM Bits, bzw. der 
entsprechende OCR Pin, bzw. das entsprechende OCR2x Register zuständig.

Im Modus 7 übernimmt das OCR0A Register die Aufgabe, den Top Wert für 
die PWM festzulegen und steht daher nicht mehr als PWM-generiende 
Einheit zur Verfügung. Da geht die Verstellung des DUty-Cycles dann nur 
noch mittels OCR0B

> was ich dabei nicht verstehe, wenn ich dieses register für die
> pulsbreite anpasse, passe ich ja automatisch auch die frequenz an oder
> seh ich das falsch?

Das kommt jetzt wieder auf den Modus an.

Im Modus 3 zählt der Timer immer von 0 bis 0xFF. Und damit ist die PWM 
Frequenz auch fix und nur vom eingestellten Vorteiler N des Timers 
abhängig.
Im Modus 7, bei dem das OCR0A Register eine andere Funktion übernimmt 
(siehe die TOP Spalte in der genannten Tabelle) variiert die 
PWM-Frequenz daher mit einer Änderung von OCR0A

die korrekte Formel für die PWM-Frequenz bei Fast-PWM ist ja eigentlich
1
  f_PWM = f_CLK / ( N * TOP )
N ist der Vorteiler des Timers. TOP ist der Wert, der in der Spalte TOP 
in besagter Tabelle in der jeweils benutzen Modus-Zeile für eine der 
beiden Möglichkeiten der Fast-PWM steht.

von Dennis K. (scarfaceno1)


Lesenswert?

Alle Einstellungen nimmst du in den TCCR2X Registern vor.

Das OCR Register ist der Vergleichswert, bei dem die PWM etwas tut.

In deinem die Pulsbreite.

von tester (Gast)


Lesenswert?

um weitere missverständnisse zu vermeiden, ich verwende den atmega324PA
http://www.atmel.com/Images/doc8152.pdf

der ist doch um etwas anders als der den du gepostet hast karl heinz, 
ich war jetzt etwas verwirrt von deinen angaben


Karl Heinz schrieb:
> tester schrieb:
>
>> ich möchte über timer2 (16bit)
>
> Nope. Timer 2 ist ein 8 Bit Timer
>

jipp richtig, ich hantiere gerade sowohl mit timer1 als auch timer2 und 
bin durch einander gekommen...

>> den fast-pwm mode für LEDs verwenden.
>> laut datenblatt ist die formel f_PWM = f_CLK / ( N * 256 )
>
> jaein.
>
>> diesen wert initialisiere ich nun in das OCR2A register, is das richtig?
>
> welchen?
> den f_PWM, den du da errechnet hast?
>
> Das kann man so nicht direkt sagen. Denn die PWM Frequenz ist meistens
> eigentlich recht uninteressant, solange sie nur hoch genug ist. Bei
> einer PWM ist man viel mehr am duty-Cylce interessiert. Der ist viel
> wichtiger.


ich möchte eine pwm mit vorgegebener frequenz erzeugen.. in den 
tutorials wurde für LEDs zum beispiel rund 1-9kHz als optimale frequenz 
angegeben.

>
> Beim Timer 2 gibt es ja 2 Fast-PWM Modi. Siehe die Tabelle 15.8 auf
> Seite 156 des Datenblatts.
> http://www.atmel.com/images/doc7674.pdf
>
> Im Modus 3, kannst du sowohl mit dem A Kanal, als auch mit dem B-Kanal
> jeweils eine eigenständige PWM erzeugen.
> Je nachdem, welchen Kanal du willst, sind dann die COM Bits, bzw. der
> entsprechende OCR Pin, bzw. das entsprechende OCR2x Register zuständig.

hier steig ich genau ein. ich möchte zwei kanäle unabhängig von einander 
arbeiten lassen. das heißt, wenn ich auf einen timer zwei verschiedene 
kanäle benutzen möchte, kommte ich gar nicht um den CTC modus rum?!
woran siehst du das bei modus 3 zwei verschiedene kanäle ansteuerbar 
sind? bezeichnet durch "immediate"?

>
> Im Modus 7 übernimmt das OCR0A Register die Aufgabe, den Top Wert für
> die PWM festzulegen und steht daher nicht mehr als PWM-generiende
> Einheit zur Verfügung. Da geht die Verstellung des DUty-Cycles dann nur
> noch mittels OCR0B
>
>> was ich dabei nicht verstehe, wenn ich dieses register für die
>> pulsbreite anpasse, passe ich ja automatisch auch die frequenz an oder
>> seh ich das falsch?
>
> Das kommt jetzt wieder auf den Modus an.
>
> Im Modus 3 zählt der Timer immer von 0 bis 0xFF. Und damit ist die PWM
> Frequenz auch fix und nur vom eingestellten Vorteiler N des Timers
> abhängig.
> Im Modus 7, bei dem das OCR0A Register eine andere Funktion übernimmt
> (siehe die TOP Spalte in der genannten Tabelle) variiert die
> PWM-Frequenz daher mit einer Änderung von OCR0A

irgendwie bin ich nun fast noc hverwirrter :-)

von Karl H. (kbuchegg)


Lesenswert?

tester schrieb:

> ich möchte eine pwm mit vorgegebener frequenz erzeugen.. in den
> tutorials wurde für LEDs zum beispiel rund 1-9kHz als optimale frequenz
> angegeben.

Ich weiss jetzt nicht, welches Tutorial du konkret meinst. Aber das ist 
sicherlich so zu verstehen, dass alles im Bereich 1 bis 9kHz akzeptabel 
ist. Und wenn du ein wenig ausserhalb dieses Bereichs (der ja recht groß 
ist) liegst, dann ist das auch noch kein Beinbruch.
Daraus folgt, dass es nicht wirklich wichtig ist genau 4.567 kHZ zu 
erzeugen, sondern wenn du mit dem Timer-Vorteiler in diesen Bereich 
hineinkommst, dann passt das schon.


> hier steig ich genau ein. ich möchte zwei kanäle unabhängig von einander
> arbeiten lassen.

Dann geht das nur dann mit dem Timer 2, wenn du den Modus 3 nimmst. In 
diesem Modus ist die PWM-Frequenz einzig und alleine durch den Vorteiler 
bestimmt.

> das heißt, wenn ich auf einen timer zwei verschiedene
> kanäle benutzen möchte, kommte ich gar nicht um den CTC modus rum?!
> woran siehst du das bei modus 3 zwei verschiedene kanäle ansteuerbar
> sind?

Daran, dass ich weiß, dass der Timer grundsätzlich 2 PWM Einheiten hat, 
und das OCR2x Register in der Tabelle bei diesem Modus nicht als TOP 
Wert aufscheint.

Sei nicht päpstlicher als der Papst. Wenn du einen Frequenzspielraum von 
1 bis 9 Khz hast, wird sich ein Vorteiler finden, mit dem du in dieses 
Zielgebiet so einigermassen reinkommst. Das Bestehen auf genau einer 
ganz bestimmten Frequenz ist hier kontraproduktiv, weil deine 
Hardwareausstattung das eben für 2 Kanäle nicht hergibt.
Bei der Ansteuerung von LEDs ist das sowieso kein Problem. Da wären für 
mich alles über 200Hz bereits akzeptabel, auch wenn immer wieder 
Einzelne davon berichten, dass sie unter bestimmten Umständen das 200Hz 
Flimmern noch wahrnehmen können.

von tester (Gast)


Lesenswert?

Karl Heinz schrieb:
> tester schrieb:
>
>
> Ich weiss jetzt nicht, welches Tutorial du konkret meinst. Aber das ist
> sicherlich so zu verstehen, dass alles im Bereich 1 bis 9kHz akzeptabel
> ist. Und wenn du ein wenig ausserhalb dieses Bereichs (der ja recht groß
> ist) liegst, dann ist das auch noch kein Beinbruch.
> Daraus folgt, dass es nicht wirklich wichtig ist genau 4.567 kHZ zu
> erzeugen, sondern wenn du mit dem Timer-Vorteiler in diesen Bereich
> hineinkommst, dann passt das schon.

mir ging es auch darum eine frequenz zu erzeugen die kein vielfaches von 
50-60hz ist, hatte mal irgendwas gelesen zwecks flimmereffekte oder was 
auch immer. hatte es einfach als anreiz bzw. problemstellung genommen 
das zu bewerkstelligen
aber mit dem prescaler kann ich leben, dann passt das ja

> Dann geht das nur dann mit dem Timer 2, wenn du den Modus 3 nimmst. In
> diesem Modus ist die PWM-Frequenz einzig und alleine durch den Vorteiler
> bestimmt.

ist das jetzt auch auf meinen controller bezogen? timer1 ist 16 bit und 
timer2 8 bit... nur der 16bit timer kann mehrere kanäle oder woran wird 
das festgelegt? die tabellen in denen der Mode beschrieben steht ähneln 
sich ja ziemlich

> Daran, dass ich weiß, dass der Timer grundsätzlich 2 PWM Einheiten hat,
> und das OCR2x Register in der Tabelle bei diesem Modus nicht als TOP
> Wert aufscheint.
>
> Sei nicht päpstlicher als der Papst. Wenn du einen Frequenzspielraum von
> 1 bis 9 Khz hast, wird sich ein Vorteiler finden, mit dem du in dieses
> Zielgebiet so einigermassen reinkommst. Das Bestehen auf genau einer
> ganz bestimmten Frequenz ist hier kontraproduktiv.

nein, das war auch gar nicht mein ziel. es ging wenn dann, um eine 
unabhängiges beschalten der kanäle. irgendwie fehlt mir da der letzte 
aha-effekt

trotzdem danke schon mal für die hilfe!

von tester (Gast)


Lesenswert?

anhang: mein ziel sind 3 unabhängige PWMs...

von Karl H. (kbuchegg)


Lesenswert?

tester schrieb:

>> Dann geht das nur dann mit dem Timer 2, wenn du den Modus 3 nimmst. In
>> diesem Modus ist die PWM-Frequenz einzig und alleine durch den Vorteiler
>> bestimmt.
>
> ist das jetzt auch auf meinen controller bezogen?

ja

> timer1 ist 16 bit und
> timer2 8 bit... nur der 16bit timer kann mehrere kanäle oder woran wird
> das festgelegt?

Bei ATmel orentiert man sich an den OCR - Registern.

Wenn es da ein OCR0A und ein OCR0B Register gibt, dann ist es sehr 
wahrscheinlich, dass auch beide eine PWM erzeugen können. Weiters gibt 
es für jeden Kanal die COM-Bits (auch dort kommt wieder das bzw. B vor), 
die ebenfalls für eine Hardware-PWM unabdingbar sind.

Wenn ein Timer nur 1 PWM erzeugen kann, dann gibt es keine A und B 
Kanäle. Dann heisst das Register einfach nur OCR2

> die tabellen in denen der Mode beschrieben steht ähneln
> sich ja ziemlich

Die Tabellen sind ja nicht alles.
Wenn man einen µC erst mal ein wenig kennt, dann sind die Tabellen der 
erste Anlaufpunkt um sich den Modus zu suchen. Aber um erst mal ein 
wenig grundlegendes Wissen, was der Timer kann und was er nicht kann, 
kommt man nicht herum.

> unabhängiges beschalten der kanäle. irgendwie fehlt mir da der letzte
> aha-effekt

So recht ist mir noch nicht klar, was da jetzt noch das Problem sein 
könnte. Wie eine PWM grundsätzlich auf einem AVR in Hardware 
funktioniert, weißt du?

FAQ: Timer

von tester (Gast)


Lesenswert?

erwischt, ich bin mit microchips in die ersten fußstapfen getreten und 
versuche mich jetzt nach langer zeit mit den atmels :-)

die antwort wieviele kanäle die timer können ist mir gerade selbst beim 
pinout aufgefallen. das war jetzt sehr blöd, ich sollte vllt mal eine 
pause einlegen, dann funktioniert der kopf auch wieder richtig hehe...

dann sollte meine initialisierung so ziemlich stehen, danke dir!

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.