Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r7e1358a440116fedad5a049d49c2d6f9be85d60e -r1ac16991f665ddf377a4fd17f91c1949b64edf8e --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 7e1358a440116fedad5a049d49c2d6f9be85d60e) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 1ac16991f665ddf377a4fd17f91c1949b64edf8e) @@ -684,8 +684,8 @@ } else { - // If not any of the above modes, just calculate the energy equation based on TDi - currentTemperature = getTemperatureValue( (U32)TEMPSENSORS_INLET_DIALYSATE ); + // If not any of the above modes, just calculate the energy equation based on TRo + currentTemperature = getTemperatureValue( (U32)TEMPSENSORS_OUTLET_REDUNDANT ); dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, currentTemperature, targetFlowLPM, TRUE ); state = HEATER_EXEC_STATE_TRIMMER_CONTROL_TO_TARGET; } @@ -734,7 +734,7 @@ // When the trimmer heater is on, its duty cycle is adjusted at the control interval. For this control check, // dialysate inlet temperature sensor is used rather than the theoretical calculations. - F32 dialysateInletTemperature = getTemperatureValue( (U32)TEMPSENSORS_INLET_DIALYSATE ); + F32 dialysateInletTemperature = getTemperatureValue( (U32)TEMPSENSORS_OUTLET_REDUNDANT ); F32 targetTemperature = heatersStatus[ heater ].targetTempC; F32 targetFlowLPM = getTargetDialysateFlowLPM(); F32 dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, dialysateInletTemperature, targetFlowLPM, TRUE ); Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -ra0c1350fb3266a722f91298dde1e97876081cd2e -r1ac16991f665ddf377a4fd17f91c1949b64edf8e --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision a0c1350fb3266a722f91298dde1e97876081cd2e) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 1ac16991f665ddf377a4fd17f91c1949b64edf8e) @@ -55,6 +55,9 @@ #define DATA_PUBLISH_COUNTER_START_COUNT 5 ///< Data publish counter start count. #define NUM_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK 1 ///< Number of acid and bicarb non-volatile data to check. +#define TRIMMER_HEATER_TARGET_TEMP_GAIN 0.002F ///< Trimmer heater target temperature gain. +#define TRIMMER_HEATER_TARGET_TEMP_OFFSET 0.3F ///< Trimmer heater target temperature offset. + // ********** private data ********** /// Heaters temperature calculation data structure @@ -565,7 +568,7 @@ *************************************************************************/ F32 getTrimmerHeaterTargetTemperature( void ) { - return heatersTempCalc.tempTargetTrimmer; + return heatersTempCalc.tempTargetTrimmer + ( getTargetDialysateFlowLPM() * TRIMMER_HEATER_TARGET_TEMP_GAIN ) + TRIMMER_HEATER_TARGET_TEMP_OFFSET; } /*********************************************************************//** @@ -642,7 +645,7 @@ heatersTempCalc.timeReservoirCycleMS = params.timeReservoirCycleMS; heatersTempCalc.timeReservoirFill2SwitchMS = params.timeReservoirWait2SwitchMS; heatersTempCalc.timeReservoirFillMS = params.timeReservoirFillMS; - heatersTempCalc.tempTargetTrimmer = params.trimmerTargetTemperature; + heatersTempCalc.tempTargetTrimmer = getTrimmerHeaterTargetTemperature(); heatersTempCalc.flowTargetDialysateLPM = params.dialysateFlowLPM; heatersTempCalc.usePriTargetTempEquation = params.usePriTargetTempEquation; @@ -664,7 +667,7 @@ *************************************************************************/ F32 getPrimaryHeaterTargetTemperature( void ) { - F32 tempTargetC = heatersTempCalc.tempTargetTrimmer; + F32 tempTargetC = getTrimmerHeaterTargetTemperature(); F32 priTargetTempC = 0.0F; F32 targetFillVolML = getTargetFillVolumeML(); F32 UFTimeConstant = 0.0F; @@ -695,7 +698,7 @@ * 8. T_primary_target = T_mix_target * (Q_total / Q_RO) - (Q_acid / Q_RO) * T_acid - (Q_bicarb / Q_RO) * T_bicarb */ - tempReservoirUse = heatersTempCalc.tempTargetTrimmer; + tempReservoirUse = getTrimmerHeaterTargetTemperature(); heatersTempCalc.tempReservoirEndFill = tempReservoirUse - ( heatersTempCalc.timeReservoirFill2SwitchMS * RsrvrTauCPerMS ); heatersTempCalc.tempReservoir0 = heatersTempCalc.tempReservoirEndFill - ( ( heatersTempCalc.timeReservoirFillMS * HALF ) * RsrvrTauCPerMS ); @@ -709,7 +712,7 @@ } else { - tempTargetC = heatersTempCalc.tempTargetTrimmer + RESERVOIR_EXTRA_TEMPERATURE; + tempTargetC = getTrimmerHeaterTargetTemperature() + RESERVOIR_EXTRA_TEMPERATURE; } }