Contraintes des systèmes embarqués¶
Avant de choisir un microcontrôleur ou un protocole, il faut identifier quelle contrainte domine votre projet — car optimiser pour la mauvaise contrainte est la première cause d'échec industriel.
Mémoire limitée : de quelques Ko à quelques Mo¶
Un serveur d'application dispose de dizaines de gigaoctets de RAM. Un microcontrôleur industriel typique tourne avec 64 Ko à 512 Ko. Cette différence d'un facteur 100 000 n'est pas un détail : elle impose un mode de pensée radicalement différent.
La mémoire embarquée se divise en deux ressources distinctes aux contraintes séparées : la Flash (programme + données en lecture seule) et la SRAM (variables, pile d'exécution, buffers). Les deux sont limitées, et leur rapport conditionne l'architecture du firmware.
Tableau comparatif : MCU vs SBC vs serveur¶
| Caractéristique | MCU (STM32L4) | SBC (Raspberry Pi 5) | Serveur (x86) |
|---|---|---|---|
| RAM | 640 Ko SRAM | 4–16 Go DDR4X | 32–512 Go DDR5 |
| Stockage programme | 1 Mo Flash | MicroSD / NVMe | SSD NVMe / SAN |
| Cache L1/L2 | Absent / 16 Ko | 192 Ko / 512 Ko | 32 Ko / 1 Mo / 32 Mo |
| Allocation mémoire | Statique ou pools | Tas standard | Tas + swap |
| Fragmentation | Risque critique | Géré par l'OS | Géré par l'OS |
| Prix | 1–5 € | 40–100 € | 500–10 000 € |
En embarqué, l'allocation dynamique (malloc) est souvent proscrite en production : un tas fragmenté dans un nœud qui tourne 5 ans sans redémarrage est une bombe à retardement. On préfère les pools mémoire statiques de taille fixe ou les allocations entièrement statiques, validables à la compilation.
Impact concret sur le code¶
Un stack TCP/IP complet comme lwIP consomme ~40 Ko de Flash et ~10 Ko de RAM. Sur un STM32F0 à 32 Ko de Flash, c'est impossible. La contrainte mémoire force le choix vers des protocoles plus légers (MQTT-SN sur UDP, CoAP) ou vers un microcontrôleur plus capable — avec l'impact correspondant sur le coût unitaire.
Énergie : la contrainte invisible¶
Pour un équipement alimenté sur secteur, l'énergie est transparente. Pour un nœud IoT sur batterie ou energy harvesting, c'est la contrainte qui détermine la faisabilité du projet.
Budget énergétique¶
Le budget énergétique d'un nœud IoT se calcule en milliampères-heure (mAh) consommés sur la durée de vie cible. La formule de base :
La consommation moyenne dépend du duty cycle : la fraction du temps pendant laquelle le nœud est actif.
Exemple concret : un capteur de température envoie une mesure toutes les 10 minutes via LoRaWAN.
- Phase active (mesure + transmission) : 50 ms à 12 mA
- Phase veille profonde : 9 min 59 s 950 ms à 2,5 µA
- Consommation moyenne : (12 000 µA × 0,05 s + 2,5 µA × 599,95 s) / 600 s ≈ 2,5 µA en pratique
Avec une pile AA de 2 500 mAh : 2 500 000 µAh / 2,5 µA ≈ 114 ans en théorie. En pratique, l'autodécharge de la batterie (2–3 % par an) et les pertes du régulateur réduisent cela à 5–10 ans, ce qui reste excellent.
Energy harvesting¶
Quand aucune batterie n'est envisageable (maintenance impossible, volume de déploiement), le harvesting énergétique devient la seule option.
| Source | Puissance typique | Conditions | Technologie |
|---|---|---|---|
| Solaire (intérieur) | 10–100 µW/cm² | 200–1000 lux | Cellules amorphes |
| Solaire (extérieur) | 10–50 mW/cm² | Ensoleillement direct | Monocristallin, polycr. |
| Vibration mécanique | 10–100 µW/cm³ | Machines industrielles | Piézoélectrique (PZT) |
| Gradient thermique | 10–60 µW/cm² | ΔT de 5–20 °C | Module Peltier (TEG) |
| Radiofréquence (RF) | 0,1–10 µW | À 1 m d'un point d'accès Wi-Fi | Antenne + rectifieur |
Le harvesting impose une gestion d'énergie sophistiquée : supercondensateur ou batterie tampon, régulateur MPPT (Maximum Power Point Tracking), logique de décision sur le niveau de charge disponible avant de déclencher une transmission.
Temps réel : dur, mou, et les nuances industrielles¶
"Temps réel" est l'un des termes les plus mal utilisés dans l'industrie. Il ne signifie pas "rapide" — il signifie "déterministe" : le système répond dans un délai garanti, quelles que soient les conditions de charge.
Temps réel dur vs mou¶
| Critère | Temps réel dur | Temps réel mou | Meilleur effort |
|---|---|---|---|
| Définition | Échéance absolue | Dégradation acceptable | Aucune garantie |
| Conséquence du dépassement | Défaillance système | Qualité dégradée | Retard visible |
| Exemples industriels | ABS, pace cardiaque, presse | Monitoring capteur, serre | Dashboard, alertes |
| Norme de référence | IEC 61508, DO-178C | — | — |
| Jitter acceptable | < µs à quelques ms | Quelques ms à secondes | Sans objet |
| OS typique | RTOS certifié (ThreadX, RTEMS) | FreeRTOS, Zephyr | Linux, RTOS simple |
Exemples industriels détaillés¶
Freinage ABS (temps réel dur) : La roue doit être testée et la pression modulée en moins de 10 ms. Un dépassement d'échéance peut causer un accident. Le système utilise un microcontrôleur dédié avec garanties temporelles certifiées ISO 26262.
Monitoring vibration machine (temps réel mou) : Un accéléromètre échantillonne à 1 kHz. Un retard d'une mesure toutes les 10 000 cycles dégrade légèrement la détection d'anomalie, mais ne provoque pas de défaillance. FreeRTOS avec une tâche haute priorité convient.
Dashboard de supervision (meilleur effort) : Les données sont affichées avec un délai de 1 à 5 secondes. L'utilisateur attend une mise à jour quasi temps réel, mais un délai occasionnel est acceptable. Linux embarqué avec Node-RED convient parfaitement.
Coût unitaire et économie d'échelle¶
Dans un projet IoT industriel, le coût du nœud est un paramètre de conception aussi important que la performance.
Bill of Materials (BOM)¶
La BOM d'un nœud IoT typique comprend :
| Composant | Coût (1 unité) | Coût (10 000 unités) | Impact design |
|---|---|---|---|
| MCU (STM32L4) | 3,50 € | 1,20 € | Choix architecture firmware |
| Module radio (LoRa) | 6,00 € | 2,80 € | Intégration vs module tiers |
| Capteur (température) | 1,20 € | 0,45 € | Interface (I²C, SPI, 1-Wire) |
| PCB (4 couches) | 8,00 € | 1,80 € | Nb couches, DFM |
| Batterie (Li-SOCl₂) | 3,00 € | 1,60 € | Sizing, connecteur |
| Boîtier IP67 | 4,50 € | 2,20 € | Certification IP, DFM |
| Total | ~26 € | ~10 € |
À 10 000 unités, le coût est divisé par 2,5. À 100 000 unités, certains composants voient leur coût réduit d'un facteur 5 à 10. Cela signifie que la décision d'intégrer un module radio tiers ou de concevoir son propre RF front-end ne peut se prendre qu'en connaissant les volumes prévisionnels.
Optimisation de la BOM : les leviers disponibles¶
Intégration progressive : un module radio certifié (ex. : Murata CMWX1ZZABZ-078 pour LoRa, u-blox SARA-R4 pour LTE-M) coûte 4–8 € mais inclut la certification radio (CE, FCC). Passer à un circuit intégré radio seul (SX1276) réduit le coût de 2–4 € mais impose des tests radio propres : coût NRE 15 000–50 000 €, pertinent uniquement au-delà de 20 000 unités.
Intégration MCU + Radio : certains SoC intègrent le MCU et la radio sur le même die. Le nRF52840 intègre un Cortex-M4 et un radio Bluetooth 5.0/802.15.4. L'ESP32-C6 intègre un cœur RISC-V, Wi-Fi 6, BLE 5.0 et Zigbee/Thread. Prix < 2 € en volume — contre 4–5 € pour une solution MCU + module radio séparés.
Conception pour la fabrication (DFM) : réduire le nombre de composants passifs, privilégier les boîtiers SMD standards (0402, 0603), éviter les composants nécessitant un placement manuel — chaque geste manuel en production coûte 0,05 à 0,20 € en main-d'œuvre.
Considérations de supply chain¶
Le coût unitaire calculé sur la BOM ne représente que 40 à 60 % du coût total de fabrication (COGS — Cost of Goods Sold). Les postes souvent oubliés en phase de conception :
| Poste | Estimation (1 000 unités) |
|---|---|
| Assemblage SMT (PCB) | 2–5 € par unité |
| Test ICT / fonctionnel | 0,5–2 € par unité |
| Programmation firmware | 0,3–1 € par unité |
| Logistique et emballage | 1–3 € par unité |
| Déchets et rebuts (2–5 %) | 0,5–1,5 € par unité |
| COGS total estimé | BOM × 1,6–2,0 |
Interactions entre contraintes : les tensions de conception¶
Les quatre contraintes ne sont pas indépendantes — elles interagissent, et optimiser l'une dégrade souvent les autres. Comprendre ces tensions est essentiel pour faire des compromis éclairés.
Mémoire vs Coût¶
Doubler la Flash d'un MCU (de 256 Ko à 512 Ko) coûte typiquement 0,30 à 0,80 € de plus par unité. Sur 50 000 unités, cela représente 15 000 à 40 000 € de surcoût annuel. La décision doit se prendre en connaissant le budget firmware prévu et la marge de croissance nécessaire.
Énergie vs Temps réel¶
Un système temps réel dur doit rester en écoute permanente des événements critiques — il ne peut pas entrer en deep sleep avec un réveil différé de 60 secondes. Cette contrainte oblige à maintenir le MCU dans un mode de veille légère (quelques centaines de µA) plutôt qu'en deep sleep (< 5 µA), réduisant l'autonomie d'un facteur 50 à 100.
La solution architecturale est parfois de séparer les responsabilités : un MCU ultra-low-power gère le wake-on-event et la collecte de données, tandis qu'un second MCU (ou le même, dans un mode moins profond) gère le temps réel.
Coût vs Fiabilité¶
Un composant "Commercial grade" (0 à 70 °C) coûte 30 à 50 % moins cher que son équivalent "Industrial grade" (-40 à +85 °C). En environnement contrôlé (intérieur climatisé), le commercial grade peut être acceptable. En extérieur ou dans une armoire non climatisée, c'est une économie illusoire qui se paie en retours terrain et en interventions de maintenance.
Tableau synthétique : tensions entre contraintes¶
| Optimiser pour... | Impact négatif sur... | Levier de compromis |
|---|---|---|
| Énergie minimale | Temps réel | Wake-on-event, co-processeur dédié |
| Coût minimal | Mémoire / Fiabilité | Profiler le firmware, composants ind. grade |
| Temps réel dur | Énergie | Séparer nœud basse conso / nœud TR |
| Mémoire maximale | Coût | Valider budget firmware avant de sur-doter |
Ces tensions sont des données d'entrée pour les revues d'architecture en phase de conception — les identifier explicitement dans un document de décision technique (ADR) évite de les redécouvrir douloureusement en phase de validation.
Arbre de décision : quelle contrainte domine votre projet ?¶
flowchart TD
A[Nouveau projet IoT] --> B{Alimentation\ndisponible ?}
B -- "Secteur / PoE" --> C{Contrainte\ntemps réel ?}
B -- "Batterie / harvesting" --> D{Durée de vie\ncible > 2 ans ?}
D -- Oui --> E[Contrainte ÉNERGIE dominante\nOptimiser duty cycle\nChoisir MCU ultra-low power\nLimiter les transmissions radio]
D -- Non --> C
C -- "Dur < 1 ms" --> F[Contrainte TEMPS RÉEL dominante\nRTOS certifié ou bare-metal\nMCU dédié, pas de Linux\nCertification IEC 61508 ?]
C -- "Mou / best effort" --> G{Volume\nde déploiement ?}
G -- "> 10 000 unités" --> H[Contrainte COÛT dominante\nOptimiser BOM\nConcevoir PCB custom\nNégocier volumes]
G -- "< 10 000 unités" --> I{Traitement\nlocal requis ?}
I -- "CV / ML / DSP lourd" --> J[Contrainte PUISSANCE CALCUL\nSBC ou SoC puissant\nFPGA si temps réel dur + DSP\nLinux embarqué]
I -- "Collecte + transmission" --> K[MCU standard\nFreeRTOS / Zephyr\nProtocole réseau adapté] Ce qu'il faut retenir¶
- Les systèmes embarqués IoT opèrent sous quatre contraintes principales : mémoire (Ko à Mo, pas Go), énergie (µA en veille, mAh de batterie), temps réel (dur ou mou selon l'application), et coût (la BOM conditionne la faisabilité à grande échelle).
- Le duty cycle est le levier le plus puissant pour l'autonomie : passer de 1 % à 0,01 % de temps actif peut multiplier l'autonomie par 100.
- "Temps réel" signifie déterministe, pas rapide — un ABS et un dashboard IoT ont des exigences de déterminisme radicalement différentes.
- Identifier la contrainte dominante en début de projet évite de sur-ingéniérer les aspects secondaires.
Chapitre suivant : Architectures processeur — ARM Cortex-M, RISC-V : choisir le cœur qui correspond à vos contraintes.