diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-04-07 15:53:25 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-04-07 15:53:25 +0300 |
| commit | 088deb6845a4f20407a01aa2fe120c27e95d60ff (patch) | |
| tree | be5ee92ef478a3c388bf13c12b001a780f08943c /Software/Embedded_SW | |
| parent | 91fde2b410712c7866b9d3d139d97ee8db008223 (diff) | |
| download | Tango-088deb6845a4f20407a01aa2fe120c27e95d60ff.tar.gz Tango-088deb6845a4f20407a01aa2fe120c27e95d60ff.zip | |
update waste volume measurment logic
Diffstat (limited to 'Software/Embedded_SW')
7 files changed, 161 insertions, 39 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c index f813e9b91..fd2ada25c 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c @@ -20,6 +20,9 @@ #include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h> #include <Drivers/I2C_Communication/I2C_Task.h> #include "drivers/Flash_ram/MCU_E2Prom.h" +#include <Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h> +#include "modules/control/control.h" + uint16_t Orf_zero_value[DRIER_FLOW_METER+1] = {1112,0,1040}; #warning get Orf_zero_value for all orf @@ -378,39 +381,98 @@ double GetWHSAirFlow(uint8_t OR_Id) return Q_value ; } -#define coefficient 9.72 +#warning need to update low and high limits and to read the eeprom on the initialization + +#define DefaultCoefficient 9.72//TBD +#define Coefficient_LowLimit 0//TBD +#define Coefficient_HighLimit 255//TBD + +#define defaultVo_ml 100//TBD +#define Vo_LowLimit_ml 1//TBD +#define Vo_HighLimit_ml 5000//TBD + double GetWHSWasteTankLevelMiliLiter() { uint16_t Vm = 0; - uint16_t V0 = 0; + uint16_t LocalV0 = 0; double waste_volume_ml = 0.0; + double LocalCoefficient; get_vlev1(&Vm); - MCU_E2PromRead(EEPROM_WASTE_TANK_ZERO_VALUE,&V0); - waste_volume_ml = (coefficient * (Vm -V0)); + + //MCU_E2PromRead(EEPROM_WASTE_TANK_ZERO_VALUE,&V0);//read once in the initialization process + + if(0)//-- TBD -- ((WHS_Eeprom.bytes.flow_calc_coefficient_C <= Coefficient_LowLimit) || (WHS_Eeprom.bytes.flow_calc_coefficient_C >=Coefficient_HighLimit)) + { + LocalCoefficient = DefaultCoefficient; + ReportWithPackageFilter(WasteFilter,"------------ using DefaultCoefficient-----------------", __FILE__,__LINE__, WHS_Eeprom.bytes.flow_calc_coefficient_C, RpMessage, 0, 0); + } + else + { + LocalCoefficient = WHS_Eeprom.bytes.flow_calc_coefficient_C ; + } + + if(0)//-- TBD -- ((WHS_Eeprom.bytes.Orifice_Waste_Level_V0 <= Vo_LowLimit_ml) || (WHS_Eeprom.bytes.Orifice_Waste_Level_V0 >=Vo_HighLimit_ml)) + { + LocalV0 = defaultVo_ml; + ReportWithPackageFilter(WasteFilter,"------------ using defaultVo_ml-----------------", __FILE__,__LINE__, WHS_Eeprom.bytes.Orifice_Waste_Level_V0, RpMessage, 0, 0); + } + else + { + LocalV0 = WHS_Eeprom.bytes.Orifice_Waste_Level_V0 ; + } + + waste_volume_ml = (LocalCoefficient * (Vm -LocalV0)); ReportWithPackageFilter(WasteFilter,"------------ waste_volume_ml -----------------", __FILE__, __LINE__, 0, RpMessage, (waste_volume_ml * 1000), 0); return waste_volume_ml; } #define OPEN_WASTE_VALVE 0 #define CLOSE_WASTE_VALVE 1 -bool waste_seq() + +uint32_t WasteControlId = 0xFF; + +double waste_level_ml = 0.0; +double Cartridge_Max_level_ml = 1500.0; + +bool waste_seq_step2(uint32_t IfIndex, uint32_t BusyFlag) { bool status = OK; - double waste_level = 0.0; - ReportWithPackageFilter(WasteFilter,"------------ open waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); - Trigger_SetWHS_VOC_Valve(OPEN_WASTE_VALVE); - ReportWithPackageFilter(WasteFilter,"------------ wait 1 second -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + static double Initial_waste_level_ml = 0.0; + + if (SafeRemoveControlCallback(WasteControlId, waste_seq_step2 )==OK) + WasteControlId = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)WasteControlId,RpWarning,(int)waste_seq_step2,0); ReportWithPackageFilter(WasteFilter,"------------ close waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); Trigger_SetWHS_VOC_Valve(CLOSE_WASTE_VALVE); - waste_level = GetWHSWasteTankLevelMiliLiter(); - ReportWithPackageFilter(WasteFilter,"------------ get waste level in ml -----------------", __FILE__, __LINE__, 0, RpMessage, (waste_level*1000), 0); - + waste_level_ml = GetWHSWasteTankLevelMiliLiter(); + ReportWithPackageFilter(WasteFilter,"------------ get waste level in ml -----------------", __FILE__, __LINE__, 0, RpMessage, (waste_level_ml*1000), 0); + if(waste_level_ml < (Initial_waste_level_ml - Cartridge_Max_level_ml)) + { + //waste empting + } + else + { + Initial_waste_level_ml = waste_level_ml; + } return status; } +bool waste_seq_step1() +{ + bool status = OK; + + ReportWithPackageFilter(WasteFilter,"------------ open waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + Trigger_SetWHS_VOC_Valve(OPEN_WASTE_VALVE); + + ReportWithPackageFilter(WasteFilter,"------------ wait 1 second -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0); + WasteControlId = AddControlCallback(NULL, waste_seq_step2, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + + return status; +} diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h index 223135e37..2365e0baf 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h @@ -61,7 +61,8 @@ bool get_cur_vlv1(uint16_t *value); - +bool waste_seq_step1(); +bool waste_seq_step2(); double GetWHSAirFlow(uint8_t OR_Id); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c index dfd49a71b..0832280c2 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c @@ -15,7 +15,7 @@ //EEPROM M24M01-DFMN6TP //uint32_t I2C_WHS_EEPROM_SLAVE_ADD = 0xA0; - +WHS_EEPROM WHS_Eeprom; uint8_t WHS_Type = WHS_TYPE_UNKNOWN; #define MAX_ALLOWS_PAGE_WRITE 256 diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h index c64f8705c..05a8ed95a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h @@ -8,6 +8,25 @@ #ifndef DRIVERS_I2C_COMMUNICATION_WHS_CARD_EEPROM_WHS_EEPROM_H_ #define DRIVERS_I2C_COMMUNICATION_WHS_CARD_EEPROM_WHS_EEPROM_H_ +typedef struct +{ + + uint8_t PCB_SN[20]; + uint8_t Module_SN[20]; + double Orifice_Pressure_V0[3]; // (measured orifice sensor voltage without flow) value for each orifice sensor + double Orifice_Waste_Level_V0; // (measured orifice sensor voltage without flow) value for each orifice sensor + double flow_calc_coefficient_C; // C (flow calculation coefficient) value (=0.239) + +}WHS_EEPROM_BYTES; + +typedef union +{ + WHS_EEPROM_BYTES bytes; + uint8_t Buf[sizeof(WHS_EEPROM_BYTES)]; +}WHS_EEPROM; + +extern WHS_EEPROM WHS_Eeprom; + /* typedef struct { diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c index bdcb52a9a..2f05a26a9 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.c @@ -221,6 +221,8 @@ bool WHS_IO_Init_HW_0() //*** set port value ***// WHS_Write_IO_AllReg(I2CExp2_ADDRESS); + + return OK; } uint8_t WHS_Read_Hardware_Version() diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index a5421e60a..84b31c322 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -61,6 +61,8 @@ #include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h> #include "Modules/Heaters/Heaters_ex.h" #include <Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h> +#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h> + Task_Handle Millisecond_Task_Handle; /******************** Definitions ********************************************/ @@ -732,6 +734,20 @@ uint32_t MillisecLowLoop(uint32_t tick) WHS_Blower_Avarege(HEAD_FLOW_METER); WHS_Blower_Avarege(DRIER_FLOW_METER); WHS_Start_Blower_Control_Closed_Loop (); + + static uint8_t Whs_emptying_cycle = 0; + + // #warning TBD need to define the timing + if(Whs_emptying_cycle >= 2) + { + waste_seq_step1();// include 1Sec delay + Whs_emptying_cycle = 0; + } + else + { + Whs_emptying_cycle++; + } + } } if (OneMinute_Tick) diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c index 99b96ddf3..485b28ccc 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c @@ -17,10 +17,34 @@ #include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h> #include <Drivers/I2C_Communication/WHS_Card/EEPROM/D_EEPROM.h> #include <Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.h> +#include <Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h> bool test_9555(void); bool WHS_I2C_EEprom_Write_Ch_shai_taest(void); +uint8_t WHS_Write_Buf[9]; +uint8_t WHS_Read_Buf[9]; +#define PAGE 256 + +bool WHS_I2C_EEprom_Read_Buf() +{ + bool status= OK; + + uint8_t address_high_byte = 0x00; + uint8_t address_low_byte = 0x00; + + status |= Select_Main_WHS_Mux_Channel(); + + //Set to read + WHS_Write_Buf[0] = address_high_byte; + WHS_Write_Buf[1] = address_low_byte; + status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 2); + + status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Eeprom.Buf, sizeof(WHS_EEPROM_BYTES)); + + return status; +} + bool newWHS_init(void) { bool status = OK; @@ -39,6 +63,7 @@ bool newWHS_init(void) Trigger_WHS_MAX11614_Init(); Trigger_WHS_Rheostat_init(); + status |= WHS_I2C_EEprom_Read_Buf(); //status |= WHS_IO_Init(); //status |= init_WHS_fan(); // @@ -62,7 +87,6 @@ bool newWHS_init(void) //Trigger_SetWHSBlowerVoltage (0x0C00); - return status; } @@ -76,9 +100,7 @@ bool test_9555(void) return status; } -uint8_t WHS_Write_Buf[9]; -uint8_t WHS_Read_Buf[9]; -#define PAGE 256 + bool WHS_I2C_EEprom_Write_Ch_shai_taest() { bool status= OK; @@ -104,24 +126,24 @@ bool WHS_I2C_EEprom_Write_Ch_shai_taest() address= i*256; } -// status |= Select_Main_WHS_Mux_Channel(); -// -// WHS_Write_Buf[0] = address_high_byte; -// WHS_Write_Buf[1] = address_low_byte; -// WHS_Write_Buf[2] = 0xAA; -// WHS_Write_Buf[4] = 0xAA; -// WHS_Write_Buf[6] = 0xAA; -// WHS_Write_Buf[8] = 0xAA; -// WHS_Write_Buf[3] = 0x55; -// WHS_Write_Buf[5] = 0x55; -// WHS_Write_Buf[7] = 0x55; -// -// -// -// -// status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 9); -// SysCtlDelay(5000000);//Must delay for at least 5 milli. !!! (See data sheet ) -// status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 2); -// status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Read_Buf, 7); - return status; -} + // status |= Select_Main_WHS_Mux_Channel(); + // + // WHS_Write_Buf[0] = address_high_byte; + // WHS_Write_Buf[1] = address_low_byte; + // WHS_Write_Buf[2] = 0xAA; + // WHS_Write_Buf[4] = 0xAA; + // WHS_Write_Buf[6] = 0xAA; + // WHS_Write_Buf[8] = 0xAA; + // WHS_Write_Buf[3] = 0x55; + // WHS_Write_Buf[5] = 0x55; + // WHS_Write_Buf[7] = 0x55; + // + // + // + // + // status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 9); + // SysCtlDelay(5000000);//Must delay for at least 5 milli. !!! (See data sheet ) + // status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 2); + // status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Read_Buf, 7); + return status; + } |
