Se rendre au contenu

← Connexion matérielle | Sommaire | Suivant : Guide Arduino et exemples →

Bibliothèque universelle pour ESP32



Vue d'ensemble de la bibliothèque

La bibliothèque de variateur AC est une solution efficace pour contrôler la luminosité des appareils à courant alternatif (AC) à l'aide d'un microcontrôleur de la famille ESP32. La bibliothèque exploite les capacités matérielles de l'ESP32, telles que le traitement des interruptions GPIO et les timers haute précision, pour contrôler avec précision l'instant d'activation du TRIAC à chaque demi-période du courant alternatif.

Info



Fonctionnalités et avantages

  • Compatible avec les frameworks Arduino, ESP-IDF et ESPHome
  • Compatible avec les systèmes multiphasés
  • Prise en charge de plusieurs canaux de variation indépendants
  • Utilisation minimale des ressources processeur grâce aux interruptions matérielles et aux timers ESP
  • Contrôle haute précision de la luminosité des appareils AC
  • Diverses courbes de régulation de la luminosité (linéaire, RMS, logarithmique)
  • Détection automatique de la fréquence du réseau (50/60 Hz et autres)
  • Transitions douces entre les niveaux de luminosité
  • Prise en charge des fonctions callback pour la synchronisation avec d'autres événements



Prérequis


Microcontrôleur de la famille ESP32

Compatible avec Arduino ESP32 Core (version 2.0.0 ou supérieure) :

  • ESP32
  • ESP32-C3
  • ESP32-C6
  • ESP32-H2
  • ESP32-P4
  • ESP32-S2
  • ESP32-S3

Compatible avec ESP-IDF (5.0 ou supérieur) :

  • ESP32
  • ESP32-S2
  • ESP32-C3
  • ESP32-S3
  • ESP32-C2
  • ESP32-C6
  • ESP32-H2
  • ESP32-P4

Compatible avec ESPHome :

  • ESP32
  • ESP32-S2
  • ESP32-S3
  • ESP32-C3
  • ESP32-H2



Frameworks : guides et exemples


Documentation disponible

  • Guide Arduino & exemples
  • Guide ESP-IDF & exemples
  • Guide ESPHome & exemples



Spécifications fonctionnelles


Sélection de la courbe de luminosité

La bibliothèque prend en charge trois types de courbes pour le réglage de la luminosité :

Linéaire (AC_DIMMER_CURVE_LINEAR)

  • Variation uniforme de l'angle de retard
  • Adapté aux applications simples
  • La luminosité perçue n'est pas linéaire

RMS (AC_DIMMER_CURVE_RMS)

  • Compense la caractéristique RMS d'un signal sinusoïdal
  • Offre une variation de puissance linéaire
  • Idéal pour les lampes à incandescence et les charges résistives

Logarithmique (AC_DIMMER_CURVE_LOGARITHMIC)

  • Compense la perception logarithmique de la luminosité par l'œil humain
  • Assure une variation de luminosité visuellement linéaire
  • Recommandé pour l'éclairage LED


Transitions douces

Pour créer des transitions douces entre les niveaux de luminosité, utilisez la fonction ac_dimmer_set_brightness_transition() :

Tip
La fonction crée une transition douce en la décomposant en plusieurs petits pas. Elle utilise une tâche FreeRTOS ; pendant la transition, le code principal continue de s'exécuter.


Systèmes multicanaux

La bibliothèque prend en charge plusieurs canaux de variation indépendants. Le nombre de canaux est limité dans les paramètres de la bibliothèque dans le fichier ac_dimmer.h. Chaque canal de variation doit avoir une broche de sortie distincte.


Utilisation des fonctions callback d'interruption

Les fonctions callback permettent de synchroniser votre code avec les événements de passage par zéro. Utile pour les tâches nécessitant une synchronisation précise avec le réseau AC.

Warning
Utilisez un code minimal dans la fonction callback. Nous recommandons d'utiliser des appels de tâches FreeRTOS.



Optimisation et débogage


Utilisation optimale des ressources

Limitations des ESP-Timers :

  • La bibliothèque utilise esp_timer, qui permet de créer plusieurs timers logiciels
  • Pour chaque canal, 2 timers sont utilisés : un pour le retard et un pour la largeur d'impulsion

Optimisation des interruptions :

  • Les gestionnaires d'interruption sont gardés aussi courts que possible pour réduire la charge
  • L'attribut IRAM_ATTR est utilisé pour placer le code du gestionnaire en IRAM
  • Les calculs complexes sont effectués en dehors des gestionnaires d'interruption
Warning
Important : n'utilisez pas de code lourd dans la fonction callback d'interruption de passage par zéro. Nous recommandons d'utiliser des appels de tâches FreeRTOS.

Performances :

  • Les tables précalculées pour les courbes de luminosité réduisent le temps de calcul
  • La mise en cache des paramètres réduit les calculs répétés

Journal :

La bibliothèque dispose d'un système de journalisation amélioré. Pour le débogage du projet, activez la journalisation des opérations des fonctions de la bibliothèque sur le port série.



Résolution des problèmes courants


La lampe scintille ou la luminosité est instable

Cela peut se produire aux niveaux de variation 0 à 8.

Causes et solutions :

  • Connexion incorrecte du neutre et de la phase AC : vérifiez le raccordement de la source AC. Neutre sur N, phase sur AC-L IN
  • Problèmes avec le détecteur de passage par zéro : vérifiez la forme du signal et le seuil de déclenchement
  • Architecture du microcontrôleur ESP32 et Arduino core : compatibilité et priorités sous-optimales du module ISR et du module timer au niveau de l'Arduino Core
  • Charge CPU élevée : réduisez le nombre de calculs dans la boucle principale
  • Conflits d'interruptions : assurez-vous qu'aucune autre bibliothèque n'entre en conflit avec les interruptions


Luminosité incorrecte pour certains types de charges

Causes : à 50 % de luminosité, la lampe semble trop lumineuse ou trop sombre

Solution : changer le type de courbe de luminosité pour votre charge


Le détecteur de passage par zéro ne fonctionne pas

Le variateur ne répond pas aux réglages :

  • Vérifier la connexion de la broche de passage par zéro
  • S'assurer que le signal parvient à l'ESP32
  • Vérifier la fonction ac_dimmer_get_frequency() — si elle retourne 0, la fréquence du réseau n'est pas détectée



Informations techniques


Principe de fonctionnement du variateur AC

Le contrôle de puissance dans les circuits AC repose sur le principe de la régulation de phase à l'aide d'un TRIAC (thyristor).

Info
Pour plus de détails, consultez l' Article sur le fonctionnement du TRIAC.


Caractéristiques de l'ESP-Timer sur ESP32

La bibliothèque utilise esp_timer pour un contrôle précis des retards :

Avantages de l'ESP-Timer :

  • Résolution en microsecondes
  • L'implémentation logicielle permet de créer de nombreux timers
  • Faible surcharge

Architecture de l'ESP-Timer :

  • Un timer matériel pour tous les timers logiciels
  • File d'attente des timers, ordonnée par temps de déclenchement
  • Les fonctions callback sont appelées dans le contexte de la tâche timer

Limitations :

  • Légère gigue (±10 à 50 µs) sous forte charge système
  • La fonction callback ne doit pas bloquer l'exécution longtemps


Gestion des interruptions

Interruptions de passage par zéro :

  • Générées à l'instant du passage par zéro
  • Type d'interruption GPIO_INTR_POSEDGE utilisé (front montant uniquement)
  • Le gestionnaire démarre les timers pour tous les canaux actifs de la phase concernée

Timers :

  • Le premier timer est lancé pour le temps de retard et active la sortie
  • Le second timer est lancé pour déterminer la durée de l'impulsion

Méthodes d'amélioration de la stabilité :

  • Les gestionnaires d'interruption sont gardés aussi courts que possible et placés en IRAM
  • Les sections critiques protègent les données partagées
  • Calculs minimaux dans les gestionnaires d'interruption

← Connexion matérielle | Sommaire | Suivant : Guide Arduino et exemples →