Marlin: защита хотэнда и стола от перегрева

 

Все прошивки ограничивают температуры нагрева хотэнда и стола. Однако в августе 2020 года, в процессе печати, мне пришлось столкнуться с тем, что Marlin ограничивает температуры нагрева как-то по-своему. Например, на хотэнд из g-кода приходит 255, но Marlin ограничивает температуру на уровне 245 градусов. При этом в настройках Marlin'а было задано ограничение 260. Так что пришлось с этим разбираться.

Как оказалось, в файле menu-temperature.cpp используются явным образом заданные числовые константы (так называемые magic numbers/hard codes): 15 для хотэнда и 10 для стола. На эту величину и уменьшаются соответствующие параметры:

#define HEATER_0_MAXTEMP

#define BED_MAXTEMP

Вероятнее всего, это добавленная когда-то давно защита от перерегулирования, так и оставшаяся в виде «хардкода». Чтобы автоматически учитывать в настройках эту (достаточно топорно сделанную) защиту, максимальные температуры удобнее всегоуказывать в виде выражений, а не констант. Например:

#define HEATER_0_MAXTEMP (260+15)

#define BED_MAXTEMP (110+10)

 

Дополнение от июля 2022 года

Мантайнеры Marlin'а исправились и наконец-то сделали эту защиту явной, для чего вынесли данные поправки в раздел настроек Thermal Overshoot (вероятно, начиная с версии 2.0.8):

#define HOTEND_OVERSHOOT 15 // (°C) Forbid temperatures over MAXTEMP - OVERSHOOT

#define BED_OVERSHOOT 10 // (°C) Forbid temperatures over MAXTEMP - OVERSHOOT

#define COOLER_OVERSHOOT 2 // (°C) Forbid temperatures closer than OVERSHOOT

Теперь максимальные температуры можно указывать в более понятном виде:

#define HEATER_0_MAXTEMP (260+HOTEND_OVERSHOOT)

#define BED_MAXTEMP (110+BED_OVERSHOOT)

Рекомендации остаются в силе.

 

Поблагода₽ить за помощь

Если эта заметка оказалась для вас полезна, вы можете отблагодарить меня за проделанную для вас работу любой суммой на своё усмотрение, перейдя по данной ссылке.