- pwm
- esp32
- ledc
- commande moteur
- commande de servo
Fréquence et résolution PWM : le compromis du temporisateur

Une sortie PWM ne peut pas avoir une fréquence illimitée et une résolution illimitée du rapport cyclique avec le même temporisateur. Le temporisateur doit compter entre un front montant et le suivant; l’augmentation de la fréquence raccourcit donc la fenêtre de comptage et réduit le nombre de pas disponibles. La réponse honnête consiste à choisir d’abord la fréquence selon la charge, puis à utiliser tous les bits de résolution qui tiennent encore dans la période.
Comment un temporisateur PWM crée la résolution
Un temporisateur PWM fonctionne à partir d’une horloge, compte vers le haut et modifie la sortie aux points de comparaison programmés. La période se termine lorsque le compteur atteint sa valeur maximale, puis la séquence recommence. Le rapport cyclique est la fraction de cette période pendant laquelle la sortie est à l’état haut.
Si un temporisateur a une plage de comptage utilisable de 0 à 255, il peut représenter 256 réglages du rapport cyclique, souvent décrits comme une PWM de 8 bits. Une plage de 12 bits fournit 4096 réglages. La relation utile est la suivante :
nombre de comptes par période = fréquence de l’horloge du temporisateur / fréquence PWM bits de résolution = floor(log2(nombre de comptes par période))
Cette relation représente une limite idéale. Les choix du prédiviseur, une valeur maximale fixe du compteur, le comptage centré, le temps mort et le format des registres du périphérique peuvent réduire le résultat. La règle physique ne change pas : la résolution PWM disponible dépend du nombre de comptes du temporisateur qui peuvent tenir dans une période; une fréquence plus élevée laisse donc moins de bits utilisables.
À 1 kHz, un temporisateur cadencé à 1 MHz a environ 1000 comptes par période, ce qui correspond à un peu moins de 10 bits. À 20 kHz, le même temporisateur a environ 50 comptes, ce qui ne donne que 5 bits si le temporisateur doit utiliser une plage de comptage en puissance de deux. Une horloge de temporisateur plus rapide peut récupérer une partie de cette résolution, mais les limites de l’horloge et du diviseur dépendent du microcontrôleur utilisé.
Le plus petit pas du rapport cyclique correspond approximativement à un compte par période. Avec 1000 comptes, une variation d’un compte représente environ 0,1 % du rapport cyclique. Avec 50 comptes, elle représente environ 2 %. C’est cette taille de pas que voit la charge, même si la variable logicielle est stockée sous forme de nombre de 16 bits. Une valeur de 16 bits mappée sur un temporisateur de 50 comptes ne donne toujours qu’environ 50 positions réelles de sortie.
Ce que cela signifie sur un ESP32
Sur l’ESP32, la PWM matérielle est générée par le périphérique LED Control, généralement appelé LEDC. Elle n’est pas produite par le mécanisme analogWrite que l’on trouve sur les cartes classiques de 8 bits. Le noyau Arduino-ESP32 peut exposer des fonctions pratiques dont les noms varient selon la version du noyau, mais la ressource PWM sous-jacente est LEDC, avec des temporisateurs matériels, des canaux, une fréquence et une résolution du rapport cyclique.
Cette distinction est importante, car LEDC associe la fréquence et la résolution du rapport cyclique à une configuration de temporisateur sélectionnée. Les canaux associés au même temporisateur LEDC partagent ses réglages de fréquence et de résolution du rapport cyclique. Une modification destinée à une sortie peut donc aussi toucher une autre sortie si les deux canaux utilisent ce temporisateur. Consultez l’API LEDC de la version du noyau et la documentation du périphérique de la variante ESP32 au lieu de copier un exemple conçu pour une ancienne version du noyau Arduino.
Voici une séquence de configuration utile :
- Énumérez les fréquences PWM requises avant d’attribuer les broches.
- Regroupez les sorties qui peuvent partager un temporisateur, comme plusieurs DEL utilisant la même fréquence porteuse.
- Calculez le nombre de comptes requis à partir de l’horloge du temporisateur et de la fréquence cible.
- Sélectionnez la résolution la plus élevée que le périphérique peut réellement maintenir à cette fréquence.
- Confirmez la largeur du registre du rapport cyclique et la valeur maximale du rapport cyclique dans la documentation de la variante ESP32 et de la version de l’environnement de développement.
- Observez la broche à l’oscilloscope et mesurez la période réelle ainsi que le rapport cyclique après la configuration.
Le comportement des temporisateurs à haute et à basse vitesse, le choix de la source d’horloge et la résolution disponible varient selon le membre de la famille ESP32. Un ESP32, un ESP32-S2, un ESP32-S3 et un ESP32-C3 ne doivent pas être considérés comme interchangeables pour les détails des périphériques.
Choisir la PWM pour la gradation des DEL
La gradation des DEL nécessite généralement une fréquence suffisamment élevée pour que l’œil ne voie pas les impulsions individuelles et que la caméra ne produise pas de bandes gênantes. Une plage de départ allant de quelques centaines de hertz à quelques kilohertz convient à de nombreux voyants visibles et systèmes de DEL architecturaux, mais la valeur appropriée dépend du pilote de DEL, du dispositif de commutation, du câblage et de l’exposition de la caméra.
La charge peut contenir son propre régulateur ou circuit à courant constant. Certains pilotes attendent une fréquence d’entrée PWM et une plage de rapport cyclique précises. D’autres filtrent le signal ou interprètent une entrée d’activation à basse fréquence différemment d’une entrée de gradation rapide. La fiche technique du pilote a priorité sur un exemple générique de microcontrôleur.
Pour un éclairage indicateur ordinaire, la solution simple suffit généralement : une porteuse appropriée de quelques kilohertz avec 8 à 12 bits effectifs est souvent plus utile qu’un contrôleur à fréquence et résolution élevées que le pilote ne peut pas reproduire. Une installation avec caméra ou un système de mesure optique sensible peut justifier une porteuse plus élevée, mais mesurez le résultat obtenu par la caméra avant de la sélectionner.
Choisir la PWM pour commander un moteur
La PWM d’un moteur est une décision de commutation de puissance, pas seulement une décision de commande de luminosité. La fréquence influence l’ondulation du courant, les pertes de commutation, le bruit acoustique, le recouvrement inverse des diodes, les interférences électromagnétiques et le temps de mise à jour disponible pour la boucle de commande.
Un moteur CC à balais peut fonctionner convenablement à partir de quelques kilohertz. De nombreuses conceptions choisissent une fréquence supérieure à la plage audible la plus gênante, souvent autour de 16 à 25 kHz, mais il s’agit d’une plage de départ et non d’une règle universelle. L’inductance du moteur, la tension d’alimentation, le MOSFET, le pilote de grille, l’inertie de la charge et le chemin thermique déterminent si ce choix est raisonnable.
Un onduleur triphasé impose des contraintes supplémentaires. Le temps mort doit empêcher les interrupteurs du côté haut et du côté bas d’une même branche de conduire simultanément. La PWM centrée peut réduire certaines asymétries de forme d’onde et est courante dans les périphériques de commande de moteur, mais elle modifie la relation entre les comptes du temporisateur et la fréquence porteuse indiquée. Certains schémas de commande nécessitent aussi un échantillonnage synchronisé du CAN à un point connu du cycle PWM.
| Application | Fréquence de départ pratique | Problème de résolution | Principal mode de défaillance à tester |
|---|---|---|---|
| Gradation de DEL visibles | De quelques centaines de hertz à quelques kilohertz | Suffisamment de pas pour le pilote et la plage de faible luminosité souhaitée | Scintillement, bandes à la caméra ou faible rapport cyclique instable |
| Moteur CC à balais | De quelques kilohertz à environ 25 kHz | Les pas de commande du courant doivent être plus petits que ce que la boucle peut distinguer | Chaleur excessive, sifflement audible, ondulation du courant ou IEM |
| Commande de servo RC | Habituellement 50 Hz pour les entrées analogiques classiques | La taille du pas de largeur d’impulsion compte davantage que le nombre total de bits du rapport cyclique | Limites d’impulsion incorrectes, instabilité temporelle ou servo qui refuse la fréquence de trame |
Si le contrôleur du moteur ferme une boucle de courant ou de vitesse, calculez quelle variation du rapport cyclique correspond à une variation significative du courant. Cinq bits effectifs peuvent être insuffisants pour une commande fine du courant, même si le moteur tourne. À l’inverse, ajouter des bits à une fréquence qui fait perdre trop de puissance de commutation au MOSFET est un mauvais compromis. Mesurez la température de l’interrupteur, l’ondulation réelle du courant du moteur et la forme d’onde réelle de la broche sous charge.
Choisir la PWM pour commander un servo
Un servo de loisir classique n’utilise pas la PWM dans le même sens qu’un contrôleur de vitesse de moteur. Il mesure généralement la largeur d’une impulsion de commande répétée à une fréquence de trame, 50 Hz étant courant pour les servos analogiques classiques. C’est la largeur de l’impulsion, et non le rapport cyclique moyen, qui représente la position demandée.
À 50 Hz, la trame dure 20 ms. Un temporisateur dont les pas durent 1 microseconde peut représenter des variations de l’impulsion par incréments de 1 microseconde, ce qui est généralement une spécification plus utile que d’indiquer que le signal possède un certain nombre de bits de rapport cyclique. L’électronique interne du servo, le jeu des engrenages, la zone morte, la tension d’alimentation et la charge mécanique peuvent être beaucoup moins précis que le temporisateur.
Certains servos numériques acceptent des fréquences de trame plus élevées, mais la plage permise est une caractéristique propre au servo, indiquée dans sa fiche technique. N’augmentez pas la fréquence simplement parce qu’un temporisateur peut la générer. Un servo peut ignorer la commande, se comporter de façon imprévisible ou consommer le courant différemment si la durée de trame prévue est dépassée.
Réglez la plage d’impulsion avec prudence, vérifiez les limites indiquées pour le servo et testez la course sans forcer la tringlerie contre une butée. Pour une sortie de servo, la stabilité temporelle et la largeur d’impulsion correcte comptent davantage que la maximisation de la résolution PWM nominale. Sur un ESP32, réservez une configuration de temporisateur qui fournit un pas pratique pour la largeur d’impulsion et évitez que des sorties haute fréquence sans rapport partagent ce temporisateur.
Une méthode sur établi pour choisir le réglage
Commencez par l’exigence de la charge, et non par le plus grand nombre dans l’API. Notez la fréquence minimale acceptable, la fréquence maximale permise par le pilote ou l’actionneur et la plus petite variation utile du rapport cyclique ou de la largeur d’impulsion. Calculez ensuite le budget de comptes.
Pour un périphérique dont l’horloge du temporisateur est F et dont la fréquence cible est f, estimez F / f. Si le résultat est de 2048 comptes, 11 bits correspondent à la résolution pratique en puissance de deux. Si le résultat est de 300 comptes, un périphérique qui prend en charge une valeur maximale arbitraire peut offrir davantage de pas utilisables qu’un mode fixe de 8 ou 9 bits, mais confirmez le comportement du registre.
Mesurez trois éléments sur le circuit assemblé :
- La fréquence et le rapport cyclique à la broche avec un oscilloscope ou un analyseur logique.
- La tension et le courant à la charge avec un rapport cyclique faible, moyen et élevé.
- La température ainsi que les artefacts audibles ou visibles une fois que la charge a atteint ses conditions normales de fonctionnement.
Modifiez une seule variable à la fois. Si l’augmentation de la fréquence réduit l’ondulation du moteur, mais augmente la température de l’interrupteur, le compromis du temporisateur se comporte exactement comme prévu. Si la modification du rapport cyclique n’entraîne aucun changement mesurable de la charge, une résolution logicielle supplémentaire n’améliore pas la commande.
Questions fréquentes
Une fréquence PWM plus élevée réduit-elle toujours la résolution?
Elle réduit le budget de comptes disponible lorsque l’horloge du temporisateur reste la même. Une autre source d’horloge, un autre diviseur ou un autre mode de temporisateur peut modifier le résultat exact, mais la période doit toujours contenir les comptes du temporisateur qui représentent le rapport cyclique. Une fréquence plus élevée ne peut pas fournir davantage de comptes à partir d’une horloge et de limites matérielles inchangées.
Une PWM de 16 bits est-elle vraiment de 16 bits sur un ESP32?
Seulement si la configuration du temporisateur LEDC sélectionné peut contenir 65 536 comptes utilisables dans la période demandée et si la variante ESP32 prend en charge cette combinaison. Une valeur logicielle du rapport cyclique de 16 bits peut être mise à l’échelle vers une plage matérielle plus petite. Vérifiez la fréquence configurée, la résolution, la source d’horloge et les limites LEDC propres à la variante, puis mesurez la sortie.
Quelle fréquence PWM un servo doit-il utiliser?
Utilisez la plage de fréquences de trame indiquée par le fabricant du servo. Environ 50 Hz est courant pour les signaux de commande de servos RC classiques, mais les servos numériques peuvent accepter d’autres fréquences, et certains ne les acceptent pas. Les limites de largeur d’impulsion et la stabilité temporelle comptent davantage que le choix du plus grand nombre de bits possible.
The Boss Factory réalise sur commande de l’électronique sur mesure, des systèmes à DEL et des logiciels; demandez une soumission au moyen de ce formulaire.
Services associés
Tous les services →Vous avez un projet en tête?
Dites-nous ce que vous voulez faire fabriquer — nous répondons en 24 à 48 heures.