Hallo an alle Regler-Experten, Ich habe einen PID-Regler für die Geschwindigkeitsregelung eines DC-Getriebemotors (300 U/Min). Geregelt wird per Arduino. Mein Feedback ist ein AS5600 Sensor. Der gibt 0..5V aus je nach Winkel. Der Arduino hat 10 Bit Analog-Eingänge, so dass ich 1024 Werte pro 360 Grad habe. Aus der Winkeländerung pro Zeit berechne ich mir die U/Min. Ich kann Sensorauswertung und Regler bis zu einem Takt von 10ms aufrufen. Allerdings jittert mein Sensor-Signal umso mehr, je schneller ich abtaste (hab ja nur ein paar wenige Digits pro Zeitintervall). Jetzt meine Frage: Macht es Sinn, den Eingangswert zu glätten (z.B. Mittelwert) oder verschlechtere ich dadurch die Reaktionszeit meiner Regelstrecke?
Richard R. schrieb: > oder verschlechtere ich dadurch die Reaktionszeit meiner > Regelstrecke? Wie schnell soll denn die Reaktionszeit sein. Schneller als die Mechanik das kann macht keinen Sinn und führt nur zu Problemen. Wie berechnest du denn aus den Messwerten deine Drehzahl, schliesslich sagst du du regeslt auf Drehzahl.
Lach schrieb: > Wie schnell soll denn die Reaktionszeit sein. > Schneller als die Mechanik das kann macht keinen Sinn und führt nur zu > Problemen. > Wie berechnest du denn aus den Messwerten deine Drehzahl, schliesslich > sagst du du regeslt auf Drehzahl. der Motor bewegt keine große Last, so dass er recht schnell reagiert. Ich dachte an eine Abtastung von 20ms. Die Drehzahl berechne ich so: Pro Takt messe ich die Zeit in Millisekunden (Arduino-Systemzeit) und ermittle die Differenz der Winkelstellung beim letzten Takt. Aus diesen beiden Werten kann ich dann eine Drehzahl berechnen. Anbei mal eine aktuelle Aufzeichnung:
Ist dein Winkelsignal überhaupt linear zum tatsächlichen Winkel? Das muss man eigentlich kalibrieren/korrigieren, denn schon minimales Verschieben des Magneten gegenüber der idealen Achse sorgt dafür, dass das Signal "eiert". Die Ableitung davon dann erst recht.
Deine Kurve sieht jedenfalls nicht nach Rauschen aus, sondern nach irgendeiner systematischen Abweichung. Passt die Periodendauer dieser Wobbel zur Drehzahl?
wer schrieb: > Ist dein Winkelsignal überhaupt linear zum tatsächlichen Winkel? > > Das muss man eigentlich kalibrieren/korrigieren, denn schon minimales > Verschieben des Magneten gegenüber der idealen Achse sorgt dafür, dass > das Signal "eiert". > > Die Ableitung davon dann erst recht. Um den Winkelsensor hab ich ein Gehäuse mit dem 3D-Drucker gemacht mit einem Loch genau über dem Sensor zum Zentrieren des Magneten. Der Magnet sitzt fest auf der Achse. Ich denke, da ist keinerlei Spiel. Meine Mechanik selbst ist nicht optimal. Der Wellenverbinder zum Motor eiert ein kleines bisschen, so dass ich dadurch einen Rippel auf der Drehzahl habe. Nicht optimal, es ist halt nur Modellbau-Mechanik! Trotz allem sieht mein Eingangssignal deutlich besser aus, wenn ich z.B. mit 50ms abtaste anstatt mit 20ms. Blöderweise, je besser meine Auswertung wird (Datalogger), um so eher fallen solche "Unschönheiten" auf. Aber Du hast recht, ich mache noch mal einen besseren Versuchsaufbau, um den Rippel durch die Mechanik zu eliminieren.
Lass deinen Aufbau mal ungeregelt bei konstanter Spannung laufen und zeichne eine Umdrehung mit möglichst hoher Abtastrate auf. Einige kHz Samplerate sind mit analogRead() drin, wenn man in ein Array schreibt und erst hinterher Seriell ausgibt.
Sven B. schrieb: > Deine Kurve sieht jedenfalls nicht nach Rauschen aus, sondern nach > irgendeiner systematischen Abweichung. Passt die Periodendauer dieser > Wobbel zur Drehzahl? ja genau, das könnte hinkommen! Die Kurve habe ich bei 250 U/Min gemacht. Wenn ich das umrechne, komme ich ungefähr auf eine Anzahl der Umdrehungen, die er Anzahl der Wobbel entspricht!
Richard R. schrieb: > Aber Du hast recht, ich mache noch mal einen besseren Versuchsaufbau, um > den Rippel durch die Mechanik zu eliminieren. Das wird nicht funktionieren (außer durch Zufall). Selbst wenn du den Magnet mechanisch perfekt ausrichtests, weißt du nicht wie die Magnetisierung genau verläuft. Da führt an Korrektur per Software leider kaum ein Weg vorbei, wenn man die Präzision braucht.
wer schrieb: > Richard R. schrieb: >> Aber Du hast recht, ich mache noch mal einen besseren Versuchsaufbau, um >> den Rippel durch die Mechanik zu eliminieren. > > Das wird nicht funktionieren (außer durch Zufall). Selbst wenn du den > Magnet mechanisch perfekt ausrichtests, weißt du nicht wie die > Magnetisierung genau verläuft. > > Da führt an Korrektur per Software leider kaum ein Weg vorbei, wenn man > die Präzision braucht. das heißt, ich bräuchte einen Präzisions-Drehwertgeber, um meinen AS5600 Sensor zu kalibrieren? Das wäre dann doch etwas viel Aufwand!
Richard R. schrieb: > ich bräuchte einen Präzisions-Drehwertgeber, um meinen AS5600 Sensor zu > kalibrieren? Nein, wie gesagt, einfach 1 Umdrehung aufzeichnen. Theoretisch müssten die Werte genau auf einer Gerade liegen. Praktisch werden 0 und 360 Grad genau passen und dazwischen hast du eher eine Art S-Kurve. Aber das alles ist natürlich nur nötig, wenn die Genauigkeit wie sie jetzt ist nicht reicht. Bei deinem Plot kann ich die Skalierung nicht nachvollziehen, aber rein optisch sieht das für mich nach einer einwandfreien Regelung aus.
wer schrieb: > > Nein, wie gesagt, einfach 1 Umdrehung aufzeichnen. Theoretisch müssten > die Werte genau auf einer Gerade liegen. > Praktisch werden 0 und 360 Grad genau passen und dazwischen hast du eher > eine Art S-Kurve. das funktioniert ja nur, wenn ich eine Mechanik habe, die absolut mit konstanter Geschwindigkeit dreht. wenn ich so eine Unwucht habe, dann kann ich ja nicht kalibrieren. Deswegen kam ich auf den Vergleich mit einem präzisen (Referenz) Drehwertgeber; aber ich verstehe jetzt, was Du meinst! Du gehst davon aus, dass der Geberwert bezogen auf den Winkel nicht ganz linear ist. > > Aber das alles ist natürlich nur nötig, wenn die Genauigkeit wie sie > jetzt ist nicht reicht. naja...das kann ich so noch nicht genau abschätzen...Fehler summieren sich ja auf; es kommt noch eine Positionsregelung oben drauf und die Mechanik hat ja noch zusätzliches Spiel. Am Ende muß ich mehrere Motoren miteinander synchronisieren. Außerdem lese ich den Wert ja als Analogwert ein. Der Arduino wird da auch nicht genau linear sein. Besser wäre es, ich würde den Wert vom AS5600 über I2C einlesen. Aber am Schluß brauche ich 14 Motoren. Dafür hat der Arduino Mega genügend Analog-Eingänge. Mit I2C wäre das aufwändig! > > Bei deinem Plot kann ich die Skalierung nicht nachvollziehen, aber rein > optisch sieht das für mich nach einer einwandfreien Regelung aus. an dem Plot muß ich noch ein bisschen arbeiten; ist ja alles selbst programmiert. Skalieren und Zoom sowohl in X-, als auch in Y-Richtung, ist alles noch nicht perfekt!
p.s. oder doch etwas einfacher. Ich könnte für einen Kalibrieraufbau einen kleinen Schrittmotor nehmen und die Schritte zählen. So könnte ich bei jedem Step den Wert vom AS5600 lesen und die Kurve aufnehmen.
Richard R. schrieb: > Mit I2C wäre das aufwändig! Ja, denn du kannst die Adresse nicht ändern. Richard R. schrieb: > das funktioniert ja nur, wenn ich eine Mechanik habe, die absolut mit > konstanter Geschwindigkeit dreht. Bei einigermaßen hoher Drehzahl sorgt die Massenträgheit schon dafür, dass die Drehung iRdM gleichförmig läuft. Richard R. schrieb: > Der Arduino wird da auch nicht genau linear sein. Nein, aber sehr sicher linear genug. Richard R. schrieb: > Fehler summieren sich ja auf; es kommt noch eine Positionsregelung Nein, durch das Integrieren heben sich die Schwankungen langfristig ja näherungsweise auf. Schlimmer wirds durch Ableiten, wie du am Geschwindigkeitssignal siehst.
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.