STM32. Pratique de perte de poids ou régime pour le contrôleur



Quel genre de non-sens, certains lecteurs penseront probablement quand ils verront le titre de la publication. L'auteur a-t-il fait une erreur sur la ressource? Ou était-il prévu de le placer dans le hub "Geek Health"? Et ils auront raison en partie, mais seulement en partie ... Sous la coupe, nous parlerons d'une méthode pour réduire et optimiser la consommation d'énergie des appareils électroniques.


Il y a quelque temps, la carte X-NUCLEO-LPM01A est tombée entre mes mains, qui était pour le moment inactive jusqu'à ce que je décide d'étudier la consommation d'énergie d'un appareil conçu avec une alimentation autonome.



Cette carte a été développée par STMicroelectronics et se positionne comme "Power shield, carte d'extension Nucleo pour la mesure de la consommation électrique". Je n'ai pas trouvé de description explicative en russe sur le réseau pour travailler avec ce devkit et j'ai décidé de le découvrir moi-même, et en même temps de partager des informations avec la communauté respectée.


Si nous mettons en évidence la principale, la carte d'extension est une source d'alimentation programmable de 1,8 à 3,3 volts avec la possibilité de mesurer le courant de charge en temps réel (en mode dynamique jusqu'à
50 mA) avec une fréquence d'échantillonnage jusqu'à 100 kHz. L'appareil peut fonctionner à la fois indépendamment et dans le cadre d'un complexe matériel-logiciel. Pour afficher graphiquement les valeurs mesurées, l'utilitaire STM32Cube MonitorPower est utilisé . Ce logiciel vous permet également de définir tous les paramètres nécessaires et d'effectuer un traitement lors de la survenance d'un événement (déclenchement déclencheur). X-NUCLEO-LPM01A est affiné pour fonctionner avec les cartes Nucleo-32 (64, 144), Arduino Nano (Uno), à cet effet, les blindages correspondants sont placés dessus, mais il est possible de travailler avec des cartes arbitraires. La photo ci-dessous montre la connexion de l'appareil à l'étude à l'un des connecteurs de la carte.




En plus du logiciel d'application, X-NUCLEO-LPM01A prend en charge le mode de commande, pour lequel tout programme de terminal doit fonctionner. (Ici, je semble être un peu excité, HTerm a commencé avec un demi-coup, mais j'ai dû jouer un peu avec ma ZOC préférée). De plus, à en juger par la description, grâce à l'utilisation du pilote VCP, l'appareil peut verser des données dans le port COM à une vitesse pouvant atteindre 3686400 bauds. Une telle vitesse élevée est assurée notamment par la transmission d'un flux de données binaires (pour des fréquences d'échantillonnage supérieures à 50 KHz), pour les caractères ASCII la vitesse est légèrement inférieure.


Plus précisément, la tâche que j'essaierai de résoudre en utilisant X-NUCLEO-LPM01A est:

  1. Pour obtenir des informations sur la consommation d'énergie dynamique des nœuds d'intérêt dans le produit conçu en utilisant le déclencheur déclencheur X-NUCLEO-LPM01A dans les endroits étudiés du code de programme.

  2. Dans le processus de fonctionnement continu de l'appareil pour organiser l'accumulation des fragments nécessaires pour une analyse généralisée ultérieure.


La capture d'écran ci-dessous montre le journal actuel de la carte SD pendant l'enregistrement des données.




STM32Cube MonitorPower permet non seulement d'évaluer qualitativement, mais aussi quantitativement la consommation d'énergie de l'appareil étudié. Les valeurs minimales, maximales et moyennes du courant consommé et de la valeur d'énergie intégrée sont indiquées dans la partie inférieure de l'image. Ces données sont disponibles à la fois pour toute la mesure et pour le fragment sélectionné.


Dans le manuel de l'utilisateur, il est à noter que le déclenchement du déclenchement de la mesure est effectué par une impulsion sur la jambe du bouclier arduino D7. Il s'est avéré qu'un seul démarrage du processus avec des enregistrements subséquents en continu fonctionne. Une tentative d'organiser un mode marche-arrêt pour enregistrer le courant (sur les deux fronts de l'impulsion) a échoué. Autrement dit, une fois que l'enregistrement a commencé au bon endroit sur le front montant, il n'est pas possible de ralentir le processus avec un front descendant de l'impulsion. Et ce n'est pas tout à fait ce que j'attendais de cet appareil.


Un mode marche-arrêt entièrement contrôlé peut être défini à l'aide de la séquence de commandes du programme du terminal

l'équipe

la description

htc

capture du contrôle de l'hôte

volt 3300-03

tension d'alimentation sur le canal mesuré 3300 mV

acqtime 0

mesure continue sans limite de temps

freq 10000

fréquence d'échantillonnage 10 kHz

commencer

début de la mesure

...

mesure (les données sont versées dans le terminal)

arrêter

fin de mesure


Le problème est qu'il s'agit d'un contrôle manuel qui n'est pas synchronisé avec les événements du contrôleur cible. Bien sûr, vous pouvez essayer de former la séquence de commandes indiquée du côté de l'appareil à l'étude, pas l'hôte, mais le flux de sortie de données de X-NUCLEO-LPM01A sera également saupoudré dans le contrôleur et on ne sait pas quoi faire avec eux, et la redirection de la sortie "quelque part_à_autre_place_" n'est également pas disponible, ( bien qu'il y ait des broches UART Tx, Rx sur la carte, elles apparaissent comme "réservées" dans le manuel et ne sont probablement pas impliquées dans la version actuelle du firmware). Je suis sorti de cette situation comme suit:


La séquence de commandes suivante est formée côté hôte (ordinateur)

l'équipe

la description

htc

capture du contrôle de l'hôte

volt 3300-03

tension d'alimentation sur le canal mesuré 3300 mV

acqtime 1

durée de mesure
(une plage de 10 μs à 10 secondes peut être utilisée)

trigsrc d7

synchronisation du début de la mesure avec un front montant
impulsion sur la broche D7

freq 10000

fréquence d'échantillonnage 10 kHz

commencer

début de la mesure

...

mesure (les données commencent au bord de l'impulsion et s'arrêtent
verser après le temps spécifié dans acqtime)


Maintenant, les données seront capturées par lots, plutôt que dans un flux continu. Cette approche vous permet d'explorer la consommation du circuit à différents endroits du programme et à différents intervalles de temps assez éloignés les uns des autres. Autrement dit, s'il est nécessaire de collecter des informations sur la consommation d'énergie d'un appareil qui fonctionne une heure (jour, semaine), vous n'avez pas besoin d'écrire un flux continu, et même avec une fréquence d'échantillonnage maximale, puis de comprendre ce gâchis, mais fournissez simplement l'algorithme de travail ci-dessus. Et si le programme du terminal écrit des marqueurs temporels dans son journal, comme indiqué dans l'image ci-dessous, il sera assez simple d'analyser l'historique des événements à partir d'un tel fichier.




C'est comme un enregistreur vidéo avec détection de mouvement et horodatage.


Permettez-moi de vous donner quelques captures d'écran obtenues à l'aide de X-NUCLEO-LPM01A . Le premier est la consommation d'énergie du contrôleur lors de la lecture des données de l'ADC intégré. 32 valeurs sont lues par temporisation avec une fréquence de 4 KHz et sont stockées en mémoire.




Sur la seconde - lecture et sauvegarde similaires des données, mais seul le contrôleur "se permet de dormir" après chaque mesure, jusqu'à ce que la prochaine interruption de minuterie se produise, en utilisant l'un des modes d'économie d'énergie disponibles.




Un delta significatif de la consommation de courant pendant la mesure, ~ 6 mA, est immédiatement perceptible. Ces deux exemples ne prétendent pas optimiser la consommation d'énergie des appareils basse consommation, mais démontrent seulement les capacités du X-NUCLEO-LPM01A , qui est capable de mesurer des courants à partir de 1 nA.


En conclusion, je dirai que, à mon humble avis, ce devkit semble être un outil parfaitement adapté qui peut prendre la place qui lui revient à côté de l'oscilloscope et de l'analyseur de signal logique sur la table d'intégration. Et l'utilisation de l'approche décrite permettra non seulement de «modérer l'appétit du contrôleur» dans le développement de dispositifs à puissance critique, mais aussi de mieux comprendre la dynamique des processus dans les divers modes d'économie d'énergie activement utilisés par les développeurs d'appareils électroniques modernes.


Le coût de la carte - plus de 7 000 roubles, éclipse l'arc-en-ciel de l'image, mais un montant aussi insignifiant à l'heure actuelle peut-il empêcher un vrai geek d'avoir ce merveilleux kit de développement?


PS Malgré l'indication dans UM que UART est réservé pour de futures applications, je l'ai toujours collé et j'ai constaté qu'il vivait comme une deuxième interface (les E / S sont dupliquées à partir de VCP) à une vitesse de 921600 8N1 et peuvent être utilisées comme commande, formant commencer et arrêter pour le début - la fin de la mesure. L'inconvénient de cette approche sera la disponibilité obligatoire d'UART gratuit du côté du contrôleur à l'étude, sans parler du fait que 921600 bauds sont souvent impossibles à basse fréquence d'horloge.


PPS Déjà après avoir écrit l'article, j'ai remarqué une différence dans les dernières photos de ~ 2 mA à l'entrée de la mesure et à la fin de celle-ci. Je n'ai probablement pas désactivé la synchronisation ADC, ou j'ai laissé la minuterie fonctionner, mais c'est, comme Leonid Kanevsky aime à le dire: "une histoire complètement différente" ...


Source: https://habr.com/ru/post/fr441668/


All Articles