Comment synchroniser les sorties PWM d'un microcontrôleur pour commander plus efficacement les charges
Avec la contribution de Rédacteurs nord-américains de DigiKey
2020-01-08
La plupart des microcontrôleurs sont dotés d'au moins un périphérique de modulation de largeur d'impulsion (PWM) qui génère plusieurs formes d'ondes sous la forme d'ondes carrées. Ces sorties PWM peuvent être utilisées pour commander des charges synchrones telles que les moteurs pas-à-pas dans les systèmes mécaniques et les MOSFET de puissance pour les convertisseurs de puissance. Pour ces charges, il est important que les formes d'ondes PWM soient synchronisées avec précision pour un bon fonctionnement de la charge cible.
Si le périphérique PWM n'est pas soigneusement programmé, cela peut entraîner des temps de propagation de phase occasionnels entre les formes d'ondes, entraînant une perte de synchronisation lorsque les bords de la forme d'onde ne s'alignent pas correctement. Ces temps de propagation de phase résultent en des charges commandées de manière inefficace, ce qui gaspille de l'énergie et peut générer un excès de chaleur. Pour les périphériques PWM courants, il est possible d'activer ou de désactiver la modulation PWM, tout en provoquant des temps de propagation de phase avec d'autres sorties PWM.
Cela pose particulièrement problème pour les applications Internet des objets (IoT) compactes alimentées par batterie dans lesquelles un seul périphérique à 16 ou 32 sorties PWM est utilisé pour contrôler plusieurs charges externes. Pour ces applications IoT, les temps de propagation de phase peuvent gaspiller l'énergie de la batterie. De plus, étant donné que les temps de propagation de phase ne sont pas détectés, ils peuvent être ignorés par un diagnostic réseau du point d'extrémité IoT.
Cet article traite de certaines des applications de périphériques PWM de microcontrôleurs et des cas où il est important que les formes d'onde PWM dans ces applications restent synchronisées. Il étudie ensuite un microcontrôleur de Maxim Integrated qui est doté d'un périphérique de train d'impulsions spécialement conçu pour empêcher la perte de synchronisation des formes d'ondes dans ces applications et il explique comment configurer ce périphérique pour garantir une commande efficace de la charge cible.
Périphériques PWM de microcontrôleurs et charges cibles associées
La plupart des microcontrôleurs à usage général sont dotés d'au moins un périphérique PWM, utilisé pour générer des ondes carrées répétitives et régulières. De nombreuses charges peuvent bénéficier d'une commande PWM, des charges simples aux systèmes de commande mécanique plus complexes.
Les diodes électroluminescentes (LED) sont un exemple de charge simple pouvant être commandée de manière très efficace avec un signal PWM, en particulier pour les applications où une LED colorée nécessite une gradation. Par rapport à la gradation d'une LED en faisant varier le courant CC direct, la gradation PWM maintient la qualité de la lumière avec plus de précision, sans changement notable de couleur. Un périphérique PWM peut facilement commander une ou plusieurs LED. Si les LED sont utilisées comme indicateurs visuels pour un opérateur, les différences de phase entre deux ou plusieurs LED ne sont pas perceptibles. Cependant, si les LED sont utilisées dans une application plus complexe, par exemple lorsque plusieurs LED communiquent des données sous forme de modulation de la lumière aux récepteurs optiques, la synchronisation des LED peut s'avérer être un élément important à prendre en compte lors de la conception.
Une autre charge simple pour la modulation PWM d'un microcontrôleur est un moteur CC commandé via un circuit intégré de variateur moteur. Alors que la vitesse du moteur CC peut être facilement modifiée en faisant varier la tension entre ses deux bornes, le contrôle PWM permet un contrôle plus précis de la rotation du moteur. Si un capteur de vitesse est utilisé pour un système de contrôle en boucle fermée, il est possible de maintenir la vitesse du moteur avec plus de précision. Si deux moteurs CC ou plus sont utilisés et doivent fonctionner ensemble, il peut être nécessaire de synchroniser les formes d'ondes PWM pour maintenir un contrôle exact de la vitesse entre les moteurs.
Commande de moteurs pas-à-pas bipolaires
La conception devient plus complexe lorsqu'il s'agit de commander des moteurs pas-à-pas bipolaires. Les moteurs pas-à-pas bipolaires sont commandés par deux enroulements de courant réversibles (Figure 1). Chaque enroulement nécessite deux PWM, donc quatre PWM sont nécessaires.
Figure 1 : Un moteur pas-à-pas bipolaire est entraîné par deux enroulements de courant (représentés par des bobines rouge et verte), utilisés pour transporter le courant dans chaque direction. En contrôlant la phase et la durée du flux de courant dans les enroulements, la vitesse et la position du moteur peuvent être facilement contrôlées. (Source de l'image : DigiKey)
Comme le montre la Figure 1, les deux enroulements de courant représentés par des bobines rouge et verte doivent être commandés dans le bon ordre pour que le moteur fonctionne. La séquence illustrée à la Figure 2 commande le moteur pas-à-pas bipolaire d'un pas complet à chaque changement de forme d'onde.
Figure 2 : Chacune des deux bobines d'un moteur pas-à-pas bipolaire doit être commandée conformément au schéma ci-dessus pour que le moteur se déplace d'un pas complet à chaque changement de forme d'onde. Le courant dans chaque bobine est d'abord commandé dans une direction ; ensuite la bobine est inactive ; puis le courant est commandé dans la direction opposée. (Source de l'image : DigiKey)
Chaque pas du moteur commence à chaque transition de forme d'onde. Comme le montre la Figure 2, la polarité de tension sur les enroulements, et donc le flux de courant à travers chaque enroulement, change à chaque pas. Les temps de propagation de phase dans l'un des signaux PWM peuvent entraîner le cafouillage du moteur, entraînant une perte de couple, en particulier à basse vitesse.
Un microcontrôleur avec un périphérique PWM qui n'utilise que quatre sorties peut contrôler facilement le moteur pas-à-pas avec une intervention modérée, nécessaire pour maintenir la synchronisation. Cependant, la situation est plus complexe si le même périphérique PWM est utilisé pour contrôler plusieurs charges. Par exemple, un périphérique PWM à 16 sorties peut avoir quatre sorties PWM affectées à un moteur pas-à-pas, les autres sorties PWM étant affectées à d'autres charges telles que des moteurs CC ou des LED. Une fois que les sorties PWM sont configurées pour la fréquence et le rapport cyclique à l'aide des registres appropriés, un bit est défini dans un registre d'activation/de désactivation pour chaque périphérique PWM. Dans un microcontrôleur Arm®, le micrologiciel peut définir les bits appropriés en utilisant un alignement des bits (« bit-banding »). Cependant, l'alignement des bits effectue une lecture/modification/écriture (RMW) sur le registre cible. Si d'autres sorties PWM sont programmées pour démarrer ou se terminer pendant l'opération de lecture/modification/écriture, le résultat peut être imprévisible et, dans certaines situations, peut activer ou désactiver un périphérique PWM contraire au contrôle du micrologiciel.
Maxim Integrated a résolu ce problème avec le microcontrôleur Arm Cortex®-M4F MAX32650 qui fonctionne à 120 MHz. Il offre une vaste gamme de périphériques, dont trois interfaces SPI standard, une interface SPI Quad, trois UART, deux ports I2C, une interface USB 2.0 haute vitesse avec couche physique (PHY), six temporisateurs 32 bits et une unité de cryptage AES-256 (Figure 3).
Figure 3 : Le MAX32650 de Maxim Integrated est basé sur Arm Cortex-M4F 120 MHz et offre une gamme complète de périphériques et d'options de mémoire ciblant les applications edge computing IoT hautes performances. (Source de l'image : Maxim Integrated)
Avec 3 Mo de mémoire Flash et 1 Mo de mémoire SRAM, le MAX32650 cible les points d'extrémité Internet des objets (IoT) sophistiqués qui nécessitent l'edge computing. Le MAX32650 est également doté d'un périphérique de train d'impulsions à 16 sorties capable de générer des signaux PWM sophistiqués. Il peut générer des ondes carrées avec une fréquence configurable et un rapport cyclique de 50 %, ainsi qu'un train d'impulsions basé sur un modèle de bits programmable pouvant atteindre 32 bits de longueur.
Empêcher les temps de propagation de phase
Le générateur de train d'impulsions peut activer ou désactiver individuellement n'importe laquelle des 16 sorties PWM à l'aide du registre PTG_ENABLE 32 bits. L'écriture d'un 1 à n'importe quelle position de bit active ce train d'impulsions, lui permettant de s'exécuter suivant la configuration. L'écriture d'un 0 arrête la logique et les horloges du train d'impulsions, bloquant la sortie à son état logique actuel. Ce registre présente les mêmes limitations de lecture/modification/écriture que les registres d'activation/de désactivation trouvés dans la plupart des microcontrôleurs, donc l'alignement des bits n'est pas recommandé.
Pour maintenir la synchronisation de phase entre les formes d'ondes, le périphérique de train d'impulsions du MAX32650 prend en charge une fonction unique appelée Safe Enable à l'aide du registre 32 bits PTG_SAFE_EN, et Safe Disable à l'aide du registre 32 bits PTG_SAFE_DIS. Les 16 bits supérieurs de chacun de ces registres ne sont pas utilisés et il est recommandé de toujours écrire les positions non utilisées avec des zéros.
Pour activer en toute sécurité l'une des sorties, le micrologiciel écrit un 1 aux positions de bits correspondantes dans PTG_SAFE_EN. Cela définit également immédiatement les positions des bits pour les sorties dans PTG_ENABLE, démarrant la sortie PWM. L'écriture d'un 0 dans n'importe quelle position de bit dans PTG_SAFE_EN n'a aucun effet sur les sorties du train d'impulsions.
Pour désactiver en toute sécurité les sorties, le micrologiciel écrit un 1 aux positions de bits correspondantes dans PTG_SAFE_DIS. Cela efface également immédiatement les positions des bits pour les sorties dans PTG_ENABLE, arrêtant la sortie PWM. L'écriture d'un 0 à n'importe quelle position de bit dans PTG_SAFE_DIS n'a aucun effet sur les sorties du train d'impulsions.
L'écriture dans ces registres n'effectue pas de lecture/modification/écriture. La fonction Safe Enable/Disable permet de démarrer ou d'arrêter immédiatement un ou plusieurs trains d'impulsions, tout en garantissant qu'aucun autre train d'impulsions ne sera affecté. L'alignement des bits n'est pas pris en charge pour les registres PTG_SAFE_EN et PTG_SAFE_DIS.
En se référant au moteur pas-à-pas bipolaire de la Figure 1, les sorties de train d'impulsions 0 et 1 peuvent être utilisées pour A et B pour l'enroulement de courant vert, tandis que les sorties de train d'impulsions 2 et 3 peuvent être utilisées pour C et D pour l'enroulement de courant rouge. Étant donné que les formes d'ondes de la Figure 2 présentent des zones mortes, il est approprié d'utiliser la fonction de train d'impulsions pour programmer un modèle qui peut être configuré pour se répéter autant de fois que nécessaire sans intervention du micrologiciel.
Une fois réglé, le moteur peut être démarré en écrivant 0000000Fh dans PTG_SAFE_EN. Cela démarre simultanément les sorties de train d'impulsions 0 à 3, ce qui lance le moteur sans affecter les autres sorties de train d'impulsions en cours. Le moteur peut être arrêté en écrivant 0000000Fh dans PTG_SAFE_DIS. Ces deux opérations n'ont aucun effet sur les autres trains d'impulsions en cours d'exécution.
Si l'une des 12 autres sorties du train d'impulsions doit être activée ou désactivée, elle peut être contrôlée en toute sécurité à l'aide de ces deux registres. Tant qu'un 1 n'est pas écrit sur les positions des quatre bits inférieurs dans ces registres, le fonctionnement du moteur pas-à-pas n'est pas affecté. Cela contraste avec l'utilisation d'un registre d'activation standard avec lecture/modification/écriture où les sorties peuvent cafouiller, provoquant un déphasage qui peut affecter négativement le couple. La fonction Safe Enable/Disable est semblable à une opération atomique et garantit ainsi que le moteur pas-à-pas fonctionne efficacement, ne gaspille pas d'énergie et maintient un couple maximal à tout moment.
Les broches de sortie du microcontrôleur n'ont pas la capacité suffisante pour commander un moteur pas-à-pas et nécessitent un variateur moteur ou un pont en H. L'A3909GLYTR-T d'Allegro MicroSystems est un circuit d'attaque à pont en H double capable de faire fonctionner des moteurs qui requièrent de 4 V à 18 V et jusqu'à 1 A par enroulement de courant (Figure 4).
Figure 4 : L'A3909 d'Allegro MicroSystems est un circuit d'attaque à pont en H double qui peut fournir et absorber jusqu'à 1 A pour les bobines de moteur pas-à-pas. (Source de l'image : Allegro MicroSystems)
L'A3909 offre une protection contre le blocage thermique, contre les surintensités et contre les courts-circuits. Chaque entrée (INx) commande la sortie correspondante (OUTx). Le périphérique PWM MAX32650 permet de connecter les sorties de train d'impulsions 0 et 1 aux entrées IN1 et IN2 (en vert) pour commander la bobine verte via OUT1 et OUT2, et les sorties de train d'impulsions 2 et 3 à IN3 et IN4 (en rouge) pour commander la bobine rouge via OUT3 et OUT4. Cela permet à l'A3909 de commander directement le moteur pas-à-pas.
L'A3909 prend également en charge une fonction haute impédance utile. Si les deux entrées d'un pont en H sont 0 logique pendant plus d'une milliseconde (ms), les deux sorties sont placées dans un état haute impédance. Cela s'avère utile pour permettre au moteur de tourner en roue libre ou pour tous les pas du moteur pas-à-pas qui nécessitent que la sortie soit à haute impédance. En se référant à nouveau à la Figure 2, toute partie de la forme d'onde qui est inactive gagnerait à être mise dans un état haute impédance. Cela améliore le rendement en empêchant la bobine de courant d'interférer avec le fonctionnement du moteur lors de son passage par l'autre bobine de courant.
Si les quatre entrées (les deux paires) sont maintenues à l'état bas pendant plus de 1 ms, les deux paires de sorties passent à l'état haute impédance, exactement comme décrit ci-dessus. Dans la fiche technique, il s'agit du Sleep Mode (mode veille), car en plus, certains circuits internes se mettent hors tension.
Conclusion
Les périphériques de microcontrôleur courants incluent souvent des fonctions PWM utilisées pour commander des charges externes telles que des moteurs et des MOSFET de puissance. Étant donné que l'exécution d'opérations de manipulation de bits sur le registre d'activation PWM peut entraîner des résultats imprévisibles dans certains cas, les fournisseurs de microcontrôleurs résolvent ce problème avec de nouveaux périphériques PWM offrant des fonctionnalités qui peuvent activer et désactiver en toute sécurité les sorties PWM individuelles, sans interférer avec d'autres sorties PWM, empêchant ainsi des temps de propagation de phase occasionnels et des pertes de synchronisation.

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.