heute habe ich versucht die Theorie und die Praxis wieder etwas zu vereinen. Eigentlich hatte ich vor, mit Werten aus der Praxis den PID-Regler zu simulieren. Soweit bin ich allerdings noch nicht gekommen bzw. das ist mir so nicht möglich (erkläre ich weiter unten).
Da ich jetzt schon Live-Werte des Getriebemotors vorliegen habe möchte ich als erstes mal das tatsächliche Verhalten des Getriebemotors ohne Last zeigen. Ich habe ein PWM.duty(80) gewählt und den Motor stoppen lassen, wenn die aktuelle Positionsmessung >= 1111 Schritte ist.
Aufgezeichnet habe ich alle 0,02s die Schritte und die verstrichene Zeit. Dafür habe ich ticks_us() und 'ticks_diff()' verwendet. Aus den Werten lies sich die Winkelgeschwindigkeit berechnen und die habe ich abhängig von der zurückgelegten Gradzahl aufgezeichnet:
https://www.dropbox.com/s/o5ymquns1dn4aol/s_v.png?dl=0
Man erkennt, das sich *keine* konstante Geschwindigkeit einstellt. Das freut mich aus dem Grund schon, weil es einfach verdeutlicht wie wichtig Erfahrung ist und vorallem bin ich froh, das ich darauf gehört habe.
Falls dich die Werte interessieren: Die verstrichene Zeit und die Positionen bzw. Messpunkte des Encoders
Mal weiter zum Regler:
Die Steuergröße lässt sich wie folgt berechnen (Die Konstante der einzelnen Regler werden mit "K" und "p", "i" oder "d" abgekürzt)
Code: Alles auswählen
Steuergroesse = (Kp * Regelabweichung) + (Ki * Summe_der_Regelabweichung * Abtastrate) + ((Kd * (Regelabweichung - vorherige-Regelabweichung) / Abtastzeit)
https://www.dropbox.com/s/io11yq3raf4hrd9/pid.png?dl=0
Die Kurve sieht aber meiner Meinung nach schon mal so ähnlich aus, wie sie aussehen soll.
Ich kann jetzt aber so den Regler nicht weiter simulieren, weil ich ja nicht weis, wie das System auf Regeleingriffe reagiert. Jetzt bin ich mir über den nächsten sinnvollen Schritt unschlüssig.
Soll ich die Formel, die ich für den Regler gepostet habe in Python übersetzen und dann die Werte für die Konstanten experimentel herausfinden?
Mein Ist-Wert würde ich aus meiner gewünschten Umfangsgeschwindigkeit berechnen. Also sagen wir mal ich will das sich mein Rohr mit dem Umfang von 100mm mit 10mm/s dreht und nach einer 400° Umdrehung anhält.
Das wäre ein zu fahrender Weg von 111,1mm und der Vorgang müsste dann in 11,1s fertig sein.
Bekannt ist auch das eine Umdrehung 1000 Messpunkte hat, bei 400° wären das 1111 Messpunkte. Pro Sekunde müssten 100,1 Messpunkte überfahren sein und pro Millisekunde 0,1 Messpunkte oder anders gesagt 1 Messpunkt muss innerhalb von 10ms erreicht werden.
Das wäre dann mein Ist-Wert. In diesem Fall würde ich vergleichen ob sich alle 10ms der Messpunkt um eins erhöht hat und zwar solange bis ich 1111 Messpunkte überfahren habe. Das ergibt eine konstante Geschwindigkeit und die hält auf der gewünschten Position an (die Toleranz dabei ist bei einem flüßigen Schmelzbad dehnend).
Habe ich es verstanden bzw. sieht es so aus als ob ich es verstanden habe oder war das eher Quatsch?
Wie würde denn der nächste sinnvolle Schritt deiner Meinung nach aussehen?
Vielen Dank und Grüße
Dennis