Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rc90f3d61bde2a2b47d1048635be4dadf282e2195 -rbfd1ad206360b585a01b75ce2310bfba3ffd9e1f --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision c90f3d61bde2a2b47d1048635be4dadf282e2195) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision bfd1ad206360b585a01b75ce2310bfba3ffd9e1f) @@ -58,8 +58,8 @@ #define D5_HEAT_TX_P_COEFFICIENT 0.034F ///< 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.03F //0.01F ///< P Term for trimmer heater control. -#define D45_HEAT_I_COEFFICIENT 0.0005F ///< I Term for trimmer heater control. +#define D45_HEAT_P_COEFFICIENT 0.05F //0.01F ///< P Term for trimmer heater control. +#define D45_HEAT_I_COEFFICIENT 0.0025F ///< I Term for trimmer heater control. #define D45_HEAT_TX_INIT_FEED_FORWARD 0.0F ///< Initial Feed forward term for heater control #define D45_HEAT_HIGHER_QD_P_COEFFICIENT 0.2F ///< P Term for trimmer heater control for higher dialysate flow rate. #define D45_HEAT_HIGHER_QD_I_COEFFICIENT 0.05F ///< I Term for trimmer heater control for higher dialysate flow rate. @@ -80,7 +80,7 @@ #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 ( 3 * MS_PER_SECOND ) ///< Trimmer heater control interval in milli seconds +#define D45_HEAT_CONTROL_INTERVAL_MS ( 1 * 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 D45_HEATER_DEADBAND_CONTROL 0.1F ///< Trimmer heater dead band range for control. #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. @@ -98,8 +98,13 @@ #define RINSE_PUMP_EST_FLOWRATE 110 ///< Estimated rinse pump flow rate #define DATA_PUBLISH_COUNTER_START_COUNT 70 ///< Data publish counter start count. -#define D5_HEAT_OUT_TX_P_COEFFICIENT 2.00F //0.5F ///< P Term for AC primary heater outer loop control during treatment mode. -#define D5_HEAT_OUT_TX_I_COEFFICIENT 0.04F //0.08F //0.4F ///< I Term for AC primary heater outer loop control during treatment mode. +#ifndef __USE_D1_TEMP_ +#define D5_HEAT_OUT_TX_P_COEFFICIENT 0.5F ///< P Term for AC primary heater outer loop control during treatment mode. +#define D5_HEAT_OUT_TX_I_COEFFICIENT 0.4F ///< I Term for AC primary heater outer loop control during treatment mode. +#else +#define D5_HEAT_OUT_TX_P_COEFFICIENT 0.75F //2.00F //0.5F ///< P Term for AC primary heater outer loop control during treatment mode. +#define D5_HEAT_OUT_TX_I_COEFFICIENT 0.1F //0.04F //0.08F //0.4F ///< I Term for AC primary heater outer loop control during treatment mode. +#endif #define D5_HEAT_OUT_MIN_DELTA_TEMP 0.0F ///< Minimum Delta temperature that can be adjusted for D5 control #define D5_HEAT_OUT_MAX_DELTA_TEMP 50.0 ///< Maximum Delta temperature that can be adjusted for D5 control #define D5_HEAT_OUT_DEADBAND_CONTROL 0.1F ///< Heater outer loop dead band range for control. @@ -281,11 +286,11 @@ // Initialize the trimmer heater PI controller initializePIController( PI_CONTROLLER_ID_D45_HEAT, HEATERS_MIN_DUTY_CYCLE, D45_HEAT_P_COEFFICIENT, D45_HEAT_I_COEFFICIENT, - HEATERS_MIN_DUTY_CYCLE, DC_HEATER_MAX_DUTY_CYCLE, TRUE, D45_HEAT_TX_INIT_FEED_FORWARD ); + HEATERS_MIN_DUTY_CYCLE, DC_HEATER_MAX_DUTY_CYCLE, FALSE, D45_HEAT_TX_INIT_FEED_FORWARD ); // Initialize the trimmer heater PI controller for Higher dialysate flow rate initializePIController( PI_CONTROLLER_ID_D45_HEAT_HIGHER_QD, HEATERS_MIN_DUTY_CYCLE, D45_HEAT_HIGHER_QD_P_COEFFICIENT, D45_HEAT_HIGHER_QD_I_COEFFICIENT, - HEATERS_MIN_DUTY_CYCLE, DC_HEATER_MAX_DUTY_CYCLE, TRUE, D45_HEAT_TX_INIT_FEED_FORWARD ); + HEATERS_MIN_DUTY_CYCLE, DC_HEATER_MAX_DUTY_CYCLE, FALSE, D45_HEAT_TX_INIT_FEED_FORWARD ); #ifdef __HEATERS_DEBUG__ for ( i = 0; i < NUM_OF_CONTROLLER_SIGNAL; i++ ) @@ -842,7 +847,6 @@ F32 absDeltaTempC = 0.0F; F32 capDeltaTempC = 0.0F; F32 flowrate = 0.0F; - F32 dutyCycle = 0.0F; // Update primary heater target temperature at defined interval if ( D5_HEAT == heater ) @@ -899,16 +903,9 @@ measuredTemperature = getFilteredTemperatureValue( D50_TEMP ); deltaTempC = targetTemperature - measuredTemperature; absDeltaTempC = fabs( deltaTempC ); - capDeltaTempC = MAX( deltaTempC, HEATERS_ZERO_DELTA_TEMP_C ); - flowrate = getTDDialysateFlowrate() / LITER_IN_ML ; - dutyCycle = calculateDutyCycle( flowrate, capDeltaTempC, TRIMMER_HEATER_MAX_PWR_WATTS, DC_HEATER_EFFICIENCY, - HEATERS_MIN_DUTY_CYCLE, DC_HEATER_MAX_DUTY_CYCLE ); if ( flowrate >= D45_HEAT_HIGH_DIAL_FLOW_RATE ) { - //Update the calculated feed forward value - setPIControllerFeedForward( PI_CONTROLLER_ID_D45_HEAT_HIGHER_QD, dutyCycle ); - if ( absDeltaTempC > D45_HEATER_DEADBAND_CONTROL ) { ctrl = runPIController( PI_CONTROLLER_ID_D45_HEAT_HIGHER_QD, targetTemperature, measuredTemperature ); @@ -917,9 +914,6 @@ } else { - //Update the calculated feed forward value - setPIControllerFeedForward( PI_CONTROLLER_ID_D45_HEAT, dutyCycle ); - if ( absDeltaTempC > D45_HEATER_DEADBAND_CONTROL ) { ctrl = runPIController( PI_CONTROLLER_ID_D45_HEAT, targetTemperature, measuredTemperature );