aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShai Frieder <Shai.Frieder@twine-s.com>2020-02-10 17:49:50 +0200
committerShai Frieder <Shai.Frieder@twine-s.com>2020-02-10 17:49:50 +0200
commitc7fcd93f517b23bcbb0575e6a4f279d56808d8c4 (patch)
tree25b034342a3d550f15b8ed04ca5ea20bf36fc2be
parent5078871e4c439aa0c18cb91238f1dd33c1b243cd (diff)
downloadTango-c7fcd93f517b23bcbb0575e6a4f279d56808d8c4.tar.gz
Tango-c7fcd93f517b23bcbb0575e6a4f279d56808d8c4.zip
add WHS_Set_Blower_Control_Closed_Loop()
add stub to set the rehostat(gass sensor) add detect newWHS card by I2C command to EEPROM
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c15
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c116
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h6
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c5
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c6
-rw-r--r--Software/Stubs Collection/stubs/newWHS/Rehostat.cs31
8 files changed, 175 insertions, 13 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
index cc876a45a..4308a7913 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
@@ -41,6 +41,7 @@ typedef enum
Actuators_Control,
/* enum for WHS :*/
+ DetectNewWHS,
WHS_start,
WHS_init_I2C_IO,
WHS_init_fan,
@@ -160,6 +161,16 @@ void Trigger_InputsReading(void)
}
+void Trigger_Check_WHS_Type_Via_EEPROM()
+{
+ I2C_ReadingMessageStruc I2C_ReadingMessage;
+
+ I2C_ReadingMessage.messageId = DetectNewWHS;
+ if (I2C_ReadingMsgQ != NULL)
+ Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT);
+ return;
+}
+
void Trigger_WHS_init_IO(void)
{
I2C_ReadingMessageStruc I2C_ReadingMessage;
@@ -450,6 +461,10 @@ void I2C_ReadingTask(UArg arg0, UArg arg1)
}
break;
+ case DetectNewWHS:
+ Check_WHS_Type_Via_EEPROM();
+ break;
+
case WHS_init_I2C_IO:
WHS_IO_Init();
break;
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
index bc58e2450..4f5712442 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
@@ -10,7 +10,7 @@
#define DRIVERS_I2C_COMMUNICATION_I2C_TASK_H_
-
+void Trigger_Check_WHS_Type_Via_EEPROM(void);
void Trigger_WHS_init_IO(void);
void Trigger_WHS_init_fan(void);
void Trigger_WHS_init_PT100(void);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
index bcada0e0d..310ad9163 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
@@ -13,10 +13,19 @@
#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
#include <Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.h>
#include <Drivers/I2C_Communication/WHS_Card/WHS_data.h>
+#include <Drivers/I2C_Communication/DAC/Blower.h>
+
+#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
bool Read_Max5805_device_ID();
uint8_t Read_Buf[2] = {0};
+#define ORF_BUFF_SIZE 60
+double average_orf1_Q_buff[ORF_BUFF_SIZE] = {0};
+double average_orf3_Q_buff[ORF_BUFF_SIZE] = {0};
+
+double average_Q_orifice1;
+double average_Q_orifice3;
int32_t i2c_smbus_write_word_data(int i2cFileDescriptor, uint8_t command_regAddress, uint16_t regValue)
{
@@ -169,6 +178,61 @@ bool WHS_init_Blower()
return status;
}
+double WHS_Blower_Avarege_ORF1()
+{
+ static uint8_t i = 0 ;
+ static double sum_orifice_Q = 0;
+ uint16_t orifice_hex_value = 0;
+
+ if (i == ORF_BUFF_SIZE)
+ {
+ i = 0;
+ }
+ else
+ {
+ i += 1;
+ }
+ sum_orifice_Q -= average_orf1_Q_buff[i];
+ get_orf_1(&orifice_hex_value );
+ average_orf1_Q_buff[i] = get_Q(orifice_hex_value);
+ sum_orifice_Q += average_orf1_Q_buff[i];
+
+ average_Q_orifice1 = sum_orifice_Q /ORF_BUFF_SIZE;
+ return average_Q_orifice1;
+}
+
+double WHS_Blower_Avarege_ORF3()
+{
+ static uint8_t i = 0 ;
+ static double sum_orifice_Q = 0;
+ uint16_t orifice_hex_value = 0;
+
+ if (i == ORF_BUFF_SIZE)
+ {
+ i = 0;
+ }
+ else
+ {
+ i += 1;
+ }
+ sum_orifice_Q -= average_orf3_Q_buff[i];
+ get_orf_3( &orifice_hex_value ); //average_orf1_buff[i] =
+ average_orf3_Q_buff[i] = get_Q(orifice_hex_value);
+ sum_orifice_Q += average_orf3_Q_buff[i];
+
+ average_Q_orifice3 = sum_orifice_Q /ORF_BUFF_SIZE;
+ return OK;
+}
+
+double get_average_ORF1_Q()
+{
+ return average_Q_orifice1;
+}
+
+double get_average_ORF3_Q()
+{
+ return average_Q_orifice3;
+}
bool Test_WHS_blower()
{
@@ -188,3 +252,55 @@ bool Test_WHS_blower()
return status;
}
+#define SET_DYEING_HEAD_ORRIFFICE_SENSOR 0 //todo
+#define LARGE_STEP 10 //todo define the correct number
+#define SMALL_STEP 1 //todo define the correct number
+
+bool WHS_Set_Blower_Control_Closed_Loop()
+{
+ //double average_ORF1_Q = 0;
+ double current_dying_head_flow = 0;
+
+ uint16_t volt;
+ //average_ORF1_Q = get_Q((int16_t) average_ORF1);
+ current_dying_head_flow = get_average_ORF1_Q();
+ if (abs(current_dying_head_flow - SET_DYEING_HEAD_ORRIFFICE_SENSOR) > 0.2)
+ {
+ volt = getBlowerState();
+ if (current_dying_head_flow < SET_DYEING_HEAD_ORRIFFICE_SENSOR)
+ {
+ if (( SET_DYEING_HEAD_ORRIFFICE_SENSOR - current_dying_head_flow) > 0.5)
+ {
+ /* increase blower voltage by large step: */
+ ReportWithPackageFilter(WasteFilter,"------------ increase blower voltage by large step:-----------------", __FILE__,__LINE__, volt, RpMessage, LARGE_STEP, 0);
+ WHS_Set_Volt_Blower_Control( volt + LARGE_STEP );
+ }
+ else
+ {
+ /* increase blower voltage by small step: */
+ ReportWithPackageFilter(WasteFilter,"------------ increase blower voltage by large step:-----------------", __FILE__,__LINE__, volt, RpMessage, SMALL_STEP, 0);
+ WHS_Set_Volt_Blower_Control( volt + SMALL_STEP );
+ }
+ }
+ else
+ {
+ if (( current_dying_head_flow -SET_DYEING_HEAD_ORRIFFICE_SENSOR) > 0.5)
+ {
+ /* decrease blower voltage by large step: */
+ ReportWithPackageFilter(WasteFilter,"------------ decrease blower voltage by large step:-----------------", __FILE__,__LINE__, volt, RpMessage, LARGE_STEP, 0);
+ WHS_Set_Volt_Blower_Control(volt - LARGE_STEP);
+ }
+ else
+ {
+ /* decrease blower voltage by small step: */
+ ReportWithPackageFilter(WasteFilter,"------------ decrease blower voltage by small step:-----------------", __FILE__,__LINE__, volt, RpMessage, SMALL_STEP, 0);
+ WHS_Set_Volt_Blower_Control( volt + SMALL_STEP );
+ }
+ }
+ }
+ return OK;
+}
+
+
+
+
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h
index d0173db1f..2b776fbc9 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h
@@ -18,7 +18,11 @@ bool WHS_init_Blower(void);
bool WHS_Set_Volt_Blower_Control(uint16_t volt);
bool Write_MAX5805_REF(void);
bool Test_WHS_blower(void);
-
+double WHS_Blower_Avarege_ORF1(void);
+double WHS_Blower_Avarege_ORF3(void);
+double get_average_ORF1_Q(void);
+double get_average_ORF3_Q(void);
+bool WHS_Set_Blower_Control_Closed_Loop();
/* from Blower.h
*
uint32_t Turn_the_Blower_On();
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c
index f268ec748..117a20913 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.c
@@ -101,13 +101,6 @@ uint32_t Check_WHS_Type_Via_EEPROM()
WHS_Type = WHS_TYPE_NEW;
}
- //temporary
- #ifdef Use_WHS_Card
- WHS_Type = WHS_TYPE_NEW;
- #else
- WHS_Type = WHS_TYPE_UNKNOWN;
- #endif
-
//TODO to test and replace #ifdef Use_Head_Card with if(Head_Type != HEAD_TYPE_SYLKO_WITHOUT_CARD)
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 195cc65f3..b24970ea0 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -58,6 +58,7 @@
#include <Drivers/I2C_Communication/WHS_Card/D_ADS122_PT100/WHS_PT100_ADC.h>
#include <Drivers/I2C_Communication/I2C_Task.h>
+#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
Task_Handle Millisecond_Task_Handle;
/******************** Definitions ********************************************/
@@ -719,7 +720,9 @@ uint32_t MillisecLowLoop(uint32_t tick)
}
Trigger_WHS_PT100_Read_All();
Trigger_WHS_MAX11614_Read_allADC();
- Trigger_WHSReadAllFanTacho ();
+ WHS_Blower_Avarege_ORF1();
+ WHS_Blower_Avarege_ORF3();
+ Trigger_WHSReadAllFanTacho ();
}
if (OneMinute_Tick)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index 2652c38b9..56e314967 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -406,7 +406,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
//Test_Head_fan_Click();
Head_Fan_PWM_Control(0, request->delay & 0xFF);
- Task_sleep(1000);
+ Task_sleep(2000);
//response.progress = Fan_Click_Info.Product_ID;
response.progress = Head_Fan_Tach[0];
@@ -417,7 +417,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
if((request->amount == 0xFAC1) /*&& (request->delay == 0xFAC)*/) //Head Fan control
{
Head_Fan_PWM_Control(1, request->delay & 0xFF);
- Task_sleep(1000);
+ Task_sleep(2000);
response.progress = Head_Fan_Tach[1];
response.has_progress = true;
}
@@ -429,7 +429,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
if (WHS_Type == WHS_TYPE_NEW)
{
Trigger_SetWHSFanSpeed(((request->amount & 0x0000000F)-1) , request->delay & 0x000000FF);
- Task_sleep(1000);
+ Task_sleep(2000);
fan_tacho = WHS_Get_fan_tach( (request->amount & 0x0000000F)-1);
}
response.progress = fan_tacho;
diff --git a/Software/Stubs Collection/stubs/newWHS/Rehostat.cs b/Software/Stubs Collection/stubs/newWHS/Rehostat.cs
new file mode 100644
index 000000000..142c1597d
--- /dev/null
+++ b/Software/Stubs Collection/stubs/newWHS/Rehostat.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Text;
+using System.Linq;
+using System.Drawing;
+using System.Diagnostics;
+using System.Windows.Forms;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+using Tango.PMR.Stubs;
+using Tango.Stubs;
+
+public void OnExecute(StubManager stubManager)
+{
+// Request ----
+// Int32 : Amount
+// Int32 : Delay
+
+// Response ----
+// Double : Progress
+
+
+stubManager.Run<ProgressResponse>("ProgressRequest" ,0x3EB, 0x300); //set rehostat value=0x300
+stubManager.WriteLine("First response received");
+Thread.Sleep(1000); //Sleep for 1000 milli.
+var response6 = stubManager.Run<ProgressResponse>("ProgressRequest" ,0x3EA, 5); // get GAS_OUT
+stubManager.WriteLine("Second response received");
+
+ stubManager.WriteLineHex(response6.Progress, 4);
+
+} \ No newline at end of file