Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -r597c1b8b790357bdcacb3a50ae4b5e4278ba7a88 -rab7c459d5cd92f74babd8ca1ce8aa47354570728 --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 597c1b8b790357bdcacb3a50ae4b5e4278ba7a88) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision ab7c459d5cd92f74babd8ca1ce8aa47354570728) @@ -38,10 +38,10 @@ */ // ********** private definitions ********** - -#define DIALYSATE_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the dialysate pump data is published on the CAN bus. +//TODO : Testing - changing control interval +//#define DIALYSATE_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the dialysate pump data is published on the CAN bus. +#define DIALYSATE_PUMP_DATA_PUB_INTERVAL ( 50 / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the dialysate pump data is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 60 ///< Data publish counter start count. - #define DP_CONTROL_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate pump is controlled. //#define DP_CONTROL_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate pump is controlled. #define DIALYSATE_PUMP_CONTROL_RUN 0x01 ///< Dialysate pump control run pump. @@ -68,20 +68,18 @@ #define SPENT_DIALYSATE_TARGET_PRESSURE_PSI 29.0F ///< Spent dialysate pump recommended pressure(PDs) in psi. #define SPENT_DIALYSATE_MAX_PRESSURE_PSI 30.0F ///< Spent dialysate pump maximum allowed (PDs) pressure in psi. #define DIALYSATE_PUMP_MIN_PRESSURE_PSI 4.0F ///< Minimum dialysate pump pressure in psi. -#define FRESH_DIAL_PUMP_CNTRL_MAX_PRESSURE_PSI 25.0F ///< Fresh dialysate pump control maximum pressure in psi. -#define SPENT_DIAL_PUMP_CNTRL_MAX_PRESSURE_PSI 29.0F ///< Spent dialysate pump control maximum pressure in psi. -#define FRESH_DIAL_OPEN_CNTRL_PRES_PSI 25.0F ///< fresh dialysate pump pressure in psi at the end of open loop control. -#define SPENT_DIAL_OPEN_CNTRL_PRES_PSI 29.0F ///< spent dialysate pump pressure in psi at the end of open loop control. +#define FRESH_DIAL_OPEN_LOOP_SPEED_RPM 2000.0F ///< fresh dialysate pump open loop speed to meet target speed. +#define SPENT_DIAL_OPEN_LOOP_SPEED_RPM 2500.0F ///< spent dialysate pump open loop speed to meet target speed. #define DIALYSATE_PUMP_SPEED_ZERO_RPM 0 ///< Dialysate pump zero RPM speed. #define SPEED_COUNT_ZERO 0 ///< Measured speed count zero check. #define SPEED_CONV_FACTOR 1500000 ///< Measured speed count conversion to RPM #define D12_PRES_TO_SPD_CONV_FACTOR 106.0F ///< Pressure to speed conversion factor for fresh dialysate pump control. #define D48_PRES_TO_SPD_CONV_FACTOR 91.4F ///< Pressure to speed conversion factor for fresh dialysate pump control. -#define D12_PUMP_P_COEFFICIENT 0.20F ///< P term for fresh dialysate pump delta pressure control. -#define D12_PUMP_I_COEFFICIENT 1.0F ///< I term for fresh dialysate pump delta pressure control. -#define D48_PUMP_P_COEFFICIENT 0.20F ///< P term for spent dialysate pump delta pressure control. -#define D48_PUMP_I_COEFFICIENT 1.0F ///< I term for spent dialysate pump delta pressure control. +#define D12_PUMP_P_COEFFICIENT 20.0F ///< P term for fresh dialysate pump delta pressure control. +#define D12_PUMP_I_COEFFICIENT 60.0F ///< I term for fresh dialysate pump delta pressure control. +#define D48_PUMP_P_COEFFICIENT 20.0F ///< P term for spent dialysate pump delta pressure control. +#define D48_PUMP_I_COEFFICIENT 60.0F ///< I term for spent dialysate pump delta pressure control. #define MAX_ALLOWED_RPM_OUT_OF_RANGE 300 ///< Maximum allowed RPM out of range from target RPM in open loop. #define PUMP_TRANS_TO_RAMP_SPEED_THRESHOLD 20.0F ///< Speed change that alters the state to ramp during control state. @@ -133,7 +131,6 @@ static OVERRIDE_U32_T dialysatePumpDataPublishInterval = { DIALYSATE_PUMP_DATA_PUB_INTERVAL, DIALYSATE_PUMP_DATA_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish dialysate pump data to CAN bus. - //static DD_DIALYSATE_PUMP_CAL_RECORD_T dialysatePumpCalRecord; ///< Dialysate pump calibration record. static DIALYSATE_PUMP_DATA_T dialysatePumps[ NUM_OF_DIALYSATE_PUMPS ]; ///< Array of dialysate pumps data structure. static OVERRIDE_F32_T pumpTargetSpeed[ NUM_OF_DIALYSATE_PUMPS ]; ///< Target dialysate pumps' speed (mL/min).forward direction only, hence positive speed. @@ -213,12 +210,12 @@ pumpTargetPressure[D48_PUMP].override = OVERRIDE_RESET; // Initialize the fresh dialysate pump PI controller - initializePIController( PI_CONTROLLER_ID_D12_PUMP, FRESH_DIAL_OPEN_CNTRL_PRES_PSI, D12_PUMP_P_COEFFICIENT, D12_PUMP_I_COEFFICIENT, - DIALYSATE_PUMP_MIN_PRESSURE_PSI, FRESH_DIAL_PUMP_CNTRL_MAX_PRESSURE_PSI ); + initializePIController( PI_CONTROLLER_ID_D12_PUMP, FRESH_DIAL_OPEN_LOOP_SPEED_RPM, D12_PUMP_P_COEFFICIENT, D12_PUMP_I_COEFFICIENT, + MIN_DIALYSATE_PUMP_RPM, MAX_DIALYSATE_PUMP_RPM ); // Initialize spent dialysate pump PI controller - initializePIController( PI_CONTROLLER_ID_D48_PUMP, SPENT_DIAL_OPEN_CNTRL_PRES_PSI, D48_PUMP_P_COEFFICIENT, D48_PUMP_I_COEFFICIENT, - DIALYSATE_PUMP_MIN_PRESSURE_PSI, SPENT_DIAL_PUMP_CNTRL_MAX_PRESSURE_PSI ); + initializePIController( PI_CONTROLLER_ID_D48_PUMP, SPENT_DIAL_OPEN_LOOP_SPEED_RPM, D48_PUMP_P_COEFFICIENT, D48_PUMP_I_COEFFICIENT, + MIN_DIALYSATE_PUMP_RPM, MAX_DIALYSATE_PUMP_RPM ); // Init the dialysate pump with valid PWM while motor is disabled. // when enable triggers, we dont want invlid RPM set that triggers alarm in motor controller. @@ -336,11 +333,11 @@ //Reset PI Controller if ( D12_PUMP == pumpId ) { - resetPIController( PI_CONTROLLER_ID_D12_PUMP, FRESH_DIAL_OPEN_CNTRL_PRES_PSI ); + resetPIController( PI_CONTROLLER_ID_D12_PUMP, FRESH_DIAL_OPEN_LOOP_SPEED_RPM ); } else { - resetPIController( PI_CONTROLLER_ID_D48_PUMP, SPENT_DIAL_OPEN_CNTRL_PRES_PSI ); + resetPIController( PI_CONTROLLER_ID_D48_PUMP, SPENT_DIAL_OPEN_LOOP_SPEED_RPM ); } } @@ -412,7 +409,6 @@ BOOL isCurrentOutOfRange = FALSE; DIALYSATE_PUMPS_T pumpId; - // Update the paramerters dialysatePumpMeasuredCurrentA[ D12_PUMP ].data = (F32)d12Current * CURRENT_CONVERSION_COEFF; dialysatePumpMeasuredCurrentA[ D48_PUMP ].data = (F32)d48Current * CURRENT_CONVERSION_COEFF; @@ -671,11 +667,11 @@ { if ( D12_PUMP == pumpId ) { - resetPIController( PI_CONTROLLER_ID_D12_PUMP, FRESH_DIAL_OPEN_CNTRL_PRES_PSI ); + resetPIController( PI_CONTROLLER_ID_D12_PUMP, FRESH_DIAL_OPEN_LOOP_SPEED_RPM ); } else { - resetPIController( PI_CONTROLLER_ID_D48_PUMP, SPENT_DIAL_OPEN_CNTRL_PRES_PSI ); + resetPIController( PI_CONTROLLER_ID_D48_PUMP, SPENT_DIAL_OPEN_LOOP_SPEED_RPM ); } state = DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE; } @@ -762,13 +758,8 @@ { F32 measuredPressure = getFilteredPressure( D18_PRES ); F32 targetPressure = getDialysatePumpTargetPressure( pumpId ); - F32 newSpeed = 0; -#if 1 - F32 control = runPIController( PI_CONTROLLER_ID_D12_PUMP, targetPressure, measuredPressure ); - //TODO : get the equivalent speed for the given control - newSpeed = control * D12_PRES_TO_SPD_CONV_FACTOR; -#endif + F32 control = runPIController( PI_CONTROLLER_ID_D12_PUMP, targetPressure, measuredPressure ); #ifdef __PITEST__ U32 i; @@ -788,11 +779,7 @@ newSpeed = dialysatePumps[ pumpId ].currentPumpSpeed - DIALYSATE_PUMP_SPEED_INCREMENT; } #endif - //Apply speed limit - newSpeed = MIN( newSpeed, MAX_DIALYSATE_PUMP_RPM ); - newSpeed = MAX( newSpeed, MIN_DIALYSATE_PUMP_RPM ); - - dialysatePumps[ pumpId ].currentPumpSpeed = newSpeed; + dialysatePumps[ pumpId ].currentPumpSpeed = control; //Set fresh dialyate pump speed setFPGAD12PumpSpeed( (U16)dialysatePumps[ pumpId ].currentPumpSpeed ); @@ -801,11 +788,8 @@ { F32 measuredPressure = getFilteredPressure( D51_PRES ); F32 targetPressure = getDialysatePumpTargetPressure( pumpId ); - F32 newSpeed = 0; -#if 1 + F32 control = runPIController( PI_CONTROLLER_ID_D48_PUMP, targetPressure, measuredPressure ); - newSpeed = control * D48_PRES_TO_SPD_CONV_FACTOR; -#endif #ifdef __PITEST__ U32 i; @@ -825,11 +809,7 @@ newSpeed = dialysatePumps[ pumpId ].currentPumpSpeed - DIALYSATE_PUMP_SPEED_INCREMENT; } #endif - //Apply speed limit - newSpeed = MIN( newSpeed, MAX_DIALYSATE_PUMP_RPM ); - newSpeed = MAX( newSpeed, MIN_DIALYSATE_PUMP_RPM ); - - dialysatePumps[ pumpId ].currentPumpSpeed = newSpeed; + dialysatePumps[ pumpId ].currentPumpSpeed = control; //Set spent dialyate pump speed setFPGAD48PumpSpeed( (U16)dialysatePumps[ pumpId ].currentPumpSpeed );