diff options
| author | Avi Levkovich <avi@twine-s.com> | 2018-04-30 17:37:27 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2018-04-30 17:37:27 +0300 |
| commit | 52a09ecb4ae9577f6f1bb124d246ec1c3858ec23 (patch) | |
| tree | 600763360d235975dc06c73602fb178ec42f9471 /Software/Embedded_SW | |
| parent | 3002558b0a404494eb6025f2390e1dac54ecb6eb (diff) | |
| download | Tango-52a09ecb4ae9577f6f1bb124d246ec1c3858ec23.tar.gz Tango-52a09ecb4ae9577f6f1bb124d246ec1c3858ec23.zip | |
Add Valve module
Diffstat (limited to 'Software/Embedded_SW')
5 files changed, 179 insertions, 10 deletions
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 1e5149c2f..834296a44 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -89,6 +89,8 @@ enum #define MIDTANK_DIRECTION 0 #define MIXER_DIRECTION 1 +//#define BITLENGTH_16 16 + //SPI typedef struct //S_SPI { diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h index 488144ac0..209861ca9 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h @@ -999,6 +999,7 @@ typedef union { struct { + //Dry air Valves bool MIDTANK2MANIF4_VALVE_2 : 1; //0 bool MIDTANK2MANIF4_VALVE_1 : 1; //1 bool MIDTANK2MANIF3_VALVE_2 : 1; //2 @@ -1007,6 +1008,7 @@ typedef union bool MIDTANK2MANIF2_VALVE_1 : 1; //5 bool MIDTANK2MANIF1_VALVE_2 : 1; //6 bool MIDTANK2MANIF1_VALVE_1 : 1; //7 + //Dispenser Valves bool CART2MIDTANK4_VALVE_2 : 1; //8 bool CART2MIDTANK4_VALVE_1 : 1; //9 bool CART2MIDTANK3_VALVE_2 : 1; //10 @@ -1037,6 +1039,58 @@ typedef union unsigned short ushort; }F1_GPO_REG; +F2_DISPENSER_VALVE_OUT +typedef union +{ + struct + { + bool F2_DISPENSER_VALVE_C1_1_C2_1 : 1;//0 + bool F2_DISPENSER_VALVE_C1_2_C2_2 : 1;//1 + bool F2_DISPENSER_VALVE_C1_3_C2_3 : 1;//2 + bool F2_DISPENSER_VALVE_C1_4_C2_4 : 1;//3 + bool F2_DISPENSER_VALVE_C1_5_C2_5 : 1;//4 + bool F2_DISPENSER_VALVE_C1_6_C2_6 : 1;//5 + bool F2_DISPENSER_VALVE_C1_7_C2_7 : 1;//6 + bool F2_DISPENSER_VALVE_C1_8_C2_8 : 1;//7 + bool F2_DISPENSER_VALVE_EN_1 : 1;//8 + bool F2_DISPENSER_VALVE_EN_2 : 1;//9 + bool F2_DISPENSER_VALVE_EN_3 : 1;//10 + bool F2_DISPENSER_VALVE_EN_4 : 1;//11 + bool F2_DISPENSER_VALVE_EN_5 : 1;//12 + bool F2_DISPENSER_VALVE_EN_6 : 1;//13 + bool F2_DISPENSER_VALVE_EN_7 : 1;//14 + bool F2_DISPENSER_VALVE_EN_8 : 1;//15 + }bits; + unsigned short ushort; +}DISPENSER_VALVE_GPO_REG; + + +//F2_DISPENSER_VALVE_IN_Direct +typedef union +{ + struct + { + //Dispenser Valves + bool F2_DISPENSER_VALVE_OCD_8 : 1; //0 + bool F2_DISPENSER_VALVE_OCD_7 : 1; //1 + bool F2_DISPENSER_VALVE_OCD_6 : 1; //2 + bool F2_DISPENSER_VALVE_OCD_5 : 1; //3 + bool F2_DISPENSER_VALVE_OCD_4 : 1; //4 + bool F2_DISPENSER_VALVE_OCD_3 : 1; //5 + bool F2_DISPENSER_VALVE_OCD_2 : 1; //6 + bool F2_DISPENSER_VALVE_OCD_1 : 1; //7 + //Dry air Valves TODO ???? + bool Valve_busy_7 : 1; //8 + bool Valve_busy_6 : 1; //9 + bool Valve_busy_5 : 1; //10 + bool Valve_busy_4 : 1; //11 + bool Valve_busy_3 : 1; //12 + bool Valve_busy_2 : 1; //13 + bool Valve_busy_1 : 1; //14 + bool Valve_busy_0 : 1; //15 + }bits; + unsigned short ushort; +}VALVE_BUSY_REG; //------------------------------ MOTOR DRIVER L_6470 ------------------------------ typedef union diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index 09ce1e735..81e0e11bd 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -11,32 +11,43 @@ */ #include <DataDef.h> -#include <Drivers/Valves/Valve.h> #include "include.h" #include <stdint.h> #include <stdbool.h> #include "drivers/FPGA/FPGA_Comm.h" - +#include <Drivers/Valves/Valve.h> VALVE_GPO_REG Valve_GPO_Reg; F1_GPO_REG F1_GPO_Reg; +DISPENSER_VALVE_GPO_REG Dispenser_Valve_GPO_Reg; typedef struct { - bool Enable; + bool Enable; //TODO - to check if needed bool Direction; + bool Busy; }ValveRequestStruct; +typedef struct +{ + bool Direction;//TODO - to check if needed + bool Busy; + bool OCD; //Over Current Detection + +}ValveResponseStruct; + ValveRequestStruct ValveRequest[NUM_OF_VALVES]; +ValveResponseStruct ValveRsponse[NUM_OF_VALVES]; -Void Valve_Command(Valves_t Valve_Id) +void Valve_Command(Valves_t Valve_Id) { switch(Valve_Id) { - case VALVE_MIDTANK_To_MANIF_4_2: + //Dry air Valves + case VALVE_MIDTANK_To_MANIF_4_2: Valve_GPO_Reg.bits.MIDTANK2MANIF4_VALVE_2 = ValveRequest[Valve_Id].Direction; break; case VALVE_MIDTANK_To_MANIF_4_1: @@ -61,7 +72,7 @@ Void Valve_Command(Valves_t Valve_Id) Valve_GPO_Reg.bits.MIDTANK2MANIF1_VALVE_1 = ValveRequest[Valve_Id].Direction; break; - + //Dispenser Valves case VALVE_CART_To_MIDTANK_4_2: Valve_GPO_Reg.bits.CART2MIDTANK4_VALVE_2 = ValveRequest[Valve_Id].Direction; break; @@ -87,6 +98,7 @@ Void Valve_Command(Valves_t Valve_Id) Valve_GPO_Reg.bits.CART2MIDTANK1_VALVE_1 = ValveRequest[Valve_Id].Direction; break; + // Waste Valves case VALVE_WASTE_TANK: F1_GPO_Reg.bits.F1_VALVE_WASTE_TANK = ValveRequest[Valve_Id].Direction; break; @@ -94,12 +106,43 @@ Void Valve_Command(Valves_t Valve_Id) F1_GPO_Reg.bits.F1_VALVE_MIXCHIP_WASTECH = ValveRequest[Valve_Id].Direction; break; + case VALVE_DISPENSER_1: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_1_C2_1 = ValveRequest[Valve_Id].Direction; + break; + case VALVE_DISPENSER_2: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_2_C2_2= ValveRequest[Valve_Id].Direction; + break; + case VALVE_DISPENSER_3: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_3_C2_3= ValveRequest[Valve_Id].Direction; + break; + case VALVE_DISPENSER_4: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_4_C2_4= ValveRequest[Valve_Id].Direction; + break; + case VALVE_DISPENSER_5: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_5_C2_5= ValveRequest[Valve_Id].Direction; + break; + case VALVE_DISPENSER_6: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_6_C2_6= ValveRequest[Valve_Id].Direction; + break; + case VALVE_DISPENSER_7: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_7_C2_7= ValveRequest[Valve_Id].Direction; + break; + case VALVE_DISPENSER_8: + Dispenser_Valve_GPO_Reg.bits.F2_DISPENSER_VALVE_C1_8_C2_8= ValveRequest[Valve_Id].Direction; + break; + default: break; } - if ((Valve_Id == VALVE_WASTE_TANK) | (Valve_Id == VALVE_MIXCHIP_WASTECH)) + if ((Valve_Id == VALVE_WASTE_TANK) | (Valve_Id == VALVE_MIXCHIP_WASTECH)) // Waste Valves + { F1_gpo_01 |= F1_GPO_Reg.ushort; + } + else if((Valve_Id >= VALVE_DISPENSER_1) | (Valve_Id <= VALVE_DISPENSER_8)) + { + F2_DISPENSER_VALVE_OUT |= Dispenser_Valve_GPO_Reg.ushort; + } else F3_VALVE_OUT |= Valve_GPO_Reg.ushort; @@ -109,10 +152,64 @@ void SetAllDispensersValves(bool Direction) { if(Direction == MIDTANK_DIRECTION) { - F3_VALVE_OUT = 0; + //F3_VALVE_OUT = 0; + F2_DISPENSER_VALVE_OUT &= ~0x00FF; } else // MIXER_DIRECTION - F3_VALVE_OUT = 0xFFFF; + { + //F3_VALVE_OUT = 0xFFFF; + F2_DISPENSER_VALVE_OUT |= 0x00FF; + } } +void FPGA_GetDispenserValveBusyOCD() //TODO which busy and OCD belong to each Valve ??????????????????????????????????????? +{ + uint8_t i; + + VALVE_BUSY_REG Valve_Busy_Reg; + + Valve_Busy_Reg.ushort = F2_DISPENSER_VALVE_IN_Direct; + + for(i = VALVE_DISPENSER_1; i <= VALVE_DISPENSER_8 ;i++) + { + switch(i) + { + //Dispenser Valves + case VALVE_DISPENSER_1: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_1; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_0; + break; + case VALVE_DISPENSER_2: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_2; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_1; + break; + case VALVE_DISPENSER_3: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_3; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_2; + break; + case VALVE_DISPENSER_4: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_4; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_3; + break; + case VALVE_DISPENSER_5: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_5; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_4; + break; + case VALVE_DISPENSER_6: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_6; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_5; + break; + case VALVE_DISPENSER_7: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_7; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_6; + break; + case VALVE_DISPENSER_8: + ValveRsponse[i].OCD = Valve_Busy_Reg.bits.F2_DISPENSER_VALVE_OCD_8; + ValveRsponse[i].Busy = Valve_Busy_Reg.bits.Valve_busy_7; + break; + default: + break; + } + } +} diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h index f78b4a9b3..ff27b3d65 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h @@ -11,6 +11,7 @@ typedef enum { + //Dry air Valves VALVE_MIDTANK_To_MANIF_4_2, VALVE_MIDTANK_To_MANIF_4_1, VALVE_MIDTANK_To_MANIF_3_2, @@ -20,6 +21,7 @@ typedef enum VALVE_MIDTANK_To_MANIF_1_2, VALVE_MIDTANK_To_MANIF_1_1, + // VALVE_CART_To_MIDTANK_4_2, VALVE_CART_To_MIDTANK_4_1, VALVE_CART_To_MIDTANK_3_2, @@ -29,11 +31,25 @@ typedef enum VALVE_CART_To_MIDTANK_1_2, VALVE_CART_To_MIDTANK_1_1, + // Waste Valves VALVE_WASTE_TANK, VALVE_MIXCHIP_WASTECH, + //Dispenser Valves + VALVE_DISPENSER_1, + VALVE_DISPENSER_2, + VALVE_DISPENSER_3, + VALVE_DISPENSER_4, + VALVE_DISPENSER_5, + VALVE_DISPENSER_6, + VALVE_DISPENSER_7, + VALVE_DISPENSER_8, + NUM_OF_VALVES, } Valves_t; +void Valve_Command(Valves_t Valve_Id); +void SetAllDispensersValves(bool Direction); +void FPGA_GetDispenserValveBusyOCD();// OCD - Over Current Detection #endif /* DRIVERS_VALVES_VALVE_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 1727c650a..6c97c2e8f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -77,7 +77,7 @@ uint32_t MotorsConfigMessage(HardwareMotor * request) MotorDriverConfig.HasConfigWord = MotorsCfg[Motor_i].has_configword; MotorDriverConfig.ConfigWord = MotorsCfg[Motor_i].configword; -// status = MotorConfig( Motor_i, &MotorDriverConfig); + status = MotorConfig( Motor_i, &MotorDriverConfig); // if (Motor_i == MOTOR_RDRIVING) // ThreadInitialTestStub(request); |
