Print Cooling Fan Curve Calculator

Map fan percentage to PWM duty cycle for your printer's part-cooling fan

Converts slicer fan percentage to the actual PWM duty cycle value (0–255 Marlin, 0–1000 Klipper) and accounts for the fan stall threshold so you never sit in the dead band. Helps tune cooling curves for bridging and overhangs. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

How does fan percentage map to PWM?

Firmware scales the 0–100% command linearly onto its PWM range. On 8-bit Marlin that is 0–255, so 60% becomes 0.60 × 255 ≈ 153. Klipper typically uses 0–1000 and RepRapFirmware uses 0–1.

The part-cooling fan controls how quickly each layer of plastic solidifies, which makes or breaks overhangs, bridges, and fine detail. This calculator converts the friendly percentage in your slicer into the real PWM duty cycle the firmware sends, and crucially warns you when a low setting falls below the speed at which the fan can even start spinning.

How it works

Firmware maps the fan command linearly. For an 8-bit controller the formula is:

PWM value = (fan % ÷ 100) × 255

So a 60% command becomes 0.60 × 255 ≈ 153. Klipper often uses a 0–1000 scale and RepRapFirmware uses 0–1, but the proportion is identical.

The catch is the stall threshold. A brushless blower needs a minimum duty cycle to overcome static friction and begin rotating — commonly 15–25%. Below that the fan draws current but produces no airflow. The tool flags any setting that lands in this dead band and tells you the minimum percentage that keeps the fan reliably spinning.

Worked example

Say your blower stalls below 20% and your slicer profile drops to 15% on the first solid layer above the supports. The firmware sends a PWM value of 0.15 × 255 ≈ 38, which is below your stall threshold of 0.20 × 255 = 51. Result: the fan draws power but the blade does not spin — zero airflow — and the layer cools only by passive radiation. The fix is simple: set the slicer’s minimum fan speed to 20% so no commanded speed can fall into the dead band.

Slicer settingPWM (8-bit)At 20% stall threshold
10%26Dead band — no spin
15%38Dead band — no spin
20%51Just spinning
50%128Normal operation
100%255Full speed

Material-by-material cooling strategy

Part cooling is not one-size-fits-all. Getting it wrong causes more print failures than almost any other setting.

PLA loves aggressive cooling. Full-speed fans from layer 3 onward give clean overhangs and bridges because PLA solidifies quickly. Dialing it down causes stringing and drooping on overhangs past about 45 degrees.

PETG is more nuanced. Too much cooling weakens layer adhesion and can cause delamination, especially on thick walls. A mid-range 30–60% typically balances surface quality against bond strength. Watch for stringing if you cool too little; delamination if you cool too much.

ABS and ASA are highly warp-prone. Most users run 0% part cooling for the entire print (only enclosure convection) and rely on a heated chamber. Even a brief gust can cause a corner to lift.

Polycarbonate and nylon are similar to ABS — minimal or no part cooling, with an enclosure to retain ambient heat.

TPU and flex filaments benefit from a little cooling on bridging layers but generally print better with less airflow than rigid materials.

Calibrating your stall threshold

The stall threshold varies between fan models. To find it for your specific fan:

  1. Command the fan to 5% in your printer’s console (M106 S13 for Marlin).
  2. Listen and watch — does it spin?
  3. Increase by 1% increments until you hear the motor start.
  4. Add a small safety margin (2–3%) and use that as your slicer minimum.

In Marlin you can also set FAN_MIN_PWM in Configuration.h to enforce the stall threshold at the firmware level, eliminating the need to rely on the slicer setting.