Bir osiloskopun sahip olduğu hakkında üst düzey bir genel bakış yapalım:
İlk önce analog ön uç var. Burada problar için empedans eşleme ağımız var (ancak probların bir kapasitans eşleştirme parçasına da sahip olması gerekecek), zayıflama bölümü (çok önemli, bu nedenle ADC'yi aşırı yüklemiyoruz veya yüksek voltajlara izin vermiyoruz), tetikleme ve bağlantı analogtan dijitale dönüştürücü. Bu konuda çok fazla konuşmayacağım, çünkü analog şeylerle çok iyi değilim, ama sonuçta: Bu bölümde Pi ile yapabileceğimiz hiçbir şey yok.
Sonra analog-dijital dönüştürücü parçası var. Her kanal için en az bir ADC'ye ihtiyacınız olacak. Daha yüksek numune oranı için daha fazlası kullanılabilir. Geleneksel kapsamda, ADC bir ASIC veya bir FPGA cihazına bağlanır. Geleneksel bilgisayarlar ADC tarafından sağlanan verileri işlemek için yeterince gerçek zamanlı olmadığı (ve gerçek zamanlı ile hızlı bir şekilde karıştırılmadığı için) kullanılır. Bu veriler daha sonra bir çeşit RAM'de saklanır. Bazı cihazlar statik RAM kullanır, bazıları ise dinamik RAM kullanır. Genel olarak SRAM yaklaşımı daha gelenekseldir ve büyük isim üreticilerinde görülürken, DRAM kullanımı daha ucuz Çin tasarımlı birimlerde görülen daha yeni bir yaklaşım gibi görünmektedir.
RAM miktarı ve hızı, kaç örneğin saklanabileceğini belirler. Neredeyse her zaman ADC 8 bitlik ADC olacaktır, bu yüzden bir megasample için 8 b kez 100000 = 8 Mb veya 1 MB RAM'e ihtiyacımız olacak. Bir MSa / s için, bu hızlarda çalışabilen RAM'e ihtiyacımız olacak. Bugün, bunu elde etmek nispeten kolay olmalı. FPGA genellikle RAM'i doğrudan kullanır ve içindeki verileri depolamaktan sorumludur. Hala boş yer varken örnek belleği doldurarak ve dolduğunda üzerine yazarak çalışır. Kanal başına birden fazla ADC olduğunda, FPGA bunları ilk önce örneklemeye başlayacak, daha sonra bir sonraki saatte vb. Ayarlayacaktır. Örneklemeyi bitirdiklerinde, ilk ADC'nin örneği önce belleğe, sonra ikinci ADC'nin örneğine yazılır. Bu, ADC'lerin gerçekte olduklarından daha hızlı örnekleme yapmasını sağlayacaktır.
Bu bölümdeki bir sonraki nokta, numunelerin zaman içinde eşit uzaklıkta olması gerektiğidir. Osiloskoplarda PC kullanımı ve FPGA ve ASIC'lerin neden baskın olmasının ana sorunu budur. Bazı örnekler geç veya erkenyse, ekranda gösterilen görüntü yanlış olur.
Bu bölümde Pi'nin ilk olası kullanımını görüyoruz. Örnekleme hızı yeterince düşükse, ADC'leri doğrudan Pi'den alabilir ve sonuçlarını Pi'nin RAM'inde saklayabiliriz. Ne kadar hızlı gidebileceğimiz, ADC'nin Pi'ye nasıl bağlandığına ve Pi'nin G / Ç'yi nasıl yaptığına bağlıdır. Okuduğum kadarıyla, Pi'nin I ^ 2C bağlantı noktalarının en yüksek hızı 150 MHz (GNU / Linux'da elde etmenin ne kadar kolay olduğu başka bir soru), en yüksek standart hız 5 MHz ve SPI için en yüksek hız Pi 250 MHz'dir. SPI'nın en yüksek standart hızının ne olduğundan emin değilim, ancak maksimum 100 MHz aralığında bir yerde olmasını bekliyorum.
Teoride, düşük MSa / s aralığında bir ADC çalıştırmak için Pi üzerinde yeterli hızımız var. RAM hızının burada bir sorun olmayacağını hissediyorum, ancak bunu destekleyecek herhangi bir verim yok. Eğer durum buysa, o zaman olağan kapsamlara göre çok büyük bir avantajımız olur: Çok büyük miktarda yakalama belleği olurdu. Örneğin, örnek bellek için programa 32 MiB RAM ayırırsak ve iki kanalımız varsa, bu bize her kanal için 16 MiB veya kanal başına 134 Mb veya 134 megaz örneğinden biraz daha fazla kalır. Bugün bile birçok osiloskopun sahip olmadığı bir şey.
Dezavantajı, burada doğru örnekleme yapabilmek için işletim sisteminde ağır değişikliklere ihtiyaç duymamızdır. Gerçek zamanlı Linux ile ilgili hiçbir deneyimim yok, bu yüzden bunun ne kadar kolay olacağını bilmiyorum.
Her neyse, bir sonraki adıma geçelim. Bu yüzden RAM'i dolduran bir örnekleme sistemimiz var. Sonraki bölüm tetikleyicidir. Tetikleyici, ekran yenileme hızıyla yakından ilişkilidir. Temel olarak ilginç bir örnek bulmak ve onu hafızada tutmak. Kapsam tetiklendiğinde, belleği doldurana kadar tetiklemeden sonra örneklemeye devam eder ve ardından işlenip ekranda görüntülenmesi için gönderir. Veriler işlenirken, sık sık dondurulmuşsa örnekleme sistemi ve verilerin görüntülenmesini bekler. Bu nedenle, düşük uç kapsamları daha düşük yenileme hızlarına sahipken, yüksek uç kapsamları özel yüksek yenileme hızı ekranlarına sahip olacak ve verilerin görüntülenmesini beklerken çok daha az zaman harcayacaktır.
Bu bölümde genellikle numuneler üzerinde sinyal işleme yapacak başka bir ASIC veya FPGA, kapsam destekliyorsa herhangi bir protokol kod çözme ve aslında ekranın kendisini yönetme olacaktır.
Bu, Pi'nin görebildiğim kadarıyla gerçekten parlayabileceği kısım. Güzel bir 1920x1080 ekran kullanabilir (kapsamlar genellikle 800x600 alt alandayken) ve protokol kod çözme işlemini çok güzel yapabilir. Görebildiğim tek sorun hız ve işlemin bekleme süresini nasıl etkileyeceğiydi. Düşük yenileme hızına gidersek, onunla gerçekten iyi bir mantık analizörü elde edebiliriz.
Son olarak USB osiloskoplar ve bu tür bir proje için USB'nin neden genel olarak kötü olduğu hakkında bir kelime: Geleneksel USB osiloskop, giriş ve örnekleme yapar ve örnekleme verilerini, bir ana bilgisayar uygulamasının bulunduğu işlem için PC'ye gönderir. Temel olarak Pi ile de çok benzer bir şey yapılacaktı. Genellikle PC uygulamaları kötü tasarlanmış ve hatalarla doludur. Bir sonraki kötü kısım USB'nin kendisidir. "Yüksek Hızlı" modunda 480 Mb / s hıza ulaşabilen hızlı veri yolu olarak ilan edilir. Gerçek şu ki, bu kadar yüksek hızları destekleyebilen bir USB denetleyici bulmak son derece nadirdir (ortalama gördüğümden 250 Mb / s civarında görünüyor) ve protokol olarak herhangi bir gerçek için çok uygun değil -zaman uygulama. İlk olarak bir hub'daki tüm cihazlar arasında paylaşılır (ve Pi'nin Ethernet + USB Hub'ın bağlı olduğu sadece bir USB portu vardır), nispeten yüksek ek yüke sahiptir (SPI ile karşılaştırıldığında) ve yüksek gecikme süresine sahiptir (1 MSa / s'de her örneğin sadece 1 µs sürdüğünü unutmayın, bu nedenle örnekleri gerçek zamanlı olarak gönderemediğimiz için kartımızda hafızaya sahip olmalıyız USB üzerinden). Son olarak USB kullanmak, veri toplama bölümünün sadece başka bir USB osiloskop olmasını sağlayacak ve Pi kullanımının herhangi bir faydasını kaybettiğimiz nokta: Geleneksel masaüstü bilgisayarlar çok daha yaygın, daha hızlı, daha kolay elde edilir ve çok daha iyi USB özelliklerine sahiptir.
EDIT Gert van Loo tarafından
nispeten yeni bir yazı okudum ve ona göre Pi'nin I ^ 2C gerçekçi oranları 400 kHz ve SPI için 20 MHz.