ฉันจะใช้อินพุต 12 V บนหมุด Arduino ได้อย่างไร


38

ฉันกำลังสร้างตัวควบคุมสำหรับระบบ 12 V โดยใช้ไมโครคอนโทรลเลอร์ Arduino Uno สำหรับผลลัพธ์ฉันใช้รีเลย์ป้องกันเพื่อสลับส่วนประกอบ 12 V ฉันมีสวิตช์สลับ 12 V ที่เปิดใช้งานส่วนประกอบ 12 V ในระบบและฉันต้องการใช้สัญญาณทริกเกอร์จากสวิตช์เดียวกันนี้เพื่อส่งไปยังอินพุตดิจิตอล Arduino ฉันรู้ว่า Arduino สามารถจัดการได้สูงสุด 5 V เท่านั้น อะไรจะเป็นวิธีที่ดีที่สุดในการลดขนาด 12 V ลงจากสวิตช์เป็น 5 V สำหรับอินพุต?

แก้ไข: ระบบมีไว้สำหรับใช้ในรถยนต์ จำนวนแอมแปร์ของแบตเตอรี่รถยนต์จะต้องลดลงอย่างใดเพื่อไม่ให้ระเบิดส่วนประกอบหรือไม่?


3
แอมแปร์ของรถไม่เกี่ยวข้อง - ส่วนประกอบใช้กระแสไฟเท่าที่พวกเขาต้องการเท่านั้น แบตเตอรี่รถยนต์มีความสามารถในการจัดหาแอมป์หลายร้อยเช่นที่จำเป็นสำหรับมอเตอร์สตาร์ท นี่ไม่ได้หมายความว่าจะมีแอมป์หลายร้อยตัวไหลเวียนอยู่เสมอและอาจสร้างความเสียหายได้ :)
KyranF

คำตอบ:


44

ข่าวดี! มันจะถูก! :-)

ตัวแบ่งความต้านทานที่เรียบง่ายจะนำ 12 V ลงไปที่ 5 V ที่ Arduino สามารถย่อยได้ สามารถคำนวณแรงดันเอาท์พุทเป็น

VOUT=R2R1+R2VIN

ค่าตัวต้านทานในช่วง 10 kΩเป็นตัวเลือกที่ดี หาก R2 ของคุณคือ 10 kΩดังนั้น R1 ควรเป็น 14 kΩ ตอนนี้ 14 kΩไม่ใช่ค่ามาตรฐาน แต่ 15 kΩคือ แรงดันไฟฟ้าขาเข้าของคุณจะเป็น 4.8 V แทน 5 V แต่ Arduino จะเห็นว่ายังอยู่ในระดับสูง นอกจากนี้คุณยังมีพื้นที่เหลือเฟือเล็กน้อยในกรณีที่ 12 V ควรสูงเกินไป แม้ 18 kΩจะยังให้คุณสูงพอ 4.3 V แต่แล้วคุณต้องเริ่มคิดเกี่ยวกับ 12 V บิตต่ำเกินไป แรงดันไฟฟ้าจะยังคงสูงหรือไม่? ฉันจะติดกับ 15 kΩ

แก้ไข
คุณพูดถึงสภาพแวดล้อมของยานยนต์และจากนั้นคุณต้องการการปกป้องเป็นพิเศษ 12 โวลต์ของรถไม่เคยมีขนาด 12 โวลต์ แต่ส่วนใหญ่จะสูงกว่าโดยมียอดเขาหลายโวลต์เหนือ 12 โวลต์ (จริง ๆ แล้วจะเป็น 12.9 โวลต์ที่ 2.15 V ต่อเซลล์) คุณสามารถวางซีเนอร์ 5 V ไดโอดขนานกับ R2 และสิ่งนี้ควรตัดแรงดันไฟฟ้าใด ๆ ที่สูงกว่าของ 5 ซีเนอร์ แต่แรงดันซีเนอร์จะแปรผันตามกระแสไฟฟ้าและที่กระแสอินพุตต่ำตัวต้านทานจะให้คุณตัดที่แรงดันไฟฟ้าต่ำ ทางออกที่ดีกว่าคือการมี Schottky diode ระหว่างอินพุตของ Arduino และแหล่งจ่ายไฟ 5 V จากนั้นแรงดันไฟฟ้าอินพุตใด ๆ ที่สูงกว่าประมาณ 5.2 V จะทำให้ Schottky diode conductor และแรงดันไฟฟ้าอินพุตจะถูก จำกัด ไว้ที่ 5.2 V คุณจำเป็นต้องมี Schottky diode สำหรับสิ่งนี้จริง ๆ แล้ว PN diode จะมี 0

ออพโตคัป
เปลอร์ที่ดีกว่าของ Michael เป็นทางเลือกที่ดีแม้ว่าจะมีราคาแพงกว่าเล็กน้อย คุณมักจะใช้ออปโตคัปเปลอร์เพื่อแยกอินพุตจากเอาต์พุต แต่คุณสามารถใช้เพื่อป้องกันอินพุตเหมือนที่คุณต้องการที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

วิธีการทำงาน: ไฟกระแสอินพุท LED อินฟราเรดอินฟราเรดภายในซึ่งเป็นสาเหตุของกระแสไฟขาออกผ่านโฟโต้ทรานซิสเตอร์ อัตราส่วนระหว่างอินพุตและเอาต์พุตปัจจุบันเรียกว่าCTRสำหรับอัตราส่วนการโอนปัจจุบัน CNY17มี CTR ต่ำสุด 40% ซึ่งหมายความว่าคุณต้องป้อนข้อมูล mA 10 สำหรับ 4 mA เอาท์พุท ไปหาอินพุต 10 mA กัน ดังนั้น R1 ควรเป็น (12 V - 1.5 V) / 10 mA = 1 kΩ ตัวต้านทานเอาต์พุตจะต้องทำให้เกิดการตก 5 V ที่ 4 mA จากนั้นควรเป็น 5 V / 4 mA = 1250 Ω มันจะดีกว่าถ้ามีค่าสูงกว่านี้แรงดันไฟฟ้าจะไม่ลดลงมากกว่า 5 V 4.7 kΩจะ จำกัด กระแสที่ประมาณ 1 mA

Vcc เป็นตัวจ่ายไฟ 5 V ของ Arduino Vout ไปที่อินพุตของ Arduino โปรดทราบว่าอินพุตจะถูก inversed: จะต่ำหากมี 12 V อยู่สูงเมื่อไม่มี หากคุณไม่ต้องการคุณสามารถสลับตำแหน่งของเอาต์พุตของออปโตคัปเปลอร์และตัวต้านทานแบบดึงขึ้นได้

แก้ไข 2
วิธีแก้ปัญหา optocoupler ไม่สามารถแก้ไขปัญหาแรงดันไฟฟ้าเกินได้อย่างไร ตัวแบ่งความต้านทานคืออัตราส่วน: แรงดันไฟฟ้าขาออกเป็นอัตราส่วนปันส่วนคงที่ของอินพุต หากคุณคำนวณ 5 V จาก 12 V แล้ว 24 V ในจะให้ 10 V ไม่เป็นไรดังนั้นไดโอดป้องกัน

ในวงจร optocoupler คุณจะเห็นว่าด้านขวาซึ่งเชื่อมต่อกับขาอินพุตของ Arduino ไม่มีแรงดันไฟฟ้าใด ๆ สูงกว่า 5 V เลย หากเปิดใช้ออปโตคัปเปลอร์แล้วทรานซิสเตอร์จะดึงกระแสฉันใช้ 4 mA ในตัวอย่างด้านบน 1.2 kΩจะทำให้แรงดันตกที่ 4.8 V เนื่องจากกฎของโอห์ม (ความต้านทานกระแส = แรงดันปัจจุบัน) จากนั้นแรงดันเอาต์พุตจะเป็น 5 V (Vcc) - 4.8 V ผ่านตัวต้านทาน = 0.2 V นั่นคือระดับต่ำ หากกระแสไฟฟ้าจะลดลงแรงดันไฟฟ้าตกก็จะเล็กลงเช่นกันและแรงดันไฟฟ้าขาออกจะเพิ่มขึ้น ตัวอย่างเช่นกระแส 1 mA จะทำให้เกิดการตก 1.2 V และเอาต์พุตจะเป็น 5 V - 1.2 V = 3.8 V กระแสขั้นต่ำเป็นศูนย์ จากนั้นคุณไม่มีแรงดันไฟฟ้าข้ามตัวต้านทานและเอาต์พุตจะเป็น 5 V นั่นคือค่าสูงสุดนั่นคือ '

เกิดอะไรขึ้นถ้าแรงดันไฟฟ้าขาเข้าสูงเกินไป? คุณบังเอิญเชื่อมต่อแบตเตอรี่ 24 V แทน 12 V จากนั้นกระแสไฟ LED จะเพิ่มเป็นสองเท่าในรูปแบบ 10 mA ถึง 20 mA CTR 40% จะทำให้เกิดกระแสเอาต์พุต 8 mA แทนการคำนวณ 4 mA 8 mA ผ่านตัวต้านทาน 1.2 kΩจะลดลง 9.6 V แต่จากอุปทาน 5 V ที่จะเป็นลบและเป็นไปไม่ได้ คุณไม่สามารถลงต่ำกว่า 0 V ได้ที่นี่ ดังนั้นในขณะที่ออปโตคัปเปลอร์ต้องการวาด 8 mA มากตัวต้านทานจะถูก จำกัด กระแสสูงสุดที่ผ่านคือเมื่อเต็ม 5 V เอาต์พุตจะเป็น 0 V จริงๆและกระแส 5 V ​​/ 1.2 kΩ = 4.2 mA ดังนั้นแหล่งจ่ายไฟใด ๆ ก็ตามที่คุณแนบเอาท์พุทกระแสจะไม่สูงกว่านั้นและแรงดันไฟฟ้าจะอยู่ระหว่าง 0 V ถึง 5 V. ไม่ต้องการการป้องกันเพิ่มเติม

หากคุณคาดว่า overvoltage คุณจะต้องตรวจสอบว่า OPTOCOUPLER ของไฟ LED สามารถจัดการเพิ่มขึ้นในปัจจุบัน แต่ 20 mA จะไม่เป็นปัญหาสำหรับ optocouplers มากที่สุด (ที่พวกเขากำลังจัดอันดับมักที่ 50 mA สูงสุด) และนอกจากนั้นสำหรับคู่แรงดันไฟฟ้าขาเข้าซึ่งอาจจะไม่เกิดขึ้น IRL


ระบบนี้ใช้สำหรับรถยนต์ จำนวนแอมแปร์ของแบตเตอรี่รถยนต์จะต้องลดลงอย่างใดเพื่อไม่ให้ระเบิดส่วนประกอบหรือไม่ ฉันใหม่ที่นี้ ขอบคุณ
DW

@DW Uh-oh รถยนต์! :-( ฉันจะอัปเดตคำตอบของฉัน
stevenvh

@DW - ไม่ความจุของแบตเตอรี่รถยนต์ไม่สำคัญ กระแสจะถูกกำหนดโดยแรงดันไฟฟ้า (12 V) และความต้านทาน (รวม 25 kohm) จากนั้นตามกฎของโอห์มกระแสจะเป็น 12 V / 25 kohm = 0.5 mA ไม่สำคัญว่าแบตเตอรี่จะเป็นรุ่น 40 Ah หรือรุ่น 400 Ah ตัวต้านทานจะไม่ยอมให้มากขึ้น
stevenvh

มันเยี่ยมมาก ขอบคุณสำหรับความช่วยเหลือของคุณ. แค่อยากรู้อยากเห็น แต่สิ่งที่ต้องการทำงานนี้หรือไม่ robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
DW

2
@ สตีเว่นขอบคุณสตีฟ ฉันตั้งตาคอยที่จะกลับมาชอบคนที่เป็นสิ่งใหม่ทางอิเล็กทรอนิกส์เมื่อฉันมั่นใจในมัน ขอบคุณ
DW

15

วิธีที่ดีในการแยกสัญญาณสวิตช์ 12V คือการส่งผ่าน opto coupler วงจรจะถูกกำหนดค่าคล้ายกับต่อไปนี้

ป้อนคำอธิบายรูปภาพที่นี่

Vi ในแผนภาพแสดงถึง 12V ในวงจรของคุณซึ่งสวิตช์ของคุณเปลี่ยน (S1) เลือก R1 เพื่อ จำกัด กระแสผ่านส่วน D1 ของ opto coupler ให้อยู่ในระดับที่อยู่ในระดับการจัดอันดับของส่วนประกอบที่คุณเลือก

Opto couplers ไม่ใช่ชิ้นส่วนที่เร็วที่สุดในโลกโดยเฉพาะอย่างยิ่งชิ้นส่วนที่ถูกที่สุด แต่สำหรับกรณีของการกระทำที่ช้าเหมือนสวิตช์ควบคุมของมนุษย์ความเร็วของคัปปลิ้งก็น่าเป็นห่วงเล็กน้อย


15

คุณยังสามารถใช้ไดโอดและตัวต้านทานได้ดังต่อไปนี้:

แผนผัง

จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab

ฉันจะทำให้ตัวต้านทานมีความแข็งพอสมควรไม่งั้นคุณจะจมพลังงานจำนวนมากจากวงจรนี้ ความสวยงามของวงจรนี้ (เมื่อเทียบกับตัวแบ่งแรงดัน) คือมันไม่สนใจว่าแรงดันไฟฟ้าดั้งเดิมของคุณคือ 12V, 14V หรือ 15V: มันจะเป็น 5V (จริง ๆ 5.2-5.3V ขึ้นอยู่กับไดโอด) โดยไม่คำนึงถึง แรงดันไฟฟ้า


มันค่อนข้างฉลาด +1 สำหรับแรงดันไฟฟ้าอิสระ!
Florian Castellane

5
ระวังด้วยแรงดันเกินบนพินพิกัดสูงสุดแบบสัมบูรณ์ ตัวอย่างเช่นแผ่นข้อมูล ATmega32u4: แรงดันไฟฟ้าบนพินใด ๆ ที่เกี่ยวข้องกับกราวด์ (8): -0.5V ถึง VCC + 0.5V หากใช้ไดโอดปกติแรงดันไฟฟ้าจะมากกว่า VCC + 0.5V หากใช้ตัวต้านทานที่น้อยกว่า 170kOhm ฉันคิดว่าไดโอด Schottky นั้นปลอดภัยที่สุดสำหรับเรื่องนี้
cyberponk

13

เพื่อความเป็นอิสระของแรงดันไฟฟ้าให้ใช้ตัวต้านทานเพื่อควบคุมกระแสไฟฟ้าและซีเนอร์เพื่อควบคุมแรงดันไฟฟ้าเช่นนี้

แผนผัง

จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab

ด้วยตัวต้านทาน 30k จะส่งออก 4.99V และใช้เพียงประมาณ 234uA @ 12Vin
ในกรณีนี้:
R1 บริโภค 234uA x (12V - 4.99V) = 1.64mW
D1 กำลังบริโภค 234uA x 4.99V = 1.17mW

การใช้พลังงานทั้งหมด: 2.81mW (เมื่ออินพุตสูง)


สำหรับสิ่งที่มองเห็นได้ฉันจะใช้ LED + ตัวต้านทานแบ่งเป็นอนุกรมเพื่อให้สัญญาณ 5V ที่ 12V และวางซีเนอร์ไดโอดขนานกับครึ่งล่างของตัวแบ่งและ LED เพื่อป้องกันแรงดันไฟฟ้าเกิน วิธีนี้จะทำให้ไฟ LED สว่างขึ้นเมื่อคุณมีสัญญาณอินพุตและให้ข้อเสนอแนะภาพ
Goswin von Brederlow

@GoswinvonBrederlow คุณสามารถวาดวงจร led / diode / resistor circuit ออกมาได้ไหม?
เสียงดังฉ่า

ในแผนผังข้างต้นตั้งค่า R1 เป็น 770 โอห์มและเพิ่ม 330Ohm และไฟ LED สีแดงขนานกับซีเนอร์ไดโอด จากนั้นที่อินพุต 12V ~ 9mA จะไหลผ่าน LED และคุณจะได้รับสัญญาณ 5V หากแรงดันไฟฟ้าขาเข้าสูงขึ้นแม้ว่าซีเนอร์ไดโอดจะ จำกัด สัญญาณเอาท์พุทให้เป็น 5.1V และปกป้องทั้ง Arduino และ LED
Goswin von Brederlow

-2

สายไปหน่อย แต่ในรถของฉันฉันใช้ LM7805 ใช้งานได้ดีและราคาถูก


1
ไม่ถูกเท่าตัวต้านทาน 2 ตัวหรือตัวต้านทานและไดโอด
Dave Tweed

7
@TonNies คุณมีคำถามผิด OP ไม่ได้อยู่ในการค้นหาแรงดันไฟฟ้าของคอนโทรลเลอร์ มันเป็นเรื่องของการปรับสภาพสัญญาณ
Ariser

1
ไม่มีอะไรผิดปกติกับการใช้ LM7805 สำหรับการเปลี่ยนระดับสัญญาณ 12v
chugadie

1
@ chugadie: แต่วิธีการ overkill มากผิดปกติและค่อนข้าง "แพง" ถ้าสิ่งที่คุณต้องการคือการทำให้ 12V ลงสำหรับพิน IO หนึ่ง
Rev1.0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.