Метки: Marlin, ПИД, прошивка  
2016-02-19  
  
Раздел: Настройка, Прошивка  
Автор: wolfs_SG Просмотров: 20 220  
12 комментариев
Пропорционально-интегрально-дифференцирующий (ПИД) регулятор и выравнивание графика температуры
Добавлено в закладки: 7
Пришло время калибровать 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 в меньшую сторону. Подбирается опытным путем. Но следует учитывать следующие моменты:
- Если параметр этой переменной равен 255, то реле включилось – стол нагрелся – реле выключилось
- Если этот параметр уменьшать, то реле будет часто включаться и щелкать
- Чем меньше этот параметр — тем быстрее щелкает реле для нагрева стола
Параметры следует подбирать постепенно… Снижать по 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 }
12 комментариев на «Пропорционально-интегрально-дифференцирующий (ПИД) регулятор и выравнивание графика температуры»
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Изменение базовых настроек 3D принтера без перезаливки прошивки       Asus Xtion – ручной 3D сканер
Мне для сглаживания температурного графика во время печати помогло уменьшение параметра
#define K1 0.95 //smoothing factor within the PID
до 0,9
Вопрос : в каком режиме проверять настроенный PID ? И какое значение из 8 брать ?
Не понял про режим. Как понять в каком режиме?
Надеюсь, что отвечу на Ваш вопрос. Я вчера поменял нагреватель на 40 ватный и заново пид калибровал… получилась, что филамент был заправлен. все моторы и нагрев стола не включал… Просто запустил и пошел пить чай…
Значение берется по инструкции последнее, но в версии марлина 1.1.0 RC уже сделано, что в конце калибровки он выдает полностью те параметры, которые нужно вставлять… Если не забуду, то вечером скину скриншот…
Если правильно подобран термистор в прошивке, то график должен быть ровненький… Выше скриншот сделанный во время печати. Если быть точнее, то во время заливки большой детали.
Пробуйте ручками подкручивать… если включено EEPROM и редактирование, то все вообще в онлайне делается… почитайте за что отвечает каждый параметр PID.. и во время печати уже от поведения графика и термометра прикрученного к хоту смотрите и крутите параметры… параметры выдаваемые при автокалибровки не являются “руководством к действию” … это те параметры… от которых нужно отталкиваться… кого устраивает +/- по температуре – тот их оставляет… кого не устраивает как меня… – тот их ручками крутит… в статье я писал, что ручками докручивал эти параметры на хоте… меняйте параметры… смотрите… анализируйте… тут нет универсального рецепта… !!!…
Вот так выглядит в последней версии
т.е. в конце выдает результат
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
Сейчас поставил на печать… и сделал еще раз скриншот… чтобы видно было печать… на скриншоте идет печать первого слоя на скорости 50
#define WATCH_TEMP_PERIOD 40000 //40 seconds
#define WATCH_TEMP_INCREASE 10 //Heat up at least 10 degree in 20 seconds
Оно в милисекундах чтоли?
В версии 1.1.0 RC3 Эти параметры в секундах.
В других версиях не смотрел.
Все равно вылезает эта ошибка. Изменил стандартные 16 и 4 на 20 и 1 и вылезает эта ошибка.Куда копать?
Смотря как быстро нагревается…
попробуйте поставить запредельные параметры… скажем 60 секунд и 0,1 градус… посмотрите на результат… может у Вас что с проводами… и нагреватель не может догреть до нужной температуры какие бы параметры не ставили…
Никак не получается победить этот ПИД. Допустим, задано 230 градусов, принтер стоит, не печатает, просто греем сопло. Температура пляшет в пределах 229,80 -230,20 периодически «пробивая» на целый градус. А автокалибровка каждый раз даёт различные показания(Kp, Ki,Kd) для одних и тех же температур
Вот такой график. Может, посоветуете что нибудь?