aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorRonen Sberlo <ronen.s@twine-s.com>2020-11-24 15:05:45 +0200
committerRonen Sberlo <ronen.s@twine-s.com>2020-11-24 15:05:45 +0200
commita4a8f6c316e4d6b2f08f7b65cecfe50930ecf019 (patch)
tree85a4b6f5a7ff0045f9a688596a140441f7981a37 /Software/Embedded_SW
parent3c167a3414556b0d0d1d463f5345077afc127cfb (diff)
downloadTango-a4a8f6c316e4d6b2f08f7b65cecfe50930ecf019.tar.gz
Tango-a4a8f6c316e4d6b2f08f7b65cecfe50930ecf019.zip
Move V0 calculation to stage when machine is warm
Diffstat (limited to 'Software/Embedded_SW')
-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
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c4
6 files changed, 89 insertions, 9 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;
}
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
index 4e6a4b112..a71afc4cd 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c
@@ -515,10 +515,6 @@ uint32_t InitSequenceInitialBlowerActivation(void)
{
InitSequenceWHSAirFlowCalibration();
}
- if (Head_Type == HEAD_TYPE_ARC)
- {
- InitSequenceArcAirflowCalibration();
- }
Voc_Sensor_Zero_Calibration();
SetMachineState(MACHINE_STATE_INITIAL_BLOWER_ACTIVATION);