Hallo zusammen,
wie der eine oder andere vielleicht mitbekommen hat beschäftige ich mich
aktuell sehr mit Soft-PWM. Dabei bin ich jetzt auf ein kleines Problem
gestoßen, welches ich mir an den Hardware-PWMs erklären wollte aber
nicht konnte.
ich probiers mal zu beschrieben: eine 8-Bit PWM:
PWM-Wert 0 bedeutet der Ausgang ist nie an.
PWM-Wert 1 bedeutet der Ausgang ist 1 Taktzyklus an.
usw.
PWM-Wert 254 ... 254 Taktzyklen
PWM-Wert 255 ... 255 Taktzyklen
die 8-Bit PWM macht meines Wissens aber 256 Taktzyklen pro PWM-Zyklus...
Man könnte also nur von 0-99,6% einstellen. Nicht 0-100%...
Wenn ich mich nicht täusche bleit der PWM-Pin meines AVR aber 100% auf
high wenn ich 0xFF als PWM-Wert einstelle und 100% auf low wenn ich 0
einstelle... Es muss also irgendwo einen Sprung geben, oder wie oder
was?
Oder hab ich grad so einen krassen Gedankenfehler?
Wär nett wenn jemand ne Antwort wüsste. Vielen dank.
lg Richard
PWM hat immer Sprünge ist schließlich digital.
Mit dem Wert 255 möchtest du 5V ausgeben. Und das hast du ja mit 100% an
erreicht.
Richard schrieb:> die 8-Bit PWM macht meines Wissens aber 256 Taktzyklen pro PWM-Zyklus...> Man könnte also nur von 0-99,6% einstellen. Nicht 0-100%...
0-255 ^= 256 Werte
jaja, das ist schon alles richtig, Samuel, nur reduzieren wir mal
testweise auf 1 Bit...
Wert 0 ^= 0V, 0%
Wert 1 ^= 2,5V, 50%
(Wert 2 ^= 5V, 100%, gibts aber nicht bei 1Bit)
Bei 8-Bit komme ich so auf nur 99,6%, denn für 100% bräuchte ich das
9.Bit, das es nicht gibt. Für mich ist das gerade so neu, dass ich es
nicht glauben kann und mich frage, o die hardware-pwm von 0xFE auf 0xFF
einfach einen "Sprung" macht und 0xFF als das für 100% nötige 0x100
interpretiert...
Ich finde in keinem Datenblatt was. Gesucht hab ich jetzt beim Mega88
und Tiny2313.
Hallo Richard,
also ich habe mal vor langer Zeit einen MOS-FET mit PWM betrieben. Die
genaue Beschaltung weiß ich nicht mehr. Aber auf jeden Fall hatte ich,
glaub ich, im normal-Betrieb bei PWM = 0 nicht aus. Hier im Forum bin
ich dann auf einen Hinweis gestoßen, dass der PWM nicht wirklich bei PWM
= 0 = aus ist, sonder wirklich mal ganz, ganz kurz einschaltet. Das ist
bei mir aufgefallen, weil ich den MOS-FET nie richtig aus bekommen habe.
Dann habe ich das ganze im "inverse"- Modus betrieben, dann war bei PWM
= 0xFF wirklich aus.
ZU DEINEM PROBLEM:
Du schreibst:
bei 0 = aus
bei 1 = 1 Taktzyklus
bei 2 = 2 Taktzyklen
...
bei 255 = 255 Taktzyklen
Du zählst doch die "0" nicht als Zyklus, also sind es 255 Takte + aus =
256!
Wo ist dann Dein Problem? :o)
Hallo Richard, deine Überlegungen sind richtig.
Es gibt 256 Zyklen bei einer 8bit-PWM. Wenn dein Eingangswertebereich
von 0 bis 255 reicht, gibt es zwei Möglichkeiten:
1. Ist der Ausgang zwischen 0 und 255 von 256 Zyklen an, kannst du die
100% nie erreichen.
2. Ist der Ausgang zwischen 1 und 256 Zyklen an, erreichst du die 100%,
nicht aber die 0%.
Bei der Software-PWM kannst du tricksen: Entweder die Zyklenzahl um eins
verringern, oder zwischen 0% und 100% irgendwo einen Sprung einbauen.
Wenn es um die Ansteuerung eines Motors oder einer LED geht, ist das
egal. Bei einem durch PWM simulierten D/A-Wandler macht man das besser
nicht.
Zur Hardware-PWM: Schau dir das Datenblatt und die diversen Timer-Modi
mal genau an, grundsätzlich hast du das gleiche Problem wie oben. Es
lässt sich aber lösen ;)
aus dem Datenblatt zum Atmega8, Kapitel Timer2, modes of operation, fast
pwm:
The extreme values for the OCR2 Register represent special cases when
generating a PWM waveform output in the fast PWM mode. If the OCR2 is
set equal to BOTTOM, the output will be a narrow spike for each MAX+1
timer clock cycle. Setting the OCR2 equal to MAX will result in a
constantly high or low output (depending on the polarity of the output
set by the COM21:0 bits.)
Viele Grüße
michael
Danke euch allen. Dann leuchtet das alles ein.
Meine SoftwarePWM stützt sich jetzt auf den Timer/Counter0 (8bit)
welcher mit clk/256 taktet und im CTC mode läuft wobei TOP auf 254
gelegt wurde.
Damit habe ich 0-100% abgedeckt (per oszi überprüft).
Die software arbeitet nach dem Prinzip der intelligenten PWM aus
http://www.mikrocontroller.net/articles/Soft-PWM nur eben in eigener
Ausarbeitung. Ich war zu faul mich Stundenlang in den Code
einzuarbeiten, da hab ich lieber selbst meine Fehler gemacht!
Danke nochmal an alle, auch an diejenigen, die mir bei meinen Anderen
Fragen geholfen haben!
lg Richard