mikrocontroller.net

Forum: Compiler & IDEs PID Reglelalgorithmus- Wertebereich von -.+ oder 0.MAX ?


Autor: Andy S. (andy11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe bei dieser einen Sache noch ein Problem:
//PID-Algorithmus Berechnung:-------------------------------
  esum = esum + differenz;                    //Integration I-Anteil
  y = Kp*differenz + Ki*Ta*esum + (Kd*((differenz-ealt)/Ta));    //PID-Regelalgorithmus
  ealt = differenz;                        //Differzenteil D-Anteil
  //----------------------------------------------------------

ich habe einen Wertebereich von -1020 ... 1020. Diesen Wertebereich habe 
ich linearisiert mithilfe weiterer Hardware und dann per Software die 
Sensorwerte modifiziert damit ich etwas lineares habe. Dh der Übergang 
erfolgt fließend von -1020...+1020 fließend.
Die PWM arbeitet mit 10bit also ist eine Skalierung nicht unbedingt 
notwendig.

Bei dem P-Anteil wird das y negativ oder positiv. Das ist ok. Aber bei I 
und D schaut es so aus, also wenn das nicht so funktionieren würde wie 
wenn ich einen Wertebereich von zB 0...2040 hätte.
Es sind einfach gewisse unsicherheiten, da wir in Regelungstechnik noch 
nicht so weit sind, deshalb die Frage ob da was schief gehen kann.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Sicher kann das. Da muss man immer aufpassen. Ich arbeite jeweils in 
Longint und schneide am Schluss ab.

Autor: Andy S. (andy11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dümmlicher Knilch schrieb:
> Ich arbeite jeweils in
> Longint und schneide am Schluss ab.

Dh du verwendest generll einen positiven Wertebereich?

Aber wieso schneidest du dann ab, wenn du den Wertebereich von -1020 ... 
1020 auf 0...2040 umwandeln kannst?
Verlierst du dann nicht wichtige Informationen oder wie ist das gemeint?

lg andy

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne "symmetrischem" Eingang funktioniert der Algorithmus doch gar 
nicht. Der I Regler würde nur noch aufsummieren, bei Werten > 0.

Autor: Andy S. (andy11)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. schrieb:
> Ohne "symmetrischem" Eingang funktioniert der Algorithmus doch gar
> nicht.

Ja symmetrisch ist der Wertebereich -10...+10 auch.
Was ich meinte war ob 0...20 besser(richtiger) wäre als -10...10

Simon K. schrieb:
> Der I Regler würde nur noch aufsummieren, bei Werten > 0.

Ok also die Bestätigung, dass negative Werte beim I Anteil nicht 
funktionieren.

lg andy

Autor: JW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. schrieb:
> Der I Regler würde nur noch aufsummieren, bei Werten > 0.

Soll 0..2048
Ist  0..2048
Fehler (Ist-Soll) -2048..2048

Die Fehler-SUMME kann also sehr wohl 0 werden (und wird das ja 
hoffentlich auch ;-), unabhängig vom Wertebereich der Soll/Ist-Größen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JW schrieb:
> Simon K. schrieb:
>> Der I Regler würde nur noch aufsummieren, bei Werten > 0.
>
> Soll 0..2048
> Ist  0..2048
> Fehler (Ist-Soll) -2048..2048
Ja stimmt da hast du Recht.

> Die Fehler-SUMME kann also sehr wohl 0 werden (und wird das ja
> hoffentlich auch ;-), unabhängig vom Wertebereich der Soll/Ist-Größen.
Aber die Fehler-Summe muss "in beide Richtungen" funktionieren.
Ich versteh nämlich nicht ganz, was jetzt vorzeichenbehaftet ist und was 
nicht ;-)
Eventuell sollte ein Stück C-Code o.ä. vom Beitragersteller helfen.

Autor: Andy S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. schrieb:
> Eventuell sollte ein Stück C-Code o.ä. vom Beitragersteller helfen.

Ok:
differenz = (sensorL0 + sensorL1) - (sensorR0 + sensorR1);     //dann berechne die Differnz

.
.
.
ISR(TIMER0_OVF_vect)
{
  //PID-Algorithmus Berechnung:-------------------------------
  esum = esum + differenz;                    //Integration I-Anteil
  y = Kp*differenz + Ki*Ta*esum + (Kd*((differenz-ealt)/Ta));    //PID-Regelalgorithmus
  ealt = differenz;                        //Differzenteil D-Anteil
  //----------------------------------------------------------
}

differenz (von den Sensoren hergeleitet) hat eine Wertigkeit von 
-1020...+1020.

Dieser Wert wird dann vom PID Algorithmus modifiziert und der 
modifizierte Wert geht dann auf die Motoren.

Also mein Frage war ob der negative Teil meiner Abweichung im I und D 
Anteil Probleme machen oder nicht, weil da wird ja was gespeichert und 
damit weitergerechnet, oder halt prinzipiell.

lg andy

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.