diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2018-06-18 17:15:02 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2018-06-18 17:15:02 +0300 |
| commit | 5d5ca12a57e86aa3f566eafa9c71663cdf563708 (patch) | |
| tree | 16d2b9cb7dc71b24ad3bea73369824195f454b01 /Software/Embedded_SW | |
| parent | 0bd5bb08169bf0c72dc686b48b12499f61122958 (diff) | |
| download | Tango-5d5ca12a57e86aa3f566eafa9c71663cdf563708.tar.gz Tango-5d5ca12a57e86aa3f566eafa9c71663cdf563708.zip | |
basic IDS with valves handling
Diffstat (limited to 'Software/Embedded_SW')
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> |
