Hi all,
I found that on the U1 the part cooling fan reacts to M106/M107 noticeably earlier than the toolhead reaches the command: about 2–4 seconds, or ~one full 130 mm move at F2000 in my test. The fan turns on and off in the wrong places on the model, so slicer settings like first-layer fan, bridge/overhang fan and per-feature cooling are applied in the wrong spots.
Minimal test (no extrusion):
G28
G90
G1 F2000
M106 S0
G1 X10 Y10
G1 X140 Y10 ; should be OFF here
M106 S255
G1 X140 Y140 ; should turn ON here
G1 X10 Y140
Repeat the block a few times: the fan switches one edge too early.
Cause: in klippy/extras/fan.py, set_speed_from_command() schedules the fan at “current time + 100 ms” instead of using toolhead.register_lookahead_callback() like upstream Klipper. Klipper buffers ~2 s of moves ahead, so the fan fires before the move it belongs to.
Full analysis and a suggested one-line fix are in the GitHub issue: M106/M107 (part cooling fan) not synchronized with motion queue — fan switches 2–4 s before the toolhead reaches the command · Issue #18 · Snapmaker/u1-klipper · GitHub
Workaround to confirm: M400 before M106 fixes the position, but stalls motion, so it is not usable for real prints.
Has anyone else noticed cooling kicking in early on overhangs or bridges?