Forum: Mikrocontroller und Digitale Elektronik Probleme mit einem PID-Regler auf einem AVR, wie oft abtasten?


von Third E. (third-eye)


Lesenswert?

Hallo,

ich habe heute vergeblich versucht, den PID-Regler in der Atmel App Note 
221 zum Laufen zu bringen.

Ich habe den Code, der ja eigentlich für den IAR-Compiler gedacht ist, 
angepasst für's Atmel Studio. Der Code läuft jetzt. Ich glaube aber, ich 
habe ein grundsätzliches regelungstechnisches Problem:

Es soll eine Stromregelung werden:
An einem Pin des Controllers sitzt ein RC-Glied, das wiederum auf die 
Basis eines BC574 geht. Am Pin wird als Stellgröße PWM ausgegeben, das 
durch das RC-Glied "verschliffen" wird.
Zwischen Kollektor und Vcc sitzt eine LED.
In Reihe zum Emitter sitzt ein 100 Ohm-Widerstand. Die Spannung, die 
daran abfällt, wird vom ADC gemessen und ist meine Rückführgröße.

Die Regelung muss nicht besonders schnell sein, sie soll vor allem genau 
sein.

Ich muss dazu sagen, ich habe zum ersten mal mit praktischer 
Regelungtechnik zu tun. Regeleungstechnik auf der Technikerschule kann 
man in der Pfeife rauchen. Wir hatten nur gerechnet und gerechnet und 
Bode-Diagramme und Ortskurven gemalt. Ziemlich sinnlos in meinen Augen. 
Da wäre ein Prüfstand mit z.B. einem Motor und einem PID-Regler mit 
einem P-, K- und D-Poti viel sinnvoller. Wenn man da an den Potis drehen 
würde und wirklich den Einfluss der Faktoren live erlebt.
Da wir keinerlei Praxis hatten, habe ich für die Parameter kein 
"Gefühl".
Aber ich schweife ab. Zurück zum Thema:

Ich wollte das Verfahren nach Ziegler/Nichols anwenden: Kp-Faktor 
solange aufdrehen, bis sich eine ungedämpfte Dauerschwingung einstellt. 
Dann kann man Kp ausrechnen und mit der Zeitkonstante der Schwingung Tn 
und Tv berechnen.
Soweit, so gut. Naiv wie ich war, dachte ich, das kann ja so schlimm 
nicht sein. Ich wurde allerdings eines besseren belehrt.

Da ich keinen Timer mehr übrig habe, erfolgt der Aufruf der PID-Funktion 
nur alle 16ms. Wenn ich dann Kp laufend erhöhe, ist meine Regelgröße 
entweder konstant null oder ich habe sozusagen einen Zweipunktregler, 
der meine Stellgröße bei jedem Aufruf auf 0% und einem sehr hohen Wert 
stellt.

Für mich heißt das, dass die Zeitspanne 16ms für die Regelstrecke viel 
zu lang ist. Laut Simulation der Sprungantwort in LTSpice sind 63% nach 
ca. 100µs erreicht.

Gibt es da eine Faustformel, wie oft mindestens die Reglerfunktion in 
Abhängigkeit der Zeitkonstante der Regelstrecke aufgerufen werden 
sollte?

Ich könnte die Strecke langsamer machen, indem ich den Kondensator des 
RC-Glieds vergrößere. Aber gefühlsmäßig mache ich doch dann alles noch 
schlimmer, oder?

Wie gesagt auf Geschwindigkeit kommt es mir nicht an. Wenn keine 
Störgröße vorhanden ist, soll sich die Stellgröße einfach auf einen 
konstanten Wert einpegeln.

Danke
Third Eye

von Falk B. (falk)


Lesenswert?

@ Third Eye (third-eye)

>Es soll eine Stromregelung werden:

Hmm, die sind meistens rech flink.

>An einem Pin des Controllers sitzt ein RC-Glied, das wiederum auf die
>Basis eines BC574 geht.

Erster Fehler. Das wird nie und nimmer linear. Besser so.

http://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM

Ein OPV ist das Mittel der Wahl.

> Am Pin wird als Stellgröße PWM ausgegeben, das
>durch das RC-Glied "verschliffen" wird.

Gefiltert.

>Zwischen Kollektor und Vcc sitzt eine LED.
>In Reihe zum Emitter sitzt ein 100 Ohm-Widerstand. Die Spannung, die
>daran abfällt, wird vom ADC gemessen und ist meine Rückführgröße.

Nicht sonderlich sinnvoll. Eine LED kann man direkt mit PWM ansteuern, 
die braucht nicht unbedingt Gleichstrom. Ausserdem kann man davon 
ausgehen, dass der Transistor als Stromquelle funktioniert, da muss man 
nicht messen.

>Die Regelung muss nicht besonders schnell sein, sie soll vor allem genau
>sein.

Was willst du da groß regeln? Wenn man diese Schaltung RICHTIG mit einem 
OPV aufbaut, ist sie ziemlich genau, auch ohnne Regelung.

>Bode-Diagramme und Ortskurven gemalt. Ziemlich sinnlos in meinen Augen.

Naja, es fehlte der Bezug zur Praxis.

>Da wäre ein Prüfstand mit z.B. einem Motor und einem PID-Regler mit
>einem P-, K- und D-Poti viel sinnvoller. Wenn man da an den Potis drehen
>würde und wirklich den Einfluss der Faktoren live erlebt.

Ja. Kann man aber auch am Simulator gur sehen.

>Für mich heißt das, dass die Zeitspanne 16ms für die Regelstrecke viel
>zu lang ist.

>Gibt es da eine Faustformel, wie oft mindestens die Reglerfunktion in
>Abhängigkeit der Zeitkonstante der Regelstrecke aufgerufen werden
>sollte?

Genau. Ein digitaler Regler muss deutlich schneller abtasten als die 
kleinste Zeitkonstante in der Regleschleife. Faktor 2-10 oder mehr.

von Karl H. (kbuchegg)


Lesenswert?

> Da ich keinen Timer mehr übrig habe

Was heißt, du hast keinen Timer mehr übrig?
Platz ist in der kleinsten Hütte und es gibt kein Naturgesetz, dass ein 
Timer nur 1 Sache machen darf.

: Wiederhergestellt durch User
von Third E. (third-eye)


Lesenswert?

Es geht um einen ATTiny85, beide Timer werden für je eine PWM-Erzeugung 
verwendet. Evtl. könnte ich einen der Timer sowohl zur PWM-Ausgabe als 
auch für Timer Interrupt verwenden.
Das wäre vermutlich das Naheliegendste. Ich wollte nur, dass mich jemand 
in meiner Vermutung bestätigt, dass ich zu selten abtaste.

Eine analoge Lösung mit einem OP wäre besser und einfacher gewesen, aber 
die Platine ist leider schon fertig so.
Ich dachte halt, das wäre eine gute Gelegenheit für mich, etwas mit 
Regelungstechnik zu beschäftigen.
Und das habe ich. Habe zumindest schon mal den Zusammenhang zwischen 
Zeitkonstante der Regelstrecke und Abtastung erfahren. ;-)

: Bearbeitet durch User
von Anon Y. (anonymous)


Lesenswert?

Hi Third-Eye,

ich stand vor genau dem selben Problem wie du. Gelöst habe ich es durch 
ein kleines Kp und ein noch kleineres kI. Probier's aus.

von Third E. (third-eye)


Lesenswert?

Hm, das hatte ich ja auch vermutet, aber bei mir ist das Problem, dass 
ich Kp soweit verringern müsste, dass als Stellgröße nichts mehr übrig 
bleibt (ich arbeite mit uint_16-Variablen).
Ich versuche morgen mal, die Abtastung zu erhöhen.
Ich werde dann berichten.

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.