aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2018-04-30 17:37:27 +0300
committerAvi Levkovich <avi@twine-s.com>2018-04-30 17:37:27 +0300
commit52a09ecb4ae9577f6f1bb124d246ec1c3858ec23 (patch)
tree600763360d235975dc06c73602fb178ec42f9471 /Software/Embedded_SW
parent3002558b0a404494eb6025f2390e1dac54ecb6eb (diff)
downloadTango-52a09ecb4ae9577f6f1bb124d246ec1c3858ec23.tar.gz
Tango-52a09ecb4ae9577f6f1bb124d246ec1c3858ec23.zip
Add Valve module
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_Comm.h54
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c115
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h16
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c2
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);