Ingresso 12V sul pin del microcontrollore


8

Sto cercando di contare gli impulsi / sec. su un pin del microcontrollore nell'intervallo da ~ 5 a 100Hz. L'µC può funzionare con un ingresso di 5 V, quindi devo abbassare il livello di tensione in sicurezza.

Mi viene in mente un semplice resistore, che tuttavia lascia qualsiasi impulso aperto direttamente al pin µC - meh .

Ho trovato questa risposta, ma la domanda rimane se quel circuito è capace di cambiamenti "veloci" a 100Hz.

Esiste un modo comprovato e affidabile (forse tramite un circuito integrato?) Di contattare i pin 5 V o 3,3 V per ingressi da 12 V "sporchi" ? Ho i 12V e 5V disponibili per pilotare qualsiasi IC "ready made".


2
divisore resistivo + diodi zener / clamping?
Wesley Lee,

2
È davvero una domanda a cui non è possibile rispondere con una semplice ricerca su Google?
Ale..chenski,

16
Si può rispondere, ma vorrei davvero una risposta di qualità prima di distruggere il mio equipaggiamento attraverso la mia stessa stupidità. Accontentiamoci della "tranquillità"?
Christian,

8
@AliChen stackexchange mira ad essere un repository canonico di domande e risposte. Anche semplici domande possono essere utili se raccolgono risposte utili.
Wayne Conrad,

2
100Hz non è veloce.
user253751

Risposte:


13

Usa un circuito come questo:

schematico

simula questo circuito - Schema creato usando CircuitLab

R1 e R2 determinano l'intervallo di tensione ed eseguono la divisione iniziale. Questi resistori devono essere in grado di avere una certa potenza. Tipico è MELF 0.4W. Tutti gli altri possono essere resistori / condensatori di chip.

R3 impedisce che eventuali sovratensioni causino danni al grilletto schmitt. R4 e R5 sono opzionali per prevenire segnali fluttuanti.
Tuttavia, la combinazione R3 / R4 può anche essere utilizzata per regolare la soglia, se necessario.

C1 e C2 determinano la velocità massima. La combinazione R3 / C2 può filtrare lentamente. C1 filtra i transitori.

Viene utilizzato un trigger schmitt separato poiché puoi ottenerli davvero piccoli ed economici. E impedisce di instradare un segnale debole su lunghe tracce. Pur essendo anche una parte sacrificale sulle impennate maggiori.

Ho progettato questo circuito in base a ciò che ho visto all'interno dei PLC. Il circuito sopra è per 24V. Regolare le resistenze in modo che corrispondano a 12V secondo IEC61131-2.

secondo 61131-2
Il concetto di standard è garantire che l'ingresso debba assorbire una quantità minima di corrente prima di considerarlo un '1'. I tre tipi specificano quanto e vengono applicati in base al rumore ambientale. Questo impedisce ai glitch di toccarlo o relè nelle vicinanze. Lo svantaggio è che R1 / 2 deve avere una potenza decente e una bassa resistenza.


Wow. Una risposta molto approfondita a quella che inizialmente sembrava una semplice domanda. Grazie.
Christian,

Sono davvero curioso di conoscere R4 e R5: quando mai faranno qualcosa di utile? R2 + R3> R4 comunque. In caso di rottura di uno dei componenti "heavy duty"?
pipe

@pipe R3 e R4 possono aiutare a configurare la soglia, fornendo al contempo un percorso ad alta impedenza alla logica. R5 è superfluo per la maggior parte del tempo, ma nel design è stato utilizzato il pull-down mcu non poteva essere utilizzato. Se per qualche motivo il buffer dovesse fallire, l'ingresso MCU non leggerebbe un ronzio di 50Hz. (Nota: è stato richiesto affidabile)
Jeroen3

17

Vorrei provare una soluzione di divisione del resistore come mostrato di seguito.

inserisci qui la descrizione dell'immagine

Selezionare il rapporto di resistenza in modo che la tensione divisa sia al livello corretto per l'MCU quando l'ingresso è alla sua tensione nominale. La tensione del diodo zener è selezionata per bloccare l'ingresso MCU quando l'ingresso supera l'ingresso massimo. Lo zener proteggerà anche l'MCU se l'ingresso diventa negativo.

Questa soluzione funzionerà alla grande per la gamma di frequenza relativamente bassa che hai specificato.


1
Perché scegliere zener come 4v7? 5v2 (5v1?) Sarebbe la soluzione migliore?
R.Joshi,

7
@ R.Joshi: se il microcontrollore da 5 V è alimentato da un'alimentazione tollerante al 10% (4,5-5,5 V VDD), l'applicazione di 5,2 V sul pin potrebbe essere superiore al tipico VDD + 0,3 V assoluto max. L'high logico è riconosciuto a 2 V per TTL e 2/3 * VDD per CMOS, quindi nessun problema con uno zener 4V7 lì.
Hans,

2
Vorrei davvero poter contrassegnare due risposte come "scelte". La tua strada è la strada da percorrere ogni giorno, eppure la risposta di Jeroen è solo un po 'più approfondita. Grazie, però, per aver dedicato del tempo per rispondere.
Christian,

8

Vorrei utilizzare un divisore di resistenza e quindi proteggere l'UC con uno Zener 5.1v

Se metti lo zener tra il pin e la terra in parallelo con, diciamo, un resistore pull down da 10k, quindi immetti il ​​segnale diviso in tensione ... zener è più che abbastanza veloce ed economico / facile.

Faccio spesso questo e divido il segnale prima del bit zener con un piatto.

Un'altra opzione è collegata, se la tua preoccupazione era davvero che potesse essere usata un'opto, se non fosse un problema di sicurezza andrei con quanto sopra o avrei il pin normalmente alto da 5 V Vcc e lo tirerei basso con un fet (fuori dalla mia testa 2N7000 dovrebbe funzionare) - ma è meno semplice dell'opzione zener.


7

Se i livelli del segnale sono GND e 12V (o> 5V), il modo più semplice e sicuro al 100% è questo:

schematico

simula questo circuito - Schema creato usando CircuitLab

Se serve davvero al tuo scopo dipende dall'effettiva impedenza del segnale 12V (dovrebbe essere molto al di sotto di R1) e da cosa intendi per "sporco".

Inoltre, come giustamente sottolineato da @MichaelKaras, il livello basso sull'ingresso del µC può essere spostato al livello basso del segnale 12V più Vf del diodo (fino a circa 0,7 V). Dovresti verificare se questo è un problema nel tuo caso o meno. In tal caso, puoi ancora provare a utilizzare un diodo Schottky con un Vf di circa 0,35 V.


Sulla maggior parte dei µC, si potrebbe anche far cadere la resistenza e attivare il pullup interno per quel pin.
Janka,

La soluzione di diodi proposta qui non è sempre la soluzione migliore o ottimale. La tensione di ingresso di basso livello presentata all'MCU sarà superiore a GND di una caduta di tensione diretta di un diodo più la tensione di uscita di livello sempre basso che sta creando il segnale da 0 a 12V. Questo può essere particolarmente un problema in cui i segnali possono trasportare rumore e l'ingresso MCU è specificato con livelli di tensione di tipo TTL per V <sub> IL </sub>. Spesso questa specifica può essere solo 0,8 V. Quindi, se questa soluzione viene utilizzata, fai attenzione e almeno in particolare un diodo a bassa caduta di tensione diretta come un BAT54.
Michael Karas,

@MichaelKaras Hai ragione riguardo allo spostamento del livello basso da parte della Vf del diodo; questo deve essere tenuto in considerazione. Per me, per 5 V µC, V [IL] di 0,8 V sembra eccezionalmente basso. Mi sembra di trovare generalmente 0,3 Vcc (~ 1,5 V).
JimmyB,

Se la tua MCU ha una specifica di tipo CMOS per V <sub> IL </sub>, forse funziona bene. Mi piace ancora progettare in modi che funzionino anche se le specifiche fossero molto inferiori a quelle solo per ottenere il maggior margine operativo possibile. Anche la differenza di specificare un diodo a bassa caduta è un buon passo in tal senso se si sceglie di utilizzare questo tipo di circuito. Il circuito non è particolarmente adatto per i casi in cui potrebbero esserci escursioni negative sull'ingresso 12V.
Michael Karas,

Sono d'accordo. Progettare per il margine è una buona cosa. E tensioni negative sul segnale a 12 V possono effettivamente provocare caos nel circuito.
JimmyB,

5

Userei un optoisolatore, 100Hz è facilmente nel raggio di qualsiasi altro decente. 4n25 viene in mente come un numero di parte comune e so che è in grado di fare molto meglio di 100Hz.


Il problema con l'uso di un isolatore ottico per risolvere questo problema è che si presume che sia possibile assorbire corrente dal segnale 12V. È possibile bufferizzare il segnale a 12 V ma ciò richiederebbe quindi un'alimentazione aggiuntiva.
Jason Morgan,

Sono sicuro che puoi ottenere un'opto che sarebbe efficace quasi alla stessa corrente di un micro input, da 12v non caricherà molto per accendere un piccolo LED.
John U,

1
Una perdita di ingresso digitale è in genere compresa tra 10nA e 1uA (dipendente dalla temperatura e dal processo). Non ho mai incontrato un accoppiatore ottico che funzioni anche a 1uA. Un tipico accoppiatore ottico, commercializzato come a bassa potenza, ad esempio Broadcom ACPL-x6xL necessita di 1,6 mA. Questo è tra 1600 e 160000 volte più corrente. Ma poi, come dichiaro nella mia risposta, dipende dai requisiti che funzioneranno, quindi non sto respingendo una soluzione opto.
Jason Morgan,


2

Il metodo selezionato dipende in parte da ciò che fa il segnale di ingresso, da come si comporta e da come ciò potrebbe influenzare il circuito di ingresso e il codice che lo legge?

es. è sempre 12 V? Ha punte o rumore? Quanta corrente può guidare? La corrente può essere guidata in esso? Prendere corrente da esso influirà su qualcos'altro? È fondamentale per la sicurezza? ....

Per questo motivo non può mai esserci una risposta universale a questa domanda poiché la soluzione "corretta" dipende da ciò che fa il resto del sistema. La soluzione scelta che soddisfa i requisiti avrà costi e complessità diversi.

Detto questo, come nessun altro ha ancora suggerito, sceglierò un input FET.

È possibile utilizzare un JFET o MOSFET e possono essere sia fonti comuni che modalità di scarico comuni. Ad esempio, scarico comune:

schematico

simula questo circuito - Schema creato usando CircuitLab

Il vantaggio della modalità drain comune è che consente l'ingresso dell'ingresso a un pin analogico (ad es. ADC) o digitale. Se il segnale è veramente digitale, abiliterei il trigger schmitt sull'ingresso CPU (se ne ha uno), o aggiungerei un buffer schmitt esterno al pin di ingresso della CPU.

vantaggi

  • Impedenza di ingresso molto elevata
  • Ingresso parzialmente isolato (può resistere a +/- 30 V, a seconda della selezione FET)
  • Analogico possibile
  • Effetto minimo sul segnale esterno

1

schematico

simula questo circuito - Schema creato usando CircuitLab

Figura 1. Interfaccia optoisolata. Usa pull-up interno su GPIO.

Un optoisolatore risolve diversi problemi.

  • Completo isolamento elettrico tra il circuito a 12 V e la logica a 5 V.
  • Gestisce il segnale sporco a 12 V senza rischi.
  • Semplicità.

1

schematico

simula questo circuito - Schema creato usando CircuitLab

R1, R2 e C1 formano un divisore di tensione con un filtro passa basso da 1kHz. Qualsiasi segnale ad alta frequenza indesiderato che viaggia sul 12V può essere filtrato. Il calcolo per la frequenza del filtro è 1 / (2 pi R2 C1). Nota: la Base richiede almeno 0,7 V per funzionare correttamente, fare attenzione quando si regola la resistenza.

BJT viene utilizzato perché è molto comune paragonarlo a mosfet. Nel caso in cui il 12V sia ancora attivo ma il 5V per il tuo uC è inattivo, il BJT non passerà corrente nel pin e causerà danni.

Per la programmazione uC, utilizzare un trigger da alto a basso per contare il polso. Poiché questo circuito invertirà l'impulso.


-2

Generalmente gli ingressi MCU sono già protetti con diodi clamp, purché si abbia un resistore con un valore ottimizzato (abbastanza alto per i morsetti e abbastanza basso per il campionamento) e si abbia una buona capacità di bypass tra VDD e VSS, non si ha di cui preoccuparsi. Quindi, solo una resistenza è abbastanza buona.

modifica: Grazie al commento di PeterJ, voglio spiegarlo un po 'di più. La minima potenza assorbita dall'MCU (supponendo che non sia inattiva), la capacità di bypass, il valore della resistenza; quando tutti questi sono nel punto compromettente - che è facilmente il caso molto generale con solo la condizione che usa un resistore di circa 10kOhm - l'unico resistore va bene per la semplice applicazione dell'OP.


4
Un problema che ho riscontrato molti anni fa è che mentre potrebbe non danneggiare nulla Vcc internamente può spostarsi un po '(fino a quando il diodo non si comporta) e, a seconda del microcontrollore, può buttare via cose come letture ADC.
PeterJ,

@PeterJ Funziona bene se puoi garantire che almeno tanta corrente venga tolta dalla fornitura. Nel peggiore dei casi, aggiungere un resistore fittizio ...
CL.

Anche se 'cattivo' l'ho visto fatto su molti beni di consumo a buon mercato. Una volta ho riparato una sveglia in cui l'alimentazione di rete veniva immessa in un ingresso digitale tramite un resistore da 10 M come riferimento temporale. Non sorprende che il chip fosse morto.
Jason Morgan,

-5

Puoi optare per un regolatore di tensione LM7805 / LM7803 rispettivamente per 5 V e 3,3 V. Suppongo che l'uC sia isolata da un carico che richiede corrente, se presente.


1
È creativo. Ma opererai fuori specifica ad alta velocità. Se fosse tutto ciò che avevi in ​​giro, forse.
Jeroen3,
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.