Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
--- 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;
}
}