pachas
Dependencies: mbed QEI FastPWM
Revision 12:3bc2465b034a, committed 2020-05-15
- Comitter:
- miguelangel_2511
- Date:
- Fri May 15 20:29:30 2020 +0000
- Parent:
- 11:5cb7ae8bd831
- Commit message:
- hola papu
Changed in this revision
diff -r 5cb7ae8bd831 -r 3bc2465b034a buttons.cpp --- 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)
diff -r 5cb7ae8bd831 -r 3bc2465b034a electric_valves.cpp --- /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
diff -r 5cb7ae8bd831 -r 3bc2465b034a electric_valves.h --- /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
diff -r 5cb7ae8bd831 -r 3bc2465b034a main.cpp --- 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;
diff -r 5cb7ae8bd831 -r 3bc2465b034a nextion_interface.cpp --- 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 */
diff -r 5cb7ae8bd831 -r 3bc2465b034a pressure_sensors.cpp --- 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; + }
diff -r 5cb7ae8bd831 -r 3bc2465b034a pressure_sensors.h --- 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);
diff -r 5cb7ae8bd831 -r 3bc2465b034a project_defines.h --- 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
diff -r 5cb7ae8bd831 -r 3bc2465b034a stepper_motor_driver.cpp --- 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; // --------------------------------------------------------------------
diff -r 5cb7ae8bd831 -r 3bc2465b034a ventilator.cpp --- 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; } }