-         

Ergebnis 1 bis 3 von 3

Thema: Abtastzeit bei PID Regler mit Atmega128

  1. #1

    Abtastzeit bei PID Regler mit Atmega128

    Anzeige

    Hallo zusammen ich brauche eure Hilfe

    Ich möchte eine Drehzahl für einen Lüfter regeln, ich habe die Kennwerte der Strecke ermittelt und daraus ergab sich ein PT2 Glied Gs(s) =1,06/(1+s1)².
    Realisiert werden soll es mit dem Atmega 128.
    Ich habe jetzt eine Frage zum PID Algorithmus.
    Die Parameter Kp, Ki, Kd sind klar, berechnet mit den Einstellregeln von Chien, Hrones und Reswick,
    aber Ta ist mir noch nicht so klar, ich habe gelesen Ta soll 0,1 bis 0,05 kleiner sein als die größte Streckenzeitkonstante.
    Was bedeutet das genau.
    Ich habe zwei Theorien:
    1. Ich muss meine ADC_Frequenz so einstellen.
    2. Ich muss einen Timer einbauen und mit Interrupt den Algorithmus alle 0,1s aufrufen

    Oder kann man den Algorithmus in einer While schleife einfach durchlaufen lassen. Wie in meinem Code Bsp.

    Code:
    
    #include <avr/io.h>
    #include "Config.h"
    #include "AD5315.h"
    
    
    int main (void)
    {
    
    volatile float sollwert;
    volatile float istwert;
    volatile float y;
    
    volatile float e;
    volatile float ealt;
    volatile float esum;
    
    
    volatile float Ta=0.001;
    float Kp=4.7;
    float Tn=2.15;
    float Tv=0.13;
    float Kd=Tv*Kp;
    float Ki=Kp/Tn;
    
     
    
    
    DACInit(); 
    
    
      
    
    while (1)
    {
    
    
    
    
    sollwert  = ReadAdcChannel(1)-512; //  Sollwert einlesen
    
    
    
    istwert = ReadAdcChannel(0)-512; // Istwert einlesen
    
    
    
    
    e = sollwert  - istwert;                                    // Regeldifferenz bilden
      if ((y < 511)&&(y > -512))                                // bei Übersteuertem stellglied Integration einfrieren
       {                                                        // (Anti-Windup)
            esum = esum + e;                                    // Summe der Regelabweichung aktualisieren  
        }
    	 
      y = (Kp*e)+((Ki)*Ta*esum)+(Kd/Ta*(e-ealt));     //Reglergleichung
      ealt = e;                                       //Regelabweichung für nächste Abtastung merken
      if (y > 511)                                    // Stellgröße auf -511...+512 begrenzen (10 bit DAC)
       {
          y = 511;
        }
      if (y < -512)
        {
          y = -512;
        }
    
    
    
      SetDAC(DACA, y+512);
    
    
    }
    
    return 0;
    
    }
    Was davon ist richtig ???

    Danke für eure Unterstützung.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.05.2006
    Ort
    Pfalz
    Beiträge
    154

    Re: Abtastzeit bei PID Regler mit Atmega128

    Die Auslegung des Reglers basiert auf einer konstanten Abtastzeit (Ta). Es muss dafür gesorgt werden dass in deinem Fall jede Millisekunde genau eine Abtastung, Berechnung und Ausgabe der neuen Stellgröße erfogt.
    (Du hast Ta=0.001; gewählt also 1ms wenn ich das richtig sehe?)

    Wird die Schleife unkontrolliert ohne konstante Wartezeiten durchlaufen, dann entspricht die Berechnung nicht mehr deiner gewünschten Übertragungsfunktion. Es kann beispielsweise zum Schwingen des Regelkreises kommen oder das Ding regelt gar nicht erst aus.

    Zitat Zitat von Hilfe2010
    aber Ta ist mir noch nicht so klar, ich habe gelesen Ta soll 0,1 bis 0,05 kleiner sein als die größte Streckenzeitkonstante.
    Prizipiell gibt je kleiner Ta desto besser. Hauptsache ist aber dass Ta um einiges kleiner ist als die anderen Streckenzeitkonstanten.
    Allerdings dachte ich immer Ta sollte kleiner sein als 0,1 der >>kleinsten<< Streckenzeitkonstante.

    Ein Timer bietet sich hier an, der entsprechend der Abtastzeit aufgerufen wird.

  3. #3
    Hi

    danke für deine Antwort. Ich werde mal einen Interrupt mit Timer einbauen und mich evetuell noch mal melden.


    Danke noch mal.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •