การเลือกที่อยู่บัส 4 บิตผ่านทางขาเข้าแบบอะนาล็อก: การจำลอง Monte Carlo แสดงค่าที่อยู่ที่ทับซ้อนกัน


16

ฉันออกแบบ PCB ตัวเซ็นเซอร์ขนาดเล็กสำหรับวิทยานิพนธ์ปริญญาโทของฉันด้วยไมโครคอนโทรลเลอร์ATtiny44 ฉันต้องการบอร์ดประมาณ 200 ตัวสำหรับแอปพลิเคชันของฉันและ 16 บอร์ดเชื่อมต่ออยู่กับบอร์ดควบคุมเสมอ เครือข่ายทั้งหมดมีลักษณะดังนี้:

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

ในการสื่อสารระหว่างคอนโทรลเลอร์และแผงเซ็นเซอร์ฉันเขียนบัสพินของฉันเอง 1 ตัว (ตามเวลา) ปัญหาเดียวคือบอร์ดเซนเซอร์จะต้องมีที่อยู่เพื่อทราบตำแหน่งของมันในเครือข่ายเมื่อฉันส่งข้อมูลไปยังบอร์ดควบคุม

เมื่อฉันเหลือ ATtiny เพียง 1 ขาฉันจึงได้วงจร DAC ที่เป็นจัมเปอร์ซึ่งควรสร้างแรงดันไฟฟ้าอะนาล็อกตามการตั้งค่าของจัมเปอร์สี่ตัว เนื่องจากวงจรเซ็นเซอร์ใช้ค่า (47, 470, 1k, 3k, 4k7, 10k, 100k และ 220k) และฉันต้องการเพิ่มประสิทธิภาพสำหรับการผลิตฉันใช้ค่าด้านล่างสำหรับ DAC (โดยทั่วไปคือ 100k, 50k, 20k และ 10k ) ซึ่งควรให้ฉันค่าที่ดีระหว่าง 0 V และ 760 mV ตามการตั้งค่าจัมเปอร์ สิ่งที่ฉันต้องการเพื่ออ่านเป็นแรงดันไฟฟ้าอะนาล็อกที่มีการอ้างอิง 1.1 V ภายในของ ATtiny เมื่อเริ่มต้น ATtiny จะอ่านแรงดันไฟฟ้านี้และควรทราบตำแหน่งของมัน

แผนผัง

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

ในทางทฤษฎีมันใช้งานได้ดี ฉันยังทำการวิเคราะห์ Monte Carlo ในLTspiceเพื่อยืนยันว่าฉันไม่ได้พื้นที่ทับซ้อนกันเมื่อพิจารณาถึงความอดทนของตัวต้านทาน (ทั้งหมดคือ 1% BTW) ด้านล่างคุณจะพบภาพการวิเคราะห์นี้

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

ตอนนี้ฉันสร้างบอร์ดขึ้นมาหลายอัน (โชคดีที่ไม่ได้ 200) และยังมีบางบอร์ดที่ล้มเหลวในการอ่านที่ถูกต้องตามที่อยู่ของพวกเขา (โดยเฉพาะในพื้นที่ที่อยู่สูงกว่า ฉันวัดวิธีแก้ปัญหาที่เป็นไปได้ทั้งหมดและหาปัญหาของฉันในที่สุด การวิเคราะห์ดั้งเดิมของฉันไม่ได้รวมความอดทนของแรงดันไฟฟ้า 5 V ซึ่งสร้างขึ้นในเครื่องจาก 12 V ด้วยMC7805ในแต่ละบอร์ดควบคุม ในแผ่นข้อมูลนั้น MC7805 มีแรงดันเอาต์พุตระหว่าง 4.8 ถึง 5.2 V.

หลังจากที่ฉันพบสิ่งนี้ฉันแก้ไขการวิเคราะห์ Monte Carlo ตอนนี้ดูเหมือนว่านี้:

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

อย่างที่คุณเห็นมีพื้นที่ทับซ้อนที่ดีซึ่งฉันไม่สามารถบอกได้ว่าแรงดันไฟฟ้านี้สามารถหมายถึงที่อยู่นี้ได้เท่านั้น โดยทั่วไปที่อยู่ทั้งหมดเริ่มต้นด้วยหมายเลข 8 สามารถได้รับการอ่านที่ผิดพลาด (มีความเป็นไปได้ที่สูงขึ้นสำหรับการอ่านที่ผิดสำหรับที่อยู่สูงกว่า)

ฉันไม่ต้องการเพิ่มค่าตัวต้านทานที่แตกต่างจากที่เคยใช้บนกระดาน (สำหรับวิทยานิพนธ์ที่ฉันต้องการเพิ่มประสิทธิภาพสำหรับการผลิต)

ฉันจะ ไม่ต้องการเพิ่มการอ้างอิงแรงดันไฟฟ้า (เช่น Zener diode) เพื่อป้อนเครือข่ายตัวต้านทาน DAC

ผม ไม่สามารถแก้ไขบอร์ดควบคุมได้อีกต่อไป (และใช้ตัวควบคุมแรงดันไฟฟ้าที่แม่นยำยิ่งขึ้น)

ผม ยังคงสามารถปรับเปลี่ยนการออกแบบ PCB / แผนผังของบอร์ดเซ็นเซอร์!

ฉันจะแน่ใจได้อย่างไรว่าได้อ่านค่าที่ถูกต้องอยู่เสมอ (ไม่ว่าจะโดยโปรแกรมหรือเปลี่ยนวงจร)


3
+1 คำถามที่ดี คุณสามารถให้ไฟล์ LTspice asc ล่าสุดใน pastebin ที่อื่นได้ไหม ดังนั้นเราสามารถทดสอบชุดค่าผสมอื่น ๆ
สลัวขาดศรัทธาใน

2
เป็นคำถามที่ดีมากทำงานได้ดีในการหาสิ่งที่เกิดขึ้นจริงก่อนที่จะขอคำแนะนำที่นี่ ตอนนี้คำถามและคำตอบเป็นที่ดีสำหรับทุกคนที่อ่านผ่านโดยแทนเพียงคุณ :-)
Mast

คำตอบ:


19

ตามการจำลองของคุณชุดรูปแบบการกำหนดแอดเดรสของคุณทำงานได้ดีตราบใดที่มีการพิจารณาความไม่แน่นอนเพียงอย่างเดียวในค่าตัวต้านทาน มันเป็นความไม่แน่นอนของแรงดันไฟฟ้าที่ทำให้มันล้มเหลว

คำแนะนำของฉันคือการยกเลิกความผันผวนของ VCC โดยใช้เป็นข้อมูลอ้างอิงถึง ADC คุณสามารถทำได้โดยการเขียนโปรแกรมREFSบิตในการADMUXลงทะเบียนตามที่อธิบายไว้ในแผ่นข้อมูล :

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

เมื่อคุณเปลี่ยนมาใช้ VCC เป็นแรงดันอ้างอิงสำหรับ ADC คุณจะไม่ทำการวัดแรงดันอีกต่อไป แต่จะมีอัตราส่วนระหว่างค่าตัวต้านทานและค่าเหล่านั้นมีความแม่นยำถึง 1% ไม่จำเป็นต้องมีการเปลี่ยนแปลงใด ๆ ในแผนผัง (แม้ว่าคุณอาจต้องการเพิ่มค่าของ R7 เพื่อรับการวัดของคุณในช่วงกลางของการแปลง ADC) เพียง แต่ต้องอัปเดตเฟิร์มแวร์ของ Attiny เท่านั้น

หากคุณยังคงเต็มใจที่จะทำใหม่เซ็นเซอร์บอร์ดคุณสามารถแทนที่แผนผังของคุณด้วยบันได R-2R ตามที่แนะนำใน Cano64:

แผนผัง

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

วิธีนี้จะปรับความละเอียดให้เหมาะสมที่สุดโดยทำทุกขั้นตอนในบันไดให้เท่ากัน ตัวต้านทาน 1% มีความแม่นยำเพียงพอที่จะสร้างบันไดแบบโมโนโทนิคได้สูงสุด 5 บิต


Doh! ฉันไม่เห็นต้นไม้ forrest สำหรับต้นไม้ ฉันได้รับการแก้ไขใน 1.1V นั้น ... ขอบคุณมาก! ฉันจะลองดู
KarlKarlsom

1
ทดสอบแล้วและใช้งานได้ ที่ดี!
KarlKarlsom

ฉันทดสอบด้วย VCC เป็น AREF และตัวต้านทาน 220k สำหรับ R7 หลังจากนั้นฉันอาจลองจำลองบันได 100k, 220k R-2R และดูว่ามันให้ผลลัพธ์ที่ดีกว่าหรือไม่ ขอบคุณอีกครั้ง!
KarlKarlsom

3

ฉันต้องแก้ปัญหาที่คล้ายกันหนึ่งครั้ง ฉันจำเป็นต้องเชื่อมต่อ 4 ปุ่มเข้ากับขาอะนาล็อกหนึ่งอันบน arduino แต่ฉันจำเป็นต้องจดจำการกดพร้อมกัน (ชุดค่าผสมทั้งหมด) ฉันขึ้นมาด้วยวงจรเดียวกันกับคุณจากนั้นฉันก็เขียนโปรแกรมเพื่อค้นหาค่าตัวต้านทานที่เป็นไปได้ทั้งหมดดังนั้นค่าสุดท้ายเมื่อคุณกดปุ่มต่างกันมากที่สุด คาดเดาอะไร เราเมาแล้วมันไม่สามารถทำได้ แค่นี้ก็เป็นวันที่ดี

ฉันได้เรียนรู้ว่าค่าตัวต้านทานที่เหมาะสมที่สุดสำหรับสวิทช์อยู่ใกล้กับ R, 2R, 4R, 8R และส่วนล่างของตัวหารมีค่าเป็น R วงจรของคุณอยู่ใกล้กับค่าที่เหมาะสมที่สุดแล้วคุณต้องแทนที่ R7 ด้วย 10k ต้านทาน

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


ทำไมถึงทำไม่ได้? เกิดอะไรขึ้นเมื่อคุณเชื่อมต่อสวิตช์ของคุณกับตัวต้านทาน (R, 2R, 4R, 8R) ชุดค่าผสมใดไม่ทำงาน
Dmitry Grigoryev

บันได R-2R เป็นคำแนะนำที่ยอดเยี่ยม!
Dmitry Grigoryev

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