Forum: Mikrocontroller und Digitale Elektronik digitaler PID Regler


von Benedikt (Gast)


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 ?

von Konrad Heisig (Gast)


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

von Kupfer Michi (Gast)


Angehängte Dateien:

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.

von Benedikt (Gast)


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.

von Kupfer Michi (Gast)


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).

von Michael von Gersdorff (Gast)


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

von hans dieter (Gast)


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.

von Kupfer Michi (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.