aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Heaters
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/Embedded/Modules/Heaters
parent3c167a3414556b0d0d1d463f5345077afc127cfb (diff)
downloadTango-a4a8f6c316e4d6b2f08f7b65cecfe50930ecf019.tar.gz
Tango-a4a8f6c316e4d6b2f08f7b65cecfe50930ecf019.zip
Move V0 calculation to stage when machine is warm
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Heaters')
-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
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