diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-07-20 14:03:17 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-07-20 14:03:17 +0300 |
| commit | 5bcbb4e0b44ec7486e3b350a85caeb89c05bdae9 (patch) | |
| tree | 939f7c65bd6e838e12bd086f565faba564703014 /Software/Embedded_SW/Embedded/Drivers | |
| parent | d54d5b5ab23b17bb326669231d8ca5615bc54309 (diff) | |
| download | Tango-5bcbb4e0b44ec7486e3b350a85caeb89c05bdae9.tar.gz Tango-5bcbb4e0b44ec7486e3b350a85caeb89c05bdae9.zip | |
update actuator logic + reading safety
Diffstat (limited to 'Software/Embedded_SW/Embedded/Drivers')
5 files changed, 66 insertions, 16 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index 3988712df..24b0fce27 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -1153,15 +1153,16 @@ uint32_t Control_Dryer_Fan(bool StartStop, uint8_t PWM_Command_Precent)//use STA return status; } -bool Emergency_Push_Button_Report()//TODO move to GPIO folder +bool Safety_Incident_Report()//TODO move to GPIO folder { - bool IsEmergencyPressed = false; + bool IsSafetyIncidentOccurred = No_Safety_Event; if(ROM_GPIOPinRead(GPIO_PORTR_BASE, GPIO_PIN_2)) //EPB_S1 (GPI_PS1_DC_OK) - IsEmergencyPressed = true; + IsSafetyIncidentOccurred = Safety_Event_Occurred; - return IsEmergencyPressed; + return IsSafetyIncidentOccurred; } + /* bool Dryer_Door_Switch()//move to Get_COVER_1_State { diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h index a764e69db..0ff0fa2de 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h @@ -247,7 +247,7 @@ void PumpActivation(uint32_t seconds); bool IsDryerStopped (void); uint32_t Control_Dryer_Fan(bool StartStop, uint8_t PWM_Command_Precent); bool Check_Disp_Safety_Stop_Indication(uint8_t Dispenser_ID); -bool Emergency_Push_Button_Report(); +bool Safety_Incident_Report(); //bool Dryer_Door_Switch(); uint8_t Pannel_Leds(PANEL_BUTTON_OR_CRAT_ID Pannel_Led_Id, OPERATION_MODE LED_Mode); uint8_t Init_Machine_Leds(); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index 24690c25f..05423b8d8 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -520,6 +520,25 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) } +uint32_t HeadCard_ActStubCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID +{ + uint32_t status = OK; + + ACTUATORS Act_ID = (ACTUATORS)(IfIndex); + + if(Act_ID == ACTIN)//0 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH; + } + else//if(Act_ID == ACTOUT) 1 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; + } + Trigger_OutputsWriting();//status |= Head_Write_IO_Reg(0x46,HIGH); + + return status; +} + uint32_t HeadCard_Actuators_Stub(ACTUATORS Act_ID, bool Enable, bool Direction)//ENABLE/DISABLE, DOWN/UP/DONTCARE { uint32_t status = OK; @@ -538,6 +557,9 @@ uint32_t HeadCard_Actuators_Stub(ACTUATORS Act_ID, bool Enable, bool Direction)/ { Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = LOW; } + + //100msec delay - (need short command - Active LOW ) + ActControlId = AddControlCallback("ctuatorControl", HeadCard_ActStubCallBackFunction, (eHundredMillisecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); } else { @@ -598,7 +620,7 @@ uint32_t HeadCard_Actuators_Status(ACTUATORS Act_ID)// { uint32_t Motion_Status = STOPPED; - //Head_Read_IO_Reg(0x46,HIGH); //I2C task - Actuators_Control + //Head_Read_IO_Reg(0x46,HIGH); //Trigger_InputsReading(); Done every Hundred_msTick if(Act_ID == ACTIN) { @@ -650,23 +672,35 @@ uint8_t Head_Test_IO() return status; } -typedef enum { +#define ACTUATOR_RELOCATING_MOVEUP_TIME 160 + +typedef enum +{ ActuatorIdle, ActuatorMoveDown, ActuatorWait, //wait for the actuator to get to the lower position ActuatorMoveUp, ActuatorLocated }ActuatorLocatingEnum; + ActuatorLocatingEnum ActuatorLocating = ActuatorIdle; -uint32_t ActuatorLocatingControl = 0xFF; +uint32_t ActuatorLocatingControl = 0xFF; uint32_t count_time = 0, moveuptime = 0; -#define ACTUATOR_RELOCATING_MOVEUP_TIME 160 uint32_t MovingUpTime = ACTUATOR_RELOCATING_MOVEUP_TIME; -bool isActuatorOnLowestLocation(void) + +bool isActuatorOnLowestLocation(void) // Give indication if the actuator stopped in this case reached to the lowest point { -#warning give here indication if the actuator reached the lowest point - return true; + bool Status = FALSE; + + //read the inputs in Hundred_msTick + + if(HeadCard_Actuators_Status(ACTIN) == STOPPED) + { + Status = TRUE; + } + return Status; } + uint32_t HeadCard_Actuators_Relocate_callback(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID { count_time++; @@ -675,15 +709,15 @@ uint32_t HeadCard_Actuators_Relocate_callback(uint32_t IfIndex, uint32_t BusyFla case ActuatorIdle: break; case ActuatorMoveDown: - Trigger_Head_Actuators_Stub(ACTIN, true, false); + Trigger_Head_Actuators_Stub(ACTIN, ENABLE, DOWN); ActuatorLocating = ActuatorWait; ReportWithPackageFilter(ThreadFilter,"actuators relocation",__FILE__,msec_millisecondCounter,ActuatorLocating,RpMessage,count_time,0); break; case ActuatorWait: - if (isActuatorOnLowestLocation()) + if (isActuatorOnLowestLocation())//read the inputs in Hundred_msTick { ActuatorLocating = ActuatorMoveUp; - Trigger_Head_Actuators_Stub(ACTIN, true, true); + Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); moveuptime = count_time; ReportWithPackageFilter(ThreadFilter,"actuators relocation",__FILE__,msec_millisecondCounter,ActuatorLocating,RpMessage,count_time,0); } @@ -691,7 +725,7 @@ uint32_t HeadCard_Actuators_Relocate_callback(uint32_t IfIndex, uint32_t BusyFla case ActuatorMoveUp: if (count_time>=(moveuptime+MovingUpTime)) { - Trigger_Head_Actuators_Stub(ACTIN, false, false); + Trigger_Head_Actuators_Stub(ACTIN, DISABLE, DONTCARE); ActuatorLocating = ActuatorLocated; ReportWithPackageFilter(ThreadFilter,"actuators relocation",__FILE__,msec_millisecondCounter,ActuatorLocating,RpMessage,count_time,0); } 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 c06e8f4df..f126c254b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -275,6 +275,19 @@ void Trigger_InputsReading(void) } +void Trigger_OutputsWriting(void) +{ + I2C_ReadingMessageStruc I2C_ReadingMessage; + //uint8_t Midtank_i; + + I2C_ReadingMessage.messageId = Head_Outputs_Writing; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; + +} + + void Trigger_WHS_init_IO(void) { I2C_ReadingMessageStruc I2C_ReadingMessage; @@ -653,6 +666,7 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) Head_Read_IO_Reg(0x46, LOW_AND_HIGH);//READ HEAD CARD LS + ACT status + BREAK_HTOT break; case Head_Outputs_Writing: + Head_Write_IO_Reg(0x46,HIGH);//ACT break; case DispenserReadData: Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter); 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 2a98296b4..16f86f9ed 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -51,6 +51,7 @@ void Trigger_Head_Actuators_Stub(uint32_t Act_ID, bool Active_Low_Pwr, bool Dire void Trigger_Head_Actuators_Disable(void); void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM); void Trigger_InputsReading(void); +void Trigger_OutputsWriting(void); void Trigger_Head_Magnet(int direction); void Trigger_Head_MixerValve(int direction); void Trigger_Head_PressureArc(bool Enable_Disable); |
