ฉันจะตัวอย่างสัญญาณอะนาล็อก -2 V ถึง +2 V ด้วยไมโครคอนโทรลเลอร์ PIC ได้อย่างไร


10

ฉันใช้ PIC ไมโครกับ ADC ขนาด 10 บิตเพื่ออ่านจากสัญญาณอะนาล็อกที่มีความถี่น้อยกว่า 300 เฮิร์ตซ์ อย่างไรก็ตามสัญญาณอะนาล็อกนั้นอยู่ในช่วง -2 V และ +2 V ฉันจะกำหนดเงื่อนไขสัญญาณเพื่อให้อยู่ในช่วงที่ใช้งานได้ (สมมติว่าอินพุตไปยัง ADC ต้องเป็นค่าบวก) นอกจากนี้ฉันไม่มีค่าบวกและ แหล่งจ่ายไฟเชิงลบ


3
สำเนาซ้ำที่เป็นไปได้: electronics.stackexchange.com/questions/3105/…
Thomas O



@Kellenjb - คำถามที่คุณเชื่อมโยงไปถึงไม่ได้คำนวณการคำนวณสำหรับกรณีนี้โดยเฉพาะที่แรงดันไฟฟ้าขาเข้ามีทั้งสองทางนอกเหนือจากราง
stevenvh

คำถามต่อไปนี้ถูกปิดเนื่องจากซ้ำซ้อนกับคำถามนี้และมีคำตอบที่เป็นประโยชน์: electronics.stackexchange.com/questions/15985/… , electronics.stackexchange.com/questions/15940/…
Kevin Vermeer

คำตอบ:


14

หมายเหตุสำคัญ:
คำตอบนี้ถูกโพสต์เพื่อแก้ปัญหาสำหรับอินพุต -20V ถึง + 20Vเพราะนั่นคือสิ่งที่ถูกถาม มันเป็นวิธีที่ฉลาด แต่ไม่ทำงานหากขีด จำกัด แรงดันไฟฟ้าขาเข้าอยู่ระหว่างราง

คุณจะต้องปรับแรงดันไฟฟ้าด้วยตัวแบ่งความต้านทานเพื่อให้ได้แรงดันไฟฟ้าระหว่าง -2.5V ถึง + 2.5V และเพิ่ม 2.5V (ฉันสันนิษฐานว่าแหล่งจ่ายไฟ 5V สำหรับ PIC ของคุณ)

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

แรกนี้:

R1 เป็นตัวต้านทานระหว่างและ , R2 จะต้านทานระหว่างและและ R3 เป็นต้านทานระหว่างและGND V O U T + 5 V V O U T V O U T G N DVINVOUT
+5VVOUT
VOUTGND

มีกี่สิ่งที่ไม่ทราบ สาม, R1, R2 และ R3 ไม่มากนักเราสามารถเลือกหนึ่งค่าได้อย่างอิสระและอีกสองค่าขึ้นอยู่กับค่านั้น ลองเลือก R3 = 1k วิธีการทางคณิตศาสตร์ในการหาค่าอื่น ๆ คือการสร้างชุดสมการสองตัวพร้อมกันจากสอง ( , ) คู่และแก้หาค่าตัวต้านทานที่ไม่รู้จัก คู่ใด ๆ ( , ) จะทำ แต่เราจะเห็นว่าเราสามารถทำให้สิ่งต่าง ๆ ง่ายขึ้นอย่างมากโดยการเลือกคู่เหล่านั้นอย่างรอบคอบนั่นคือค่าที่สุด: ( , ) และ ( , ) V O U T V I N V O U T + 20 V + 5 V - 20 V 0 VVINVOUTVINVOUT+20V+5V20V0V

กรณีแรก: , โปรดทราบว่า (และนี่คือกุญแจสำคัญในการแก้ปัญหา!) ปลายทั้งสองของ R2 ดูจึงไม่มีแรงดันตกและไม่มีกระแสไฟฟ้าผ่าน R2 นั่นหมายความว่าจะต้องเหมือนกับ (KCL) {R1} เรารู้ว่าปัจจุบันผ่าน R1 และยังแรงดันไฟฟ้ามากกว่านั้นเพื่อให้เราสามารถคำนวณความต้านทาน: R1 พบว่าไม่รู้จักครั้งแรกของเรา! V O U T = + 5 V + 5 V I R 1 I R 3 I R 3 = + 5 V - 0 VVIN=+20VVOUT=+5V
+5VIR1IR3
R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
R1=+20V5V5mA=3kΩ

กรณีที่สอง: , สิ่งเดียวกับที่เกิดขึ้นกับ R2 ตอนนี้คือ R3: ไม่มีแรงดันตกจึงไม่มีกระแส อีกครั้งตาม KCL ตอนนี้ ={} {} เรารู้ว่าปัจจุบันผ่าน R2 และยังแรงดันไฟฟ้ามากกว่านั้นเพื่อให้เราสามารถคำนวณความต้านทาน: R2 พบว่าเราไม่ทราบที่สอง! V O U T = 0 V I R 1 I R 2 I R 1 = - 20 V - 0 VVIN=20VVOUT=0V
IR1IR2
R2=+5V-0VIR1=20V0V3kΩ=6.67mA=IR2
R2=+5V0V6.67mA=0.75kΩ

ดังนั้นวิธีการแก้ปัญหาคือ1k R1=3kΩ,R2=0.75kΩ,R3=1kΩ

เหมือนที่ผมบอกว่ามันเป็นเพียงอัตราส่วนระหว่างค่าเหล่านี้ซึ่งเป็นสิ่งสำคัญดังนั้นฉันอาจรวมทั้งรับ4k เราสามารถตรวจสอบโซลูชันนี้กับคู่อื่น ( , ) เช่น ( , ) R1 และ R3 เป็นแบบขนาน (ทั้งคู่มี +2.5V-0V เหนือพวกมันดังนั้นเมื่อเราคำนวณค่ารวมของพวกเขาเราจะพบค่าของ R2 และค่าที่เราต้องได้รับจาก ! ทางออกของเราถูกต้องแน่นอน [QC stamp ไปที่นี่]V I N V O U T 0 V 2.5 V 0.75 k Ω + 2.5 V + 5 VR1=12kΩ,R2=3kΩ,R3=4kΩ
VINVOUT0V2.5V0.75kΩ+2.5V+5V

สิ่งสุดท้ายที่ต้องทำคือเชื่อมต่อเข้ากับ ADC ของ PIC ADCs มักจะมีความต้านทานอินพุตค่อนข้างต่ำดังนั้นสิ่งนี้อาจรบกวนสมดุลที่คำนวณอย่างระมัดระวังของเรา ไม่มีอะไรต้องกังวลเกี่ยวกับ แต่เราก็ต้องมีการเพิ่ม R3 เพื่อให้1k สมมติว่าจากนั้นจากนี้เราพบR3 R 3 / / R A D C = 1 k Ω R A D C = 5 k Ω 1VOUTR3//RADC=1kΩRADC=5kΩ R3=1.25kΩ11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ


แก้ไข
ตกลงนั่นฉลาดและเรียบง่ายมากแม้ว่าฉันจะพูดด้วยตัวเองก็ตาม ;-) แต่ทำไมถึงไม่ทำงานถ้าแรงดันไฟฟ้าขาเข้าอยู่ระหว่างราง? ในสถานการณ์ข้างต้นเรามักจะมีตัวต้านทานที่ไม่มีกระแสไหลผ่านดังนั้นเพื่อติดตาม KCL กระแสที่เข้าสู่โหนดผ่านตัวต้านทานตัวหนึ่งจะออกจากตัวต้านทานตัวอื่น นั่นหมายความว่าแรงดันไฟฟ้าหนึ่งค่าจะต้องสูงกว่าและค่าอื่น ๆ ที่ต่ำกว่า หากแรงดันไฟฟ้าทั้งสองมีค่าต่ำกว่าจะมีกระแสไหลออกจากโหนดนั้นเท่านั้นและ KCL จะห้ามไม่ให้ V O U TVOUTVOUT


-20V จะส่งผลให้ต่ำกว่า 0V เล็กน้อย
Olin Lathrop

(และอาจแลงลาทรอพ): ฉันพยายามค้นหาวิธีที่คุณค้นหาคุณค่าของตัวต้านทาน 7k ฉันสังเกตเห็นว่าเมื่อแรงดันไฟฟ้าอินพุทคือ 2.5V กระแสจะไม่ไหลไปยังโหนดไม่ว่าค่าตัวต้านทานจะเป็นเท่าใด แต่ 2.5V ในนั้นไม่ได้อยู่ในช่วงกลางขณะที่ 2.5V ในนั้นก็เกินไป ไม่ได้แปลว่าตัวแบ่งควรมีตัวต้านทานที่แตกต่างกันสองตัว ถ้าคุณรู้ว่าฉันหมายถึงอะไร.
Federico Russo

บางทีนั่นอาจอธิบายความคิดเห็นของ @Olin Lathrop ด้วย
Federico Russo

@ เฟรเดริโก: ใช่มันจะไม่สมมาตรอย่างสมบูรณ์ ฉันพูดถึงเรื่องนี้ในคำตอบของฉัน เป็นไปได้ที่จะปรับตัวต้านทานสามตัวเพื่อจับคู่แผนที่ -20 ถึง +20 โวลต์เป็น 0 ถึง 5 โวลต์ แต่ทั้งสตีเว่นและฉันแสดงให้เห็นกรณีที่ง่ายกว่าที่คุณได้รับ litle assymetry
Olin Lathrop

6

วิธีที่ง่ายที่สุดคือใช้ "ตัวต้านทานตัวต้านทาน"

คุณไม่ได้บอกว่าแรงดันไฟฟ้า PIC นี้ทำงานที่ใดดังนั้นช่วงอินพุต A / D จึงลองใช้ 5V เป็นตัวอย่าง ช่วงแรงดันไฟฟ้าอินพุตของคุณคือ 40V และเอาต์พุต 5V ดังนั้นคุณต้องการบางอย่างที่ลดทอนอย่างน้อย 8 คุณต้องให้ผลลัพธ์อยู่กึ่งกลางที่ 1/2 Vdd ซึ่งเป็น 2.5V ในขณะที่แรงดันอินพุตของคุณอยู่ที่ 0V .

สามารถทำได้ด้วยตัวต้านทาน 3 ตัว ปลายด้านหนึ่งของตัวต้านทานทั้งสามเชื่อมต่อกันและเข้ากับพินอินพุต A / D ปลายอีกด้านของ R1 ไปที่สัญญาณอินพุต R2 ไปที่ Vdd และ R3 ไปที่กราวด์ ตัวแบ่งความต้านทานถูกสร้างขึ้นโดย R1 และการรวมกันแบบขนานของ R2 และ R3 คุณสามารถปรับ R2 และ R3 ให้อยู่กึ่งกลางของช่วงผลลัพธ์ที่ 2.5V แต่สำหรับความง่ายในการอธิบายสิ่งนี้เราจะอยู่กับ assymetry เล็กน้อยและลดทอนอีกเล็กน้อยเพื่อให้แน่ใจว่าปลายทั้งสองจะถูก จำกัด ไว้ที่ช่วง Vss-Vdd

สมมติว่า PIC ต้องการให้สัญญาณอะนาล็อกมีความต้านทาน 10 kΩหรือน้อยกว่า เพื่อความเรียบง่ายลองสร้าง R2 และ R3 20 kΩ อิมพิแดนซ์ให้อาหาร PIC จะไม่มากไปกว่าการรวมกันแบบขนานของเหล่านั้นคือ 10 kΩ ในการรับการลดทอน 8 R1 จะต้องเป็น 7 คูณ R2 // R3 ซึ่งก็คือ 70 kΩ อย่างไรก็ตามเนื่องจากผลลัพธ์จะไม่สมมาตรอย่างแท้จริงเราจึงต้องลดทอนอีกเล็กน้อยเพื่อให้แน่ใจว่า -20V จะไม่ส่งผลให้น้อยกว่า 0V ใน PIC นั่นต้องใช้การลดทอนของ 9 ดังนั้น R1 ต้องมีอย่างน้อย 8 เท่า R2 / R3 ซึ่งก็คือ 80 kΩ ค่ามาตรฐาน 82 kΩจะยอมให้มีการตกและขอบ แต่คุณยังคงได้รับช่วง A / D ส่วนใหญ่เพื่อวัดสัญญาณดั้งเดิม

ที่เพิ่ม:

นี่คือตัวอย่างของการค้นหาวิธีแก้ไขปัญหาที่คล้ายกัน สิ่งนี้ไม่มีความแตกต่างและมีความต้านทานเอาต์พุตเฉพาะที่ระบุ รูปแบบการแก้ปัญหานี้สามารถใช้งานได้เสมอเมื่อช่วง A / D อยู่ในช่วงแรงดันไฟฟ้าอินพุตทั้งหมด


+1 เนื่องจากจำนวนชิ้นส่วนไปเป็นวิธีที่ง่ายที่สุดในการสร้างสิ่งที่จำเป็น หมายเหตุบางประการ: มันเป็นไปได้ที่จะดูแล asymetry ในโค้ดของ uC และโดยการเพิ่มตัวเก็บประจุหนึ่งตัวในแบบขนานกับตัวต้านทานที่ไปยัง GND ทำให้สัญญาณสามารถถูกปรับให้เรียบ (low-pass filter) ความถี่มุม คือ 1 / (2 * pi R C) โดยที่ R คือค่าขนานของตัวต้านทานทั้งสามตัวและ C คือค่าของหมวกที่เพิ่ม (ADC ต้องมี cap อยู่แล้ว!) โปรดคำนวณความแม่นยำของการตั้งค่านี้โดยพิจารณาจากความคลาดเคลื่อนทั้งหมด (ข้อผิดพลาด ADC ใน +/- สูงสุด LSB ข้อผิดพลาดอ้างอิง ... ) - อาจแย่กว่าที่คาดไว้
zebonaut

@zebonaut - ฉันทำการคำนวณอีกครั้งและอธิบายทุกขั้นตอนอย่างละเอียดในคำตอบที่อัปเดตแล้ว (มีความซับซ้อนน้อยกว่าที่ดู!) มันให้การแมปที่แน่นอนของ (-20V .. + 20V) ถึง (0V .. + 5V)
stevenvh

@zebonaut: ตัวเก็บประจุอาจมีประโยชน์ในฐานะตัวกรอง anti-aliasing แต่มันไม่ได้ทำอะไรเกี่ยวกับ assymetry ฉันไม่คิดว่า assymetry เล็กน้อยเป็นเรื่องใหญ่ มันง่ายพอที่จะดูแลเฟิร์มแวร์ตามที่คุณพูด
Olin Lathrop

หากคุณต้องการชดเชยความไม่สมดุลในซอฟต์แวร์คุณจะต้องคำนวณฟังก์ชันการถ่ายโอนที่แน่นอน หากคุณต้องทำสิ่งนี้ทำไมไม่ลองใช้ค่าตัวต้านทานที่ถูกต้องตั้งแต่แรก (ไม่ใช่ค่าจากคำตอบแรก (ผิดพลาด) ของฉัน!)
stevenvh

@stevenvh: ไม่มีอะไรผิดปกติกับการใช้ค่าตัวต้านทาน "ขวา" ฉันรู้ว่าการแมปที่แน่นอนนั้นเป็นไปได้ (อย่างที่ฉันพูดถึงในคำตอบของฉัน) แต่ตัดสินใจที่จะไม่เข้าสู่ความซับซ้อนของการคำนวณและตอบคำถามที่ง่ายกว่าในเชิงแนวคิด ไม่ว่าในกรณีใดคุณจะต้องลดทอนลงอีกเล็กน้อยเพื่อใช้ในการตรวจสแล็ปและอาจต้องปรับเทียบในเฟิร์มแวร์อยู่ดี
Olin Lathrop

2

นี่คือวงจรมาตรฐานสำหรับสิ่งนั้น คุณต้องปรับขนาดตัวต้านทานสำหรับความต้านทานที่คุณต้องการ


คุณจำเป็นต้องตรวจสอบให้แน่ใจว่าความต้านทานแหล่งที่มาของคุณค่อนข้างต่ำถ้าใช้มัน?
Nick T

Leon ทำไมไม่ใช้ตัวเก็บประจุแทนตัวต้านทาน 1k
stevenvh

มันเป็นวิธีการแก้ปัญหา DC- คู่ จำเป็นต้องมีตัวต้านทานแบบอนุกรมสำหรับการทำงานที่เหมาะสม
Leon Heller

3
@ Leon Heller: ฉันคิดว่านี่จะเป็นคำตอบที่ดีกว่าถ้าคุณอธิบายวิธีหาค่าที่เหมาะสมสำหรับตัวต้านทาน
Federico Russo

2

หากสัญญาณไม่ใช่ DC หรือถ้าการอ้างอิง DC นั้นไม่สำคัญสัญญาณจะถูกควบคู่ไปกับอินพุตของ ADC

อีกทางเลือกหนึ่งถ้าหาก PIC ของคุณลอยอยู่คุณสามารถผูกสัญญาณกราวด์ของคุณไว้ที่ 1/2 VDD ของ PIC


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

ไม่ได้ระบุแรงดันไฟฟ้าของแหล่งจ่าย - มันจะทำงานกับ 5V ADC หากคุณใช้ Vdd ที่เล็กกว่าคุณจะต้องปรับขนาดอินพุต มันจะเปลี่ยนเป็นวงจรของ Leon พร้อมกับตัวเก็บประจุ ณ จุดนั้น
W5VO

2

วงจรต่อไปนี้ควรทำงาน:

3.3V
 +
 |
 \
 / 1k
 \
 |
 +-- ADC input
 |
 \
 /  1k
 \
 |
 +-- Signal input (-2V to +2V)

มันเป็นตัวแบ่งที่มีศักยภาพ ที่ -2V, เอาต์พุตจะเป็น 0.65V; ที่ + 2V, 2.65V

เสียงทั้งหมดบนราง 3.3V จะถูกถ่ายโอนไปยังอินพุตดังนั้นให้ใช้การอ้างอิงแรงดันไฟฟ้าที่ดีเพื่อลดปัญหานี้

สิ่งนี้จะทำงานกับวัสดุอื่น ๆ ด้วย แต่การชดเชยจะเปลี่ยน


ใช่ใช้งานได้ แต่จะดีถ้าใช้ ADC แบบเต็ม :-)
stevenvh

@stevenh คุณสามารถทำได้โดยใช้การอ้างอิง 0.65V และ 2.65V แม้ว่าคุณอาจใช้วงจรของคุณเช่นกัน
โทมัสโอ

VREF+VREFGND

@stevenh PIC24, dsPIC และ PIC32 แน่นอนมี Vref- ฉันคิดว่า 18F บางคนก็ทำเช่นกัน
โทมัสโอ

ใช่ฉันไม่รู้จักพวกเขาทั้งหมด (มีจำนวนมาก ) OP ไม่ได้บอกว่าเขาใช้ส่วนไหนและดูเหมือนว่าเขาจะหายไปดังนั้นจึงไม่มีประโยชน์ที่จะถามเขา
stevenvh

1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

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