Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r938ebb5c798d4f4a5a7ebf664e7f443f18d2237c -reaeff603027c54d0be5171d519710942672ef623 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 938ebb5c798d4f4a5a7ebf664e7f443f18d2237c) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision eaeff603027c54d0be5171d519710942672ef623) @@ -7,8 +7,8 @@ * * @file Heaters.c * -* @author (last) Vinayakam Mani -* @date (last) 03-Mar-2026 +* @author (last) Michael Garthwaite +* @date (last) 30-Mar-2026 * * @author (original) Vinayakam Mani * @date (original) 11-Oct-2024 @@ -60,10 +60,8 @@ #define D5_HEAT_TX_P_COEFFICIENT 0.05F ///< P Term for AC primary heater control during treatment mode. #define D5_HEAT_TX_I_COEFFICIENT 0.001F ///< I Term for AC primary heater control during treatment mode. -//#define D45_HEAT_P_COEFFICIENT 0.20F ///< P Term for trimmer heater control. -//#define D45_HEAT_I_COEFFICIENT 0.05F ///< I Term for trimmer heater control. -#define D45_HEAT_P_COEFFICIENT 0.05F ///< P Term for trimmer heater control. -#define D45_HEAT_I_COEFFICIENT 0.02F ///< I Term for trimmer heater control. +#define D45_HEAT_P_COEFFICIENT 0.01F ///< P Term for trimmer heater control. +#define D45_HEAT_I_COEFFICIENT 0.005F ///< I Term for trimmer heater control. #define D45_HEAT_TX_INIT_FEED_FORWARD 0.0F ///< Initial Feed forward term for heater control #define HEATERS_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Heaters data publish interval. @@ -84,7 +82,7 @@ //#define D5_HEAT_CONTROL_INTERVAL_MS 30000 /// Primary heater control interval in milli seconds #define D5_HEAT_CONTROL_INTERVAL_MS 3000 /// Primary heater control interval in milli seconds #define D5_HEAT_CONTROL_INTERVAL_COUNT ( D5_HEAT_CONTROL_INTERVAL_MS / TASK_GENERAL_INTERVAL ) ///< Primary heater control interval count. -#define D45_HEAT_CONTROL_INTERVAL_MS ( 1 * MS_PER_SECOND ) ///< Trimmer heater control interval in milli seconds +#define D45_HEAT_CONTROL_INTERVAL_MS ( 3 * MS_PER_SECOND ) ///< Trimmer heater control interval in milli seconds #define D45_HEAT_CONTROL_INTERVAL_COUNT ( D45_HEAT_CONTROL_INTERVAL_MS / TASK_GENERAL_INTERVAL ) ///< Trimmer heater control interval count. #define D5_TARGET_TEMP_ADJUST_LOW_QD_INTERVAL ( 3 * SEC_PER_MIN * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Adjust primary target temperature - outer loop control interval for low Qd. #define D5_TARGET_TEMP_ADJUST_HIGH_QD_INTERVAL ( 1 * SEC_PER_MIN * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Adjust primary target temperature - outer loop control interval for high Qd. @@ -800,7 +798,7 @@ if ( D5_HEAT == heater ) { - measuredTemperature = getD4AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D4_TEMP ); if ( DD_MODE_HEAT != opMode ) { @@ -830,7 +828,7 @@ } else { - measuredTemperature = getD50AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D50_TEMP ); if ( DD_MODE_HEAT != opMode ) { @@ -893,7 +891,7 @@ if ( D5_HEAT == heater ) { // Inlet temperature post heat exchanger - F32 inletTemperature = getD78AverageTemperature(); + F32 inletTemperature = getFilteredTemperatureValue( D78_TEMP ); F32 deltaTempC = targetTemperature - inletTemperature; F32 capDeltaTempC = MAX( deltaTempC, HEATERS_ZERO_DELTA_TEMP_C ); F32 flowrate = ( getTDDialysateFlowrate() + RINSE_PUMP_EST_FLOWRATE ) / LITER_IN_ML ; @@ -914,7 +912,7 @@ targetTemperature = adjustedPrimaryTargetTemp; } #if 1 - measuredTemperature = getD4AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D4_TEMP ); deltaTempC = fabs( targetTemperature - measuredTemperature ); if ( deltaTempC >= D5_HEATER_DEADBAND_CONTROL ) @@ -923,7 +921,7 @@ control[ heater ].data = ctrl; } #else - measuredTemperature = getD4AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D4_TEMP ); deltaTempC = targetTemperature - measuredTemperature; capDeltaTempC = fabs(deltaTempC); d5_p_gain = ( D5_HEATER_PWM_ADJ_SLOPE_FACTOR * getTDDialysateFlowrate() ) + D5_HEATER_PWM_INTERCEPT_FACTOR; @@ -964,7 +962,7 @@ } else { - measuredTemperature = getD50AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D50_TEMP ); ctrl = runPIController( PI_CONTROLLER_ID_D45_HEAT, targetTemperature, measuredTemperature ); control[ heater ].data = ctrl;