mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik digitaler PID Regler


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche gerade einen universellen, digitalen PID Regler zu
programmiern.
PI funktionieren schon wunderbar, aber der D Regler scheitert am
Quantisierungsfehler des ADCs: Je nachdem ob gerade wiedermal ein Bit
kippt, kommen eigentlich nur die Werte -1, 0 und +1 vor. Da diese Werte
mit einem Faktor von einigen 10 verstärkt wird, "rauscht" die
Stellgröße extrem.
Mit dem theoretischen Ansatz komme ich nicht weiter, hat jemand einen
Praxistaugliche Routine zur Berechnung des differenziellen Anteils ?

Autor: Konrad Heisig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach den D-Teil einfach so, dass er erst bei einer Abweichung von 2
(oder viellicht sogar nochmehr) anspringt und sonst so tut als wär' er
nicht da.
Alternativ könnte man das Signal auch für den ganze Regler oder nur den
D-Teil etwas glätten (über 2 oder mehr Samples mitteln) - kommt halt auf
die Samplingrate und die gewünschte Reaktionsgeschwindigkeit an.


Gruß
Konrad

Autor: Kupfer Michi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du genügend Rechenleistung hast approximier deine Eingangsgrösse
durch eine Regressionsgerade. Aus ihr kannst du dann die Steigung etc.
für den PID Algorithmus gewinnen.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Idee mit der Regressionsgerade ist echt gut.
Die kann man ja optimieren, wenn man alle konstanten Werte im voraus
berechnet und mit Festkomma rechnet. Dann hält sich der Rechenaufwand
in Grenzen.

Damit reichen etwa 20 Werte um das Rauschen fast komplett
wegzubekommen.
Ich denke besser werde ich es nicht hinbekommen und 20 Werte sind ein
guter Kompromiss zwischen Verzögerung und Rauschen.

Autor: Kupfer Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Speichere die Produktterme in einem Array. Dann brauchst du nicht immer
alles neu zu berechnen (nur den Wert der hinzukommt abzüglich dem Wert
der wegfällt).

Autor: Michael von Gersdorff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Benedikt

Du könntest auch das Differenzieren analog machen und bei
entsprechender Verstärkung und dem Einlesen des Signals über einen
weiteren ADC-Kanal ein optimales Signal für den D-Anteil bekommen. Du
müstes allerdings einen Operationsverstärker einbauen.

Michael

Autor: hans dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannst auch eine Art gleidenden mittelwert über die messwerte zu
legen und dann die gemittelten werte für deine berechnung nehmen.
oder du machst supersampling und rechnest mit ein paar mehr stellen
das verringert zwar die bandbreite das reglers aber dämpft die sprünge.

Autor: Kupfer Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Mittelwert ist der bestmögliche Schätzwert unter der Annahme dass
die Messgrösse KONSTANT ist und sonst keine weiteren Informationen über
die Fehlerverteilung vorliegen.

Ist die Messgrösse jedoch veränderlich, so ist (wieder wenn keinen
weiteren Zusatzinformationen vorliegen) die Annahme einer lineraren
Beziehung die nächst bessere Approximation.
Die Regressionsgerade liefert dann den bestmöglichen Schätzwert für die
Messgrösse und deren Ableitung/Steigung.

Die Mittelwertbildung und nachfolgende Steigungsberechnung ist so
gesehen etwas widerspüchlich und verschenkt unötig Bandbreite ohne
genauer zu sein (ist aber verständlicherweise wegen des geringeren
Rechen/Implementierungsaufwand beliebt).

Liegen mehr Informationen über Kurvenart oder Verteilung der Messfehler
vor so kann man dann natürlich ein Kurvenfitting höherer Ordnung
betreiben.

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.