Come posso usare un ingresso 12 V su un pin Arduino digitale?


38

Sto creando un controller per un sistema a 12 V utilizzando un microcrontroller Arduino Uno. Per le uscite sto usando uno schermo a relè per commutare i componenti a 12 V. Ho un interruttore a levetta da 12 V che accende alcuni componenti da 12 V nel sistema e voglio usare un segnale di trigger fuori da questo stesso interruttore per inviare a un ingresso digitale Arduino. So che Arduino può gestire solo 5 V max. Quale sarebbe il modo migliore per abbassare i 12 V che escono dall'interruttore a 5 V per l'ingresso?

EDIT: il sistema è destinato all'uso in auto. L'amperaggio della batteria dell'auto dovrebbe essere abbassato in qualche modo per non far esplodere i componenti?


3
l'amperaggio dell'auto è irrilevante: i componenti utilizzano solo la corrente necessaria. La batteria dell'auto è in grado di fornire centinaia di amplificatori, come quello necessario per il motorino di avviamento. Questo non significa che ci sono sempre centinaia di amplificatori che scorre e potrebbe danneggiare le cose. :)
KyranF,

Risposte:


44

Buone notizie! Sarà economico! :-)

Un semplice divisore di resistori porterà i 12 V ai 5 V che un Arduino può digerire. La tensione di uscita può essere calcolata come

VOUT=R2R1+R2VioN

I valori dei resistori nell'intervallo di 10 kΩ sono una buona scelta. Se R2 è 10 kΩ, R1 dovrebbe essere 14 kΩ. Ora 14 kΩ non è un valore standard, ma lo è 15 kΩ. La tensione in ingresso sarà di 4,8 V invece di 5 V, ma Arduino lo vedrà ancora come un livello elevato. Hai anche un po 'di margine nel caso in cui il 12 V dovrebbe essere un po' troppo alto. Anche 18 kΩ ti daranno comunque 4,3 V sufficientemente alti, ma poi devi iniziare a pensare ai 12 V un po 'troppo bassi. La tensione sarà ancora vista come alta? Vorrei rimanere con il 15 kΩ.

modificare
Citi un ambiente automobilistico e quindi hai bisogno di una protezione aggiuntiva. I 12 V dell'auto non sono mai abbastanza 12 V, ma il più delle volte più alti, con picchi di molti volt al di sopra dei 12 V. nominali (attualmente i valori nominali sono più simili a 12,9 V, a 2,15 V per cella.) È possibile posizionare uno zener 5 V diodo in parallelo con R2, e questo dovrebbe interrompere qualsiasi tensione superiore a 5 V. dello zener Ma una tensione di zener varia con la corrente, e alla corrente di ingresso bassa i resistori ti danno si interromperà a tensioni più basse. Una soluzione migliore sarebbe quella di avere un diodo Schottky tra l'ingresso dell'Arduino e l'alimentazione a 5 V. Quindi qualsiasi tensione di ingresso superiore a circa 5,2 V farà condurre il diodo Schottky e la tensione di ingresso sarà limitata a 5,2 V. Per questo è davvero necessario un diodo Schottky, un diodo PN comune ha uno 0.

Meglio
il fotoaccoppiatore di Michael è una buona alternativa, anche se un po 'più costoso. Utilizzerai spesso un fotoaccoppiatore per isolare l'input dall'output, ma puoi anche usarlo per proteggere un input come desideri qui.

inserisci qui la descrizione dell'immagine

Come funziona: la corrente di ingresso illumina il LED a infrarossi interno, che provoca una corrente di uscita attraverso il fototransistor. Il rapporto tra la corrente di ingresso e di uscita è chiamato CTR , per il Rapporto di trasferimento corrente. Il CNY17 ha un CTR minimo del 40%, il che significa che sono necessari 10 mA in ingresso per 4 mA in uscita. Andiamo per l'ingresso da 10 mA. Quindi R1 dovrebbe essere (12 V - 1,5 V) / 10 mA = 1 kΩ. La resistenza di uscita dovrà causare una caduta di 5 V a 4 mA, quindi dovrebbe essere 5 V / 4 mA = 1250 Ω. È meglio avere un valore un po 'più alto, la tensione non scenderà comunque più di 5 V. Un 4.7 kΩ limiterà la corrente a circa 1 mA.

Vcc è la fornitura a 5 V di Arduino, Vout va all'ingresso di Arduino. Si noti che l'ingresso verrà invertito: sarà basso se è presente 12 V, alto quando non lo è. Se non lo si desidera, è possibile scambiare la posizione dell'uscita dell'accoppiatore ottico e la resistenza di pull-up.

modifica 2 In che
modo la soluzione accoppiatore ottico non risolve il problema di sovratensione? Il divisore del resistore è raziometrico: la tensione di uscita è una razione fissa dell'ingresso. Se sono stati calcolati 5 V in uscita a 12 V in entrata, allora 24 V in in entrata forniranno 10 V in uscita. Non OK, quindi il diodo di protezione.

Nel circuito dell'accoppiatore ottico puoi vedere che il lato destro, che si collega al pin di ingresso dell'Arduino, non ha alcuna tensione superiore a 5 V. Se l'accoppiatore ottico è attivo, il transistor assorbirà corrente, nell'esempio sopra ho usato 4 mA. Un 1,2 kΩ provocherà una caduta di tensione di 4,8 V, a causa della legge di Ohm (corrente per resistenza = tensione). Quindi la tensione di uscita sarà 5 V (Vcc) - 4,8 V attraverso la resistenza = 0,2 V, che è un livello basso. Se la corrente fosse inferiore, anche la caduta di tensione sarà inferiore e la tensione di uscita aumenterà. Una corrente da 1 mA, ad esempio, provocherà una caduta di 1,2 V e l'uscita sarà 5 V - 1,2 V = 3,8 V. La corrente minima è zero. Quindi non hai una tensione attraverso il resistore e l'uscita sarà 5 V. Questo è il massimo, lì '

E se la tensione di ingresso diventasse troppo alta? Si collega accidentalmente una batteria da 24 V anziché 12 V. Quindi la corrente del LED raddoppierà, da 10 mA a 20 mA. Il 40% CTR genererà una corrente di uscita di 8 mA anziché i 4 mA calcolati. 8 mA attraverso la resistenza da 1,2 kΩ sarebbe una caduta di 9,6 V. Ma da un'alimentazione a 5 V sarebbe negativo e impossibile; non puoi scendere a meno di 0 V qui. Quindi, mentre il fotoaccoppiatore vorrebbe molto disegnare 8 mA, il resistore lo limiterà. La corrente massima attraverso di essa è quando i 5 V pieni sono attraverso di essa. L'uscita sarà quindi davvero 0 V e l'attuale 5 V / 1,2 kΩ = 4,2 mA. Pertanto, qualsiasi alimentatore a cui si collega la corrente di uscita non sarà superiore a quello e la tensione rimarrà tra 0 V e 5 V. Non è necessaria ulteriore protezione.

Se si prevede una sovratensione, è necessario verificare se il LED dell'accoppiatore ottico è in grado di gestire la corrente aumentata, ma i 20 mA non saranno un problema per la maggior parte degli accoppiatori ottici (spesso sono classificati con un massimo di 50 mA) e, inoltre, è per il doppio tensione di ingresso, che probabilmente non accadrà IRL.


Il sistema è destinato all'uso in auto. L'amperaggio della batteria dell'auto dovrebbe essere abbassato in qualche modo per non far esplodere i componenti? Sono nuovo in questo. Grazie
DW,

@DW Uh-oh, macchina! :-(. Aggiornerò la mia risposta.
Stevenvh

@DW - No, la capacità della batteria dell'auto non ha importanza. La corrente sarà determinata dalla tensione (12 V) e dalla resistenza (25 kohm in totale). Quindi, secondo la legge di Ohm, la corrente sarà di 12 V / 25 kohm = 0,5 mA. Non importa se la batteria è di tipo 40 Ah o 400 Ah; i resistori non permetteranno di più.
Stevenvh,

È fantastico. Grazie per l'aiuto. Solo curioso ma qualcosa del genere funzionerebbe? robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
DW

2
@stevenvh Grazie Steve. Non vedo l'ora di tornare a favore di qualcuno che è nuovo in elettronica una volta che sono fiducioso con esso. Grazie
DW,

15

Un buon modo per isolare il segnale dell'interruttore 12V sarebbe quello di passarlo attraverso un accoppiatore ottico. Il circuito sarebbe configurato in modo simile al seguente.

inserisci qui la descrizione dell'immagine

Vi nel diagramma rappresenta i 12V nel tuo circuito che sono commutati dal tuo interruttore (S1). Selezionare R1 per limitare la corrente attraverso la parte D1 dell'opto coupler a un livello compreso tra i valori nominali del componente selezionato.

Gli accoppiatori Opto non sono i componenti più veloci al mondo, specialmente quelli più economici, ma nel caso di un'azione lenta come un interruttore controllato dall'uomo, la velocità dell'accoppiatore è di scarsa preoccupazione.


15

È inoltre possibile utilizzare un diodo e una resistenza, come segue:

schematico

simula questo circuito - Schema creato usando CircuitLab

Renderei la resistenza abbastanza rigida, altrimenti sprecherai molta energia da questo circuito. La bellezza di questo circuito (rispetto al partitore di tensione) è che non importa se la tensione originale è di 12V, 14V o 15V: sarà 5V (in realtà 5.2-5.3V a seconda del diodo) indipendentemente da la tensione di ingresso.


è abbastanza intelligente, +1 per l'indipendenza dalla tensione!
Florian Castellane,

5
Attento alla sovratensione sul valore massimo assoluto del pin. Ad esempio, scheda tecnica ATmega32u4: tensione su qualsiasi pin rispetto a terra (8): da -0,5 V a VCC + 0,5 V. Se si utilizza un diodo normale, la tensione sarà maggiore di VCC + 0,5 V se si utilizza una resistenza inferiore a 170 kOhm. Penso che i diodi Schottky siano i più sicuri per questo.
cyberponk,

13

Per l'indipendenza dalla tensione, utilizzare un resistore per regolare la corrente e uno Zener per regolare la tensione, in questo modo:

schematico

simula questo circuito - Schema creato usando CircuitLab

Con una resistenza da 30k, questo emetterà 4,99 V e utilizzerà solo circa 234uA a 12Vin.
In questo caso:
R1 consuma 234uA x (12V - 4.99V) = 1.64mW
D1 consuma 234uA x 4.99V = 1.17mW

Assorbimento totale: 2,81mW (quando l'ingresso è alto)


Per qualsiasi cosa visibile userei il divisore LED + resistore in serie per dare un segnale 5V a 12V e mettere il diodo zener in parallelo con la metà inferiore del divisore e il LED per proteggere dalle sovratensioni. In questo modo il LED si illumina quando si dispone di un segnale di ingresso e fornisce un feedback visivo.
Goswin von Brederlow,

@GoswinvonBrederlow puoi per favore estrarre il circuito led / diodo / circuito resistore?
sfrigola il

Nello schema sopra impostato impostare R1 su 770 Ohm e aggiungere un 330Ohm e un LED rosso in parallelo al diodo Zener. Quindi all'ingresso 12V ~ 9mA scorrerà attraverso il LED e otterrai un segnale di uscita 5V. Se la tensione di ingresso aumenta anche se il diodo zener limita il segnale di uscita a 5,1 V e protegge sia l'arduino che il LED.
Goswin von Brederlow,

-2

Un po 'tardi, ma nella mia macchina uso l'LM7805. Funziona alla grande ed è economico.


1
Non economico come 2 resistori o un resistore e un diodo.
Dave Tweed

7
@TonNies Hai sbagliato la domanda. OP non è alla ricerca di una tensione di alimentazione per il suo controller. Si tratta più di condizionamento del segnale.
Ariser

1
Niente di sbagliato nell'utilizzo dell'LM7805 per i segnali di spostamento di livello 12v.
Chugadie

1
@chugadie: Ma un approccio eccessivo molto raro e relativamente "costoso" se tutto ciò che vuoi è abbattere 12V per un pin IO.
Rev1.0
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.