Friday 3 November 2017

Gleitender Mittelwert Pid


Ich habe wenige laufende Mittelung techs für das Glätten der Änderung in ADC-Daten in AtMega48 zum Steuern von Leuchten (PWM) beim Drehen eines Topfes (ADC) versucht. Die Filter (Pseudocodes): Ich bemerkte, dass die Filter sehr schön sind. Aber langsam in Reaktion, die erwartet wird. Ich suche nach einem Techniken wie Exponential gleitenden Durchschnitt. Reagiert werden soll. Gibt es eine andere wie diese Wie es heißt: Wo ist zwischen 0 und 1. Wie Code und Optimierung dieser Code klug (ohne Floats) Oder Wie würde ich die Floats in entsprechende ganze Zahlen für die Herstellung von kleinen, schnellen und reaktionsschnellen Code konvertieren. Und ich hielt 1 Andere dann, dass es nicht wie erwartet funktioniert. Weil Idve alle Variablen zu Float ändern. Bitte konzentrieren Sie sich nicht auf folgende Aussage vorerst, sondern beachten Sie. Halten Floats in meinem Code-Basis füllt den Programmspeicher von 45 bis 137, im Falle von Sie können mit minimalem Overhead durch Begrenzung auf binäre Brüche implementieren. Ich habe dies mit guten Ergebnissen verwendet. Nehmen Sie das bestehende Ergebnis, Shift it N Orten rechts zu teilen durch 2N Subtrahieren Sie es aus dem bestehenden Ergebnis. Neue Daten hinzufügen Das ist nicht so schnell beim Wechsel mit einer Stufenänderung der Eingangsdaten, wie Sie es wünschen, ist aber in vielen Fällen einfach zu implementieren und effektiv genug als Filter. Sie können ihre Reaktion beschleunigen, indem sie informelle Entscheidungen über sein Verhalten in Fällen, die zu unterschiedlich sind. B. eine Anzahl von sequentiellen Eingängen beibehalten, die mehr als eine Grenze sind, die sich von dem existierenden Ergebnis unterscheidet. Wenn dieser Zählwert einen Schwellenwert überschreitet, dann das N-Teilungsverhältnis um einen Faktor ändern. ZB N ist in der Regel 4- Ergebnisse werden rechts verschoben 4 mal 16 teilen. Wenn Eingang mehr als xxx weg von der Antwort ist, tun Sie nur zwei Verschiebungen nach rechts und multiplizieren Sie neue Probe durch 4, bevor Sie addieren. (Dies ist Modifikation 2 in einer größeren Serie auf das Schreiben eines soliden PID-Algorithmus) Das Problem Diese Änderung wird den Ableitungsbegriff ein Bit zu zwicken. Das Ziel ist die Beseitigung eines Phänomens bekannt als 8220Derivative Kick8221. Das obige Bild veranschaulicht das Problem. Durch errorSetpoint-Input bewirkt jede Änderung im Sollwert eine sofortige Fehlerveränderung. Die Ableitung dieser Änderung ist unendlich (in der Praxis, da dt isn8217t 0 es nur winds up ist eine wirklich große Zahl.) Diese Zahl wird in die pid-Gleichung, die zu einer unerwünschten Spitze in der Ausgabe führt eingezogen. Zum Glück gibt es einen einfachen Weg, um loszuwerden, diese. Die Lösung Es stellt sich heraus, dass die Ableitung des Fehlers gleich der negativen Ableitung von Input ist, EXCEPT, wenn sich der Sollwert ändert. Das ist eine perfekte Lösung. Anstatt zu addieren (Kd Ableitung von Error), subtrahieren wir (Kd Ableitung von Input). Dies ist bekannt als mit 8220Derivative auf Measurement8221 Die Modifikationen hier sind ziemlich einfach. We8217re ersetzt dError durch - dInput. Anstatt sich an den lastError zu erinnern, erinnern wir uns nun an den lastInput Das Ergebnis Here8217s, was uns diese Modifikationen bringen. Beachten Sie, dass der Eingang immer noch ungefähr gleich aussieht. So erhalten wir die gleiche Leistung, aber wir don8217t senden eine riesige Ausgabe Spitze jedes Mal, wenn der Sollwert ändert. Dies kann oder auch nicht eine große Sache sein. Es hängt alles davon ab, wie empfindlich Ihre Anwendung ist, um Spitzen auszugeben. Die Art, wie ich es sehe, es doesn8217t nehmen keine Arbeit mehr, es zu tun, ohne zu treten, also warum nicht Dinge richtig machen Next Dieser Eintrag wurde am Freitag, 15. April 2011 um 15:02 Uhr und ist abgelegt unter Coding. PID. Sie können alle Antworten auf diesen Eintrag durch den RSS 2.0 Feed verfolgen. Sie können eine Antwort hinterlassen. Oder trackback von Ihrer eigenen Seite. 9 Antworten zu 8220Improving die Anfänger PID 8211 Derivative Kick8221

No comments:

Post a Comment