Mit "normalisiert" meine ich +/-1 ~= der maximale Fehler, den das System vernünftigerweise erwarten kann, oder geteilt durch den Sollwert.
Hintergrund: Ich arbeite an einem PID-Regler für eine SSR-Heizung, der sehr reaktionsschnell ist (5 ° C / s aufwärts, 0,5-1 ° C / s Abkühlung). Der Sollwert liegt im Bereich von 100-400°C. Im Code wird dies wie folgt implementiert:
(Die Summierung ist nur ein Akkumulator und Kk ist eine kleine stationäre Korrektur)
Diese Form ist in vielen Open-Source-PID-Codes weit verbreitet. Mir ist jedoch aufgefallen, dass meine K-Terme plötzlich um 1,8 abweichen würden, wenn ich auf °F umstellen würde. Das fühlt sich für mich mathematisch nicht sehr "rein" an. Außerdem stellte ich fest, als ich versuchte, es nach Ziegler-Nichols zu stimmen, dass meine kritische Oszillation ~ 24 s beträgt, aber wenn ich dies als Ki ausdrücke, bekam ich wilde Schwankungen. Nach einigem Graben fand ich die Gleichung aufgeführt als
Und ich hatte einen Aha-Moment. Ist dies die "reine" Form zu verwenden? Dies ist sinnvoller, wenn es um Transferfunktionsanalysen und dergleichen geht.
Wenn e(t) und u(t) dimensionslos sind, dann ist Kp einheitslos, Ki hat Zeiteinheiten^-1 und Kd hat Zeiteinheiten. Ansonsten haben sie Einheiten aus dem Prozess.
Bei der zweiten Formulierung haben Sie sich vertan. Dies ist die zu verwendende.
Dann hat Kc Einheiten aus dem Prozess und Ti und Td haben Zeiteinheiten. Das ist gut, weil Ti und Td auf der gleichen Skala liegen und nur Kc Prozesseinheiten hat. e(t) und u(t) müssen nicht normalisiert werden, da nur Kc ihre Einheiten in Beziehung setzt.
Für Simulations- und Vergleichszwecke kann die Normalisierung nützlich sein. Das Umschalten von °C auf °F innerhalb des Regelkreises macht für mich keinen Sinn. Versuchen Sie, wann immer möglich, SI-Einheiten zu verwenden. Wenn Sie einen merkwürdigen Sensor haben, der °F liefert, wandeln Sie die Messung einfach in °C um, bevor Sie sie in den Regelkreis einspeisen.
Bei der Implementierung kommt es auf die Zielarchitektur an. Wenn Sie einen Gleitkomma-DSP haben, können Sie die Normalisierung beibehalten. Wenn Sie einen kleineren Mikrocontroller verwenden, sollten Sie ganzzahlige Berechnungen (z. B. als Festkomma) verwenden, um die Leistung zu verbessern und die Speicherkosten zu senken.
Die Temperaturregelung – wie in dieser Anwendung – ist normalerweise langsam. Geschwindigkeit ist kein großes Problem, daher werden Sie wahrscheinlich keinen DSP verwenden, aber Sie möchten auch nicht andere Programmteile mit allzu komplizierten Berechnungen blockieren.
Tipp für kleineren und schnelleren Code: Du kannst bereits eine Skalierung in deinen einbauen der zu Ihrer Ausgangssteuerung passenden Regelgleichung (zB das Vergleichsregister eines PWM-Moduls). Dies kostet Sie jedoch Portabilität, also tun Sie es nur, wenn Sie sehr begrenzte Hardware-Ressourcen haben.
Vermeiden Sie auch die Verwendung der Form mit der Division durch . Die Division kostet viel mehr Zyklen als die Multiplikation, da sie selten in Hardware implementiert wird.
jonk
DeusXMachina
jonk
jonk
jonk
DeusXMachina
jonk
jonk
DeusXMachina
jonk