aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2018-06-18 17:15:02 +0300
committerShlomo Hecht <shlomo@twine-s.com>2018-06-18 17:15:02 +0300
commit5d5ca12a57e86aa3f566eafa9c71663cdf563708 (patch)
tree16d2b9cb7dc71b24ad3bea73369824195f454b01 /Software/Embedded_SW
parent0bd5bb08169bf0c72dc686b48b12499f61122958 (diff)
downloadTango-5d5ca12a57e86aa3f566eafa9c71663cdf563708.tar.gz
Tango-5d5ca12a57e86aa3f566eafa9c71663cdf563708.zip
basic IDS with valves handling
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c3
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c29
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c1
5 files changed, 33 insertions, 6 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c
index cec8b74af..ef16e472f 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c
@@ -13,7 +13,6 @@
#include "PMR/Hardware/HardwareDancerType.pb-c.h"
extern TempSensorResponseStruct TempSensorResponse[MAX_TEMPERATURE_SENSOR_ID];
-void FPGA_SetMotStop(TimerMotors_t _motorId);
#include <drivers/FPGA/FPGA_SSI_Comm.h>
///////////////////////////////////////////////////////////////////////////////
@@ -301,6 +300,7 @@ typedef enum
MOTOR_CONFIG_HARD_HIZ,
MOTOR_CONFIG_ACC,
MOTOR_CONFIG_DEC,
+ MOTOR_CONFIG_MIN_SPEED,
MOTOR_CONFIG_MAX_SPEED,
MOTOR_CONFIG_STEP_MODE,
MOTOR_CONFIG_CONFIG,
diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c
index 8b375b311..4056f0175 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c
@@ -311,7 +311,8 @@ uint32_t Valve3WayCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag)
RemoveControlCallback(Valve3WayControlId[ValveId], Valve3WayCallBackFunction );
//call the module callback
- Valve3WayModuleCallback[ValveId](ValveId,BusyFlag);
+ if (Valve3WayModuleCallback[ValveId])
+ Valve3WayModuleCallback[ValveId](ValveId,BusyFlag);
}
return OK;
diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h
index 7af24aed7..fc118f683 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h
+++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.h
@@ -12,7 +12,7 @@
typedef enum
{
//Dispenser Valves
- // must be from ubdex 0-7 in order to use Valve3WayModuleCallback and Valve3WayControlId as array of 8 !
+ // must be from index 0-7 in order to use Valve3WayModuleCallback and Valve3WayControlId as array of 8 !
VALVE_DISPENSER_1,
VALVE_DISPENSER_2,
VALVE_DISPENSER_3,
@@ -53,5 +53,5 @@ void Valve_Command(Valves_t Valve_Id);
void Valve_Set(Valves_t Valve_Id, bool Direction);
void SetAllDispensersValves(bool Direction);
void FPGA_GetDispenserValveBusyOCD();// OCD - Over Current Detection
-
+uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callback_fptr callback); //direction: MidTank_Dispenser or Dispenser_Mixer
#endif /* DRIVERS_VALVES_VALVE_H_ */
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index f4ddc0fbd..d999be20e 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -14,6 +14,7 @@
#include "PMR/Hardware/HardwareDispenser.pb-c.h"
#include "StateMachines/Printing/printingSTM.h"
#include "drivers/motors/motor.h"
+#include "drivers/valves/valve.h"
typedef struct
@@ -42,6 +43,7 @@ bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {true};
DispenserControlConfig_t DispenserControlConfig[MAX_SYSTEM_DISPENSERS];
uint32_t ControlIdtoDispenserId [MAX_SYSTEM_DISPENSERS] = {0xFF};
int OriginalDispenserSpd_2PPS[MAX_SYSTEM_DISPENSERS] = {0};
+bool DispenserPreSegmentReady[MAX_SYSTEM_DISPENSERS] = {false};
int JobBrushStopId = 0;
uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request)
@@ -151,6 +153,21 @@ uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request)
}
//********************************************************************************************************************
+
+ uint32_t IDS_Valve_PresegmentReady(uint32_t deviceID, uint32_t ReadValue)
+ {
+ int i;
+ DispenserPreSegmentReady[deviceID] = true;
+ for (i=0;i<MAX_SYSTEM_DISPENSERS;i++)
+ {
+ if (DispenserPreSegmentReady[i] == false)
+ {
+ return; //not all configured heaters are ready
+ }
+ }
+ PreSegmentReady(Module_IDS,ModuleDone);
+
+ }
uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId)
{
//set the speed only before the first segment, speed is constant accros job
@@ -169,14 +186,18 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId)
for (Dispenser_i = 0;Dispenser_i <= MAX_SYSTEM_DISPENSERS;Dispenser_i++)
{
HW_Motor_Id = DispenserIdToMotorId[Dispenser_i];
+ Control3WayValvesWithCallback (Dispenser_i, MidTank_Dispenser, IDS_Valve_PresegmentReady); //direction: MidTank_Dispenser or Dispenser_Mixer
+
MotorStop(HW_Motor_Id,Hard_Stop);
if (JobTicket->segments[SegmentId]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->has_dispenserstepdivision)
MotorSetMicroStep(HW_Motor_Id,JobTicket->segments[SegmentId]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->dispenserstepdivision);
else
MotorSetMicroStep(HW_Motor_Id,MotorsCfg[HW_Motor_Id].microstep);
+ DispenserPreSegmentReady[Dispenser_i] = false;
+
}
//call the job state machine when the thread system is ready
- PreSegmentReady(Module_IDS,ModuleDone);
+ //PreSegmentReady(Module_IDS,ModuleDone);
return OK;
}
@@ -199,7 +220,11 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId)
// double Dispenser_speed = (segmentfirst_speed * MotorsCfg[HW_Motor_Id].pulseperround)/(2*PI* MotorsCfg[HW_Motor_Id].pulleyradius);
//DispenserControlConfig[Dispenser_i].m_SetParam = Dispenser_speed;
// OriginalDispenserSpd_2PPS[Dispenser_i] = (int)Dispenser_speed;
- MotorSetSpeed(HW_Motor_Id, segmentfirst_speed);
+ if ((int)segmentfirst_speed > 0)
+ {
+ Control3WayValvesWithCallback (Dispenser_i, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer
+ MotorSetSpeed(HW_Motor_Id, segmentfirst_speed);
+ }
}
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c
index ed4d44491..fbfb0ed85 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/StubRealTimeUsage.c
@@ -16,6 +16,7 @@
#include <Container.h>
#include <DataDef.h>
+
#include <PMR/Stubs/StubRealTimeUsageResponse.pb-c.h>
#include <PMR/Stubs/StubRealTimeUsageRequest.pb-c.h>