pachas

Dependencies:   mbed QEI FastPWM

Files at this revision

API Documentation at this revision

Comitter:
miguelangel_2511
Date:
Fri May 15 20:29:30 2020 +0000
Parent:
11:5cb7ae8bd831
Commit message:
hola papu

Changed in this revision

buttons.cpp Show annotated file Show diff for this revision Revisions of this file
electric_valves.cpp Show annotated file Show diff for this revision Revisions of this file
electric_valves.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
nextion_interface.cpp Show annotated file Show diff for this revision Revisions of this file
pressure_sensors.cpp Show annotated file Show diff for this revision Revisions of this file
pressure_sensors.h Show annotated file Show diff for this revision Revisions of this file
project_defines.h Show annotated file Show diff for this revision Revisions of this file
stepper_motor_driver.cpp Show annotated file Show diff for this revision Revisions of this file
ventilator.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/buttons.cpp	Thu May 07 03:52:31 2020 +0000
+++ b/buttons.cpp	Fri May 15 20:29:30 2020 +0000
@@ -4,7 +4,10 @@
 
 
 /* Object definition */
-BusIn  buttons (ENTER_SW_PIN, LIMIT_SW_01_PIN);
+BusIn  buttons(ENTER_SW_PIN, LIMIT_SW_01_PIN,
+               INSPIRATION_VALVE_HALL_01_PIN, INSPIRATION_VALVE_HALL_02_PIN,
+               EXPIRATION_VALVE_HALL_01_PIN, EXPIRATION_VALVE_HALL_02_PIN);
+
 
 /* Global variable definition */
 volatile uint8_t button_state = 0; // debounced button state (bit == 1: button pressed)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/electric_valves.cpp	Fri May 15 20:29:30 2020 +0000
@@ -0,0 +1,43 @@
+
+#include "mbed.h"
+#include "stdint.h"
+#include "project_defines.h"
+#include "buttons.h"
+#include "electric_valves.h"
+
+/* Object definition */
+BusOut valve_control(INSPIRATION_VALVE_IA_PIN, INSPIRATION_VALVE_IB_PIN,
+                     INSPIRATION_VALVE_EN_PIN, EXPIRATION_VALVE_IA_PIN,
+                     EXPIRATION_VALVE_IB_PIN, EXPIRATION_VALVE_EN_PIN);
+
+
+/* Function definition*/
+void Valves_Initialize(void){
+    
+    /* Enable both inspiration and expiration valve */
+    INSPIRATION_VALVE_STOP();
+    INSPIRATION_VALVE_ENABLE();
+    
+    EXPIRATION_VALVE_STOP();
+    EXPIRATION_VALVE_ENABLE();
+    
+    
+    /* Close the inspiration valve */
+    
+    INSPIRATION_VALVE_CLOSE();
+    while(!INSPIRATION_VALVE_IS_CLOSED){
+         //Wait until the inspiration valve is closed
+    }
+    INSPIRATION_VALVE_STOP();
+
+    
+    /* CLose the expiration valve */
+    
+    EXPIRATION_VALVE_OPEN();
+
+    while(!EXPIRATION_VALVE_IS_OPEN){
+         //Wait until the inspiration valve is closed
+    }
+    EXPIRATION_VALVE_STOP();
+        
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/electric_valves.h	Fri May 15 20:29:30 2020 +0000
@@ -0,0 +1,13 @@
+
+
+#ifndef ELECTRIC_VALVES_H_
+#define ELECTRIC_VALVES_H_
+
+/* Object declaration */
+extern BusOut valve_control;
+
+/* Function declaration */
+void Valves_Initialize(void);
+
+
+#endif
\ No newline at end of file
--- a/main.cpp	Thu May 07 03:52:31 2020 +0000
+++ b/main.cpp	Fri May 15 20:29:30 2020 +0000
@@ -31,8 +31,8 @@
              read_pressure_sensors_flag = 0;
          }
          
-         if((stepper_driver_state != Stepper_Inspiration_Finish) && 
-            (stepper_driver_state != Stepper_Expiration_Finish)){
+         //if((stepper_driver_state != Stepper_Inspiration_Finish) && 
+            //(stepper_driver_state != Stepper_Expiration_Finish)){
             /* Display sensed values if necessary */    
             if(pressure_sensor_display_update_flag){
                Nextion_Update_Sensor_Values();
@@ -44,7 +44,7 @@
                 pressure_sensor_waveform_update_flag = 0;
             }  
                  
-         }      
+         //}      
     }
   
     return 0;
--- a/nextion_interface.cpp	Thu May 07 03:52:31 2020 +0000
+++ b/nextion_interface.cpp	Fri May 15 20:29:30 2020 +0000
@@ -31,6 +31,8 @@
                                             };  
 
 float i_e_ratio_display_table[I_E_RATIO_INDEX_LIMIT][2]={
+                                        {1.0,1.0},
+                                        {1.0,1.5},
                                         {1.0,2.0},
                                         {1.0,2.5},
                                         {1.0,3.0}
@@ -294,7 +296,7 @@
 
 
 void Volume_Display_Update(void){
-    nextion_display.printf("t11.txt=\"%d\"", (int16_t)volume_ml);
+    nextion_display.printf("t11.txt=\"%d\"", (int16_t)(volume_ml * VOLUME_CORRECTION_FACTOR));
     nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
     
     /* Read pressure sensors if necessary */ 
--- a/pressure_sensors.cpp	Thu May 07 03:52:31 2020 +0000
+++ b/pressure_sensors.cpp	Fri May 15 20:29:30 2020 +0000
@@ -17,6 +17,7 @@
 
 char sensor_read_data_buffer[2];
 
+volatile uint8_t peak_volume_flag = 0;
 
 /* Function definition */
 
@@ -79,6 +80,7 @@
 void Calculate_Flow_From_Pressure(void){
     
     float diff_pressure_psi;
+    static float prev_flow_lpm = 0;
     
     diff_pressure_psi = pressure_02_psi - pressure_01_psi;    
     
@@ -92,6 +94,12 @@
     flow_lpm = Flow_FIR_LPF(flow_lpm, 0);
     flow_lpm = Flow_Cheby2_HPF(flow_lpm, 0);
     
+    if((prev_flow_lpm > 0) && (flow_lpm <= 0)){
+        peak_volume_flag = 1;
+    }
+    
+    prev_flow_lpm = flow_lpm;
+    
 }
 
 
--- a/pressure_sensors.h	Thu May 07 03:52:31 2020 +0000
+++ b/pressure_sensors.h	Fri May 15 20:29:30 2020 +0000
@@ -15,6 +15,8 @@
 
 extern char sensor_read_data_buffer[2]; 
 
+extern volatile uint8_t peak_volume_flag;
+
 /* Function declaration */
 void Pressure_Sensors_Initialize(void);
 void Pressure_Sensors_Read(void);
--- a/project_defines.h	Thu May 07 03:52:31 2020 +0000
+++ b/project_defines.h	Fri May 15 20:29:30 2020 +0000
@@ -6,9 +6,13 @@
 /*************************** PIN DEFINITION ***********************************/
 /******************************************************************************/
 
-// Switches and buttons
+// Switches, buttons and digital sensors
 #define ENTER_SW_PIN                            PA_15
 #define LIMIT_SW_01_PIN                         PB_7
+#define INSPIRATION_VALVE_HALL_01_PIN           PA_10     
+#define INSPIRATION_VALVE_HALL_02_PIN           PB_3
+#define EXPIRATION_VALVE_HALL_01_PIN            PA_9
+#define EXPIRATION_VALVE_HALL_02_PIN            PC_7
 
 // Rotary encoder
 #define ENCODER_A_SIGNAL                        PA_13
@@ -32,8 +36,13 @@
 #define STEPPER_PULSE_FEEDBACK_PIN              PA_12
 
 // Electric valves
-#define INSPIRATION_VALVE_PIN                   PF_0               
-#define EXPIRATION_VALVE_PIN                    PF_1
+#define INSPIRATION_VALVE_IA_PIN                PB_5
+#define INSPIRATION_VALVE_IB_PIN                PB_4
+#define INSPIRATION_VALVE_EN_PIN                PA_8 
+#define EXPIRATION_VALVE_IA_PIN                 PB_6
+#define EXPIRATION_VALVE_IB_PIN                 PA_7 
+#define EXPIRATION_VALVE_EN_PIN                 PA_6 
+
 
 /******************************************************************************/
 /************************* CONSTANTS AND MACROS *******************************/
@@ -43,6 +52,10 @@
 
 #define ENTER_SW                                0
 #define LIMIT_SW_01                             1
+#define INSPIRATION_VALVE_HALL_01               2    
+#define INSPIRATION_VALVE_HALL_02               3
+#define EXPIRATION_VALVE_HALL_01                4
+#define EXPIRATION_VALVE_HALL_02                5
 
 // ----------------- Defines for the encoder user interface --------------------
 
@@ -51,12 +64,12 @@
 #define PARAMETER_SELECTION_INDEX_LIMIT         3
 #define VOLUME_SETPOINT_INDEX_LIMIT             11
 #define RESP_FREQUENCY_INDEX_LIMIT              21
-#define I_E_RATIO_INDEX_LIMIT                   3
+#define I_E_RATIO_INDEX_LIMIT                   5
 
 #define PARAMETER_SELECTION_INDEX_DEFAULT       0
 #define VOLUME_SETPOINT_INDEX_DEFAULT           5
 #define RESP_FREQUENCY_INDEX_DEFAULT            10
-#define I_E_RATIO_INDEX_DEFAULT                 0
+#define I_E_RATIO_INDEX_DEFAULT                 2
 
 // ------------- Defines for the Nextion display user interface ----------------
 
@@ -136,6 +149,7 @@
 #define PSI_TO_CMH2O_CONSTANT                           70.306957829636f
 #define SPIROMETER_SENSOR_CONSTANT_OXYGEN               36.1f
 #define SPIROMETER_SENSOR_CONSTANT_AIR                  (SPIROMETER_SENSOR_CONSTANT_OXYGEN * 1.08006)
+#define VOLUME_CORRECTION_FACTOR                        34.4409727f
 
 // ----------------------- Defines for digital filters -------------------------
 
@@ -172,6 +186,32 @@
 #define STEPPER_CALIBRATION_FREQUENCY_HZ                200
 #define STEPPER_MAX_FREQUENCY_HZ                        3000
 
+
+// -------------------- Defines for the electric valves ------------------------
+#define INSPIRATION_VALVE_IA                            0
+#define INSPIRATION_VALVE_IB                            1
+#define INSPIRATION_VALVE_EN                            2 
+#define EXPIRATION_VALVE_IA                             3
+#define EXPIRATION_VALVE_IB                             4 
+#define EXPIRATION_VALVE_EN                             5
+
+#define INSPIRATION_VALVE_IS_OPEN                   (!(buttons & (1 << INSPIRATION_VALVE_HALL_02)))
+#define INSPIRATION_VALVE_IS_CLOSED                 (!(buttons & (1 << INSPIRATION_VALVE_HALL_01)))
+#define EXPIRATION_VALVE_IS_OPEN                    (!(buttons & (1 << EXPIRATION_VALVE_HALL_01)))
+#define EXPIRATION_VALVE_IS_CLOSED                  (!(buttons & (1 << EXPIRATION_VALVE_HALL_02))) 
+
+#define INSPIRATION_VALVE_ENABLE()                  valve_control = valve_control | (1 << INSPIRATION_VALVE_EN)
+#define INSPIRATION_VALVE_DISABLE()                 valve_control = valve_control & ~(1 << INSPIRATION_VALVE_EN)
+#define INSPIRATION_VALVE_STOP()                    valve_control = valve_control & ~((1 << INSPIRATION_VALVE_IA) | (1 << INSPIRATION_VALVE_IB))        
+#define INSPIRATION_VALVE_OPEN()                    valve_control = valve_control | (1 << INSPIRATION_VALVE_IA)
+#define INSPIRATION_VALVE_CLOSE()                   valve_control = valve_control | (1 << INSPIRATION_VALVE_IB) 
+#define EXPIRATION_VALVE_ENABLE()                   valve_control = valve_control | (1 << EXPIRATION_VALVE_EN) 
+#define EXPIRATION_VALVE_DISABLE()                  valve_control = valve_control & ~(1 << EXPIRATION_VALVE_EN)            
+#define EXPIRATION_VALVE_STOP()                     valve_control = valve_control & ~((1 << EXPIRATION_VALVE_IA) | (1 << EXPIRATION_VALVE_IB))        
+#define EXPIRATION_VALVE_OPEN()                     valve_control = valve_control | (1 << EXPIRATION_VALVE_IB)
+#define EXPIRATION_VALVE_CLOSE()                    valve_control = valve_control | (1 << EXPIRATION_VALVE_IA)  
+
+
 // ---------------------- Time period for every action -------------------------
 
 #define DEBOUNCE_PERIOD_MS                              10
--- a/stepper_motor_driver.cpp	Thu May 07 03:52:31 2020 +0000
+++ b/stepper_motor_driver.cpp	Fri May 15 20:29:30 2020 +0000
@@ -8,6 +8,7 @@
 #include "FastPWM.h"
 #include "ventilator.h"
 #include "pressure_sensors.h"
+#include "electric_valves.h"
 
 /* Object definition */
 InterruptIn stepper_pulse_feedback(STEPPER_PULSE_FEEDBACK_PIN);
@@ -42,7 +43,7 @@
                                                        110,  //  2400, //650 mL//1080
                                                        115,   //  2500, //700 mL//1125
                                                        120 //  2600  //750 mL//1170
-};  
+                                                    };  
 
 
 // Variables used in every state of the stepper motor driver */
@@ -107,24 +108,45 @@
     
     switch(stepper_driver_state){
           
-        case Stepper_Inspiration:                
+        case Stepper_Inspiration:    
+                    
+             if(INSPIRATION_VALVE_IS_OPEN){
+                INSPIRATION_VALVE_STOP();
+            }
             
+             if(EXPIRATION_VALVE_IS_CLOSED){
+                EXPIRATION_VALVE_STOP();
+            }   
+                       
             break;
         // -----------------------------------------------------------------------     
    
         case Stepper_Inspiration_Finish:
             
-            stepper_pulse_counter = 0;
-            stepper_dir = TO_HOME;
-            stepper_pulse.period(expiration_stepper_pulse_period);
-            stepper_pulse.write(0.5);        
-            stepper_driver_state = Stepper_Expiration;
-            //pressure_sensor_display_update_flag = 1;
-                      
+                stepper_pulse_counter = 0;
+                stepper_dir = TO_HOME;
+                stepper_pulse.period(expiration_stepper_pulse_period);
+                stepper_pulse.write(0.5);        
+                stepper_driver_state = Stepper_Expiration;
+                INSPIRATION_VALVE_CLOSE();
+                EXPIRATION_VALVE_OPEN();       
             break;
         // -----------------------------------------------------------------------         
-        case Stepper_Expiration:         
-                          
+        case Stepper_Expiration:  
+        
+            if(peak_volume_flag == 1){// FOr test    
+                pressure_sensor_display_update_flag = 1;
+                peak_volume_flag = 0;
+            } // For test
+            
+            if(INSPIRATION_VALVE_IS_CLOSED){
+                INSPIRATION_VALVE_STOP();
+            }
+            
+             if(EXPIRATION_VALVE_IS_OPEN){
+                EXPIRATION_VALVE_STOP();
+            }           
+                        
              break;
         // -----------------------------------------------------------------------         
         case Stepper_Expiration_Finish:
@@ -140,7 +162,11 @@
             stepper_pulse.write(0.5);
             stepper_driver_state = Stepper_Inspiration;         
 
-            //pressure_sensor_display_update_flag = 1;
+            pressure_sensor_display_update_flag = 1;
+            volume_ml = 0; // Para pruebas
+
+            EXPIRATION_VALVE_CLOSE();
+            INSPIRATION_VALVE_OPEN();  
 
             break;
         // -------------------------------------------------------------------- 
--- a/ventilator.cpp	Thu May 07 03:52:31 2020 +0000
+++ b/ventilator.cpp	Fri May 15 20:29:30 2020 +0000
@@ -10,6 +10,7 @@
 #include "pressure_sensors.h"
 #include "stepper_motor_driver.h"
 #include "ventilator.h"
+#include "electric_valves.h"
 
 /* Object definition */
 Ticker ticker_int_1ms; // Ticker interrupt
@@ -34,6 +35,7 @@
 
 void System_Initialize(void){
     Buttons_Initialize();
+    Valves_Initialize();
     Nextion_Interface_Initialize();
     Pressure_Sensors_Initialize();
     ticker_int_1ms.attach(&Ticker_ISR, 0.001);
@@ -253,7 +255,7 @@
     // Indicates if it is time to display the volume, flow and pressure values */   
     if(sensor_display_conta_1ms  == SENSOR_DISPLAY_PERIOD_MS){
         sensor_display_conta_1ms  = 0;
-        pressure_sensor_display_update_flag = 1;
+        //pressure_sensor_display_update_flag = 1;
     }               
         
 }