Forum: Mikrocontroller und Digitale Elektronik PID-Regler für Servomotor


von Gerhard Humer (Gast)


Lesenswert?

Hallo !

Möchte einen Servomotor über Takt u. Richtungssignal
(wie bei den üblichen Schrittmotorsteuerungen)
mittels eines AVR steuern .
Positionsrückmeldung wird über Drehencoder gemacht.
Signalauswertung , also Takt - u. Richtungssignal sowie
die Auswertung des Drehencoders hab ich schon gelöst.
Auch die Berechnung des Sollwertes und die Ausgabe des Signals
als PWM an die Mosfets der H-Bridge sind soweit OK.
Der Programmteil der mir noch fehlt , ist ein PID-Regler
zum definierten Einstellen des Regelkreises.
Hat einer von Euch schon mal sowas programmiert , bzw.
kann mir da jemand weiterhelfen.
Ach ja , programmiert hab ich das ganze in BASCOM.

Danke im voraus.

Gruss Gerhard

von Mike (Gast)


Lesenswert?


von Gerhard Humer (Gast)


Lesenswert?

Hallo

Hab mir die Formeln schon vorher mal angesehen.
P-Anteil ist klar.
Hab aber eine Frage zum I-Anteil.

I-Anteil: (Istwert-Sollwert)*Zeitdifferenz

Wenn ich nun die Regelung starte (zeiz =0),
dann erhöhe ich den Wert der Zeitdifferenz
bei jedem Schleifendurchlauf um eins.
(Regelung muss äusserst rasch geschehen)
Diesen Wert muss ich aber doch wieder auf null
zurückstellen (IF ist = soll THEN Delta_T =0 END IF)
wenn Istwet = Sollwert.

Ist das soweit richtig ???.
Bitte um Hilfe.

Gruss Gerhard

von Ralf Hochhausen (Gast)


Lesenswert?

Hallo,

für den Regler hast Du dir ja bestimmt eine Zeitbasis festgelegt (z.B. 
1ms). Zu Beginn des Regleraufrufes berechnest Du dann die 
Regelabweichung. Diese multiplizierst Du dann mit Kp für den P-Anteil 
und Ki für den I-Anteil. Beim Integralteil ist es dann noch notwendig 
eine zusätzliche Variable für die Vergangenheit zu führen, wo dann das 
jeweils aktuelle Ergebnis von Ki*Regelabweichung aufaddiert und 
abgespeichert wird. Dann ist es noch zu empfehlen, dass man den 
Integralteil und die gesamte Stellgröße auf einen maximalen Wert 
begrenzt, damit der Regler nicht ins Unermessliche läuft und beim 
Überlauf der Variablen (bei 16bit also 0xFFFF) eine falsche Stellgröße 
produziert.

Gruß,

Ralf

von Gerhard Humer (Gast)


Lesenswert?

Hallo Ralf !

Danke für deine Erklärung.

Ist mir soweit fast alles klar.
Nur eine Frage.
Wenn ich das Ergebnis von Ki*Regelabweichung immer wieder zu der
Variablen der Vergangenheit addiere wächst doch dieser Wert
ständig an , und zwar bis zu meiner Begrenzung.
Der Wert muss doch bei "Regelabweichung = 0"
auf null sein, oder ?????.


Gruss Gerhard

von Ralf Hochhausen (Gast)


Lesenswert?

Hallo Gerhard,

der Wert wächst nicht immer weiter, da die Regelabweichung nicht immer 
positiv ist (je nach dem ob der Sollwert über oder unterschritten wird). 
Wächst der I-Anteil trotzdem immer weiter, so reicht die mögliche 
Stellgröße nicht aus, um den Sollwert zu erreichen. Weiterhin könnten 
die Reglerparameter falsch eingestellt sein (Verstärkung zu groß, sodass 
eine kleine Änderung gleich eine sehr große Wirkung hat).
Der Wert der Stellgröße muß bei einem I-Regler nicht immer gleich Null 
sein, da er, wie der Name schon sagt, integriert oder aufaddiert. D.h. 
die aktuelle Stellgröße hangt nicht nur von der momentanen, sondern auch 
von der vergangenen Regelabweichung ab. Der Regler hat so zu sagen ein 
Gedächtnis. Bei P-Reglern ist der Fall gegen, dass die Stellgröße gleich 
Null ist, wenn die Regelabweichung gleich Null íst, da dieser Regler nur 
die momentane Regelabweichung auswertet.

Ich hoffe, ich konnte alles erklären.

Gruß,
Ralf

von Gerhard Humer (Gast)


Lesenswert?

Hallo Ralf !

Danke für deine Hilfe.
Werd mal versuchen das ganze in mein bestehendes Programm
einzubauen.
Ich denke ich fang erstmal nur mit P- u. I-Anteil
(PI-Regler) an.
Sollte das funzen kann ich immer noch den D-Anteil zur
Optimierung dazuprogrammieren.

Nochmals, vielen Dank !


Gruß Gerhard











Bin schon gespannt auf das Ergebnis.

von Zoltan (Gast)


Lesenswert?


von Gerhard Humer (Gast)


Lesenswert?

Hi Zoltan ,

werd ich machen , hab aber im moment kaum Zeit dazu was zu testen.

Danke für die Links.

Gruss Gerhard

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
Noch kein Account? Hier anmelden.