Artillery Ruby V1.2 hotend cooling fan

Basic Information:

Printer Model:
MCU / Printerboard:
Host / SBC
klippy.log

Fill out above information and in all cases attach your klippy.log file (use zip to compress it, if too big). Pasting your printer.cfg is not needed
Be sure to check our “Knowledge Base” Category first. Most relevant items, e.g. error messages, are covered there

Describe your issue:

…Hi,

I’m having an issue with the heater_fan on my Artillery Hornet 3D printer running Klipper firmware with an Artillery Ruby V1.2 mainboard (STM32F401).

Problem:
The

printer.cfg (13.1 KB)

hotend cooling fan (PC7 pin) does not run at full speed when controlled by the heater_fan module. Instead of running at 100%, it runs at approximately 60% speed and fluctuates/pulses continuously. This is causing heat creep in the heat break and potential clogs.

Key observations:

  1. When Klipper restarts, the fan immediately spins at 100% (before Klipper takes control)
  2. Once Klipper’s heater_fan callback takes over, the fan drops to ~60% and fluctuates
  3. When I send M106 S255 manually, the part cooling fan (PC8) spins at 100% - this confirms the hardware is working correctly
  4. The fan audibly moves less air when controlled by heater_fan vs when Klipper first starts
  5. This issue started after recent Klipper updates

What I’ve tried:

  • Adding fan_speed: 1.0
  • Adding kick_start_time: 0 and kick_start_time: 0.5
  • Adding max_power: 1.0
  • Adding off_below: 0.2
  • Adding shutdown_speed: 1.0
  • Adding cycle_time: 0.00004
  • Reverting heater_fan.py to original Klipper code
  • Clearing .pyc cache files

None of these changes made any difference.

Current config:

[heater_fan hotend_fan]
pin: PC7
heater: extruder
heater_temp: 50.0

Mainboard: Artillery Ruby V1.2 (STM32F401)
Klipper version: Latest (master branch, 351+ commits since October 2025)

It seems like the heater_fan module is sending the correct speed value (1.0) but something in the PWM signal chain is limiting the actual output to ~60%. The fan runs at full speed before Klipper takes control, which suggests this is a software issue introduced in a recent update.

Has anyone else experienced this with the Artillery Ruby V1.2 board? Any suggestions would be greatly appreciated.

Thank you!

Please attach the requested klippy.log to your next post.

klippy.log (3.6 MB)