Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -r74be223d47ea7bb0ac7d814e74d3627d830a5fac -r358e32a9fb25a6929fc5bbd7ee1d8ed2c4b69920 --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 74be223d47ea7bb0ac7d814e74d3627d830a5fac) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 358e32a9fb25a6929fc5bbd7ee1d8ed2c4b69920) @@ -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;