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
@ 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.
> 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.
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. ;-)
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.