Forum: Mikrocontroller und Digitale Elektronik Auslegung digitaler PID-Regler


von Torch M. (thelightener)


Lesenswert?

Hallo!

Ich versuche mich gerade an einem digitalen PID-Regler für folgenden 
Aufbau: an dem Schlitten einer Schrittmotor-betriebenen Lineareinheit in 
vertikaler Einbaulage sitzt ein Kraftsensor, der federnd gelagert ist. 
Der Schlitten fährt nun eine Platte an und ich möchte als Führungsgröße 
die Kontaktkraft angeben (Stellgröße: Mikroschritte / s). Bislang mache 
ich es so, dass ich den Algorithmus des PID-Reglers mit dem Erhalt eines 
neuen Kraftwertes vom Messverstärker triggere. Konkret heißt das, dass 
ich alle 30 ms einen neuen Kraftwert einlese und somit auch den 
Regelalgorithmus nur alle 30 ms ausführe -> Abtastzeit Ta = 0,03 ms. 
Irgendwie bin ich mir jetzt gar nicht mehr sicher, ob das so richtig ist 
oder ich den Algorithmus häufiger aufrufen sollte, als ich neue 
Messdaten zur Verfügung habe. Letztendlich würde ich ja, wenn ich den 
Algorithmus z.B. 5 mal häufiger aufrufe als neue Messdaten zur Verfügung 
stehen, die Stellgröße durch den I-Anteil immer weiter nach oben ziehen. 
Wie macht man es richtig?

Die Kraft möchte ich maximal auf 20 N regeln, weswegen ich den I-Anteil 
(e_sum) auf -20….20  begrenzt habe, da ich meine gelesen zu haben, dass 
man den I-Anteil nicht größer als den maximalen Sollwert setzen soll. 
Stimmt das so?  Die Stellgröße (Mikroschritte / s) habe ich ebenfalls 
auf ein Viertel der maximal möglichen Geschwindigkeit begrenzt, diesen 
Wert habe ich einfach durch Ausprobieren festgelegt… Ist ein PID-Regler 
prinzipiell die richtige Wahl für mein Vorhaben?

Außerdem habe ich mich daran versucht, ein Modell der Strecke mittels 
DGL aufzustellen, leider komme ich da auf keinen grünen Zweig. Hätte 
evtl. jemand einen Ansatz zur Modellierung der Strecke, wenn ich als 
Stellgröße Anzahl Mikroschritte / s = dPhi/dt verwende? Nach Integration 
erhalte ich ja den absoluten Winkel, unter Berücksichtigung der 
Spindelsteigung die Position des Schlittens, multipliziert mit der 
Federkonstante der Feder, die den Kraftsensor lagert, die Ist-Kraft… 
denke ich ;-) Nur wie ich mir eine Ü-Funktion und im besten Fall die 
Zeitkonstante der Strecke berechnen kann, weiß ich nicht. Vielleicht 
kann mir ja jemand auf die Sprünge helfen…

MfG
thelightener

von aSma>> (Gast)


Lesenswert?

Torch M. schrieb:
> Bislang mache
> ich es so, dass ich den Algorithmus des PID-Reglers mit dem Erhalt eines
> neuen Kraftwertes vom Messverstärker triggere. Konkret heißt das, dass
> ich alle 30 ms einen neuen Kraftwert einlese und somit auch den
> Regelalgorithmus nur alle 30 ms ausführe -> Abtastzeit Ta = 0,03 ms.
> Irgendwie bin ich mir jetzt gar nicht mehr sicher, ob das so richtig ist
> oder ich den Algorithmus häufiger aufrufen sollte, als ich neue
> Messdaten zur Verfügung habe. Letztendlich würde ich ja, wenn ich den
> Algorithmus z.B. 5 mal häufiger aufrufe als neue Messdaten zur Verfügung
> stehen, die Stellgröße durch den I-Anteil immer weiter nach oben ziehen.
> Wie macht man es richtig?

Normalerweise legt man die Abtastzeit in Abhängigkeit von der kleinsten 
Zeitkonstante aus, so 1/10..1/20s. Dann kann kann von einen 
quasikontinuierlich Regler ausgehen. Viele Sensoren sind aber langsamer. 
Es bringt nix schneller zu regeln als der Sensor es hergibt, da sonst 
die Invarianz nicht gegeben ist.

> Die Kraft möchte ich maximal auf 20 N regeln, weswegen ich den I-Anteil
> (e_sum) auf -20….20  begrenzt habe, da ich meine gelesen zu haben, dass
> man den I-Anteil nicht größer als den maximalen Sollwert setzen soll.
> Stimmt das so?

Desto größer die Stellgröße ist desto schneller wird die gewollte 
Sollgröße erreicht. Es macht eher mehr Sinn die Stellgröße insgesammt zu 
begrenzten, damit der Motor nicht heiß laufen kann oder eventuell keine 
Kraft bestitzt bei höheren Geschwindigkeiten aufgrund der hohen 
Stellgröße. Simualtion hilft.

> Die Stellgröße (Mikroschritte / s) habe ich ebenfalls
> auf ein Viertel der maximal möglichen Geschwindigkeit begrenzt, diesen
> Wert habe ich einfach durch Ausprobieren festgelegt… Ist ein PID-Regler
> prinzipiell die richtige Wahl für mein Vorhaben?

Ja.

> Außerdem habe ich mich daran versucht, ein Modell der Strecke mittels
> DGL aufzustellen, leider komme ich da auf keinen grünen Zweig. Hätte
> evtl. jemand einen Ansatz zur Modellierung der Strecke, wenn ich als
> Stellgröße Anzahl Mikroschritte / s = dPhi/dt verwende? Nach Integration
> erhalte ich ja den absoluten Winkel, unter Berücksichtigung der
> Spindelsteigung die Position des Schlittens, multipliziert mit der
> Federkonstante der Feder, die den Kraftsensor lagert, die Ist-Kraft…
> denke ich ;-) Nur wie ich mir eine Ü-Funktion und im besten Fall die
> Zeitkonstante der Strecke berechnen kann, weiß ich nicht. Vielleicht
> kann mir ja jemand auf die Sprünge helfen…

Für DC Motoren gibt es viele gute Ansätze wie man eine Strecke moduliert 
(analytisch). Man kann also versuchen einen Schrittmotor die 
Eigenschaften eines DC Motors... Das übersteigt deine Kompetenz, denke 
ich.

Mach einfach eine Sprungantwort. Nicht über Umwege! Du hast einen 
Sensor. Wenn der Motor stark genug ist, dann könnte ein einfacher 
P-Regler sogar reichen.

von Wolfgang (Gast)


Lesenswert?

aSma>> schrieb:
> Es macht eher mehr Sinn die Stellgröße insgesammt zu
> begrenzten, damit der Motor nicht heiß laufen kann ...

Warum soll ein Schrittmotor heiß laufen. Normalerweise betreibt man die 
heutzutage mit Stromregelung und dann ist der Strom - unabhängig von 
der Last - im Rahmen der Möglichkeiten der Stromquelle konstant.

von Pandur S. (jetztnicht)


Lesenswert?

Aahhh. Das ist ja das Begrenzen der Stellgroesse. Sinvollerweise bildet 
man das auch in software ab. Mach mal ein paar Simulationen.

Allenfalls lohnt es sich sich in Simulationen einzuarbeiten. Wenn's 
nicht geht bitte mit konkreten Fragen kommen. Wie macht man mehr 
Schritte pro Zeiteinheit ? Dann muessen die Parameter Werte kleiner 
sein. Der Parameter "pro dt" wird kleiner.

: Bearbeitet durch User
von Torch M. (thelightener)


Lesenswert?

@Sapperlot
In meinem Text verbirgt sich schon die ein oder andere konkrete Frage 
;-) "Mach mal ein paar Simulationen" ist gut. Wenn ich wüsste, wie ich 
mir die Strecke einigermaßen korrekt modellieren könnte, würde ich gerne 
simulieren.

Wie ich mehr Schritte pro Zeiteinheit mache ist nicht das Problem. Das 
ist ja gerade meine Stellgröße... in Abhängigkeit der Regelabweichung 
sendet mein µC die Verfahrgeschwindigkeit in Mikroschritte / s an den 
Schrittmotor-Controller. Da ergibt sich für mich noch die Frage, ob ich 
die Motoreigenschaften überhaupt in meine Regelung einbeziehen muss? Die 
Stromregelung übernimmt ja der Controller, so dass es für mich doch 
eigentlich ausreichen müsste, nur die Mikroschritte / s als Stellgröße 
zu berücksichtigen? Setzt der Kraftsensor auf der Platte an, wird die 
Druckfeder, die den Sensor trägt, mit jedem Mikroschritt weiter 
gestaucht, so dass sich aus der Längenänderung multipliziert mit der 
Federkonstante die Ist-Kraft ergibt...

von Peter D. (peda)


Lesenswert?

Mikroschritte sind eigentlich nur Schummelei. Sie dienen hauptsächlich 
zur Reduzierung der Laufgeräusche. Auf Mikroschritten kann man nur 
stehenbleiben, wenn fast keine Kraft geliefert werden muß. Nur 
Vollschritte sind voll belastbar, da dann der Luftspalt am geringsten 
ist.

Zur Modellierung der Regelstrecke müßtest Du die Federkonstante 
ermitteln, d.h. die Zunahme der Kraft je Schritt.

Bei Schrittmotoren kann man die Zugkraft auch recht gut über den 
Spulenstrom einstellen, d.h. überschreitet die Last die eingestellte 
Kraft, bleibt der Schrittmotor einfach stehen.
Man könnte also erstmal mit einem bestimmten Spulenstrom einfach 
losfahren und dann die Kraft messen und gegebenfalls mit maximalem 
Spulenstrom und Einzelschritten die Kraft fein justieren.

Eine komplette PID-Regelung benutzt man selten bei Schrittmotoren, da 
sie im Gegensatz zu DC-Motoren keinen Anlauf und keinen Nachlauf haben.

von aSma>> (Gast)


Lesenswert?

Wolfgang schrieb:
> Warum soll ein Schrittmotor heiß laufen. Normalerweise betreibt man die
> heutzutage mit Stromregelung und dann ist der Strom - unabhängig von
> der Last - im Rahmen der Möglichkeiten der Stromquelle konstant.

Hier bin ich davon ausgegangen, dass er selber den Strom regelt. Man 
muss halt die physikalischen Gegebenheit des Motors im Auge behalten.

Torch M. schrieb:
> Wie ich mehr Schritte pro Zeiteinheit mache ist nicht das Problem. Das
> ist ja gerade meine Stellgröße... in Abhängigkeit der Regelabweichung
> sendet mein µC die Verfahrgeschwindigkeit in Mikroschritte / s an den
> Schrittmotor-Controller. Da ergibt sich für mich noch die Frage, ob ich
> die Motoreigenschaften überhaupt in meine Regelung einbeziehen muss? Die
> Stromregelung übernimmt ja der Controller, so dass es für mich doch
> eigentlich ausreichen müsste, nur die Mikroschritte / s als Stellgröße
> zu berücksichtigen? Setzt der Kraftsensor auf der Platte an, wird die
> Druckfeder, die den Sensor trägt, mit jedem Mikroschritt weiter
> gestaucht, so dass sich aus der Längenänderung multipliziert mit der
> Federkonstante die Ist-Kraft ergibt...

Jetzt verstehe ich dein Problem besser. Also eine Simulation ist hier 
unerlässlich. Du musst also eine Annahme treffen. 100% der Stellgröße 
ergibt z.B. 40N. Dann beaufschlagst du einen Sollwertsprung mit z.B. 20% 
Stellgröße. Nachdem der stationäre Zustand erreicht ist, gibst du 
nochmals 50% Sollgröße. Schon hast du eine Sprungantwort kreiert.

von Pandur S. (jetztnicht)


Lesenswert?

Est mal muss man feststellen, ob das System linear oder nichtlinear ist. 
Falls das System sichtlinear ist, kann ein PID immer noch funktionieren, 
man kanns einfach nicht mehr mit der Standard Theorie rechnen, weil die 
Uebertragungsfunktion nicht mehr dieselbe Aussage hat. Es gibt auch 
einen Uebergangsbereich, wo die Theorie noch so halb gueltig ist.

Also man geht mal von einem linearen system aus, und misst das 
Stellglied zusammen mit der Strecke und Sensor aus. Und wir nehmen das 
Stellglied als P- und den Sensor auch als P Glied an, dh nur eine 
skalierung, ohne Zeitverhalten. Dabei sind die 
proportionalitaetskonstanten wichtig.

Beim Betrachten des Systems faellt sofort auf, wenn die Strecke 
weglaeuft. Das waere dann eine integrierende Strecke. zB Ein Wasserhahn 
ist konstant offen, der Behaelter fuellt sich. Falls der Sensor den 
Fuellstand misst.

Oder dass auf eine Aenderung der stellgroesse sich sofort etwas regt, 
aber nachlaeuft, Endwert nur langsam erreicht wird. Das waere dann 
Tiefpass verhalten. Hierbei waere die Zeitkonstante charakteristisch.

Aus diesen Konstanten setzt man dann die Simulation zusammen. Und laesst 
die Zeit nummerisch wirken.

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.