PID (ПИД, Пропорционально-интегрально-дифференцирующий регулятор) - регулятор, использующий сумму трех значения входного сигнала (Kp, Ki, Kd) для задания и поддержки температуры стола\хотенда в установленных пределах. Данные значения будут разными в зависимости от используемого железа, наличия обдува, силиконового носка и множества других факторов, поэтому калибровку необходимо производить как после первого запуска принтера, так и после изменения конфигурации хотенда\стола. Так же данную процедуру необходимо проводить при скачкообразных изменениях температуры и большом разбросе при удержании заданного значения.
Калибровка
В прошивку Marlin встроены инструменты для автоматической калибровки PID как для хотенда, так и для стола. Для управления нагревом стола с помощью PID необходимо предварительно активировать в прошивке параметр "PIDTEMPBED" (подробнее в разделе Прошивка -> Стол, данную процедуру необходимо провести перед калибровкой стола и прошить принтер, по умолчанию параметр выключен). Процедуру калибровки желательно проводить на максимально приближенных к печатным условиям, если у вас закрытый корпус - необходимо закрыть дверцу и надеть кожух\колпак, при калибровке хотенда стол должен находиться в непосредственной близости к соплу и обдув должен быть включен на максимум (либо значение, которое вы используете чаще всего). Внимание, во время проведения калибровки вам может показаться, что принтер завис, но это не так - тест довольно длительный и время его проведения зависит от количества установленных повторений.
Для ввода команд и получения результатов можно использовать, к примеру, ПО PrintRun (www.pronterface.com/) или любой другой софт, который может общаться с принтером посредством последовательного порта (OctoPrint, Repetier-Host и т.п.)
Экструдер
Переместите хотэнд к центру стола, подведите стол как можно ближе к соплу и включите обдув хотенда. Калибровка проводится для конкретной температуры; это не значит, что если вы провели ее на температуре 230°, то на 250°\210° работать она не будет, это лишь значит, что чем больше разница рабочей температуры от заданной при калибровке - тем больше будет погрешность, поэтому необходимо устанавливать ту величину, что чаще всего используется.
Терминал принтера:
M303 E<hotend_num> S<temp> C<count> ;Запуск автоматической калибровки хотэнда
E<hotend_num> - Порядковый номер хотенда (если у вас один хотэнд - 0)
S<temp> - Температура проведения теста
C<count> - Количество повторений теста, чем их больше - тем точнее (минимум 3, по умолчанию 5)
Пример: M303 E0 S240 C7
Результаты выполнения команды:
>>> M303 E0 S240 C7
<<< PID Autotune start
*тестирование*
<<< PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h
<<< #define DEFAULT_Kp 10.71
<<< #define DEFAULT_Ki 0.61
<<< #define DEFAULT_Kd 47.22
Полученные значения можно внести в прошивку или сохранить в EEPROM, данная процедура описана в разделе "Прошивка". Также для калибровки хотенда можно воспользоваться готовым GCod'ом который проведет калибровку за вас и сохранит значения в EEPROM. Для этого необходимо скопировать код, описанный ниже (установив в нем свои значения номера экструдера, температуры, а также количество повторений) в текстовый файл, сохранить его с расширением ".gcode" и запустить на исполнение на вашем принтере; результаты тестирования будут автоматически сохранены. После завершения в терминал будут выведены текущие значения EEPROM для проверки, значения PID для экструдера находятся в строке с командой "M301".
;HotEnd_PID_calibration.gcode
G28 ;Вернуться в начало координат
G1 Y100.0 X100.0 Z5.00 F1500 ;Переместить хотэнд на координаты X100 Y100 Z5
M106 S255 ; включить обдув модели на 100%
;
M303 E0 S240 C7 U ;E0<номер экструдера> S<температура> C<циклы> U<применить полученные значения>
M106 S0 ; выключить обдув модели
M500 ;Сохранить полученные значения в EEPROM
;
M503 ;Вывести текущие значения EEPROM для проверки
Стол
(необходимо активировать параметр PIDTEMPBED в прошивке)
Процедура калибровки PID для стола практически не отличается от калибровки хотенда. При наличии корпуса закройте дверцу и установите крышку принтера, чтобы создать закрытый объем внутри принтера. Обратите внимание, что команды для калибровки стола и хотенда совпадают, отличается лишь параметр номера экструдера, для стола это всегда будет "-1"
Терминал принтера:
M303 E-1 S<temp> C<count> ;Запуск автоматической калибровки стола
E-1 - Калибровка стола
S<temp> - Температура проведения теста
C<count> - Количество повторений теста, чем их больше - тем точнее (минимум 3, по умолчанию 5)
Пример: M303 E-1 S80 C7
Результаты выполнения команды:
>>> M303 E-1 S80 C7
<<< PID Autotune start
*тестирование*
<<< PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h
<<< #define DEFAULT_bedKp 52.60
<<< #define DEFAULT_bedKi 6.63
<<< #define DEFAULT_bedKd 277.98
Полученные значения также вносятся в прошивку или сохраняются в EEPROM. Для тестирования стола также можно использовать GCode, указанный ниже, сохранив его в файл с расширением ".gcode" и запустив на принтере; он проведет тестирование и автоматически сохранит значения в EEPROM. После завершения в терминал будут выведены текущие значения EEPROM для проверки, значения PID для стола находятся в строке с командой "M304".
;Bed_PID_calibration.gcode
G28 ;Вернуться в начало координат
G1 Y100.0 X100.0 Z5.00 F1500 ;Переместить хотэнд на координаты X100 Y100 Z5
M106 S255 ; включить обдув модели на 100%
;
M303 E-1 S80 C7 U ;E-1<стол> S<температура> C<циклы> U<применить полученные значения>
M106 S0 ; выключить обдув модели
M500 ;Сохранить полученные значения в EEPROM
;
M503 ;Вывести текущие значения EEPROM для проверки
Прошивка
Экструдер
Значения, полученные после PID калибровки, записываются в разделе "PID Settings" в файле "Configuration.h" по порядку (без кавычек):
\Marlin\Configuration.h
//===========================================================================
//============================= PID Settings ================================
//===========================================================================
***
***
***
#define DEFAULT_Kp <Kp value>
#define DEFAULT_Ki <Ki value>
#define DEFAULT_Kd <Kd value>
Стол
Для управления нагревом стола через PID необходимо раскомментировать параметр "PIDTEMPBED" (убрать "//"), после чего можно по порядку ввести значения Kp, Ki, Kd в разделе "PID > Bed Temperature Control" в файле "Configuration.h":
\Marlin\Configuration.h
//===========================================================================
//====================== PID > Bed Temperature Control ======================
//===========================================================================
***
#define PIDTEMPBED
***
#define DEFAULT_bedKp <Kp bed value>
#define DEFAULT_bedKi <Ki bed value>
#define DEFAULT_bedKd <Kd bed value>
После прошивки принтера необходимо стереть EEPROM и загрузить в него значения, установленные нами в прошивке, для этого в терминале принтера нужно ввести две команды по порядку (до точки с запятой):
Терминал принтера
M502 ; Загрузить значения указанные в прошивке
M500 ; Сохранить значения в EEPROM
EEPROM
Не стоит забывать, что значения PID хранятся в энергонезависимой памяти контроллера и после перепрошивки вам необходимо либо восстановить в EEPROM значения, указанные нами в прошивке, либо, если вы не хотите перепрошивать свой принтер, вы можете сохранить значения напрямую в EEPROM, но не забывайте, что при использовании команды "M502" (записать значения из прошивки в EEPROM) придется повторно записать PID значения в EEPROM, так как они будут заменены теми, что указаны в прошивке. Для хранения данных значений предпочтительнее указывать их в прошивке - это убережет вас от множества проблем.
Терминал принтера:
M301 P<Kp value> I<Ki value> D<Kd value> ;Установить значения PID для хотенда
M304 P<Kp bed value> I<Ki bed value> D<Kd bed value> ;Установить значения PID для стола
M500 ; Сохранить значения в EEPROM
Глоссарий
Хотэнд (HotEnd) - блок из нагревателя, термодатчика, сопла и корпуса, который отвечает за нагрев пластика
Стол (Bed, HeatBed) - Рабочая поверхность принтера, на которой располагается модель
EEPROM (ПЗУ) - Память контроллера для хранения настроек, которые сохраняются после отключения электроэнерги
GCode's
M500 - Cохранить текущие значения в EEPROM
*https://marlinfw.org/docs/gcode/M500.html
M502 - Загрузить значения из прошивки
*https://marlinfw.org/docs/gcode/M502.html
M503 - Вывести текущие значения EEPROM
*https://marlinfw.org/docs/gcode/M503.html
M106 S<speed> - Включение обдува модели (0 - выключить)
*https://marlinfw.org/docs/gcode/M106.html
M301 P<Kp value> I<Ki value> D<Kd value> - Установить значения PID для хотенда
*https://marlinfw.org/docs/gcode/M301.html
M303 E<номер экструдера(стол -1)> S<температура> C<циклы> U<применить полученные значения> - Автокалибровка PID
*https://marlinfw.org/docs/gcode/M303.html
M304 P<Kp bed value> I<Ki bed value> D<Kd bed value>- Установить значения PID для стола
*https://marlinfw.org/docs/gcode/M304.html
Надеюсь данный гайд был полезен, так же прошу прощения за упрощения\упущения и тавтологию данный текст в основном направлен на новичков в 3D печати посему упрощенно по максимуму. Если мой вариант изложения информации будет доступным и понравиться людям продолжу публиковать минигайды относительно 3D печати.
Данный гайд так же опубликован на канале @LiS92Live в telegram в виде PDF документа с нормальным форматированием текста.