@@ -1214,22 +1214,21 @@ void Temperature::min_temp_error(const heater_id_t heater_id) {
1214
1214
}
1215
1215
1216
1216
// update the modeled temperatures
1217
- float tempdelta = temp_hotend[ee].soft_pwm_amount * (HEATER_POWER / 127 * MPC_dT / heatblock_heat_capacity);
1218
- tempdelta += (temp_hotend[ee].modeled_ambient_temp - temp_hotend[ee].modeled_block_temp ) * ambient_xfer_coeff * (MPC_dT / heatblock_heat_capacity);
1219
- temp_hotend[ee].modeled_block_temp += tempdelta;
1220
- const bool steadystate = fabs (tempdelta) < (0.2 * MPC_dT);
1217
+ float blocktempdelta = temp_hotend[ee].soft_pwm_amount * (HEATER_POWER / 127 * MPC_dT / heatblock_heat_capacity);
1218
+ blocktempdelta += (temp_hotend[ee].modeled_ambient_temp - temp_hotend[ee].modeled_block_temp ) * ambient_xfer_coeff * (MPC_dT / heatblock_heat_capacity);
1219
+ temp_hotend[ee].modeled_block_temp += blocktempdelta;
1221
1220
1222
- tempdelta = (temp_hotend[ee].modeled_block_temp - temp_hotend[ee].modeled_sensor_temp ) * (sensor_xfer_coeff * MPC_dT / sensor_heat_capacity);
1223
- temp_hotend[ee].modeled_sensor_temp += tempdelta ;
1221
+ const float sensortempdelta = (temp_hotend[ee].modeled_block_temp - temp_hotend[ee].modeled_sensor_temp ) * (sensor_xfer_coeff * MPC_dT / sensor_heat_capacity);
1222
+ temp_hotend[ee].modeled_sensor_temp += sensortempdelta ;
1224
1223
1225
1224
// Any delta between temp_hotend[ee].modeled_sensor_temp and temp_hotend[ee].celsius is either model
1226
1225
// error diverging slowly or (fast) noise. Slowly correct towards this temperature and noise will average out.
1227
- const float delta_to_apply = (temp_hotend[ee].celsius - temp_hotend[ee].modeled_sensor_temp ) / 10.0 ;
1226
+ const float delta_to_apply = (temp_hotend[ee].celsius - temp_hotend[ee].modeled_sensor_temp ) * (MPC_SMOOTHING * MPC_dT) ;
1228
1227
temp_hotend[ee].modeled_block_temp += delta_to_apply;
1229
1228
temp_hotend[ee].modeled_sensor_temp += delta_to_apply;
1230
1229
1231
1230
// only correct ambient when close to steady state otherwise it can diverge wildly due to modelling errors
1232
- if (steadystate )
1231
+ if (fabs (blocktempdelta + delta_to_apply) < (MPC_STEADYSTATE * MPC_dT) )
1233
1232
temp_hotend[ee].modeled_ambient_temp += delta_to_apply;
1234
1233
1235
1234
float power = 0.0 ;
0 commit comments