Hallo zusammen, ich habe eine Frage bzgl. einer Drehzahlregelung von zwei gleichen Motoren. Ich möchte das beide Motoren von der gleichen Startposition zu einer definierten Endposition fahren. Dabei soll die aktuelle Position beider Motoren im Idealfall über den gesamten Zeitraum konstant sein. Meine aktuelle Regelung bildet die Differenz von beiden aktuellen Positionen und damit gehe ich in einen PID-Regler. Der Ausgangswert des PID-Reglers ist zwischen 0-1 begrenzt, da ich den Wert mit der maximalen Drehzahl des jeweiligen Motors multipliziere. Meine aktuelle Implementierung funktioniert auch ganz gut, aber wenn ich beispielsweise den einen Motor vor dem Start ein bisschen verdrehe (Differenz der Positionen zwischen beiden Motoren), dann laufen beide Motoren, aber die Differenz beider Positionen wird nicht so eliminiert, wie ich mir das vorgestellt habe. In meinem Kopf müsste der Motor, der weiter vorne startet, warten, bis der andere ihn eingeholt hat. Hat jemand eine Idee für eine Umsetzung? Über einen Tipp würde ich mich freuen. Vielen Dank schon einmal im Voraus.
Korbi schrieb: > ich habe eine Frage bzgl. einer Drehzahlregelung von zwei gleichen > Motoren. > ... > Hat jemand eine Idee für eine Umsetzung? Vergiss die Drehzahlregelung und setze statt dessen eine Positionsreglung ein. Um was für einen Motortyp handelt es sich?
Wolfgang schrieb: > Korbi schrieb: >> ich habe eine Frage bzgl. einer Drehzahlregelung von zwei gleichen >> Motoren. >> ... >> Hat jemand eine Idee für eine Umsetzung? > > Vergiss die Drehzahlregelung und setze statt dessen eine > Positionsreglung ein. > > Um was für einen Motortyp handelt es sich? Vielen Dank für deine Rückmeldung! Es handelt sich um einen permanentmagneterregten Drehstrom-Synchron-Motor. Ich verstehe aktuell noch nicht ganz, wie ich die Regelstrecken handhaben soll. Vorher habe ich zwei Regelstrecken aufgebaut - eine für jeden Motor. Dann ist mir aber schnell aufgefallen, dass die Differenzen der aktuellen Positionen bei beiden Motoren gleich sind (nur mit umgekehrten Vorzeichen). Durch meine Regelung ist es deshalb nicht möglich, eine vorher eingestellte Differenz der Lagen auszugleichen... Mein Ziel ist es, dass die Differenz der Positionen über die gesamte Fahrt so gering wie möglich ist. Ich komme leider nicht weiter und stehe auf dem Schlauch. Im Forum bin ich bisher auch noch nicht auf einen ähnlichen Fall gestoßen.
nur ein Motor und Achsen mechanisch koppeln oder Positionsreglung bzw. Winkelgeschwindigkeit der Achsen wenn der restliche mechanische Aufbau hinreichend schlupffrei ist.
Die Lagedifferenz als Korrektur des Drehzahlsollwerts einkoppeln. WS
Du kannst die Korrektur so machen, dass der eine Motor nicht schneller, der andere aber langsamer, nicht aber rückwärts fahren darf. Dann bleibt der vordere im extremen Fall stehen bis der andere aufschliesst. WS
WS schrieb: > Du kannst die Korrektur so machen, dass der eine Motor nicht schneller, > der andere aber langsamer, nicht aber rückwärts fahren darf. Dann bleibt > der vordere im extremen Fall stehen bis der andere aufschliesst. > > WS Vielen Dank für die Hinweise und Vorschläge! So wie du es hier schreibst WS habe ich es mir auch vorgestellt, aber ich habe ein Problem bei der Implementierung. Aktuell bilde ich die Differenz der beiden Positionen der Motoren und gehe damit in den PID-Regler (bei beiden Regelstrecken). Mit dem dabei entstehenden Wert beeinflusse ich die Drehzahl. Aber wie kann ich das genau umsetzen, dass der eine Motor (der weiter vorne ist) stehen bleibt, bis der andere nachgezogen ist bzw. das eine Rückwärtsfahrt vermieden wird. Ich setze das Projekt in Simulink und Stateflow um. Was Simulink angeht würde ich mich als fortgeschrittenen Anfänger bezeichnen. Aber die Idee hat mir auf jeden Fall schon neue Denkanstöße gegeben. Vielen Dank und schönes Wochenende!
Wenn du über Position gehst dann kannst du dem langsameren die Position des schnelleren als Führungsgröße geben damit er aufholt und dem schnelleren die Position des langsameren? In der Hoffnung, dass sich sie sich irgendwann treffen^^ Wenn du es genauer wissen willst: Du hast hier ein Mehrgrößensystem. Zwar sind die Motoren unabhängige Regelstrecken, aber durch das gemeinsame Regelungsziel kommt die Verkopplung rein. Mit einem Mehrgrößenregler á la H-infty oder LQR kannst du das Problem vermutlich gut lösen.
Das laufend ausführen dPosRL = Pos[R] - Pos[L] ; // Positionsdifferenz ly = mul_sw_sw( dPosRL, PWert ); // P-Regler lx = -asp.vFahr + ly; //Jetzt negativ if ( lx > 0 ) lx = 0 ; // Drehrichtungsbegrenzung if ( lx < -32767 ) lx = -32767 ; // Maximale Geschwindigkeit vSoll[L] = (s16)lx ; lx = -asp.vFahr - ly; if ( lx < -32767 ) lx = -32767 ; // Maximale Geschwindigkeit vSoll[R] = (s16)lx ;
Hans-jürgen H. schrieb: > Das laufend ausführen > > > dPosRL = Pos[R] - Pos[L] ; // Positionsdifferenz > > ly = mul_sw_sw( dPosRL, PWert ); // P-Regler > lx = -asp.vFahr + ly; //Jetzt negativ > if ( lx > 0 ) lx = 0 ; // Drehrichtungsbegrenzung > if ( lx < -32767 ) lx = -32767 ; // Maximale Geschwindigkeit > vSoll[L] = (s16)lx ; > lx = -asp.vFahr - ly; > if ( lx < -32767 ) lx = -32767 ; // Maximale Geschwindigkeit > vSoll[R] = (s16)lx ; Hallo Jans-Jürgen, vielen Dank für deine Antwort. Kannst du mir das vielleicht noch ein bisschen genauer erläutern von den Bezeichnungen. Grob habe ich es verstanden, aber ich stolper aktuell noch ein bisschen über die Benennungen in deinem Code. Vielen Dank für deine Unterstützung!
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.