Hallo zusammen, ich habe das Forum schon eine Weile durchforstet, aber bin zu dem Thema noch nicht richtig fündig geworden. Ich habe hier einen Servomotor (keinen Modellbauservo, wie in den tausenden Forenbeiträgen, die die Suche liefert). Genau genommen ist es also ein DC-Motor, welcher mit Hall-Sensoren und End-Schaltern eine Positionsrückgabe liefert. Für diesen Motor habe ich eine Platine mit Treibern entwickelt, welche mir ermöglicht mit Richtungsangabe und PWM den Motor anzusteuern. Die Ansteuerung erfolgt dann über einen Raspberry Pi, auf dem ein C-Programm läuft. Da bei mir das Thema "Regelungstechnike" wieder eine Weile zurückliegt, stehe ich grade auf dem Schlauch, wie ich meinem Programm beibringe, den Motor geschickt in der Geschwindigkeit zu regeln. Im Grunde sieht es so aus: das Programm weiß, auf welchem Winkel der Motor zu jedem Zeitpunkt ist. Die Aufgabe ist nun einen Sollwinkel anzufahren. Aus Sollwinkel und Istwinkel kann eine Differenz für die zu fahrende Strecke gebildet werden. Meine Messung hat ergeben, dass der Motor bei voller Geschwindigkeit mit etwa 4° pro Sekunde fährt. Die PWM lässt sich zwischen 10% und 100% regeln, um die Geschwindigkeit zu variieren. Mein Wunsch wäre, dass der Motor auf etwa 0.1° Genauigkeit den Istwert erreicht. Wie stellt man mit solchen Randbedingungen eine Formel auf, die mit den gegebenen Werten die Geschwindigkeit sanft hoch regelt und wieder sinnvoll runter regelt? Ich hoffe da gibt es etwas, bei denen man die Parameter experimentell anpassen kann, da ich kein kompliziertes Verhaltensmodell meines Motors in den Code pressen möchte. Hier noch mehr Daten zum konkreten Motor: es handelt sich hier um einen Zwei-Achsen-Positionierer, der eine Satellitenschüssel ausrichten soll. Genau genommen sind also zwei 24V-DC-Motoren drin. Für jede Achse einer. Je Achse gibt es zwei Hall-Sensoren und einen Endschalter. Azimuth-Achse: Bereich: 0°-180° maximale Geschwindigkeit: ca. 4°/s Sensoren: 0.01°/pulse Elevations-Achse: Bereich: 0°-40° maximale Geschwindigkeit: ca. 1.5°/s Sensoren: 0.0025°/pulse Ich freue mich auf jede Antwort und verbleibe mit freundlichen Grüßen, Martin.
Martin S. schrieb: > Da bei mir das Thema "Regelungstechnike" wieder eine Weile zurückliegt, > stehe ich grade auf dem Schlauch, wie ich meinem Programm beibringe, den > Motor geschickt in der Geschwindigkeit zu regeln. Es gibt ein 'Open Source Servo', in dem genauso wie bei dir, das Verhalten eines Modellbauservos nachgebildet wird http://www.openservo.com/ Dort kann man sich sicher Anregungen holen, wie die das machen. > Im Grunde sieht es so aus: das Programm weiß, auf welchem Winkel der > Motor > zu jedem Zeitpunkt ist. Die Aufgabe ist nun einen Sollwinkel anzufahren. > Aus Sollwinkel und Istwinkel kann eine Differenz für die zu fahrende > Strecke gebildet werden. > Meine Messung hat ergeben, dass der Motor bei voller Geschwindigkeit mit > etwa 4° pro Sekunde fährt. > Die PWM lässt sich zwischen 10% und 100% regeln, um die Geschwindigkeit > zu variieren. > > Mein Wunsch wäre, dass der Motor auf etwa 0.1° Genauigkeit den Istwert > erreicht. Ich würde da wahrscheinlich erst mal naiv mit einem PID Regler rangehen. Der ist einfach zu implementieren (die beste Beschreibung gibt es meines Erachtens auf www.roboternetz.de, google bringt dich da hin. > sinnvoll runter regelt? Ich hoffe da gibt es etwas, bei denen man die > Parameter experimentell anpassen kann, da ich kein kompliziertes > Verhaltensmodell meines Motors in den Code pressen möchte. Für PID Regler gibt es auch eine experimentelle Ermittlung der Parameter. Ebenfalls im PID Artikel auf dem Roboternetz zu finden
Wenn die stellgroessse, sprich Drehgeschwindigkeit fest und im Wesentlichen die Schritte gezehlt werden, dann wuerde ich einfach schreiten bis die Position erreicht ist.
Das Projekt des Meisters aus dem fernen Osten. http://elm-chan.org/works/smc/report_e.html Für gute/optimale Regelung, braucht man einen Kaskadenregler, so wie im Projekt gezeigt. Strom, Geschwindigkeit, Position.
Mal zur Klarstellung, soll der besagte Motor jetzt "nur" eine Satschüssel ausrichten oder ist es ein Motor für Satschüsseln der jetzt eine andere (präziesere, zeitkritischere) Aufgabe übernehmen soll? Danach richtet es sich ja ob man das Projekt a'la ELM-Chan aufziehen muss oder ob es auch ein schrittzähler mit Start- und Stoprampe tut.
Der Motor soll "nur" eine Satschüssel ausrichten. Es ist also ein Motor, der für diesen Zweck gebaut wurde und auch für diesen Zweck eingesetzt werden soll. Die Besonderheit ist nur, dass ich nicht für ein paar tausend Euro die Ansteuerungsgeräte vom Hersteller kaufe, sondern, dass ich die Gleichstrommotoren direkt über meine Leistungselektronik treibe und die ganze Steuerung dafür selbst entwickle. Danke übrigens für alle Antworten. Das gibt mir schonmal ein paar Denkanstöße.
Falk Brunner schrieb: > Für gute/optimale Regelung, braucht man einen Kaskadenregler, so wie im > Projekt gezeigt. Strom, Geschwindigkeit, Position. Ist wohl etwas übertrieben, wozu hier die Geschwindigkeit oder den Strom regeln? Der Strom sollte begrenzt sein, wenn er das nicht schon ausreichend durch den Innenwiderstand des Motors ist. Da dieser Motor mit Positionspoti ziemlich wie ein mechanischer Integrator ist von Steuerpannung zu Position (in niedrigem Freqenzband) ist hier ein P Regler evtl. schon ausreichend. Nur die Anlaufspannung des Motors/Mechanik könnte einen I-Anteil um den Regelfehler gegen Null laufen zu lassen wünschenswert machen, unwahrscheinlich. Die mögliche P Verstärkung wird hier begrenzt ab welcher Frequenz weitere, kleinere Zeitkonstanten in der Regelschleife signifikant werden und dann evtl. die Phase mehr als 135 Grad verschoben wird, Phasenreserve 45Grad. Das kann der elektrische Phasengang von Motor (L/R), (Serienwiderstand verkleinert diese ungewollte Zeitkonstante auf Kosten der Verlustleistung, alternative ist Stromquelle/Regelung) Phasengang durch mechanische Resonanzen oder die Gruppenlaufzeit durch die Abtastung/PWM dominiert sein. Der elektrische Phasengang des Motors kann zum Teil also bis zu einer gewissen Frequenz (Spannungsdynamik der Stromendstufe) durch eine Stromregelung ausgeglichen werden, das würde die mögliche Regelbandbreite steigern, das Frequenzband in dem der Motor ein rein mechanischer Integrator ist erweitern. Evtl. begrenzt die Auflösuung des Positionsgebers die praktikable P Verstärkung, wie meist bei hochleistungs-Servosystemen. Diese Quantisierung wird dann zur bestimmenden Nichtlinearität und die Regelschleife Schwingt/"Rauscht" ab zu hoher Verstärkung, was nicht zwingend so wäre bei höherer Auflösung des Positionsgebers. Also einfach einen P-Regler: PWM=(Soll-Ist)*GainP Programmieren und GainP steigern bis es unruhig wird, überschwingt. Regelt es dann Laständerungen noch gut genug aus, bleibt der Regelfehler im Limit, ist alles Prima.
Diese "Motoren" gibt es doch fertig mit integrierter Elektronik für Steuerung... DiSEqC Ich hatte mir mal oberflächlich Gedanken darüber gemacht eine Solarzelle mit so einem Ding auszurichten und habe nach einiger Suche auch die Beschreibung des Protokolls bekommen. Wäre es für Deinen Zweck nicht angebrachter wenn Dein Steuerrechner direkt die DiSEqC Daten zum Spiegelmotor schicken würde? Gruß, Holm
Hallo Holm, interessanter Einwurf, jedoch geht das wohl an meinem Projekt vorbei. Das Protokoll kannte ich noch nicht, aber der Motor wird nicht getauscht. Ich habe hier einen 3000-Euro-Antennenrotor. Der ist fester Bestandteil des Projektes und wird nicht ersetzt :) Übrigens sind die Satelliten, die ich erfassen möchte keine TV-Sats sondern Amateurfunk-Sats. Um die Position derer zu berechnen, habe ich übrigens ein externes Programm. Meine Aufgabe ist also schlicht nurnoch einen gegebenen Neigungswinkel und gegebenen Winkel auf der Kompassrose anzufahren. Daraufhin soll ich den Motor dann geschickt die Motoren ansteuern lassen, damit sie möglichst schnell aber nicht zu ruckartig die Position anfahren. Übrigens habe ich das Servo-Problem jetzt ein wenig in den Griff bekommen. Hilfreich war für mich dabei das Regelungsdiagramm auf elm-chan.org: http://elm-chan.org/works/smc/zblock3.png In Anlehnung dessen habe ich eine (etwas simplere) Regelung aufgebaut. Prinzipiell funktioniert meine Regelung nun wie folgt: die Winkeldifferenz zwischen Soll- und Ist-Wert wird mit einem experimentell bestimmten Faktor multipliziert und in eine Soll-Geschwindigkeit umgewandelt. (Das stellt sozusagen einen P-Regler dar.) Nun wird permanent die Ist-Geschwindigkeit mit der Soll-Geschwindigkeit verglichen. Ist die Ist-Geschwindigkeit zu niedrig (zu hoch) wird die PWM um einen Schritt erhöht (erniedrigt). Die Ist-Geschwindigkeit wird hierbei übrigens durch eine lineare Näherung ermittelt: eine Funktion, die aufgrund des derzeitig eingestellten PWM-Wertes eine Geschwindigkeit abschätzt. Das funktioniert meines Erachstens sehr akurat. Zuvor hatte ich, um die Ist-Geschwindigkeit zu ermitteln, in regelmäßigen Abständen die Positionssensorik ausgewertet. Da ich allerdings meine Regelschleife alle 10ms durchlaufen lasse, ist diese Methode dafür nicht fink genug gewesen. Daher dann die mathematische Näherung von PWM-Wert zu Geschwindigkeit. Das funktioniert grade ganz ausgezeichnet. Ich habe dann noch einen Toleranzwert definiert, damit die Regelung ein Ende findet. Gelegentlich schwingt das System dann ein bisschen über und regelt noch mal kurz zurück. Alles wunderbar. Jetzt muss ich nur noch das gleiche Prinzip auf die andere Achse anwenden.
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.