Wie kann ich einen 12-V-Eingang an einem digitalen Arduino-Pin verwenden?


38

Ich erstelle einen Controller für ein 12-V-System mit einem Arduino Uno-Mikrocontroller. Für die Ausgänge verwende ich einen Relaisschirm zum Schalten der 12-V-Komponenten. Ich habe einen 12-V-Kippschalter, der einige 12-V-Komponenten im System einschaltet, und ich möchte ein Auslösesignal dieses Schalters verwenden, um es an einen Arduino-Digitaleingang zu senden. Ich weiß, dass der Arduino maximal 5 V verarbeiten kann. Was wäre der beste Weg, um die vom Schalter kommenden 12 V auf die 5 V für den Eingang zu reduzieren?

EDIT: Das System ist für den Einsatz in einem Auto. Müsste die Stromstärke der Autobatterie irgendwie abgesenkt werden, um die Bauteile nicht zu sprengen?


3
Die Stromstärke des Autos spielt keine Rolle - die Komponenten verbrauchen nur so viel Strom, wie sie benötigen. Die Autobatterie kann Hunderte von Ampere liefern, wie sie für den Anlasser benötigt werden. Dies bedeutet nicht, dass immer Hunderte von Verstärkern fließen und Dinge beschädigen könnten. :)
KyranF

Antworten:


44

Gute Nachrichten! Das wird billig! :-)

Ein einfacher Widerstandsteiler bringt die 12 V auf die 5 V, die ein Arduino verarbeiten kann. Die Ausgangsspannung kann wie folgt berechnet werden

VOUT=R2R1+R2VIN

Widerstandswerte im Bereich von 10 kΩ sind eine gute Wahl. Wenn Ihr R2 10 kΩ beträgt, sollte R1 14 kΩ betragen. Jetzt ist 14 kΩ kein Standardwert, aber 15 kΩ. Ihre Eingangsspannung beträgt 4,8 V anstelle von 5 V, aber das Arduino sieht das immer noch als hohen Pegel an. Sie haben auch ein bisschen Headroom, falls die 12 V etwas zu hoch sein sollten. Sogar 18 kΩ geben Ihnen immer noch ausreichend hohe 4,3 V, aber dann müssen Sie anfangen, über die 12 V ein bisschen zu niedrig nachzudenken. Wird die Spannung immer noch als hoch angesehen? Ich würde bei den 15 kΩ bleiben.

bearbeiten
Sie erwähnen eine Automobilumgebung und benötigen dann zusätzlichen Schutz. Die 12 V des Autos sind nie ganz 12 V, aber die meiste Zeit höher, mit Spitzenwerten von mehreren Volt über den Nennspannungen von 12 V. (Die Nennspannung entspricht eher 12,9 V bei 2,15 V pro Zelle.) Sie können einen 5 V-Zener einsetzen Diode parallel zu R2, und dies sollte jede Spannung abschalten, die höher als 5 V des Zeners ist. Eine Zenerspannung ändert sich jedoch mit dem Strom, und bei dem niedrigen Eingangsstrom, den die Widerstände Ihnen geben, wird sie bei niedrigeren Spannungen abschalten. Eine bessere Lösung wäre eine Schottky-Diode zwischen dem Arduino-Eingang und der 5-V-Versorgung. Bei einer Eingangsspannung von mehr als 5,2 V leitet die Schottky-Diode, und die Eingangsspannung ist auf 5,2 V begrenzt. Hierzu benötigen Sie wirklich eine Schottky-Diode, eine herkömmliche PN-Diode hat eine 0.

Besser
Michaels Optokoppler ist eine gute Alternative, wenn auch etwas teurer. Sie werden häufig einen Optokoppler verwenden, um den Eingang vom Ausgang zu isolieren. Sie können ihn jedoch auch verwenden, um einen Eingang wie hier gewünscht zu schützen.

Bildbeschreibung hier eingeben

So funktioniert es: Der Eingangsstrom leuchtet der internen Infrarot-LED auf, die einen Ausgangsstrom durch den Fototransistor verursacht. Das Verhältnis zwischen Eingangs- und Ausgangsstrom wird als CTR (Current Transfer Ratio) bezeichnet. Der CNY17 hat eine minimale CTR von 40%, was bedeutet, dass Sie einen 10-mA-Eingang für einen 4-mA-Ausgang benötigen. Lassen Sie uns für den 10-mA-Eingang gehen. Dann sollte R1 (12 V - 1,5 V) / 10 mA = 1 kΩ sein. Der Ausgangswiderstand muss bei 4 mA einen 5-V-Abfall verursachen, dann sollte dieser 5 V / 4 mA = 1250 Ω betragen. Es ist besser, einen etwas höheren Wert zu wählen, da die Spannung ohnehin nicht mehr als 5 V abfällt. Mit 4,7 kΩ wird der Strom auf ca. 1 mA begrenzt.

Vcc ist die 5-V-Versorgung des Arduino, Vout geht an den Eingang des Arduino. Beachten Sie, dass der Eingang invertiert wird: Er ist niedrig, wenn 12 V anliegen, und hoch, wenn er nicht anliegt. Wenn Sie das nicht möchten, können Sie die Position des Optokopplerausgangs und des Pull-up-Widerstands vertauschen.

edit 2
Wie löst die Optokopplerlösung das Überspannungsproblem nicht? Der Widerstandsteiler ist ratiometrisch: Die Ausgangsspannung ist ein festes Verhältnis zum Eingang. Wenn Sie für 5 V out bei 12 V in gerechnet haben, ergibt 24 V in 10 V out. Nicht OK, daher die Schutzdiode.

In der Optokopplerschaltung sehen Sie, dass die rechte Seite, die mit dem Eingangspin des Arduino verbunden ist, überhaupt keine höhere Spannung als 5 V aufweist. Wenn der Optokoppler eingeschaltet ist, zieht der Transistor Strom. Im obigen Beispiel habe ich 4 mA verwendet. 1,2 kΩ verursachen einen Spannungsabfall von 4,8 V aufgrund des Ohmschen Gesetzes (Strom mal Widerstand = Spannung). Dann beträgt die Ausgangsspannung 5 V (Vcc) - 4,8 V über dem Widerstand = 0,2 V, das ist ein niedriger Pegel. Wenn der Strom niedriger wäre, wäre auch der Spannungsabfall geringer und die Ausgangsspannung steigt an. Ein Strom von 1 mA verursacht beispielsweise einen Abfall von 1,2 V, und der Ausgang beträgt 5 V - 1,2 V = 3,8 V. Der Mindeststrom ist Null. Dann liegt am Widerstand keine Spannung an und der Ausgang ist 5 V. Das ist das Maximum.

Was ist, wenn die Eingangsspannung zu hoch wird? Sie haben versehentlich eine 24-V-Batterie anstelle von 12 V angeschlossen. Dann verdoppelt sich der LED-Strom von 10 mA auf 20 mA. Die 40% CTR verursacht einen Ausgangsstrom von 8 mA anstelle der berechneten 4 mA. 8 mA über den 1,2-kΩ-Widerstand wären ein Abfall von 9,6 V. Aber bei einer 5-V-Versorgung wäre das negativ, und das ist unmöglich. Sie können hier nicht niedriger als 0 V gehen. Während der Optokoppler sehr gerne 8 mA ziehen würde, wird der Widerstand dies begrenzen. Der maximale Strom durch ihn ist, wenn die vollen 5 V daran anliegen. Der Ausgang ist dann wirklich 0 V und der Strom 5 V / 1,2 kΩ = 4,2 mA. Unabhängig davon, welches Netzteil Sie anschließen, wird der Ausgangsstrom nicht höher und die Spannung bleibt zwischen 0 V und 5 V. Es ist kein weiterer Schutz erforderlich.

Wenn Sie Überspannung erwartet werden Sie überprüfen , ob die LED des Optokopplers verarbeiten kann der erhöhte Strom, aber die 20 mA wird kein Problem für die meisten Optokoppler sein (sie sind oft bei 50 mA maximal bewertet), und außerdem, dass die für Doppel Eingangsspannung, die wahrscheinlich nicht IRL passieren wird.


Das System ist für die Verwendung in einem Auto vorgesehen. Müsste die Stromstärke der Autobatterie irgendwie abgesenkt werden, um die Bauteile nicht in die Luft zu jagen? Ich bin neu in diesem Bereich. Danke
DW

@ DW Uh-oh, Auto! :-(. Ich werde meine Antwort aktualisieren.
Stevenvh

@DW - Nein, die Kapazität der Autobatterie spielt keine Rolle. Der Strom wird durch die Spannung (12 V) und den Widerstand (insgesamt 25 kOhm) bestimmt. Nach dem Ohmschen Gesetz beträgt der Strom dann 12 V / 25 kOhm = 0,5 mA. Es spielt keine Rolle, ob die Batterie vom Typ 40 Ah oder 400 Ah ist. Die Widerstände lassen nicht mehr zu.
Stevenvh

Das ist großartig. Danke für Ihre Hilfe. Nur neugierig, aber würde so etwas funktionieren? robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
DW

2
@ stevenvh Danke Steve. Ich freue mich darauf, wieder jemandem einen Gefallen zu tun, der neu in der Elektronik ist, sobald ich davon überzeugt bin. Danke
DW

15

Eine gute Möglichkeit, das 12-V-Schaltsignal zu isolieren, besteht darin, es durch einen Optokoppler zu leiten. Die Schaltung würde ähnlich wie folgt konfiguriert sein.

Bildbeschreibung hier eingeben

Vi im Diagramm stellt die 12 V in Ihrem Stromkreis dar, die von Ihrem Schalter (S1) geschaltet werden. Wählen Sie R1, um den Strom durch den D1-Teil des Optokopplers auf einen Pegel zu begrenzen, der innerhalb der Nennwerte der von Ihnen ausgewählten Komponente liegt.

Optokoppler sind nicht die schnellsten Komponenten der Welt, insbesondere die billigsten, aber für den Fall einer langsamen Aktion wie bei einem vom Menschen gesteuerten Schalter ist die Geschwindigkeit des Kopplers von geringer Bedeutung.


15

Sie können auch eine Diode und einen Widerstand wie folgt verwenden:

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab

Ich würde den Widerstand etwas ziemlich steif machen, sonst verbrauchen Sie viel Strom von dieser Schaltung. Das Schöne an dieser Schaltung (im Vergleich zum Spannungsteiler) ist, dass es egal ist, ob Ihre ursprüngliche Spannung 12 V, 14 V oder 15 V beträgt: Sie beträgt unabhängig von der Diode 5 V (tatsächlich 5,2 bis 5,3 V) die Eingangsspannung.


Das ist ziemlich clever, +1 für Spannungsunabhängigkeit!
Florian Castellane

5
Vorsicht mit der Überspannung am Pin absoluter Maximalwert. Zum Beispiel: ATmega32u4-Datenblatt: Spannung an einem beliebigen Pin in Bezug auf Masse (8): -0,5 V bis VCC + 0,5 V. Bei Verwendung einer normalen Diode ist die Spannung höher als VCC + 0,5 V, wenn ein Widerstand von weniger als 170 kOhm verwendet wird. Ich denke, Schottky-Dioden sind dafür am sichersten.
Cyberponk

13

Verwenden Sie zur Spannungsunabhängigkeit einen Widerstand, um den Strom zu regeln, und einen Zener, um die Spannung zu regeln:

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab

Bei einem 30k-Widerstand werden 4,99 V ausgegeben und nur etwa 234 uA bei 12 V in verwendet.
In diesem Fall
verbraucht R1 234 uA x (12 V - 4,99 V) = 1,64 mW.
D1 verbraucht 234 uA x 4,99 V = 1,17 mW

Gesamtleistungsaufnahme: 2,81 mW (bei hohem Eingang)


Für alles Sichtbare würde ich LED + Widerstandsteiler in Reihe verwenden, um ein 5-V-Signal bei 12 V zu geben, und die Zenerdiode parallel zur unteren Hälfte des Teilers und der LED schalten, um gegen Überspannung zu schützen. Auf diese Weise leuchtet die LED auf, wenn Sie ein Eingangssignal haben und gibt eine visuelle Rückmeldung.
Goswin von Brederlow

@GoswinvonBrederlow kannst du bitte den Stromkreis LED / Diode / Widerstand herausziehen?
brutzeln

Stellen Sie im obigen Schema R1 auf 770 Ohm ein und fügen Sie eine 330 Ohm und eine rote LED parallel zur Zenerdiode hinzu. Bei 12V fließt dann ~ 9mA durch die LED und Sie erhalten ein 5V Ausgangssignal. Wenn die Eingangsspannung über die Zenerdiode ansteigt, wird das Ausgangssignal auf 5,1 V begrenzt und sowohl das Arduino als auch die LED geschützt.
Goswin von Brederlow

-2

Ein bisschen spät, aber in meinem Auto benutze ich den LM7805. Funktioniert super und ist günstig.


1
Nicht so billig wie 2 Widerstände oder ein Widerstand und eine Diode.
Dave Tweed

7
@TonNies Du hast die Frage falsch gestellt. OP ist nicht auf der Suche nach einer Versorgungsspannung für seine Steuerung. Es geht mehr um Signalkonditionierung.
Ariser

1
Mit dem LM7805 zur Pegelverschiebung von 12-V-Signalen ist nichts falsch.
Chugadie

1
@chugadie: Aber ein sehr ungewöhnlicher und relativ "teurer" Overkill-Ansatz, wenn Sie nur 12 V für einen IO-Pin senken möchten.
Rev1.0
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.