Skip to Content

TRIAC Overheating: AC Dimmer Runs Hot or Burns Out

AC dimmer running hot or burning out? TRIAC dissipates ~1.2V × load current — a heatsink is mandatory above 200W. Motor loads need an RC snubber in parallel with the TRIAC. High-power 16A+ rbdimmer modules include NTC and fan with library support.

TL;DR: A TRIAC is an active device with a voltage drop of ~1.2V. At load currents above 2A it dissipates several watts as heat. Without thermal management: overheating, thermal protection triggering, or permanent failure. With inductive loads (motors, transformers) conditions are even harsher. Solution: heatsink, respecting rated current, and a snubber circuit for inductive loads.



Problem Description

The dimmer works, but after some time:

  • Module body is hot (>60°C to the touch)
  • Load flickers after a few minutes of operation
  • Module shuts itself off (TRIAC thermal protection)
  • TRIAC is blown — load is either always at 100% or won't turn on
  • Burning smell from the module

All of these are signs of TRIAC overheating.

Typical forum messages:

  • "Dimmer module gets very hot after 10 minutes"
  • "Module worked fine, then lamp stuck at full brightness"
  • "Burning smell from dimmer module"
  • "Dimmer flickers after warming up"



Root Cause


TRIAC heat dissipation

When the TRIAC is open (conducting), there is a voltage drop of ~1.0–1.5V across it (chip-dependent). This becomes heat:

text
P [W] = Vt × I_load
Vt ≈ 1.2V (typical for BTA16, BTA24)
Examples:
  40W lamp  / 220V: I = 0.18A → P ≈ 0.2 W  (not critical)
  100W lamp / 220V: I = 0.45A → P ≈ 0.5 W  (not critical)
  200W lamp / 220V: I = 0.91A → P ≈ 1.1 W  (heatsink advisable)
  500W heater:      I = 2.3A  → P ≈ 2.8 W  (heatsink required)
  1kW heater:       I = 4.5A  → P ≈ 5.4 W  (heatsink mandatory)
  2kW heater:       I = 9.1A  → P ≈ 10.9 W (large heatsink + forced airflow)

When dimming, heat dissipation decreases — but not proportionally to power. Due to the nonlinearity of phase-cut control, at setPower(50%) the average current is ≈ 60–70% of maximum → heat is ≈ 60–70% of maximum. Size your heatsink for the maximum load power, not the working dimming point.

With inductive loads (motors, transformers) heat dissipation is higher due to reactive current and harsher switching conditions.


Rated current without a heatsink

The module's current rating (4A, 8A) is specified with a heatsink. Without one, the safe maximum is roughly half:

Module Current with heatsink Current without heatsink
RBDimmer 1CH 4A 4A (~880W/220V) ~2A (~440W)
RBDimmer 1CH 8A 8A (~1760W/220V) ~4A (~880W)
RBDimmer 4CH 10A 10A/channel ~5A/channel



Solutions



🟢 Add a heatsink to the TRIAC

ℹ️ rbdimmer users: rbdimmer modules already include the thermal management required for their rated current. 16A/24A/40A modules have a built-in aluminum heatsink, fan, and NTC sensor. The recommendations below apply to third-party dimmers or if you are building a dimmer yourself.

The simplest and most effective solution — a heatsink. For any load above 200–300W this is a mandatory step.

The TRIAC is in a TO-220 package with a metal tab — the heatsink mounts to this tab.

Heatsink selection by load:

Load power Current Heat Heatsink
Up to 200W <1A <1.2 W Not needed
200–500W 1–2.3A 1.2–2.8 W Small 20×20 mm
500W–1kW 2.3–4.5A 2.8–5.4 W Medium 40×40 mm
1–2kW 4.5–9A 5.4–10.9 W Large + fan

⚠️ Safety first: the TRIAC's metal tab is galvanically connected to the 220V mains. Before mounting a heatsink inside an enclosure, always use a TO-220 insulating pad (mica or silicone) and a plastic washer under the screw. Without insulation the device enclosure will be at 220V.

Mounting:

text
[Aluminum heatsink]
       ↕ thermal paste / thermal pad
[TO-220 insulating pad]  ← mandatory for enclosed devices
[TRIAC metal tab]  ← M3 screw with plastic washer
       |
[Module PCB]


🔵 Snubber circuit for inductive loads

Motor, transformer, pump? Phase-cut control of inductive loads creates voltage spikes and stress on the TRIAC — an RC circuit is needed.

With an inductive load, current lags behind voltage in phase. The TRIAC turns off at the actual current zero, not the voltage zero — a dv/dt spike is produced, which:

  • Thermally stresses the TRIAC (current spike at every firing)
  • Can cause spurious triggering (false firing)
  • Reduces TRIAC lifespan

ℹ️ rbdimmer users: all rbdimmer modules already have an RC snubber installed on the board. No external snubber is needed. If you're using a third-party dimmer — check for an RC filter on the board before connecting an inductive load.

The snubber RC circuit is connected in parallel with the TRIAC (between its MT1 and MT2 terminals):

text
Line ──┬─── [TRIAC] ───┬─── Load (motor) ─── Neutral
       │               │
       └── [R 100 Ω]───┘
       └── [C 100 nF, X2 400V]
       (both components in parallel with the TRIAC)

Component values for 220V 50/60 Hz:

  • R = 68–100 Ω, power rating 1–2 W (ceramic or metal-film)
  • C = 47–100 nF, class X2, rated 400V

⚠️ The capacitor must be class X2 (rated for direct connection across 220V mains). A regular electrolytic, ceramic rated at 50–100V, or any capacitor without X2/Y2 marking — is dangerous and may explode.

When a snubber is mandatory:

  • ☐ Induction motor of any power with phase-cut control
  • ☐ Transformer loads (transformer-based power supplies)
  • ☐ Loads with a coil (solenoids, relays through a dimmer — not recommended)


  • 🔵 For high-power modules (16A+): rbdimmerThermalESP32

    Using a high-power rbdimmer (16A, 24A, 40A) with ESP32? Built-in NTC sensor, fan, and thermal control are already on the board.

    rbdimmer modules rated at 16A and above include:

    • An aluminum heatsink on the TRIAC
    • A built-in 5V fan
    • An NTC10 thermistor in the heatsink for temperature monitoring

    For automatic cooling management use the rbdimmerThermalESP32 library:

    cpp
    // Platform: ESP32 + rbdimmer 16A/24A/40A with NTC sensor and fan
    // Library: rbdimmerThermalESP32
    // Requires: rbdimmerESP32 (the main dimmer library)
    #include "rbdimmerESP32.h"
    #include "rbdimmerThermal.h"
    rbdimmer dimmer;
    rbdimmer_thermal_handle_t thermal;
    void thermalCallback(rbdimmer_thermal_event_t event, float temp) {
        if (event == RBDIMMER_THERMAL_OVERHEAT) {
            Serial.printf("OVERHEAT: %.1f°C — power reduced\n", temp);
        }
    }
    void setup() {
        Serial.begin(115200);
        dimmer.begin(18, 19, 50);  // ZC_PIN, DIM_PIN, 50 Hz
        dimmer.setPower(80);
        rbdimmer_thermal_init();
        thermal = rbdimmer_thermal_create(&dimmer);
        rbdimmer_thermal_set_callback(thermal, thermalCallback);
        // Fan turns on at 55°C, critical threshold 80°C
    }
    void loop() {
        float t = rbdimmer_thermal_get_last_temperature(thermal);
        Serial.printf("T=%.1f°C\n", t);
        delay(5000);
    }

    What the library does automatically:

  • ☐ Turns on the fan when temperature threshold is reached (default 55°C)
  • ☐ Reduces TRIAC power at critical temperature (80°C)
  • ☐ Emergency shutdown if maximum is exceeded
  • ☐ Detects NTC sensor failure
  • Alternative: DimmerLink manages cooling and TRIAC protection autonomously without any MCU code.



    ⚠️ Common pitfalls

    • "4A module, 3A load — should work, but overheats": 4A is the rating with a proper heatsink. Without one the real maximum is ~2A. Add a 40×40 mm heatsink.

    • "Works fine for 10 minutes, then flickering": TRIAC thermal protection triggers after warm-up. Add a heatsink or reduce the load.

    • "Added heatsink, now the device enclosure is hot": The TRIAC metal tab is live. An insulating TO-220 pad between the tab and the heatsink is mandatory.

    • "TRIAC burned out — load is always at 100%": A failed TRIAC shorts out. The load gets full power with no control. The module needs to be replaced entirely.

    • "Motor 200W — seems small, should be OK without heatsink": Motor loads are harsher than resistive loads of the same power: reactive current, inrush current (5–8× nominal at startup), dv/dt spikes at turn-off. Heatsink + snubber are both required.

    • "LED strip 100W on dimmer — module runs hot": An LED strip with a switching power supply is not a resistive load. The PSU charges its input capacitors at the start of each half-cycle: when the TRIAC opens, it carries an inrush pulse 5–10× above the nominal current. These I²t pulses heat the TRIAC far more than an equivalent resistive load. See: load-types/led-lamp-compatibility-triac.md




    Quick Check

  • ☐ Load > 200W? → Heatsink required
  • ☐ Load > 500W? → Medium heatsink, 40×40 mm minimum
  • ☐ Load > 1kW? → Large heatsink + forced cooling
  • ☐ Inductive load (motor, transformer)? → RC snubber
  • ☐ Heatsink insulated from the enclosure? → TO-220 pad
  • ☐ Snubber capacitor: class X2, rated 400V?
  • ☐ TRIAC blown (always 100%)? → Replace module


  • Related Issues

    • LED flicker with dimmerload-types/led-flicker-triac-dimmer.md
    • LED lamp compatibility with TRIAC dimmerload-types/led-lamp-compatibility-triac.md
    • Dimmer doesn't regulate (PWM mistake)troubleshooting/ac-dimmer-not-pwm.md



    Still have questions?

    Ask on forum.rbdimmer.com or open a GitHub Issue.

    Share this post
    Sign in to leave a comment