Hallo zusammen,
ich bin gerade dabei einen PI-Drehzahlregler für einen kleinen 6V DC-Motor zu entwickeln und bin dabei auf Verständnisprobleme gestoßen, die ich alleine
nicht lösen kann.
Zur Ansteuerung: Der Motor wird über eine 16-Bit PWM angesteuert (jedoch nicht die volle Breite, Steuerbereich 0-7485 dezimal) und die Geschwindigkeit/Drehzahl per Gabellichtschranke
und Encoderscheibe gemessen.
Um Paremeter der Strecke zu finden habe ich eine Sprungantwort aufgenommen. Im Betrieb will ich diese Werte glätten(mitteln).
Die Sprunghöhe war hier 80% vom Maximum, also ein PWM-Wert von 5988 bzw. ~4,8V. Zeitachse in ms.
Wo ich jetzt Hauptsächlich durcheinander komme sind die verschiedenen Möglichkeiten des Ist-/Sollwertvergleichs und der Stellgröße y.
Ich würde gerne den Sollwert als Geschwindigkeit in mm/s vorgeben, so wie ich es auch in der Sprungantwort-Aufzeichnung angegeben habe. Nun füttere ich ja den Regler
mit der Geschwindigkeit, was spuckt mir denn dann die Stellgröße aus? Wie komme ich auf einen PWM-Wert bei der Stellgröße?
Muss ich ich die Geschwindikeit erst in eine Drehzahl o.Ä. umrechnen ?
Hier hängts sehr bei mir.
Noch eine Frage zum Regler:
esum = esum + e
y = Kp * e + Ki * Ta * esum
Bei einer Regelabweichung von 0 wird die Stellgröße ja ebenfalls 0, ich denke hier müsste ich die Stellgröße jeweils zum aktuellen PWM-Wert hinzuaddieren, richtig?
Ich hoffe mir wird geholfen
Grüße
Geändert von razdraz (20.03.2014 um 09:31 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Danke für die Antwort. Verstehe ich das also richtig, dass der Soll-/Istwertvergleich quasi mit Spannungs- bzw. PWM-Werten stattfindet?
Beim Istwert muss ich dann also proportional zur Drehzahl die theoretische Spannung errechnen?
Bei jedem Regler werden immer gleiche Parameter (z.B. Drehzahl, Spannung, PWM, usw.) vergleichen, was frei wahlbar ist, abhängig davon, was genügend genau geregelt werden kann.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Okay, ich werde es mal ausprobieren.
Also du musst schon zwei Geschwindigkeiten miteinander vergleichen. Deine Istwerte würde ich vielleicht noch ein bisschen filtern, die sehen sehr verrauscht aus. Jedenfalls müsstest du deine Istwerte in mm/s umrechnen (geht meist über die Anordnung des Sensors) und dein Fehler wäre dann einfach e=Sollwert-Istwert. Musst eben nur drauf achten, dass die Umrechnung stimmt, dass es auch wirklich mm/s sind und nicht Löcher/Zeitschritt oder sowas (es sei denn, daraus ergibt sich direkt mm/s, was aber schon was von Zufall hätte).
Wenn ich das richtig sehe, hast du für den Integratoranteil entweder den Verstärkungsfaktor Kp/Tn oder Ki, was deine Werte da sein sollen, weiß ich nicht, ist ohne den Zusammenhang im Code aber auch schwer zu sagen.
Dass die Sachen, die ich vergleiche, gleich sein müssen ist verständlich. Der Codeschnipsel ist nur von http://www.rn-wissen.de/index.php/Regelungstechnik reinkopiert, da ging es auch nicht um konkrete Werte.
Ich steige aber immer noch nicht ganz dahinter.
Mal ein konkretes Beispiel:
Ich gebe den Sollwert 120mm/s vor, jetzt messe ich an der Strecke z.B. 110mm/s, dann ergibt sich eine Abweichung von 10mm/s, soweit so gut.
mit dem PI-Regler code:
esum = esum + e;
y = Kp * e + Ki * Ta * esum; mit Ta = 10ms, Kp = 5, Ki = 10 (fiktive Werte)
dann erhalte nach dem ersten Durchgang (esum=0) eine Stellgröße von 50mm/s.
Und diese Stellgröße muss ich jetzt in ein PWM-Signal umrechnen, oder?
Bei der Sprungantwort kam ich bei 80% duty cycle auf 400mm/s, das entspricht einem Compare-Registerwert von 5988 bei 7485 Periodendauer, sprich ich muss pro 1mm/s ca. 15 zum compare-register addieren/subtrahieren.
Mit dem oben errechneten y wäre die Stellgröße 50*15 = 750, und die addiere ich jetzt auf den aktuellen Registerwert drauf?
Ah, ok, darüber habe ich auch schonmal mit einem Kommilitonen und einem Dozenten diskutiert, da ich der Meinung bin, dass die Reglerverstärkung eine Einheitenumwandlung vornehmen müsste, in deinem Fall von Geschwindigkeit zu Spannung.
Nehmen wir mal an, der Motor steht und du gibst ganz plötzlich die Sollgeschwindigkeit 100mm/s vor, dann wird der Motor wahrscheinlich ganz langsam auf diesen Wert hinzulaufen. Hättest du einen reinen P-Regler, würde die Drehzahl allerdings nicht genau den Wert erreichen, denn wie du richtig herausgefunden hast, wäre dann ja die PWM 0. Ein P-Regler funktioniert nur mit einer bestimmten Regelabweichung. Diese kleine Regelabweichung mit Kp multipliziert würde dann nämlich genau die PWM hervorbringen, die zu dieser Drehzahl führt.
Um dem Dilemma mit der bleibenden Regelabweichung zu entgehen nimmt man ja gerade erst den I-Anteil hinzu. Dieser Addiert ja den Fehler immer weiter auf, multipliziert den Summenfehler mit einem Faktor und rechnet dies auf das Stellsignal auf. Und dieser Anteil ändert sich erst dann nicht mehr, wenn der Fehler 0 bleibt. Somit lässt sich diese bleibende Regelabweichung beheben, allerdings auf Kosten der Dynamik (dafür gibts dann PID-Regler).
Danke für die Antwort. Da hatte ich einen kleinen Denkfehler, ich habe nämlich wie im ersten Post geschrieben die errechnete Stellgröße immer zur aktuellen Stellgröße dazuaddiert. Das hat
zwar einigermaßen funktioniert, aber auch nicht wirklich toll.
Durch den I-Anteil wird bei einer Regelabweichung von 0 die Stellgröße ja nicht 0, ok, funktioniert schon viel besser.
Jetzt geht es noch um die richtige Parametrierung. Im Regelungstechnikartikel (http://www.rn-wissen.de/index.php/Regelungstechnik) ist immer die Rede von Verzugszeit Tu und Ausgleichszeit Tg,
allerdings habe ich das doch nur bei einem System mit dieser S-förmigen Sprungantwort, also PT2 ?
Unten im Artikel ist sogar ein Beispiel, das genau auf meinen Fall passt, jedoch verstehe ich nicht wie dort die Parameter ermittelt wurden. Der einzige Parameter, den ich aus meiner Sprungantwort lesen kann
ist Ts = ~50ms, damit komm ich jetzt nicht wirklich weit.
Lesezeichen