mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik regelt nicht nach


Autor: gertro (Gast)
Datum:
Angehängte Dateien:
  • reg.txt (885 Bytes, 156 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Guten alle,

ich habe ein PI Regler mit C programmiert. das algorithmud sieh einfach 
zu sein´.Alle 100µ werden die Werte gelesen. Wenn ich das Programm start 
läuft einige massen gut im leerlauf. die PWM (y)ist unruhig, wackelt. 
läuft aber auch unrihig.  Beim start braucht viel Zeit(im Bereich 
zwischen 10 bis 20ms) bis der Stabiltät erreicht wird.
beim belastet des Reglers läuft die I-Anteil nur im Minus und regelt 
nich nach.  Ich habe danach ein Anti winup eingebaut, um das Verlauf von 
I-Anteil zu begrenzen, wenn dies den y überschreit ändert nicht am 
Problem. im leerlauf geht, aber bei der Belastungsinkt yi und bleibt den 
yMin.
meine Führungsgröße liegt bei 2808  entspricht ein 24Guten alle,

ich habe ein PI Regler mit C programmiert. das algorithmud sieh einfach 
zu sein´.Alle 100µ werden die Werte gelesen. Wenn ich das Programm start 
läuft einige massen gut im leerlauf. die PWM (y)ist unruhig, wackelt. 
läuft aber auch unrihig.  Beim start braucht viel Zeit(im Bereich 
zwischen 10 bis 20ms) bis der Stabiltät erreicht wird.
beim belastet des Reglers läuft die I-Anteil nur im Minus und regelt 
nich nach.  Ich habe danach ein Anti winup eingebaut, um das Verlauf von 
I-Anteil zu begrenzen, wenn dies den y überschreit ändert nicht am 
Problem. im leerlauf geht, aber bei der Belastungsinkt yi und bleibt den 
yMin.
meine Führungsgröße liegt bei 2500 digit entspricht eine u von 24v 
deswegen wähle ich 2000 und 3000 als Grenze. ist das zu große oder klein

mit Parametr kp und ki habe ich schon viel gespielt.
was kan das problem an diesem Regler sein?
ich nehmme zum Beispiel an  kp=1 und ki=1000(die sing von dem analoge 
system).  ki*Ta ergibt 0,1. wie kann jetz meine begrenzung richtig 
eingestellt werden?

kommt das Problem vielleicht von der I-Anteil odre ist der I-Anteil nur 
Folge?
ich weiß nicht was passiert mit dem system. bitte um typs geben

mit Parametr kp und ki habe ich schon viel gespeilt.
was kan das problem an diesem Regler sein?
ich nehmme zum Beispiel an  kp=1 und ki=1000(die sing von dem analoge 
system).  ki*Ta ergibt 0,1.
 wie kann jetz meine begrenzung richtig eingestellt werden?

kommt das Problem vielleicht von der I-Anteil odre ist der I-Anteil nur 
Folge?
ich weiß nicht was passiert mit dem system. bitte um typs geben

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Lösg uist evtuuul cemk awdäö awdmklowda dw !

Autor: Klaus Ra. (klara)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gertro,
hier ein sehr guter Artikel zum Thema.

http://www.rn-wissen.de/index.php/Regelungstechnik

Unter Punkt 7 wird auf Methoden zur Dimensionierung eingegangen. In 
Deinem Fall sollte bei dem empirischen Vorgehen zu Beginn nur der P - 
Anteil getestet werden. Danach nimmt man den I - Antei langsam dazu.
Eigentlich dürfte es mit den PI - Regler keine grossen Schwierigkeiten 
geben. Beim PID - Regler wird es dann komplizierter.
Gruss Klaus.

Autor: gertro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,

ich komme wieder mit dem gleichen Problem, aber jezt, um eine 
zustimmung meine Idee zu haben.
im wikipedia habe ich heute was gelesen und ich denke, wenn dies Wahr 
ist, könnte es sein, der Grung Warum  mein Regler nicht nachregelt.
Im PI Regler habe ich eine Begrenzung von esum bzw. yi eingesetzt: 
Windu Effekt
        ki*Ta*esum= ymax  --> esum=ymax/(ki*Ta)  oder esum=yMin/(ki*Ta)
In Mein Program wie Ganz oben beschrieben wurde, beim belasten geht die 
stellgröße in eine Richtung und bleibt an der Grenze.
jetzt habe ich gelesen, dass die I-Anteil muss auf die 
Stellgröße-Grenzen entgegen begrenzt.  wenn ich gut verstande , das 
bedeutet für mich:

if (esum <yMin){
   esum = -ymin;
}
else
if(esum > yMax){
  esum = -yMax
}

könnte jemand mir diese zustimmen? oder was dazu sagen

Schönes Wochenende

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
x_normiert= (x * 1000);        // Normierung
w_normiert= (w * 1000);        // 
e_normiert=(x_normiert-w_normiert);    
e= (e_normiert)/1000;

Warum da erst mit 1000 multiplizieren um es dann wieder durch den Wert 
zu teilen?

e = x - w ergibt genau das gleiche und e_normiert nutzt du ja sowieso 
nicht weiter.

----------------------------------------------------------------------
yp_normiert/1000;

Was macht diese Zeile?

----------------------------------------------------------------------
int PID_Berechnung( int x, int w)
...
y=y_normiert/1000  ;         // Stellglied der Regler

if(y<2500){
   y=2500;                               
}
else if(y>3000){
   y=3000                        
}

return y;

Dein Datentyp für y scheint int zu sein. Int wird je nach System anders 
interpretiert, je nach Wortbreite deines Systems. Bei einem 8-Bit-System 
hat int auch nur 8 Bit, beim 16-Bit-System dementsprechend 16 Bit usw. 
Da du nichts zu deinem System sagst, ist int ersteinmal nichtssagend. 
Was man nur sagen kann: Bei 8 Bit wäre sowieso bei 255 Schluss, da ist 
an Werte von 2500 oder 3000 nicht zu denken für y und bei 16-Bit wird 
dir deine komische 1000-Normierung Probleme bereiten, wenn dein 
y_normiert auch int ist. Als Tipp: Schau dir mal die Datentypen int8_t, 
int16_t, int32_t usw an, da siehste nämlich sofort wieviel Bit du in so 
einer Variable speichern kannst.

Autor: Armin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann ich dir nicht zustimmen.
Sah vorher besser aus.

Aber da sind noch einige Zeilen seltsam...


Ich muss ehrlich gesagt zugeben, dass dein Text etwas anstrengend zu 
lesen ist ;)


folgende Vorschläge zum suchen:
- wird das Ergebnis deiner Berechnungen jedesmal irgendeiner Variablen 
zugewiesen?
- machen die Normierungen immer Sinn? nicht dass da mal ein Faktor 1000 
übrig bleibt
- ist die Abtastrate des Algorithmus konstant und richtig gewählt?
- D-Anteile schwingen, I-Anteile können instabilität verursachen (bei 
niedriger Abtastrate sieht beides gleich aus)

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten schrieb:
> Warum da erst mit 1000 multiplizieren um es dann wieder durch den Wert
> zu teilen?
Festkommaarithmetik

> Dein Datentyp für y scheint int zu sein. Int wird je nach System anders
> interpretiert, je nach Wortbreite deines Systems. Bei einem 8-Bit-System
> hat int auch nur 8 Bit, beim 16-Bit-System dementsprechend 16 Bit usw.
Ääätsch, falsch.
Int ist in einer 8 bit Architektur - entgegen der Suggestion durch den 
Namen - nicht 8 bit breit.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:
> Thorsten schrieb:
>> Warum da erst mit 1000 multiplizieren um es dann wieder durch den Wert
>> zu teilen?
> Festkommaarithmetik

War mir klar, dass das kommt. In diesem Fall ist das aber unnötig.
x_normiert= (x * 1000);        // Normierung
w_normiert= (w * 1000);        // 
e_normiert=(x_normiert-w_normiert);    
e= (e_normiert)/1000;

x_normiert und w_normiert sind beides Zahlen, die mit drei Nullen enden. 
Ziehe ich den einen vom anderen ab, bleiben bei e_normiert immer noch 
drei Nullen am Ende, wieder durch 1000 geteilt, ändert sich nichts im 
Vergleich zu dem Fall, wenn man direkt e = x-w gerechnet hätte.

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.