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)
Рекомендации остаются в силе.
Поблагода₽ить за помощь
Если данная информация оказалась для вас полезна, можете отблагодарить меня какой-то суммой (на ваше усмотрение), перейдя по данной ссылке.