Avvio a basso consumo non funzionante


9

Ho una scheda Arduino ATMega328 personalizzata che generalmente funziona a 5V @ 8MHz (usando il profilo Arduino Pro 3.3V 8MHz e il bootloader). Il motivo principale per cui utilizzo questa configurazione è che posso mettere la scheda in modalità sleep quando l'alimentazione principale viene disconnessa e inizia a scaricarsi dalla batteria (3 V da una cella a bottone). Le sorgenti 5V e 3V sono diodi OR insieme e l'ingresso 5V è collegato a INT0. Nel codice, quando rileva che INT0 è diminuito, inizializza la modalità di sospensione e tutto si spegne, ad eccezione del timer del watchdog che mantiene un ciclo di 1Hz per mantenere un conteggio interno e controllare che il chip debba essere ripristinato. Questo funziona ben quando 5V prima applicazione, quindi viene inserita la batteria, poi5V è disconnesso. Va a dormire e quando viene ripristinato il 5V si sveglia e vedo che non ha perso il conto.

Tuttavia, il problema si presenta alla prima applicazione di 3V . Onestamente non sono sicuro che si stia persino avviando. Ma quello che dovrebbe fare è avviare, controllare se INT0 (Digital 2) è basso e, in tal caso, andare a dormire. Osservando l'assorbimento di corrente, vedo che si accende fino a pochi mA per un paio di secondi, quindi scende a circa 0,3 mA (ancora più alto di quanto dovrebbe essere in modalità di sospensione). Ma quando riapplico 5V, niente . L'assorbimento di potenza torna indietro ma non risponde (tramite seriale FTDI).

C'è forse qualcosa che mi manca che non può essere avviato su 3V ... in teoria dovrebbe funzionare bene.

Aggiornamento: ho lasciato cadere un LED su D13 e ho provato lo schizzo delle palpebre. Funziona bene quando si inizia da 3 V o 5 V. Tuttavia, quando eseguo il mio firmware e lo avvio da 3 V, il LED inizia a lampeggiare selvaggiamente. Non ho idea di cosa lo stia causando dal momento che non ho nemmeno impostato D13 come qualcosa nel mio codice. Ma mi fa pensare che abbia a che fare con il bootloader ...


1
A cosa è impostato il BOD e qual è il sorteggio corrente all'avvio?
Ignacio Vazquez-Abrams,

È impostato su 2,7 V. L'assorbimento di corrente a 3 V è di circa 4 mA per i primi secondi, quindi cala e il LED diventa pazzo.
Adam Haile,

Hai provato senza il bootloader, cioè tramite ISP?
Ignacio Vazquez-Abrams,

No, non l'ho ancora provato. La cosa strana è che va bene solo quando si esegue lo schizzo delle palpebre
Adam Haile,

2
Puoi aggiungere un diagramma per mostrare "esattamente" come è collegato il tuo cablaggio, incluso qualsiasi sensore o carico sulla batteria. Che tipo di gettoniera stai usando, è un ione di litio (ricaricabile) o alcalino?
Ron J.

Risposte:


6

Quindi ... ho scoperto che quello che stava succedendo era tutto in codice. Risulta che stavo inizializzando un interrupt su INT0, quando era basso, all'inizio del mio codice. Il problema era che quando si avviava con alimentazione di backup a 3 V, INT0 era sempre basso perché INT0 è legato alla linea a 5 V (è come sa andare a dormire). Poiché INT0 era basso e l'interruzione si stava attivando su basso, stava causando un'interruzione costante, senza dare al resto del programma il tempo di eseguire. Passato a abilitare quell'interruzione solo dopo che sono entrato in modalità di veglia completa e ora funziona bene.


4

Esattamente cosa sta succedendo e perché non può essere determinato in base alla quantità di informazioni fornite. Tuttavia, vedo almeno un potenziale problema che spiegherebbe almeno parzialmente i sintomi descritti.

Hai detto che stai usando diodi per selezionare l'alimentazione di tensione e una di alimentazione è una batteria da 3 V. Se si utilizzano diodi standard che scendono ~ 0,6 V, la tensione di alimentazione all'MCU è solo ~ 2,4 V. Se si utilizzano diodi Schottky con una caduta di tensione compresa tra 0,15-0,45, la tensione di alimentazione è potenzialmente bassa fino a 2,5 V. La tensione BOD è impostata su 2,7 volt, quindi in teoria l'MCU non si avvierà mai con la batteria.

Per quanto riguarda il motivo per cui puoi avviarlo a 5v, scendere a 3v e ripristinarlo di nuovo- Non sono sicuro. Potresti disabilitare il BOD nel codice ... forse ... Non sono sicuro del perché funzioni, ma probabilmente non è garantito che funzioni.

Ho installato un circuito di commutazione a diodi con 5v e 3.3v per vedere come appare sul mio oscilloscopio quando cambiano le tensioni. Quando a 3,3 v si passa a 5 v, la tensione oscilla inizialmente un po '. Ciò potrebbe potenzialmente causare alcuni problemi quando l'MCU tenta di uscire dalla modalità di sospensione. Mettere un limite tra VCC e GND ha levigato molto bene il segnale. Quando si passa da 5v a 3.3v, in realtà non c'è stata alcuna oscillazione, ma solo un calo netto.

Da queste informazioni, sembra che dovresti abbassare la soglia BOD o disattivare il BOD e mettere un limite di disaccoppiamento tra VCC e GND. Probabilmente dovresti anche assicurarti di avere un resistore pull-down su INT0 e leggere le sezioni del foglio dati MCU che spiegano le varie modalità di sospensione tutte le considerazioni per dormire e svegliarsi - è piuttosto coinvolto. Saluti


2

Penso che il problema sia con il tuo bootloader, ma non nel modo in cui pensi.

All'avvio di un Arduino, un bootloader che guadagna diverse attività, come la ricerca di un host seriale o il caricamento dei dati del programma dalla memoria flash, richiederà molta più energia di un Arduino che dorme.

Penso che il motivo per cui il tuo Arduino non si avvii è perché il bootloader richiede una sorgente di clock precisa, ma l'applicazione di 3v su di esso rovinerà quel clock e forse si arresterà in modo anomalo o attenderà l'applicazione di 3.3v per una sorgente stabile.

Guardando la scheda tecnica:

Copyright ATMEL

Vediamo che l'assorbimento di corrente al risveglio (eseguendo il bootloader) sarà probabilmente intorno a 2 mA, mentre la corrente in sospensione è di circa 0,8 microampere . Ciò potrebbe certamente portare a un blackout all'avvio senza la corrente corretta.

Forse dovresti accenderlo solo con alimentazione 5v, o forse hai bisogno di una corrente più alta, una batteria a voltaggio più elevato.


Ciò non significherebbe che neanche i Blink funzionano? Inoltre, sto eseguendo più di qualche Arduino da celle a bottone senza problemi. Possono fornire molta corrente per un breve periodo.
Cybergibbons

-5

Prova a riavviare il tuo arduino andando su Strumenti> Masterizza Bootloader


1
Potete per favore aggiungere maggiori dettagli su come procedere ulteriormente? Non è molto specifico: cosa puoi aver collegato ad Arduino? Ci sono dei rischi? Grazie!
Pinguino anonimo

Staccerei tutto per essere sicuro, ma non ci dovrebbero essere rischi
DeveloperACE

Ecco come masterizzare il bootloader: arduino.stackexchange.com/a/474/37 . La tua risposta non spiega tutto su come farlo.
The Guy with The Hat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.