проблема в Настройке PID регулятора

Dr.Seldom

✩✩✩✩✩✩✩
6 Фев 2022
2
0
Собираю инкубатор, все работает но есть проблема в подборе параметров.
Для управления нагревом взял код
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);
}
сейчас параметры P = 11000
I =6.2
D =1.1

Самое интересное, что система выходит на нужный режим через 21 час
подбор параметром по предложенному варианту
  • kP = 0.6 * kP1
  • kI = kP / T * 2 * dt
  • kD = kP * T / 8 / dt
ни к чему не привели, P=6600 I=488,8889 D=61875 приводят к жуткому перерегулированию, и вероятности того яйца в инкубаторе запекутся.
Для люто инерционных систем длительный выход на заданную температуру норм или что-то можно поправить?
 

Sana956

★✩✩✩✩✩✩
5 Мар 2022
61
22
Возможно, будет иметь смысл разгонный промежуток, когда температура будет доводиться до целевой минус пару градусов, а затем подключаться PID. Подумай так же в сторону PI регулятора (без D составляющей.)
 

Dr.Seldom

✩✩✩✩✩✩✩
6 Фев 2022
2
0
Пробовал такой вариант тоже, разогрев на максимуме и за пару градусов включать пид с указанными выше параметрами - перегрев большой.
в итоге остановился на P=11000 I=6,20 D=1.1 , нагревается долго, но без критичного перегрева.
пробовал просто Р регулятор. Интересно получается, в течение получаса температура фиксируется на 37.63 плюс\минус 0.01 градуса в пределах Р от 5000 до 15000. Разница только в скорости нагрева и максимума температуры выше заданной.