What causes a thermal runaway error on a 3D printer?

By Asked 3D Content TeamPublished Last verified

What causes a thermal runaway error on a 3D printer?

Thermal runaway means the firmware saw a heater stay below target too long and cut power to prevent fire. The classic cause is a thermistor slipping out of the heater block and reading cooler air. Others are a fan or draft chilling a bare heater block, a failing heater cartridge or wire, and an untuned PID (proportional-integral-derivative) loop.

The number

Firmware or printer Hotend halts when Bed halts when
Marlin 2.1.2.5 defaults It stays more than 4 °C below target for 40 s It stays more than 2 °C below target for 20 s
Klipper defaults At temperature, each second adds how far the reading sits beyond a 5 °C band below target to a counter that halts at 120. While heating, it must gain 2 °C every 20 s Same counter. While heating, it must gain 2 °C every 60 s
Prusa MK2.5 to MK3S+ It drops more than 15 °C for more than 45 s Not stated separately
Prusa MK3.5 to MK4S and CORE One It drops 12 °C and has not recovered after 60 s It drops more than 2 °C for over 60 s

The Marlin values are THERMAL_PROTECTION_PERIOD and THERMAL_PROTECTION_HYSTERESIS (and their _BED_ pair) in Configuration_adv.h at release 2.1.2.5. Klipper’s are the [verify_heater] defaults in its configuration reference, and Prusa’s come from its thermal runaway articles. In Klipper, a hotend 15 °C under target halts in about 12 s; 7 °C under takes about a minute.

Why does a thermal runaway error halt the printer?

Because the protection is working. Marlin’s documentation describes the failure it was built for: the thermistor works its way out of the block and reads the air. The reading falls, the controller drives the heater harder, and the real block temperature climbs unchecked.

A heater block cut open, with the heater cartridge fully seated in its bore and the thermistor pulled partly out of its own boreA thermistor that slips out of the block reads cooler air, so the firmware keeps the heater cartridge on while the block gets hotter.1Thermistor pulled out, reads cooler air2Empty end of the thermistor bore3Heater cartridge, fully seated, keeps heating
  1. Thermistor pulled out, reads cooler air
  2. Empty end of the thermistor bore
  3. Heater cartridge, fully seated, keeps heating
A thermistor that slips out of the block reads cooler air, so the firmware keeps the heater cartridge on while the block gets hotter.

When the window runs out, Marlin 2.1.2.5 turns off every heater and shows THERMAL RUNAWAY with the heater’s name, then PRINTER HALTED and Please Reset. The serial log reads Error:Thermal Runaway, system stopped! Heater_ID: E0 (or bed). Klipper shuts down with Heater extruder not heating at expected rate. The check also catches a working heater that can’t keep up, so a fan or draft can trip it with nothing broken.

How to fix thermal runaway

Check in this order. The first two are hardware faults; the last two can halt a healthy printer. If it halted a few layers in, as the part-cooling fan switched on, Marlin’s docs put the fan first.

  1. Thermistor loose or out of its bore. Push it fully in and retighten its retaining screw. Prusa’s rule is no part of it sticking out of the block.
  2. Heater cartridge or wiring fault. Reseat the heater and thermistor connectors on the board, then run the cable test in the checklist.
  3. Fan or draft on a bare heater block. Fit a silicone sock and aim the part-cooling duct at the nozzle tip, not the block (Marlin). Prusa adds a bent or tilted fan shroud, a room below 16 °C (its i3-series figure) and air conditioning or an open window near the bed. See printing in a cold garage.
  4. PID not tuned after a hardware change. The PID loop holds the temperature, and a new heater, thermistor or block changes how the hotend responds. Marlin’s docs call an untuned loop the most common reason a heater drifts out of its allowed band. In Marlin, run M303 E0 C6 S210 U1 (for 210 °C) and save with M500 if your firmware stores settings in EEPROM. In Klipper, run PID_CALIBRATE HEATER=extruder TARGET=<print temperature>, then SAVE_CONFIG.

How to clear a thermal runaway error safely

Switch the printer off and let it cool. A Marlin thermal error is a kill, not a stop. M999 won’t recover it; only a reset or power cycle will, and the print is lost. In Klipper, send FIRMWARE_RESTART once the cause is fixed.

Then heat with nothing printing and watch the temperature graph in your host software: Marlin’s docs say a sound hotend sits within a degree or two of target, fan on or off.

Never comment out THERMAL_PROTECTION_HOTENDS or raise the period or hysteresis to make the error stop. Marlin’s docs call that turning the protection off “in all but name”. A loose thermistor would then leave the heater running at full power: a fire risk.

When does it mean a new thermistor or heater cartridge?

When the checks here are clean and it still trips. Prusa’s test: point a hair dryer at the hotend and watch the reading. If it rises, the thermistor works and the heater is the suspect. If it doesn’t move, replace the thermistor.

For the heater, Marlin’s docs say to measure the cartridge with a multimeter and compare the ohms with its rating. The heating failed page has Prusa’s ranges. Replace a thermistor with a damaged cable as a whole part. Prusa advises against splicing or soldering it, because the board reads its resistance.

How to check it on your own printer

  • Note when it halted. A halt a few layers in, as the part-cooling fan starts, points to the fan and a missing sock (Marlin).
  • Watch the graph on a test heat. A sag of more than a couple of degrees when the fan starts means a sock or duct fix (Marlin).
  • Run the cable test. Move the head through its full travel and flex the cable bundle while watching the temperature. A jumping reading is a cable fault (Prusa).
  • Look at the cold block. The thermistor should be fully in and its screw tight, with no filament leaking around the block.

Sources

  1. Configuration_adv.h (Marlin 2.1.2.5), Marlin Firmware on GitHub (accessed October 20, 2026)
  2. language_en.h (Marlin 2.1.2.5), Marlin Firmware on GitHub (accessed October 20, 2026)
  3. language.h (Marlin 2.1.2.5), Marlin Firmware on GitHub (accessed October 20, 2026)
  4. Thermal Protection, Marlin Firmware (accessed October 20, 2026)
  5. M303: PID autotune, Marlin Firmware (accessed October 20, 2026)
  6. Configuration reference (verify_heater), Klipper documentation (accessed October 20, 2026)
  7. verify_heater.py (Klipper v0.13.0), Klipper on GitHub (accessed October 20, 2026)
  8. Configuration checks, Klipper documentation (accessed October 20, 2026)
  9. G-Codes, Klipper documentation (accessed October 20, 2026)
  10. Thermal Runaway (i3 series), Prusa Knowledge Base (accessed October 20, 2026)
  11. Hotend thermal runaway (MK3.5), Prusa Knowledge Base (accessed October 20, 2026)
  12. Hotend thermal runaway (MK3.9, MK4, MK4S, CORE One), Prusa Knowledge Base (accessed October 20, 2026)
  13. Bed thermal runaway (MK3.5 to CORE One), Prusa Knowledge Base (accessed October 20, 2026)