diff options
| author | Shai Frieder <Shai.Frieder@twine-s.com> | 2020-02-10 17:49:50 +0200 |
|---|---|---|
| committer | Shai Frieder <Shai.Frieder@twine-s.com> | 2020-02-10 17:49:50 +0200 |
| commit | c7fcd93f517b23bcbb0575e6a4f279d56808d8c4 (patch) | |
| tree | 25b034342a3d550f15b8ed04ca5ea20bf36fc2be | |
| parent | 5078871e4c439aa0c18cb91238f1dd33c1b243cd (diff) | |
| download | Tango-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
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 |
