Modi corretti per disconnettere i circuiti integrati in stati di bassa potenza per evitare l'alimentazione parassita / backfeed


10

Sto lavorando a un progetto basato su AVR a batteria a bassa potenza che integra alcuni dispositivi diversi tra cui una striscia neopixel e un folletto di Adafruit . Quando il dispositivo generale è inattivo, mi piacerebbe che assorbisse meno di 0,1 mA per massimizzare la durata della batteria LiPo.

Ho fatto tutto questo (misurato 0,035 mA) ma non sono sicuro di averlo fatto necessariamente nel modo "giusto" e ho intenzione di costruire un prodotto basato su questo, quindi mi piacerebbe farlo nel modo giusto.

inserisci qui la descrizione dell'immagine (Non mostrato: un diodo flyback per il relè)

La preoccupazione principale che ho è l'alimentazione "parassita" dei dispositivi quando VCC è disconnesso attraverso la corrente che scorre dai pin di dati. Ad esempio, il Pixie (che comunica via seriale) non ha la modalità di spegnimento e anche quando "off" si scarica di circa un milliampere. Quindi ho messo un piccolo relè per disconnettere il suo VCC e ho scoperto che il pin seriale stava ancora alimentando il folletto. Suggerimenti altrove hanno suggerito che molti chip hanno un diodo che sposta i loro pin di ingresso digitale su VCC come protezione dell'alimentazione. Per risolvere questo problema, ho dovuto sospendere la libreria seriale e in realtà digitalWrite (PIN, LOW) durante la sospensione.

La stessa cosa con la striscia WS2812b: la disconnessione di VCC consente comunque di alimentare il dispositivo dal pin dati. E in altri progetti quando ho disconnesso GND con un MOSFET a canale N, ho visto il contrario: un riflusso di corrente attraverso la linea dati verso terra! (Questo ha dovuto essere risolto con un diodo per post su PJRC.) Le WS2812b in realtà impiegano circa un milliamp ciascuna anche quando non sono illuminate,

Quindi la domanda: esiste un modo generale e "pulito" per disconnettere VCC e GND da parti di un progetto durante la sospensione del sistema quando ci sono pin di dati nel mix. Qual è la migliore pratica?

Qualche idea:

  1. Forza VCC su GND (non sai come? Hbridge?). (Se lo faccio, cosa succede ai pin di dati che sono alti?)
  2. Posizionare un buffer a tre stati tra tutti i pin di dati e questi dispositivi e durante la sospensione portare il buffer a tre stati in uno stato di alta impedenza, scollegare VCC o GND solo con mosfet P o N
  3. Scollegare GND solo con N mosfet e posizionare i diodi su tutti i pin di dati
  4. Esiste una sorta di blocco dell'alimentazione che disconnette sia VCC che GND e li mette in uno stato di "alta impedenza" (come un buffer a tre stati per l'alimentazione?) In questo modo la corrente non ha modo di fluire "fuori" dalle linee di dati.

Qualcuno può illuminarmi sul modo più pulito e ripetibile di gestire questo tipo di problema di "disconnessione del carico"? (Inutile dire che ho passato ore a cercare su Google questo problema con poca fortuna, anche se ho trovato questa nota tecnica sulla commutazione del carico ma non affronta il back-feed e il potere parassitario)


Ya questo è super fastidioso, in realtà ho visto casi in cui l'alimentazione che raggiunge un pin GPIO può accendere un AVR (eseguendo il codice) anche senza che l'alimentazione raggiunga i pin VCC ...
vicatcu,

2
Osservazione divertente: ho fatto altre ricerche su Google da quando ho pubblicato questa domanda e questa domanda su SE è arrivata al primo posto. Google ha indicizzato questa pagina in meno di 10 minuti.
Jeremy Gilbert,

Solo commento: interruttori di isolamento adeguati, come altri hanno suggerito, sono la soluzione migliore quando non è possibile eliminare una tensione remota. Può darsi che l'uso di diodi Schottky per inserire pin con catodi comuni e solitamente a Vcc e fissati a terra quando si desidera l'isolamento, fornirà un'adeguata eliminazione delle tensioni di impedenza elevate. Ovviamente, Schottky serrare una linea di alimentazione elettrica a bassa impedenza può rovinare la giornata.
Russell McMahon,

Probabilmente Hi-Z -ing tutte le tue connessioni in qualche modo (pin µC tri-state, buffer tri-state, switch analogici, qualunque cosa), come hanno suggerito Peter Smith e CL, è la scommessa migliore. Quale dei metodi è migliore, non ne sono sicuro. In ogni caso: perché usi un relè per la commutazione, e non un P-MOSFET (o un N-MOSFET lato basso per quella materia, anche se il passaggio lato basso sarà probabilmente un po 'più difficile qui)?
FlashCactus

Risposte:


5

Quando lo faccio, di solito uso switch analogici CMOS sulle linee dati interessate.

Qualcosa come ADG812 ha 4 canali di switch SPST che sono facilmente adatti per una logica abbastanza veloce e forniscono un'impedenza davvero elevata tra i nodi dello switch quando sono nello stato off.

ADG812 fuori perdita

La cosa bella di questo è che la tecnica funziona sia per linee dati unidirezionali che bidirezionali.

Queste parti funzionano anche con un sorriso luminoso:

Requisiti di alimentazione ADG812

La solita sequenza per lo spegnimento:

  1. Disattiva i selettori del percorso dati

  2. Spegnere il dominio.

L'accensione è l'opposto, ovviamente.

[Aggiornare]

Questi sono infatti noti con altri nomi, come porte di passaggio e porte di trasmissione .

Questi sono significativamente diversi da un vero buffer a tre stati (come puoi vedere nel diagrame nel link sopra), ma per la logica ordinaria, l'effetto è migliore (questo è intrinsecamente un dispositivo bidirezionale) ma con potenza inferiore.


Perdona l'ignoranza della domanda, ma è nettamente diverso da un buffer a tre stati? (E grazie per la risposta!)
Jeremy Gilbert,

Questi sono anche noti come "varchi"
vicatcu,

3

Se i segnali di dati sono collegati al tuo microcontrollore, puoi semplicemente renderli ad alta impedenza configurando quei pin come input. (Se l'altro chip consuma pochissima energia, puoi trattare il suo Vcc come un segnale dati.)

Altrimenti, è possibile utilizzare switch analogici (chip logici 74x66) per disconnetterli. Per i segnali unidirezionali, funzionerebbe anche 74x125.


In realtà non è necessario renderli high-Z, puoi semplicemente abbassare le linee GPIO del micro.
DoxyLover,

1
Sarebbe più pericoloso se l'altro chip potesse mai portare il segnale in alto.
CL.

Proprio per questo ho capito bene, il passaggio dei pin agli ingressi equivale sempre a metterli in uno stato di alta impedenza? È generalizzato alla maggior parte degli MCU o solo agli AVR? Quello stato è lo stesso che otterresti dal 74x125 quando OE è disabilitato?
Jeremy Gilbert,

@JeremyGilbert Tutti gli ingressi CMOS hanno un'alta impedenza (sono porte MOSFET, che si comportano come condensatori molto piccoli). Un'uscita 125 disabilitata non ha gate, ma la differenza è trascurabile.
CL.

1
@JeremyGilbert Gli ingressi sono generalmente ad alta Z nella maggior parte delle applicazioni; dopo tutto, è difficile percepire qualcosa quando si guida la linea. Detto questo, almeno con gli AVR (e probabilmente anche altri, ma non conosco i dettagli), devi fare attenzione ai pullup interni: se il pin è in modalità input (configurato tramite DDRx) e scrivi LOW in (tramite PORTx), è in normale modalità Hi-Z. Tuttavia, se si scrive ALTO mentre si è in modalità di input, il pullup interno è abilitato e dall'esterno del pin sembra una resistenza da ~ 50K a VCC anziché una linea mobile.
FlashCactus,

1

Purtroppo non penso che ci sia una taglia unica per tutte le strategie. Passa l'alimentazione ai sottosistemi come hai già fatto. Nel software, i piedini dell'unità sono bassi per gli stati di bassa potenza, a meno che ciò non provochi una condizione di stato stabile ad alta potenza. In tal caso, guidare il perno in alto. Non lasciare mai fluttuare gli input. Potenza di sequenza necessaria per stabilire condizioni iniziali sicure.


1


I2C

Non hai questa opzione: sei costretto a usare l'I / O seriale asincrono. Alcuni microcontrollori consentono un approccio simile a I2C per risolvere il problema. Se è possibile programmare il pin di uscita seriale in modo che sia solo pull-down anziché il più comune pull-up-for-1, pull-down-for-0 , è possibile aggiungere un resistore pull-up a commutato-Vcc su stabilire un livello logico.
Questa soluzione non è così silenziosa come l'approccio attuale, ma dovrebbe risolvere il problema di back-powering dei moduli I / O dall'AVR. Non è davvero una soluzione "pulita", ma è molto più sicura per i microcontrollori nei tuoi moduli IO.

schematico

simula questo circuito - Schema creato usando CircuitLab

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.