Programa sem limites de tempo de injecao e rotacao

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Marcelocostanzo
Date:
Thu Apr 11 13:21:15 2019 +0000
Parent:
6:111a7f1b978f
Commit message:
Programa sem limites de tempo de injecao e rotacao

Changed in this revision

TextLCD.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
reScale.lib Show diff for this revision Revisions of this file
diff -r 111a7f1b978f -r 8575dc24281f TextLCD.lib
--- a/TextLCD.lib	Fri Mar 01 10:07:05 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://os.mbed.com/teams/Sz_Insper/code/TextLCD/#14d6edd19f7e
diff -r 111a7f1b978f -r 8575dc24281f main.cpp
--- a/main.cpp	Fri Mar 01 10:07:05 2019 +0000
+++ b/main.cpp	Thu Apr 11 13:21:15 2019 +0000
@@ -1,31 +1,21 @@
 #include "mbed.h"
-#include "reScale.h"
 
-#define KP 0.8f
-#define KI 1.0f
-#define KD 0.01f
-#define offset 0.02f
-
+Ticker flipper;
 
-AnalogIn SETPOINT(A0);
-AnalogIn TPS1(A2);
-AnalogIn TPS2(A3);
-Ticker flipper;
-DigitalOut  controlLED(LED2); 
-DigitalOut  IN1A(D10);
-DigitalOut  IN2A(D8);
-PwmOut TBI(D9);
+DigitalOut  controlLED(D13); 
+DigitalOut  inj_1(D2);
+DigitalOut  inj_2(D3);
+DigitalOut  inj_3(D4);
+DigitalOut  inj_4(D5);
 
 //Timer t1;
+Timer t2;
 
-//Serial device(PB_6, PB_7); // tx, rx
 Serial device(USBTX, USBRX); // tx, rx
 
-reScale _scale(0.0f,1.0f,0.09f,0.83f); 
-
-float pwm=0, erro=0, proporcional=0, integrador=0;
-float TPS1_VAL, SETPOINT_VAL=0, SETPOINT_scaled=0;
-bool flag=0; 
+bool flag;
+float RPS = 0;
+int inj_time = 10000;
 
 void flip() 
 {
@@ -33,85 +23,145 @@
     controlLED=!controlLED;
 }
 
-void open()
+void set_parameters()
 {
-    IN1A=1;
-    IN2A=0;
+    char c[8];
+    char parameter = 0x00;
+    int i = 0;
+    int value;
+    int RPM;
+    
+    parameter = device.getc();
+       
+    if((parameter == 'T')  || (parameter == 'R')) //T or R
+    {
+        while(c[i-1] != '\n')
+        {
+            c[i] = device.getc();
+            i++;         
+        }
+    }
+    
+    else
+    {
+        device.printf("Invalid command. Txxxxx to set injection time, Rxxxxx to set RPM\n\r");
+        device.fsync();
+    }
+       
+    if(parameter == 'T') 
+    {      
+        value = atoi(c);
+        inj_time = value;
+                    
+        device.printf("Inj Time %i uS\n\r",inj_time);
+    } 
+    
+    if(parameter == 'R')  
+    {     
+        value = atoi(c);
+        
+        RPM = value;
+            
+        RPS = RPM / 60.0f;
+            
+        RPS = RPS * 2; //multiplicador por 2 pois um ciclo otto são 2 voltas
+        
+        RPS = 1.0f / RPS;       
+
+        flipper.attach(&flip, RPS);
+           
+        device.printf("%f S\n\r",RPS);
+    } 
 }
 
-void close()
-{
-    IN1A=0;
-    IN2A=1;
-}
-    
 int main() 
 {   
-    flipper.attach(&flip, 0.2);
-    TBI.period(0.01f);
+    bool valid_pulse;
+    int inj_counter = 1;
     
-    IN1A=0;
-    IN2A=0;
+    RPS = 1.0f;
+    flipper.attach(&flip, RPS);
     
-    while(1) 
+    device.printf("Start\n\r");
+    
+    while(1)    
     {   
         
     //t1.reset();
-    //t1.start(); 
-        
-        TPS1_VAL = TPS1.read();
-        SETPOINT_VAL = SETPOINT.read();
+    //t1.start();     
+            
+        if(device.readable())
+        {
+            set_parameters();   
+        }
         
-        SETPOINT_scaled = _scale.from(SETPOINT_VAL);
         
-        if(SETPOINT_scaled < 0.185f)
+        if(inj_counter > 4)
         {
-            close();
-            erro =  TPS1_VAL - SETPOINT_scaled;        
-            proporcional = erro * KP;
+            inj_counter = 1;
         }
         
-        else
+        if(t2.read_us() > inj_time)
+        {   
+            t2.stop();
+            inj_1 = 0;
+            inj_2 = 0;
+            inj_3 = 0;
+            inj_4 = 0;
+        }
+        if((inj_counter == 1) && (valid_pulse == 1))
         {
-            open();
-            erro = SETPOINT_scaled - TPS1_VAL;        
-            proporcional = erro * KP;
+            valid_pulse = 0; 
+            inj_1 = 1;
+            inj_2 = 0;
+            inj_3 = 0;
+            inj_4 = 0;
+            t2.reset();
+            t2.start();
         }
-                
-        if(erro>1 || erro<-1)
+         
+        if((inj_counter == 2) && (valid_pulse == 1))
         {
-            //do nothing
+            valid_pulse = 0; 
+            inj_1 = 0;
+            inj_2 = 0;
+            inj_3 = 1;
+            inj_4 = 0;
+            t2.reset();
+            t2.start();
         }
         
-        else
+        if((inj_counter == 3) && (valid_pulse == 1))
         {
-            integrador =  integrador + ((erro * KI)*0.01f);
+            valid_pulse = 0; 
+            inj_1 = 0;
+            inj_2 = 0;
+            inj_3 = 0;
+            inj_4 = 1;
+            t2.reset();
+            t2.start();
         }
         
-        if(integrador >=1)
-        integrador = 1;
-        
-        if(integrador <=-1)
-        integrador = -1;
-        
-                
-        pwm = proporcional + integrador;
-        TBI = pwm + offset;
+        if((inj_counter == 4) && (valid_pulse == 1))
+        {
+            valid_pulse = 0; 
+            inj_1 = 0;
+            inj_2 = 1;
+            inj_3 = 0;
+            inj_4 = 0;
+            t2.reset();
+            t2.start();
+        }
         
         
         if(flag==1)
         {
-            device.printf("\n\rPedal: %.4f",SETPOINT_scaled);
-            device.printf("\n\rTPS: %.4f",TPS1_VAL);
-            device.printf("\n\rErro: %.4f",erro);
-            device.printf("\n\rPWM: %.4f",pwm);
-            //device.printf("integrador: %f\n",integrador);
-            //device.printf("proporcional: %f\n",proporcional);
+            inj_counter++;
             flag=0;
+            valid_pulse = 1;
         }
         
         //t1.stop();
         //printf("O ciclo levou: %i uS \n\r", t1.read_us());
-        wait(0.01);
     }
 }
\ No newline at end of file
diff -r 111a7f1b978f -r 8575dc24281f mbed.bld
--- a/mbed.bld	Fri Mar 01 10:07:05 2019 +0000
+++ b/mbed.bld	Thu Apr 11 13:21:15 2019 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/users/mbed_official/code/mbed/builds/5aab5a7997ee
\ No newline at end of file
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file
diff -r 111a7f1b978f -r 8575dc24281f reScale.lib
--- a/reScale.lib	Fri Mar 01 10:07:05 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://os.mbed.com/users/c0ax/code/reScale/#ebb951147122