PWM Einstellung / Auflösung

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

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,0049V1023 ca. 5V, also
hätte ich bei 398
0,0049V ca.1,95V und bei 1960,0049V ca. 0,83V. Die Differenz zwischen den Werten soll 0,015 (30,0049) bzw. 0,065V (13*0,0049) betragen. Vielleicht habe ich hier auch einen Denkfehler im Bezug auf die PWM.

Wozu brauchst die hohe Spannungsauflösung? Vieleicht siche eine einfachere Lösung wenn Du uns etwas mehr zum Hintergrund Deines Problems erzählst.

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.

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

[quote author=Udo Klein link=topic=84731.msg636040#msg636040 date=1325109002]
Ich kapier's gerade nicht. Ich dachte Du wolltest solche Werte ausgeben und nicht auswerten? Was verstehe ich da gerade falsch?[/quote]
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

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.

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

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

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.

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 :astonished:. 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 ?

Versuch macht klug. Warum misst Du das nicht einfach nach? Die Antwort ist völlig klar, aber wenn Du fragen musst, dann solltest Du einfach mal nachschauen. Das erhellt deutlich mehr.

Hallo Udo
Danke für die Antwort :blush:. Das mit dem Messen ist mir schon klar, nur habe ich im Bereich PWM keinen blassen Schimmer, die Datenblätter sind für mich im großen und ganzen böhmische(englische) Dörfer, da mein Englisch unter aller Kanone ist und die Bücher die ich zu dem ganzen Thema Arduino etc. habe, haben auch nur kurze Ansätze im Bereich PWM (LED über 2 Taster dimmen, einfache Töne über Sinuskurven erzeugen etc.), gehen aber auf irgendwelche Einstellungen (Auflösung, Frequenz, Prescaler etc.) gar nicht ein. Und wenn ma schon dabei sind, erkläre mir doch mal einer dieses: TCCR4A = TCCR4A & 0b00000000 | 0x07; (TCCR4B = TCCR4B & 0b00000000 | 0x03;) das sich TCCR4A / TCCR4B auf den Timer4 bezieht habe ich noch verstanden, aber was bedeutet der Rest?
Gruß Erhard

Hi, da ich auch blutiger Anfänger bin kann ich dir auch nicht genau helfen. Allerdings wenn man die Bücher und auch diesen Thread hier liest bin ich mir ziemlich sicher das PWM nur ein an und abschalten einer bestimmten spannung ist im falle des Arduino 5V. Also bekommst du durch PWM immer nur 5V auch wennn dieser Ausgang z.B. zu 50% ausgeschaltet ist.

@Zaisow
Wenn Du ein PWM Signal mit einem RC Glied glättest bekommst Du eine Gleichspannung die gleich dem aritmetischen Mittellwert über die Zeit des PWM Signals ist. Der einzige Pferdefuß ist, daß Änderungen wegen dem RC-Glied etwas lansam sind.
Grüße Uwe

Arduinokiller:
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 ?

Ich dachte er meint das man dem Arduino Spannungen entlocken kann die nicht 5 V sind durch PWM und das geht ja nicht. Das bei 50% die Spannung im mittel genau 2,5 V sind mir schon klar, das man dafür nen RC Glied nutzen kann war mir natürlich nicht bewusst da ich mich in der Richtung nicht auskenne.

Keine Ahnung warum das so geschrieben wurde:

TCCR4A = TCCR4A & 0b00000000 | 0x07; (TCCR4B = TCCR4B & 0b00000000 | 0x03;)

Ich würde sowas so schreiben:

TCCR4A = 7;
TCCR4B = 3;

Die Operatoren "&" und "|" sind Bitoperationen. Google nach C und Bitoperation. Dann findest Du Erklärungen dazu.

Gruß, Udo

Ich habe mal nen Versuchsaufbau gemacht, R 1K und LED zwischen PWM Pin9 und GND; Codeausschnitt wie folgt:

int PWMPin = 9;
int PWMVal = 0;

void setup()
.....
TCCR4A = 10;
TCCR4B = 3;
pinMode(PWMPin, OUTPUT);
.....
void loop()
......
PWMVal = 299; // (bei 299 = 0.83V; bei 358 = 1.96V Leerlaufspannung)
analogWrite(PWMPin, PWMVal);
.....

die LED leuchtet, gemessene Spannung siehe PWMVal, Auflösung ca. 0,018V auch wenn ich bei TCCR4A die Werte verändere kommt immer das gleiche Ergebnis raus, also ziemlich weit weg von dem was ich brauche (Auflösung sollte bei 0,0049 sein bei 10-Bit 5V/1024).

Habe den Code geändert, jetzt hab ichs.

int PWMPin = 6; <- von Pin 9 auf Pin 6 geändert.
int PWMVal = 0;

void setup()
.....
TCCR4A = 10;
TCCR4B = 3;
pinMode(PWMPin, OUTPUT);
.....
void loop()

PWMVal = 414; // (bei 176 = 0.830V; bei 414 = 1.952V mit LED)
analogWrite(PWMPin, PWMVal);
.....

Danke an alle für die Anregungen.