← 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.
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() :
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.
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_ATTRest utilisé pour placer le code du gestionnaire en IRAM - Les calculs complexes sont effectués en dehors des gestionnaires d'interruption
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).
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_POSEDGEutilisé (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 →