Forum: Mikrocontroller und Digitale Elektronik regelalgorithmus


von Rainer K. (zebra)


Lesenswert?

Hallo zusammen,

ich habe eine Spannung U, die proportional zu einem PWM Wert ist. Die 
Spannung soll trotz Änderungen (Akku laden) auf einen bestimmten Wert 
geregelt werden. Dies soll in einer While(1) Schleife passieren und 
möglichst einfach sein. Geht so etwas?
1
while(1)
2
{
3
  while(Ugemessen<Uregel) PWM++;
4
  while(Ugemessen>Uregel) PWM--;
5
  
6
  // mach etwas anderes
7
}
Eventuell mit etwas delay in den while-Schleifen, wegen Reaktionszeit. 
Spannung Uregel=4.1V (Li-Ion Akku), Messauflösung 10mV.
Wird der Wert mit einer Treppe angefahren und bewegt sich dann im 
Bereich 4.09V-4.11V (natürlich nur wenn die Werte nicht messtechnisch zu 
stark schwanken)?
Oder fängt das bei Schwankungen an zu schwingen?
Oder kennt jemand einen besseren, aber einfachen Regelalgorithmus, also 
kein PID wo man die Parameter erst ermitteln muss.

mfG

Rainer

von Karl H. (kbuchegg)


Lesenswert?

Rainer K. schrieb:

> Eventuell mit etwas delay in den while-Schleifen, wegen Reaktionszeit.

Ich würde sowohl die delay als auch die seperaten while Schleifen weg 
lassen.

Du hast ja schon die übergeordnete while-Hauptschleife. Welchen Sinn 
soll es haben, die noch zusätzlich zu verlangsamen?
1
  while( 1 ) {
2
    Ugemessen = adc_Read( ... );
3
4
    if( Ugemessen < Uregel - Hyterese && PWM < PWMMaximum )
5
      PWM++;
6
    if( Ugemessen > Uregel + Hysteres && PWM >= 0 )
7
      PWM--;
8
  
9
    // mach etwas anderes
10
11
  }

eine kleien Hysterese könnte auch nicht schaden, so dass die Spannung 
erst mal nennswert vom Soll abweichen muss, ehe dann die PWM nachgeführt 
wird.


> Oder fängt das bei Schwankungen an zu schwingen?

Das kommt auf die Aussenbeschaltung an und wie schnell die durch die PWM 
erzeugte Spannung sich verändern kann. Um den Übergang von der PWM zur 
SPannung zu kriegen, hast du ja einen Tiefpass eingebaut.

> Oder kennt jemand einen besseren, aber einfachen Regelalgorithmus, also
> kein PID wo man die Parameter erst ermitteln muss.

Was stört dich am PID?
Die Parameter sind doch schnell einigermassen gut ermittelt:
alle Koeffizienten auf 0.
Kp in Schritten stufenweise erhöhen, bis die Ausgangsspannung zu 
schwingen anfängt.
Dann wieder ein bischen zurücknehmen.
Ki dazu geben. Wieder solange erhöhen, bis Schwingneigung einsetzt.
Ki wieder etwas erniedrigen. Eventuell noch mal mit Kp probieren, ob man 
den Wert noch etwas erhöhen kann.
ein kleines Kd dazu geben und ein paar mal die Spannung krass ändern.

Das sollte eigentlich dann schon ganz gute PID Koeffizienten ergeben.

von c-hater (Gast)


Lesenswert?

Rainer K. schrieb:

> Geht so etwas?
>
1
> while(1)
2
> {
3
>   while(Ugemessen<Uregel) PWM++;
4
>   while(Ugemessen>Uregel) PWM--;
5
> 
6
>   // mach etwas anderes
7
> }
8
>

Das kann funktionieren, kann aber auch genausogut in wüsten 
Regelschwingungen enden.

> Oder kennt jemand einen besseren, aber einfachen Regelalgorithmus, also
> kein PID wo man die Parameter erst ermitteln muss.

Das ist weniger eine Frage das Algorithmus, als vielmehr der 
Regelstrecke.

Letztlich ist deine Routine nämlich auch nix anderes als ein P-Regler 
mit fixem Kp und variabler Totzeit! DAS mußt du dir klarmachen.

Die Komplexität der Regler haben die Wissenschaftler nicht erfunden, um 
dich zu ärgern. Die haben nur formal zusammengefaßt, was die 
Naturgesetze implizieren. Und ob du magst oder nicht: Die gelten auch 
für dich.

von Rainer K. (Gast)


Lesenswert?

@ Karl Heinz, du hast recht die if Abfrage ist viel besser. Ich muss nur 
dafür sorgen, dass "//mach etwas anderes" nicht zu lange dauert. Muss 
aber auch nicht allzu schnell sein, da es um einen Solarlader im Trickle 
Mode geht und die Sonnenintensität durch Wolken sich nicht soo schnell 
ändert.

@ c-hater, du hast natürlich recht ist auch nur ein P-Regler und es 
klappt bei meiner Anwendung (siehe oben) ganz gut :) Komplexität nur 
wenn nötig.

Danke euch beiden, hat mich schon weiter gebracht.

Rainer

von Rainer k. (Gast)


Lesenswert?

@c-hater Ich habe noch mal darüber nachgedacht. Ich muss widersprechen. 
Es ist kein P-Regler. Bei diesem ist die Änderung proportional zur 
Abweichung, deshalb auch die asymtodische Annäherung an den Sollwert. 
Der beschriebene Algorithmus führt zu einer Treppe mit konstanter pos. 
oder neg. Steigung (vorausgesetzt konstante Zykluszeit), die am Sollwert 
aufhört bzw. anfängt um 1 Schritt hin- und herzuschwanken. Sollte es ein 
P-Regler sein müsste die Schrittweite vom Abstand zum Sollwert erhängen. 
Oder sehe ich das falsch?

Rainer

von Falk B. (falk)


Lesenswert?

@ Rainer k. (Gast)


>Bei diesem ist die Änderung proportional zur
>Abweichung, deshalb auch die asymtodische Annäherung an den Sollwert.
>Der beschriebene Algorithmus führt zu einer Treppe mit konstanter pos.
>oder neg. Steigung (vorausgesetzt konstante Zykluszeit), die am Sollwert
>aufhört bzw. anfängt um 1 Schritt hin- und herzuschwanken.

Das ist ein Zweipunktregler.

http://de.wikipedia.org/wiki/Regler#Zweipunktregler

von Ernst O. (ernstj)


Lesenswert?

Rainer k. schrieb:
> Es ist kein P-Regler.

Ich stimme dir zu: das ist kein P-Regler, sondern ein I-Regler.

Beide Typen zu verwechseln ist schnell gemacht, da braucht man nicht mal 
nachzudenken: Man gewinnt das Regelsignal aus der Regelabweichung. Aber 
wie? progammiertechnisch gesehen ist ein I-Regler viel simpler als ein 
P-Regler. Und der simpelste Regler war doch der P-Regler, oder? Und 
schon ist es passiert. Dann wundert man sich, wieso das Ding beim 
abgleichen so bockig ist.

Merke:

Der P-Regler lebt von der Regelabweichung. Ist der Idealwert erreicht, 
also die Regelabweichung Null, liefert er das Regelsignal mit dem Wert 
Null.

Der I-Regler hält das Regelsignal konstant, wenn der Idealwert erreicht 
ist.

von Ernst O. (ernstj)


Lesenswert?

Falk Brunner schrieb:
> Das ist ein Zweipunktregler.

Da stimme ich dir nicht zu. Zweipunktregler kennen nur die zwei 
ZZustände "an" und "aus". Feinheiten wie Inkrementierung oder 
Dekrementierung des Regelsignals kommen da nicht vor.

von Falk B. (falk)


Lesenswert?

@ernst oellers (ernstj)

>> Das ist ein Zweipunktregler.

>Da stimme ich dir nicht zu. Zweipunktregler kennen nur die zwei
>ZZustände "an" und "aus". Feinheiten wie Inkrementierung oder
>Dekrementierung des Regelsignals kommen da nicht vor.

Hmm, stimmt, aber ein "echter" I-Regler ist es auch nicht, bestenfall 
ein Extremfall mit binärem Eingang. Ein normaler I-Regler löst die 
Regelabweichung mit deutlich mehr als 1 Bit auf.

Man könnte ggf. von einer Mischung aus I-Regler und Zweipunktregler 
sprechen.

von Gerd (Gast)


Lesenswert?

Es definitiv kein I-Regler,
der I-Regler integriert die Regelabweichung, daher der Name.
Heißt: je größer die Regelabweichung desto größer die Steigung
der "Rampe" am Ausgang.
Die Steigung ist hier aber durch die Taktung festgelegt und daher findet 
keine Integration statt => kein I-Regler.

von Ingo (Gast)


Lesenswert?

Gerd schrieb:
> Die Steigung ist hier aber durch die Taktung festgelegt und daher findet
> keine Integration statt => kein I-Regler.
Die Integration findet direkt im PWM Register statt. Nur kümmert sich 
hier der Regler nicht um die Regelabweichung, sondern deren Dauer.

Es ist ein Mehrpunktregler:
http://de.wikipedia.org/wiki/Regler#Mehrpunktregler



Ingo

von Falk B. (falk)


Lesenswert?

@ Gerd (Gast)

>Es definitiv kein I-Regler,

Doch, er hat I-Verhalten. PWM ist der Integrator.

>der I-Regler integriert die Regelabweichung, daher der Name.

Das tut der hier auch, nur dass die Regelabweichung binär begrenzt wird.
Dashalb ist es kein "normaler" I-Regler.

>Heißt: je größer die Regelabweichung desto größer die Steigung
>der "Rampe" am Ausgang.

Ja, hier aber wegen der Begrenzung eben nicht. Er kann nur das 
Vorzeichen untescheiden.

>Die Steigung ist hier aber durch die Taktung festgelegt und daher findet
>keine Integration statt => kein I-Regler.

Auch ein normaler digitaler I-Regler hat eine Taktung.

von Ernst O. (ernstj)


Lesenswert?

OK, für grosse Regelabweichungen haben wir hier einen nicht idealen I- 
Regler vor uns. Aber bedenke, dass bei jedem Schleifendurchlauf die PWM 
nachgesteuert wird. Die Anzahl der Schleifendurchläufe pro Sekunde ist 
hoch genug, dass das angesichts der Trägheit der meisten Regelkreise 
eine  Abweichung vom idealen I-Regler nicht messbar sein dürfte. Und da 
mich mehr interessiert, wie sich der Regler an den Sollwert 
heranpirscht, ist es wohl gerechtfertigt, dies als I-Regler zu 
betrachten. Ob der bei 20% Regelabweichung gerade eben messbar vom 
idealen I-Regler abweicht tangiert mich peripher.

von Falk B. (falk)


Lesenswert?

@ Ingo (Gast)

>Es ist ein Mehrpunktregler:
>http://de.wikipedia.org/wiki/Regler#Mehrpunktregler

Aber kein reinrassiger.

von Ernst O. (ernstj)


Lesenswert?

Falk Brunner schrieb:
> Es ist ein Mehrpunktregler:

Ja, kann man so sehen. Ein 1024-Punktregler. Oder wieviele Stufen die 
PWM hat.

von Amateur (Gast)


Lesenswert?

Wenn man I-Regler mit "Irgendwas" übersetzt kommt es doch hin.

Wie Karl Heinz bereits gesagt hat kann ein bisschen Hysterie nicht 
schaden. Ich habe ja keine Ahnung, woher die Differenzen kommen, aber 
ich würde auch nicht "as fast as possible" abfragen. Meist handelt man 
sich damit unnötigen Ärger ein.

von Klaus W. (mfgkw)


Lesenswert?

Amateur schrieb:
> Wie Karl Heinz bereits gesagt hat kann ein bisschen Hysterie nicht
> schaden.

Hat er nicht, er sprach von Hysterese.

von Falk B. (falk)


Lesenswert?

@ ernst oellers (ernstj)

>Falk Brunner schrieb NICHT:

> Es ist ein Mehrpunktregler:

Bitte mal richtig zitieren! Das war Ingo!

Beitrag "Re: regelalgorithmus"

von Ernst O. (ernstj)


Lesenswert?

sorry

von Amateur (Gast)


Lesenswert?

@ Klaus Wachtler

>Hat er nicht, er sprach von Hysterese.

Vielen, vielen Dank auch. Ohne Deine gütige Hilfe wäre ich da nie drauf 
gekommen;-)

von c-hater (Gast)


Lesenswert?

ernst oellers schrieb:

> Die Anzahl der Schleifendurchläufe pro Sekunde ist
> hoch genug...

Woher willst du DAS denn wissen? Im Originalquellttext steht als 
einziger Hinweis:

>  // mach etwas anderes

Es ist nichts zur Laufzeit von "etwas anderes" definiert, ja nicht mal, 
ob diese wenigstens näherungsweise konstant ist...

> dass das angesichts der Trägheit der meisten Regelkreise

Du hast offensichtlich noch nie geschaltete Strom/Spannungsversorgungen 
geregelt. Sonst wärest du dir des Schwachsinns deines Spruchs bewußt 
gewesen und hättest ihn dementsprechend unterlassen.

Ja Alter: es gibt auch Leute, die was anderes zu Regeln haben als die 
Temperatur von multikilogrammweise Wasser. Da muß es etwas flinker gehen 
und es spielt schon eine Rolle, ob der Regler selber zehn Takte mehr 
oder weniger benötigt, vom undefiniertem Zeitverhalten von "etwas 
anderes" garnicht zu reden...

von Ernst O. (ernstj)


Lesenswert?

c-hater schrieb:
> Du hast offensichtlich noch nie geschaltete Strom/Spannungsversorgungen
> geregelt. Sonst wärest du dir des Schwachsinns deines Spruchs bewußt
> gewesen und hättest ihn dementsprechend unterlassen.

Dir ist entgangen, dass der TO

Rainer K. schrieb:
> Eventuell mit etwas delay in den while-Schleifen, wegen Reaktionszeit.

oder, anders gesagt: "Hilfe, meine Regelung hat Langeweile..."

Ich (ernst oellers) schrieb:
> angesichts der Trägheit der meisten Regelkreise

Also: Wo ist das Problem?

Wenn dein Regelkreis allerdings so flink ist wie du sagst, dann lege den 
Regler entsprechend aus. Wenn starke Lastschwankungen vorkommen, sollte 
Augenmerk auf den D-Beitrag zum Regelsignal gelegt werden, was 
allerdings wieder mehr Programmzyklen dauern würde, was dann wieder 
Regelqualität kostet. Wahrscheinlich wäre dann sogar ein Analogregler 
die bessere Lösung. Der weiss sofort was zu tun ist und nicht erst nach 
x Taktzyklen. Er muss nicht sein Rechenergebnis in PWM Signale 
umwandeln, die vor der Weiterverarbeitung erst noch gemittelt werden 
müssen. Der muss nicht einmal Istwerte digitalisieren, bevor er mit dem 
rechnen anfängt. Und er lässt sich auch nicht ablenken von "mach was 
anderes"

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.