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