www.mikrocontroller.net

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


Autor: Gerhard Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Gerhard Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf Hochhausen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf Hochhausen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zoltan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Gerhard Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Zoltan ,

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

Danke für die Links.

Gruss Gerhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.