Index: firmware/App/Controllers/Ejector.c =================================================================== diff -u -r959f16a2530e68b517cbb5c12c430d5aef4c5f9d -r82bb2222f791a434d22921e2fe4f5edd7e74776d --- firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 959f16a2530e68b517cbb5c12c430d5aef4c5f9d) +++ firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 82bb2222f791a434d22921e2fe4f5edd7e74776d) @@ -30,13 +30,13 @@ // ********** private definitions ********** -#define EJECTOR_RETRACT_OP_INTERVAL ( ( MS_PER_SECOND * 5 ) / TASK_GENERAL_INTERVAL ) ///< Ejector retract operation interval. -#define EJECTOR_EXTEND_OP_INTERVAL ( ( MS_PER_SECOND * 5 ) / TASK_GENERAL_INTERVAL ) ///< Ejector extend operation interval. +#define EJECTOR_RETRACT_OP_TIME ( ( MS_PER_SECOND * 5 ) / TASK_GENERAL_INTERVAL ) ///< Ejector retract operation interval. +#define EJECTOR_EXTEND_OP_TIME ( ( MS_PER_SECOND * 5 ) / TASK_GENERAL_INTERVAL ) ///< Ejector extend operation interval. #define EJECTOR_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Ejector data publish interval. #define DATA_PUBLISH_COUNTER_START_COUNT 13 ///< Ejector data publish start counter. -#define EJECTOR_RETRACT_MOTOR_SPEED_RPM -5000.0F ///< Ejector motor retract speed (in RPM). -#define EJECTOR_EXTEND_MOTOR_SPEED_RPM 5000.0F ///< Ejector motor extend speed (in RPM). +#define EJECTOR_RETRACT_MOTOR_SPEED_RPM -350.0F ///< Ejector motor retract speed (in RPM). +#define EJECTOR_EXTEND_MOTOR_SPEED_RPM 350.0F ///< Ejector motor extend speed (in RPM). #define EJECTOR_OFF_MOTOR_SPEED_RPM 0.0F ///< Ejector motor extend speed (in RPM). /// Enumeration of ejector states. @@ -121,7 +121,7 @@ { BOOL result = FALSE; - if ( currentEjectorState > EJECTOR_STATE_HOMING ) + if ( EJECTOR_STATE_INIT == currentEjectorState ) { ejectorHomeRequested = TRUE; result = TRUE; @@ -263,7 +263,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_HOMING; - if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_INTERVAL ) + if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) { ejectorOperationTimerCounter = 0; setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -329,7 +329,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_RETRACTING; - if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_INTERVAL ) + if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) { ejectorOperationTimerCounter = 0; setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); @@ -351,7 +351,7 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_EXTENDING; - if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_INTERVAL ) + if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) { ejectorOperationTimerCounter = 0; setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); Index: firmware/App/Drivers/EjectorMotor.c =================================================================== diff -u -r959f16a2530e68b517cbb5c12c430d5aef4c5f9d -r82bb2222f791a434d22921e2fe4f5edd7e74776d --- firmware/App/Drivers/EjectorMotor.c (.../EjectorMotor.c) (revision 959f16a2530e68b517cbb5c12c430d5aef4c5f9d) +++ firmware/App/Drivers/EjectorMotor.c (.../EjectorMotor.c) (revision 82bb2222f791a434d22921e2fe4f5edd7e74776d) @@ -44,8 +44,8 @@ #define EJECTOR_MOTOR_CONTROL_NOT_RESET 0x20 ///< Ejector motor control register bit for resetting stepper motor (active low). #define EJECTOR_MOTOR_CONTROL_ENABLE 0x00 ///< Ejector motor control register bit mask for enable. #define EJECTOR_MOTOR_CONTROL_DISABLE 0x10 ///< Ejector motor control register bit for enable (active low). -#define EJECTOR_MOTOR_CONTROL_REVERSE_DIR 0x08 ///< Ejector motor control register bit for direction (0=fwd, 1=rev). -#define EJECTOR_MOTOR_CONTROL_FORWARD_DIR 0x00 ///< Ejector motor control register bit mask for forward direction. +#define EJECTOR_MOTOR_CONTROL_REVERSE_DIR 0x00 ///< Ejector motor control register bit for direction (1=fwd, 0=rev). +#define EJECTOR_MOTOR_CONTROL_FORWARD_DIR 0x08 ///< Ejector motor control register bit mask for forward direction. #define EJECTOR_MOTOR_CONTROL_32TH_STEP 0x03 ///< Ejector motor control register bits for 1/32 micro-stepping mode. /// Control bits to run ejector motor in reverse direction @@ -113,7 +113,7 @@ BOOL result = FALSE; // if starting motor, motor must be stopped first - if ( ( fabs(rpm) > 0.0F ) && ( currentEjectorMotorSetSpeed < NEARLY_ZERO ) ) + if ( ( fabs(rpm) > 0.0F ) && ( fabs( currentEjectorMotorSetSpeed ) < NEARLY_ZERO ) ) { U32 stepTime = calcEjectorStepToggleTimeFromSetSpeed( rpm ); U08 ctrl = EJECTOR_MOTOR_CONTROL_RUN_FORWARD; @@ -132,7 +132,7 @@ result = TRUE; } // if stopping motor, motor must be running first - else if ( ( fabs(rpm) < NEARLY_ZERO ) && ( currentEjectorMotorSetSpeed > 0.0F ) ) + else if ( ( fabs(rpm) < NEARLY_ZERO ) && ( fabs( currentEjectorMotorSetSpeed ) > 0.0F ) ) { ejectorMotorRampUpInProgress = FALSE; ejectorMotorSetToggleTime = EJECTOR_MOTOR_MICROSTEP_TOGGLE_TIME_FOR_STOP; Index: firmware/App/Drivers/GLXferPump.h =================================================================== diff -u -r3fe55376370dc82b5edcb20ac6026d8f079e401b -r82bb2222f791a434d22921e2fe4f5edd7e74776d --- firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision 3fe55376370dc82b5edcb20ac6026d8f079e401b) +++ firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision 82bb2222f791a434d22921e2fe4f5edd7e74776d) @@ -35,8 +35,8 @@ #define AIR_PUMP_MOTOR_OFF 0 ///< Power level setting (PWM) for H12 air pump to turn pump off. #define AIR_PUMP_MOTOR_MAX_PWM 250 ///< Power level setting (PWM) maximum for H12 air pump. -#define AIR_PUMP_MOTOR_FILL_PWM 50 ///< Power level setting (PWM) for H12 air pump to fill (raise level) the air trap. -#define AIR_PUMP_MOTOR_LOWER_PWM 50 ///< Power level setting (PWM) for H12 air pump to lower the level of the air trap. +#define AIR_PUMP_MOTOR_FILL_PWM 100 ///< Power level setting (PWM) for H12 air pump to fill (raise level) the air trap. +#define AIR_PUMP_MOTOR_LOWER_PWM 100 ///< Power level setting (PWM) for H12 air pump to lower the level of the air trap. // ********** public function prototypes ********** Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r3fe55376370dc82b5edcb20ac6026d8f079e401b -r82bb2222f791a434d22921e2fe4f5edd7e74776d --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 3fe55376370dc82b5edcb20ac6026d8f079e401b) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 82bb2222f791a434d22921e2fe4f5edd7e74776d) @@ -115,9 +115,9 @@ S16 H1EncPosition; ///< Reg 280. H1 encoder position (1024 counts/rev). U08 H1Status; ///< Reg 282. H1 status. U08 reserved1; ///< Reg 283. Reserved and available for future use. - U08 H5Status; ///< Reg 284. H5 motor status. - U08 H5EncStatus; ///< Reg 285. H5 encoder status. - S32 H5EncPosition; ///< Reg 286. H5 encoder position. + U08 reserved2; ///< Reg 284. Reserved and available for future use. + U08 reserved3; ///< Reg 285. Reserved and available for future use. + S32 reserved4; ///< Reg 286. Reserved and available for future use. S16 H4Period; ///< Reg 290. H4 measured period (10 uSec). S16 H4Torque; ///< Reg 292. H4 measured torque. S16 H4SpeedFromHall; ///< Reg 294. H4 measured speed from hall sensor(s). @@ -163,7 +163,7 @@ U16 h13PWMPUllInTime; ///< Reg 12. H13 PWM pull in time register. U08 h12Control; ///< Reg 14. H12 Air pump control register. U08 h5Control; ///< Reg 15. H5 ejector stepper motor control register. - U16 h5SetSpeed; ///< Reg 16. H5 ejector stepper motor step register. + U16 NotUsed; ///< Reg 16. Reserved. U16 H4SetSpeed; ///< Reg 18. H4 Blood pump speed set register (RPM). U08 H4Control; ///< Reg 20. H4 Blood pump control register. U08 H19Control; ///< Reg 21. H19 control register. @@ -179,6 +179,7 @@ U16 syrPumpDACData; ///< Reg 38. Syringe pump DAC data (12 bits). U16 syrPumpDACControl; ///< Reg 40. Syringe pump ADC and DAC control register. U16 h12Period; ///< Reg 42. H12 Air pump time period for each count in PWM register. + U32 h5SetSpeed; ///< Reg 44. H5 ejector motor set speed. } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -549,7 +550,7 @@ * @note Bit 0 - MS1 (bit 1 of microstepping configuration setting) * Bit 1 - MS2 (bit 2 of microstepping configuration setting) * Bit 2 - MS3 (bit 3 of microstepping configuration setting) - * Bit 3 - Direction (0=forward, 1=reverse) + * Bit 3 - Direction (1=forward, 0=reverse) * Bit 4 - Disable (0=enabled, 1=disabled) * Bit 5 - Reset (0=reset, 1=not reset) * Bit 6 - Sleep (0=sleep, 1=not sleep) @@ -566,6 +567,19 @@ /*********************************************************************//** * @brief + * The getH5ControlFlags function gets the currently set control flags for + * the H5 ejector stepper motor. + * @details \b Inputs: fpgaActuatorSetPoints.h5Control + * @details \b Outputs: none + * @return Currently set control flags for H5 ejector motor + *************************************************************************/ +U08 getH5ControlFlags( void ) +{ + return fpgaActuatorSetPoints.h5Control; +} + +/*********************************************************************//** + * @brief * The setH5StepToggleTime function sets the ejector motor set speed step * toggle time (in uSec). * @details \b Inputs: none Index: firmware/App/Services/FpgaTD.h =================================================================== diff -u -r3fe55376370dc82b5edcb20ac6026d8f079e401b -r82bb2222f791a434d22921e2fe4f5edd7e74776d --- firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 3fe55376370dc82b5edcb20ac6026d8f079e401b) +++ firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 82bb2222f791a434d22921e2fe4f5edd7e74776d) @@ -75,6 +75,7 @@ U08 getH6Status( void ); void setH5ControlFlags( U08 ctrl ); +U08 getH5ControlFlags( void ); void setH5StepToggleTime( U32 microSeconds ); U16 getH2Pressure( void ); Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r794a0f21a465227d432a91d7b7fd7d513cfe3ecb -r82bb2222f791a434d22921e2fe4f5edd7e74776d --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 794a0f21a465227d432a91d7b7fd7d513cfe3ecb) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 82bb2222f791a434d22921e2fe4f5edd7e74776d) @@ -209,11 +209,16 @@ if ( FALSE == bpStart ) { setBloodPumpTargetRPM( 1000, MOTOR_DIR_FORWARD ); + homeEjector(); + retractEjector(); bpStart = TRUE; } if ( TRUE == bpStop ) { signalBloodPumpHardStop(); + setAirPumpState( AIR_PUMP_STATE_ON, AIR_PUMP_MOTOR_OFF ); + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); bpStop = FALSE; } @@ -222,6 +227,7 @@ // Control blood pump execBloodFlowMonitor(); execBloodFlowController(); + execEjectorController(); execAirPumpController(); switch ( sta ) @@ -233,15 +239,15 @@ if ( TRUE == start ) { -// sta = 1; + sta = 1; // lower the level -// set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); -// setAirPumpState( AIR_PUMP_STATE_ON, 50 ); + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); + setAirPumpState( AIR_PUMP_STATE_ON, 100 ); } break; case 1: - // look for air at high level and stop - if ( AIR_TRAP_LEVEL_AIR == getRawLevelSensorState( H16_LEVL ) ) + // look for air at low level and stop + if ( AIR_TRAP_LEVEL_AIR == getRawLevelSensorState( H17_LEVL ) ) { // stop lowering level set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); @@ -253,11 +259,11 @@ case 2: #if 1 // stay low for 5 sec -// if ( ++ctr > ( 5 * 20 ) ) + if ( ++ctr > ( 5 * 20 ) ) { // raise the level set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); - setAirPumpState( AIR_PUMP_STATE_ON, 50 ); + setAirPumpState( AIR_PUMP_STATE_ON, 100 ); sta = 3; } #endif @@ -269,27 +275,28 @@ // stop raising level set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + ctr = 0; sta = 4; } break; case 4: -#if 1 +#if 0 // look for air at high level if ( AIR_TRAP_LEVEL_AIR == getRawLevelSensorState( H16_LEVL ) ) { // start raising level set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); - setAirPumpState( AIR_PUMP_STATE_ON, 50 ); + setAirPumpState( AIR_PUMP_STATE_ON, 100 ); sta = 3; } #endif -#if 0 +#if 1 // stay high for 5 sec if ( ++ctr > ( 5 * 20 ) ) { // lower the level set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); - setAirPumpState( AIR_PUMP_STATE_ON, 50 ); + setAirPumpState( AIR_PUMP_STATE_ON, 100 ); sta = 1; } #endif Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -raa6d45143096dfab776ce2ed7c775cfe2dd6db18 -r82bb2222f791a434d22921e2fe4f5edd7e74776d --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision aa6d45143096dfab776ce2ed7c775cfe2dd6db18) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 82bb2222f791a434d22921e2fe4f5edd7e74776d) @@ -47,6 +47,7 @@ #ifdef TEST_AIR_TRAP_ALPHA_TESTING execFPGA( TRUE ); + execEjectorMotorRamping(); #endif #ifdef TEST_PINCH_VALVES execFPGA( TRUE );