Fråga:
Hur kan jag använda en 12 V-ingång på en digital Arduino-stift?
D.W.
2012-10-12 18:53:26 UTC
view on stackexchange narkive permalink

Jag skapar en styrenhet för ett 12 V-system med en Arduino Uno-mikrostyrenhet. För utgångarna använder jag en reläskärm för att växla 12 V-komponenterna. Jag har en 12 V vippströmbrytare som slår på några 12 V-komponenter i systemet och jag vill använda en triggersignal från samma switch för att skicka till en Arduino digital ingång. Jag vet att Arduino bara kan hantera 5 V max. Vad skulle vara det bästa sättet att trappa ner 12 V som kommer från omkopplaren till 5 V för ingången?

EDIT: Systemet är för användning i en bil. Skulle bilens batteri behöva sänkas på något sätt för att inte spränga komponenterna?

bilens strömstyrka är irrelevant - komponenterna använder bara så mycket ström som de behöver.Bilbatteriet kan leverera hundratals förstärkare, som den som behövs för startmotorn.Detta betyder inte att det alltid flyter hundratals förstärkare och kan skada saker.:)
Fem svar:
stevenvh
2012-10-12 19:23:41 UTC
view on stackexchange narkive permalink

Goda nyheter! Detta kommer att bli billigt! :-)

En enkel motståndsdelare tar ner 12 V till 5 V som en Arduino kan smälta. Utgångsspänningen kan beräknas som

\ $ V_ {OUT} = \ dfrac {R2} {R1 + R2} V_ {IN} \ $

Motståndsvärden inom området 10 kΩ är ett bra val. Om din R2 är 10 kΩ ska R1 vara 14 kΩ. Nu är 14 kΩ inte ett standardvärde, men 15 kΩ är det. Din ingångsspänning kommer att vara 4,8 V istället för 5 V, men Arduino ser det fortfarande som en hög nivå. Du har också lite utrymme om 12 V skulle vara lite för hög. Även 18 kΩ ger dig fortfarande tillräckligt höga 4,3 V, men då måste du börja tänka på 12 V lite för lågt. Kommer spänningen fortfarande att ses som hög? Jag skulle hålla mig till 15 kΩ.

redigera
Du nämner en bilmiljö och sedan behöver du lite extra skydd. Bilens 12 V är aldrig riktigt 12 V, men oftast högre, med toppar flera volt över nominella 12 V. (Egentligen är nominell mer som 12,9 V, med 2,15 V per cell.) Du kan placera en 5 V zener dioden parallellt med R2, och detta bör avbryta alla spänningar som är högre än zenerns 5 V. Men en zenerspänning varierar med strömmen, och vid den låga ingångsströmmen ger motstånden dig att den kommer att brytas av vid lägre spänningar. En bättre lösning skulle vara att ha en Schottky-diod mellan Arduinos ingång och 5 V-matningen. Då kommer alla ingångsspänningar som är högre än cirka 5,2 V att leda Schottky-dioden, och ingångsspänningen kommer att vara begränsad till 5,2 V. Du behöver verkligen en Schottky-diod för detta, en vanlig PN-diod har ett 0,7 V-fall i stället för Schottky's 0,2 V och sedan kan den maximala ingångsspänningen på 5,7 V vara för hög.

Bättre
Michaels optokopplare är ett bra alternativ, men lite dyrare. Du använder ofta en optokopplare för att isolera ingång från utdata, men du kan också använda den för att skydda en ingång som du vill ha här.

enter image description here

Hur det fungerar: ingångsströmmen tänder den interna infraröda lysdioden som orsakar en utström genom fototransistorn. Förhållandet mellan ingångs- och utgångsström kallas CTR för nuvarande överföringsförhållande. CNY17 har en lägsta CTR på 40%, vilket innebär att du behöver 10 mA-ingång för 4 mA-utgång. Låt oss gå till 10 mA-ingången. Då bör R1 vara (12 V - 1,5 V) / 10 mA = 1 kΩ. Utgångsmotståndet måste orsaka ett 5 V-fall vid 4 mA, då ska det vara 5 V / 4 mA = 1250 Ω. Det är bättre att ha lite högre värde, spänningen kommer ändå inte att sjunka mer än 5 V. En 4,7 kΩ begränsar strömmen till cirka 1 mA.

Vcc är Arduinos 5 V-försörjning, Vout går till Arduinos ingång. Observera att ingången kommer att vändas in: den är låg om 12 V är närvarande, hög när den inte är. Om du inte vill ha det kan du byta position för optokopplarens utgång och uppdragsmotstånd.

redigera 2
Hur fungerar inte optokopplaren lösa överspänningsfrågan? Motståndsdelaren är ratiometrisk: utspänningen är en fast ration av ingången. Om du har beräknat för 5 V ut vid 12 V in kommer 24 V in att ge 10 V ut. Inte OK, därav skyddsdioden.

I optokopplarkretsen kan du se att höger sida, som ansluter till Arduinos ingångsstift inte har någon spänning som är högre än 5 V alls. Om optokopplaren är på så drar transistorn ström, jag använde 4 mA i exemplet ovan. En 1,2 kΩ kommer att orsaka ett 4,8 V spänningsfall på grund av Ohms lag (strömtider motstånd = spänning). Då kommer utspänningen att vara 5 V (Vcc) - 4,8 V över motståndet = 0,2 V, det är en låg nivå. Om strömmen skulle vara lägre blir spänningsfallet också mindre och utspänningen stiger. En 1 mA ström, till exempel, kommer att orsaka en nedgång på 1,2 V och utgången blir 5 V - 1,2 V = 3,8 V. Minsta strömmen är noll. Då har du ingen spänning över motståndet, och utgången blir 5 V. Det är maximalt, det finns inget där som ger dig en högre spänning.

Vad händer om ingångsspänningen skulle bli för hög? Du ansluter av misstag ett 24 V-batteri istället för 12 V. Därefter fördubblas LED-strömmen och bildar 10 mA till 20 mA. 40% CTR kommer att orsaka 8 mA utström istället för den beräknade 4 mA. 8 mA genom 1,2 kΩ motståndet skulle vara ett fall på 9,6 V. Men från en 5 V-matning skulle det vara negativt, och det är omöjligt; du kan inte gå lägre än 0 V här. Så medan optokopplaren mycket gärna vill dra 8 mA, kommer motståndet att begränsa det. Den maximala strömmen genom den är när hela 5 V är över den. Utgången blir då verkligen 0 V och strömmen 5 V / 1,2 kΩ = 4,2 mA. Oavsett vilken strömförsörjning du ansluter kommer utströmmen inte att gå högre än så, och spänningen kommer att stanna mellan 0 V och 5 V. Inget ytterligare skydd behövs.

Om du förväntar dig överspänning måste du kontrollera om optokopplarens lysdiod klarar av den ökade strömmen, men 20 mA kommer inte att vara ett problem för de flesta optokopplare (de är ofta uppskattade till maximalt 50 mA), och dessutom är det för dubbel ingångsspänning , vilket förmodligen inte kommer att hända IRL.

Systemet är avsett för användning i en bil. Skulle bilbatteriets strömstyrka behöva sänkas på något sätt för att inte spränga komponenterna? Jag är ny på det här. Tack
@D.W. Uh-oh, bil! :-(. Jag uppdaterar mitt svar.
@D.W. - Nej, bilbatteriets kapacitet spelar ingen roll. Strömmen bestäms av spänningen (12 V) och motståndet (totalt 25 kohm). Enligt ** Ohms lag ** kommer strömmen då att vara 12 V / 25 kohm = 0,5 mA. Det spelar ingen roll om batteriet är en 40 Ah-typ eller en 400 Ah-typ; motstånden tillåter inte mer.
Toppen. Tack för hjälpen. Bara nyfiken men skulle något liknande fungera? http://www.robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
@D.W .: med optokopplaren kan du hålla batteriet åtskilt från Arduino, men om det drivs från batteriet kommer båda jordarna att anslutas.
@D.W. - Ja, verkar bra. Samma produkt finns på [Sparkfun-webbplatsen] (https://www.sparkfun.com/products/9118), där det finns mer information, som en länk till optokopplarens datablad. Du får två kanaler, du kan använda den andra för att känna av en annan växlad spänning om det behövs.
@D.W. - Varsågod. Jag tänkte bara: måste jag lägga till mitt svar varför optokopplaren är bra med en högre spänning, där avdelaren behövde extra skydd, eller är det klart? Fråga bara om du behöver extra information. (Fråga bara inte pengar ;-))
@stevenvh Kanske om du inte bryr dig eftersom jag är helt ny i denna fantastiska värld av elektronik. Jag är en mekanisk teknolog och vi rörde knappast någonting med el på college än mindre elektronik. Tack
@stevenvh Också bara en snabb fråga: Arduino Uno-manualen säger att den rekommenderade ingångsspänningen är 7-12V och gränserna är 6-20V. Betyder det att jag kan köra den direkt från bilbatteriet? Tack
@D.W. - En bils 12 V kan vara extremt bullrig och kan ha höga toppar på den. För att skydda Arduinos spänningsregulator mot dessa kan du placera en [TVS] (http://en.wikipedia.org/wiki/Transient_voltage_suppression_diode) (Transient Voltage Suppressor diode) över Arduinos strömingång.
@stevenvh Tack Steve. Jag ser fram emot att återvända till någon som är ny inom elektronik när jag är säker på det. Tack
En annan anmärkning: många 5V-enheters logiska HÖGA ingångsvärde är något mycket lägre än 5V - den PIC jag använder kräver bara 2V för att läsa en logik 1. Så att använda en enkel spänningsdelare med, säg, 4.7K och 1.8K motståndkommer att sjunka 12V till 3,3V.Om du får en spänning på upp till 18V kommer ingången till din stift fortfarande att vara strax under 5V.
@stevenvh tack för det omfattande svaret.Jag undrade om jag kunde gå med en [följande] (http://imgur.com/v1LdKym) krets om jag vill ha en HÖG utgång för HÖG ingång (12V också här men inte en bil :)) X1 ansluter till GNDnär du trycker på knappen är Y1 till Arduino-stift.
Lol, elektronik .. gör programmering riktigt enkel!
Eftersom du har sammanställt alla val här, [finns det en åsikt] (https://forum.arduino.cc/index.php?topic=153143.0#msg_1148863), att du bara kan begränsa strömmen och låta AVR: s klämskydddioden håller spänningen i schack.Det föreslås att ett enkelt motstånd på 47k - 100k i serie ska göra det.Verkar som ditt schottky-alternativ, men utan externt schottky.Eller inte?Skulle du betrakta detta som ett giltigt alternativ?
också ditt eget inlägg här :) https://electronics.stackexchange.com/a/35817/180863 så jag antar att det svarar på frågan.
Michael Karas
2012-10-12 18:59:53 UTC
view on stackexchange narkive permalink

Ett bra sätt att isolera 12V-omkopplarsignalen är att skicka den genom en optokopplare. Kretsen skulle konfigureras på samma sätt som följande.

enter image description here

Vi i diagrammet representerar 12V i din krets som byts av din switch (S1). Välj R1 för att begränsa strömmen genom D1-delen av optokopplaren till en nivå som ligger inom klassificeringen för den komponent som du väljer.

Optokopplare är inte de snabbaste komponenterna i världen, särskilt de billigaste, men för en långsam åtgärd som en mänsklig kontrollerad brytare är kopplingens hastighet lite bekymmer.

angelatlarge
2013-03-10 14:01:40 UTC
view on stackexchange narkive permalink

Du kan också använda en diod och ett motstånd enligt följande:

schematic

simulera denna krets - Schematisk skapad med CircuitLab

Jag skulle göra motståndet något ganska styvt, annars sjunker du mycket ström från denna krets. Skönheten i denna krets (i jämförelse med spänningsdelaren) är att den inte bryr sig om din originalspänning är 12V, 14V eller 15V: den kommer att vara 5V (faktiskt 5,2-5,3V beroende på dioden) oavsett ingångsspänningen.

det är ganska smart, +1 för spänningsoberoende!
Var försiktig med överspänningen på stiftets absoluta maximala betyg.Till exempel ATmega32u4 datablad: Spänning på valfri stift med avseende på jord (8): -0,5V till VCC + 0,5V.Om du använder en vanlig diod blir spänningen större än VCC + 0,5 V om du använder något mindre än 170 kOhm motstånd.Jag tror att Schottky-dioder är de säkraste för detta.
cyberponk
2017-02-06 11:13:26 UTC
view on stackexchange narkive permalink

För spänningsoberoende, använd ett motstånd för att reglera strömmen och en Zener för att reglera spänningen, så här:

schematic

simulera denna krets - Schematisk skapad med CircuitLab

Med ett 30k-motstånd matar detta ut 4,99 V och använder endast cirka 234uA @ 12Vin.
I det här fallet:
R1 förbrukar 234uA x (12V - 4,99V) = 1,64mW
D1 förbrukar 234uA x 4,99 V = 1,17 mW

Total energiförbrukning: 2,81mW (när ingången är hög)

För allt synligt skulle jag använda LED + motståndsdelare i serie för att ge en 5V signal vid 12V och sätta zenerdioden parallellt med den nedre halvan av delaren och LED för att skydda mot överspänning.På så sätt tänds lysdioden när du har en insignal och ger visuell återkoppling.
@GoswinvonBrederlow kan du snälla dra ut kretsled / diod / motståndskrets?
I ovanstående schematiska inställning R1 till 770 Ohm och lägg till en 330Ohm och en röd lysdiod parallellt med Zener-dioden.Då kommer 12V-ingången ~ 9mA att strömma genom lysdioden och du får en 5V-utsignal.Om ingångsspänningen ökar men zenerdioden begränsar utsignalen till 5.1V och skyddar både arduino och LED.
Ton Nies
2015-12-30 21:21:35 UTC
view on stackexchange narkive permalink

Lite sent men i min bil använder jag LM7805. Fungerar bra och är billigt.

Inte lika billigt som två motstånd eller ett motstånd och en diod.
@TonNies Du har fel frågan.OP letar inte efter en matningsspänning för sin styrenhet.Det handlar mer om signalkonditionering.
Inget fel med att använda LM7805 för nivåförskjutning av 12v-signaler.
@chugadie: Men ett mycket ovanligt och relativt "dyrt" överdrivet tillvägagångssätt om allt du vill är att ta ner 12 V för en IO-stift.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...