para el ventilador

Dependencies:   QEI FastPWM

Committer:
miguelangel_2511
Date:
Thu Apr 23 17:05:36 2020 +0000
Revision:
8:208d965a3bd2
Parent:
7:f4e248182d31
Child:
9:95fdcdc0977e
Se agrego la medicion y visualizacion grafica del volumen, el flujo y la presion. Sin embargo, aun no se han aplicado filtros a las seniales medidas.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miguelangel_2511 7:f4e248182d31 1
miguelangel_2511 7:f4e248182d31 2 #include "mbed.h"
miguelangel_2511 7:f4e248182d31 3 #include "stdint.h"
miguelangel_2511 8:208d965a3bd2 4 #include "math.h"
miguelangel_2511 7:f4e248182d31 5 #include "project_defines.h"
miguelangel_2511 7:f4e248182d31 6 #include "pressure_sensors.h"
miguelangel_2511 7:f4e248182d31 7
miguelangel_2511 7:f4e248182d31 8
miguelangel_2511 7:f4e248182d31 9 /* Object definition */
miguelangel_2511 7:f4e248182d31 10 I2C pressure_sensor_01(PRESSURE_SENSOR_01_SDA_PIN, PRESSURE_SENSOR_01_SCL_PIN);
miguelangel_2511 7:f4e248182d31 11 I2C pressure_sensor_02(PRESSURE_SENSOR_02_SDA_PIN, PRESSURE_SENSOR_02_SCL_PIN);
miguelangel_2511 7:f4e248182d31 12
miguelangel_2511 7:f4e248182d31 13 /* Global variable definition */
miguelangel_2511 8:208d965a3bd2 14 int16_t pressure_01_bin, pressure_02_bin;
miguelangel_2511 8:208d965a3bd2 15 float pressure_01_psi, pressure_02_psi;
miguelangel_2511 8:208d965a3bd2 16 float flow_lpm, volume_ml;
miguelangel_2511 8:208d965a3bd2 17
miguelangel_2511 8:208d965a3bd2 18 //float diff_pressure_psi;
miguelangel_2511 7:f4e248182d31 19
miguelangel_2511 7:f4e248182d31 20 char sensor_read_data_buffer[2];
miguelangel_2511 7:f4e248182d31 21
miguelangel_2511 7:f4e248182d31 22 /* Function definition */
miguelangel_2511 7:f4e248182d31 23
miguelangel_2511 7:f4e248182d31 24 void Pressure_Sensors_Initialize(void){
miguelangel_2511 7:f4e248182d31 25 pressure_sensor_01.frequency(PRESSURE_SENSOR_I2C_CLK_HZ );
miguelangel_2511 7:f4e248182d31 26 pressure_sensor_02.frequency(PRESSURE_SENSOR_I2C_CLK_HZ );
miguelangel_2511 7:f4e248182d31 27 }
miguelangel_2511 7:f4e248182d31 28
miguelangel_2511 7:f4e248182d31 29
miguelangel_2511 7:f4e248182d31 30 void Pressure_Sensors_Read(void){
miguelangel_2511 7:f4e248182d31 31
miguelangel_2511 7:f4e248182d31 32 /* Read binary values */
miguelangel_2511 7:f4e248182d31 33 pressure_sensor_01.read(PRESSURE_SENSOR_01_SRA, sensor_read_data_buffer, 2);
miguelangel_2511 7:f4e248182d31 34 pressure_01_bin = ((sensor_read_data_buffer[0] << 8) | sensor_read_data_buffer[1]) & 0x3FFF;
miguelangel_2511 7:f4e248182d31 35 pressure_sensor_02.read(PRESSURE_SENSOR_02_SRA, sensor_read_data_buffer, 2);
miguelangel_2511 7:f4e248182d31 36 pressure_02_bin = ((sensor_read_data_buffer[0] << 8) | sensor_read_data_buffer[1]) & 0x3FFF;
miguelangel_2511 7:f4e248182d31 37
miguelangel_2511 7:f4e248182d31 38 /* Calculate pressure values in PSI */
miguelangel_2511 7:f4e248182d31 39 pressure_01_psi = (5.0 * pressure_01_bin) / 16383;
miguelangel_2511 7:f4e248182d31 40 pressure_02_psi = (5.0 * pressure_02_bin) / 16383;
miguelangel_2511 8:208d965a3bd2 41
miguelangel_2511 7:f4e248182d31 42
miguelangel_2511 7:f4e248182d31 43 }
miguelangel_2511 7:f4e248182d31 44
miguelangel_2511 8:208d965a3bd2 45 void Calculate_Flow_From_Pressure(void){
miguelangel_2511 8:208d965a3bd2 46
miguelangel_2511 8:208d965a3bd2 47 int16_t diff_pressure_bin;
miguelangel_2511 8:208d965a3bd2 48 float diff_pressure_psi;
miguelangel_2511 8:208d965a3bd2 49
miguelangel_2511 8:208d965a3bd2 50 diff_pressure_bin = pressure_02_bin - pressure_01_bin;
miguelangel_2511 8:208d965a3bd2 51 diff_pressure_psi = (5.0 * diff_pressure_bin) / 16383;
miguelangel_2511 8:208d965a3bd2 52
miguelangel_2511 8:208d965a3bd2 53 if(diff_pressure_psi < 0){
miguelangel_2511 8:208d965a3bd2 54 flow_lpm = -SPIROMETER_SENSOR_CONSTANT * sqrt(-diff_pressure_psi);
miguelangel_2511 8:208d965a3bd2 55 }else{
miguelangel_2511 8:208d965a3bd2 56 flow_lpm = SPIROMETER_SENSOR_CONSTANT * sqrt(diff_pressure_psi);
miguelangel_2511 8:208d965a3bd2 57 }
miguelangel_2511 8:208d965a3bd2 58 }
miguelangel_2511 7:f4e248182d31 59
miguelangel_2511 8:208d965a3bd2 60 void Calculate_Volume_From_Flow(void){
miguelangel_2511 8:208d965a3bd2 61
miguelangel_2511 8:208d965a3bd2 62 static float previous_flow_lpm = 0.0;
miguelangel_2511 8:208d965a3bd2 63 float delta_volume_ml;
miguelangel_2511 8:208d965a3bd2 64
miguelangel_2511 8:208d965a3bd2 65 delta_volume_ml = (PRESSURE_SENSOR_READ_PERIOD_MS * (flow_lpm + previous_flow_lpm)) / 60.0;
miguelangel_2511 8:208d965a3bd2 66
miguelangel_2511 8:208d965a3bd2 67 volume_ml = volume_ml + delta_volume_ml;
miguelangel_2511 8:208d965a3bd2 68
miguelangel_2511 8:208d965a3bd2 69 previous_flow_lpm = flow_lpm;
miguelangel_2511 8:208d965a3bd2 70
miguelangel_2511 8:208d965a3bd2 71 }
miguelangel_2511 8:208d965a3bd2 72
miguelangel_2511 8:208d965a3bd2 73 void Pressure_01_LPF(void){
miguelangel_2511 8:208d965a3bd2 74
miguelangel_2511 8:208d965a3bd2 75 }
miguelangel_2511 8:208d965a3bd2 76
miguelangel_2511 8:208d965a3bd2 77
miguelangel_2511 8:208d965a3bd2 78 void Pressure_02_LPF(void){
miguelangel_2511 8:208d965a3bd2 79
miguelangel_2511 8:208d965a3bd2 80 }