diff options
| author | Ronen Sberlo <ronen.s@twine-s.com> | 2020-11-24 15:05:45 +0200 |
|---|---|---|
| committer | Ronen Sberlo <ronen.s@twine-s.com> | 2020-11-24 15:05:45 +0200 |
| commit | a4a8f6c316e4d6b2f08f7b65cecfe50930ecf019 (patch) | |
| tree | 85a4b6f5a7ff0045f9a688596a140441f7981a37 /Software/Embedded_SW/Embedded/Modules/Heaters | |
| parent | 3c167a3414556b0d0d1d463f5345077afc127cfb (diff) | |
| download | Tango-a4a8f6c316e4d6b2f08f7b65cecfe50930ecf019.tar.gz Tango-a4a8f6c316e4d6b2f08f7b65cecfe50930ecf019.zip | |
Move V0 calculation to stage when machine is warm
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Heaters')
3 files changed, 75 insertions, 2 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c index 946958a08..d98af2097 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c @@ -28,6 +28,7 @@ #include "../control/MillisecTask.h" #include "../Ids/Ids_ex.h" #include "../General/process.h" +#include "../Waste/Waste_ex.h" #include <ti/sysbios/knl/Task.h> #include <driverlib/timer.h> @@ -42,13 +43,14 @@ #include "Drivers/I2C_Communication/I2C.h" #include <Drivers/I2C_Communication/I2C_Task.h> #include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h> - +#include "drivers/Flash_ram/MCU_E2Prom.h" #include "StateMachines/Initialization/InitSequence.h" /******************** Data Structures ********************************************/ #define MIN_ALLOWED_PWM 0 #define MAX_ALLOWED_PWM 255 #define ARC_ALARM_LIMIT 3 +#define V0_INIT_STOP_FAN_TIME 5 #define PRESSURE_SENSOR_CP 0.269 #define PRESSURE_SENSOR_B 0.45 @@ -57,10 +59,12 @@ extern uint16_t Head_Fan_Tach[2]; extern uint8_t Head_Fan_PWM_Command[2]; -uint32_t PressureSensorV0[2] = {0, 0}; +uint32_t PressureSensorV0[2] = {1100, 1100}; uint8_t HeadBlowersCloseLoopTime[2] = {2, 2}; uint8_t HeadBlowersEnable = 1; uint8_t BlowerIdToSensorId[2] = {HEAD_PT100_ZONE_7_0X86_0, HEAD_PT100_ZONE_5_0X84_0}; //HEAD_FAN_RIGHT, HEAD_FAN_LEFT +uint32_t HeadBlowersInitControlId = 0xFF; +uint32_t HeadBlowersV0InitCount = 0; typedef struct { @@ -455,3 +459,70 @@ uint32_t HeadBlowerCommandRequestMessage(int blowerId, float flow) headBlowersFlow[blowerId] = flow; return OK; } + +uint32_t HeadBlowerAirflowCalibration(void) +{ + uint32_t V0[2]; + + V0[0] = PressureSensorInit(0); + V0[1] = PressureSensorInit(1); + ReportWithPackageFilter(HeatersFilter,"read pressure sensor v0[0],v0[1]", __FILE__,__LINE__, (int)V0[0], RpMessage, (int)V0[1], 0); + if ((V0[0] > 1000) && (V0[0] < 1200)) { + MCU_E2PromProgram(EEPROM_PRESSURE_SENSOR_V0_0, V0[0]); + ReportWithPackageFilter(InitFilter,"store pressure sensor v0[0]", __FILE__,__LINE__, (int)V0[0], RpMessage, 0, 0); + } else { + MCU_E2PromRead(EEPROM_PRESSURE_SENSOR_V0_0, &V0[0]); + ReportWithPackageFilter(HeatersFilter,"load from EEPROM", __FILE__,__LINE__, (int)V0[0], RpMessage, 0, 0); + } + if ((V0[1] > 1000) && (V0[1] < 1200)) { + MCU_E2PromProgram(EEPROM_PRESSURE_SENSOR_V0_1, V0[1]); + ReportWithPackageFilter(HeatersFilter,"store pressure sensor v0[1]", __FILE__,__LINE__, (int)V0[1], RpMessage, 0, 0); + } else { + MCU_E2PromRead(EEPROM_PRESSURE_SENSOR_V0_1, &V0[1]); + ReportWithPackageFilter(HeatersFilter,"load from EEPROM", __FILE__,__LINE__, (int)V0[1], RpMessage, 0, 0); + } + + if ((V0[0] > 1000) && (V0[0] < 1200)) { + PressureSensorV0[0] = V0[0]; + } + if ((V0[1] > 1000) && (V0[1] < 1200)) { + PressureSensorV0[1] = V0[1]; + } + return OK; +} + +uint32_t HeadBlowersInitCallbak(uint32_t IfIndex, uint32_t ReadValue) +{ + + if (HeadBlowersV0InitCount++ >= V0_INIT_STOP_FAN_TIME) + { + SafeRemoveControlCallback(HeadBlowersInitControlId,HeadBlowersInitCallbak); + HeadBlowersInitControlId = 0xFF; + HeadBlowerAirflowCalibration(); + HeadBlowersOff(0); + Report("Head Blowers V0 calculated", __FILE__, __LINE__, PressureSensorV0[0], RpMessage, PressureSensorV0[1], 0); + Waste_Check_Flows(); + } + Report("Head Blowers calculate V0", __FILE__, __LINE__, 0, RpMessage, 0, 0); + return OK; +} + +uint32_t HeadBlowersV0Init(void) +{ + if (Head_Type != HEAD_TYPE_ARC) + return OK; + + if (HeadBlowersInitControlId != 0xFF) + RemoveControlCallback(HeadBlowersInitControlId,HeadBlowersInitCallbak); + + //set Head Blowers to minimum rpm + HeadBlowersOff(1); + Trigger_Head_Fan_Control(HEAD_FAN_RIGHT, 0); + Trigger_Head_Fan_Control(HEAD_FAN_LEFT, 0); + + //init Head Blowers V0 + HeadBlowersV0InitCount = 0; + HeadBlowersInitControlId = AddControlCallback("Head Blowers V0 init", HeadBlowersInitCallbak, eOneSecond, TemplateDataReadCBFunction, 0, 0, 0); + Report("Head Blowers V0 init", __FILE__, __LINE__, Head_Type, RpMessage, 0, 0); + return OK; +} diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index ee60a75cc..b5242bae2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -54,4 +54,5 @@ void HeadBlowersControlLoop (); uint32_t HeadBlowerCommandRequestMessage(int blowerId, float flow); void HeadBlowersOff(int off); uint32_t HeadBlowersOffGet(); +uint32_t HeadBlowersV0Init(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index def9c5530..6345ff201 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -1016,6 +1016,7 @@ void HeaterPrepareReady(void) } PrepareReady(Module_Heaters,ModuleDone); IDSPrepareStart(); + HeadBlowersV0Init(); } /* * HeaterControlCBFunction |
