Я делаю инкубатор. Использую код PID регулятора (не библиотеку) GyverPID (https://alexgyver.ru/gyverpid/).
Иногда нагреватель нужно временно выключать. Так вот вопрос: как можно временно выключить регулятор, чтобы при включении не появилась какая-нибудь ошибка? Подозреваю, что если просто временно не передавать регулятору данные и не использовать его выходное значение, то при включении можно резко перегреть систему из-за интегральной состовляющей.
C++:
int computePID(float input, float setpoint, float kp, float ki, float kd, float dt, int minOut, int maxOut) {
float err = setpoint - input;
static float integral = 0, prevErr = 0;
integral = constrain(integral + (float)err * dt * ki, minOut, maxOut);
float D = (err - prevErr) / dt;
prevErr = err;
return constrain(err * kp + integral + D * kd, minOut, maxOut);
}