การวัดเวลาที่แม่นยำมาก


13

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

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

ไมโครคอนโทรลเลอร์อื่น ๆ จะทำสิ่งนี้ดีกว่าไหม สามารถทำได้ด้วย AVR หรือไม่


2
ฉันคิดว่าคุณกำลังพูดถึงความแม่นยำไม่ใช่ความแม่นยำ ถ้าคุณมีความแม่นยำระดับนาโนวินาที แต่นาฬิกาต้นแบบปิดลง 10% การวัดนั้นไม่แม่นยำ
Kaz

พัลส์ทั้งหกนี้ไกลแค่ไหนกัน? พวกเขามาถึงโดยทั่วไปหรือหกคน?
starblue

พวกเขามีอินพุตของตัวเองทั้งหมด พัลส์สามารถมาได้พร้อมกันในบางครั้ง แต่มักจะมาในเวลาที่ต่างกัน
Kestis

คำตอบ:


8

ความเร็วของไมโครคอนโทรลเลอร์ไม่ได้เป็นปัจจัย จำกัด เสมอไป MSP430 อาจเป็นวิธีการแก้ปัญหาที่เหมาะสมไม่ใช่เพราะความจริงแล้วมันทำงานได้สูงถึง 25MHz แต่เนื่องจากอุปกรณ์ MSP430 หลายเครื่องมีอุปกรณ์ต่อพ่วง Timer D ซึ่งเปิดใช้งานได้สูงสุด 4ns (256MHz) นี่เร็วกว่าไมโครคอนโทรลเลอร์เกือบทุกตัวที่นั่น แม้แต่ STM32 ในรุ่นล่าสุด (F4) ก็สามารถทำได้เพียง 180MHz

ตัวจับเวลา D มีให้ในอุปกรณ์ MSP430F51x1 และ MSP43051x2 เช่น MSP430F5131

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


ความเลวของฉันยังไม่สมบูรณ์ RTFM ของ MSP430 ส่วนใหญ่เป็นเพราะเว็บไซต์ของ TI กระตุ้นให้เกิดความเกลียดชังพาวิลเวียน
John U

@JohnU: ไม่เคยมีปฏิกิริยาเช่นนั้น ความจริงก็คือ OP ไม่ได้ระบุข้อมูลมากนักเกี่ยวกับสิ่งที่เขาทำดังนั้นจึงเป็นการยากที่จะให้คำแนะนำที่เหมาะสม
Gustavo Litovsky

การประมวลผลไม่ใช่ปัญหา มีหลายวินาทีในการทำการคำนวณเมื่อมีการบันทึกเวลาและอัลกอริทึมไม่ซับซ้อน MSP430 หนึ่งอันสามารถจัดการกับพัลส์ทั้งหกได้หรือควรมีมากกว่านั้น?
Kestis

@Kestis: Timer D มีการจับภาพ 6 รายการเปรียบเทียบการลงทะเบียนและ MSP430 บางตัวมีมากกว่าหนึ่งโมดูล Timer D ดังนั้นมันควรจะตรงกับความต้องการของคุณ
Gustavo Litovsky

4

กำหนดเวลาถึงความละเอียด 100ns ต้องใช้ตัวจับเวลาทำงานที่ 10MHz ไมโครคอนโทรลเลอร์หลายคนควรสามารถรันตัวจับเวลาได้อย่างรวดเร็ว

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

หากพวกเขาทั้งหมดอยู่ในสายเดียวกันนั้นอาจเป็นไปได้ที่จะทำสิ่งนี้อย่างถูกต้องกับ MCU ใด ๆ ที่มีตัวจับเวลา 10MHz เดียว อย่างไร้เดียงสารหัสในการทำเช่นนี้จะมีลักษณะดังนี้:

wait for trigger signal
reset timer

wait for first signal
save timer value
reset timer

....

wait for sixth signal
save timer value
reset timer

ปัญหาคือใช้เวลาในการรีเซ็ตตัวจับเวลา สิ่งนี้ทำให้เกิดปัญหาสองประการ:

  1. เวลาที่วัดได้จะผิดประมาณ 100ns ขึ้นอยู่กับการใช้งานของคุณ อย่างไรก็ตามพวกเขาควรจะผิดอย่างสม่ำเสมอ IE ผิดด้วยจำนวนเดียวกันทุกครั้ง ซึ่งหมายความว่าคุณสามารถชดเชยได้อย่างง่ายดายโดยเพิ่มจำนวนเล็กน้อยในการวัดแต่ละครั้ง

  2. จะมีเวลาน้อยที่สุดที่คุณสามารถวัดได้ หากชีพจรใดถึง 100ns หลังจากที่ก่อนหน้านี้แล้วคุณอาจจะพลาด ฉันไม่รู้ว่ามีอะไรที่คุณสามารถทำได้เกี่ยวกับเรื่องนี้ในซอฟต์แวร์ คุณจะต้องหาไมโครคอนโทรลเลอร์ที่สามารถจัดการพัลส์หลายตัวในฮาร์ดแวร์


ไมโครคอนโทรลเลอร์ตัวใดที่สามารถจัดการกับพัลส์หลายตัวในฮาร์ดแวร์ The Cypress PSoC ! นี่คือไมโครคอนโทรลเลอร์ซึ่งประกอบด้วยบล็อคดิจิตอลที่กำหนดค่าได้ซึ่งหมายความว่าคุณสามารถมีตัวจับเวลาแยกต่างหาก 6 ตัววิ่งแต่ละตัวที่ 60MHz ให้ความละเอียดที่ดีกว่า 20ns

6 ตัวจับเวลา PSoC Cypress

นี่คือตัวอย่างที่ฉันล้มลงอย่างรวดเร็วเพื่อแสดงให้คุณเห็นสิ่งที่คุณสามารถทำได้ ฉันมีตัวจับเวลา 6 ตัวแยกกันทั้งหมดวิ่งออกจากนาฬิกาบัสซึ่งสามารถสูงถึง 67MHz มีพินทริกเกอร์ซึ่งเริ่มการทำงานของตัวจับเวลาทั้งหมดและหมุดอื่น ๆ 6 อันแต่ละอันทำให้เกิดเหตุการณ์การจับภาพในตัวจับเวลา การลงทะเบียนสถานะอนุญาตให้โค้ดของคุณตรวจสอบตัวจับเวลาที่จับชีพจรได้ รหัสสามารถอ่านค่าจากตัวนับ


PSoC นั้นน่าสนใจมาก อย่างไรก็ตามฉันชอบ AVR หรือ MSP430 เพราะมันเป็นเรื่องธรรมดามากกว่า
Kestis

0

คำตอบที่ได้รับการแก้ไข : ออสซิลโลสโคปจัดเก็บข้อมูลดิจิตอลที่รวดเร็วหรืออุปกรณ์ตัวนับความถี่

คำตอบเก่า :

กล่าวง่ายๆว่า "ไมโครคอนโทรลเลอร์ที่เร็วที่สุดที่คุณสามารถหาได้" เพราะยิ่งนาฬิกา / การสุ่มตัวอย่างเร็วขึ้นเท่าไหร่คุณก็ยิ่งมีความแม่นยำมากขึ้นเท่านั้น MSP430 ไม่ใช่อุปกรณ์ที่รวดเร็ว

STM32 นั้นมีขนาด 32 บิตและจะทำงานได้เร็วขึ้นรวมถึงมีบอร์ดและเครื่องมือ dev ราคาถูกในทำนองเดียวกัน แต่แม้จะค่อนข้างช้าเมื่อเทียบกับของที่มีประสิทธิภาพมากกว่า (Raspberry Pi @ 800MHz - 1GHz (Overclocked)) โดยทั่วไปแล้วยิ่งคุณใช้ตัวประมวลผลที่ซับซ้อนมากขึ้นเร็วเท่าไรก็จะทำให้เกิดการแลกเปลี่ยนเรียนรู้ได้

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


โดยพื้นฐานแล้วมีตัวจับเวลาประเภทอื่น ๆ นอกเหนือจากไมโครคอนโทรลเลอร์ที่สุ่มสัญญาณในลูป
Nick Alexeev

และมันจะช่วยได้ถ้าไมโครคอนโทรลเลอร์มีออสซิลเลเตอร์ / คริสตัลแนบภายนอกที่แม่นยำมาก
BenjiWiebe

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