ฉันจะคำนวณค่าที่ต้องการสำหรับตัวต้านทานแบบดึงขึ้นได้อย่างไร


98

มีแบบฝึกหัดมากมายที่ใช้ตัวต้านทานแบบดึงขึ้นหรือเลื่อนลงร่วมกับสวิตช์เพื่อหลีกเลี่ยงพื้นลอยเช่น

http://www.arduino.cc/en/Tutorial/button

หลายโครงการเหล่านี้ใช้ตัวต้านทาน 10K เพียงแค่ตั้งข้อสังเกตว่ามันคุ้มค่า

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


ฉันพบบทช่วยสอนนี้จาก sparkfun การแนะนำที่ดีสำหรับตัวต้านทาน pull-up และ pull-down sparkfunตัวต้านทานแบบpull-upและคำตอบที่ให้ไว้สำหรับคำถามที่โพสต์ที่ยอดเยี่ยมที่สุดของคุณนั้นยอดเยี่ยมมาก
Richard Chambers

คำตอบ:


82

คำตอบด่วน: ประสบการณ์และการทดลองคือวิธีที่คุณหาค่า pullup / pulldown ที่เหมาะสม

คำตอบยาว: ตัวต้านทานการดึงขึ้น / ลงคือ R ในวงจรจับเวลา RC ความเร็วที่สัญญาณของคุณจะเปลี่ยนจะขึ้นอยู่กับ R (ตัวต้านทานของคุณ) และ C (ความจุของสัญญาณนั้น) บ่อยครั้งที่ C ยากที่จะรู้อย่างแน่นอนเพราะมันขึ้นอยู่กับปัจจัยหลายประการรวมถึงวิธีการติดตามที่ถูกกำหนดเส้นทางบน PCB เนื่องจากคุณไม่รู้ C คุณจึงไม่สามารถทราบได้ว่า R ควรเป็นอะไร นั่นคือที่มาของประสบการณ์และการทดลอง

นี่คือกฎบางส่วนของหัวแม่มือเมื่อคาดเดาด้วยค่าตัวต้านทานการดึงขึ้น / ลงที่ดี:

  • สำหรับสิ่งส่วนใหญ่ 3.3k ถึง 10k ohms ใช้งานได้ดี
  • สำหรับวงจรที่ไวต่อไฟฟ้าให้ใช้ค่าที่สูงกว่า 50k หรือ 100k ohms สามารถใช้ได้กับหลาย ๆ แอปพลิเคชั่น (แต่ไม่ทั้งหมด)
  • สำหรับวงจรที่ไวต่อความเร็วให้ใช้ค่าที่ต่ำกว่า 1k ohms เป็นเรื่องธรรมดาในขณะที่ค่าต่ำสุดที่ 200 ohms ไม่เคยได้ยินมาก่อน
  • บางครั้งเช่นเดียวกับ I2C "มาตรฐาน" ระบุค่าเฉพาะที่จะใช้ ในบางครั้งบันทึกย่อของแอปพลิเคชันชิปอาจแนะนำค่า

10
200 ohms สำหรับการดึง? ว้าวนั่นเป็นจำนวนมากในปัจจุบันที่เงียบสงบ
0x6d64

4
@ 0x6d64 - คุณกำลังสมมติว่ารถบัสอยู่ในระดับต่ำเมื่อหยุดนิ่ง
Connor Wolf

3
Texas Instruments มีการอ้างอิงที่ดีมากที่อธิบายไม่เพียง แต่วิธีการคำนวณค่าสำหรับตัวต้านทานแบบเลื่อนขึ้น I2C แต่วิธีการที่ได้รับสูตรจริง ดู I2C Bus pullup ต้านทานรายงานการคำนวณแอพลิเคชันที่ti.com/lit/an/slva689/slva689.pdf
JamieSee

77

ใช้ 10 kΩมันคุ้มค่า

สำหรับรายละเอียดเพิ่มเติมเราต้องดูว่า pullup ทำอะไร สมมติว่าคุณมีปุ่มกดที่คุณต้องการอ่านด้วยไมโครคอนโทรลเลอร์ ปุ่มกดเป็นสวิตช์ SPST (Single Pole Single Throw) ชั่วขณะ มีจุดเชื่อมต่อสองจุดที่เชื่อมต่อหรือไม่ เมื่อกดปุ่มทั้งสองจุดจะเชื่อมต่อกัน (ปิดสวิตช์) เมื่อปล่อยแล้วจะไม่ได้เชื่อมต่อ (สวิตช์เปิดอยู่) ไมโครคอนโทรลเลอร์ไม่ตรวจจับการเชื่อมต่อหรือตัดการเชื่อมต่อโดยเนื้อแท้ สิ่งที่พวกเขาทำคือแรงดันไฟฟ้า เนื่องจากสวิตช์นี้มีเพียงสองสถานะจึงเหมาะสมที่จะใช้อินพุตดิจิตอลซึ่งหลังจากทั้งหมดออกแบบมาให้อยู่ในสถานะใดสถานะหนึ่งเท่านั้น ไมโครสามารถรับรู้ว่าสถานะอินพุตดิจิตอลนั้นโดยตรง

pullup ช่วยแปลงการเชื่อมต่อเปิด / ปิดของสวิตช์เป็นแรงดันไฟฟ้าต่ำหรือแรงดันสูงที่ไมโครคอนโทรลเลอร์สามารถรับรู้ได้ ด้านหนึ่งของสวิตช์เชื่อมต่อกับกราวด์และอีกด้านเข้ากับอินพุตดิจิตอล เมื่อกดสวิตช์บรรทัดนั้นจะถูกบังคับให้ต่ำเพราะสวิตช์นั้นลัดไปที่กราวด์ อย่างไรก็ตามเมื่อสวิทช์ถูกปล่อยออกมาไม่มีสิ่งใดที่ทำให้สายไปยังแรงดันไฟฟ้าใด ๆ มันอาจจะอยู่ในระดับต่ำรับสัญญาณใกล้เคียงอื่น ๆ โดยการมีเพศสัมพันธ์แบบ capacitive หรือในที่สุดก็ลอยไปที่แรงดันไฟฟ้าที่เฉพาะเจาะจงเนื่องจากกระแสรั่วไหลเล็กน้อยผ่านอินพุตดิจิตอล งานของตัวต้านทาน pullup คือการให้ระดับการรับประกันที่สูงในเชิงบวกเมื่อสวิตช์เปิดอยู่ แต่ยังคงอนุญาตให้สวิตช์สั้นลงอย่างมีความปลอดภัยเมื่อปิด

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

ลองดูสิ่งที่จะดึงขึ้นบรรทัด ดูที่ข้อกำหนด DC เท่านั้นจะทำให้กระแสรั่วไหลของสายอินพุตดิจิตอล อินพุตดิจิตอลในอุดมคติมีความต้านทานไม่ จำกัด ของจริงไม่แน่นอนและขอบเขตที่ไม่เหมาะมักจะแสดงเป็นกระแสไฟรั่วสูงสุดที่สามารถออกมาหรือเข้าสู่ขา สมมติว่ามีการระบุไมโครของคุณสำหรับการรั่วไหลสูงสุด 1 µA บนพินอินพุตดิจิตอล เนื่องจาก pullup ต้องรักษาระดับของสายให้สูงที่สุดกรณีที่แย่ที่สุดคือสมมติว่าพินนั้นดูเหมือนกระแสไฟ 1 µA ลงสู่พื้น หากคุณต้องใช้การดึง 1 MΩเช่นนั้น 1 µA นั้นจะทำให้ 1 โวลต์ที่ตรงกับตัวต้านทาน 1 MΩ สมมติว่านี่เป็นระบบ 5V ดังนั้นหมายความว่าพินรับประกันได้เพียง 4V เท่านั้น ตอนนี้คุณต้องดูที่สเป็คอินพุตดิจิตอลและดูว่าข้อกำหนดแรงดันไฟฟ้าขั้นต่ำสำหรับระดับตรรกะสูง นั่นอาจเป็น 80% ของ Vdd สำหรับ micros บางตัวซึ่งจะเป็น 4V ในกรณีนี้ ดังนั้นการดึง 1 MΩจึงอยู่ที่ระยะขอบ คุณต้องการอย่างน้อยน้อยกว่านั้นสำหรับพฤติกรรมที่ถูกต้องซึ่งรับประกันได้เนื่องจากข้อควรพิจารณา DC

อย่างไรก็ตามมีข้อควรพิจารณาอื่น ๆ และสิ่งเหล่านี้ยากที่จะหาจำนวน ทุก ๆ โหนดมีคัปปลิ้งแบบ capacitive สำหรับโหนดอื่น ๆ ทั้งหมดแม้ว่าขนาดของคัปปลิ้งจะตกลงไปกับระยะทางซึ่งมีเพียงโหนดใกล้เคียงเท่านั้นที่เกี่ยวข้อง หากโหนดอื่น ๆ เหล่านี้มีสัญญาณอยู่สัญญาณเหล่านี้อาจจับคู่กับอินพุตดิจิตอลของคุณ การดึงค่าที่ต่ำลงจะทำให้อิมพีแดนซ์ลดลงของบรรทัดซึ่งจะลดปริมาณของสัญญาณจรจัดที่จะรับได้ นอกจากนี้ยังช่วยให้คุณรับประกันระดับ DC ขั้นต่ำที่สูงขึ้นเมื่อเทียบกับกระแสไฟฟ้ารั่วดังนั้นจึงมีพื้นที่ระหว่างระดับ DC นั้นและที่ซึ่งอินพุตดิจิตอลอาจตีความผลลัพธ์เป็นตรรกะต่ำแทนที่จะเป็นตรรกะระดับสูง ดังนั้นเท่าไหร่พอ? เห็นได้ชัดว่าการดึง 1 MΩในตัวอย่างนี้ไม่เพียงพอ (ความต้านทานสูงเกินไป) เกือบจะเป็นไปไม่ได้เลยที่จะเดาการมีเพศสัมพันธ์กับสัญญาณใกล้เคียง แต่ฉันต้องการอย่างน้อยลำดับความสำคัญกับกรณี DC ขั้นต่ำ นั่นหมายความว่าฉันต้องการแรงดึง 100 kΩหรือต่ำกว่านั้นอย่างน้อยแม้ว่าจะมีเสียงรบกวนรอบ ๆ ฉันก็อยากให้มันลดลง

มีข้อควรพิจารณาอีกประการหนึ่งคือการทำให้แรงดึงต่ำลงและนั่นคือเวลาที่เพิ่มขึ้น เส้นจะมีค่าความจุหลงทางไปที่พื้นดังนั้นจะสลายตัวแบบทวีคูณต่อมูลค่าของอุปทานแทนที่จะไปที่นั่นทันที สมมติว่าความจุจรจัดทั้งหมดเพิ่มขึ้นถึง 20 pF เวลานั้น pullup 100 kΩคือ 2 .s ค่าคงที่ 3 ครั้งจะได้รับ 95% ของมูลค่าการจ่ายหรือ 6 µs ในกรณีนี้ นั่นไม่ใช่สิ่งที่เกิดขึ้นในเวลาของมนุษย์ดังนั้นไม่สำคัญในตัวอย่างนี้ แต่ถ้านี่เป็นสายรถบัสดิจิทัลคุณต้องการที่จะทำงานด้วยอัตราข้อมูล 200 kHz มันจะไม่ทำงาน

ตอนนี้ให้ดูที่การพิจารณาการแข่งขันอื่น ๆ ซึ่งเป็นสิ่งที่สูญเปล่าเมื่อกดสวิตช์ หากหน่วยนี้กำลังไฟไม่เพียงพอหรือกำลังไฟมากไม่กี่ mA ก็ไม่เป็นไร ที่ 5V ใช้เวลา 5 kΩในการวาด 1 mA ที่จริงแล้วมี "กระแส" จำนวนมากในบางกรณีและมากกว่าที่จำเป็นเนื่องจากข้อควรพิจารณาอื่น ๆ หากนี่คืออุปกรณ์ที่ใช้พลังงานจากแบตเตอรี่และสวิตช์สามารถเปิดใช้งานได้เพียงเสี้ยววินาทีแล้วทุกๆ everyA อาจมีความสำคัญและคุณต้องคิดอย่างรอบคอบ ในบางกรณีคุณอาจสุ่มตัวอย่างสวิตช์เป็นระยะและเปิดเครื่องดึงขึ้นเป็นระยะเวลาสั้น ๆ รอบตัวอย่างเพื่อลดการดึงกระแสในปัจจุบัน

นอกเหนือจากข้อควรพิจารณาพิเศษเช่นการใช้งานแบตเตอรี่ 100 kΩนั้นมีความต้านทานสูงพอที่จะทำให้ฉันรู้สึกกังวลเกี่ยวกับการเก็บเสียง 1 mA ของกระแสไฟฟ้าสูญเปล่าเมื่อสวิตช์เปิดทำงานมีขนาดใหญ่เกินความจำเป็น ดังนั้น 500 µA ซึ่งหมายถึงความต้านทาน 10 kΩนั้นถูกต้อง

อย่างที่ฉันพูดใช้ 10 kΩ มันคุ้มค่ามาก


1
และข้อกำหนดเพิ่มเติมคือสวิตช์บางตัวเช่นสวิตช์ชนิด 'แทค' ทั่วไปนั้นถูกระบุไว้สำหรับกระแสที่ต่ำมากเช่น 1 mA เท่านั้น โปรดทราบว่า 10k (ที่ 5V หรือต่ำกว่า) เป็นไปตามข้อกำหนดนี้ แต่ต้องคำนึงไว้เสมอเมื่อคำนึงถึงค่าตัวต้านทานที่ต่ำกว่า
Wouter van Ooijen

1
@ เวต - สวิทช์ชั้นเชิงที่ฉันโปรดปรานไม่เพียง แต่มีสูงสุด 50mA (1mA ดูเหมือนจะต่ำสำหรับฉัน) แต่ยังน้อย เพื่อให้รายชื่อนั้นสะอาดฉันวางตัวเก็บประจุขนานกับสวิตช์ความคิดที่ว่ากระแสลัดวงจรสูงสุดเมื่อเปลี่ยนทำให้หน้าสัมผัสสะอาด แม้จะมีการระบุอายุการใช้งานเพียง 100,000 รอบเท่านั้น แต่เราก็ไม่มีปัญหาในการใช้งานถึง 200,000 รอบ
stevenvh

@stevenvh คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับตัวเก็บประจุควบคู่กับสวิตช์ได้หรือไม่? ทำไมการทำให้กระแสลัดวงจรเริ่มต้นสูงในปัจจุบันทำให้ที่อยู่ติดต่อสะอาด
abdullah kahraman

สถานการณ์นี้ที่คุณสามารถเห็นการมีเพศสัมพันธ์แบบ capacitive มากเกินไปที่มีผลต่อค่าตัวต้านทานแบบดึงขึ้น ดูเหมือนจะบ้า แต่ก็ไม่เป็นเช่นนั้น ฉันมีเอาท์พุทไตรสถานะน่าสะพรึงกลัวที่ฉันกำลังอ่านกับ ADC บอร์ดเดียวหนึ่งตัว, แรงดึง 220k นั้นเพียงพอดังนั้น ADC ทั้งหมดสามารถอ่านได้โดย ADC บนกระดานอีกอัน (วางไว้แน่นกว่า) ฉันต้องการดึงขึ้น 100k คิดว่าฉันใช้ยาบ้าไล่นี่ทุกเช้า
Leroy105

23

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

มีสองสถานการณ์คือสวิตช์แทกติกเปิดและสวิตช์ปิด

ในสถานะปิดอินพุตของไมโครคอนโทรลเลอร์จะเชื่อมต่อกับพื้นดังนั้นจึงจะเห็นระดับต่ำ นอกจากนี้ยังจะไหลกระแสผ่านตัวต้านทาน แผนผังที่ดีจะบอกคุณว่าปลายด้านหนึ่งของตัวต้านทานเชื่อมต่อกับ + 5V สวิตช์ชั้นเชิงเชื่อมต่อปลายอีกด้านกับพื้น มาดูกันว่าตัวต้านทาน10kจะทำไหม จากนั้นกระแสไฟฟ้าผ่านตัวต้านทานจะเท่ากับ = 500 A. ที่ดูเหมือนสมเหตุสมผล เรามาดูกันว่ามันใช้ได้หรือไม่เมื่อสวิตช์เปิดอยู่ 5 VΩ μ5V10kΩμ

ในสถานะเปิดสวิตช์เราสามารถเพิกเฉยได้และแสร้งว่ามีเพียงตัวต้านทานระหว่าง V + และอินพุตของไมโครคอนโทรลเลอร์ เรารู้จากประสบการณ์หรือดีกว่าเพราะเราค้นหาในแผ่นข้อมูลว่าเมื่อคุณใช้แรงดันไฟฟ้ากับอินพุตของไมโครคอนโทรลเลอร์จะมีการไหลของกระแสน้อยมากมักจะน้อยกว่า 1 A. สมมุติว่ามันคือ 1 A จากนั้นแรงดันตกคร่อมตัวต้านทานจะเป็น 1 Aคูณ 10k = 10mV แรงดันไฟฟ้าของอินพุตจะเท่ากับ 4.99V อาจจะไม่เป็นไร แต่เราจะทำหน้าที่ของเราให้ถูกต้อง หากคุณมีแผนผัง (ฉันคิดว่าคุณจะได้รับมันตอนนี้ไม่ได้คุณ?) คุณจะรู้ว่าไมโครคอนโทรลเลอร์ชนิดใด ฉันรู้ว่า Arduino เป็น AVR ดังนั้นฉันจึงμ μ × Ω × V D Dμμμ×Ωสุ่มแผ่นข้อมูล AVR คุณสมบัติทางไฟฟ้าบอกว่าระดับอินพุตสูงควรอย่างน้อย 0.6 (หน้า 320) นั่นคือ 3V ดังนั้น 4.99V จึงปลอดภัย × VDD

จะเป็นอย่างไรถ้าเราเลือกค่าตัวต้านทานที่แตกต่างกัน ค่าที่ต่ำกว่าจะหมายถึงแรงดันไฟฟ้าตกที่ลดลงและแรงดันไฟฟ้าขาเข้าจะสูงกว่า 4.99V แต่จะมีกระแสไหลผ่านตัวต้านทานมากกว่าเมื่อสวิตช์ปิดและนั่นคือสิ่งที่คุณไม่ต้องการ
ค่าตัวต้านทานที่สูงขึ้นจะเป็น OK เมื่อปิดสวิตช์เนื่องจากจะมีกระแสน้อยลง แต่แรงดันไฟฟ้าอินพุตของไมโครคอนโทรลเลอร์จะต่ำกว่า 4.99V เรามีห้องประชุมใหญ่ที่นี่ดังนั้นมูลค่าที่สูงขึ้นอาจจะตกลง

ข้อสรุป

  1. 10kนั้นใช้ได้สำหรับทั้งเปิดและปิดสถานการณ์Ω
  2. เรียนรู้การวาดแผนงานและอ่านเอกสารข้อมูล

7
ฉันไม่เห็นด้วยที่ไม่มีประโยชน์จริง ๆ แล้วแผนภาพการเดินสายไฟที่ทำด้วย Fritzing อาจเป็นเรื่องธรรมดามากกว่าแผนงานเมื่อมาถึง Arduino ผู้ชมจะต้องนำมาพิจารณา
เดฟนิวตัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.