Outils de développement pour ajuster la consommation énergétique des microcontrôleurs
Avec la contribution de Rédacteurs européens de DigiKey
2017-06-06
De nombreux dispositifs Internet des objets (IoT) sont liés par un point commun : la nécessité d'avoir une faible consommation d'énergie. Répondre à ce besoin nécessite une optimisation de la stratégie globale à différents niveaux. Une conception réussie suppose non seulement la sélection de composants basse consommation, mais également l'utilisation de logiciels pour étendre la capacité batterie disponible, et ces composants doivent fonctionner ensemble le plus efficacement possible. Même d'infimes modifications à l'implémentation matérielle et logicielle peuvent considérablement affecter la consommation globale d'énergie.
Un microcontrôleur conçu pour un rendement énergétique élevé est au cœur de la plupart des dispositifs IoT. Un microcontrôleur basse consommation typique inclut une gamme de périphériques intelligents qui commandent les E/S et les fonctions essentielles du système au nom du processeur central. Si un port série (UART) peut souvent envoyer et recevoir des données de manière autonome, l'exécution du logiciel au niveau du cœur de processeur n'est requise que pour le transfert d'octets depuis le tampon adéquat, après la réception des données. Grâce aux transferts DMA en liaison disponibles sur les dispositifs comme la gamme de microcontrôleurs Gecko EFM32 de Silicon Labs, même cette interaction peut être réduite. Dans ce cas, le cœur de processeur ne s'active que pour inspecter les contenus de la mémoire après la réception de l'intégralité du message.
En permettant aux périphériques de gérer les E/S, le microcontrôleur peut rester en mode veille. Ainsi, de nombreux composants sont éteints et ne consomment pas d'énergie. Le rapport cyclique est le ratio entre le temps passé en mode actif et le temps passé en veille. Un faible rapport cyclique est essentiel pour les applications IoT alimentées par batterie, car le mode veille ne consomme que quelques microampères, alors que le mode actif consomme généralement beaucoup plus.
Un faible rapport cyclique permet au cœur de processeur de rester en mode veille la plupart du temps et de s'activer uniquement pour collecter des données ou pour communiquer, lorsque c'est nécessaire. La clé de la mise en œuvre d'une stratégie à faible rapport cyclique réside dans la compréhension des interactions du logiciel avec le matériel. Les fonctions entraînant une activation prolongée du microcontrôleur doivent être identifiées, puis remplacées ou réécrites, le cas échéant. Cette mesure est généralement difficile à mettre en place au cours de la phase initiale de développement, car l'identification de ces fonctions dépend du matériel final disponible pour les tests.
Le kit de démarrage Pearl Gecko et les cartes d'évaluation similaires de Silicon Labs incluent une fonction de moniteur d'énergie avancé (AEM). Combinée aux outils avancés du logiciel Simplicity Studio de la société, cette fonction fournit de précieuses données sur la quantité d'énergie nécessaire à une application pendant le cycle de développement du logiciel. Les informations recueillies indiquent non seulement l'efficacité du mode veille, mais également les optimisations au niveau des fonctions.

Figure 1 : Mise en œuvre du module AEM du kit de démarrage Pearl Gecko.
La fonction AEM surveille le courant fourni par un régulateur à faible chute de tension (LDO) intégré, alimenté par un bus USB. La technologie USB est généralement utilisée pour prendre en charge le débogage et le téléchargement du logiciel sur le microcontrôleur cible. Comme illustré à la Figure 1, lorsque le commutateur embarqué est défini sur le mode d'alimentation par batterie, aucune mesure du courant n'est possible.
Lorsque le commutateur est défini sur le mode AEM, les données recueilles par le contrôleur de carte sont transmises aux outils Simplicity Studio et peuvent être affichées à l'aide de l'outil de profilage d'énergie. Le moniteur AEM peut mesurer des courants sur une plage étendue de 0,1 μA à 50 mA, avec une plage dynamique de 114 dB. Cela permet une analyse précise de l'impact des différents états du mode veille, et de la consommation énergétique en mode actif.
Pour mesurer avec précision la consommation énergétique dans cette vaste plage, un amplificateur de détection du courant est utilisé avec un étage de gain double. L'amplificateur mesure la chute de tension au niveau d'une petite résistance, tandis que l'étage de gain amplifie cette tension grâce à deux paramètres de gain distincts, ce qui permet d'obtenir deux plages de courant. La transition entre ces deux plages s'effectue aux alentours de 250 μA. Le filtre numérique et la moyenne sont calculés par le contrôleur de la carte d'évaluation avant l'exportation des échantillons.
À chaque tic du temporisateur, la fonction AEM échantillonne et convertit le courant, puis l'envoie par USB aux outils de développement, avec les données relatives à la tension et la temporisation. Jusqu'à 6250 échantillons de courant sont ainsi générés par seconde.
Étant donné que le profilage énergétique dépend de la mise en corrélation des données identifiées, le code à exécuter sur le microcontrôleur doit être compilé pour contenir les instructions d'envoi de données DWARF (Debug With Arbitrary Record Format). Les échantillons du compteur de programme (PC) envoyés au débogueur sont mis en corrélation avec le fichier objet avec les données de débogage pour trouver le fichier source adéquat, la fonction et la ligne de code C exécutés sur le microcontrôleur. Cela permet d'associer les mesures de puissance aux fonctions et aux tâches individuelles.
L'utilisateur peut accéder à trois fenêtres lorsqu'il utilise l'outil de profilage dans Simplicity Studio. Elles montrent le code approprié, un graphique de la consommation de courant et une vue sur le niveau des fonctions. En cliquant sur un point du graphique de courant, une partie du code dans la fenêtre de la liste de codes est surlignée. Elle correspond à l'extrait réel de code exécuté à cet instant, avec le niveau donné de consommation de courant. La liste des fonctions indique l'énergie totale consommée par chaque fonction et le pourcentage correspondant par rapport à la mesure totale pour l'ensemble de l'application. Si l'utilisateur souhaite analyser les informations de profilage ultérieurement, il peut exporter les données dans un fichier, puis importer ce fichier pour une analyse approfondie.
Pour illustrer l'utilisation des outils de contrôle d'alimentation disponibles dans Simplicity Studio, prenons l'exemple d'un microcontrôleur qui communique par le biais d'un port UART. Une interrogation régulière du périphérique constitue une manière directe de migrer les données du tampon LEUART de Gecko vers la mémoire principale, pour un traitement ultérieur. Si des données sont disponibles, un indicateur d'état (LEUART_STATUS_RXDATAV) signale la possibilité de récupérer des données.

Figure 2 : Consommation énergétique élevée à long terme avec interrogation du port série.
L'exécution du code sur un cœur de processeur actif entraîne une consommation énergétique continue de plusieurs milliampères. La fonction à l'origine de la consommation peut être surlignée en cliquant sur le graphique. Pour économiser de l'énergie, le microcontrôleur doit éviter d'utiliser l'interrogation pour vérifier la disponibilité des données. Cela peut se faire en mettant le processeur en veille entre les collectes de données et en l'activant (par le biais d'interruptions) lorsque des données du tampon sont disponibles. La consommation de courant baisse considérablement en mode veille et culmine lors de l'exécution de la routine de service d'interruption (ISR). Cette augmentation est visible en repérant la routine ISR dans la fenêtre de profilage d'énergie.

Figure 3 : La mise en œuvre de la réponse du service d'interruption réduit la durée des périodes de consommation élevée.
Cependant, après le traitement d'une interruption pour la réception de données, d'autres parties du code qui consomment plus d'énergie que prévu peuvent s'afficher si le processeur reste actif. Le fait de cliquer sur les fonctions correspondantes montre que les fonctions de transmission sont maintenant responsables de la consommation énergétique excédentaire. Si définir une boucle while{} est la méthode la plus simple pour programmer une fonction de transmission afin d'attendre la fin de la transmission de chaque octet, cela entraîne également un fonctionnement prolongé du processeur. Tout comme avec le port de réception, la boucle peut être remplacée par une interruption qui active le processeur à la fin de chaque transmission d'octets. Le processeur passe alors en mode veille entre chaque transmission d'octets, pour réduire la consommation moyenne de courant.

Figure 4 : La veille entre les transmissions d'octets réduit davantage la consommation énergétique.
Le module LEUART des microcontrôleurs Gecko peut être fonctionnel en mode veille profonde. Dans ce mode, les oscillateurs haute fréquence sont désactivés, mais les oscillateurs basse fréquence (RC ou à quartz) fonctionnent toujours et cadencent le module LEUART. L'utilisation de ce mode permet de réduire la consommation de courant à quelques microampères entre les traitements ISR.

Figure 5 : L'utilisation des modes veille profonde améliore le rendement énergétique pour les applications à faible rapport cyclique.
D'autres améliorations sont possibles en migrant une part supplémentaire du traitement du tampon vers le moteur DMA en liaison pour lui permettre de déclencher les interruptions après l'envoi ou la réception de trames complètes. Cette stratégie permet au cœur de processeur de rester plus longtemps en mode veille et de concentrer l'optimisation de l'alimentation sur les tâches d'analyse des données au niveau des fonctions.
Conclusion :
L'exemple ci-dessus démontre l'importance des outils de contrôle du courant et de débogage dans l'optimisation du rendement énergétique pour les applications de microcontrôleurs. Au lieu d'attendre la fin du développement pour effectuer une optimisation de l'énergie, le développeur peut réaliser des analyses tout au long de la phase de développement et ainsi découvrir de nettes améliorations itératives. En outre, grâce aux modes de veille avancés et au matériel intelligent capable de fonctionner longtemps sans l'intervention du processeur, les équipes d'ingénierie peuvent rapidement apporter des améliorations majeures au rendement énergétique.
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é.

