heater: fix on blips when the heater is off (#25398)

Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
This commit is contained in:
Alex Klimaj 2025-08-11 18:52:53 -06:00 committed by GitHub
parent 947c71e1cb
commit e05d8f2168
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 8 deletions

View File

@ -201,7 +201,7 @@ void Heater::Run()
// Turn the heater off.
_heater_on = false;
heater_off();
ScheduleDelayed(_controller_period_usec - _controller_time_on_usec);
ScheduleDelayed(CONTROLLER_PERIOD_DEFAULT - _controller_time_on_usec);
} else if (_sensor_accel_sub.update(&sensor_accel)) {
@ -217,9 +217,9 @@ void Heater::Run()
_integrator_value = math::constrain(_integrator_value, -0.25f, 0.25f);
_controller_time_on_usec = static_cast<int>((_param_sens_imu_temp_ff.get() + _proportional_value +
_integrator_value) * static_cast<float>(_controller_period_usec));
_integrator_value) * static_cast<float>(CONTROLLER_PERIOD_DEFAULT));
_controller_time_on_usec = math::constrain(_controller_time_on_usec, 0, _controller_period_usec);
_controller_time_on_usec = math::constrain(_controller_time_on_usec, 0, CONTROLLER_PERIOD_DEFAULT);
if (fabsf(temperature_delta) < TEMPERATURE_TARGET_THRESHOLD) {
_temperature_target_met = true;
@ -229,9 +229,16 @@ void Heater::Run()
_temperature_target_met = false;
}
_heater_on = true;
heater_on();
ScheduleDelayed(_controller_time_on_usec);
if (_controller_time_on_usec > 0) {
// Turn the heater on.
_heater_on = true;
heater_on();
ScheduleDelayed(_controller_time_on_usec);
} else {
// Turn the heater off.
ScheduleDelayed(CONTROLLER_PERIOD_DEFAULT);
}
}
publish_status();
@ -245,7 +252,7 @@ void Heater::publish_status()
status.temperature_sensor = _temperature_last;
status.temperature_target = _param_sens_imu_temp.get();
status.temperature_target_met = _temperature_target_met;
status.controller_period_usec = _controller_period_usec;
status.controller_period_usec = CONTROLLER_PERIOD_DEFAULT;
status.controller_time_on_usec = _controller_time_on_usec;
status.proportional_value = _proportional_value;
status.integrator_value = _integrator_value;

View File

@ -142,7 +142,6 @@ private:
bool _heater_on = false;
bool _temperature_target_met = false;
int _controller_period_usec = CONTROLLER_PERIOD_DEFAULT;
int _controller_time_on_usec = 0;
float _integrator_value = 0.0f;