Настройка PID регулятора

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем привет!

Имеется вот такой нижний подогрев: http://alli.pub/64zoci

Хочу сделать для него PID контроллер. Управление происходит диммированием. Датчик температуры: PT100 +  MAX31865. Датчик вставлен внутрь, максимально близко к нагревателю. Для PID использую библиотеку Гайвера: https://github.com/GyverLibs/GyverPID

Все время получаю "перелет" при включении, потом, конечно, система стабилизируется, но в начале перелет по температуре просто критический. Нижний подогрев имеет просто огромную инерцию, и после отключения нагрева температура продолжает расти. При выставленной температуре в 60 градусов "перелет" получается до 100-120 градусов. Если выставить температуру 100 градусов, то перелет получается до 150градусов
Второй день бьюсь, не могу подобрать нужные параметры.
 
Красный - включение нагрева (уровень диммирования)
желтый - заданная температура
синий - реальная температура
 
настройка для этого графика:
GyverPID pid(5, 0.1, 5);

Как сделать так чтобы в начале не было этого перелета по температуре? Какие параметры настраивать?

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Использовать другую, отличную от Гайвера, библиотеку и почитать её описание.

Гайвер не особо радует описанием своих опусов.

forfrends
Offline
Зарегистрирован: 24.02.2015

Вопрос не в том какую библиотеку использовать, я пробовал разные, все сводится к правильной настройке  P, I, D, составляющих.
Никак не могу подобрать правильные коэффициенты чтобы не было раскачки системы и перелета по температуре при первом включении.

 

Smarodina
Offline
Зарегистрирован: 03.02.2018

попробуй P 0.8 I 0.01 D 4-6 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а что рассчитал автоматический калибровщик?

rkit
Offline
Зарегистрирован: 23.11.2016

1. Составить формулу, высчитывающую скважность, соответствующую заданной мощности с поправкой на температуру, раз уж ты пытаешься регулировать ptc-элемент.

2. Заложить профиль нагрева, а не ступеньку, как у тебя.

И только после этого  можно будет начинать калибровать PID

И, кстати говоря, точную температуру можно снимать прямо с элемента, без лишних резисторов.

forfrends
Offline
Зарегистрирован: 24.02.2015

Smarodina пишет:

попробуй P 0.8 I 0.01 D 4-6 

Попробовал 0.8, 0.01, 4
Вот графики:

       

Выглядит на много лучше чем было у меня до этого, но нагрев крайне медленный, минут 10-15 ушо на нагрев до 60 градусов, и все равно был небольшой перелет до 70 градусов (фото 6-7), после 8-го фото температура стабилизировалась на отметке 58-59 градусов.

Если D поставить 6, то график плавно подымается и стабилизируется на 65 градусах, потом очень медленно ползет вниз. Через 15 минут после старта было 63 градуса. Дальше смотреть не стал.
Попробовал те же настройки, только выставил 120 градусов - график поднялся до 130+ градусов, после чего стал крайне медленно опускаться.

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем спасибо! Поигрался с настройками. при такой комбинации работает не плохо:

GyverPID pid(1, 0.01, 8);

Перелет небольшой есть, при установленных 100 градусах перелет составил всего 1 градус! Можно еще поиграться, но и это уже не плохо!

 

Smarodina
Offline
Зарегистрирован: 03.02.2018

forfrends пишет:

Smarodina пишет:

попробуй P 0.8 I 0.01 D 4-6 

Попробовал 0.8, 0.01, 4
Вот графики:

       

Выглядит на много лучше чем было у меня до этого, но нагрев крайне медленный, минут 10-15 ушо на нагрев до 60 градусов, и все равно был небольшой перелет до 70 градусов (фото 6-7), после 8-го фото температура стабилизировалась на отметке 58-59 градусов.

Если D поставить 6, то график плавно подымается и стабилизируется на 65 градусах, потом очень медленно ползет вниз. Через 15 минут после старта было 63 градуса. Дальше смотреть не стал.
Попробовал те же настройки, только выставил 120 градусов - график поднялся до 130+ градусов, после чего стал крайне медленно опускаться.

 

подскажи как сделать график?

forfrends
Offline
Зарегистрирован: 24.02.2015

В скетче выводишь в сериал то что хочешь видеть на графике:

        Serial.print(pid.input); Serial.print(' ');
        Serial.print(pid.output); Serial.print(' ');
        Serial.print(pid.integral); Serial.print(' ');
        Serial.println(pid.setpoint);

В ардуино ИДЕ открываешь:

Инструменты -> Плоттер по последовательному соединению.

Любуешься графиком ))

b707
Offline
Зарегистрирован: 26.05.2017

В той статейке про ПИД,  что я переводил для "Песочницы" - было про настройку коэффициентов, почитайте, может будет полезно

Настройка ПИД

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо! Почитаю