Forum: Mikrocontroller und Digitale Elektronik Übergang zwischen Regler und DAC


von Jonathan I. (jona_t)


Lesenswert?

Hi Leute,

ich habe folgenden Beispielcode für eine Regelung geschrieben:
1
previous_output_value = actual_output_value;
2
actual_error = target_value - actual_value;
3
actual_output_value = previous_output_value + r0*actual_error;
Der Wert der Variable actual_output_value soll dann einem 12Bit-DAC 
übergeben werden.

Beim Debuggen stelle ich fest, dass meine Stellgröße manchmal negativ 
ist.

Meine Fragen lauten:
1. Soll ich die untere Grenze der Stellgröße auf 0 setzen, da der DAC 
nur Spannungen im Wertebereich 0...2,5V ausgeben kann ?

2. In einigen Beispielen habe ich gesehen, dass die Stellgröße noch mit 
dem LSB-Wert multipliziert wurde. Warum ?

Die Fragen mögen doof klingen, aber ich schreibe zum ersten Mal ein 
Regelalgorithmus und fühle mich dabei ein bisschen unsicher.

Ich freue mich auf alle Antworte

Jona

von Karl H. (kbuchegg)


Lesenswert?

Jonathan I. schrieb:

> Beim Debuggen stelle ich fest, dass meine Stellgröße manchmal negativ
> ist.
>
> Meine Fragen lauten:
> 1. Soll ich die untere Grenze der Stellgröße auf 0 setzen, da der DAC
> nur Spannungen im Wertebereich 0...2,5V ausgeben kann ?

Dein DAC wird wohl dann mit negative Zahlen herzlich wenig anfangen 
können. Sehr wahrscheinlich wird der sogar mit unsigned Werten arbeiten. 
D.h. aufgrund des Aufbaus von 2-er Komplement-Zahlen wird der deine 
negativen Werte als sehr grosse positive Zahlen ansehen.

Es ist immer gut, wenn man sich an vorgegebene Grenzen hält. Wenn dein 
DAC nur Werte im Bereich 0 bis sagen wir mal 2048 richtig verarbeiten 
kann, dann wird es eine ziemlich gute Idee sein, dafür zu sorgen, dass 
dieser Wertebereich auch nicht verlassen wird. Es ist zwar schön, wenn 
dein Regelalgorithmus auf eine Temperatur von 3 Millionen Grad aufheizen 
will. Wenn aber der Tauchsieder nicht mehr als 120° hergibt, dann kann 
sich dein Regelalgorithmus Kopf stellen. Mehr als diese 120 wirds nicht.

Daher: ja.
Wenn in deiner Regelschleife negative Zahlen rauskommen, und der DAC 
damit nichts anfangen kann, dann wird es eine ziemlich gute Idee sein 
nicht darauf zu bauen, dass irgendeine magische höhere Instanz eingreift 
und das wieder ausbügelt (es sei denn in der Doku steht, dass das ok 
ist). Kleiner als 0 geht nun mal nicht.

> 2. In einigen Beispielen habe ich gesehen, dass die Stellgröße noch mit
> dem LSB-Wert multipliziert wurde. Warum ?

Kommt eben drauf an, in welchen Einheiten die Regelschleife operiert. 
Arbeitet die direkt mit den Werten, die zb an den DAC gehen oder 
operiert die zum Beispiel in der Einheit 'Grad Celsius'. Dann gibt es 
eben irgendeinen Zusammenhang zwischen dieser Einheit und dem was man an 
den DAC geben muss. Denn der will ja in 'seinen Einheiten' gefüttert 
werden.
In den Beispielen, die du gesehen hast, wird wahlrscheinlich die 
Regelschleife in der Einheit 'Volt' operieren. Wenn also die 
Regelschleife rauskriegt, dass der Ausgang auf 3.38V einzustellen ist, 
dann muss man logischerweise noch mit dem LSB-Wert multiplizieren um dem 
DAC diese 3.38V 'in seinen Einheiten' schmackhaft zu machen.

> zum ersten Mal ein Regelalgorithmus und fühle mich dabei ein
> bisschen unsicher.

Brauchst du nicht. Mit ein bisschen Hausverstand ist das alles kein 
Problem. Du regelst als Mensch dauernd irgendwas und machst das intuitiv 
schon richtig. Wenn ein Heizkörperventil schon komplett zu ist, dann 
versuchst du nicht noch weiter zuzudrehen. Denn erstens bringt das 
nichts und zweitens ruinierst du es damit höchstens. Aber Effekt 
erreichst du damit keinen mehr. Komplett abgedreht ist nun mal komplett 
abgedreht. Noch weniger geht nicht.
Genauso in der umgekehrten Richtung. Ist das Heizkörperventil (im 
Winter) voll aufgedreht, dann bringt es nichts mehr, es noch weiter 
aufdrehen zu wollen. Mehr als 'schon komplett offen' geht nun mal nicht. 
Da spielt es auch keine Rolle mehr, ob der holden Weiblichkeit kalt ist 
oder nicht.

von Jonathan I. (jona_t)


Lesenswert?

Hi Karl,

danke für die rasche und ausführliche Antwort.

Jona

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