Настройка PID алгоритма нагрева жидкости

Продолжение статьи про пивоварню из стиральной машины

После того как все собрано и запрограммировано, самое время настроить PID алгоритм.

Здесь я напишу как это делается в общем и покажу как это делал я:

Как это делается

Надо подстроить коэффициенты Kp, Ki и Kd под конкретный объект (именно ваш нагреватель, котел, объем воды и т.д.). Самый простой способ настройки таков:

  1. Объекты с медленно меняющимся контролируемым параметром (температурой в моем случае) обычно работают с большим Kp, малым или нулевым Ki и нулевым Kd. В итоге должен получиться именно такой результат.
  2.  Начинаем с малого Kp, нулевого Ki и Kd. Насколько малый? В данный момент не скажешь точно, но можно взять минимальное значение при котором нагреватель будет всегда включен при разнице между заданной и текущей температурой в 10 градусов.
  3. Удваиваем Kp до тех пор, пока колебания не станут периодичными. Затем берем Kp в 2 раза меньше, чтобы колебания были либо стабильные, либо вообще отсутствовали.
  4. Устанавливаем небольшой Ki. Удваиваем его пока не начнутся колебания, затем берем его в 2 раза меньше, чтобы колебаний не было.
Если что-то не получается - бежим читать интернеты (я читал здесь) либо делаем все путем проб и ошибок (зная что будет большое значение Kp, малое Ki и нулевое Kd).

Как это делал я

  1. Заливаем код с режимом PLOT, подключаем Arduino к ПК и запускаем Serial plotter в Arduino IDE. Включаем нагрев и видим ползущий вверх график:

    А также медленно нагревающуюся воду...
  2. Рано или поздно текущая температура подойдет к заданной и возможно начнет колебаться вокруг нее. Если уже есть колебания то снижаем Kp.

    Setpoint = 40C
  3. Если же температура поддерживается, удваиваем Kp пока не график не станет колебаться. Затем ополовиваем Kp. У меня это получилось огромной цифрой - 16000

    Первая попытка угадать Kp - 2000. Температура держится стабильно

    Вторая попытка - 4к. То же.

    Дальше пошел итеративный процесс повышения Kp

    На Kp=16к мне стало скучно и я решил помешать воду рукой.
    Оттуда и проседание.

    На 16k уже видно небольние нестабильности.
    На Kp=32k показания начали колебаться.
  4. Теперь подстраиваем Ki. Начнем со 100 и посмотрим как он будет влиять на процесс.

    Если при чисто пропорциональном регулировании на одном Kp было четкое включение-отключение нагревателя вокруг установленной температуры, то теперь при проседании температуры ВОЗЛЕ установленной начинает потихоньку включаться обогрев. Например, при заданной темп. 50С и снижении показаний от 50.5С уже на 50.1С начинается небольшой обогрев. При чисто пропорциональном нагреве вода бы остывала до 50, и только потом начался бы нагрев.

    На графике не видно, но чем больше Ki тем раньше начинает компенсироваться потеря температуры.
    Теперь весь процесс настройки сведен к подстройке коэффициента Ki. Лично мне подошел 3000.
  5. Мои поздравления, теперь PID регулятор полностью настроен и готов к работе!

Comments