ออกแบบสิ่งจำเป็นเมื่อทำงานกับ 12 บิต ADC


11

ขณะนี้ฉันกำลังออกแบบบอร์ดที่เชื่อมต่อ 12 บิต ADC (MCP3208) กับ Raspberry Pi (นอกเหนือจาก I / O ที่เกี่ยวข้องกับความเร็วต่ำอื่น ๆ ) ส่วนใหญ่จะติดกับเซ็นเซอร์อะนาล็อก (เซ็นเซอร์อุณหภูมิเซ็นเซอร์ระยะ IR และสิ่งที่คล้ายกันในขณะที่ไม่จำเป็นต้องมีความละเอียด 12 บิตเสมอไปมีบางกรณีที่ดีจริง ๆ ที่ได้รับข้อมูลเพิ่มเติม)

ฉันไม่มีประสบการณ์มากกับวงจรแอนะล็อกและไม่มีความเข้าใจที่ดีเกี่ยวกับคณิตศาสตร์และฟิสิกส์พื้นฐานที่เกี่ยวข้อง

ฉันกำลังอ่านคำแนะนำการออกแบบหลายประการเกี่ยวกับ ADC และมักอ่านเกี่ยวกับตัวกรองต่อต้านนามแฝงไดรเวอร์ ADC สำหรับสัญญาณอิมพิแดนซ์สูงเครื่องบินภาคพื้นดินอะนาล็อกการวางร่องรอยในรูปแบบบางอย่างเพื่อลดเสียงรบกวนทำให้อุปกรณ์อิเล็กทรอนิกส์ดิจิตอลความเร็วสูงแยกเท่า เป็นไปได้จาก ADC เพื่อลดเสียงรบกวนการสลับการอ้างอิงแรงดันไฟฟ้าที่แม่นยำและสิ่งอื่น ๆ อีกมากมายที่ฉันยังไม่เข้าใจ

ดังนั้นสิ่งที่ฉันเริ่มสงสัยก็คือถ้ามันทำให้รู้สึกถึงการใช้ 12 บิต ADC ถ้าฉันไม่มีความเชี่ยวชาญในการใช้งานอย่างถูกต้องเพราะฉันอาจหลวม 2 LSBs ต่อไปเพราะการออกแบบวงจรย่อยที่เหมาะสมและควร ไปกับ ADC 10 บิต หรือการออกแบบวงจรที่เหมาะสมที่สุดนั้นไม่สำคัญอย่างยิ่งในอาณาจักร 12 บิตตามที่ฉันเชื่อว่าเป็น

มีสิ่งใดบ้างที่ควรนำไปใช้เพื่อลดเสียงรบกวน อะไรคือสาเหตุที่ใหญ่ที่สุดของสัญญาณรบกวนในแอปพลิเคชันสัญญาณแบบผสมเช่นของฉัน (มีตัวประมวลผล GHz ที่พูดคุยกับ ADC) อะไรคือสิ่งที่จำเป็นต้องใช้จริงในการประยุกต์ใช้ความแม่นยำสูงกว่า (14-16 บิต +)

ฉันอยากรู้ว่าอะไรเป็นสิ่งที่สมเหตุสมผลและจำเป็นที่ฉันควรระวัง


2
เริ่มต้นด้วยสิ่งที่คุณพยายามวัดและความละเอียดที่คุณต้องการแล้วตัดสินใจประเภท ADC และการประมวลผลแบบอะนาล็อกที่คุณต้องการ โปรดอ่านเอกสารข้อมูล ADC ของคุณด้วย คุณจะสูญเสียบิตแม้ว่าคุณจะใช้มันอย่างสมบูรณ์แบบ ค้นหา "ENOB"
Scott Seidman

ปัญหาคือสิ่งที่ฉันจะต้องวัดจะเปลี่ยนแปลงตลอดเวลา บางครั้งฉันจำเป็นต้องเห็นทุกแรงดันไฟฟ้าที่เป็นไปได้บางครั้งแม้แต่ 8 บิตก็เพียงพอ ฉันต้องการโซลูชันที่สามารถรองรับแอปพลิเคชันให้ได้มากที่สุด
PTS

คุณต้องเห็นความเปลี่ยนแปลงเร็วแค่ไหน? (เช่นคุณจะเก็บอัตราการสุ่มตัวอย่างอะไร)
ThreePhaseEel

2
"บางครั้งฉันจำเป็นต้องเห็นทุกแรงดันไฟฟ้าเป็นไปได้บางครั้งแม้แต่ 8 บิตก็เพียงพอแล้ว" จากนั้นความต้องการของคุณจะต้องสามารถ "เห็นทุกแรงดันไฟฟ้าได้" หากคุณต้องการความละเอียด 12 บิตแม้ในบางครั้งคุณต้องออกแบบด้วย 12 บิต ถ้าคุณไปถึง 10 บิตคุณจะไม่ได้ 12 เมื่อต้องการ
WhatRoughBeast

อัตราการสุ่มตัวอย่าง 1Khz + จะดีกว่า แม้ว่าฉันคิดว่าในแอปพลิเคชันส่วนใหญ่ 120 เฮิร์ตจะดีพอ แม้ว่าอัตราการสุ่มตัวอย่างจะต้องเป็นไปได้สำหรับ 8 ช่องทางในเวลาเดียวกัน (ไม่ได้ในเวลาเดียวกัน แต่พวกเขาทั้งหมดจะต้องได้รับการสุ่มอย่างต่อเนื่อง) @ WhatRoughBeast ใช่นั่นคือเหตุผลที่ฉันตัดสินใจเลือก 12 บิต แม้ว่าฉันต้องการคำแนะนำเกี่ยวกับการใช้งานที่นี่
PTS

คำตอบ:


19

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

ระหว่างการออกแบบวงจร

ขั้นแรกในขั้นตอนการออกแบบการอ้างอิงที่เหมาะสมการแยกสัญญาณที่ถูกต้องและไดรฟ์สัญญาณความต้านทานต่ำจะต้องส่งไปยัง ADC เพื่อให้เกิดการแปลงที่ถูกต้อง นอกจากนี้สัญญาณจะต้องถูกกรอง (low-pass ถูกกรองในแอพเครื่องมือเช่นคุณ) เพื่อป้องกัน ADC จากการแปลงความถี่ที่สูงขึ้นเป็น baseband ได้อย่างมีประสิทธิภาพ (แอพ RF สามารถใช้ตัวกรอง frontend ของ ADC + bandpass ที่ช้าเพื่อ Nyquist-downconvert บนมิกเซอร์เฉพาะและ LO)

ทำให้การอ้างอิงของคุณมีเสถียรภาพ

การอ้างอิงมีตั้งแต่เล็กน้อยและน่าสมเพช (เป็นวุ้นที่ไม่ต่อเนื่อง Zener ดีถึง 4 บิต) ถึงบ้า (ฝังเตาอบ IC ฝัง Zeners ใช้ในการใช้งานเครื่องมือวัดประสิทธิภาพสูง) - และข้อกำหนดมักจะไม่ชัดเจนหน่วยผสมใน วิธีที่สับสนสามเณร แผนภูมิในLTC AN82เป็นยาแก้พิษที่มีประโยชน์สำหรับสิ่งนี้ - เนื่องจากแอปพลิเคชันของคุณซึ่ง ADC ของคุณเป็นหน่วย 12 บิตที่มีความสามารถ 11+ ENOB ได้รับการอ้างอิงที่เสถียรและแหล่งจ่าย 5V ฉันจะระบุการอ้างอิงที่แม่นยำถึง 0.02% หรือ ดีกว่าในช่วงอุณหภูมิที่น่าสนใจและเสียง RMS ไม่ได้เป็นข้อกังวลเนื่องจากเป็นเรื่องเกี่ยวกับลำดับความสำคัญน้อยกว่าข้อกำหนดความแม่นยำของคุณ

น่าเสียดายที่ความแม่นยำเริ่มต้น 0.02% โดยไม่มีการตัดแต่งเป็นเรื่องเกี่ยวกับสิ่งที่เริ่มได้รับ ... ค่อนข้างยาก การใช้การอ้างอิง 4.096V ระบุว่าต้องการประสิทธิภาพการทำงานของ ENOB หมายความว่าฉันต้องการเรียกใช้ ADC บนแหล่งจ่ายไฟ 5V ที่เงียบด้วยเครื่องแปลระดับตรรกะเป็น 3.3VI / O ของ Pi และ 4.096V ให้คุณดีสะดวกและมีประโยชน์ 1mV / การนับความสัมพันธ์เรา จำกัดADR4540 , X60003 , MAX6126AASAหรือLTC6655Bแม้ว่าส่วนสุดท้ายจะตัดมันใกล้เพราะมีความแม่นยำเริ่มต้น 0.025% ในขณะที่เทมโก้และฮิสเทรีซีสไม่ได้กังวลเพราะนี่เป็นแอพพลิเคชั่นแบบตั้งโต๊ะที่ฉันเข้าใจและการควบคุมสายและโหลดไม่ใช่ปัญหาที่สำคัญเนื่องจากใช้พลังงานจากแหล่งจ่ายไฟ 5V ที่ควบคุมเช่นเดียวกับ ADC และขับหมุด Vref ยังเป็นปัญหาที่นี่เนื่องจากขาดการตัดแต่ง - สำหรับเรื่องนี้ ADR4540 และ MAX6126AASA เป็นผู้ชนะที่ชัดเจนที่ 25ppm / root-khr และ 20ppm / root-khr ตามลำดับ - ประมาณ 10-1 ในอัตราส่วนที่ต้องการ เพื่อพิจารณาระยะยาวลอยไม่มีนัยสำคัญ (อีกสองส่วนมีระยะยาวประมาณ 50-60ppm / root-khr ทั่วไป)

Decoupling ทุกอย่าง

แผ่นข้อมูล MCP3208 แนะนำตัวเก็บประจุขั้นต่ำ 1µF สำหรับการแยกส่วนเชื่อมต่อจาก Vdd กับระบบภาคพื้นดิน - AGND และ DGND ควรเชื่อมโยงกลับไปยังระบบภาคพื้นดินเดียวกันเช่นกัน ควรใช้ decoupler เซรามิกหรือโพลีเมอร์แทนทาลัมเป็นกลุ่มขนาด 10 minimumF / 10V อย่างน้อยควรใช้บนราง 5V ของบอร์ดเช่นกัน

ด้านบนของนี้อ้างอิงควร decoupled ตามแผ่นข้อมูล - นี้มักจะเป็น 100nF ในการส่งออกที่มี 100nF ในอินพุตนอกเหนือไปจากความจุ decoupling ความจุขนาดใหญ่ใด ๆ แต่ LTC6655 ต้องการตัวเก็บประจุเอาท์พุทขนาดใหญ่กว่ามาก P / N เป็นตัวแยกส่วนที่ใช้งานได้) และ X60003 นั้นจะเลือกในทิศทางตรงกันข้ามเนื่องจากการออกแบบที่ใช้พลังงานต่ำ

อินพุตไดรฟ์ / บัฟเฟอร์ / การกรอง

โชคดีที่มันไม่ยาก - ความแม่นยำ 0.02% แปลเป็น 800µV ของอินพุตสูงสุดและฉันสามารถรับคำสั่งที่ดีกว่าสองเท่าด้วย GBWs ในช่วง MHz ในขณะที่ทำงานบนแหล่งจ่ายไฟ 5V เดียวที่มีอยู่ในปัจจุบัน แอมป์ลอยน้ำและตัดแต่งภายใน AD8630วัสดุเสียงรบกวนต่ำอัตโนมัติศูนย์ตัวเลือกในขณะที่รวดเร็วตัดแต่งภายในแอมป์ต่ำชดเชยรวมOPA4350และOPA4192 ไม่ว่าจะด้วยวิธีใดตัวกรอง Sallen แบบสองขั้วและ Key low-pass anti-aliasing จากแผ่นข้อมูล MCP3208 สามารถใช้งานได้โดยมีความถี่มุมตั้งไว้ที่ 5kHz หรือประมาณ - การออกแบบตัวกรองอื่นอาจทำงานได้เช่นกัน

แหล่งจ่ายไฟและอินเตอร์เฟสดิจิตอล

ข้อมูลจำเพาะ ENOB (จำนวนบิตที่มีประสิทธิภาพ) ของ MCP3208 นั้นขึ้นอยู่กับแหล่งจ่าย - มันทำงานได้ดีขึ้นเมื่อใช้กับแหล่งจ่ายไฟ 5V มากกว่าที่ใช้กับ 2.7-3.3V มันยังต้องวิ่งออกจาก 5V เพื่อใช้การอ้างอิง 4.096V สิ่งนี้ทำให้เกิดปัญหาที่ Pi ใช้ลอจิก 3.3V และไม่ได้รับการยอมรับ 5V ต้องใช้ IC การแปลระดับตรรกะเช่นTXB0104 - ด้าน A ไปที่ Pi ในขณะที่ด้าน B ไปที่ ADC

นอกจากนี้แหล่งจ่ายไฟ 5V ควรมีความสะอาดพอสมควร - ควรใช้ตัวควบคุมเชิงเส้นเพื่อสร้างแรงดันไฟฟ้าที่สูงขึ้น หากไม่มีแรงดันไฟฟ้าที่สูงขึ้นในแอปพลิเคชันสามารถใช้ราง 5V ที่มีอยู่ได้หากเครือข่าย LC decoupling ใช้เพื่อป้องกันสัญญาณรบกวนดิจิตอลจำนวนมากออกจากรางจ่าย ADC และ op amp

เวลาเค้าโครง

: มีสองปุ่มไปยังรูปแบบสัญญาณผสมที่มีประสิทธิภาพจะแบ่งพาร์ทิชันและอุปทาน / ผลตอบแทนรูปแบบ ฉันจะแตะคนที่หัน

ก่อนอื่นฉันจะแบ่งเลย์เอาต์ของบอร์ดออกเป็นสองด้านอย่างประณีต - ด้านดิจิตอลและด้านอะนาล็อก การติดตามแบบดิจิตอลทั้งหมด (อินเทอร์เฟซ SPI ในกรณีของ MCP3208 ที่คุณใช้) ไปที่ด้านดิจิตอลของบอร์ด - ด้านนี้ของบอร์ดยังมีชิปตัวแปลระดับตรรกะและตัวเชื่อมต่อ I / O ไปยัง Pi ด้านอะนาล็อกของบอร์ดมีร่องรอยอะนาล็อกและวงจรทั้งหมด - การอ้างอิงแรงดันไฟฟ้าไปที่นี่และทำเช่นนั้นตัวกรองอินพุต, การป้องกันอินพุตและขั้วต่ออินพุตอะนาล็อก ADC (และตัวเหนี่ยวนำตัวกรองหากคุณใช้ 5V จาก Pi) เป็นองค์ประกอบเดียวที่เชื่อมช่องว่างนี้ - อันที่จริงแล้ว

โปรดทราบว่าชิ้นส่วนทั้งหมดที่ฉันเชื่อมโยงนั้นมีให้ในแพ็คเกจระดับพิทช์หยาบ - ขอแนะนำให้ใช้เลย์เอาต์ด้านเดียวที่มีด้านหลังเนื่องจากมีระนาบ GND ต่อเนื่องหากใช้บอร์ดสองด้านที่นี่ หากค่าใช้จ่ายไม่ใช่การคัดค้านคณะกรรมการสี่ชั้นจะจัดเตรียมระนาบ Vdd แบบอะนาล็อกอย่างต่อเนื่องนอกเหนือจากระนาบกราวด์เช่นเดียวกับที่ว่างสำหรับ "พุดดิ้งพลังงาน" สำหรับด้านตรรกะ 3.3V ของ IC นักแปลระดับตรรกะ อย่างไรก็ตามไม่จำเป็นต้องแยกระนาบกราวด์ในแอปพลิเคชั่นนี้การกำหนดเส้นทางที่เหมาะสมของการติดตามสัญญาณจะทำให้กระแสกลับมาอยู่ในตำแหน่งที่เหมาะสม

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