Apakah Pi cukup kuat untuk proyek osiloskop?

18

Tujuan saya adalah membuat instrumen berbasis Pi, dimulai dengan osiloskop. Jadi saya membaca jawaban

Tampaknya mungkin untuk membaca input analog pada tingkat pengambilan sampel yang sangat rendah, tetapi saya ingin tahu apakah saya dapat mencapai tingkat sampel mega per detik. Akuisisi data berkelanjutan mungkin akan sulit, jika memungkinkan, jadi saya bisa melakukannya tanpa itu. Apakah Pi akan kekurangan peralatan untuk itu? Saya ingin mengamati bentuk gelombang pada layar yang terhubung ke Pi pada awalnya, dan kemudian pada perangkat seluler saya (sementara Pi mengirimkan data nirkabel kepada mereka).

Pengalaman saya dengan sistem-on-chip memberi tahu saya bahwa sistem ini dapat dengan mudah jenuh pada I / O terus menerus. Apakah ini juga berlaku untuk Pi?

niw3
sumber

Jawaban:

22

Mari kita memiliki ikhtisar tingkat tinggi tentang apa yang dimiliki osiloskop:

Pertama kita memiliki front-end analog. Di sini kita memiliki jaringan pencocokan impedansi untuk probe (tetapi probe harus memiliki bagian pencocokan kapasitansi juga), bagian atenuasi (sangat penting, jadi kami tidak membebani ADC atau membiarkan tegangan tinggi masuk), memicu dan menghubungkan ke konverter analog ke digital. Saya tidak akan berbicara terlalu banyak tentang ini, karena saya tidak terlalu baik dengan barang-barang analog, tetapi intinya adalah: Tidak ada yang bisa kita lakukan dengan Pi di bagian ini.

Selanjutnya kita memiliki bagian konverter analog ke digital. Anda membutuhkan setidaknya satu ADC untuk setiap saluran. Lebih banyak dapat digunakan untuk tingkat sampel yang lebih tinggi. Dalam lingkup tradisional, ADC terhubung ke ASIC atau perangkat FPGA. Mereka digunakan karena komputer tradisional tidak cukup waktu nyata (dan jangan bingung waktu nyata dengan cepat!) Untuk memproses data yang disediakan oleh ADC. Data itu kemudian disimpan ke dalam semacam RAM. Beberapa perangkat akan menggunakan RAM statis, sementara yang lain akan menggunakan RAM dinamis. Secara umum pendekatan SRAM lebih tradisional dan terlihat di pabrikan ternama, sementara penggunaan DRAM tampaknya merupakan pendekatan yang lebih baru yang terlihat pada unit yang dirancang lebih murah di Cina.

Jumlah RAM dan kecepatannya akan menentukan berapa banyak sampel yang dapat disimpan. Hampir selalu ADC akan menjadi 8-bit ADC, jadi misalnya satu megasample kita akan membutuhkan 8 b kali 100000 = 8 Mb atau 1 MB RAM. Untuk satu MSa / s, kita akan membutuhkan RAM yang dapat bekerja pada kecepatan itu. Hari ini, itu seharusnya relatif mudah diperoleh. FPGA biasanya menggerakkan RAM secara langsung dan bertanggung jawab untuk menyimpan data di dalamnya. Ini bekerja dengan mengisi memori sampel saat masih ada ruang kosong dan kemudian menimpanya saat penuh. Ketika ada beberapa ADC per saluran, FPGA akan mengaturnya sehingga pertama kali memulai pengambilan sampel, kemudian pada jam berikutnya detik dan seterusnya. Ketika mereka menyelesaikan pengambilan sampel, sampel ADC pertama akan ditulis ke dalam memori terlebih dahulu, kemudian sampel ADC kedua. Ini akan membuatnya terlihat seperti ADC yang mengambil sampel lebih cepat dari yang sebenarnya.

Poin berikutnya dalam bagian ini adalah bahwa sampel harus sama dalam waktu. Ini adalah masalah utama dengan penggunaan PC dalam osiloskop dan alasan mengapa FPGA dan ASIC dominan. Jika beberapa sampel terlambat atau awal, maka gambar yang ditampilkan di layar akan salah.

Pada bagian ini kita melihat kemungkinan penggunaan Pi pertama. Jika laju sampel cukup rendah, kami mungkin dapat mengarahkan ADC langsung dari Pi dan menyimpan hasilnya dalam RAM Pi. Seberapa cepat kita dapat pergi tergantung pada cara ADC terhubung ke Pi dan bagaimana Pi melakukan I / O-nya. Dari apa yang saya baca, kecepatan tertinggi port I ^ 2C Pi adalah 150 MHz (betapa mudahnya untuk mencapai di GNU / Linux adalah pertanyaan lain) sementara kecepatan standar tertinggi adalah 5 MHz dan untuk SPI kecepatan tertinggi di Pi adalah 250 MHz. Saya tidak yakin apa kecepatan standar tertinggi SPI, tapi saya berharap itu berada di suatu tempat di kisaran 100 MHz secara maksimal.

Jadi secara teori kami memiliki kecepatan lebih dari cukup pada Pi untuk menjalankan ADC dalam kisaran MSa / s rendah. Saya merasa kecepatan RAM tidak akan menjadi masalah di sini, tetapi saya tidak memiliki data untuk mendukungnya. Jika itu masalahnya, maka kami akan memiliki manfaat besar dibandingkan ruang lingkup biasa: Akan ada jumlah memori tangkap yang sangat besar. Sebagai contoh jika kita mendedikasikan 32 MiB RAM untuk program untuk sampel memori dan kami memiliki dua saluran, itu akan meninggalkan kita dengan 16 MiB untuk setiap saluran atau sedikit lebih dari 134 Mb atau 134 contoh megas per saluran. Itu adalah sesuatu yang bahkan sekarang banyak osiloskop tidak miliki.

Kelemahannya adalah kita perlu modifikasi besar pada sistem operasi untuk bisa mendapatkan sampel yang akurat di sini. Saya tidak punya pengalaman dengan Linux real-time, jadi saya tidak tahu betapa mudahnya hal ini.

Bagaimanapun, mari kita ke langkah selanjutnya. Jadi kami memiliki sistem pengambilan sampel yang mengisi RAM. Bagian selanjutnya adalah pemicunya. Pemicu terkait erat dengan kecepatan refresh layar. Apa yang pada dasarnya dilakukannya adalah menemukan sampel yang menarik dan menyimpannya dalam memori. Ketika ruang lingkup memicu, ia melanjutkan pengambilan sampel setelah pemicu sampai telah mengisi memori dan kemudian mengirimkannya untuk diproses dan ditampilkan di layar. Saat data sedang diproses, sistem pengambilan sampel jika sering dibekukan dan menunggu data ditampilkan. Itulah sebabnya ruang lingkup kelas bawah memiliki kecepatan penyegaran yang lebih rendah sementara ruang lingkup kelas atas akan memiliki tampilan kecepatan penyegaran tinggi khusus dan menghabiskan lebih sedikit waktu menunggu data ditampilkan.

Pada bagian ini akan sering ada ASIC atau FPGA lain yang akan melakukan pemrosesan sinyal pada sampel, protokol apa pun decoding jika ruang lingkup mendukungnya dan benar-benar menggerakkan layar itu sendiri.

Ini adalah bagian di mana dari apa yang saya lihat Pi bisa benar-benar bersinar. Ia dapat menggerakkan layar 1920x1080 yang bagus (sementara cakupan sering berada di tanah sub 800x600) dan dapat melakukan decoding protokol dengan sangat baik. Satu-satunya masalah yang bisa saya lihat adalah kecepatan dan bagaimana pemrosesan akan memengaruhi waktu penahanan. Jika kita menggunakan refresh rate yang rendah, maka kita bisa mendapatkan penganalisis logika yang sangat baik dengannya.

Akhirnya sepatah kata tentang osiloskop USB dan mengapa USB secara umum buruk untuk jenis proyek ini: Osiloskop USB tradisional melakukan input dan pengambilan sampel dan mengirimkan data pengambilan sampel ke PC untuk diproses di mana terdapat aplikasi host. Pada dasarnya sesuatu yang sangat mirip akan dilakukan dengan Pi juga. Biasanya aplikasi PC dirancang dengan buruk dan penuh dengan bug. Bagian buruk berikutnya adalah USB itu sendiri. Ini diiklankan sebagai bus cepat yang dapat melakukan 480 Mb / s dalam mode "Hi-Speed". Yang benar adalah bahwa sangat jarang untuk menemukan pengontrol USB yang dapat mendukung kecepatan tinggi (rata-rata tampaknya sekitar 250 Mb / s dari apa yang saya lihat) dan bahwa itu sebagai protokol tidak sangat cocok untuk semua yang nyata. aplikasi -waktu. Pertama itu dibagikan di antara semua perangkat di hub (dan Pi hanya memiliki satu port USB yang terhubung dengan Ethernet + USB Hub), memiliki overhead yang relatif tinggi (bila dibandingkan dengan mengatakan SPI) dan memiliki latensi tinggi (ingat bahwa pada 1 MSa / s setiap sampel berlangsung hanya 1 μs, jadi kami harus memiliki memori di papan kami karena kami tidak dapat mengirim sampel secara real-time) melalui USB). Akhirnya menggunakan USB akan menjadikan bagian akuisisi data ruang lingkup menjadi sekadar osiloskop USB dan di situlah kita kehilangan manfaat menggunakan Pi: Komputer desktop tradisional jauh lebih umum, lebih cepat, lebih mudah diperoleh dan memiliki kemampuan USB yang jauh lebih baik.

EDIT Saya sudah membaca posting yang relatif baru oleh Gert van Loo dan menurutnya, harga realistis untuk Pi I ^ 2C adalah 400 kHz dan untuk SPI adalah 20 MHz.

AndrejaKo
sumber
Jadi apa puncak jawaban Anda? Ini lebih seperti wiki.
Piotr Kula
@pumkin Ya, pertanyaan seperti ini membutuhkan jawaban seperti itu .. Yah tidak ada puncak. Kami belum memberikan informasi yang cukup tentang kinerja yang diharapkan dari perangkat yang kami butuhkan sehingga dengan asumsi bahwa Pi akan melakukan akuisisi, intinya adalah ya, untuk frekuensi yang cukup rendah. Jika Pi tidak akan melakukan akuisisi, maka tidak ada gunanya menggunakan Pi karena kinerja USB yang buruk.
AndrejaKo
8

Kami telah menemukan Raspberry Pi menjadi platform yang sangat baik untuk menjalankan perangkat lunak yang Anda perlukan untuk proyek seperti ini. Masalahnya adalah mendapatkan sinyal ke RPi di tempat pertama dan melakukan penangkapan sinyal real-time bebas jitter kecepatan tinggi pada CPU yang sama yang menjalankan O / S dan perangkat lunak aplikasi. Solusi kami adalah BitScope Raspberry Pi Oscilloscope yang memasangkan BitScope (untuk penangkapan gelombang sinyal campuran berkecepatan tinggi) dengan Raspberry Pi yang menjalankan semua perangkat lunak yang diperlukan.

masukkan deskripsi gambar di sini

BitScope
sumber
shameless plug =)
lenik
2
Itu luar biasa. Tapi itu tidak ada hubungannya dengan jawabannya! Atau mungkin itu membuktikan bahwa Pi lemah menjadi osiloskop?
Piotr Kula
Pi tidak "terlalu lemah" tetapi tidak memiliki kemampuan I / O yang dibutuhkan untuk akuisisi bentuk gelombang (kecepatan tinggi). Dalam kata-kata dari pertanyaan aslinya, "di bawah dilengkapi untuk itu" :-)
BitScope
2

NB: Ini lebih merupakan bagian dari 'berpikir keras' daripada jawaban yang nyata

Gagasan itu juga terlintas di benak saya beberapa waktu lalu, dan saya masih menyukai gagasan umum!

Sejauh yang saya tahu, lingkup high-end adalah sejak 15 tahun (atau bahkan lebih) hanya komputer (PC) dengan sekelompok I / O kecepatan tinggi khusus. Saya pikir ketika I / O serupa dirancang / terhubung ke RPi, hasilnya mungkin mengejutkan.

IMHO cara yang baik untuk melakukan ini adalah membiarkan RPi hanya menyimpan dan menampilkan data yang dikumpulkan (diterima misalnya melalui port USB) dan membiarkan beberapa perangkat keras khusus melakukan pengukuran kecepatan tinggi. Unit pengukur kecepatan tinggi ini kemudian juga dapat dikendalikan oleh RPi berdasarkan input pengguna atau yang serupa.

Dalam versi pertama pada RPi ada / ada beberapa masalah dengan port USB, saya belum mencari akhir-akhir ini jika mereka dipecahkan saat ini. Saya juga mendengar desas-desus bahwa versi 2.0 baru dari RPi seharusnya tidak memiliki masalah ini, tetapi saya juga belum memeriksa rumor ini.

Saya pikir hasil tanpa perangkat keras eksternal (khusus) terbatas karena jumlah port I / O dan fakta bahwa seluruh OS berjalan di atasnya (yang membatasi opsi realtime). Kecuali Anda berencana untuk menulis OS Anda sendiri?

Juga menggunakan misalnya chip I2C untuk tujuan ini tidak akan memiliki kecepatan yang cukup untuk melakukan sesuatu yang sangat bagus. SPI telah memberikan bandwidth yang lebih banyak (hingga 100Mhz dari atas kepala saya), tetapi saya akan menggunakan USB dan jika perlu kompres, atau menggunakan skema pengkodean yang baik sebelum mengirim data, untuk mendapatkan lebih banyak bandwidth.

Jadi saya kira itu mungkin, tetapi perangkat keras yang perlu ditambahkan ke RPi akan jauh lebih mahal daripada RPi itu sendiri.

Last but not least (sebelum saya berhenti melamun tentang subjek ini) saya tidak akan terkejut jika pencarian di internet akan mengakibatkan beberapa kelompok sudah sibuk melakukan ini.

ikku
sumber
1

Jawabannya iya.

Cukup kuat! Tetapi hanya untuk frekuensi tertentu- Seperti yang sudah ditunjukkan karena keterbatasan.

BEGITU! -> Anda harus bertanya pada diri sendiri apa yang ingin Anda ukur?

  • Karena Anda tidak bertanya secara spesifik apa yang ingin Anda ukur jawabannya terbuka untuk spekulasi.
  • Jadi izinkan saya memperkenalkan Anda pada alternatif dan saran. Mungkin Anda dapat mengajukan pertanyaan baru yang lebih spesifik untuk topik Raspberry dan bukan topik Oscillator umum!

Osilator dapat berkisar dari frekuensi rendah sederhana yang harganya 5USD, dan yang lain dapat menangani hingga 50Ghz + - yang harganya sama dengan rumah kecil! 75,000USD-100,000USD!

Saya pikir Raspberry akan cukup baik untuk mengukur frekuensi sub Giga, seperti sinyal nirkabel 433 MHz, komunikasi bus CPU kecepatan rendah, TTS / UART, I2C debugging - tidak jauh lebih benar-benar. Dan frekuensi yang lebih tinggi tidak akan benar-benar akurat, karena secara desain Raspberry tidak menjalankan OS waktu nyata. Jadi Anda harus mulai dengan OS (atau seperti yang disebut perangkat realtime eksternal- Tapi apa gunanya?)

Tetapi jika Anda benar-benar ingin mengukur sinyal, maka Anda dapat membeli perangkat yang benar-benar bagus dan cukup murah yang setara dengan spesifikasi Raspberry. Tetapi sudah dirancang dengan baik, penuh fitur, benar-benar matang dalam desain dan membuktikan diri untuk berguna dalam lingkungan hobi.

Tidak perlu menemukan kembali roda di sini. Misalnya DSO Nano untuk saluran tunggal di bawah 100USD.

masukkan deskripsi gambar di sini

DSO Nano Quad Channel untuk di bawah 200USD

masukkan deskripsi gambar di sini

Dan kemudian, apa yang tidak bisa dilakukan oleh Raspberry atau perangkat serupa!

Dan menghabiskan banyak uang ...

masukkan deskripsi gambar di sini

  • Hingga 110Ghz, dengan hard drive untuk menyimpan data, sangat tepat, simulasi dan pemicu.
  • Mengukur Buuetooth, WCDMA / EDGE / 3G / 4G, Nirkabel A / B / G / N 2.4Ghz / 5Ghz, SATA, AGP / PCI / PCI-Express, sinyal Satellite Raw, saluran kepala Hard drive, Ethernet, dll. Dll. .
Piotr Kula
sumber
2
Saya bisa membuat RPi saya seperti Rohde & Schwarz, akan menjadi bagus, mungkin agak di atas bukit, case mod :-)
ikku
LOL! Itu akan menjadi pemandangan bagi mata yang sakit :)
Piotr Kula
1

Anda dapat menghubungkan salah satu osiloskop rekayasa / Handsetcope HS5 Handyscope / generator gelombang sewenang-wenang kami ke port USB. Perpustakaan yang dikompilasi untuk Raspberry Pi untuk menggunakan satu atau beberapa osiloskop secara bersamaan tersedia untuk diunduh. Instrumen menggunakan waktu dan ingatannya sendiri, sehingga tidak ada kehilangan kinerja. Jadi ya, Pi cukup kuat untuk proyek osiloskop.

Handyscope HS5

Spesifikasi utama dari osiloskop: 2 saluran, 14 bit, 500 MS / s, bandwidth 250 MHz, 20 MS / s 14 bit streaming tanpa batas berkelanjutan, 32 MS memori per saluran, akurasi basis waktu 1 ppm.

Spesifikasi utama dari Generator Bentuk Gelombang Sewenang-wenang: bentuk gelombang 1 µHz hingga 30 MHz, 240 MS / s, 14 bit, memori 64 MS, -12 hingga 12 V output (24 Vpp), akurasi basis waktu 1 ppm.

Marthein
sumber
Halo. Di masa depan, tolong ungkapkan afiliasi Anda dengan produk yang Anda iklankan. Terima kasih.
Bly aku! Lihat harganya! Sepertinya produk yang bagus. Tidak dalam kisaran anggaran saya.
Piotr Kula
Tidak mengetahui keharusan pengungkapan afiliasi. Teks yang diubah untuk menunjukkan saya berafiliasi dengan teknik TiePie.
Marthein
0

Kesempatan terbaik Anda adalah mencoba jika sigrok dan libsigrok frontend- nya dapat dikompilasi pada Pi, dan kemudian membeli beberapa perangkat keras osiloskop yang kompatibel. Dengan begitu Anda dapat mengambil sinyal hingga 24 sampel mega per detik. Dengan pengetahuan yang cukup Anda dapat menyesuaikan perangkat lunak dengan cara apa pun yang Anda inginkan, termasuk transmisi nirkabel ke perangkat seluler.

avra
sumber
0

Seseorang berbicara tentang Sigrok. Saya pikir cara terdekat adalah menggunakan CY7C68013A yang didokumentasikan dengan baik dengan driver EZ-USB FX2LP. Di PC desktop itu tidak bekerja dengan Weezy, tetapi pada Jessy itu bekerja dengan baik. Berikut adalah batasan yang diketahui sekitar 24 Msps. Saya memikirkan cara lain, menggunakan antarmuka kamera. Antarmuka ini dapat mengelola 2,1 mega pixel dan 30 frame per detik, yang berarti dapat mentransfer data ke GPU dengan kecepatan lebih dari 60 mega "sampel" per detik. Soounds lebih bermanfaat daripada 20MHz SPI atau USB.

tovis
sumber
Ini adalah antarmuka digital, jadi ini tidak akan menghasilkan osiloskop kecuali Anda mengendarainya dengan output ADC kecepatan tinggi. Sebagian besar solusi praktis sampel pesanan besarnya lebih cepat, tetapi jangan melakukannya terus menerus - yang lebih cocok untuk masalah biasa.
Chris Stratton
-1

Jika Anda tidak keberatan terbatas pada frekuensi audio, saya menggunakan MCP3202 12-bit dual channel A / D converter untuk mendapatkan pi dengan spidev, dan pydatascope untuk menampilkan data yang dikirimkan melalui Ethernet melalui soket TCP. Pydatascope juga bertindak sebagai penganalisa spektrum!

Saya membuat perubahan yang relatif sepele pada kode open source pydatascope untuk memiliki dua saluran, terutama karena itu mudah dan bukan karena saya benar-benar membutuhkannya.

Posting tindak lanjut atau kirim saya langsung jika Anda memiliki pertanyaan, dengan senang hati saya akan membantu.

James Phillips
sumber
Anda menggunakan gambar berhak cipta saya tanpa izin. Harap hapus gambar yang dilindungi hak cipta dari situs web Anda.
James Phillips
Terima kasih atas jawaban Anda @ James Philips. Saya menghapus gambar dari jawaban Anda. Sedang menunggu untuk ditinjau. Perhatikan bahwa saya bukan orang yang menambahkannya. Bisakah Anda memberikan alamat situs Anda yang berisi gambar untuk mereka yang tertarik untuk melihatnya?
niw3