Non sono del tutto sicuro se questo è il posto giusto per chiederlo. Bene, lo è un problema di programmazione, suppongo.Perché un delta inferiore causa la regolazione del controller PID con minore precisione?
Sto provando a creare una semplice simulazione di controller PID in Java.
In breve, c'è un valore obiettivo e un valore corrente. Il valore corrente è modificato da un numero. Si fornisce al controller PID il valore corrente e si cercherà di restituire un numero nella speranza che tale numero causi l'approssimazione del valore corrente del valore target. Overtime, più usi il controller PID, "impara" (usando integrali e derivati) e alla fine restituisce valori sempre più precisi. Ciò è utile per, per esempio, mantenere l'equilibrio di una barca controllando il movimento della ruota.
La formula utilizzata da un controller PID è piuttosto generale e abbastanza semplice - o almeno così pensavo. Nell'esempio seguente, il valore che viene restituito dal controller PID viene semplicemente aggiunto al valore corrente. Presumo che funzioni con applicazioni più complesse (che implicano moltiplicazione o divisione, ecc.). Questo è il mio programma:
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;
}
}
}
Se si esegue questo, si vedrà che il regolatore PID alla fine riesce a provocare il valore corrente di essere molto molto vicino al valore di riferimento.
È davvero bello. Ora, volevo vedere i miei risultati un po 'più velocemente (perché ho intenzione di creare una sorta di grafico interattivo), così ho deciso di cambiare il delta dt
a 0.1
.
Purtroppo, il valore risultante non è più vicino a 100! Ora sembra di raggiungere 105 e poi, molto lentamente, diminuire a 100. Non va bene!
Ora immagina di avere dt
allo 0.01
! Ora è estremamente lento raggiungere 102 e ora non torna nemmeno a 100, ora continua ad aumentare!
Quindi la mia domanda è: perché un delta inferiore causa questo?
Il mio codice è basato su this PDF document e usano 0.01
bene.
Penso che le tue domande si adattino a questo [sito] (http://math.stackexchange.com/search?q= [controllo-teoria] + controller PID +). – user3707125