Forum: Mikrocontroller und Digitale Elektronik Unklarheit phase correct PWM - Formel Atmega 8


von Tho W. (tommyprog)


Lesenswert?

Servus zusammen,

Nach Atmel Datenblatt des ATmega8 auf Seite 111 gibt es eine Formel für 
das correct- Phase PWM, bei der im Nenner 510 steht.

ÜBer den bruch steht Fck/io (also input frequenz).

1.
Meine Steuerung hat ein Poti, dieser Analoge Wert wird im AD- Wandler 
von 10Bits auf 8 Bits digitalisiert(und konvertiert), und anschließend 
wird dieser Wert als Timer2 "phase- correct pwm" zählwert benutzt. Was 
wiederrum als PWM signal für meine rote LED dient (funktioniert 
übrigens, nur möchte ich den rechnerischen Wert haben, damit ich selber 
genauer die Frequenz justieren kann)

Um selbst die Frequenz nachzurechnen, gibt es die Formel auf seite 111.
Wie in "1." gehe ich vor.
Nun ist die Frage, ob ich dann bei der inputFrequenz, also Fck/io über 
den Bruchstrich mein CPUtakt durch meinen ADC- Vorteiler einsetzen muss( 
wären hiermit 125khz), oder ob ich den reinen takt einsetze.

Sollte ich die 125khz einsetzen, gibt es aber in der Division durch 510 
keinen korrekten Wert.
Korrekter Wert ist laut LED- Tutorial auf dieser Seite weniger wie 9khz, 
aber mehr wie 1khz.

Was genau ist mein denkfehler? Wie müsste die Rechnung sonst lauten?

Danke schonmal für einen Schlag auf den Hinterkopf ;)

mfg,
tommyProg

: Bearbeitet durch User
von uwe (Gast)


Lesenswert?

Fclk_io ist der CPU Takt

von Karl H. (kbuchegg)


Lesenswert?

Tho Wes schrieb:

> Meine Steuerung hat ein Potti,


Es heißt Poti. Mit einem t. Das ist die Abkürzung für "Potentiometer".
Dein ständiges beharren auf "Potti" macht nur eines: es lässt dich 
dämlich dastehen.


> Nun ist die Frage, ob ich dann bei der inputFrequenz, also Fck/io über
> den Bruchstrich mein CPUtakt durch meinen ADC- Vorteiler einsetzen muss(
> wären hiermit 125khz), oder ob ich den reinen takt einsetze.

Was hat der ADC mit dem Timer zu tun?
Richtig. Gar nichts.

Nur weil du in DEINEM Programm die Steuerung der PWM vom ADC ausgehend 
betreibst, ist das ja keineswegs immer so. Wenn man den PWM Wert von der 
UART aus bekommen würde, würde man dann die Baudrate einsetzen? Wohl 
eher kaum.

> Korrekter Wert ist laut LED- Tutorial auf dieser Seite weniger wie 9khz, aber 
mehr wie 1khz.

'Korrekt' ist das falsche Wort. Speziell bei einer LED. Wenn du willst, 
kannst du die auch mit einer 200Mhz PWM betreiben. Die Frage ist eher: 
welchen PWM Takt brauche ich mindestens, damit noch nichts flackert und 
ab welchem PWM Takt kann auch der empfindlichste Mensch das Flackern 
nicht mehr bei Kopfbewegungen sehen.

: Bearbeitet durch User
von Tho W. (tommyprog)


Lesenswert?

> Was hat der ADC mit dem Timer zu tun?
> Richtig. Gar nichts.
>

Ich denke aber schon, dass das damit was zu tun hat, denn
mein Timer zählt bis zu einen gewissen Wert, und dieser maximale Wert 
ist der digital- konvertierte Wert meines Potentiometers.
Habe ich z.b. mein Poti weit links gedreht, so habe ich einen kleineren 
ADC- Wert und somit zählt der Timer auch nur bis zu einen kleineren Maß.

Außerdem, wenn ich nach der Formel gehen würde, und dann keinen 
Prescaler verwende, hätte ich 1000000/510, was ca. 1.9Khz entspricht. 
Die LED dürfte somit sehr hell leuchten.
In diesem Fall leuchtet diese garnicht. Mit einen Timer Prescaler von 8, 
sowie einen ADC Prescaler von 8 funktioniert alles einwandfrei, oder 
siehst du das anders?

Mfg,
tommyProg

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Tho Wes schrieb:
>> Was hat der ADC mit dem Timer zu tun?
>> Richtig. Gar nichts.
>>
>
> Ich denke aber schon, dass das damit was zu tun hat, denn
> mein Timer zählt bis zu einen gewissen Wert, und dieser maximale Wert
> ist der digital- konvertierte Wert meines Potentiometers.

Das eine ist ein PWM Modul.
Das andere ist der ADC

vom ADC bekommst du einen Wert und diesen Wert steckst du ins PWM Modul.

Aber das PWM MOdul arbeitet unabhängig vom ADC. Nur weil du den 
Steuerwert vom ADC abgreifst, hat die PWM bzw. der Timer noch lange 
nichts mit dem ADC zu tun.

Also warum soll in die Berechnung der PWM-Frequenz in irgendeiner Form 
eingehen, woher der OCR Steuerwert kommt?

von Karl H. (kbuchegg)


Lesenswert?

Tho Wes schrieb:


> Habe ich z.b. mein Poti weit links gedreht, so habe ich einen kleineren
> ADC- Wert und somit zählt der Timer auch nur bis zu einen kleineren Maß.

Nope.
Nochmal zurück.
Du hast das Prinzip einer PWM nicht verstanden.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Tho Wes schrieb:

> ... was ca. 1.9Khz entspricht. Die LED dürfte somit sehr hell leuchten.

Aber sowas von nicht verstanden.

(Am Beispiel Fast-PWM)

Der Timer zählt immer gleich schnell. Und er zählt immer bis zum selben 
Wert.
Lediglich die Zählerstände, bei denen der Ausgangspin auf 1 gehalten 
wird, bzw. diejenigen, bei denen der Ausgangspin auf 0 gehalten wird, 
werden verändert.

Hast du eine 3 Bit PWM, dann zählt der Timer immer
1
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, ....
alles was der OCR Wert macht, ist das er eine Zuordnung vom Zählerstand 
zum Status des Ausgangspins herstellt. WObei Zuordnung eigentlich auch 
das falsche Wort ist. Bei Gleichheit wird der Ausgangspin umgeschaltet, 
genauso wie beim Erneuten Beginn der Zählers bei 0
1
OCR sei 3
2
3
Der Timer zählt
4
5
  0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, ....
6
  |        |              |        |
7
  |        |              |        |
8
 Pin auf 1 |             Pin auf 1 |
9
           |                       |
10
          Gleichstand mit OCR     Gleichstand mit OCR
11
          Pin auf 0               Pin auf 0
12
13
Daher der Pinstatus
14
15
  1  1  1  0  0  0  0  0  1  1  1  0  0  0  0  0  1 ....

1
OCR sei 5
2
3
Der Timer zählt
4
5
  0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, ....
6
  |              |        |              |
7
  |              |        |              |
8
 Pin auf 1       |       Pin auf 1       |
9
                 |                       |
10
                Gleichstand mit OCR     Gleichstand mit OCR
11
                Pin auf 0               Pin auf 0
12
13
Daher der Pinstatus
14
15
  1  1  1  1  1  0  0  0  1  1  1  1  1  0  0  0  1 ....

Der einzige UNterschied zwischen den beiden OCR Werten besteht darin, 
dass der Ausgang in dem einen Fall 3 Takte lang auf 1 ist und 5 Takte 
lang auf 0, während er im anderen Fall 5 Takte auf 1 ist und 3 Takte auf 
0.
Im Mittel gesehen ist daher der Pin im 2.ten Fall prozentual öfter auf 
1, was eine hellere LED ergibt.
Wie schnell der Timer zählt, ist hingegen völlig uninteressant, solange 
es nur schnell genug ist, dass dein Auge das ständige ein und 
ausschalten nicht mehr wahrnehmen kann und statt dessen eine Helligkeit 
interpoliert.


Mit dem ADC hat das ganze überhaupt nichts zu tun. Der ADC liefert 
lediglich die Vorgabe der 3 bzw der 5 im OCR Register. Die könnten aber 
genausogut auch von der UART kommen, oder per SPI übertragen worden 
sein, oder per Netzwerk eingetrudelt sein oder per Taster eingestellt 
worden oder .....

: Bearbeitet durch User
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.