Low Power Software - 5ESPE
Documentation de support de TP
INSA-GEI (Alexandre Boyer) 2024-2025
Thème et objectifs
Au carrefour des thématiques
- Réseaux de capteurs,
- M2M (Machine To Machine),
- IoT (Internet of Things),
Le développement d'applications embarquées sur microcontrôleur avec :
- Une appoche minimaliste Bare metal (pas d'O.S.)
- Une consommation d'énergie maîtrisée et minimale
Objectif du TP : développer un programme de démonstration permettant de mettre en oeuvre et tester plusieurs techniques de réduction de la consommation d'un microcontrôleur
"Ultra-Low Power" (STM32L476) et d'un transceiver low power pour bande ISM 2.4 GHz (Nordic nRF24L01).
Plateforme Hardware
Microcontrôleur
Ce projet utilise le STM32L476, qualifié de "Ultra-low-power ARM Cortex M4" par le fabricant ST. Toutes les informations à propos des périphériques de ce microcontrôleur sont données
dans son Reference Manual. Le Programming Manual est disponible
ici.
Une sélection de documents du fabricant est accessible à l'INSA sur le serveur "commetud".
Ces documents sont accessibles depuis les salles de TP sur l'unité R:
R:\LLGDB\DOC_L4
Transceiver radiofréquence (RF)
Le transceiver RF utilisé est le nRF24L01 développé par Nordic Semiconductor. Sa datasheet est disponible
ici.
Une desciption succincte de ce composant et de sa programmation est donnée
ici.
Carte de développement - Carte Microwatt
Le projet utilisera une carte Nucléo de ST, coupée pour permettre la séparation de la sonde de programmation ST-link.
Cette carte est implantée sur une carte support dite
Carte Microwatt conçu pour accueillir le transceiver nRF24L01 et de
mesurer individuellement la consommation en courant des différents composants.
Plateforme Software
Compilateur C/C++
Le projet utilisera la chaîne de compilation
GNU ARM
construite autour du
compilateur GCC.
Debugger
Le projet utilisera le
debugger GDB (sous la forme GDB server) qui a été porté pour communiquer avec le processeur cible au moyen de la sonde ST-Link.
GDB server n'ayant pas d'interface utilisateur, le debug se fera via un IDE (Integrated Development Environment).
N.B. contrairement à ce qui existe sur d'autres architectures (telles
que X86), il n'est pas nécessaire d'utiliser des options de compilations
différentes pour
l'utilisation sous debugger et la production finale (release), ainsi les
projets seront tous compilés sur une configuration "debug".
Bibliothèques
Le fabriquant du STM32 met à disposition pour chaque famille de microcontrôleur un package dit
STM32Cube
qui contient le code source en langage C de :
- drivers Cortex Microcontroller Software Interface Standard (CMSIS) fournis par ARM
- drivers Low Layer (LL) de ST
- drivers niveau intermédiaire Hardware Abstraction Layer (HAL) de ST
- nombreux exemples de projets pour les cartes de développement standard
Dans ce TP, on utilisera la bibliothèque
LL de préférence (plutôt que
HAL). Pour plus d'informations sur la bibliothèque
LL :
Dans les salles de TP du GEI, les bibliothèques pour la famille
L4 sont installées sur le serveur commetud :
R:\LLGDB\CubeL4
IDE
Dans ce TP, nous travaillerons avec l'outil
STM32CubeIDE 1.4.0.
Cet IDE est basé sur le framework Eclipse. Il a été développé en Java pour les développeurs Java, ce qui
implique des particularités qui peuvent selon les cas améliorer ou dégrader les conditions de travail hors Java.
La principale qualité de cette approche est l'indépendance vis-à-vis du système d'exploitation (Linux, Windows, MacOS, etc..)
Les exemples du package STM32Cube sont prévus pour SW4STM32, cependant ils peuvent être importés dans TrueStudio ou STM32CubeIDE.
Conseils d'utilisation de l'IDE :
Eclipse : conseils d'utilisation.
Développement du programme de démonstration "Techniques Low Power" sur STM32L476
Objectif général du programme de démonstration
L'objectif du programme de démonstration est de pouvoir tester, à l'aide d'un programme unique, différentes fonctionnalités du microcontrôleur STM32L476 RG et représentatives
de l'ensemble des microcontrôleurs ultra-low power permettant la réduction de la consommation énergétique. De plus, un transceiver low power (nRF24L01) sera piloté par ce microcontrôleur
afin de reproduire une application IoT typique.
Le détail des expériences à réaliser est donné
ici, les paragraphes ci-dessous suggèrent les étapes du travail à réaliser. Ne cherchez pas à développer
d'un seul coup l'ensemble du programme.
Point de départ et étape préliminaire
On partira d'une copie du projet
L476_LoPoSo_LEDBlink_2024, que vous pourrez
sauvegarder sous un autre nom.
Ce programme fournit l'initialisation des GPIO utilisées dans ce TP ainsi que l'architecture générale du programme de démonstration.
A ce stade, le programme est très simple et ne fait pas grand chose : toutes les 2 s, le programme allume la LED verte (LED utilisateur) pendant 50 ms. L'exécution du programme est cadencée par le timer
Systick, qui déborde toutes les 10 ms. De plus, il n'est pas encore conçu pour offrir la moindre optimisation en énergie.
Durant ce TP, vous allez le compléter pour bâtir le programme de démonstration (défini par le
cahier des charges) et qui vous permettra de mesurer l'impact de la configuration
du microcontrôleur sur la consommation énergétique.
Etapes de développement du programme de démonstration
Le programme de démonstration devra suivre le
programme d'expériences séquencées. Celui-ci permet de tester l'influence sur la consommation énergétique du microcontrôleur
des différentes plages de tension, des modes basse consommation et des techniques de réveil, ainsi que celle du transceiver radio.
En vue d'avoir au final toutes les expériences dans un seul programme, deux variables globales seront utilisées :
- la variable expe portant le numéro de l'expérience, qui sera préservée dans le backup register 0 du module RTC
Cette variable sera incrémentée au reset, si le bouton bleu (PC13) est pressé à cet instant
- la variable blue_mode qui sera mise à zéro au reset et mise à 1 lors d'une action sur le bouton bleu (PC13)
après le reset
N.B. la variable
expe sera réinitialisée à 1 lors d'une coupure prolongée d'alimentation, ou du dépassement du dernier numéro d'expérience.
Etapes de développement suggérées :
- [expe = 1] initialisation et transmission périodique (toutes les 2 s) d'un paquet par le transceiver RF. Le paquet transmis sera numéroté par un compteur de paquet, qui ne sera initialisé
qu'au démarrage initial. Le transceiver reste en mode StandbyI à la fin d'une transmission.
- [expe = 1] exploitation du mode sleep à chaque tour de la boucle principale
- blue_mode : dans la boucle principale le processeur passe en mode sleep (jusqu'à la prochaine interruption)
- [expe = 2] exploitation de l'oscillateur interne MSI à 24 MHz en direct en remplacement de la configuration initiale (démo ST) qui était
MSI à 4 MHz + PLL à 80 MHz (ne pas oublier d'ajuster le parametre flash latency avant d'augmenter la fréquence de l'oscillateur)
- [expe = 2] évaluation de la stabilité en fréquence de l'oscillateur MSI
- émission d'un signal carré à 50 Hz sur PC10 par l'interruption systick pour mesure de période
- blue_mode : asservissement ("calibration") de l'oscillateur MSI sur l'oscillateur à quartz d'horlogerie LSE 32kHz
pour évaluation de la dérive thermique sans et avec cet asservissement
- [expe = 5 à 8] exploitation du module RTC pour le réveil des modes basse consommation :
- observer la persistance du contenu des backup registers en cas de reset
- mettre en place la sauvegarde de expe dans le backup register 0 et son incrémentation au reset si le bouton bleu (PC13) est pressé à cet instant
- faire entrer le microcontrôleur dans un mode basse consommation lors des entrées dans le mode blue_mode
- faire entrer le transceiver RF dans son mode power down à la fin d'une transmission
Evaluation
Une séance de test est prévue à partir du programme de démonstration développé par chaque étudiant, en présence de l'enseignant. Chaque binôme devra remplir et transmettre à l'enseignant le formulaire de résultat suivant :
Compléments d'information
STM32
Transceiver RF
Overview of Nordic nRF24L01+
Outils
Eclipse / STM32 Cube IDE : conseils d'utilisation