Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -re4cc37257141c5227186ac6d8ca3d6c87d009042 -rc459ad58ef5420db7440fb5478d4b19351d65bcd --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision e4cc37257141c5227186ac6d8ca3d6c87d009042) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision c459ad58ef5420db7440fb5478d4b19351d65bcd) @@ -150,6 +150,10 @@ static OVERRIDE_F32_T dialOutPumpMCCurrentmA = { 0.0, 0.0, 0.0, 0 }; ///< Measured dialysate outlet pump motor controller current. static OVERRIDE_F32_T dialOutPumpRotorSpeedRPM = { 0.0, 0.0, 0.0, 0 }; ///< Measured dialysate outlet pump rotor speed. static OVERRIDE_F32_T dialOutPumpSpeedRPM = { 0.0, 0.0, 0.0, 0 }; ///< Measured dialysate outlet pump motor speed. +#if 1 // TODO - remove test code +static F32 ufMeasuredRate = 0.0; +static F32 prevMeasuredVolumes[2] = { 0.0, 0.0 }; +#endif static U32 dopControlTimerCounter = 0; ///< Timer counter to determine when to control dialysate outlet pump. static U32 dopCurrErrorDurationCtr = 0; ///< Timer counter for motor current error persistence. @@ -597,6 +601,12 @@ F32 totVol = getTotalMeasuredUFVolumeInMl(); F32 offsetPWMDutyCyclePct; +#if 1 // TODO - remove test code + ufMeasuredRate = ( totVol - prevMeasuredVolumes[1] ) * 6.0; // calculate UF rate based on change in volume over last 10 seconds + prevMeasuredVolumes[1] = prevMeasuredVolumes[0]; // update last 2 volumes for next time + prevMeasuredVolumes[0] = totVol; +#endif + // Get new PWM offset from PI controller offsetPWMDutyCyclePct = runPIController( PI_CONTROLLER_ID_ULTRAFILTRATION, refVol, totVol ); // Add PWM offset to DPi PWM mirror for our new DPo PWM @@ -702,7 +712,11 @@ dialOutBroadCastVariables.refUFVolMl = getTotalTargetDialOutUFVolumeInMl(); dialOutBroadCastVariables.measUFVolMl = getTotalMeasuredUFVolumeInMl(); dialOutBroadCastVariables.measRotSpdRPM = getMeasuredDialOutPumpRotorSpeed(); +#if 1 // TODO - remove test code + dialOutBroadCastVariables.measSpdRPM = ufMeasuredRate; +#else dialOutBroadCastVariables.measSpdRPM = getMeasuredDialOutPumpSpeed(); +#endif dialOutBroadCastVariables.measMCSpdRPM = getMeasuredDialOutPumpMCSpeed(); dialOutBroadCastVariables.measMCCurrmA = getMeasuredDialOutPumpMCCurrent(); dialOutBroadCastVariables.setPWMpct = dialOutPumpPWMDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR;