Chúng ta hãy có một cái nhìn tổng quan cấp cao về những gì một máy hiện sóng có:
Đầu tiên chúng ta có mặt trước tương tự. Ở đây chúng ta có mạng kết hợp trở kháng cho các đầu dò (nhưng các đầu dò cũng sẽ phải có một phần khớp điện dung), phần suy giảm (rất quan trọng, vì vậy chúng ta không làm quá tải ADC hoặc cho điện áp cao vào), kích hoạt và kết nối với chuyển đổi tương tự sang kỹ thuật số. Tôi sẽ không nói quá nhiều về điều này, vì tôi không quá giỏi với những thứ tương tự, nhưng điểm mấu chốt là: Không có gì chúng ta có thể làm với Pi trong phần này.
Tiếp theo chúng ta có phần chuyển đổi tương tự sang kỹ thuật số. Bạn sẽ cần ít nhất một ADC cho mỗi kênh. Nhiều hơn có thể được sử dụng cho tỷ lệ mẫu cao hơn. Trong phạm vi truyền thống, ADC được kết nối với thiết bị ASIC hoặc FPGA. Chúng được sử dụng vì các máy tính truyền thống không đủ thời gian thực (và không nhầm lẫn thời gian thực với tốc độ nhanh!) Để xử lý dữ liệu do ADC cung cấp. Dữ liệu đó sau đó được lưu trữ vào RAM. Một số thiết bị sẽ sử dụng RAM tĩnh, một số thiết bị khác sẽ sử dụng RAM động. Nhìn chung, phương pháp SRAM truyền thống hơn và được thấy ở các nhà sản xuất tên tuổi, trong khi sử dụng DRAM dường như là cách tiếp cận mới hơn được thấy trong các đơn vị do Trung Quốc thiết kế rẻ hơn.
Dung lượng RAM và tốc độ của nó sẽ quyết định số lượng mẫu có thể được lưu trữ. Hầu như mọi khi ADC sẽ là ADC 8 bit, vì vậy, để nói rằng một megasample chúng ta sẽ cần 8 lần 100000 = 8 Mb hoặc 1 MB RAM. Đối với một MSa / s, chúng ta sẽ cần RAM có thể hoạt động ở tốc độ đó. Ngày nay, điều đó sẽ tương đối dễ dàng để có được. FPGA thường điều khiển RAM trực tiếp và chịu trách nhiệm lưu trữ dữ liệu trong đó. Nó hoạt động bằng cách lấp đầy bộ nhớ mẫu trong khi vẫn còn chỗ trống và sau đó ghi đè lên khi nó đầy. Khi có nhiều ADC trên mỗi kênh, FPGA sẽ đặt chúng để lần đầu tiên bắt đầu lấy mẫu, sau đó vào đồng hồ tiếp theo thứ hai, v.v. Khi họ hoàn thành việc lấy mẫu, mẫu của ADC đầu tiên sẽ được ghi vào bộ nhớ trước, sau đó là mẫu của ADC thứ hai. Điều này sẽ làm cho nó trông giống như các ADC đang lấy mẫu nhanh hơn thực tế.
Điểm tiếp theo trong phần này là các mẫu nên tương đương nhau về thời gian. Đây là vấn đề chính với việc sử dụng PC trong máy hiện sóng và lý do tại sao các GPU và ASIC là chủ yếu. Nếu một số mẫu bị trễ hoặc sớm, thì hình ảnh được hiển thị trên màn hình sẽ không chính xác.
Trong phần này chúng ta thấy việc sử dụng Pi đầu tiên có thể. Nếu tốc độ mẫu đủ thấp, chúng ta có thể điều khiển ADC trực tiếp từ Pi và lưu kết quả của chúng vào RAM của Pi. Chúng ta có thể đi nhanh như thế nào tùy thuộc vào cách ADC được kết nối với Pi và cách Pi thực hiện I / O của nó. Từ những gì tôi đã đọc, tốc độ cao nhất của các cổng I ^ 2C của Pi là 150 MHz (mức độ dễ dàng đạt được trong GNU / Linux là một câu hỏi khác) trong khi tốc độ chuẩn hóa cao nhất là 5 MHz và SPI có tốc độ cao nhất trong Pi là 250 MHz. Tôi không chắc tốc độ SPI tiêu chuẩn cao nhất là bao nhiêu, nhưng tôi hy vọng nó sẽ ở đâu đó trong phạm vi 100 MHz tối đa.
Vì vậy, về lý thuyết, chúng ta có quá nhiều tốc độ trên Pi để chạy ADC trong phạm vi MSa / s thấp. Tôi có cảm giác rằng tốc độ RAM sẽ không phải là vấn đề ở đây, nhưng tôi không có bất kỳ dữ liệu nào để sao lưu. Nếu đó là trường hợp, thì chúng ta sẽ có một lợi ích lớn so với phạm vi thông thường: Sẽ có một lượng bộ nhớ chụp rất lớn. Ví dụ: nếu chúng tôi dành 32 MiB RAM cho chương trình cho bộ nhớ mẫu và chúng tôi có hai kênh, điều đó sẽ khiến chúng tôi có 16 MiB cho mỗi kênh hoặc hơn một chút so với 134 Mb hoặc 134 megasamples trên mỗi kênh. Đó là điều mà thậm chí ngày nay nhiều máy hiện sóng không có.
Nhược điểm là chúng tôi cần sửa đổi nặng cho hệ điều hành để có thể lấy mẫu chính xác tại đây. Tôi không có bất kỳ kinh nghiệm nào với Linux thời gian thực, vì vậy tôi không biết điều này sẽ dễ dàng như thế nào.
Dù sao, hãy đến bước tiếp theo. Vì vậy, chúng tôi có một hệ thống lấy mẫu làm đầy RAM. Phần tiếp theo là kích hoạt. Kích hoạt có liên quan chặt chẽ với tốc độ làm mới màn hình. Những gì nó về cơ bản là tìm một mẫu thú vị và giữ nó trong bộ nhớ. Khi phạm vi kích hoạt, nó tiếp tục lấy mẫu sau khi kích hoạt cho đến khi nó lấp đầy bộ nhớ và sau đó nó sẽ gửi nó để được xử lý và hiển thị trên màn hình. Trong khi dữ liệu đang được xử lý, hệ thống lấy mẫu nếu thường bị đóng băng và chờ dữ liệu được hiển thị. Đó là lý do tại sao phạm vi cấp thấp có tốc độ làm mới thấp hơn trong khi phạm vi cao cấp sẽ có màn hình tốc độ làm mới cao đặc biệt và mất ít thời gian hơn để chờ dữ liệu được hiển thị.
Trong phần này thường sẽ có một ASIC hoặc FPGA khác sẽ xử lý tín hiệu trên các mẫu, bất kỳ giải mã giao thức nào nếu phạm vi hỗ trợ nó và thực sự điều khiển màn hình.
Đây là phần mà từ những gì tôi có thể thấy Pi có thể thực sự tỏa sáng. Nó có thể điều khiển màn hình 1920x1080 đẹp mắt (trong khi phạm vi thường ở vùng đất phụ 800x600) và có thể thực hiện giải mã giao thức rất độc đáo. Vấn đề duy nhất tôi có thể thấy là tốc độ và cách xử lý sẽ ảnh hưởng đến thời gian chờ. Nếu chúng ta đạt được tốc độ làm mới thấp, thì chúng ta có thể có được một bộ phân tích logic thực sự tốt với nó.
Cuối cùng, một từ về máy hiện sóng USB và tại sao nói chung USB lại tệ cho loại dự án này: Máy hiện sóng USB truyền thống thực hiện nhập và lấy mẫu và gửi dữ liệu lấy mẫu tới PC để xử lý ứng dụng máy chủ tồn tại. Về cơ bản một cái gì đó rất giống sẽ được thực hiện với Pi quá. Thông thường các ứng dụng PC được thiết kế tồi và đầy lỗi. Phần xấu tiếp theo là USB. Nó được quảng cáo là xe buýt nhanh có thể hoạt động 480 Mb / giây ở chế độ "Tốc độ cao". Sự thật là rất hiếm khi tìm thấy bộ điều khiển USB có thể hỗ trợ tốc độ cao như vậy (trung bình dường như là khoảng 250 Mb / giây so với những gì tôi đã thấy) và đó là một giao thức không phù hợp với bất kỳ thực tế nào ứng dụng thời gian. Đầu tiên, nó được chia sẻ giữa tất cả các thiết bị trên một hub (và Pi chỉ có một cổng USB mà Ethernet + USB Hub được kết nối), có chi phí tương đối cao (khi so sánh với SPI) và có độ trễ cao (hãy nhớ rằng với tốc độ 1 MSa / s, mỗi mẫu chỉ tồn tại trong 1 Lời nói, vì vậy chúng tôi phải có bộ nhớ trên bảng vì chúng tôi không thể gửi mẫu trong thời gian thực qua USB). Cuối cùng, việc sử dụng USB sẽ làm cho phần thu thập dữ liệu trở thành phạm vi chỉ là một máy hiện sóng USB khác và đó là nơi chúng ta mất đi bất kỳ lợi ích nào khi sử dụng Pi: Máy tính để bàn truyền thống phổ biến hơn nhiều, nhanh hơn, dễ lấy hơn và có khả năng USB tốt hơn nhiều.
EDIT
Tôi đã đọc một bài đăng tương đối gần đây của Gert van Loo và theo anh ấy, tốc độ thực tế cho I ^ 2C của Pi là 400 kHz và cho SPI là 20 MHz.