Domanda:
Come posso leggere un'uscita tristate con microcontrollore?
RHaguiuda
2014-07-15 00:26:30 UTC
view on stackexchange narkive permalink

Vorrei interfacciare la linea STAT di un IC di gestione della carica agli ioni di litio MCP73831 a un microcontrollore per leggerne lo stato di carica corrente.

La scheda tecnica spiega: nella sezione 5.2.1, che la riga STAT è un'uscita tristate e ha il seguente stato:

  • Alta
  • Bassa
  • Alta impedenza

e viene fornita una tabella che spiega come ogni livello rappresenta ogni stato di carica della batteria.

Come posso collegare questo pin a un I / O del microcontrollore e leggere questi tre stati distinti?

Leggere Alto e Basso è abbastanza semplice, ma rilevare un ingresso è un'impedenza elevata che non avevo mai fatto prima.

Cinque risposte:
Wouter van Ooijen
2014-07-15 00:34:33 UTC
view on stackexchange narkive permalink

Potresti collegarlo a terra e Vcc con due resistori da 10k e utilizzare un ingresso A / D per leggere il livello.

Se non hai un A / D di riserva collegalo a un altro pin del tuo UC con una resistenza da 10k. Se il pin è alto o basso, ovviamente verrà letto come alto risp. basso (supponendo che possa guidare un carico di 10k). Se è ad alta impedenza, leggerà uguale a quello che emetti sull'altro pin.

+ Mi piace la seconda idea.Leggere con uscita alta e uscita bassa, quattro possibilità, di cui solo tre sono sensibili.
Bella idea usare l'altro perno.In questo caso, però, l'ingresso può / supererà i processori Vcc.Aggiunto un post invece di un commento esteso.
Turbo J
2014-07-15 01:04:50 UTC
view on stackexchange narkive permalink

Molti microcontrollori ti consentono di scegliere tra resistenza pullup debole e resistenza pulldown debole su un ingresso GPIO, nell'ordine di circa 50k-100k Ohm. Se l'ingresso è alto-z, una lettura con pulldown debole abilitato leggerà basso e una lettura successiva con pullup debole sarà alto.

Ricordarsi di attendere alcuni µs tra la commutazione del resistore e la lettura GPIO per consentire alla tensione sul pin di stabilizzarsi.

Si noti che i vecchi AVR e 8051 possono avere solo un pullup debole ma nessun resistore pulldown debole.

+1 ... Per le MPU che non hanno una debole capacità di pullup e debole pulldown, potresti aggiungere un singolo resistore esterno a un altro pin GPIO e usarlo per pilotare il resistore alto o basso.
placeholder
2014-07-15 01:34:05 UTC
view on stackexchange narkive permalink

Se leggi il documento - sezione 3.3 vedrai che è inteso per essere utilizzato con una resistenza di pull up.

Infatti con qualsiasi segnale di stato che non si intende leggere quando è in modalità a tre stati, è progettato in questo modo in modo che il segnale possa essere condiviso tra più dispositivi. Il punto che crea confusione è che se stai leggendo il segnale ed è in modalità a tre stati (e non lo sai) puoi ottenere letture spurie. il modo migliore è quindi applicare un pull up debole in modo che se il segnale è in uno stato ambiguo, il segnale viene letto in modo appropriato. Poiché questo segnale è destinato a pilotare un LED per indicare uno stato di carica (cioè basso è in carica), quindi con un pull-up e si legge alto, significa che non è in carica.

enter image description here

La tabella nella sezione 5.2.1 indica che (per MCP73831) un'uscita "HIGH Z" indica "Shutdown" o "No Battery Present", mentre un'uscita "H" (high) indica "Charge Complete - Standby".Un solo resistore di pull-up non consentirà all'MCU di distinguere.
Con un pull up quindi le modalità di "spegnimento", "nessuna batteria presente" e "carica completa - standby" mappano tutte la stessa lettura di alta.Tutto ciò si associa all'azione di "non fare nulla" sembra che il foglio dati sia coerente.
@placeholder che la mappatura potrebbe non essere desiderata: la carica competitiva e l'assenza di batteria sono casi estremamente diversi.
Doug Inman
2020-06-30 12:19:29 UTC
view on stackexchange narkive permalink

Sto anche usando l'MCP73831 e volevo collegare STAT a un MCU che accetta solo 3.3v sui suoi pin di ingresso.Ero anche preoccupato di mettere 5v su un pin GPIO.

Invece di utilizzare un partitore di tensione, ho utilizzato un secondo pin GPIO dell'MCU per attivare un resistore pull-up / pulldown utilizzando un MOSFET a canale P e canale N (vedi circuito sotto - penso che questo sia chiamato totempalo ;-)).Ho quindi preso STAT e l'ho inserito attraverso un semplice inverter in modo che l'MCU potesse leggerlo in sicurezza (cioè ~ STAT tra 0 e 3.3v).

Affinché questo funzioni, ho quindi preso 2 letture dell'output (~ STAT), la prima con CTL basso e la seconda con CTL alto.Se le letture cambiano, STAT deve essere mobile. Se avevi bisogno di un LED per visualizzare lo stato di carica, puoi controllarlo dall'MCU stesso se hai abbastanza GPIO di riserva :-)

Spero che questo aiuti. enter image description here

carveone
2014-07-25 20:42:52 UTC
view on stackexchange narkive permalink

Se posso aggiungere un avviso a questo post. L'MCP73831 è un chip per caricabatterie e quindi il suo Vdd è superiore al suo Vbat.

enter image description here

Supponendo che il tuo microcontrollore sia collegato a Vbat e Vdd sia alimentato da USB, quindi Vdd potrebbe essere almeno 1,5 V superiore a V ucontroller .

Il problema è che, sul 73831 che ha uscite totem pole, STAT è riferito a Vdd . Quindi non collegare STAT direttamente a un ingresso UC. Usa qualcosa come un resistore da 10k in mezzo. Per un micro PIC, i morsetti del diodo di ingresso si agganciano al suo Vcc (controlla il datasheet per la corrente massima prima del latchup)

Come aggiunta: l'anno scorso mi sono imbattuto in un trucco per leggere gli ingressi hi / low / z quello era per un PIC ma potrebbe (o potrebbe non funzionare) per te. Qualcosa come (pseudo codice):

  STAT ---- [10k] ------ PICPIN inizia come inputset PIN lowset PIN to outputset PIN to inputset PIN highvalue = read PIN (assumendo 1 per alto, 0 per basso) valore = valore << 1set PIN to outputset PIN to inputvalue | = read PIN  

Quindi ottieni 0 per basso, 1 per Hi-Z e 3 per alto . YMMV.

Ho lo stesso problema.Quello che non capisco è perché dovrebbe funzionare con il 10k e non distruggere l'AVR?Sta limitando la corrente, ma la tensione è ancora 5 V, che è oltre la tensione I / O massima VCC + 0,5 V specificata.
La tensione su un lato del resistore è oltre le specifiche ma, sul pin del micro, i diodi di protezione dell'ingresso bloccano la tensione massima a VCC + una caduta del diodo, che è entro le specifiche.Se la corrente è troppo alta, distruggerai comunque i diodi.Quindi, se avessi una resistenza da 200 V -> 10 Mohm -> Pin, la corrente sarebbe 20uA.Non lo farei ora anche senza diodi Schottky esterni, ma hai un'idea.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...