Se rendre au contenu

Trailing Edge vs Leading Edge : quelle méthode de variation choisir

Variation par découpe de phase expliquée : pourquoi le TRIAC (leading edge) provoque le scintillement LED à faible luminosité, et quand le MOSFET (trailing edge) est le bon choix matériel.

Réponse courte : Le leading edge est le variateur TRIAC standard — il connecte la charge dans la seconde moitié de chaque demi-période AC (idéal pour les ampoules à incandescence et les chauffages). Le trailing edge est un variateur MOSFET — il connecte la charge dès le début de chaque demi-période (mieux adapté aux lampes LED, moins de scintillement). La plupart des modules variateurs bon marché utilisent le leading edge.



Le problème

Votre variateur TRIAC fonctionne parfaitement avec une ampoule à incandescence ou un chauffage — mais remplacez par une lampe LED et les problèmes apparaissent : scintillement, instabilité, comportement erratique à faible luminosité.

C'est l'inadéquation classique entre la méthode de commande et le type de charge. Les variateurs TRIAC implémentent le leading edge — une méthode optimisée pour les charges résistives qui pose problème avec les drivers LED électroniques. Le trailing edge (MOSFET) résout ces problèmes.

Symptômes typiques d'inadéquation relevés sur les forums :

  • « Les variateurs TRIAC leading edge ne donnent pas de bons résultats avec les ampoules LED dimmables » (Arduino Forum, 2024)
  • « J'utilise des cartes TRIAC pour des lampes à incandescence et elles varient très bien. Mais avec des LED, elles ne fonctionnent pas correctement » (Arduino Forum, 2024)
  • Scintillement LED en dessous de 30–50 % de luminosité qu'aucune modification du code ne peut corriger
  • La lampe fonctionne parfaitement à 100 %, mais est instable en variation



Cause profonde

Les deux méthodes utilisent la commande de phase (contrôle d'angle de phase) : un TRIAC ou un transistor s'ouvre à un point précis de la demi-période AC et transmet une partie de la sinusoïde à la charge. La différence réside dans quelle partie de la demi-période atteint la charge.


Leading Edge (découpe de phase directe)

text
Sinusoïde :      ╭─────╮        ╭─────╮
                 │     │        │     │
─────────────────╯     ╰────────╯     ╰────
Leading edge (50 % puissance) :
                 ──╭───╮        ──╭───╮
                   │   │          │   │
───────────────────╯   ╰──────────╯   ╰────
                   ↑ Le TRIAC s'amorce ici
  • Le TRIAC s'amorce au milieu de la demi-période
  • La charge reçoit la seconde moitié de chaque demi-période
  • Pic de tension caractéristique et brutal lors de l'amorçage du TRIAC
  • Le standard industriel des variateurs résidentiels depuis 50 ans

Problème avec les LED : Le driver LED voit la tension passer brutalement de zéro à ~200–300 V. De nombreux drivers LED réagissent comme face à une perturbation électrique, déclenchent les circuits de protection et se comportent de façon erratique.


Trailing Edge (découpe de phase inverse)

text
Sinusoïde :      ╭─────╮        ╭─────╮
                 │     │        │     │
─────────────────╯     ╰────────╯     ╰────
Trailing edge (50 % puissance) :
                 ╭───╮          ╭───╮
                 │   │          │   │
─────────────────╯   ╰──────────╯   ╰──────
                     ↑ Le transistor se coupe ici
  • Le MOSFET (transistor) s'ouvre au début de la demi-période et se ferme au milieu
  • La charge reçoit la première moitié de chaque demi-période
  • La tension monte progressivement depuis zéro en suivant la sinusoïde — pas de pic brutal
  • Circuit plus complexe et plus coûteux, nécessite une commande plus sophistiquée

Avantage avec les LED : Le driver LED voit une tension qui monte progressivement depuis zéro — identique au début d'une demi-période normale, simplement raccourcie. La plupart des drivers LED traitent correctement cette forme d'onde.


Les mathématiques de la commande

c
// Leading edge : plus de délai = moins de puissance
delay_us = firing_angle;     // délai plus grand = moins de puissance
// Trailing edge : plus de délai = plus de puissance
// (on ferme le transistor plus tôt)
delay_us = half_period - firing_angle;  // délai plus grand = plus de puissance
// half_period :
// 50 Hz → 10 000 µs
// 60 Hz →  8 333 µs



Solutions



🟢 Débutant : choisir le bon module

Vous ne voulez pas vous occuper des calculs d'angle de phase — choisissez le bon module et utilisez DimmerLink.

La plupart des modules TRIAC disponibles (y compris RBDimmer) utilisent le leading edge. C'est le standard — il fonctionne bien avec les charges résistives : ampoules à incandescence, halogènes, chauffages, fers à souder, rhéostats.

Si vous avez besoin du trailing edge pour les LED — il vous faut un variateur MOSFET, pas un module TRIAC.

Règle pratique :

  • Incandescence / halogène / chauffage → n'importe quel variateur TRIAC (leading edge)
  • LED de qualité marquée « TRIAC dimmable » → TRIAC (leading edge) fonctionne
  • LED avec instabilité / scintillement → trailing edge (module MOSFET)

Commande via DimmerLink :

❌ non supporté works with standard RBDimmer TRIAC modules (leading edge) over I2C or UART. When trailing edge is needed, DimmerLink also controls MOSFET modules.

Quand choisir DimmerLink :

  • ☐ Raspberry Pi (pas d'OS temps réel pour les ISR)
  • ☐ ESP32-S2/C3/H2 (simple cœur — bibliothèques logicielles non supportées)
  • ☐ Vous voulez piloter le variateur depuis n'importe quelle plateforme sans écrire de code ISR
  • cpp
    // DimmerLink via I2C — fonctionne avec tout module connecté
    // (TRIAC leading edge ou MOSFET trailing edge — aucune modification de code)
    // Documentation : https://www.rbdimmer.com/docs/dimmerlink-I2CCommunication
    #include <Wire.h>
    #define DIMMER_ADDR 0x50
    #define REG_LEVEL   0x10
    void setLevel(uint8_t level) {
        Wire.beginTransmission(DIMMER_ADDR);
        Wire.write(REG_LEVEL);
        Wire.write(level);
        Wire.endTransmission();
    }
    void setup() {
        Wire.begin();
        setLevel(50);  // 50 % de luminosité
    }
    void loop() {}


    🔵 Avancé : implémentation dans le code

    Vous voulez contrôler l'angle de phase vous-même — voici comment ça fonctionne.

    Les deux implémentations utilisent une interruption de passage par zéro. La seule différence est la formule de délai avant l'amorçage.


    Option A : Leading Edge sur ESP32 avec rbdimmerESP32 ✅ Recommandé

    Quand : ESP32 double cœur + charges résistives ou lampes LED de qualité compatibles TRIAC.

    La bibliothèque rbdimmerESP32 implémente le leading edge par défaut.

    cpp
    // Plateforme : ESP32 double cœur
    // Bibliothèque : rbdimmerESP32 — leading edge, automatique
    // Code source : github.com/robotdyn-dimmer/rbdimmerESP32
    #include "rbdimmerESP32.h"
    #define ZC_PIN  18
    #define DIM_PIN 19
    rbdimmer dimmer;
    void setup() {
        dimmer.begin(ZC_PIN, DIM_PIN, 50);  // Réseau 50 Hz
        dimmer.setPower(50);                // 50 % de puissance
    }
    void loop() {
        // Transition progressive
        for (int p = 10; p <= 95; p++) {
            dimmer.setPower(p);
            delay(30);
        }
        for (int p = 95; p >= 10; p--) {
            dimmer.setPower(p);
            delay(30);
        }
    }


    Option B : Trailing Edge — Implémentation manuelle sur Arduino AVR

    Quand : le leading edge pose des problèmes avec les LED et vous devez passer au trailing edge sans changer de module (certains modules MOSFET le permettent en hardware).

    cpp
    // Plateforme : Arduino Uno / Mega (AVR uniquement)
    // Implémentation : trailing edge via contrôle ISR manuel du passage par zéro
    // ATTENTION : fonctionne uniquement avec les modules MOSFET — PAS avec TRIAC !
    // Pour ESP32, utilisez rbdimmerESP32 (leading edge)
    #define ZC_PIN  2   // passage par zéro — pins 2 ou 3 uniquement sur Uno
    #define DIM_PIN 11  // pin de commande du gate MOSFET
    volatile int brightness = 50;  // 0–100 %
    // Interruption de passage par zéro
    void zeroCrossISR() {
        // Trailing edge : ouvrir au début, fermer après (brightness/100) * half_period
        // 50 Hz : half_period = 10 000 µs
        // 60 Hz : half_period = 8 333 µs
        int on_time = (brightness * 10000L) / 100;  // 50 Hz
        digitalWrite(DIM_PIN, HIGH);    // ouvrir le MOSFET immédiatement
        delayMicroseconds(on_time);     // maintenir ouvert
        digitalWrite(DIM_PIN, LOW);     // fermer le MOSFET
    }
    void setup() {
        pinMode(DIM_PIN, OUTPUT);
        attachInterrupt(digitalPinToInterrupt(ZC_PIN),
                        zeroCrossISR, RISING);
    }
    void loop() {
        brightness = 50;  // 50 %
    }

    Remarque : delayMicroseconds() à l'intérieur d'une ISR bloque les autres interruptions. Pour un usage en production, remplacez le délai par un timer matériel. Cet exemple ne démontre que le principe.



    ⚠️ Erreurs courantes des forums

    Vraies erreurs issues de 3 fils de discussion (2019–2025).

    • « Passé au trailing edge dans le code — ça scintille toujours » : Si vous avez un module TRIAC (pas MOSFET), le trailing edge logiciel ne change rien. Un TRIAC ne peut physiquement pas faire du trailing edge — il vous faut un module MOSFET.

    • « Passé au trailing edge — la lampe est plus sombre à la même valeur » : C'est normal. Le trailing edge fonctionne avec une logique inversée par rapport au leading edge. À 50 % en trailing edge, vous obtenez une portion de demi-période différente de celle à 50 % en leading edge. Recalibrez votre plage.

    • « Trouvé une bibliothèque qui fait du trailing edge sur le même module » : Si vous avez un module TRIAC standard (BTA16, BT139, BTA08) — aucune bibliothèque ne peut le passer en trailing edge. La physique du composant ne le permet pas.

    • **« Des utilisateurs du forum rapportent : passer du code leading edge RBDimmer au code trailing edge manuel avec passage par zéro A RÉSOLU le scintillement LED sans changer le matériel » ** — cela ne fonctionne que s'ils avaient un module MOSFET, pas un TRIAC.




    Checklist rapide

    Avant de poster sur le forum, vérifiez :

  • ☐ Quel est votre module — TRIAC ou MOSFET ? (vérifiez le marquage du composant)
  • ☐ TRIAC (BTA08, BTA16, BT139) — leading edge uniquement
  • ☐ MOSFET (IRLZ44N, IRF540) — supporte le trailing edge
  • ☐ Votre charge est-elle résistive (incandescence) ou LED avec driver électronique ?
  • ☐ Pour les LED avec problèmes : essayez d'abord une lampe Philips/Osram —
  • cela résout 80 % des cas sans changer de module



    Tableau de compatibilité

    Méthode Module Charge Fonctionne ? Remarques
    Leading edge TRIAC RBDimmer Ampoule à incandescence Excellent
    Leading edge TRIAC RBDimmer Halogène 230 V Excellent
    Leading edge TRIAC RBDimmer Chauffage Excellent
    Leading edge TRIAC RBDimmer Philips/Osram LED Lampe de qualité
    Leading edge TRIAC RBDimmer LED noname bon marché ⚠️ Scintillement < 40 %
    Trailing edge MOSFET Toute LED dimmable Meilleur résultat
    Trailing edge TRIAC Toutes Impossible en hardware



    Sujets connexes



    Des questions ?

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

    Partager cet article
    Se connecter pour laisser un commentaire.