Spójrzmy na ogólny przegląd tego, co ma oscyloskop:
Najpierw mamy analogowy interfejs. Tutaj mamy sieć dopasowującą impedancję dla sond (ale sondy będą musiały również mieć część dopasowującą pojemność), sekcję tłumienia (bardzo ważne, aby nie przeciążać ADC i nie wpuszczać wysokich napięć), wyzwalanie i połączenie z Analogowy do cyfrowego konwertera. Nie będę za dużo o tym mówić, ponieważ nie jestem zbyt dobry w analogowych rzeczach, ale sedno jest następujące: nic nie możemy zrobić z Pi w tej sekcji.
Następnie mamy część konwertera analogowo-cyfrowego. Będziesz potrzebował co najmniej jednego ADC dla każdego kanału. Więcej można zastosować w celu zwiększenia częstotliwości próbkowania. W tradycyjnym zakresie ADC jest podłączony do układu ASIC lub FPGA. Są używane, ponieważ tradycyjne komputery nie mają wystarczającej ilości czasu rzeczywistego (i nie mylą czasu rzeczywistego z szybkim!) Do przetwarzania danych dostarczonych przez ADC. Te dane są następnie przechowywane w jakiejś pamięci RAM. Niektóre urządzenia będą używać statycznej pamięci RAM, a inne będą używać dynamicznej pamięci RAM. Ogólnie rzecz biorąc, podejście SRAM jest bardziej tradycyjne i jest postrzegane przez znanych producentów, podczas gdy użycie DRAM wydaje się być nowszym podejściem obserwowanym w tańszych urządzeniach zaprojektowanych w Chinach.
Ilość pamięci RAM i jej szybkość określą, ile próbek można zapisać. Prawie zawsze ADC będzie ADC 8-bitowym, więc powiedzmy, że jeden megasample będzie nam potrzebny 8 b razy 100000 = 8 Mb lub 1 MB pamięci RAM. Dla jednego MSa / s potrzebujemy pamięci RAM, która może pracować z taką prędkością. Dziś powinno to być stosunkowo łatwe do uzyskania. FPGA zwykle napędza pamięć RAM bezpośrednio i jest odpowiedzialna za przechowywanie w niej danych. Działa poprzez wypełnienie pamięci próbki, gdy jest jeszcze pusty pokój, a następnie nadpisanie jej, gdy jest pełna. Gdy na kanał przypada kilka przetworników ADC, układ FPGA ustawi je tak, aby najpierw rozpoczynało próbkowanie, a następnie na drugi zegar i tak dalej. Po zakończeniu próbkowania próbka pierwszego ADC zostanie najpierw zapisana w pamięci, a następnie próbka drugiego ADC. To sprawi, że ADC będą próbkować szybciej niż w rzeczywistości.
Kolejnym punktem w tej sekcji jest to, że próbki powinny być jednakowo odległe w czasie. Jest to główny problem z użyciem komputerów PC w oscyloskopach i powód, dla którego dominują układy FPGA i ASIC. Jeśli niektóre próbki są spóźnione lub wczesne, obraz przedstawiony na ekranie będzie nieprawidłowy.
W tej części widzimy pierwsze możliwe użycie Pi. Jeśli częstotliwość próbkowania jest wystarczająco niska, możemy być w stanie wyprowadzić ADC bezpośrednio z Pi i zapisać ich wyniki w pamięci RAM Pi. To, jak szybko możemy jechać, zależy od sposobu podłączenia ADC do Pi i od tego, jak Pi wykonuje swoje operacje I / O. Z tego, co przeczytałem, najwyższa prędkość portów I ^ 2C Pi wynosi 150 MHz (to, jak łatwo byłoby to osiągnąć w GNU / Linux to kolejne pytanie), podczas gdy najwyższa standardowa prędkość wynosi 5 MHz, a dla SPI najwyższa prędkość w Pi wynosi 250 MHz. Nie jestem pewien, jaka jest najwyższa standardowa prędkość SPI, ale spodziewam się, że będzie ona maksymalnie w zakresie 100 MHz.
Tak więc teoretycznie mamy ponad wystarczającą prędkość na Pi, aby uruchomić ADC w niskim zakresie MSa / s. Mam wrażenie, że szybkość pamięci RAM nie będzie tutaj problemem, ale nie mam danych, aby to zrobić. W takim przypadku mielibyśmy dużą przewagę nad zwykłymi zakresami: dostępna byłaby bardzo duża ilość pamięci przechwytywania. Na przykład, jeśli poświęcimy 32 MiB pamięci RAM dla programu na pamięć próbną i mamy dwa kanały, to dałoby nam 16 MiB na każdy kanał lub nieco więcej niż 134 Mb lub 134 megampar na kanał. Jest to coś, czego nawet dzisiaj nie ma wiele oscyloskopów.
Minusem jest to, że potrzebowalibyśmy ciężkich modyfikacji systemu operacyjnego, aby móc uzyskać dokładne próbkowanie tutaj. Nie mam doświadczenia z Linuksem w czasie rzeczywistym, więc nie wiem, jakie to byłoby łatwe.
W każdym razie przejdźmy do następnego kroku. Mamy więc system próbkowania, który wypełnia pamięć RAM. Następna część to spust. Trigger jest ściśle powiązany z częstotliwością odświeżania ekranu. Zasadniczo polega na znalezieniu interesującej próbki i zachowaniu jej w pamięci. Po uruchomieniu zakresu próbkowanie jest kontynuowane po wyzwoleniu, dopóki nie zapełni pamięci, a następnie wyśle ją do przetworzenia i wyświetlenia na ekranie. Podczas przetwarzania danych system próbkowania często zamrożony i czeka na wyświetlenie danych. Właśnie dlatego dolne zakresy mają niższe częstotliwości odświeżania, podczas gdy górne zakresy będą miały specjalne wyświetlacze o wysokiej częstotliwości odświeżania i spędzą znacznie mniej czasu na oczekiwaniu na wyświetlenie danych.
W tej sekcji często pojawia się inny układ ASIC lub FPGA, który będzie przetwarzał sygnał na próbkach, dowolne dekodowanie protokołu, jeśli zakres go obsługuje i faktycznie steruje samym wyświetlaczem.
To jest część, w której z tego, co widzę, Pi może naprawdę zabłysnąć. Może obsługiwać ładny wyświetlacz 1920x1080 (podczas gdy zakresy często znajdują się w obszarze sub 800x600) i może bardzo dobrze dekodować protokół. Jedyny problem, jaki widzę, to szybkość i wpływ przetwarzania na czas wstrzymania. Jeśli zdecydujemy się na niską częstotliwość odświeżania, możemy uzyskać naprawdę dobry analizator logiki.
Na koniec słowo o oscyloskopach USB i dlaczego USB jest ogólnie zły w tego typu projektach: tradycyjny oscyloskop USB pobiera dane i pobiera próbki oraz przesyła dane próbkowania do komputera PC w celu przetworzenia, dla którego istnieje aplikacja hosta. Zasadniczo coś bardzo podobnego zrobiłoby się również z Pi. Zwykle aplikacje na PC są źle zaprojektowane i pełne błędów. Kolejną wadą jest sam USB. Jest reklamowany jako szybka magistrala, która może osiągnąć 480 Mb / s w trybie „Hi-Speed”. Prawda jest taka, że niezwykle rzadko można znaleźć kontroler USB, który może obsługiwać tak wysokie prędkości (średnia wydaje się wynosić około 250 Mb / s z tego, co widziałem) i że jako protokół nie jest bardzo odpowiedni dla żadnego prawdziwego -czasowa aplikacja. Najpierw jest współdzielony przez wszystkie urządzenia w koncentratorze (a Pi ma tylko jeden port USB, do którego podłączony jest Ethernet + Hub USB), ma stosunkowo wysoki narzut (w porównaniu do powiedzmy SPI) i ma duże opóźnienie (pamiętaj, że przy 1 MSa / s każda próbka trwa tylko 1 µs, więc musimy mieć pamięć na płycie, ponieważ nie możemy wysyłać próbek w czasie rzeczywistym przez USB). Wreszcie użycie USB sprawiłoby, że akwizycja danych stałaby się po prostu kolejnym oscyloskopem USB i tutaj tracimy jakąkolwiek korzyść z korzystania z Pi: Tradycyjne komputery stacjonarne są znacznie bardziej powszechne, szybsze, łatwiejsze do uzyskania i mają znacznie lepsze możliwości USB.
EDYCJA
Przeczytałem stosunkowo niedawny post Gert van Loo i według niego, realistyczne prędkości dla Pi I ^ 2C wynoszą 400 kHz, a dla SPI wynoszą 20 MHz.