Le mini projet consiste à mettre en pratique le principe de fonctionnement d’une commande incrémentale avec Arduino. On utilise dans l’exemple un bouclage unitaire d’un signal PWM. L’objectif du programme est de maintenir la tension DC à la borne de la charge constante en faisant varier le rapport cyclique du signal PWM. La consigne est définit par le programme. Le concept d’incrémentation consiste à faire incrémenter (ou décrémenter) le rapport cyclique jusqu’à l’obtention de la consigne. Le programme extrait la valeur moyenne du signal PWM avant de décider si on incrémente ou décrémenter la commande. La qualité du filtrage ainsi le pas d’incrémentation sont définit dans le programme.
Voir le tuto pour plus de détails techniques.
Notes sur le programme
Les paramètres du programme
#define Out 9
#define In A0
#define Consigne 4.0 // Tension de la consigne
#define N 100 // Filtrage de l'entrée
#define Step 1E-3 // Erreur sur la consigne (Epsilon)
#define StepCyc 1E-1 // Pas d'incrémentation du Rapport Cyclique / Cycle
Initialisation
Le pin 9 est utilisé pour générer le signal PWM. Il est rebouclé dans le pin analogique A0. On initialise aussi le tableau avec le contenu de l’entrée A0. Le port série sera utilisé afin d’observer en temps réel la valeur moyenne, le rapport cyclique ainsi le signal PWM.
if ((v_fil>=Consigne -1.5*Step) && (v_fil<=Consigne +1.5*Step)) return; // Ne rien faire!
Incrémentation
if ((v_fil<Consigne)) { OutPWM+=StepCyc; if (OutPWM>=255.0) OutPWM-=StepCyc; }
Décrémentation
if ( (v_fil>Consigne)) { OutPWM-=StepCyc; if (OutPWM<=0.0) OutPWM+=StepCyc; }
Génération de la commande PWM
analogWrite(Out, (unsigned int)OutPWM);
Affichage
Serial.print((float)Vin_A0*5.0/1023.0);
Serial.print(",");
Serial.print(Consigne);
Serial.print(",");
Serial.print(v_fil);
Serial.print(",");
Serial.println((float)OutPWM*5.0/255.0);
Programme complet
#define Out 9 #define In A0
#define Consigne 4.0 // Tension de la consigne #define N 100 // Filtrage de l'entrée #define Step 1E-3 // Epsilon #define StepCyc 1E-1 // Pas d'incrémentation du Rapport Cyclique / Cycle
float v_fil=0.0; float somme =0.0; float vin_volat=0.0; int vinTab[N]; int Vin_A0=0; int I=0; float OutPWM=180.0;
2 réponses sur « Projet Arduino: La Commande Incrémentale – Version 1 [TUTO] »
merci infiniment ça m’aide enormement
Avec plaisir!