Hallo zusammen hat schon jemand eine kaskaderegelung programmiert? ich will eine kaskaderegelung von strom und spannung in ein schaltnetzteil. den stromregler soll schneller und ein PI Regler sein. der Spannungsregler soll ein PID Regler. getrennt habe zb so implementiert. #include <ADuC7020.h> #include "header.h" int ealt; // alte Abweichung int esum; // Summe der Reglerabweichung int y; // Stellglied int PID_Berechnung( int x, int w) { int e; int yp; int yi; int yd; e=w-x; // Regelabweichung berechnen if((y>=0)&& (y<4096)) // Bei Überschreiten Stellglied einfrieren { esum=esum + e; // Summe der Regelabweichung berechnen } yp=kp*e; // P-Anteil yi=ki*Ta*esum; // I-Anteil yd=kd*(e-ealt)/Ta; // D-Anteil y= yp + yi + yd; // Stellglied der Regler ealt=e; //Abweichung für nächste rechnung merken /* Stellglied Begrenzung */ if(y<0){ y=0; // Stellglied auf sein Minimaler Wert begrenzen } else if(y>4095){ y=4095; // Stellglied Auf sein Maximaler Wert 4095 begrenzen } return y; } *********************************************************************** #include <ADuC7020.h> #include "header.h" int x_value; // Spannung_Istwert int w_value; // Spannung_sollwert int stellglied; // Stellglied int delay0_5s=5; // Variable Tick zum Verlangsamer der PID_Berechnung beim Test volatile int T0_Tick=0; // Timer 0 Current Tick value volatile int T0_Last=0; // Timer 0 Last Tick value __irq void IRQ_Handler(void) // Aufrufe der Routine alle 100ms { if((IRQSTA & RTOS_TIMER_BIT) !=0) // fragen, ob das Interrupt ein Timer0 IRQ ist { T0CLRI= 0; // Timer0 clearen ADCCON = 0x6A0; // single-ended Mode, start konv ADCCP=0; //kanal 0 aktiviert für Spannungsistwert ADCCON =0x6A3; // software conv., single-ended, while (!ADCSTA){}; // warten bie Ende der Wandlung x_value = (ADCDAT >> 16); // Ergebnis der Wandlung ADCCON = 0x6A0; ADCCP = 3; ADCCON=0x6A3; while (!ADCSTA){}; // warten bis End der Wandlung w_value = (ADCDAT >> 16); } return; } int main () { init_ADC_DAC(); Timer0_init(); init_UART(); IRQEN = RTOS_TIMER_BIT; // Timer0-Interrupt Aktivieren while(1) { stellglied=PID_Berechnung(x_value, w_value); DAC1DAT= (stellglied << 16) ; } } meine Frage. ist diese Programm schon ok? vor allem variable und Bedingunggen. wie kann ich jetzt in konzept eine kaskaderegelung die beide (Strom- und spannungsregler) zusamensetzen oder welches Algo für die beide? mein idee ist die Pi Regler für strom Regler mit Interrupt und der PID im Hauptprogramm. aber bin nicht siher ob, das gute idee ist. was sagen sie oder hat jemand ein Beispiel oder algo für sowas? mfg
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.