Ich bin mir nicht ganz sicher, ob dies der richtige Ort ist, um das zu fragen. Nun, es ist ein Programmierproblem nehme ich an.Warum bewirkt ein niedrigeres Delta, dass sich mein PID-Regler mit geringerer Genauigkeit anpasst?
Ich versuche, eine einfache PID-Controller-Simulation in Java zu erstellen.
Kurz gesagt, gibt es einen Zielwert und einen aktuellen Wert. Der aktuelle Wert wird durch eine Zahl geändert. Sie geben dem PID-Regler den aktuellen Wert und er wird versuchen, eine Zahl in der Hoffnung zurückzugeben, dass eine solche Zahl den aktuellen Wert dem Sollwert annähern wird. Überstunden, je mehr Sie den PID-Regler verwenden, wird er "lernen" (unter Verwendung von Integralen und Ableitungen) und wird schließlich immer genauere Werte zurückgeben. Dies ist zum Beispiel nützlich, um das Gleichgewicht eines Bootes durch Steuern der Radbewegung aufrechtzuerhalten.
Die von einem PID-Regler verwendete Formel ist ziemlich allgemein und ziemlich geradlinig - oder so dachte ich. Im folgenden Beispiel wird der vom PID-Controller zurückgegebene Wert einfach zum aktuellen Wert hinzugefügt. Ich gehe davon aus, dass es mit komplexeren Anwendungen (Multiplikation oder Division usw.) funktionieren würde. Das ist mein Programm:
public class PID {
private static double Kp = 0.1;
private static double Kd = 0.01;
private static double Ki = 0.005;
private static double targetValue = 100.0;
private static double currentValue = 1.0;
private static double integral = 0.0;
private static double previousError = 0.0;
private static double dt = 0.5;
private static double max = 5;
private static double min = -5;
public static void main(String[] args) throws Exception {
while (true) {
Thread.sleep((long) (1000.0 * dt));
double error = targetValue - currentValue;
double derivative = 0.0;
double output = 0.0;
integral = integral + error * dt;
derivative = (error - previousError)/dt;
output = Kp * error + Ki * integral + Kd * derivative;
previousError = error;
if (output > max) output = max;
if (output < min) output = min;
// Apply the output to the current value:
System.out.println(currentValue + " + " + output + " = " + (currentValue + output));
currentValue += output;
}
}
}
Wenn Sie dies ausführen, werden Sie sehen, dass der PID-Regler steuert schließlich der aktuelle Wert zu verursachen sehr, sehr nahen Wert auf das Ziel zu sein.
Es ist ziemlich cool. Jetzt wollte ich meine Ergebnisse ein wenig schneller sehen (weil ich eine Art interaktives Diagramm erstellen möchte), also entschied ich mich, das Delta dt
zu 0.1
zu ändern.
Leider ist der resultierende Wert nicht mehr in der Nähe von 100! Jetzt scheint es zu erreichen 105 und dann, sehr langsam, verringern auf 100. Das ist nicht gut!
Stellen Sie sich nun vor, Sie hätten dt
unter 0.01
! Jetzt ist es extrem langsam, 102 zu erreichen, und jetzt geht es nicht mehr auf 100 zurück, jetzt wächst es einfach weiter!
Also meine Frage ist: Warum verursacht ein niedrigeres Delta dies?
Mein Code basiert auf this PDF document und sie verwenden 0.01
ganz gut.
Ich denke, Ihre Fragen passen zu dieser [Website] (http://math.stackexchange.com/search?q= [Steuerelement-Theorie] + PID + Controller) mehr. – user3707125