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
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.
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.
@ 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
@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
@ 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
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.
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.
@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.
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.
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
@ 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.
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.
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.
@ ernst oellers (ernstj)
>Falk Brunner schrieb NICHT:> Es ist ein Mehrpunktregler:
Bitte mal richtig zitieren! Das war Ingo!
Beitrag "Re: regelalgorithmus"
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...
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"