Pi bir osiloskop projesi için yeterince güçlü mü?


18

Amacım bir osiloskoptan başlayarak Pi tabanlı aletler yapmak. Bu yüzden cevapları okudum

Analog girişleri çok düşük örnekleme hızlarında okumak mümkün görünüyor, ancak saniyede mega örneklere ulaşıp ulaşamayacağımı merak ediyorum. Mümkünse sürekli veri toplama muhtemelen zor olurdu, bu yüzden onsuz yapabilirim. Pi bunun için donanımlı mıdır? İlk önce Pi'ye bağlı ekranlarda ve daha sonra mobil aygıtlarımda (Pi kablosuz veriyi onlara iletirken) dalga formlarını gözlemlemek istiyorum.

Çipli sistemle ilgili deneyimim, bu sistemlerin sürekli G / Ç üzerinde kolayca doyurabileceğini söylüyor. Pi için de durum böyle mi?

Yanıtlar:


22

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.


Peki cevabınızın zirvesi nedir? Bu daha çok bir wiki gibidir.
Piotr Kula

@ppumkin Evet, böyle bir soru böyle bir cevabı gerektiriyor. Pi'nin alım yapacağını varsayarak, alt satırda evet, yeterince düşük frekanslar için olacağı varsayılarak, ihtiyacımız olan cihazın beklenen performansı hakkında yeterli bilgi verilmedi. Pi çekim yapmazsa, kötü USB performansı nedeniyle Pi'yi kullanmak anlamsızdır.
AndrejaKo

8

Raspberry Pi'yi böyle bir proje için ihtiyacınız olan yazılımı çalıştırmak için mükemmel bir platform olarak bulduk. Sorun, sinyalleri ilk etapta RPi'ye almak ve O / S ve uygulama yazılımını çalıştıran aynı CPU'da yüksek hızlı titreşimsiz gerçek zamanlı sinyal yakalama gerçekleştirmektir. Çözümümüz, bir BitScope'u (yüksek hızlı karışık sinyal dalga formu yakalama için) gerekli tüm yazılımı çalıştıran Raspberry Pi ile eşleştiren BitScope Raspberry Pi Osiloskop'tur .

resim açıklamasını buraya girin


utanmaz fiş =)
lenik

2
Bu harika. Ama bunun cevabı ile ilgisi yok! Ya da belki Pi'nin bir osiloskop olmak için zayıf olduğunu kanıtlıyor?
Piotr Kula

Pi "çok zayıf" değildir, ancak (yüksek hızlı) dalga formu alımı için gereken G / Ç özelliğine sahip değildir. Orijinal soruya göre, "bunun için donanımlı" :-)
BitScope

2

Not: Bu daha çok 'yüksek sesle düşünmek' metnidir, gerçek bir cevaptır

Fikir de bir süre önce aklımdan geçti ve genel fikri hala seviyorum!

Bildiğim kadarıyla, üst düzey kapsamlar 15 yıldan beri (veya daha fazla) sadece bir dizi özel yüksek hızlı G / Ç bulunan bilgisayarlar (PC). Benzer I / O RPi'ye tasarlandığında / bağlandığında, sonucun şaşırtıcı derecede iyi olabileceğini düşünüyorum.

IMHO bunu yapmanın iyi bir yolu, RPi'nin toplanan verileri depolaması ve görüntülemesi (örneğin USB portu üzerinden alınan) ve bazı özel donanımların yüksek hız ölçümü yapmasına izin vermektir. Bu yüksek hızlı ölçüm birimi daha sonra kullanıcı girdisine veya benzer bir şeye dayanarak RPi tarafından da kontrol edilebilir.

RPi'nin ilk sürümünde USB bağlantı noktalarında bazı sorunlar vardı / var, bunlar şu anda çözülmüşse son zamanlarda arama yapmadım. RPi'nin yeni 2.0 versiyonunun bu problemlere sahip olmaması gerektiği konusunda bir söylenti duydum, ancak bu söylentiyi de kontrol etmedim.

Herhangi bir harici (özel) donanım içermeyen sonuçların I / O portlarının sayısı ve üzerinde tüm bir işletim sisteminin çalıştığı (gerçek zamanlı seçenekleri sınırlayan) nedeniyle sınırlı olduğunu düşünüyorum. Kendi işletim sisteminizi yazmayı planlamıyorsanız?

Ayrıca bu amaçla örneğin I2C çiplerini kullanmak gerçekten güzel bir şey yapmak için yeterli hıza sahip olmayacaktır. SPI zaten çok daha fazla bant genişliği veriyor (başımın üst kısmından 100Mhz'ye kadar), ancak daha fazla bant genişliği kazanmak için USB'ye ve gerekirse sıkıştırmaya giderim veya verileri göndermeden önce iyi bir kodlama şeması kullanırım.

Bu yüzden sanırım mümkün, ancak RPi'ye eklenmesi gereken donanım RPi'nin kendisinden çok daha pahalı olacak.

Son fakat en az değil (ben bu konu hakkında hayal kurmayı bırakmadan önce) internette bir arama zaten bunu yapmakla meşgul bazı grup sonuçlanırsa şaşırmam.


1

Cevap Evet.

Yeterince güçlü! Ama sadece belirli frekanslar için - Sınırlamalar nedeniyle zaten belirtildiği gibi.

YANİ! -> Kendine neyi ölçmek istediğini sormalısın?

  • Çünkü özellikle neyi ölçmek istediğinizi sormuyorsunuz, cevaplar spekülasyona açık.
  • Size alternatifleri ve önerileri tanıtayım. Belki Genel Osilatör konusu değil, Ahududu için daha spesifik yeni bir soru sorabilirsiniz!

Osilatörler, 5USD'ye mal olan basit düşük frekanslardan değişebilir ve daha sonra diğerleri 50Ghz + 'ya kadar işleyebilir - bu küçük bir ev kadar maliyetlidir! 75,000USD-100,000 USD!

Ahududu, 433mhz kablosuz sinyaller, düşük hızlı CPU veri yolu iletişimleri, TTS / UART, I2C hata ayıklama gibi alt Giga frekanslarını ölçmek için yeterince iyi olacağını düşünüyorum. Ve tasarımla Ahududu gerçek zamanlı işletim sistemi çalıştırmadığı için daha yüksek frekanslar gerçekten doğru olmayacaktır. Yani işletim sistemi ile başlamanız gerekecek (veya belirtildiği gibi harici gerçek zamanlı cihazlar- Ama o zaman amaç nedir?)

Ancak sinyalleri gerçekten ölçmek istiyorsanız, Ahududu spesifikasyonlarına eşit olan gerçekten iyi ve uygun fiyatlı bir cihaz satın alabilirsiniz. Ama zaten iyi tasarlanmış, özelliklerle dolu, tasarımda gerçekten olgun ve bir hobi ortamında faydalı olduğunu kanıtladı.

Burada tekerleği yeniden icat etmeye gerek yok. Örneğin, 100USD altı tek kanal için bir DSO Nano.

resim açıklamasını buraya girin

200USD'nin altında bir DSO Nano Dörtlü Kanal

resim açıklamasını buraya girin

Ve sonra, bir Ahududu veya benzeri bir cihaz YAPILAMAZ!

Ve küçük bir servete mal oldu ...

resim açıklamasını buraya girin

  • 110Ghz'ye kadar, verileri depolamak için sabit disk, son derece hassas, simülasyonlar ve tetikleyiciler.
  • Buuetooth, WCDMA / EDGE / 3G / 4G, Kablosuz A / B / G / N 2.4Ghz / 5Ghz, SATA, AGP / PCI / PCI-Express, Ham Uydu sinyalleri, Sabit sürücü kafa kanalları, Ethernet vb. .

2
Rohi & Schwarz gibi RPi bakışımı yapabilirdim, belki tepenin biraz üzerinde şık bir durum olurdu, durum mod :-)
ikku

LOL! Bu acıyan gözler için bir manzara olacak :)
Piotr Kula

1

TiePie mühendislik Handyscope HS5 osiloskopları / rastgele dalga formu jeneratörlerimizden birini USB bağlantı noktasına bağlayabilirsiniz . Raspberry Pi'nin aynı anda bir veya daha fazla osiloskop kullanması için derlenmiş bir kütüphane indirilebilir. Cihaz kendi zamanlamasını ve hafızasını kullanır, bu nedenle performans kaybı olmaz. Yani evet, Pi bir osiloskop projesi için yeterince güçlü.

Handyscope HS5

Osiloskopun temel özellikleri: 2 kanal, 14 bit, 500 MS / s, 250 MHz bant genişliği, 20 MS / s 14 bit sürekli aralıksız akış, kanal başına 32 MS bellek, 1 ppm zaman tabanı doğruluğu.

Keyfi Dalga Formu Jeneratörünün temel özellikleri: 1 µHz ila 30 MHz dalga formları, 240 MS / s, 14 bit, 64 MS bellek, -12 ila 12 V çıkış (24 Vpp), 1 ppm zaman tabanı doğruluğu.


Merhaba. Gelecekte lütfen reklamını yaptığınız ürünle olan ilişkinizi açıklayınız. Teşekkür ederim.

Bana ver! Fiyatlara bak! Yine de güzel ürünler gibi görünüyor. Bütçe aralığımda değil.
Piotr Kula

Üyelik açıklama gerekliliğinin farkında değildi. TiePie mühendisliğine bağlı olduğumu gösterecek metin değiştirildi.
Mart

0

En iyi şansınız sigrok ve ön uç libsigrok'un Pi'de derlenip birleştirilemeyeceğini denemek ve daha sonra bazı uyumlu osiloskop donanımı satın almaktır. Bu şekilde saniyede 24 mega örneğe kadar sinyal alabilirsiniz. Yeterli bilgi ile mobil cihazlara kablosuz iletim de dahil olmak üzere yazılımı istediğiniz şekilde özelleştirebilirsiniz.


0

Bazıları Sigrok hakkında konuşuyor. Bence en yakın yol, EZ-USB FX2LP sürücüsü ile iyi belgelenmiş CY7C68013A kullanıyor. Masaüstü bilgisayarda Weezy ile çalışmadı, ama Jessy'de iyi çalışıyor. İşte 24 Msps hakkında bilinen sınırlama. Kamera arayüzünü kullanarak başka bir yol düşünüyorum. Bu arayüz, saniyede 60 mega "örnek" üzerinde bir hız ile GPU'ya veri aktarabileceği anlamına gelen 2.1 mega piksel ve saniyede 30 kare yönetebilir. 20MHz SPI veya USB'den daha faydalı geliyor.


Bunlar dijital arabirimlerdir, bu nedenle onları yüksek hızlı ADC çıkışı ile sürmediğiniz sürece osiloskop üretmez. Çoğu pratik çözüm, büyüklük derecelerini daha hızlı bir şekilde örnekler, ancak bunu sürekli olarak yapmaz - bu, normal sorunlara daha iyi uyum sağlar.
Chris Stratton

-1

Ses frekanslarıyla sınırlı kalmazsanız, spidev ile pi'de almak için ucuz bir MCP3202 12 bit çift kanallı A / D dönüştürücü ve TCP soketi üzerinden Ethernet üzerinden aktarılan verileri görüntülemek için pidatascope kullanıyorum. Pydatascope aynı zamanda bir spektrum analizörü olarak görev yapar!

Çift kanallara sahip olmak için pidataskop açık kaynak kodunda nispeten önemsiz değişiklikler yaptım, çünkü çoğunlukla kolaydı ve gerçekten ihtiyacım olduğu için değil.

Herhangi bir sorunuz varsa takip gönderin veya doğrudan posta gönderin, size yardımcı olmaktan memnuniyet duyarız.


Telif hakkıyla korunan resmimi izinsiz kullanıyorsunuz. Lütfen telif hakkıyla korunan resmi web sitenizden kaldırın.
James Phillips

Cevabınız için teşekkür ederim @ James Philips. Görüntüyü cevabınızdan kaldırdım. İncelenmeyi bekliyor. Bunu ekleyen ben olmadığımı unutmayın. Sitenizin, görmek isteyenler için resmi içeren adresini sağlayabilir misiniz?
niw3
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.