如何在 Kill 后自动重置 Marlin
在某些关键情况下,如热失控保护,Marlin 进入killed状态。进入该状态后,你通常需要硬重置主板。然而,在无法物理访问机器的环境中,无法硬重置 Marlin,因此你可能需要实现。
注意诊断和修复导致重置的根本问题非常重要,忽视它可能会导致进一步的问题,甚至火灾隐患或打印机损坏。所以在只是…之前,确保你知道自己在做什么。
以下指南在 Marlin 2.0.9.1 上测试过。它应该适用于大多数 Marlin 2.x 版本,只需少量调整。
首先,注意作为硬重置主板的替代方案,有 SOFT_RESET_ON_KILL 选项,它允许你使用连接到引脚的按钮从 kill 模式触发软重置。我们不会深入讨论此选项,因为它并没有真正改变对打印机物理访问的要求。
打开 Marlin/src/MarlinCore.cpp 并找到 minkill(bool) 函数。
在末尾,此函数包含以下结构的预处理器控制分支:
marlin_minkill_branch_before.cpp
#if EITHER(HAS_KILL, SOFT_RESET_ON_KILL)
// 分支 1 ...
#else
// 分支 2 ...
#endif我们将用这些行替换 整个分支:
auto_reset_marlin_reboot.cpp
// 等待 5 秒让控制器跟上
for (int i = 5000; i--;) { DELAY_US(1000); watchdog_refresh(); } // 5000*1ms = 3秒
// kill 后自动重置
HAL_reboot();我更喜欢在重启逻辑中插入 5 秒延迟,这样上层控制器(如运行 OctoPrint 的 Raspberry Pi)就不会错过 Marlin 板已被 kill 的状态。虽然大多数控制器应该能够从 G-Code 检测到 killed 状态,但这个 5 秒延迟将模拟在达到 killed 状态后完全不重置的默认行为。但注意如果你绝对需要在达到 kill 状态后尽快重置,通常可以安全地省略等待循环。
Check out similar posts by category:
3D Printing, Embedded
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow