// Mise à jour de la sortie y_cc[1]=y_cc[0]; y_cc[0]=y_nn;
// Mise à jour de la sortie x_cc[1]=x_cc[0]; x_cc[0]=x_nn;
// Renvoie du résultat return y_nn; }
Le programme Arduino complet
/* * 1. Correction d'un système du 2nd ordre en BF * 2. Implémentation du correcteur Avance de Phase (AP): * Modèle Analogique: C(p)= k*(1+aTp)/(1+Tp) * Modèle numérique: y(n)=[alfa*k 2kT -alfa*k]*[x(n) x(n-1) x(n-2)]' * -[2T -beta]*[y(n-1) y(n-2)]' * y(n)=y(n)/beta * 3. Analyse du correcteur Avance de Phase * 4. Précision/ Stabilité/ Rapidité du correcteur AP * 5. La réponse à un échelon d'un système en 2nd ordre * 6. Etc. *
double x_nn=0.0; // Consigne (entrée) double y_n[2]; // "0" Non corrigé, "1": Corrigé double eps_n[2]; // Erreur double y_capt[2]; // Sortie du capteur double y_corr[2]; // Sortie du correcteur
// Variables internes des systèmes double x1[2], y1[3]; // Système Non Corrigé double x2[2], y2[3]; // Système Corrigé
// Variables internes du correcteur double x_c[2], y_c[2];
// Paramètres de l'échelon unsigned long c=0; // Compteur (période) bool Step=false;
void setup() { // Port série de la réponse du système Serial.begin(19200); }
void loop() { // 1. La consigne (l'entrée) x(n) pour les deux systèmes c++; c=c%c_step; if(!c) { Step=!Step; c=0; } x_nn=A_step*(double)Step; // Réponse à un échelon x(n)=cte //x_nn=(double)c; // Réponse à une rampe x(n)=n
// 2. Sortie du capteur: Retour unitaire y_capt[0]=y_n[0]; y_capt[1]=y_n[1];
// 3. Soustracteur: Calcul de l'erreur eps(n) eps_n[0]=x_nn-y_capt[0]; eps_n[1]=x_nn-y_capt[1];
// 4.1 Correcteur y_corr[0]=eps_n[0]; // Système non Corrigé