Forum: Mikrocontroller und Digitale Elektronik PID-Regler in Software


von Sascha (Gast)


Lesenswert?

Hallo!

Ich möchte einen PID-Regler in Software implementieren, um die Drehzahl
eines Motors via Frequenzumrichter zu regeln.

Auf http://www.roboternetz.de/wissen/index.php/Regelungstechnik ist das
ganz gut beschrieben. Dort wird folgende Gleichung vorgestellt:

esum = esum + e
y = Kp * e + Ki  Ta  esum + Kd * (e – ealt)/Ta
ealt = e

Jetzt tut sich aber bei mir ein Problem auf.... Den Frequenzumrichter
kann ich von 0 bis 255 (=0 - 100%) ansteuern. Wenn jedoch bei o.g.
Gleichung die Regelabweichung e negativ ist, dann ist auch y negativ,
was bedeutet, dass ich diesen Wert am FU nicht einstellen kann.

Wäre es korrekt 0-255 zu diesem Zweck einfach auf -128 bis +128
abzubilden?? d.h. wenn Y = -128 dann stelle ich am FU 0 ein.... ?

Danke,
Sascha

von johnny.m (Gast)


Lesenswert?

Das kommt drauf an, was für einen FU Du hast. Wenn der tatsächlich
0..255 auf 0..100% abbildet, dann kann er wohl nur eine Drehrichtung.
Dann kannst Du auch nicht die -128..+127 auf den Bereich abbilden, weil
Du dann bei einer negativen Ausgangsgröße nach wie vor positiv fährst,
nur eben langsamer...

von Sascha (Gast)


Lesenswert?

Als der Motor ist der Ventilator eins Holzvergaserkessels. d.h. ich
möchte nicht abhängig von der Motorlast die Drehzahl stabil halten...
warum sollte man dann auch die Frequenz erhöhen :-)

die Regelgröße ist vorerst die Abgastemperatur...

Mein problem ist eben: Was soll der Frequenzumrichter machen, wenn die
Reglergleichung einen Negativen Wert annimt... was passiert, wenn die
Abgastemperatur unter der Solltemperatur liegt...

Ich hoffe ihr versteht was ich meine.....

von ??? (Gast)


Lesenswert?

weniger als Stehenbleiben, also f=0 geht ja nicht...
Das mit dem -128...0...128 = 0...255 klappt. Aber nur schön, wenn die
normale Drehzahl im Mittel so bei 50% liegt...
sonst geht das auch, nur der Regler braucht andere Parameter.
Der Regler hat dann ja weniger Einfluss auf die Aufheizung als auf die
Abkühlung.

von ..... (Gast)


Lesenswert?

meinst nicht das es besser ist des bei 255 zu lassen ? Hast du mal ne
Sprungantwort aufgezeichnet und den Regler bestimmt ? (PTn-Strecke) bei
negativen Werten macht er halt nichts (passiert eh nur wenn er
schwingt). Deshalb musst die Parameter ohne Überschwingen einstellen
dann Pegelt er sich auf nen bestimmten Wert ein und behält den bei.
(ohne kühlen zu müssen was sinnlos ist)

von tsweller (Gast)


Lesenswert?

Von der Aufgabenstellung soll das Gerät doch wohl nur in einem
Quadranten arbeiten. Saugen wird der Ventilator doch nicht, oder?

Frage: Wenn Abgastemp zu niedrig, dann wird doch gepustet, mehr
verschwelt, oder wie geht das?

Ist da zum Autofahren oder wofür verwendet man das haute?

Ich glaube, es wird einfach nur mehr oder weniger Luftdurchsatz
erzeugt.


Mal sehen, was rauskommt.


ts

von Sascha (Gast)


Lesenswert?

Hallo!

Also nunja... der Holzvergaserkessel wird als Heizung (Wohnhaus,
Warmwasser) eingesetzt. Leider ist die Original-Regelung nicht gerade
sehr schlau... sonst hätte ich auch nix zum basteln :-)

Also normalerweise wird die Leistung über das Verhältniss zw. Primär-
u. Sekundärluft geregelt... aber das ist ein anderes Thema.

Die Theorie hinter meinem Ansatz ist, dass wenn die Abgaßtemperatur zu
hoch ist der Wirkungsgrad zu schlecht wird... d.h. bei 800°C Abgaß
verschwindet die Energie durch den Schornstein :-P

Zurück zum Thema:
Wenn die Drehzahl des Lüfters erhöht wird, dann steigt die Temperatur,
da das Feuer angefacht wird.
Wenn die Drehzahl 0 ist, dann schwelt das Feuer nur noch und die
Temperatur fällt.

Das ganze ist natürlich sehr vom Befeuerungszustand des Kessels
abhängig!!! Kann ich das also überhaupt so mit einem PID-Regler
realisieren? Oder bedeutet das, dass sie die Parameter ständig ändern.

Ich verstehe den mathematischen Zusammenhang scheinbar nicht richtig.
Wenn die Reglergleichung einen Wert < 0 zurück gibt, dann bedeutet das
Drehzahl=0. Das würde aber auch bedeuten, dass der Ventilator jedesmal
zum stehen kommt, wenn die Soll-Temperatur auch nur kurz überschritten
wird... dabei sollte die Drehzahl zunächst nur gedrosselt werden....

Deshalb wollte ich wissen, ob ich das ganze auf -127...+127 abbilden
soll.

Danke,
Sascha

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ich habe gerade erst einen PID (besser PI)-Regler in Software für die
Ansteuerung eines BLDC-Motors geschrieben und mir dabei eigentlich die
gleichen Fragen gestellt.

Antwort:
Die Gleichungen in der PID-Formel werfen einen Wert aus, den Du zur
Ansteuerung des Motors nimmst. Das paßt sich selbst an.

Aber: Wir sind an die Gegebenheiten der uC gebunden. So habe ich einen
Zahlenbereich von 16 Bit, den ich mit einem Extra-Bit ein Vorzeichen
geben (für den Error, den I-Anteil, den D-Anteil und die Summe).

Ich habe die Werte beobachtet und es so eingestellt, daß der I-Anteil
(die stärkste Größe) bei ca. 10000 den Motor richtig laufen läßt. Den
D-Anteil vergiß besser und den der P-Anteil hilft vielleicht beim
Starten des Motors.

Du gibst jedem Fehler (P,I,D) einen Faktor, der ihn bei der Addition
gewichtet und aus dem Ergebnis errechnest Du einen Wert für Deinen
PWM.
Bei mir kann die PWM einen Wert von 0 bis 255 ausgeben. Negative
Ergebnisse des Reglers werden grundsätzlich 0 und Werte über 255 werden
auf 255 begrenzt.

Gib alle nötigen Werte über die serielle auf ein Terminal aus und
spiele etwas mit den Faktoren !

von ..... (Gast)


Lesenswert?

Wenn du damit nicht weiter kommst mach ne Kennlinie von der Temperatur
und nimm dir die Vorlage von Ziegler/Nicholz oder so und bestimme die
Parrameter für den Regler(ersparst dir ne Menge Zeit am herumtesten)Am
besten wenn der Ofen schweelt den Ventilator auf vollgas und die
Temperatur zur Zeit aufnehmen. Wenn die Temperatur nicht mehr steigt
kannst beenden und an der Steigung die Zeiten ermitteln.

von Sascha (Gast)


Lesenswert?

Also ich bin nicht an die Grenzen eines uC gebunden... eher an die eines
ADM K6II :-)
...die Sache wird als mittels PC gesteuert. Da z.B. auch Temperaturen
in einer DB geloggt werden.

Das mit der Kennlinie werde ich mal in Angriff nehmen. Allerdings
bleibt die Frage, ob sich die Parameter (P, I und D) ändern, wenn ich
z.B. mehr oder weniger Holz verbrenne oder z.B. ein Weichholz statt
Hartholz... das würde mich interresieren. Oder ist die Kennlinie für
den Kessel spezifisch? Wie könnte ich sowas kompensieren... wird
sicherlich nicht leicht. :-/

von ich (Gast)


Lesenswert?

Reglerparameter ändern sich nicht selbständig, sonst wäre die
Funktionalität des Reglers eigentlich "sinnlos"

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Hast du schon über eine Fuzzy-Regelung nachgedacht? (Nur so am Rande)

Dein Regelkreis soll doch eine Motordrehzahl einstellen, die von der
Kesseltemperatur abhängig ist, oder?

von **** (Gast)


Lesenswert?

Hallo,

probier es doch einfach erst mal nur mit einem P-Regeler. Der liefert
zwar eine bleibende Regelabweichung, aber je nach Eigenschaften deiner
Strecke und dem Verstärkungsfaktor spielt das gar keine so große Rolle.


also: ("Soll-Wert" - "Ist-Wert") x "Verstärkungsfaktor"

Das ganze ist wesentlich einfacher als ein PID, wobei man natürlich
auch den PID von oben nehmen kann und I und D zu Null setzen.
Das Problem, dass du evtl. mit einem reinen P-Regler bekommst, ist
eigendlich das gleiche, das du beim PID auch hast, nämlich dass du die
"Verstärkung" der Strecke nicht kennst. Also wie doll brennts wenn
der Motor dreht. Folge hiervon kann sein, dass du einen
Verstärkungsfaktor zwischen Null und Eins brauchst und das wird unter
Umständen wenn man sich mit 8Bit begnügt etwas komplizierter.
Alternativ zum komischen Verstärkungsfaktor kannst du auch deinen
Regler bescheißen, indem du den Wert der Ist-Temperatur runterdrehst,
also z.B. ein Poti vor den Regler-Eingang.

Das hat dann zwar nur noch bedingt etwas mit den Herren Ziegler/Nicholz
zu tun, funktioniert aber auch fantastisch.

Hoffe ich konnte mich halbwegs verständlich ausdrücken.

von Klaus (Gast)


Lesenswert?

Wenn's doch um die Steuerung einer SAUBEREN Verbrennung geht, dann
sollte doch bitte eine Lambda-Sonde im Abgasrohr sein (wie beim
Kat-Automotor).
So kenne ich das jedenfalls von Hackschnitzel-Heizungen.

Und dann ist diese Lambda-Sonde ein ganz wesentlicher Sensor, sonst
produziert dein Teil viel Dreck und Kohlenmonoxid (gut für
Suizid-Experimente).

==> ALSO:  Eher eine STEUERUNG und nicht so'n kompliziertes Gedöns.

von Tom (Gast)


Lesenswert?

Wie Klaus schon meint würde ich die Regler (PID) hier vergessen.

Bevor man einen Regler programmiert sollte eigentlich der physikalische
Zusammenhang des Systems genau definiert sein. Ich bin mir sicher da
gibts noch mehr Meßwerte wie die Temperatur die für den Wirkungsgrad
eine rolle Spielen.

Ausserdem ist die Regelstrecke doch eher Träge, warum also nen
D-Anteil?

Ich würde als erstes mit einen einfachen 2-Punkt Regler es
ausprobieren.

Temperatur zu niedrig, Lüfter an;
Temperatur zu hoch, Lüfter aus;

Das ganze noch mit ner Hysterese versehen und vielleicht kannst Du da
schon mal am einfachsten sehen in welche Richtung der Wirkungsgrad des
Ofens abhaut.

cu

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.