aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-11-25 12:08:51 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-11-25 12:08:51 +0200
commit2dacdcac10595cc138458dfa6988951e71172f46 (patch)
tree0d4941786d4068728cd7693e8a21744066784a97 /Software/Embedded_SW/Embedded/Modules
parent978439fe882ef59b63fb1b1450bd615f707214c9 (diff)
parent97beabc887778926570c286bcedbb2480fd59921 (diff)
downloadTango-2dacdcac10595cc138458dfa6988951e71172f46.tar.gz
Tango-2dacdcac10595cc138458dfa6988951e71172f46.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c75
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c16
5 files changed, 89 insertions, 5 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
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
index db15a9ffd..5a3207551 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
@@ -46,6 +46,7 @@ bool WHS_WasteCartridgeMiddlePresent();
bool WHS_IsEmptying();
uint32_t Waste_CheckState(int *AlarmId);
uint32_t Waste_Prepare(void);
+uint32_t Waste_Check_Flows(void);
bool WHS_IsVocPpmOverAlarmLimit();
void setWastePrepareValues(float HeadLimit,float WasteLimit);
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
index 490a0c0a5..665e8f83c 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
@@ -645,15 +645,25 @@ uint32_t Waste_PrepareCallbak(uint32_t IfIndex, uint32_t ReadValue)
Report("Module waste prepare", __FILE__, __LINE__, headready, RpMessage, whsready, 0);
return OK;
}
-uint32_t Waste_Prepare(void)
+uint32_t Waste_Check_Flows(void)
{
- WHS_FlowReady = false;HeadIn_FlowReady = false;HeadOut_FlowReady = false;
+ WHS_FlowReady = false;HeadIn_FlowReady = false;HeadOut_FlowReady = false;
+
if (WasteReadyControlId != 0xFF)
RemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak);
Waste_Prepare_Timeout = 0;
//check that blowers are within 10% of designated flow: WHS, head blowers
WasteReadyControlId = AddControlCallback("Cartridge Cover Door", Waste_PrepareCallbak, eOneSecond, TemplateDataReadCBFunction, 0, 0, 0);
- Report("Module waste prepare", __FILE__, __LINE__, Head_Type, RpMessage, WHS_Type, 0);
+ Report("Waste_Check_Flows prepare", __FILE__, __LINE__, Head_Type, RpMessage, WHS_Type, 0);
+ return OK;
+}
+uint32_t Waste_Prepare(void)
+{
+ if (HeaterCheckReady() == true)
+ {
+ HeadBlowersV0Init();
+ }
+ Report("Module waste prepare", __FILE__, HeaterCheckReady(), Head_Type, RpMessage, WHS_Type, 0);
return OK;
}