mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik P-Regler (Verstärkung zu niedrig?)


Autor: Stefan G. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hatte hier schonmal zu meinem Problem unter "PI-Regelung bleibt
hängen..." gepostet. Lange Zeit bin ich da nicht weitergekommen. Nun
habe ich mich nochmal an die Regelung eines Gasdurchflusses mittels
Proportionalventil (PWM angesteuert) rangesetzt.
Bisher bekam ich immer ein total instabiles Regelverhalten. Nach
drastischem Reduzieren des k_p Faktors (von 1 auf 0,01) bekam ich
zunächst ein halbwegs anständiges Verhalten (zumindest dachte ich das,
da der Regelkreis zumindest nicht  mehr instabil war).
Nach etwas genauerem Hinschauen stellte ich jedoch fest, daß bei sehr
langem Laufenlassen der Regelung sich das Ventil immer weiter schließt.
Ihr könnt das Ergebnis in dem Excel File daß ich angehöngt habe unter
"Diagramm für k_p=0,01 (langzeit)" ansehen. Auf der Y-Achse ist der
A/D gewandelte Ouput meines Flusssensors aufgetragen (200 entpricht 1
Volt entspricht kein Durchfluss). Auf der X Achse ist einfach die
Anzahl der A/D Wandlungen aufgetragen (das geschieht per ISR ca. alle
70 millisekunden).

Habt ihr eine Ahnung was hier schiefläuft? Ist vielleicht die
Verstärkung zu gering? Jedoch verstehe ich nicht ganz, weshalb er das
Ventil dann immer weiter zu macht. Würde ein I-Anteil zusätzlich zum P
mir hier weiterhelfen?
Über jede art von Tipps wäre ich dankbar.
Gruß, Stefan

PS: ich hänge hier nochmal den Code für meine Regelung an (ich benutze
übrigens den ATmega323 sowie Codevision AVR):

interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;  //in adc_data wird das Ergebnis gespeichert
// Read the AD conversion result
adc_data=ADCW;

  // aktuelle Spannung einlesen (Wert zwischen 0 und 1023):
  v_ist = adc_data;


  // Regelabweichung e_k berechnen:
   e_k = v_soll - v_ist;


   // P-Regler (mit "gleitendem" Offset v_soll)
    u_p = (int) (e_k * k_p + v_soll);


      // Stellgrößenbegrenzung:
       if (u_p > 600) u_p = 600;
       else if (u_p < 400) u_p = 400;

       // Stellgröße in entsprechenden PWM Wert umrechnen und
       // Pulsbreite setzen:
       OCR1A = (int) u_p;


       // u_p_alt = u_p;
       // e_k_alt = e_k;


       itoa(v_ist,istwert);
       puts(istwert);
}

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Stefan!

Was sagt denn dein Ausgang dazu? Ventiel warm werden und Begrenzung
PWM? Wo hast du denn die ganzen Werte her. RS232? Wenn ja, lasse mal
die Rechen und Stellwerte mit ausgeben. Übrigens Schwankungen zwischen
1023 und 203 bei den Messwerten sind sehr eigenartig.

MFG Uwe

Autor: Stefan G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mir das nochmal genauer angesehen. Die Erwärmung des Ventils
und damit die Erwärmung des Luftstroms (-> Beeinflussung des Sensors)
ist mir nun auch eingefallen. Jedoch konnte ich nicht wirklich
feststellen, daß die Luft erwärmt wurde (mit Thermoelement gemessen).
Das merkwürdige an der ganzen Geschichte ist, daß es auf dem Oszi so
aussieht, als ob die Pulsbreite meiner PWM unverändert bleibt. Ich
werde nun nochmal einen anderen Flussmesser probieren, und mir auch mal
die Stellgröße auf dem Terminal ausgeben lassen. Vielleicht läßt sich
dort was ablesen.
Die Werte lasse ich mir übrigens nach jedem Interrupt (-> Durchführen
der Regelroutine) auf dem Terminal ausgeben. Die Werte die ich somit
vom A/D Wandler bekomme, stimmen auch mit den vom Multimeter gemessenen
Werten überein...
Gruß,
Stefan

Autor: Jens Renner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

ich habe mir Deinen Code noch nicht im Detail angeschaut, aber eine
bleibende Regelabweichung bei einem P-Regler ist ja normal. Und die ist
umso größer, je kleiner dein Kp ist.
Ein I-Anteil würde da definitiv Abhilfe schaffen.
Ob das jetzt spezifisch auf Dein Problem zutrifft, weiß ich leider
nicht.

Ist Deine Stellgrößen-Berechnung beim PI eigentlich identisch zu dieser
hier?
u_k = u_k_alt + k_p*(e_k + ((t_0/t_i) - 1)*e_k_alt);

Jens

Autor: Stefan G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nun nochmal ein wenig an meinem Code rumgebastelt und siehe da,
es sieht nun ganz gut aus, bis auf daß ich ordentlich Überschwinger
habe, aber da kann man wohl noch ein wenig an den Parametern
rumoptimieren. (s. Excel File)

Ich habe nun einen PI Regler folgendermaßen realisiert:

interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;  //in adc_data wird das Ergebnis gespeichert
// Read the AD conversion result
adc_data=ADCW;

  // aktuelle Spannung einlesen (Wert zwischen 0 und 1023):
  v_ist = adc_data;


  // Regelabweichung e_k berechnen:
   e_k = v_soll - v_ist;


   // P-Anteil
        u_p = (int) (e_k * k_p);

        // I_Anteil
    u_i += (int) (e_k * k_i);

    // gesamte Stellgröße:
        u_g = u_i + u_p;


       // Stellgröße in entsprechenden PWM Wert umrechnen und
       // Pulsbreite setzen:
       OCR1A = (int) u_g;

       itoa(v_ist,istwert);
       puts(istwert);
}

Werde da nochmal etwas rumtesten. Erst schonmal vielen Dank.
Stefan

Autor: Gerhard Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan ,


daß ein PI-Regler zum Überschwingen neigt ist normal.
Hab die selbe Erfahrung mit meinen Servomotor-Reglern gemacht.
Abhilfe gibts hier nur durch einbinden des D-Anteiles ,der für die
notwendige Dämpfung der Regelung verantwortlich ist.

Gruss Gerhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.