Les modules Yoctopuce doivent normalement être alimentés par une tension comprise entre 4.75 V et 5.25 V, ce qui est la plage habituelle de fonctionnement des périphériques USB. Mais que se passe-t-il lorsque l'on dépasse ces limites, même temporairement et involontairement ? Quels sont les cas qui peuvent causer des dégâts durables ? C'est ce que nous allons vous expliquer...
Nous avons eu plusieurs occasions d'étudier cette question: pour répondre à des clients qui savaient par avance qu'ils risquaient de sortir de la plage d'alimentation prévue, mais aussi dans quelques cas de modules retournés parce qu'ils avaient un comportement anormal.
Il existe plusieurs scénarios pouvant conduire à une alimentation temporairement anormale, et il est même assez difficile d'exclure totalement toutes ces conditions. On notera en particulier les cas suivants:
- Systèmes alimentés sur batterie: tension qui finit par chuter en absence de recharge adéquate
- Fils d'alimentation trop fins et/ou trop longs provoquant une chute de tension (voir notre article à ce sujet). Les hubs GSM sont particulièrement sensibles à ce problème.
- Chute de tension lente lors de l'extinction de l'alimentation, en raison de la décharge de gros condensateurs (brown-out).
- Surtension sur l'alimentation à l'allumage ou en raison d'autres composants partageant la même alimentation.
Certains modules sont plus sensibles que d'autres à une légère déviation de la plage d'alimentation. Mais au delà d'une certaine limite, les effets toucheront tous les modules. Nous allons donc détailler les problèmes qui peuvent se présenter:
Fonctions électriques dépendant de l'alimentation
Les modules les plus sensibles sont ceux comprenant un isolateur d'alimentation dont la sortie est fortement liée à la tension fournie en entrée. Sont concernées en tous les capteurs électriques, interfaces électriques et actuateurs qui utilisent un isolateur 5V: vous le reconnaîtrez à sa forme caractéristique en monolithe noir de 10mm de haut, 6mm de large, et 10 ou 20mm de long:
Les trois types d'isolateurs 5V utilisés par Yoctopuce
Pour ces modules, tenez-vous strictement à la plage d'alimentation prescrite 4.75 V - 5.25 V si vous voulez garantir un fonctionnement normal.
Quelques modules fournissent une alimentation stabilisée supérieure à 4.5V destinée à la mesure, dérivée de la tension d'entrée. Il s'agit du Yocto-Bridge, Yocto-MaxiBridge et du Yocto-MaxiMicroVolt-Rx. Pour ces modules, il est même souhaitable de ne pas descendre en dessous de 4.8V pour assurer la stabilité de la mesure.
Pour le Micro-USB-Hub et les différents YoctoHubs, respectez aussi la plage restreinte pour vous éviter les surprises, car l'alimentation des ports descendants en dépend. Seule exception, le YoctoHub-Wireless-n peut fonctionner jusqu'à 4 V si vous n'y connectez pas un des modules sensibles mentionné ci-dessus.
Pour tous les autres modules, l'électronique sensible est protégée par un régulateur linéaire qui vous garantira un fonctionnement correct sur une plage plus large: 3.8 V - 5.5 V. Ne dépassez en aucun cas 5.5 V, car vous risqueriez d'endommager le microcontrôleur. Et attention si vous baissez la tension jusqu'à 3.8 V: le module fonctionnera normalement de manière autonome, mais pour la connexion USB, vous pourriez avoir des surprises...
Tension minimale pour le fonctionnement d'USB
Lorsque la tension d'alimentation passe en dessous de 4.5V, vous risquez de perdre la communication USB entre l'hôte et le module. En effet, celui-ci va estimer que la chute de tension correspond à une déconnexion, et stopper la communication. La tension exacte à laquelle cette déconnexion se produit n'est pas spécifiée précisément par Microchip, qui fabrique le microcontrôleur que nous utilisons. Nous l'avons donc mesurée sur 5'000 modules issus de différentes livraisons de Microchip, et avons obtenu la statistique suivante:
Distribution observée de la tension USB minimale avant la déconnexion
Donc en moyenne la déconnexion se produit autour de 4 V, mais cela peut aller de 3.6 V à 4.5 V. Nous n'avons jamais mesuré de déconnexion au dessus de 4.5 V.
En case de chute de tension temporaire, due par exemple à une pointe de consommation, le module se reconnectera à USB dès que la tension repassera au dessus du seuil.
Il n'y a pas d'hystérésis entre la déconnexion et le reconnexion, un ou deux centièmes de Volt suffisent à changer d'état dans un sens ou dans l'autre. Cela peut avoir un effet pervers dans le cas où la tension d'alimentation est exactement sur la limite: le module risque se déconnecter avant même d'avoir fini l'échange de paquet qui suit la reconnexion. Windows n'apprécie pas du tout ce cas de figure, et décide parfois de bannir définitivement le périphérique qui lui fait une telle impolitesse. Celui-ci apparaît alors dans le gestionnaire de modules avec un point d'interrogation, et un redémarrage de la machine ou même parfois une désinstallation du module dans le gestionnaire de périphériques est nécessaire pour rétablir son fonctionnement. L'utilitaire pnputil de Microsoft ainsi que l'exemple devcon du DDK de Microsoft vous permettront si nécessaire d'automatiser ce type de procédure de récupération, si la situation est inévitable, mais il est bien sûr préférable d'éviter entièrement de garder la tension d'alimentation en dessous de 4.5 V lorsque le module est raccordé à un hôte par USB. Le fonctionnement entre 3.8 V et 4.5 V, sur les modules où il est possible, n'est donc à utiliser que pour un fonctionnement du module sans USB, par exemple pour l'enregistrement autonome de mesures.
Tensions dangereusement basses: le brownout
En dessous de 3.8 V, le bon fonctionnement des modules n'est plus assuré, mais a priori rien de vraiment dommageable ne risque de se produire tant que la tension reste au dessus de 3 V. En dessous de 3 V, un nouveau danger apparaît: le brownout. Le brownout apparaît dans un circuit électronique lorsqu'il n'a pas assez de tension pour commuter des bits de 0 à 1 ou vice-versa, et de ce fait se met à errer dans un univers étrange où les règles de la logique ne sont plus respectées, et où les nombres changent spontanément avec le temps. Un circuit électronique qui souffre de brownout, c'est comme un conducteur qui perd connaissance au volant: s'il est à l'arrêt, tout se passe bien, mais si il est sur une route de montagne, il risque de faire des dégâts...
Les composants électroniques numériques sont tous exposés à ce risque. Pour y parer, certains microcontrôleurs - dont celui que nous utilisons - incluent une protection matérielle qui détecte la chute de tension et stoppent immédiatement l'exécution du code, avant qu'elle ne fasse n'importe quoi. Mais nous avons eu l'occasion de vérifier que cette protection n'est pas forcément suffisante. Récemment, nous avons pu reproduire une condition dans laquelle la protection contre le brownout conduisait malgré tout à une corruption du firmware, car sa tension de déclanchement était inférieure à celle nécessaire au bon fonctionnement de la mémoire flash du microcontrôleur et de la mémoire flash externe. Nous avons donc du rajouté en octobre 2020 une protection logicielle à nos firmware, qui vérifie avant tout accès à la mémoire flash que la tension d'alimentation est suffisante. Si vous utilisez un firmware antérieur à octobre 2020 et que votre module cesse de fonctionner suite à un brownout, vous pouvez utiliser la procédure de récupération décrite dans le manuel du VirtualHub sous méthode alternative 1 pour lui remettre un firmware et le remettre en état.
Un autre cas de brownout que nous venons de découvrir concerne la mémoire flash externe, dont nous avons pu constater un cas de basculement spontané en mode lecture-seule, sur un système alimenté par batterie. Ce problème se manifeste par l'apparition du message Fwerr dans les logs du module Yoctopuce, et par l'impossibilité d'ajouter des données dans le datalogger ou de configurer une calibration des capteurs. Nous publions donc cette semaine une nouvelle version des firmware qui désactive automatiquement le mode lecture-seule au cas où il se serait activé suite à un brownout, et qui règle donc ce problème.
Pour sécuriser les systèmes alimentés par batterie contre le brownout, nous recommandons comme mesure supplémentaire l'utilisation du Mini-Battery-Supervisor. Ce produit inclut un voltage supervisor qui mesure la tension d'alimentation et effectue une coupure nette de l'alimentation dès qu'elle passe au dessous de 3.5 V, bien avant les risques de brownout. L'alimentation n'est rétablie que lorsque la tension remonte au dessus de 4 V, ce qui évite les oscillations. Le Mini-Battery-Supervisor peut aussi être configuré pour des valeurs de seuil supérieures, afin de protéger non seulement le module mais aussi la batterie elle-même.
Cas particulier: les YoctoHub-GSM
Les modules qui offrent la connectivité cellulaire sont particulièrement exposés aux chutes de tension passagères en raison de fortes pointes de consommation durant la transmission de données GSM. Le danger vient en particulier du fait que ces pointes de courant changent en fonction de la technologie disponible (2G, 3G, 4G) et de la distance de l'antenne cellulaire à laquelle le module est connecté. La consommation durant une transmission en 2G fait typiquement des pointes proches de 2 ampères. En 3G, elle reste inférieure à 1 ampère, et en 4G elle est inférieure à 0.5 ampère.
Si vous n'y prenez pas garde, vous pouvez finir avec un prototype qui marche parfaitement dans votre bureau, où la réception 4G est bonne, mais qui souffre de brownout lorsqu'il est installé en production, dans une zone où la 4G n'est pas disponible. Les symptômes d'un brownout dû à une pointe de consommation du module GSM sont les suivants:
- échec de la connexion GSM alors même que le réseau est trouvé par le module, avec des messages caractéristiques dans les logs du module
- déconnexion USB au moment où la connexion GSM s'établit
- dans le pire des cas, corruption irrécupérable de la flash du module GSM lui-même
Pour éviter ces problèmes, nous vous recommandons les mesures suivantes:
- Utilisez une alimentation bien dimensionnée pour alimenter les hubs GSM
- Utilisez un fil d'alimentation aussi court que possible (par ex 50 cm)
- Si vous comptez autoriser l'utilisation du réseau 2G en production, forcez le module en mode 2G durant vos tests et mettez vous en condition de mauvaise réception GSM pour être sûr de tester le cas le pire
- Si vous n'avez pas besoin d'utiliser le réseau 2G, désactivez-le explicitement dans la configuration du module pour éviter qu'il ne s'enclenche sur une perte temporaire de réseau 4G par exemple
- Evitez autant que possible les coupures de courant impromptues ou les conditions de brownout sur les YoctoHub-GSM pour éviter la corruption de la flash du module GSM
- Installez le nouveau firmware que nous publions cette semaine, qui réduit un risque de brownout sur le flash du module GSM lui-même.
Conclusion
Contrairement à ce qu'on pourrait imaginer naïvement, alimenter un module électronique avec une tension insuffisante, même temporairement, peut avoir des conséquences dommageables à long terme pour l'électronique. Prenez donc le temps de vérifier le comportement de vos alimentations. Si vous en avez la possibilité, l'idéal est de prendre un oscilloscope et vérifier directement sur le pad 5V des modules que l'alimentation est bien à la valeur désirée, stable, et que lors de la mise hors tension du système la coupure est nette et rapide.