diff options
| author | Ronen Sberlo <ronen.s@twine-s.com> | 2020-08-27 15:01:52 +0300 |
|---|---|---|
| committer | Ronen Sberlo <ronen.s@twine-s.com> | 2020-08-27 15:01:52 +0300 |
| commit | d06662b0f8ae1457a59b1b3391c448408ecff49d (patch) | |
| tree | bbe59b8c3664f94515d429fc181941400213d458 /Software | |
| parent | 4e8527251f665090d5a3d9c73672f527157ffac5 (diff) | |
| download | Tango-d06662b0f8ae1457a59b1b3391c448408ecff49d.tar.gz Tango-d06662b0f8ae1457a59b1b3391c448408ecff49d.zip | |
arc head blowers and pressure sensor
Diffstat (limited to 'Software')
7 files changed, 121 insertions, 14 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h index bbbc49c7d..ce4b168b7 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -42,6 +42,8 @@ typedef enum { EEPROM_PULLER_TENSION_POSITION, EEPROM_WINDER_TENSION_POSITION, EEPROM_INIT_FAILURE_COUNTER, + EEPROM_PRESSURE_SENSOR_V0_0, + EEPROM_PRESSURE_SENSOR_V0_1, MAX_EEPROM_STORAGE }EEPROM_STORAGE_USAGE_ENUM; #define MAX_SERIAL_NUM_LEN 5 //5*4 bytes diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index a76142b00..37d6b5ec1 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -23,6 +23,7 @@ #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h" #include "drivers/I2C_Communication/DAC/Blower.h" +#include <Drivers/I2C_Communication/I2C_Task.h> #include "drivers/valves/valve.h" #include "modules/ids/ids_ex.h" @@ -264,6 +265,7 @@ double MotorValue[MAX_THREAD_MOTORS_NUM][DIAGNOSTICS_LIMIT+1]; uint8_t SpeedCounterIndex= 0; double SpeedValue[DIAGNOSTICS_DANCER_LIMIT+1]; double headblowervoltage1 = 0.0, headblowervoltage2 = 0.0; +double headblower1airflow = 0.0, headblower2airflow = 0.0; void DiagnosticLoadMotor(int MotorId, int frequency) { @@ -496,21 +498,22 @@ void CopyTemperaturesToMonitor(void) HeaterCounterIndex[HEATER_TYPE__HeaterZone4]; DiagnosticsMonitor.n_headzone6temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone6]; + DiagnosticsMonitor.n_headblower1airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone5]; DiagnosticsMonitor.n_headblower2airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone7]; - DiagnosticsMonitor.headblower1airflow = HeaterTemperature[HEATER_TYPE__HeaterZone5]; - DiagnosticsMonitor.headblower2airflow = HeaterTemperature[HEATER_TYPE__HeaterZone7]; + headblower1airflow = PressureSensorGetPressure(HEAD_PT100_ZONE_5_0X84_0); + headblower2airflow = PressureSensorGetPressure(HEAD_PT100_ZONE_7_0X86_0); + DiagnosticsMonitor.headblower1airflow = &headblower1airflow; + DiagnosticsMonitor.headblower2airflow = &headblower2airflow; + + DiagnosticsMonitor.n_headblowervoltage1 = 1; + DiagnosticsMonitor.n_headblowervoltage2 = 1; + headblowervoltage1 = HeadBlowersGetRPM(HEAD_FAN_RIGHT); + headblowervoltage2 = HeadBlowersGetRPM(HEAD_FAN_LEFT); + DiagnosticsMonitor.headblowervoltage1 = &headblowervoltage1; + DiagnosticsMonitor.headblowervoltage2 = &headblowervoltage2; } - DiagnosticsMonitor.n_headblower1airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone5]; - DiagnosticsMonitor.n_headblower2airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone7]; - DiagnosticsMonitor.headblower1airflow = HeaterTemperature[HEATER_TYPE__HeaterZone5]; - DiagnosticsMonitor.headblower2airflow = HeaterTemperature[HEATER_TYPE__HeaterZone7]; - headblowervoltage1 =(double )Head_Fan_PWM_Command[HEAD_FAN_RIGHT]; - headblowervoltage2 =(double )Head_Fan_PWM_Command[HEAD_FAN_LEFT]; - DiagnosticsMonitor.headblowervoltage1 = &headblowervoltage1; - DiagnosticsMonitor.headblowervoltage2 = &headblowervoltage2; - DiagnosticsMonitor.n_headblowervoltage1 = 1; - DiagnosticsMonitor.n_headblowervoltage2 = 1; + DiagnosticsMonitor.dryerzone1temperature = HeaterTemperature[HEATER_TYPE__DryerAirHeater]; DiagnosticsMonitor.dryerzone2temperature = diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index ac2009bcd..517217b39 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -65,6 +65,7 @@ bool GeneralHwReady = false; bool PP_Machine = false; HardwareBlower BlowerCfg; +HardwareBlower HeadBlowerCfg[2]; char *SW_INFO_DIR = "0://SysInfo"; char HwConfigPath[50] = "0://SysInfo//GenHwCfg.cfg"; @@ -568,7 +569,18 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) { LargeFansCfg = request->blowers[Dispenser_i]->voltage; } - + if((request->blowers[Dispenser_i]->enabled)&&(request->blowers[Dispenser_i]->hardwareblowertype == HARDWARE_BLOWER_TYPE__HeadBlower1)) + { + HeadBlowerCfg[0].enabled = true; + HeadBlowerCfg[0].voltage = request->blowers[Dispenser_i]->voltage; + HeadBlowerCfg[0].heatingvoltage = request->blowers[Dispenser_i]->heatingvoltage; + } + if((request->blowers[Dispenser_i]->enabled)&&(request->blowers[Dispenser_i]->hardwareblowertype == HARDWARE_BLOWER_TYPE__HeadBlower2)) + { + HeadBlowerCfg[1].enabled = true; + HeadBlowerCfg[1].voltage = request->blowers[Dispenser_i]->voltage; + HeadBlowerCfg[1].heatingvoltage = request->blowers[Dispenser_i]->heatingvoltage; + } } } ControlStart(); diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h index 55490a140..e99931acc 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.h @@ -20,6 +20,7 @@ uint32_t LoadConfigurationParamsFromFile(bool); void HWConfigurationLoadFile(void); extern HardwareBlower BlowerCfg; +extern HardwareBlower HeadBlowerCfg[2]; extern bool DataUpdated; diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index 0220d1a6c..015c5ea83 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -41,3 +41,8 @@ uint32_t HeatersEnd(void); void HeatersControlStart(void); void HeatersControlStop(void); uint32_t Heaters_Init(void); +double PressureSensorGetPressure(uint8_t SensorId); +int HeadBlowersGetRPM(uint8_t fanId); +double PressureSensorInit(); +void HeadBlowersInit(); +void HeadBlowersCfg(); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index ce3ced6ef..8fe3de207 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -8,6 +8,7 @@ /////////////////////////////////////////////////////////////////////////////////////////// #include "include.h" #include <DataDef.h> +#include <math.h> #include "heaters.h" #include "Heaters_ex.h" @@ -38,6 +39,7 @@ #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h" #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 "StateMachines/Printing/PrintingSTM.h" @@ -91,11 +93,15 @@ uint32_t UnderHeatCounter [HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0, uint32_t MainDryerHeaterMaxTempControl = 0xFF; uint32_t SecondDryerHeaterMaxTempControl = 0xFF; uint32_t DisasterControlId = 0xFF; +double PressureSensorV0[2] = {0.0, 0.0}; + #define DRYER_AIR_PT100 TEMP_SENSE_ANALOG_DRYER_TEMP1 #define DRYER_MAIN_PT100 TEMP_SENSE_ANALOG_DRYER_TEMP2 #define DRYER_SECONDARY_PT100 TEMP_SENSE_ANALOG_DRYER_TEMP3 #define MINIMUM_HEATER_READ 9.0 #define MAXIMUM_HEATER_READ 283 +#define PRESSURE_SENSOR_CP 0.225 +extern uint16_t Head_Fan_Tach[2]; bool UseSecondaryDrierHeater = true; @@ -237,7 +243,6 @@ uint32_t HeatersDisasterControl(uint32_t x,uint32_t y); uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue); void HeatersStartControlTimer (void); - //********************************************************************** //******************** CODE *******************************************/ //********************************************************************** @@ -1843,3 +1848,56 @@ void HeatersControlTask(UArg arg0, UArg arg1) } } } + + +/******************************************************************************** + * Arc Head Pressure sensors + *******************************************************************************/ + +void HeadBlowersInit() +{ + Trigger_Head_Fan_Control(HEAD_FAN_RIGHT, 0); + Trigger_Head_Fan_Control(HEAD_FAN_LEFT, 0); +} + +void HeadBlowersCfg() +{ + if (HeadBlowerCfg[0].enabled) { + Trigger_Head_Fan_Control(HEAD_FAN_RIGHT, HeadBlowerCfg[0].voltage); + } + if (HeadBlowerCfg[1].enabled) { + Trigger_Head_Fan_Control(HEAD_FAN_LEFT, HeadBlowerCfg[1].voltage); + } +} + +double PressureSensorInit(int fanId) +{ + int sensorId; + sensorId = (fanId == HEAD_FAN_RIGHT)?(HEAD_PT100_ZONE_5_0X84_0):(HEAD_PT100_ZONE_7_0X86_0); + PressureSensorV0[fanId] = MillisecGetTemperatures(sensorId); + PressureSensorV0[fanId] *= 10; + return PressureSensorV0[fanId]; +} + +int HeadBlowersGetRPM(uint8_t fanId) +{ + Trigger_Head_Read_Tacho(fanId); + + if (Head_Fan_Tach[fanId] == 0x1FFE) { + return 0; + } else { + return 7864320/Head_Fan_Tach[fanId]; + } +} + +double PressureSensorGetPressure(uint8_t SensorId) +{ + double V0, Vm, Q, Cp; + + Cp = PRESSURE_SENSOR_CP; + V0 = (SensorId == HEAD_PT100_ZONE_5_0X84_0)?(PressureSensorV0[0]):(PressureSensorV0[1]); + Vm = MillisecGetTemperatures(SensorId); + Vm *= 10; + Q = sqrt(Vm - V0 + 22) * Cp; + return Q; +} diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index f20b1aa94..f6d825c20 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -231,6 +231,8 @@ uint32_t InitSequenceMidTankCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag } uint32_t InitSequenceBlowerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { + double V0[2] = {0.0, 0.0}; + if (SafeRemoveControlCallback(HWControlId, InitSequenceBlowerCallBackFunction )==OK) HWControlId = 0xFF; else @@ -247,6 +249,26 @@ uint32_t InitSequenceBlowerCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) waste_seq_step1();// include 1Sec delay <- to open !!!! + if (Head_Type == HEAD_TYPE_ARC) { + if (ResetReason & SYSCTL_CAUSE_POR) { + V0[0] = PressureSensorInit(0); + V0[1] = PressureSensorInit(1); + if ((V0[0] > 0) && (V0[0] < 2)) { + MCU_E2PromProgram(EEPROM_ORIFICE1_ZERO_VALUE, V0[0]); + MCU_E2PromProgram(EEPROM_ORIFICE1_ZERO_VALUE, V0[1]); + ReportWithPackageFilter(InitFilter,"store pressure sensor v0[0]", __FILE__,__LINE__, V0[0], RpMessage, 0, 0); + } + if ((V0[1] > 0) && (V0[1] < 2)) { + MCU_E2PromProgram(EEPROM_ORIFICE1_ZERO_VALUE, V0[1]); + ReportWithPackageFilter(InitFilter,"store pressure sensor v0[1]", __FILE__,__LINE__, V0[1], RpMessage, 0, 0); + } + } else { + MCU_E2PromRead(EEPROM_ORIFICE1_ZERO_VALUE, &V0[0]); + MCU_E2PromRead(EEPROM_ORIFICE1_ZERO_VALUE, &V0[1]); + ReportWithPackageFilter(InitFilter,"load initial values from EEPROM", __FILE__,__LINE__, V0[0], RpMessage, V0[1], 0); + } + } + Safety_Init(); InitStages++; //InitSequenceStateMachine(InitStages); @@ -459,6 +481,7 @@ uint32_t InitSequenceInitialBlowerActivation(void) WHS_MAX11614_Load_OrificeZeroValue(total1,total3); } } + HeadBlowersInit(); Voc_Sensor_Zero_Calibration(); Turn_the_Blower_On();//Turn on with the Default_Voltage @@ -535,6 +558,9 @@ uint32_t InitSequenceWaitForCooler(void) Trigger_SetWHSFanSpeed(FAN4, SmallFansCfg); Trigger_SetWHSFanSpeed(FAN5, LargeFansCfg); Trigger_SetWHSFanSpeed(FAN6, LargeFansCfg); + if (Head_Type == HEAD_TYPE_ARC) { + HeadBlowersCfg(); + } if (WHS_Type == WHS_TYPE_UNKNOWN) { InitStages++; |
