PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DC Motor PI-Regler Verständnisproblem



razdraz
20.03.2014, 09:23
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.

27810

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

PICture
20.03.2014, 10:16
Hallo!


... was spuckt mir denn dann die Stellgröße aus?

Üblicherweise kommt Sollwert aus Steuerung.


Wie komme ich auf einen PWM-Wert bei der Stellgröße?

Du musst für jeden nötigen Sollwert benötigten PWM-Wert ausrechnen.


Muss ich ich die Geschwindikeit erst in eine Drehzahl o.Ä. umrechnen ?

Normaleweise musst du gewünschte Geschwindigkeit immer in dafür benötigte Spannung, also PWM-Wert umrechnen.

razdraz
20.03.2014, 10:28
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?

PICture
20.03.2014, 10:34
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.

razdraz
20.03.2014, 11:57
Okay, ich werde es mal ausprobieren.

Geistesblitz
20.03.2014, 12:35
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.

razdraz
20.03.2014, 19:15
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?

Geistesblitz
20.03.2014, 23:58
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).

Unregistriert
21.03.2014, 08:58
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.