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

Ich erstelle einen Controller für ein 12-V-System mit einem Arduino Uno-Mikrocrontroller. Für die Ausgänge verwende ich einen Relaisschirm, um die 12-V-Komponenten zu schalten. Ich habe einen 12-V-Kippschalter, der einige 12-V-Komponenten im System einschaltet, und ich möchte ein Triggersignal von demselben Schalter verwenden, um es an einen digitalen Arduino-Eingang zu senden. Ich weiß, dass der Arduino nur maximal 5 V verarbeiten kann. Was wäre der beste Weg, um die 12 V, die vom Schalter kommen, auf 5 V für den Eingang zu verringern?

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

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 beispielsweise für den Anlasser benötigt werden. Dies bedeutet nicht, dass immer Hunderte von Ampere fließen und Dinge beschädigen könnten. :)

Antworten (5)

Gute Nachrichten! Das wird billig! :-)

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

v Ö U T = R 2 R 1 + R 2 v ich N

Widerstandswerte im Bereich von 10 kΩ sind eine gute Wahl. Wenn Ihr R2 10 kΩ beträgt, sollte R1 14 kΩ betragen. Nun ist 14 kΩ kein Standardwert, aber 15 kΩ schon. Ihre Eingangsspannung beträgt 4,8 V anstelle von 5 V, aber der Arduino sieht dies immer noch als hohen Pegel. Etwas Headroom hat man auch, falls die 12 V mal etwas zu hoch sein sollten. Selbst 18 kΩ liefern immer noch ausreichend hohe 4,3 V, aber dann müssen Sie anfangen, über die 12 V etwas 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 dann benötigen Sie zusätzlichen Schutz. Die 12 V des Autos sind nie ganz 12 V, aber meistens höher, mit Spitzen, die mehrere Volt über den nominalen 12 V liegen. (Eigentlich sind es eher 12,9 V bei 2,15 V pro Zelle.) Sie können einen 5-V-Zener platzieren Diode parallel zu R2, und dies sollte jede Spannung abschalten, die höher als die 5 V des Zeners ist. Eine Zenerspannung variiert jedoch mit dem Strom, und bei dem niedrigen Eingangsstrom, den die Widerstände Ihnen geben, wird sie bei niedrigeren Spannungen abgeschaltet. Eine bessere Lösung wäre eine Schottky-Diode zwischen dem Eingang des Arduino und der 5-V-Versorgung. Dann führt jede Eingangsspannung über etwa 5,2 V dazu, dass die Schottky-Diode leitet, und die Eingangsspannung wird auf 5,2 V begrenzt. Dafür 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, aber Sie können ihn auch verwenden, um einen Eingang wie hier zu schützen.

Geben Sie hier die Bildbeschreibung ein

Funktionsweise: Der Eingangsstrom leuchtet die interne Infrarot-LED auf, was einen Ausgangsstrom durch den Fototransistor bewirkt. 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. Kommen wir zum 10-mA-Eingang. Dann sollte R1 (12 V - 1,5 V) / 10 mA = 1 kΩ sein. Der Ausgangswiderstand muss bei 4 mA einen Abfall von 5 V verursachen, dann sollten das 5 V / 4 mA = 1250 Ω sein. Es ist besser, einen etwas höheren Wert zu haben, die Spannung wird sowieso nicht mehr als 5 V abfallen. Ein 4,7 kΩ begrenzt den Strom auf etwa 1 mA.

Vcc ist die 5-V-Versorgung des Arduino, Vout geht an den Eingang des Arduino. Beachten Sie, dass der Eingang umgekehrt wird: Er ist niedrig, wenn 12 V vorhanden sind, hoch, wenn dies nicht der Fall ist. Wenn Sie das nicht möchten, können Sie die Position des Ausgangs des Optokopplers und des Pull-up-Widerstands vertauschen.

Bearbeiten 2
Wie löst die Optokoppler-Lösung das Überspannungsproblem nicht? Der Widerstandsteiler ist ratiometrisch: Die Ausgangsspannung ist ein festes Verhältnis des Eingangs. Wenn Sie 5 V Ausgang bei 12 V Eingang berechnet haben, ergeben 24 V Eingang 10 V Ausgang. Nicht OK, daher die Schutzdiode.

In der Optokopplerschaltung können Sie sehen, dass die rechte Seite, die mit dem Eingangspin des Arduino verbunden ist, überhaupt keine Spannung höher als 5 V hat. Wenn der Optokoppler eingeschaltet ist, zieht der Transistor Strom, ich habe im obigen Beispiel 4 mA verwendet. Ein 1,2 kΩ verursacht aufgrund des Ohmschen Gesetzes (Strom mal Widerstand = Spannung) einen Spannungsabfall von 4,8 V. 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 kleiner und die Ausgangsspannung würde steigen. Ein Strom von 1 mA beispielsweise verursacht einen Abfall von 1,2 V, und der Ausgang beträgt 5 V - 1,2 V = 3,8 V. Der Mindeststrom ist Null. Dann haben Sie keine Spannung über dem Widerstand und der Ausgang beträgt 5 V. Das ist das Maximum.

Was ist, wenn die Eingangsspannung zu hoch wird? Sie schließen versehentlich eine 24-V-Batterie statt 12 V an. Dann verdoppelt sich der LED-Strom, bildet 10 mA auf 20 mA. Die CTR von 40 % verursacht einen Ausgangsstrom von 8 mA anstelle der berechneten 4 mA. 8 mA durch 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 unter 0 V gehen. Während der Optokoppler sehr gerne 8 mA ziehen würde, begrenzt der Widerstand dies. Der maximale Strom fließt, wenn die vollen 5 V an ihm 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 als dieser Wert, und die Spannung bleibt zwischen 0 V und 5 V. Kein weiterer Schutz erforderlich.

Wenn Sie eine Überspannung erwarten, müssen Sie prüfen, ob die LED des Optokopplers den erhöhten Strom verarbeiten kann, aber die 20 mA sind für die meisten Optokoppler kein Problem (sie sind oft auf maximal 50 mA ausgelegt), und außerdem ist das doppelt so hoch Eingangsspannung, was IRL wahrscheinlich nicht passieren wird.

Das System ist für den Einsatz in einem Auto vorgesehen. Müsste die Stromstärke der Autobatterie irgendwie gesenkt werden, um die Komponenten nicht zu sprengen? Ich bin neu darin. Danke
@DW Uh-oh, Auto! :-(. Ich werde meine Antwort aktualisieren.
@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. Dann beträgt der Strom nach dem Ohmschen Gesetz 12 V / 25 kOhm = 0,5 mA. Es spielt keine Rolle, ob die Batterie vom Typ 40 Ah oder vom Typ 400 Ah ist; Mehr lassen die Widerstände nicht zu.
Das ist klasse. Danke für Ihre Hilfe. Nur aus Interesse, aber würde so etwas funktionieren? robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
@DW: Mit dem Optokoppler können Sie die Batterie vom Arduino getrennt halten, aber wenn sie von der Batterie gespeist wird, werden beide Erdungen verbunden.
@DW - Ja, scheint in Ordnung zu sein. Das gleiche Produkt finden Sie auf der Sparkfun-Website , wo es weitere Informationen gibt, wie z. B. einen Link zum Datenblatt des Optokopplers. Sie erhalten 2 Kanäle, Sie können den anderen verwenden, um bei Bedarf eine andere Schaltspannung zu erfassen.
@DW - Gern geschehen. Ich habe nur nachgedacht: Muss ich meiner Antwort hinzufügen, warum der Optokoppler mit einer höheren Spannung in Ordnung ist, wo der Teiler zusätzlichen Schutz benötigt, oder ist das klar? Fragen Sie einfach, wenn Sie zusätzliche Informationen benötigen. (Nur kein Geld verlangen ;-))
@stevenvh Vielleicht, wenn es dir nichts ausmacht, da ich völlig neu in dieser erstaunlichen Welt der Elektronik bin. Ich bin Maschinenbautechnologe und wir haben im College kaum etwas mit Elektrik berührt, geschweige denn mit Elektronik. Danke
@stevenvh Auch nur eine kurze Frage: Das Arduino Uno-Handbuch besagt, dass die empfohlene Eingangsspannung 7-12 V beträgt und die Grenzen 6-20 V betragen. Bedeutet das, dass ich es direkt über die Autobatterie betreiben kann? Danke
@DW - Die 12 V eines Autos können extrem laut sein und hohe Spitzen aufweisen. Um den Spannungsregler des Arduino vor diesen zu schützen, können Sie eine TVS (Transient Voltage Suppressor Diode) über den Stromeingang des Arduino legen.
@stevenvh Danke Steve. Ich freue mich darauf, wieder jemanden zu bevorzugen, der neu in der Elektronik ist, sobald ich davon überzeugt bin. Danke
Ein weiterer Hinweis: Der logische HIGH-Eingangswert vieler 5-V-Geräte ist etwas viel niedriger als 5 V - der von mir verwendete PIC benötigt nur 2 V, um eine logische 1 zu lesen. Verwenden Sie also einen einfachen Spannungsteiler mit beispielsweise 4,7 K- und 1,8 K-Widerständen wird 12 V auf 3,3 V fallen. Wenn Sie zufällig Spannungen von bis zu 18 V erhalten, liegt der Eingang zu Ihrem Pin immer noch knapp unter 5 V.
@stevenvh danke für diese ausführliche Antwort. Ich habe mich gefragt, ob ich mit einer folgenden Schaltung gehen könnte, wenn ich einen HIGH-Ausgang für HIGH-Eingang haben möchte (hier auch 12 V, aber kein Auto :)) Der X1 wird mit GND verbunden, wenn die Taste gedrückt wird, Y1 ist mit dem Arduino-Pin verbunden.
Lol, Elektronik ... macht das Programmieren wirklich einfach!
Da Sie hier alle Möglichkeiten aufgerundet haben, gibt es die Meinung , dass Sie den Strom nur begrenzen und die Klemmschutzdiode des AVR die Spannung in Schach halten können. Es wird vorgeschlagen, dass ein einfacher Widerstand von 47k - 100k in Reihe dies tun sollte. Scheint Ihre Schottky-Option zu sein, aber ohne das externe Schottky. Oder nicht? Würden Sie dies für eine gültige Option halten?
auch dein eigener Beitrag hier :) electronic.stackexchange.com/a/35817/180863 , also denke ich, das beantwortet die Frage.

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 werden.

Geben Sie hier die Bildbeschreibung ein

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 Wert zu begrenzen, der innerhalb der Nennwerte der ausgewählten Komponente liegt.

Optokoppler sind nicht die schnellsten Komponenten der Welt, insbesondere nicht die billigsten, aber im Fall einer langsamen Aktion wie einem von Menschen gesteuerten Schalter spielt die Geschwindigkeit des Kopplers keine Rolle.

Verwenden Sie für Spannungsunabhängigkeit einen Widerstand, um den Strom zu regulieren, und einen Zener, um die Spannung zu regulieren, wie folgt:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Mit einem 30k-Widerstand gibt dies 4,99 V aus und verbraucht nur etwa 234 uA bei 12 Vin.
In diesem Fall:
R1 verbraucht 234 µA x (12 V - 4,99 V) = 1,64 mW
D1 verbraucht 234 µA x 4,99 V = 1,17 mW

Gesamtstromverbrauch: 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 sie vor Überspannung zu schützen. Auf diese Weise leuchtet die LED auf, wenn Sie ein Eingangssignal haben, und gibt visuelles Feedback.
@GoswinvonBrederlow kannst du bitte die LED-/Dioden-/Widerstandsschaltung herausziehen?
Stellen Sie im obigen Schema R1 auf 770 Ohm ein und fügen Sie parallel zur Zenerdiode eine 330 Ohm und eine rote LED hinzu. Dann fließen bei 12V Eingang ~9mA durch die LED und Sie erhalten ein 5V Ausgangssignal. Wenn die Eingangsspannung ansteigt, begrenzt die Zenerdiode das Ausgangssignal auf 5,1 V und schützt sowohl das Arduino als auch die LED.

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

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Ich würde den Widerstand ziemlich steif machen, sonst werden Sie viel Strom aus dieser Schaltung ziehen. 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 davon 5 V (eigentlich 5,2-5,3 V, je nach Diode). die Eingangsspannung.

das ist ziemlich schlau, +1 für Spannungsunabhängigkeit!
Seien Sie vorsichtig mit der Überspannung am absoluten Höchstwert des Pins. Zum Beispiel ATmega32u4-Datenblatt: Spannung an jedem Pin in Bezug auf Masse (8): -0,5 V bis VCC + 0,5 V. Wenn Sie eine normale Diode verwenden, ist die Spannung größer als VCC + 0,5 V, wenn Sie einen Widerstand von weniger als 170 kOhm verwenden. Ich denke, Schottky-Dioden sind dafür am sichersten.
Sie sollten dies nur mit einer Schottky-Diode tun. Andernfalls wird die High-Side-ESD-Diode im uC möglicherweise vor D1 leitend. Sie sind nicht für den Dauerbetrieb gedacht.

Etwas spät, aber in meinem Auto verwende ich den LM7805. Funktioniert super und ist günstig.

Nicht so billig wie 2 Widerstände oder ein Widerstand und eine Diode.
@TonNies Du hast die Frage falsch gestellt. OP ist nicht auf der Suche nach einer Versorgungsspannung für seinen Controller. Es geht mehr um die Signalkonditionierung.
Es ist nichts falsch daran, LM7805 für die Pegelverschiebung von 12-V-Signalen zu verwenden.
@chugadie: Aber ein sehr ungewöhnlicher und relativ "teurer" Overkill-Ansatz, wenn Sie nur 12 V für einen IO-Pin senken möchten.