www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hardware-PWM wo ist der Fehler in meinen Überlegungen?


Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Code (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code?

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Marcel K. (viewer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.