Probleme mit einem PID-Regler auf einem AVR, wie oft abtasten?

OP #3411370
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
#3411387
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.
OP #3411521
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. ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren