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
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...
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.....
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.
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 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
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
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 !
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.
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. :-/
Reglerparameter ändern sich nicht selbständig, sonst wäre die Funktionalität des Reglers eigentlich "sinnlos"
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.