Go Down

Topic: PWM Einstellung / Auflösung (Read 10039 times) previous topic - next topic

Arduinokiller

Hallo zusammen,

ist bei den ATMega µC (Duemilenova 328 bzw. 168 oder Mega 2560) an den PWM Ausgängen grundsätzlich nur ein Auflösung von 256 Schritten (0-255) möglich, oder kann man die Auflösung auch ändern? Ich benötige für eine Steuerung eine Ausgangsspannung von 0,83 bis 1,95V in 0,01V Schritten. Die Spannung wird durch einen Temperatursensor (Dallas DS18S20)
beeinflusst. Somit brauche ich min. 512 (0-511) Schritte oder ist es besser das Ganze über eine R-Leiter zu realisieren?

Gruß und Danke

GuyW

Ja, ist recht einfach möglich. Um einen Blick ins Datenblatt kommst du aber nicht herum.
Ich habe es selbst vor kurzem erst bei einem Mega 2560 umgesetzt. Beispiel deshalb auch für den 2560, für die anderen mit Sicherheit ähnlich.
Wichtig sind 2 Seiten im Datenblatt (Links zu den Datenblättern findest du auf der Hardware Seite)

1. Waveform Generation Mode Table 17-2 Seite 148
2. Clock Select Bit Description Table 20-9 Seite 191

Ich habe den Timer4 bei mir angepasst (welcher Timer für welchen PWM Pin zuständig ist, findest du hier)

Um die Auflösung zu ändern, musst du in den Waveform Generation Mode einstellen. Das geht mit in setup {}:

TCCR4A = TCCR4A & 0b00000000 | 0x07; (hier Mode 7)

Einfach Mode aussuchen und die 7 am Ende durch den gewünschten Mode ersetzen. Bei einigen Modes hatte ich komische Effekte, die ich mir (durch Unwissenheit) nicht erklären kann. Mode 7 gibt mir 10 bit Auflösung, ohne, dass ich etwas anderes ändern musste.

Gleichzeitig sinkt jedoch die PWM Frequenz, da der Timer jetzt von 0 bis 1024 zählt, vorher bis 255. Die Frequenz änderst du mit:

TCCR4B = TCCR4B & 0b00000000 | 0x03; (wieder für Timer 4)

Die 3 am Ende durch den gewünschten Prescaler ersetzen.

Einfach ein wenig damit experimentieren.

Vlt kann das ja noch jemand mit etwas mehr Ahnung besser erklären. Habe es selbst durch trial und error herausgefunden.

Noch ein paar interessante Links zum Thema:

http://usethearduino.blogspot.com/2008/11/changing-pwm-frequency-on-arduino.html
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1282730369

mkl0815


...Ich benötige für eine Steuerung eine Ausgangsspannung von 0,83 bis 1,95V in 0,01V Schritten. ...

Auch auf die Gefahr hin, das ich mich blamiere, aber der PWM-Ausgang liefert doch trotzdem immer 5V. PWM legt doch nur fest wie lange ein HIGH- und wie lange ein LOW-Impuls dauert.
Oder gibt es hinter dem PWM-Ausgang noch eine Schaltung von Dir die dann eine angepasste Spannung liefert?
Grüße,
Mario.

volvodani

Die gewünschte Spannung bekommst du mit einerm RC-Glied hin. Diese ist aber dann ein bisschen verzögert 5*Tau.
Gerner genommen
http://de.wikipedia.org/wiki/RC-Glied

Hier steht auch das wichtige drin. Zu beachten ist auch noch der eingangswiderstandes des Gerätes das diese 0,83-1,95V braucht
"Komm wir essen Opa!" - Satzzeichen retten Leben!

uwefed

Quote
von 0,83 bis 1,95V in 0,01V Schritten. ... Somit brauche ich min. 512 (0-511) Schritte oder ist es besser das Ganze über eine R-Leiter zu realisieren?


0,83V bis 1,95V in 0,01V Schritten, das sind dann 1120 Schritte.
Ich sehe die einfachere Lösung in einem DAC mit 12 oder besser 14 Bit Auflösung.
Grüße Uwe

Arduinokiller

Hallo zusammen,

ich habe eine Schaltung nach dem PWM-Ausgang (mit OP-Amp) Referenzspannung / Vcc ist 5V, der 2.Eingang bekommt die Spannung vom PWM. Die Spannung die ich am Ausgang der Schaltung (evtl. RC-Glied, bzw. R-2R Leiter) soll max. 1,95V , min. 0,83V betragen. Bei 10-Bit Auflösung wäre die Spannung 0,0049V*1023 ca. 5V, also
hätte ich bei 398*0,0049V ca.1,95V und bei 196*0,0049V ca. 0,83V. Die Differenz zwischen den Werten soll 0,015 (3*0,0049) bzw. 0,065V (13*0,0049) betragen. Vielleicht habe ich hier auch einen Denkfehler im Bezug auf die PWM.

udoklein

Wozu brauchst die hohe Spannungsauflösung? Vieleicht siche eine einfachere Lösung wenn Du uns etwas mehr zum Hintergrund Deines Problems erzählst.
Check out my experiments http://blog.blinkenlight.net

Arduinokiller

Die hohe Spannungsauflösung benötige ich für eine Heizungssteuerung (Elektronachtspeicher). Ausgewertet wird die Aussentemperatur (+20 bis -20°C), sowie die Uhrzeit (22:00 - 06:00). Die Auflösung ist von Std zu Std. beträgt 0,015 V und von °C zu °C 0,065V. Ausschnitt aus der Wertetabelle:
     20°C   19°C     - 20°C
22:00    1,950 V   1,935 V      1,350 V
23:00    1,885 V   1,870    V     1,285 V
00:00    1,820 V   1,805 V   1,220 V
01:00    1,755 V   1,740 V   1,155 V
02:00    1,690 V   1,675 V   1,090 V
03:00    1,625 V   1,610 V   1,025 V
04:00    1,560 V   1,545 V   0,960 V
05:00    1,495 V   1,480 V   0,895 V
06:00    1,430 V   1,415 V   0,830 V
Deswegen möchte ich das ganze mit PWM lösen, da DAC mit R-2R Leiter und RC-Glied evtl. die Auflösung nicht hoch genug ist.

udoklein

Ich kapier's gerade nicht. Ich dachte Du wolltest solche Werte ausgeben und nicht auswerten? Was verstehe ich da gerade falsch?
Check out my experiments http://blog.blinkenlight.net

uwefed


Ich kapier's gerade nicht. Ich dachte Du wolltest solche Werte ausgeben und nicht auswerten? Was verstehe ich da gerade falsch?

Das verstehe ich auch nicht.

Arduinokiller bitte erklär uns genau Dein Projekt, nicht wie Du ein Teilproblem glaubst lösen zu können. Glaub uns, wir haben viele gute Ideen um jegliches Problem zu lösen.

Grüße Uwe



Arduinokiller

Sorry für die Missverständnisse.  :~ Das Projekt ist folgendes: ich benötige für einen Nachtspeicherofen eine Steuerspannung um die Temperatur zu regeln. Die benötigte Steuerspannung ist zwischen 0,83V (06:00 Uhr und -20°C Aussentemperatur) und 1,95V (22:00 Uhr und +20°C Aussentemperatur), Auflösung siehe oben. Ich habe als Prozessor einen ATMega 2560 mit MegaShield und RTC DS1307 und als Sensor einen Dallas DS1820 (DS18S20), SD-Card als Datenlogger soll noch eingebunden werden. Anzeige und Setting erfolgt über ein 3.2" TFT-Display mit Touchscreen (ITDB02 3.2" WC). Ich lese über OneWire den Sensor ein und unter berücksichtigung der Uhrzeit/Aussentemperatur soll am PWM-Ausgang die Steuerspannung zur Verfügung stehen. Der Code für die Uhrzeit / Datum / Temperatursensor / TFTetc. ist bereits fertig und lauffähig. Meine Frage bezieht sich darauf ob es möglich am PWM-Ausgang eine entsprechende Steuerspannung zur Verfügung zu stellen, z.B. 398 High / 626 Low-Phasen (bei einer 10bit Auflösung) für 1,95V. Umrechnung erfolgt über switch/case bzw. if-Anweisungen.

uwefed

Ich verstehe immer noch nicht wieso Du diese Spannung brauchst.
Kannst Du uns das Modell des Nachtspeicherofen bzw dessen Steuerung schicken.
Grüße Uwe

Arduinokiller

Laderegler (Restwärmegerät) im Ofen ist ein Dimplex LR90. Die Öfen (2-6 kW) wird mit Drehstrom (400V ~), bzw. bei dem kleineren Modell (1kW) mit Netzspannung (230V ~) versorgt. Am Gerät ist ein Einsteller (ca. 500k Poti) für die Aufladung. Die Steuerspannung (Gleichstrom) wird für Temperaturreglung in Verbindung mit dem Aussentemperaturfühler benötigt. In der Bestandsanlage ist Bauknecht ZW 2700 (ca. 30 Jahre alt) verbaut, der liefert die Gleichspannung. Der Ofen der mit diesem Projekt angeschlossen werden soll, steht seperat, somit ist ein Anschluß an den Bestand nicht möglich, evtl. soll das Projekt den ZW 2700 längerfristig ersetzen.

http://www.dimplex.de/fileadmin/dimplex/downloads/servicehandbuch_hwt/de/495-SHB_ESH_2009.pdf
siehe S. 32, bzw. 49
Gruß Erhard

udoklein

So auf den ersten Blick würde ich sagen, daß das alles analog arbeitet. Die Drehregler sehen für mich wie normale Potis aus. Mich würde es deshalb nicht wundern, wenn es ausreicht das mit 8bit Auflösung einzuhalten.
Check out my experiments http://blog.blinkenlight.net

Arduinokiller

Die Drehregler im ZW2700 sind Potis(Trimmer), haben aber nur bedingt Einfluss auf die Steuerspannung. Die Regler sind nur für den Bereich (Klimazone -> Einstellung durch Energieversorger), für die Korrektur (ob die gesamte Anlage mehr oder weniger aufheizen soll) und für die Tagnachladung (nur in Betrieb, wenn von Energieversorger untertützt und nicht ausgeschaltet). Die Steuerspannung wird im ZW2700 unter Auswertung des Aussentemperturfühlers und der Uhrzeit. Allerdings
ist auf Grund des Alters der Steuerungsaufbau noch analog (diskret) und die Uhr mechanisch  :smiley-eek:. Evtl. würde für die Erzeugung der Steuerspannung auch eine 8-Bit Auflösung reichen, allerdings komme ich dann nicht auf die Werte (siehe auch Prüftabelle auf S.49). Ursprünglich ging es mir darum wie weit man bei den µProzessor die PWM Ausgänge auflösen kann, ist ja soweit geklärt; es stellt sich für mich noch die Frage ob ich bei der ganzen Sache evtl. einen Denkfehler drin habe,
da ja der PWM Ausgang immer 5V liefert, ist dann die gemessene Spannung bei 50% 2,5V ?

Go Up