มาดูภาพรวมระดับสูงของสิ่งที่ออสซิลโลสโคปมี:
ก่อนอื่นเรามีส่วนหน้าแบบอะนาล็อก ที่นี่เรามีเครือข่ายจับคู่อิมพีแดนซ์สำหรับโพรบ (แต่โพรบจะต้องมีการจับคู่ส่วนความจุมากเกินไป) ส่วนการลดทอน (สำคัญมากดังนั้นเราจึงไม่โหลด ADC มากเกินไปหรือปล่อยให้แรงดันไฟฟ้าสูง) ตัวแปลงอนาล็อกเป็นดิจิตอล ฉันจะไม่พูดเกี่ยวกับเรื่องนี้มากเกินไปเนื่องจากฉันไม่ค่อยเก่งเรื่องอนาลอก แต่ประเด็นคือ: ไม่มีอะไรที่เราสามารถทำได้กับ Pi ในส่วนนี้
ต่อไปเรามีส่วนแปลงสัญญาณอนาล็อกเป็นดิจิตอล คุณจะต้องมีอย่างน้อยหนึ่ง ADC สำหรับแต่ละช่อง สามารถใช้มากขึ้นสำหรับอัตราตัวอย่างที่สูงขึ้น ในขอบเขตดั้งเดิม ADC เชื่อมต่อกับอุปกรณ์ ASIC หรือ FPGA มีการใช้งานเพราะคอมพิวเตอร์แบบดั้งเดิมนั้นไม่เพียงพอในเวลาจริง (และไม่สับสนแบบเรียลไทม์ด้วยความรวดเร็ว!) เพื่อประมวลผลข้อมูลจาก ADC ข้อมูลนั้นจะถูกเก็บไว้ใน RAM ในบางประเภท อุปกรณ์บางตัวจะใช้ RAM แบบคงที่, ขณะที่บางอุปกรณ์จะใช้ RAM แบบไดนามิก โดยทั่วไปแล้ววิธี SRAM นั้นเป็นแบบดั้งเดิมและเห็นได้ในผู้ผลิตชื่อใหญ่ในขณะที่การใช้ DRAM นั้นดูเหมือนจะเป็นวิธีที่ใหม่กว่าที่เห็นในหน่วยออกแบบที่ถูกกว่าของจีน
จำนวน RAM และความเร็วจะกำหนดจำนวนตัวอย่างที่สามารถจัดเก็บได้ เกือบทุก ADC จะเป็น 8 บิต ADC ดังนั้นสำหรับหนึ่ง megasample เราจะต้องใช้ 8 b คูณ 100000 = 8 Mb หรือ RAM 1 MB สำหรับหนึ่ง MSa / s เราจะต้องใช้ RAM ซึ่งสามารถทำงานได้ที่ความเร็วนั้น วันนี้ควรจะง่ายต่อการได้รับ FPGA มักจะขับ RAM โดยตรงและมีหน้าที่รับผิดชอบในการจัดเก็บข้อมูล มันทำงานได้โดยการเติมหน่วยความจำตัวอย่างในขณะที่ยังมีห้องว่างและเขียนทับมันเมื่อมันเต็ม เมื่อมี ADC หลายตัวต่อแชนเนล FPGA จะตั้งค่าดังกล่าวเพื่อเริ่มการสุ่มตัวอย่างก่อนจากนั้นในนาฬิกาถัดไปที่สองเป็นต้น เมื่อเสร็จสิ้นการสุ่มตัวอย่างตัวอย่างของ ADC แรกจะถูกเขียนลงในหน่วยความจำก่อนจากนั้นจึงสุ่มตัวอย่าง ADC ที่สอง สิ่งนี้จะทำให้ดูเหมือนว่า ADC กำลังสุ่มตัวอย่างเร็วขึ้น
จุดต่อไปในส่วนนี้คือตัวอย่างควรมีระยะเวลาเท่ากัน นี่เป็นปัญหาหลักของการใช้พีซีในออสซิลโลสโคปและสาเหตุที่ FPGA และ ASIC เด่นกว่า หากตัวอย่างบางส่วนมาช้าหรือเร็วภาพที่แสดงบนหน้าจอจะไม่ถูกต้อง
ในส่วนนี้เราจะเห็นการใช้ Pi เป็นไปได้ครั้งแรก หากอัตราตัวอย่างต่ำเพียงพอเราอาจสามารถขับ ADC โดยตรงจาก Pi และเก็บผลลัพธ์ไว้ใน RAM ของ Pi เราสามารถไปได้เร็วแค่ไหนขึ้นอยู่กับวิธีที่ ADC เชื่อมต่อกับ Pi และวิธีที่ Pi ทำกับ I / O จากสิ่งที่ฉันได้อ่านความเร็วสูงสุดของพอร์ต I ^ 2C ของ Pi คือ 150 MHz (เป็นเรื่องง่ายที่จะประสบความสำเร็จใน GNU / Linux เป็นคำถามอื่น) ในขณะที่ความเร็วสูงสุดมาตรฐานคือ 5 MHz และ SPI ความเร็วสูงสุดใน Pi คือ 250 MHz ฉันไม่แน่ใจว่าความเร็วมาตรฐานสูงสุดของ SPI คืออะไร แต่ฉันคาดว่ามันจะอยู่ในช่วง 100 MHz ที่สูงสุด
ดังนั้นในทางทฤษฎีเรามีความเร็วมากพอที่ Pi จะเรียกใช้ ADC ในช่วง MSa / s ต่ำ ฉันรู้สึกว่าความเร็ว RAM จะไม่เป็นปัญหาที่นี่ แต่ฉันไม่มีข้อมูลที่จะสำรองข้อมูล หากเป็นเช่นนั้นเราจะได้รับประโยชน์มากจากขอบเขตปกติ: จะมีหน่วยความจำการจับภาพจำนวนมาก ตัวอย่างเช่นหากเราอุทิศ RAM ขนาด 32 MiB ให้กับโปรแกรมสำหรับหน่วยความจำตัวอย่างและเรามีสองช่องทางนั่นจะทำให้เรามี 16 MiB สำหรับแต่ละช่องหรือมากกว่า 134 Mb หรือ 134 megasamples ต่อช่อง นั่นคือสิ่งที่แม้กระทั่งทุกวันนี้ออสซิลโลสโคปจำนวนมากยังไม่มี
ข้อเสียคือเราต้องการการแก้ไขอย่างหนักในระบบปฏิบัติการเพื่อให้สามารถสุ่มตัวอย่างได้อย่างแม่นยำที่นี่ ฉันไม่มีประสบการณ์กับ Linux แบบเรียลไทม์ดังนั้นฉันไม่รู้เลยว่ามันจะง่ายแค่ไหน
อย่างไรก็ตามเรามาถึงขั้นตอนต่อไป ดังนั้นเรามีระบบสุ่มตัวอย่างที่เติมแรม ส่วนถัดไปคือทริกเกอร์ ทริกเกอร์เกี่ยวข้องอย่างใกล้ชิดกับอัตราการรีเฟรชหน้าจอ สิ่งที่มันทำคือการหาตัวอย่างที่น่าสนใจและเก็บไว้ในหน่วยความจำ เมื่อขอบเขตทริกเกอร์มันจะทำการสุ่มตัวอย่างหลังจากทริกเกอร์จนกระทั่งหน่วยความจำเต็มและจากนั้นจะส่งไปประมวลผลและแสดงบนหน้าจอ ในขณะที่กำลังประมวลผลข้อมูลระบบการสุ่มตัวอย่างหากมักจะหยุดและรอข้อมูลที่จะแสดง นั่นคือเหตุผลที่ขอบเขตต่ำสุดมีอัตราการรีเฟรชที่ต่ำในขณะที่ขอบเขตระดับสูงจะมีอัตราการรีเฟรชที่สูงเป็นพิเศษและใช้เวลาน้อยลงในการรอข้อมูลที่จะแสดง
ในส่วนนี้มักจะมี ASIC หรือ FPGA อื่นที่จะทำการประมวลผลสัญญาณในตัวอย่างการถอดรหัสโปรโตคอลหากขอบเขตรองรับและจริง ๆ แล้วขับหน้าจอเอง
นี่คือส่วนที่ฉันสามารถมองเห็น Pi สามารถส่องแสงได้ มันสามารถขับเคลื่อนจอแสดงผลขนาด 1920x1080 ที่ดี (ในขณะที่ขอบเขตมักจะอยู่ในพื้นที่ย่อย 800x600) และสามารถทำการถอดรหัสโปรโตคอลได้อย่างดี ปัญหาเดียวที่ฉันเห็นคือความเร็วและการประมวลผลจะส่งผลต่อเวลาที่ระงับไว้อย่างไร ถ้าเราไปอัตราการรีเฟรชที่ต่ำเราก็สามารถใช้เครื่องวิเคราะห์ตรรกะที่ดีได้
ในที่สุดคำเกี่ยวกับออสซิลโลสโคป USB และสาเหตุที่ USB ไม่ดีโดยทั่วไปสำหรับโครงการประเภทนี้: ออสซิลโลสโคปแบบ USB ดั้งเดิมทำการป้อนข้อมูลและการสุ่มตัวอย่างและส่งข้อมูลการสุ่มตัวอย่างไปยังพีซีเพื่อการประมวลผล โดยทั่วไปสิ่งที่คล้ายกันมากก็จะทำกับ Pi เช่นกัน โดยปกติแล้วแอปพลิเคชั่นพีซีได้รับการออกแบบมาไม่ดีและเต็มไปด้วยข้อบกพร่อง ส่วนที่ไม่ดีถัดไปคือตัว USB มันโฆษณาว่าเป็นรถเร็วซึ่งสามารถทำความเร็ว 480 Mb / s ในโหมด "Hi-Speed" ความจริงก็คือมันหายากมากที่จะหาคอนโทรลเลอร์ USB ที่สามารถรองรับความเร็วสูงเช่นนี้ (โดยเฉลี่ยดูเหมือนจะอยู่ที่ประมาณ 250 Mb / s จากสิ่งที่ฉันเคยเห็น) และเป็นโปรโตคอลที่ไม่เหมาะกับของจริง แอปพลิเคชันเวลา ครั้งแรกมันถูกแชร์ระหว่างอุปกรณ์ทั้งหมดบนฮับ (และ Pi มีพอร์ต USB เพียงพอร์ตเดียวซึ่ง Ethernet + USB Hub เชื่อมต่ออยู่) มีค่าใช้จ่ายค่อนข้างสูง (เมื่อเปรียบเทียบกับ SPI) และมีเวลาแฝงสูง (โปรดจำไว้ว่าที่ 1 MSa / s แต่ละตัวอย่างมีระยะเวลาเพียง 1 ,s ดังนั้นเราต้องมีหน่วยความจำบนบอร์ดของเราเนื่องจากเราไม่สามารถส่งตัวอย่างแบบเรียลไทม์ ผ่าน USB) ในที่สุดการใช้ USB จะทำให้ส่วนการเก็บข้อมูลเป็นขอบเขตของออสซิลโลสโคป USB อีกตัวและนั่นคือสิ่งที่เราสูญเสียผลประโยชน์ใด ๆ จากการใช้ Pi: คอมพิวเตอร์เดสก์ท็อปแบบดั้งเดิมนั้นมีความธรรมดามากขึ้นเร็วกว่าง่ายกว่า
แก้ไข
ฉันได้อ่านโพสต์ล่าสุดโดย Gert van Loo และตามที่เขาพูดอัตราจริงของ Pi I ^ 2C คือ 400 kHz และ SPI คือ 20 MHz