Пропорционально-интегрально-дифференцирующий (ПИД) регулятор и выравнивание графика температуры

Пришло время калибровать HotEND и стол. Я пользуюсь EEPROM т.к. мне нравиться вносить настройки не прошивая лишний раз принтер и не отключаясь от Repetier.

Для понимания что такое PID или ПИД советую прочитать эту статью.

Почитали? Приступим!

Для запуска калибровки используется G-код, а именно команда М303 (Пример: M303 E-1 C8 S110), где

М303 – это одна из команд G-кода отвечающая за запуск процедуры PID tuning;

Е-1 – это то, что мы будем калибровать. Это значение может принимать вид: “Е-1” – это означает стол, “Е0” – это означает HotEND (E1 – видимо второй HotEND и т.д.);

С8 – это указывается количество циклов калибровки (обычно 8-ми циклов достаточно);

S110 – это температура нагрева в градусах. Как правило для стола достаточно указать 110 градусов, а для HotEND’а указать 260 градусов.

Далее ждем сообщения об окончании и результатом тестирования

из результатов нам нужны только 3 строчки (если, конечно, все прошло удачно)

#define DEFAULT_bedKp 174.71
#define DEFAULT_bedKi 15.19
#define DEFAULT_bedKd 502.35

При тестировании HotEND’а нужны будут подобные строчки с параметрами PID только  для  HotEND’а

Как прочитал на одном сайте про настройку данных параметров… Там было сказано, что эти параметры используются как базовые т.е. их можно внести в прошивку (а можно не вносить) и далее подстраивать в ручную… добиваться желаемых результатов…

Далее записываем полученные результаты в EEPROM командой M301. (Пример: M301 H1 P1 I2 D3), где

М301 — КОМАНДА(G-код)

H0 — то, к чему относится команда (стол = H0, экструдер1 = H1, эктрудер2 = H2 и т.д.)

P174.71 — параметр Kp (значение в примере = 174.71)

I15.19 — Параметр Ki (значение в примере = 15.19)

D502.35 — параметр Kd (значение в примере = 502.35).

Для HotEND’а параметры Kp, Ki, и Kd заносятся также, как и для стола.

Эти параметры можно заносить сразу после калибровки чего то одного например откалибровали стол… убедились, что все нормально… сохранили… и потом за хотэнд взялись (я так и делал)

И не забывайте сохранить все это дело командой М500

 

Вот вроде все хорошо… и кажется что все откалибровали, но это только теория… на деле появляются камни и даже “булыжники”

Давайте разберемся с некоторыми из них…

 

Рассмотрим подключение стола через автомобильное реле

При нагретом столе во время удержания получаем график, который “плавает” по температуре +2,5 / -0,5 градуса, что считаю недопустимо… (Реле включается редко)

Изменить данную ситуацию (с плавающей температурой) можно изменяя параметр MAX_BED_POWER в меньшую сторону. Подбирается опытным путем. Но следует учитывать следующие моменты:

  1. Если параметр этой переменной равен 255, то реле включилось – стол нагрелся – реле выключилось
  2. Если этот параметр уменьшать, то реле будет часто включаться и щелкать
  3. Чем меньше этот параметр — тем быстрее щелкает реле для нагрева стола

Параметры следует подбирать постепенно… Снижать по 10 и проверять нагрев в деле… в определенный момент Вы :

а) Задолбаетесь и скажите, что так пойдет…

или

б) Увидите как график опять начинает плавать все больше и больше…

Если Вы получили вариант “Б”, то значит дальше снижать не нужно и надо искать “золотую середину”… чтобы и график как можно ровнее был, и реле как можно реже срабатывало.

 

Расмотрим подключение стола обычным способом через поменянный транзистор с улучшенными характеристиками

В этом случае Вам не нужны “танцы с бубном”. Просто вносите полученные параметры в EEPROM, сохраняете проверяете… радуетесь… (у меня именно так и было)

 

Заметки: 

  • ПИД стола включать нельзя иначе реле будет щелкать не переставая, нагреется и очень…ОЧЕНЬ быстро выйдет из строя!
  • Если используете реле, то калибровать ПИД стола наверно и не обязательно… т.к. сам ПИД выключен :)
  • У меня параметр MAX_BED_POWER был равен 200 и при тестировании меньше 120 не спускался.
  • Если вы используете стандартное подключение, то для включения ПИД стола требуется раскомментировать параметр #define PIDTEMPBED.
  • Если Вы поменяли транзистор на нормальный и выкинули релюшку – подключив все как и должно быть, а еще решили включить ПИД стола, то после процедуры по подключению и замены требуется откалибровать PID стола… Разница в параметрах не значительная, но она есть. (у меня именно так и было)

 

Калибровка ПИД HotEND‘а

Происходит также, как и стола работающего по нормальной схеме с единственной оговоркой… параметры пришлось корректировать ручками опытным путем… хорошо, что хоть постоянно прошивать не нужно…

 

Еще одна проблема с которой я столкнулся после изменений ПИД ручками – это ошибка

Errorsillyrinter halted. kill() called! [ERROR] Errorsillyrinter halted. kill() called!

Я конечно понял, что где то стоит ограничение по времени нагрева, но долго не мог найти это ограничение… оказалось все просто… за это отвечают параметры

#define WATCH_TEMP_PERIOD 16 // Seconds

и

#define WATCH_TEMP_INCREASE 4 // Degrees Celsius

т.е. температура должна повышаться на 4 градуса каждые 16 секунд.

у меня после корректировки ПИД хотэнда за 10 градусов до достижения намеченной температуры – температура начинает медленно расти… по 1 градусу примерно в 20 секунд…

в итоге изменив параметры на

#define WATCH_TEMP_PERIOD 20

#define WATCH_TEMP_INCREASE 1

(Взял с запасом)

Я избавился от этой ошибки.

 

В итоге я получил нитевидный график температур…

Ниже скриншот результата во время печати…

ПИД

Удачи… если можете чем дополнить, то пишите в комментариях

 

Ну и маленькая “плюшечка” в виде таблицы соответствия китайского термистора 100K Ohm NTC 3950 Thermistor 1% к реальной температуре… При измерении пользовался термопарой вставленной одновременно в одно и тоже специальное отверстие термоблока E3Dv6 и замазанное термопастой. Температуры ниже 20-ти градусов я не смог добиться у себя в комнате… соответственно самый минимум, что термистор будет показывать – это 20 градусов… ниже он просто не “знает”. Ну и больше 275 я тоже не грел… т.к. посчитал уже это лишним.

Если Вы не знаете куда и зачем это вставлять, то лучше оставьте все как есть!

{ 21*OVERSAMPLENR , 275 },
{ 23*OVERSAMPLENR , 270 },
{ 25*OVERSAMPLENR , 265 },
{ 27*OVERSAMPLENR , 260 },
{ 29*OVERSAMPLENR , 255 },
{ 32*OVERSAMPLENR , 250 },
{ 40*OVERSAMPLENR , 245 },
{ 45*OVERSAMPLENR , 240 },
{ 51*OVERSAMPLENR , 235 },
{ 55*OVERSAMPLENR , 230 },
{ 61*OVERSAMPLENR , 225 },
{ 66*OVERSAMPLENR , 220 },
{ 73*OVERSAMPLENR , 215 },
{ 80*OVERSAMPLENR , 205 },
{ 89*OVERSAMPLENR , 200 },
{ 98*OVERSAMPLENR , 195 },
{ 108*OVERSAMPLENR , 190 },
{ 119*OVERSAMPLENR , 185 },
{ 131*OVERSAMPLENR , 180 },
{ 145*OVERSAMPLENR , 175 },
{ 159*OVERSAMPLENR , 170 },
{ 174*OVERSAMPLENR , 165 },
{ 191*OVERSAMPLENR , 160 },
{ 209*OVERSAMPLENR , 155 },
{ 229*OVERSAMPLENR , 150 },
{ 247*OVERSAMPLENR , 146 },
{ 275*OVERSAMPLENR , 140 },
{ 301*OVERSAMPLENR , 135 },
{ 323*OVERSAMPLENR , 131 },
{ 358*OVERSAMPLENR , 125 },
{ 389*OVERSAMPLENR , 120 },
{ 422*OVERSAMPLENR , 115 },
{ 487*OVERSAMPLENR , 110 },
{ 493*OVERSAMPLENR , 105 },
{ 530*OVERSAMPLENR , 100 },
{ 568*OVERSAMPLENR , 95 },
{ 606*OVERSAMPLENR , 90 },
{ 644*OVERSAMPLENR , 85 },
{ 683*OVERSAMPLENR , 80 },
{ 720*OVERSAMPLENR , 75 },
{ 755*OVERSAMPLENR , 70 },
{ 756*OVERSAMPLENR , 69.9 },
{ 790*OVERSAMPLENR , 64.5 },
{ 825*OVERSAMPLENR , 59 },
{ 848*OVERSAMPLENR , 55 },
{ 872*OVERSAMPLENR , 50.6 },
{ 875*OVERSAMPLENR , 49.9 },
{ 898*OVERSAMPLENR , 45 },
{ 902*OVERSAMPLENR , 44 },
{ 918*OVERSAMPLENR , 40.4 },
{ 936*OVERSAMPLENR , 35 },
{ 953*OVERSAMPLENR , 30 },
{ 965*OVERSAMPLENR , 25.4 },
{ 968*OVERSAMPLENR , 24 },
{ 971*OVERSAMPLENR , 20 }

20

Метки: , ,    2016-02-19      Раздел: Настройка, Прошивка  
Автор: Просмотров: 4 952   12 комментариев



12 комментариев на «Пропорционально-интегрально-дифференцирующий (ПИД) регулятор и выравнивание графика температуры»

  1. Мне для сглаживания температурного графика во время печати помогло уменьшение параметра
    #define K1 0.95 //smoothing factor within the PID
    до 0,9

    0
  2. Вопрос : в каком режиме проверять настроенный PID ? И какое значение из 8 брать ?

    0
  3. Не понял про режим. Как понять в каком режиме?
    Надеюсь, что отвечу на Ваш вопрос. Я вчера поменял нагреватель на 40 ватный и заново пид калибровал… получилась, что филамент был заправлен. все моторы и нагрев стола не включал… Просто запустил и пошел пить чай…
    Значение берется по инструкции последнее, но в версии марлина 1.1.0 RC уже сделано, что в конце калибровки он выдает полностью те параметры, которые нужно вставлять… Если не забуду, то вечером скину скриншот…
    Если правильно подобран термистор в прошивке, то график должен быть ровненький… Выше скриншот сделанный во время печати. Если быть точнее, то во время заливки большой детали.

    0
  4. Пробуйте ручками подкручивать… если включено EEPROM и редактирование, то все вообще в онлайне делается… почитайте за что отвечает каждый параметр PID.. и во время печати уже от поведения графика и термометра прикрученного к хоту смотрите и крутите параметры… параметры выдаваемые при автокалибровки не являются “руководством к действию” … это те параметры… от которых нужно отталкиваться… кого устраивает +/- по температуре – тот их оставляет… кого не устраивает как меня… – тот их ручками крутит… в статье я писал, что ручками докручивал эти параметры на хоте… меняйте параметры… смотрите… анализируйте… тут нет универсального рецепта… !!!…

    0
  5. Вот так выглядит в последней версии

    т.е. в конце выдает результат
    PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h
    #define DEFAULT_Kp 25.52
    #define DEFAULT_Ki 3.61
    #define DEFAULT_Kd 45.16

    0
  6. Сейчас поставил на печать… и сделал еще раз скриншот… чтобы видно было печать… на скриншоте идет печать первого слоя на скорости 50

    0
  7. #define WATCH_TEMP_PERIOD 40000 //40 seconds
    #define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds

    Оно в милисекундах чтоли?

    0
  8. В версии 1.1.0 RC3 Эти параметры в секундах.
    В других версиях не смотрел.

    0
    1. Все равно вылезает эта ошибка. Изменил стандартные 16 и 4 на 20 и 1 и вылезает эта ошибка.Куда копать?

      0
  9. Смотря как быстро нагревается…
    попробуйте поставить запредельные параметры… скажем 60 секунд и 0,1 градус… посмотрите на результат… может у Вас что с проводами… и нагреватель не может догреть до нужной температуры какие бы параметры не ставили…

    0
  10. Никак не получается победить этот ПИД. Допустим, задано 230 градусов, принтер стоит, не печатает, просто греем сопло. Температура пляшет в пределах 229,80 -230,20 периодически «пробивая» на целый градус. А автокалибровка каждый раз даёт различные показания(Kp, Ki,Kd) для одних и тех же температур

    0
    1. Вот такой график. Может, посоветуете что нибудь?

      0

Добавить комментарий




     
Авторизация
*
*
Генерация пароля
Яндекс.Метрика