mbed-os github

Dependencies:   ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep

Fork of ARNSRS_testDFU by POTLESS

Revision:
85:98861c7bb3a1
Parent:
84:49f0acf09f67
Child:
87:314231bfaf8f
--- a/main.cpp	Mon Sep 10 09:33:38 2018 +0000
+++ b/main.cpp	Fri Sep 14 06:39:08 2018 +0000
@@ -131,19 +131,19 @@
 float volet_fuite_Position;
 
 float Volets_Speed = 1;
-float Volet_DeadBand = 5;
+float Volet_DeadBand = 0;
 
 //Paramètre du PID
-float Kc = 0.005;
-float Ti = 0.1;
-float Td = 0.0;
+float Kc = 40;
+float Ti = 0;
+float Td = 0;
 float RATE_PID = 10.0;
 float Commande_PID;
 int consigne = 210;
 float Max_Input = 1000;
 float Min_Input = 80;
-float Borne = 5;
-float Max_Output = 90 - Borne;//Vérifier la valeur pour angle à laisser ouvert...
+float Borne = 5; //ce sont des pourcentages
+float Max_Output = 100 - Borne;//on laisse en pourcentage et on calcule l'angle après le compute
 float Min_Output = 0 + Borne;
 
 //Init PID
@@ -570,10 +570,16 @@
     while (true) {
         if (FLAG_PID == 1 && EN_MODE_SECU == false) {
             control_Servo.setProcessValue(ppO2);
+            float pid_output = control_Servo.compute();
+            // on détermine le output comme un débit entre 0 et 100% et on fait le calcul d'angle ensuite
+            // on suppose pour simplifier que le débit est proportionnel à la surface projeté du papillon sur un plan perpendiculaire à la section du tuyau
+            // exemple pour 50% de débit, l'angle à ouvrir est de Acos(0.5)=60degrés 
+            float angle = 90 + acos(1-pid_output/100)*180/3.14159265f;
+            DEBUG("\r\n  pid_ouput = %f  \r\n", pid_output);
             //Nouvelle sortie servo poumon si on est pas en mode SECU
-            Consigne_poumon = 90 - control_Servo.compute();
+            Consigne_fuite = angle;//;
             // mode volets asservis (simule un seul moteur)
-            Consigne_fuite = 90 - Consigne_poumon;
+            Consigne_poumon = 90 - Consigne_fuite; //control_Servo.compute();
             wait(RATE_PID);
         }
     }
@@ -787,17 +793,17 @@
         Kc = atof(numb);
         //control_Servo.reset();
         control_Servo.setTunings(Kc, Ti, Td);
-        OUTPUT("  MAJ PID -->  Kc = %f   Ti = %f   Td = %f\r\n", Kc, Ti, Td);
+        OUTPUT("  MAJ PID --  Kc = %f   Ti = %f   Td = %f\r\n", Kc, Ti, Td);
     } else if (0 == strcmp(com, "ti")) {
         Ti = atof(numb);
         //control_Servo.reset();
         control_Servo.setTunings(Kc, Ti, Td);
-        OUTPUT("  MAJ PID -->  Kc = %f   Ti = %f   Td = %f\r\n", Kc, Ti, Td);
+        OUTPUT("  MAJ PID --  Kc = %f   Ti = %f   Td = %f\r\n", Kc, Ti, Td);
     } else if (0 == strcmp(com, "td")) {
         Td = atof(numb);
         //control_Servo.reset();
         control_Servo.setTunings(Kc, Ti, Td);
-        OUTPUT("  MAJ PID -->  Kc = %f   Ti = %f   Td = %f\r\n", Kc, Ti, Td);
+        OUTPUT("  MAJ PID --  Kc = %f   Ti = %f   Td = %f\r\n", Kc, Ti, Td);
     } else if (0 == strcmp(com, "cons")) {
         consigne = atoi(numb);
         control_Servo.setSetPoint(consigne);
@@ -1135,8 +1141,12 @@
                 //Update du PID
                 if (FLAG_PID == 1 && EN_MODE_SECU == false) {
                     control_Servo.setProcessValue(ppO2);
+                    // il faut sortir le output comme un débit entre 0 et 100% et faire le calcul d'angle ensuite
+                    // on suppose pour simplifier que le débit est proportionnel à la surface projeté du papillon sur un plan perpendiculaire à al section du tuyau
+                    // exemple pour 50% de débit, l'angle à ouvrir est de Acos(0.5)=60degrés 
+                    float angle = 90 + acos(1-pid_output/100)*180/3.14159265f;
                     //Nouvelle sortie servo poumon si on est pas en mode SECU
-                    Consigne_poumon = 90 - control_Servo.compute();
+                    Consigne_poumon = 90 - angle;
                     // mode volets asservis (simule un seul moteur)
                     Consigne_fuite = 90 - Consigne_poumon;
                 }