Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r1a1aa235cfb5d13555d8cf943825cd99e36c97fb -r6b96f1a18ab2f93068daddbf24178fbbae7cc570 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 1a1aa235cfb5d13555d8cf943825cd99e36c97fb) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 6b96f1a18ab2f93068daddbf24178fbbae7cc570) @@ -42,13 +42,13 @@ #define MAX_SETTABLE_BLOOD_FLOW_RATE 700 ///< Maximum settable blood flow rate (in mL/min). -#define BP_CONTROL_INTERVAL_SEC 10 ///< Blood pump control interval (in seconds). +#define BP_CONTROL_INTERVAL_SEC 2 ///< Blood pump control interval (in seconds). /// Interval (ms/task time) at which the blood pump is controlled. static const U32 BP_CONTROL_INTERVAL = ( BP_CONTROL_INTERVAL_SEC * MS_PER_SECOND / TASK_GENERAL_INTERVAL ); -#define BP_P_COEFFICIENT 0.0001F ///< P term for blood pump control -#define BP_I_COEFFICIENT 0.00075F ///< I term for blood pump control +#define BP_P_COEFFICIENT 0.5F ///< P term for blood pump control +#define BP_I_COEFFICIENT 1.5F ///< I term for blood pump control #define BP_HOME_SPEED 400 ///< Target pump speed (in RPM) for homing. #define BP_HOME_TIMEOUT_MS ( 12 * MS_PER_SECOND ) ///< Maximum time (in ms) allowed for homing to complete. @@ -277,7 +277,6 @@ bloodPumpDirectionSet = dir; bloodPumpControlMode = mode; bloodPumpRampToSpeedRPM = BP_RPM_FROM_RATE( flowRate ); - isBloodPumpOn = ( 0 == flowRate ? FALSE : isBloodPumpOn ); if ( BLOOD_PUMP_CONTROL_TO_TARGET_STATE == bloodPumpState ) { @@ -361,7 +360,7 @@ void signalBloodPumpHardStop( void ) { targetBloodFlowRate = 0; - bloodPumpState = BLOOD_PUMP_OFF_STATE; // TODO SEAN: Are you changing the state directly here? + bloodPumpState = BLOOD_PUMP_OFF_STATE; bloodPumpSetSpeedRPM = 0; isBloodPumpOn = FALSE; bpControlTimerCounter = 0; @@ -714,21 +713,14 @@ { F32 tgtFlow = (F32)targetBloodFlowRate; F32 actFlow = getMeasuredBloodFlowRate(); - F32 newRPM = bloodPumpSetSpeedRPM; // TODO - don't set speed here when control is implemented below. + F32 newRPM= runPIController( PI_CONTROLLER_ID_BLOOD_FLOW, tgtFlow, actFlow ); - newRPM = runPIController( PI_CONTROLLER_ID_BLOOD_FLOW, tgtFlow, actFlow ); - newRPM = ( newRPM < 0.0F ? 0.0F : newRPM ); bloodPumpSetSpeedRPM = (U32)((S32)(newRPM)); setPeristalticPumpSetSpeed( BP_SIGNED_SET_SPEED ); } bpControlTimerCounter = 0; } - if ( FALSE == isBloodPumpOn ) - { - result = BLOOD_PUMP_OFF_STATE; - } - return result; } Index: firmware/App/Drivers/RotaryValve.c =================================================================== diff -u -r101c03d165ec613ba384bdad53100ba7bdda1e2c -r6b96f1a18ab2f93068daddbf24178fbbae7cc570 --- firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision 101c03d165ec613ba384bdad53100ba7bdda1e2c) +++ firmware/App/Drivers/RotaryValve.c (.../RotaryValve.c) (revision 6b96f1a18ab2f93068daddbf24178fbbae7cc570) @@ -116,7 +116,7 @@ if ( ( status & VALVE_GEN_FAULT_BIT_MASK ) != 0 ) { - //SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_PINCH_VALVE_FAULT, i, status ) + //SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_PINCH_VALVE_FAULT, i, status ) TODO - resolve issue and restore alarm } } } Index: firmware/App/Services/SystemCommTD.c =================================================================== diff -u -rae3240cfb3237c01472168fee0bfc6beb34e0ed9 -r6b96f1a18ab2f93068daddbf24178fbbae7cc570 --- firmware/App/Services/SystemCommTD.c (.../SystemCommTD.c) (revision ae3240cfb3237c01472168fee0bfc6beb34e0ed9) +++ firmware/App/Services/SystemCommTD.c (.../SystemCommTD.c) (revision 6b96f1a18ab2f93068daddbf24178fbbae7cc570) @@ -181,9 +181,10 @@ *************************************************************************/ BOOL uiCommunicated( void ) { -#ifdef TEST_DEBUGGER +#ifdef TEST_PROCESS_TASKS_WO_UI uiDidCommunicate = TRUE; #endif + return uiDidCommunicate; } Index: firmware/App/TDCommon.h =================================================================== diff -u -r2d40deb50ffb27667c3e57f427b1e197e163910e -r6b96f1a18ab2f93068daddbf24178fbbae7cc570 --- firmware/App/TDCommon.h (.../TDCommon.h) (revision 2d40deb50ffb27667c3e57f427b1e197e163910e) +++ firmware/App/TDCommon.h (.../TDCommon.h) (revision 6b96f1a18ab2f93068daddbf24178fbbae7cc570) @@ -34,7 +34,8 @@ // #define TASK_TIMING_OUTPUT_ENABLED 1 // Re-purposes alarm lamp pins for task timing // #define TEST_AIR_TRAP_ALPHA_TESTING 1 // Alpha unit air trap testing // #define TEST_PINCH_VALVES 1 // Alpha unit pinch valve testing -// #define TEST_DEBUGGER 1 // Alpha test with debugger +// #define TEST_DEBUGGER 1 // Testing with debugger - prevents FPGA comm alarms caused by breakpoints +// #define TEST_PROCESS_TASKS_WO_UI 1 // Allow task processing even when UI not connected // #define TEST_UI_ONLY 1 // Alpha test with TD and UI only - no DD // #define TEST_NO_PINCH_VALVES 1 // Alpha test with no pinch valve functionality // #define TEST_USE_OFF_AS_STOP_BUTTON 1 // Alpha test re-purposing off button as a stop button Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r4a65377085c075e15056b4157e17e7ed0ec15301 -r6b96f1a18ab2f93068daddbf24178fbbae7cc570 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 4a65377085c075e15056b4157e17e7ed0ec15301) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 6b96f1a18ab2f93068daddbf24178fbbae7cc570) @@ -160,6 +160,9 @@ static BOOL setValvePos = FALSE; static BOOL homeBPCmd = FALSE; static BOOL bpHomed = FALSE; + static BOOL bpRunCmd = FALSE; + static BOOL bpStopCmd = FALSE; + static U32 bpSetPt = 300; static VALVE_POSITION_T setPos = VALVE_POSITION_A_INSERT_EJECT; // VALVE_POSITION_B_OPEN VALVE_POSITION_C_CLOSE VALVE_POSITION_A_INSERT_EJECT execValvesController(); @@ -177,6 +180,18 @@ homeBPCmd = FALSE; } + if ( TRUE == bpRunCmd ) + { + setBloodPumpTargetFlowRate( bpSetPt, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + bpRunCmd = FALSE; + } + else if ( TRUE == bpStopCmd ) + { + setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + bpStopCmd = FALSE; + //signalBloodPumpHardStop(); + } + if ( TRUE == homeValveCmd ) { homeValve( H1_VALV, FALSE, FALSE );