Le démarrage à faible puissance ne fonctionne pas

9

J'ai une carte Arduino ATMega328 personnalisée qui fonctionne généralement à 5 V à 8 MHz (en utilisant le profil Arduino Pro 3,3 V 8 MHz et le chargeur de démarrage). La principale raison pour laquelle j'utilise cette configuration est que je puisse mettre la carte en veille lorsque l'alimentation principale est déconnectée et qu'elle commence à être alimentée par la batterie (3V à partir d'une pile bouton). Les sources 5V et 3V sont connectées par diode OR et l'entrée 5V est liée à INT0. Dans le code, lorsqu'il détecte que INT0 est tombé bas, il initialise le mode veille et tout s'éteint à l'exception du temporisateur de surveillance qui garde un cycle de 1 Hz pour garder un compte interne et vérifier que la puce doit être réveillée. Cela fonctionne à merveille lorsque l'alimentation 5V est appliquée en premier, puis la batterie est insérée, puis5V est déconnecté. Il s'endort et quand le 5V est ramené, il se réveille et je peux voir qu'il n'a pas perdu de compte.

Cependant, le problème survient lorsque 3V est appliqué en premier . Honnêtement, je ne suis pas sûr que ça démarre. Mais ce qu'il est censé faire, c'est démarrer, vérifier si INT0 (Digital 2) est bas et, si c'est le cas, aller dormir. En regardant le tirage actuel, je vois qu'il alimente jusqu'à quelques mA pendant quelques secondes, puis tombe à environ 0,3 mA (toujours plus élevé qu'il ne devrait l'être en mode veille). Mais quand je réapplique le 5V, rien . La consommation électrique remonte, mais elle ne répond pas (via la série FTDI).

Y a-t-il peut-être quelque chose qui me manque qui ne peut pas être démarré sur 3V ... en théorie, cela devrait fonctionner très bien.

Mise à jour: j'ai laissé tomber une LED sur D13 et j'ai essayé le croquis de clignotement. Fonctionne bien lors du démarrage à partir de 3V ou 5V. Cependant, lorsque j'exécute mon micrologiciel et que je le démarre à partir de 3V, la LED commence à clignoter sauvagement. Je ne sais pas ce qui en est la cause puisque je n'ai même jamais configuré D13 comme quoi que ce soit dans mon code. Mais ça me fait penser que c'est quelque chose à voir avec le chargeur de démarrage ...

Adam Haile
la source
1
À quoi le DBO est-il réglé et quel est le tirage actuel au démarrage?
Ignacio Vazquez-Abrams
Il est réglé sur 2,7 V. La consommation de courant à 3 V est d'environ 4 mA pendant les premières secondes, puis diminue et la LED devient folle.
Adam Haile
Avez-vous essayé sans le bootloader, c'est-à-dire via ISP?
Ignacio Vazquez-Abrams
Non, je n'ai pas encore essayé. Ce qui est bizarre, c'est que tout va bien quand on exécute le sketch clignotant
Adam Haile
2
Pouvez-vous ajouter un diagramme pour montrer "exactement" comment votre câblage est connecté, y compris tout capteur ou charge sur la batterie. Quel type de pile bouton utilisez-vous, est-ce une pile au lithium-ion (rechargeable) ou alcaline?
Ron J.

Réponses:

6

Alors ... il s'est avéré que tout ce qui se passait était dans le code. Il s'avère que j'initialisais une interruption sur INT0, quand elle était faible, au tout début de mon code. Le problème était que lorsqu'il a démarré sur une alimentation de secours 3V, INT0 était toujours faible car INT0 est lié à la ligne 5V (c'est ainsi qu'il sait s'endormir). Étant donné que INT0 était faible et que l'interruption se déclenchait à un niveau faible, une interruption constante se produisait, ne laissant jamais le reste du programme s'exécuter. Passé à l'activation de cette interruption seulement une fois que je suis entré en mode de réveil complet et cela fonctionne bien maintenant.

Adam Haile
la source
4

Exactement ce qui se passe et pourquoi ne peut pas être déterminé en fonction de la quantité d'informations fournies. Cependant, je vois au moins un problème potentiel qui expliquerait au moins partiellement les symptômes décrits.

Vous avez dit que vous utilisez des diodes pour sélectionner l'alimentation en tension, et une alimentation est une batterie 3V. Si vous utilisez des diodes standard qui chutent à ~ 0,6 V, la tension d'alimentation du MCU n'est que de ~ 2,4 V. Si vous utilisez des diodes Schottky avec une chute de tension comprise entre 0,15 et 0,45, la tension d'alimentation est potentiellement aussi faible que 2,5 V. Vous avez la tension DBO réglée à 2,7 volts, donc en théorie le MCU ne démarrera jamais avec la batterie.

Quant à savoir pourquoi vous pouvez le démarrer à 5v, passer à 3v et le faire remonter - je ne suis pas sûr. Vous pourriez désactiver le BOD dans le code ... peut-être ... Je ne sais pas pourquoi cela fonctionne, mais il n'est probablement pas garanti de fonctionner.

J'ai configuré un circuit de commutation de diode avec 5v et 3,3v pour voir à quoi il ressemble sur mon oscilloscope lorsque les tensions commutent. Lors d'une commutation à 3,3 V jusqu'à 5 V, la tension oscille un peu au départ. Cela peut potentiellement causer des problèmes lorsque le MCU essaie de sortir du sommeil. Mettre un plafond entre VCC et GND a très bien lissé le signal. Lors du passage de 5v à 3,3v, il n'y avait vraiment pas d'oscillation, juste une goutte nette.

D'après ces informations, il semble que vous devriez abaisser le seuil de DBO ou désactiver le DBO, et mettre un plafond de découplage entre VCC et GND. Vous devriez également vous assurer d'avoir une résistance de rappel sur INT0, et lire les sections de la fiche technique du MCU expliquant les différents modes de sommeil toutes les considérations pour dormir et se réveiller - c'est assez compliqué. À votre santé

imjosh
la source
2

Je pense que le problème vient de votre chargeur de démarrage, mais pas de la façon dont vous le pensez.

Lorsqu'un Arduino démarre, un chargeur de démarrage bénéficiant de plusieurs tâches, telles que la recherche d'un hôte série ou le chargement de données de programme à partir d'un flash, prendra beaucoup plus d'énergie qu'un Arduino endormi.

Je pense que la raison pour laquelle votre Arduino ne démarre pas est que le chargeur de démarrage nécessite une source d'horloge précise, mais lui appliquer 3v gâchera cette horloge et il plantera ou attendra peut-être que 3,3v soit appliqué pour une source stable.

En regardant la fiche technique:

droit d'auteur ATMEL

Nous voyons que la consommation de courant au réveil (en exécutant le chargeur de démarrage) sera probablement d'environ 2 mA, tandis que le courant de sommeil est d'environ 0,8 microampères . Cela pourrait certainement conduire à une panne de courant au démarrage sans le bon courant.

Peut-être que vous ne devriez l'allumer qu'avec une alimentation 5 V, ou peut-être avez-vous besoin d'une batterie à courant et tension plus élevés.

Le docteur
la source
Cela ne signifierait-il pas que Blink ne fonctionnerait pas non plus? En outre, je gère plus de quelques Arduino à partir de piles bouton sans aucun problème. Ils peuvent fournir beaucoup de courant pendant une courte période.
Cybergibbons
-5

Essayez de redémarrer votre arduino en allant dans Outils> Graver Bootloader

DeveloperACE
la source
1
Pouvez-vous ajouter plus de détails sur la façon de procéder? Ce n'est pas très spécifique: que pouvez-vous avoir connecté à l'Arduino? Y a-t-il des risques? Merci!
Pingouin anonyme
je débrancherais tout pour être sûr, mais il ne devrait y avoir aucun risque
DeveloperACE
Voici comment graver le chargeur de démarrage: arduino.stackexchange.com/a/474/37 . Votre réponse n'explique pas tout comment le faire.
The Guy with The Hat