Hallo miteinander Ich habe eine kleine Frage, da ich momentan nicht mehr weiter komme: Wie würdet Ihr ein Motor regeln? Ich habe ein PID Regler auf dem Mikrocontroller implementiert, und nun bin ich etwas am einstellen des Reglers. Die ganze Regelung soll einen Schlitten, welcher über einen DC Motor und Spindel + Getriebe bewegt wird, an eine bestimmte Position fahren, und diese halten. Der Motor wird über eine H-Brücke und PWM angesteuert. Bis jetzt habe ich die neue Position als solches dem Regler übergeben... (Alt: 0, dann neu 400). Dabei habe ich eine kleine Beschleunigungsfunktion für den Anlauf hinzugefügt. Dies funktioniert alles recht gut, nur, wie kann man den Regler dann einstellen, dass dieser nicht Schwingt kommt, aber die Position auch wirklich anfahren kann. Jetzt ist die Frage, ob es Sinn macht den grossen Sprung (0-400) über eine Trajektion zu lösen. Dies würde bei einem PWM-Antrieb aber unbrauchbare Geräusche verursachen, da der Regler um die kleinen Positionen regelt. Die Geschwindigkeit kann ich leider nicht wirklich brauchbar verwenden, da das Delta nicht gross genug ist... Den Strom habe ich bis jetzt nur als Blockierüberwachung verwendet. Habt Ihr vielleich noch eine Idee? Besten Dank Patrick
Patrick B. schrieb: > Hallo miteinander > > Ich habe eine kleine Frage, da ich momentan nicht mehr weiter komme: > Wie würdet Ihr ein Motor regeln? Hallo Patrick, was soll denn geregelt werden? Drehzahl? Position? Wen eine feste Position angefahren werden soll und du die Positionsinfo hast, wuerde ich dafuer keine PID-Regelung benutzen sondern lediglich eine Beschleunigungs- und Bremsrampe fahren. gruss Mcihael
Oh, da habe ich wohl etwas vergessen... Primär soll die Position geregelt werden. Diese ist aber variabel, ebenso die Geschwindigkeit. Bis jetzt habe ich die Geschwindigkeit so eingestellt, dass ich einfach den PWM Wert begrenzt habe. Das mit der Rampe habe ich auch schon einmal überlegt, nur wie stelle ich dann sicher, dass die Position wirklich erreicht wird, selbst wenn Laständerungen auftreten? Komischerweise braucht der Motor weniger Drehmoment um von 400 auf 0 zu fahren, als umgekehrt. MFG Patrick
> Ich habe ein PID Regler auf dem Mikrocontroller implementiert, > und nun bin ich etwas am einstellen des Reglers. Das geht so nicht! Es gibt vielleicht sogar irgendeinen Regler der das kann was du willst, aber den zu parametrieren waere so kompliziert das es keiner macht. Man teilt die Regelaufgabe daher auf. Als erste nimmt man einen Regler der nur den Motorstrom auf einen bestimmten Sollwert einstellt. Das ist notwendig weil die Kraft nicht linear von der Spannung, die du derzeit einstellst, abhaengt sondern vom Strom. Ausserdem kannst du dann diesem Regler Grenzen setzen. Also festlegen wieviel Kraft dein Motor aufwenden soll. Dann ueberlagert man diesen Regler einen zweiten Regler fuer die Geschwindigkeit/Drehzahl des Motors. Auch das hat wieder den schoenen Nebeneffekt das du bestimmte Maximalwerte fuer die Geschwindigkeit vorgeben kannst. Und als letztes packt man da noch einen Regler fuer die Sollposition drauf. Das ganze hat den grossen Vorteil da du jeden Regler der Reihe nach einstellen kannst. Olaf
OK, Kaskadenregelung. Wie sieht es betreffend der Frequenz aus? Alle Regler gleichzeitig updaten oder der Stromregler z.B mit 5kHz, der Geschwindigkeitsregler mit 2kHz und der Positionsregler mit 1kHz? Und reichen da P Regler oder wo müsste ich PI oder allenfalls PID haben? Achja, die Geschwindigkeit kann ich nicht so einfach regeln, da die Ist-Position über ein Poti kommt. Das Delta ist leider nur ~5Bits (@10Bit) bei 30ms. Somit kann ich nicht wirklich eine Geschwindigkeit auswerten, sondern nur ein "Verschiebung in XX um YY" -> Bewegung, ansonsten Blockiert. MFG Patrick
Wenn Du eine Positionsregelung hin bekommst, könntest Du mit der Positionsrampe die gewünschte Beschleunigung/Geschindigkeit/Verzögerung vorgeben. Den Rest erledigt die Positionsregelung. Ich gehe davon aus, dass es unerheblich ist, wenn die Beschleunigung und Geschwindigkeit nicht exakt eingehalten wird, da nur die Endposition zählt.
Die Position habe ich einigermassen... Ich habe einmal die Reglerfunktion hinzugefügt. Ebenso noch eine Auswertung des Bewegungsprofiles. Bei der blauen Linie handelt es sich um die Ist-Position, die andere entspricht dem PWM Wert (negativ ist nur um die Richtung in der Grafik zu unterscheiden). Ersichtlich ist, dass bei ber ersten Position diese leicht überfahren wird. Die Beschleunigung entspricht einem Timerwert, der alle 1ms erhöht wird. Die Verzögerung ist gleich Fehler*Kp. Den Integral und Differentialteil habe ich momentan noch mit Ki = Kd = 0 versehen. Dabei sind wir jetzt wieder bei meiner Ursprungsfrage: Soll ich die Position direkt von alt auf neu wechseln oder eine Trajektion fahren (alt + 10 bis neu)? MFG Patrick P.S: Ich weiss, dass der Code nicht unbedingt perfekt ist...
Bis jetzt habe ich immer erst eine Trajektorie errechnet. Der Regler versucht, diese so gut wie möglich zu fahren. Vorteil: Die Trajektorie ergibt sich nicht aus dem Regler (bzw. dessen Einstellung)
Soweit ich das jetzt verstanden habe, würde diese Trajektorie dann aber eine permanente Regelung um den aktuellen Punkt erzeugen. Da der Motor mit PWM geregelt wird, entstehen dann doch Geräusche, oder nicht?
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.