Je travaille à la création d'un contrôleur PID pour la commande d'un moteur. J'ai étudié en utilisant la bibliothèque PID mais je crois que cela ne convient pas à mes besoins, car j'ai besoin de contrôler un moteur dans deux directions en utilisant le même contrôleur.Contrôleur PID, Problèmes avec la partie codage D.
J'ai actuellement la pièce PI qui fonctionne, mais je suis aux prises avec la partie D. Je suis incapable de stocker l'erreur actuelle à la dernière erreur, qui peut ensuite être utilisée pour calculer la valeur D suivante. Au lieu de cela ma valeur d semble refléter l'erreur, plutôt que le changement de l'erreur actuelle par rapport à la dernière erreur. Mon code est montré ci-dessous, tout conseil serait apprécié. ** notez, je sais que typiquement delta_T est inclus dans la partie Intégrale et Dérivée du contrôleur, mais je préfère l'incorporer dans les constantes de contrôle Ki et Kd pour éviter les complications de codage.
Distance = analogRead (irSense); //read the sensor, assigns value to Distance
//Serial.println(Distance) ;
double lastError;
int control; //initialize control variable , set up PID parameters
int setpoint = 350; //Neutral position, zero point, desired input
int error = Distance - setpoint; //error function
double d = (error - lastError); //derivative function
double kp = 0.9; //Proportional constant
double ki = 0.000001; //Intergral constant
double kd = .0001; //Derivitve constant
i += error; //intergral Set
control = error * kp + i * ki + d * kd; //PID control funtion
lastError = error;
Serial.println (d);