Forum: Mikrocontroller und Digitale Elektronik Abtastzeit bei PID Regler


von Hilfe (Gast)


Lesenswert?

Ich habe einen Motor mit PT2 Verhalten und möchte die Drehzahl mit dem 
Atmega  regeln, den Algorithmus
e = w - x;
esum = esum + e;
  y = (Kp*e)+(Tn*Ta*esum)+(Tv*((e-ealt))/Ta);    // Reglergleichung
  ealt = e;

habe ich schon.
Meine  erste Frage ist nur  die Abtastzeit, ich habe gelesen, dass sie 
kleiner als die dominierende Zeitkonstante des Regelkreis sein muss.
Die dominierende Zeitkonstante beträgt 3s.
Wie stelle ich im AVR die Abtastzeit ein
Der Atmega wird mit 16MHz betrieben und der Vorteiler für den ADC ist 
128.
Also ist die ADC_Frequenz 125000 Hz, meine Abtastzeit also 0,000008sek ?

Meine zweite Frage:
Muss ich Ta in der Reglergleichung  dann 0,000008sek angeben?
Dritte Frage kann man jede  digitale Regelung  qasianalog betreiben?

von Purzel H. (hacky)


Lesenswert?

>Meine zweite Frage:
Muss ich Ta in der Reglergleichung  dann 0,000008sek angeben?
Dritte Frage kann man jede  digitale Regelung  qasianalog betreiben?

sicher. Dann muss man am Wenigsten ueberlegen. Eine 
Streckenzeitkonstante von 3 Sekunden wird meist quasianalog geregelt.

von Hilfe (Gast)


Lesenswert?

Ist Ta=0,000008sek nicht viel zu klein oder spielt das keine große 
Rolle.

Und wird der Regler auch ohne Regeldifferenz regeln wenn die 
ADC_Frequenz 125kHz ist, aber in der Reglergleichung nicht 0,000008sek 
sondern 0,1 angeben wir.

Danke für euche Antworten

von Oliver (Gast)


Lesenswert?

>Die dominierende Zeitkonstante beträgt 3s.

Was ist denn das für ein Motor?

>Der Atmega wird mit 16MHz betrieben und der Vorteiler für den ADC ist
>128.

Warum?

>Also ist die ADC_Frequenz 125000 Hz, meine Abtastzeit also 0,000008sek ?

Nein. Eine ADC-Wandlung dauert 13 ADC-Takte (sowas steht im Datenblatt). 
Aber du musst ja gar nicht sofort nach dem Ende der Messung wieder neu 
starten.

Was du brauchst, ist ein Zeitgeber, der dir im festen Zeittakt deinen 
Regler startet. Das macht man üblicherweise mit einem Timer und einem 
Interrupt.

>Muss ich Ta in der Reglergleichung  dann 0,000008sek angeben?

Das sollte da erklärt sein, wo du die Reglergleichung her hast.

>Dritte Frage kann man jede  digitale Regelung  qasianalog betreiben?

Jede nicht (es gibt digitale Regelungen, die haben kein analoges 
Equivalent). Jeden digital implementierten PID-Regler schon, er muß halt 
nur schnell genug takten.

Oliver

von Jürgen (Gast)


Lesenswert?

>  y = (Kp*e)+(Tn*Ta*esum)+(Tv*((e-ealt))/Ta);    // Reglergleichung

> Also ist die ADC_Frequenz 125000 Hz, meine Abtastzeit also 0,000008sek ?

Wenn du die Rechnerei in der Zeit auch noch schaffen willst,
muss es wohl etwas langsamer sein.

Ich würde wahrscheinlich 100Hz nehmen,
das ist eine typische Frequenz für einen System-Timer.
Bin aber in Sachen Motoren völlig unbeleckt.

von RP6Conrad (Gast)


Lesenswert?

Sie mussen ihre PID regelalgoritme in eines bestimmte Zeitinterval 
aufrufen. Das kan naturlich fiel langsamer sein wie die Zeit für der 
AD-wandler. Mit eine einfache timer kansst du jeden sekunde dieses 
Algoritme aufrufen. Naturlich, wie langer diese Zeit, wie langsamer der 
reaction von Regler wird. Bei langsame Processen kein problem, aber bei 
eine motorregelung sollst du eher schneller laufen. Bei meine Robby wird 
der Regler jeden 50 mS durchlaufen. Ich wollte eigentlich noch 
schneller, aber dan ist die Auflosung von encoder zu klein (min. 5 
pulsen/50 mS).
Wichtig ist das die Zeit immer konstant ist. Und ja, die Parameter sind 
abhangig von diese Zeit.

von Johannes S. (schneijo)


Lesenswert?

> Also ist die ADC_Frequenz 125000 Hz, meine Abtastzeit also 0,000008sek ?

Für die Abtastzeit des ADCs nimm den Kehrwert der Abtastfrequenz ... 
natürlich nur im SI-Einheitensystem rechnen ;-)


> Muss ich Ta in der Reglergleichung  dann 0,000008sek angeben?

Ta ist die Reglerstellzeit, also die Zeit, die vergeht bis dein 
Algorithmus dir eine neue Stellgröße berechnet hat. Das heißt im 
Klartext, wenn der µC innerhalb einer ADC-Sample-Zeit dir einen neue 
Stellgröße berechnen kann ist Ta = 1/ADC_Frequenz. Wenn der µC das nicht 
schafft, würde ich die die ADC-Abtastfrequenz kleiner wählen sodass die 
Berechnung rein passt und dann durch jedes neue ADC-Sample getriggert 
die Stellgröße aus der Rechnung zuvor zuweisen.
Ich hätte keine Bedenken die Abtastfrequenz kleiner zu wählen. siehe 
nächste Frage/Antwort ...


> Dritte Frage kann man jede  digitale Regelung  qasianalog betreiben?

Das kommt auf das Verhältnis zwischen kleinster Zeitkonstante der 
Strecke und Reglerstellzeit an. Also der Zeit, die der digitale Regler 
braucht um eine neue Stellgröße zu berechnen.

Von einer digitalen Regelung spricht man wenn sich die Stellgröße nur 
zeitdiskret und wertediskret verändern kann. Das kritisches Verhältnis 
zwischen Zeitkonstante der Strecke und Abtastzeit liegt so bei 10/1.

     Reglerstellzeit                1
-----------------------------  <=  ----
 Zeitkonstante der Strecke          10


In deinem oben beschriebenen Beispiel bist du mit 3s zu 0,000008s weit 
weg von eins zu zehn! Also sicher!
Man kann sagen wenn dieses Verhältnis groß ist hat man eine quasi 
analoge Regelung ... vorausgesetzt die Stellgröße hat eine einiger Maßen 
gute Werteauflösung ...

Jetzt wirds philosophisch zur oben beschriebenen Vorraussetzung:
Währe denn eine verdammt schnelle Zweipunktregelung auch eine quasi 
analoge Regelung?
z.B. eine PWM mit 1GHz Schaltfrequenz auf einen Heizungsstab.

Funktionieren würde es zumindest ganz gut, also würde ich die 
Vorraussetzung nochmals streichen ...

viel Spass - Deine Aufgabe klingt interessant

von Gast (Gast)


Lesenswert?

>Jetzt wirds philosophisch zur oben beschriebenen Vorraussetzung:
>Währe denn eine verdammt schnelle Zweipunktregelung auch eine quasi analoge 
Regelung?
>z.B. eine PWM mit 1GHz Schaltfrequenz auf einen Heizungsstab.

Damit das eine analoge Regelung wird, brauchst du überhaupt keine hohe 
PWM-Frequenz. Einen Zweipunktregler kannst du immer analog 
implementieren, was ja hier die Frage war. Das Problem ist doch nur, 
dass das ein nichtlinearer Regler ist.

von Hilfe (Gast)


Lesenswert?

Ich versuch mal die Frage kompakter zu stellen

Ich habe aus Tu=0,26s und Tg=2,15s die Zeitkonstanten der Strecke
gerechnet und da kam eine Strecke 2ter Ordnung. T1=T2=1s.
T=3s ist für den Reglerparameter gewesen.


Für 1s sollte die Abtastzeit 0,1s sein. Wenn ADC 13 Takte braucht, heißt 
dass das ich meine Abtastzeit durch 13 teile und den Kehrwert des 
Ergbnis (Frequenz)bilde. Also eine Frequenz von 130Hz habe.
Und dann 130Hz * 128(Vorteiler) kommt eine Frequenz von 16640Hz raus.

Ist das richtig, soll ich die CPU_F 16640Hz einstellen.

von Roblue (Gast)


Lesenswert?

Hallo Forum,

diese Diskussion ist zwar schon etwas betagt, aber meine Frage passt 
hier immer noch am besten.
Zum ersten mal versuche ich mit Reglern in C zu arbeiten (arbeite mit 
einem PIC24). Kenne zwar verschiedene Regler aus der Klimatechnik mit 
denen ich täglich zu tun habe, allerdings verstehe ich die 
Reglerstellzeit in Verbindung mit dem µC nicht ganz.

>Ta ist die Reglerstellzeit, also die Zeit,
>die vergeht bis dein Algorithmus dir eine neue Stellgröße berechnet hat.
>Das heißt im Klartext, wenn der µC innerhalb einer ADC-Sample-Zeit
>dir einen neue Stellgröße berechnen kann ist Ta = 1/ADC_Frequenz.


Angenommen, mein Programm läuft mit fest definierten Zeiten die ein 
Timer vorgibt, welcher einen Zähler hochlaufen lässt. In meinem Fall 
wird jede Millisekunde eine bestimmte Funktion ausgeführt. Ist mein 
Programm bei 10ms angekommen, läuft die Schleife von vorne los. Bei 6ms 
soll nun der PID-Regler aufgerufen werden.

Wie muss ich mir jetzt in der Reglergleichung Ta vorstellen? Muss ich 
hier mit den 6ms rechnen?

Vielen Dank schon mal,
Roblue

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.