Ich entwerfe eine Software-PID-Steuerung. Logik ist fast endgültig, aber ich frage mich, wie ich den Wert bestimme , Und . Außerdem muss ich den maximalen und minimalen Wert für Pterm Item und Dterm bestimmen. Wie mache ich das?. Außerdem versuche ich, die inverse Steuerung zu implementieren. Gehe ich beim Entwerfen der Software-PID auch auf dem richtigen Weg? Auch wenn integrale Zeit und beide sind gleich? Der Code, den ich bisher geschrieben habe, ist unten angegeben.
Calculate_Error();
P_Term = Percnt_Error;
P_Term = KP * P_Term;
if(P_Term >= PMAX)
{
P_Term = PMAX;
}
else if(P_Term <= PMIN)
{
P_Term = PMIN;
}
// Integral calculation
if(Integraltime==1) // Take integration at every 1s
{
Integraltime = 0;
Error_Accum = Error_Accum + Percnt_Error; // Error Accumulation over time
if(Error_Accum >= MaxAccumError)
{
Error_Accum = MaxAccumError;
}
if(Error_Accum <= -MinAccumError)
{
Error_Accum = -MinAccumError;
}
I_Term = (Error_Accum)*KI;
if(I_Term >= IMAX)
{
I_Term = IMAX;
}
else if(I_Term <= IMIN)
{
I_Term = IMIN;
}
}
Alle Anerkennung dafür stammt aus dem (inzwischen leider toten) Balancing Robots for Dummies- Thread im Arduino-Forum.
Der PID-Regler ist wie folgt:
int
updatePID(int setPoint, int currentPoint)
{
float error;
static float last_error;
static float integrated_error;
float pTerm, iTerm, dTerm;
/* Calculate error and proportional value.*/
error = setPoint - currentPoint;
pTerm = Kp * error;
/* Calculate error and intergral value.*/
integrated_error += error;
iTerm = Ki * constrain(integrated_error, LOWER_LIMIT, UPPER_LIMIT);
/* Calculate deriviative value and reset error.*/
dTerm = Kd * (error - last_error);
last_error = error;
/* Return the PID controlled value.*/
return constrain(i32K*(pTerm + iTerm + dTerm)), LOWER_LIMIT, UPPER_LIMIT);
}
Diese Version der 'Software-PID-Steuerung' implementiert die Begrenzung des Integralwerts (ähnlich wie Ihr Code) mithilfe der Constrain- Funktion aus der Arduino-Bibliothek. Der zusätzliche Vorteil dieses Codes besteht darin, dass Sie auswählen können, was Sie vom Controller möchten, indem Sie den Rückgabewert ändern. ZB würde ein PD-Controller das iTerm
aus dem Rückgabewert entfernen.
Was das Tuning betrifft, ist es ähnlich wie bei Illegal Immigrant .
Set Ki, Kp, and Kd to 0.
Tune Kp until oscillation occurs.
Reduce oscillation and overshoot by tuning Kd.
Tune Ki to increase the speed of the system.
Dies ist das erste Mal, dass ich antworte. Hoffentlich habe ich das richtig gemacht und Ihnen ein wenig auf dem Weg geholfen!
Welche Art von Integrator möchten Sie implementieren? Wenn Sie sich Ihren Code ansehen, haben Sie einen einfachen Akkumulator, er wird funktionieren, aber es gibt bessere Integratoren, die auch die Zuordnung zur S-Domäne erleichtern
fwdEuler?
RevEuler?
Fangen?
Es ist gut, dass Sie erwägen, Summierungsgrenzen für die PID festzulegen. Darf ich Ihnen empfehlen, ein individuelles Limit für die festzulegen Begriff und eine Gesamtsummierungsgrenze. Dadurch werden Abwicklungsbedenken beim Integrator gemildert.
Wie bestimmen Sie den Maximalwert für die Grenzwerte? Es hängt davon ab, was die PID einspeist.
Angenommen, es ist der Controller für einen Geschwindigkeitsregelkreis. Die Ausgabe davon wird eine aktuelle Nachfrage sein. Wenn der maximale Strom, auf den Sie steuern möchten, beispielsweise 100 Ampere beträgt, möchten Sie nicht, dass die Geschwindigkeits-PID eine höhere Anforderung ausgibt, ebenso möchten Sie dies nicht sich höher akkumulieren (siehe vorherige Aussage zu Anti-Windup)
So wählen Sie die Ziffer aus , , ? Willkommen in der Kontrolltheorie. Es gibt eine Reihe von Möglichkeiten. In der Regel werden ein Systemmodell und Stabilitätskriterien benötigt.
PID = P+I-D.
unter Berücksichtigung des Maximalwerts jeder einzelnen Komponente habe ich PIDmax und PIDmin erhalten. Was kp, KI und kd angeht, nähere ich mich gerade der Try-and-Error-Methode. Aber ich bin mir ein bisschen unsicher, ob es eine gute Praxis ist oder nicht.Wenn Sie ein Überschwingen tolerieren können, lesen Sie die Ziegler-Nichols-Methode auf Wikipedia nach. Dies ist aggressiv und findet oft die beste Reaktionsgeschwindigkeit innerhalb der Leistungsgrenzen Ihres Stellantriebs. Wenn Sie eine kritische Dämpfung benötigen (z. B. Werkzeugmaschinen), benötigen Sie etwas anderes. Viel mehr bei Loop-Tuning-Methoden
Li-aung Yip
Fraïssé