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?
>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.
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
>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
> 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.
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.
> 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
>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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.