// consignes, erreurs, terme integrale
int cG, cD; // consignes
int epsilon_D, epsilon_G; // erreurs calculées
float integrale_G=0, integrale_D=0; // termes integrale de l erreur
float Kp = 1.; // gain action proportionnelle
float Ki = 1.; // gain action integrale
Il s'agit de calculer cG
et cD
à partir de potA
et potD
. L'unité est de l'incrément par seconde. Il faut que les valeurs soient écrétées aux vitesses maximale et minimale (ici 800 inc/s dans les deux sens).
// Calcul consignes de vitesse en inc/s ------------------
cG =
cD =
if (cG>800) cG=800;
if (cG<-800) cG=-800;
if (cD>800) cD=800;
if (cD<-800) cD=-800;
// erreurs
epsilon_G = cG - vitG;
epsilon_D = cD - vitD;
// integrale erreur
integrale_G = integrale_G + epsilon_G * 0.1;
integrale_D = integrale_D + epsilon_D * 0.1;
// calcul commandes
vG = int(Kp * epsilon_G + Ki * integrale_G);
vD = int(Kp * epsilon_D + Ki * integrale_D);