Pi è abbastanza potente per un progetto di oscilloscopio?


18

Il mio obiettivo è creare strumenti basati su Pi, iniziando con un oscilloscopio. Quindi ho letto le risposte a

Sembra possibile leggere ingressi analogici a frequenze di campionamento molto basse, ma mi chiedo se potrei raggiungere frequenze di mega campionamento al secondo. L'acquisizione continua dei dati sarebbe probabilmente difficile, se possibile, quindi posso farne a meno. Pi sarebbe equipaggiato per questo? Voglio osservare le forme d'onda sui display collegati inizialmente a Pi, e successivamente sui miei dispositivi mobili (mentre Pi trasmette loro dati wireless).

La mia esperienza con il sistema su chip mi dice che questi sistemi possono facilmente saturare su I / O continuo. Questo vale anche per Pi?

Risposte:


22

Diamo una panoramica di alto livello di ciò che ha un oscilloscopio:

Per prima cosa abbiamo il front-end analogico. Qui abbiamo una rete di adattamento di impedenza per le sonde (ma le sonde dovranno avere anche una parte di adattamento della capacità), sezione di attenuazione (molto importante, quindi non sovraccarichiamo l'ADC o lasciamo entrare alte tensioni), attivazione e connessione a convertitore da analogico a digitale. Non parlerò troppo di questo, dal momento che non sono troppo bravo con le cose analogiche, ma la linea di fondo è: non c'è niente che possiamo fare con Pi in questa sezione.

Successivamente abbiamo la parte del convertitore da analogico a digitale. Avrai bisogno di almeno un ADC per ciascun canale. Altro può essere utilizzato per una frequenza di campionamento più elevata. Nell'ambito tradizionale, l'ADC è collegato a un dispositivo ASIC o FPGA. Vengono utilizzati perché i computer tradizionali non sono abbastanza in tempo reale (e non confondono in tempo reale con velocemente!) Per elaborare i dati forniti dall'ADC. Tali dati vengono quindi memorizzati nella RAM di qualche tipo. Alcuni dispositivi utilizzeranno la RAM statica, mentre altri utilizzeranno la RAM dinamica. In generale, l'approccio SRAM è più tradizionale e visto nei produttori di grandi nomi, mentre l'uso della DRAM sembra essere l'approccio più nuovo visto nelle unità progettate in Cina più economiche.

La quantità di RAM e la sua velocità determineranno quanti campioni possono essere memorizzati. Quasi sempre l'ADC sarà ADC a 8 bit, quindi per esempio un megasample avremo bisogno di 8 b volte 100000 = 8 Mb o 1 MB di RAM. Per un MSa / s, avremo bisogno di RAM che possa funzionare a quelle velocità. Oggi dovrebbe essere relativamente facile da ottenere. L'FPGA di solito guida direttamente la RAM ed è responsabile della memorizzazione dei dati al suo interno. Funziona riempiendo la memoria di esempio mentre c'è ancora spazio vuoto e quindi sovrascrivendolo quando è pieno. Quando sono presenti più ADC per canale, l'FPGA li imposterà in modo che inizi prima il campionamento, quindi il secondo di clock successivo e così via. Al termine del campionamento, il campione del primo ADC verrà prima scritto in memoria, quindi il secondo campione ADC. Questo farà sembrare che gli ADC stiano campionando più velocemente di quanto non siano in realtà.

Il prossimo punto di questa sezione è che i campioni dovrebbero essere equidistanti nel tempo. Questo è il problema principale con l'uso di PC negli oscilloscopi e il motivo per cui FPGA e ASIC sono predominanti. Se alcuni campioni sono in ritardo o in anticipo, l'immagine rappresentata sullo schermo sarà errata.

In questa parte vediamo il primo possibile utilizzo del Pi. Se la frequenza di campionamento è abbastanza bassa, potremmo essere in grado di guidare gli ADC direttamente dal Pi e archiviare i loro risultati nella RAM di Pi. La velocità con cui possiamo andare dipende dal modo in cui l'ADC è collegato al Pi e da come Pi esegue il suo I / O. Da quello che ho letto, la massima velocità delle porte I ^ 2C di Pi è di 150 MHz (quanto sarebbe facile raggiungere GNU / Linux è un'altra domanda) mentre la massima velocità standardizzata è di 5 MHz e per SPI la massima velocità in Pi è 250 MHz. Non sono sicuro di quale sia la massima velocità standard di SPI, ma mi aspetto che sia al massimo da qualche parte nella gamma di 100 MHz.

Quindi in teoria abbiamo una velocità più che sufficiente su Pi per far funzionare un ADC in un range MSa / s basso. Ho la sensazione che la velocità della RAM non sarà un problema qui, ma non ho dati per eseguirne il backup. In tal caso, avremmo un grande vantaggio rispetto ai normali ambiti: ci sarebbe una grande quantità di memoria di acquisizione disponibile. Ad esempio, se dedichiamo 32 MiB di RAM al programma per la memoria di campionamento e disponiamo di due canali, il che ci lascerebbe con 16 MiB per ciascun canale o poco più di 134 Mb o 134 megasample per canale. Questo è qualcosa che ancora oggi molti oscilloscopi non hanno.

L'aspetto negativo è che avremmo bisogno di pesanti modifiche al sistema operativo per poter ottenere un campionamento accurato qui. Non ho alcuna esperienza con Linux in tempo reale, quindi non so quanto sarebbe facile.

Comunque, andiamo al passo successivo. Quindi abbiamo un sistema di campionamento che sta riempiendo la RAM. La parte successiva è il grilletto. Il trigger è strettamente correlato alla frequenza di aggiornamento dello schermo. Ciò che fondamentalmente fa è trovare un campione interessante e tenerlo in memoria. Quando viene attivato l'oscilloscopio, continua il campionamento dopo l'attivazione fino a quando non ha riempito la memoria e quindi lo invia per l'elaborazione e la visualizzazione sullo schermo. Durante l'elaborazione dei dati, il sistema di campionamento è spesso bloccato e in attesa della visualizzazione dei dati. Questo è il motivo per cui gli ambiti di fascia bassa hanno frequenze di aggiornamento inferiori mentre gli ambiti di fascia alta avranno speciali visualizzazioni di frequenza di aggiornamento elevata e impiegheranno molto meno tempo ad aspettare che i dati vengano visualizzati.

In questa sezione ci sarà spesso un altro ASIC o FPGA che eseguirà l'elaborazione del segnale sui campioni, qualsiasi decodifica di protocollo se l'oscilloscopio lo supporta e guida il display stesso.

Questa è la parte in cui da quello che posso vedere il Pi può davvero brillare. Può guidare un bel display 1920x1080 (mentre gli ambiti sono spesso nella terra secondaria 800x600) e può fare molto bene la decodifica del protocollo. L'unico problema che posso vedere sarebbe la velocità e il modo in cui l'elaborazione influirebbe sui tempi di attesa. Se optiamo per una bassa frequenza di aggiornamento, possiamo ottenere un analizzatore logico davvero valido.

Infine, una parola sugli oscilloscopi USB e sul perché USB in genere è dannosa per questo tipo di progetto: l'oscilloscopio USB tradizionale effettua input e campionamento e invia i dati di campionamento al PC per l'elaborazione per cui esiste un'applicazione host. Fondamentalmente qualcosa di molto simile si farebbe anche con Pi. Di solito le applicazioni per PC sono progettate male e piene di bug. La prossima parte negativa è l'USB stesso. È pubblicizzato come bus veloce che può fare 480 Mb / s in modalità "Hi-Speed". La verità è che è estremamente raro trovare un controller USB in grado di supportare velocità così elevate (la media sembra essere di circa 250 Mb / s da quello che ho visto) e che come protocollo non è molto adatto a nessun reale -applicazione temporanea. Innanzitutto è condiviso tra tutti i dispositivi su un hub (e Pi ha solo una porta USB a cui è collegato Ethernet + Hub USB), ha un sovraccarico relativamente elevato (rispetto a SPI) e una latenza elevata (ricorda che a 1 MSa / s ogni campione dura solo 1 µs, quindi dobbiamo avere memoria sulla nostra scheda poiché non possiamo inviare campioni in tempo reale tramite USB). Infine, l'uso dell'USB renderebbe l'acquisizione dei dati parte dell'ambito come un altro oscilloscopio USB ed è qui che perdiamo tutti i vantaggi dell'utilizzo di Pi: i computer desktop tradizionali sono molto più comuni, più veloci, più facilmente ottenibili e hanno capacità USB molto migliori.

EDIT Ho letto un post relativamente recente di Gert van Loo e secondo lui, i tassi realistici per I ^ 2C di Pi sono 400 kHz e per SPI sono 20 MHz.


Qual è l'apice della tua risposta? Questo è più simile a un wiki.
Piotr Kula,

@ppumkin Sì, una domanda come questa richiede tale risposta .. Beh, non c'è pinnacolo. Non ci sono state fornite informazioni sufficienti sulle prestazioni previste del dispositivo di cui abbiamo bisogno, quindi supponendo che Pi effettuerà l'acquisizione, la linea di fondo sarebbe sì, per frequenze abbastanza basse. Se Pi non esegue l'acquisizione, è inutile utilizzare Pi a causa delle sue scarse prestazioni USB.
Andreja,

8

Abbiamo scoperto che Raspberry Pi è una piattaforma eccellente per eseguire il software necessario per un progetto come questo. Il problema è innanzitutto ottenere i segnali nell'RPI ed eseguire l'acquisizione del segnale in tempo reale senza jitter ad alta velocità sulla stessa CPU che esegue O / S e software applicativo. La nostra soluzione è l' oscilloscopio BitScope Raspberry Pi che accoppia un BitScope (per l'acquisizione di forme d'onda di segnali misti ad alta velocità) con il Raspberry Pi che esegue tutto il software necessario.

inserisci qui la descrizione dell'immagine


shameless plug =)
lenik,

2
È fantastico. Ma non ha nulla a che fare con la risposta! O forse dimostra che il Pi è troppo debole per essere un oscilloscopio?
Piotr Kula,

Il Pi non è "troppo debole" ma non ha la capacità I / O necessaria per l'acquisizione della forma d'onda (ad alta velocità). Nelle parole della domanda originale, è "sotto equipaggiato per quello" :-)
BitScope

2

NB: Questo è più un pezzo di testo "pensante ad alta voce" che una vera risposta

L'idea mi è passata per la testa qualche tempo fa, e mi piace ancora l'idea generale!

Per quanto ne so, gli ambiti di fascia alta sono da 15 anni (o anche più) solo computer (PC) con una serie di I / O ad alta velocità specializzati. Penso che quando un I / O simile è progettato / collegato all'RPi, il risultato potrebbe essere sorprendentemente buono.

IMHO un buon modo per farlo è quello di consentire all'RPi di archiviare e visualizzare i dati raccolti (ricevuti ad esempio tramite la porta USB) e lasciare che alcuni hardware specializzati eseguano la misurazione ad alta velocità. Questa unità di misura ad alta velocità può quindi essere controllata dall'RPI in base all'input dell'utente o qualcosa di simile.

Nella prima versione dell'RPi c'erano / ci sono alcuni problemi con le porte USB, ultimamente non ho cercato se quelli sono stati risolti. Ho anche sentito una voce secondo cui la nuova versione 2.0 dell'RPi non dovrebbe avere questi problemi, ma non ho nemmeno controllato questa voce.

Penso che i risultati senza hardware esterno (specializzato) siano limitati a causa del numero di porte I / O e del fatto che un intero sistema operativo è in esecuzione su di esso (il che limita le opzioni in tempo reale). A meno che tu non abbia intenzione di scrivere il tuo sistema operativo?

Anche usare ad esempio i chip I2C a questo scopo non avrà una velocità sufficiente per fare qualcosa di veramente bello. SPI offre già molta più larghezza di banda (fino a 100 Mhz dalla cima della mia testa), ma andrei per USB e, se necessario, comprimere, o utilizzare qualche buon schema di codifica prima di inviare i dati, per ottenere più larghezza di banda.

Quindi immagino sia possibile, ma l'hardware che deve essere aggiunto all'RPi sarà molto più costoso dell'RP stesso.

Ultimo ma non meno importante (prima che smetta di sognare ad occhi aperti su questo argomento) non sarei sorpreso se una ricerca su Internet provocherebbe un gruppo già impegnato a farlo.


1

La risposta è si.

È abbastanza potente! Ma solo per determinate frequenze - Come già sottolineato a causa delle limitazioni.

COSÌ! -> Devi chiederti cosa vuoi misurare?

  • Perché non stai chiedendo specificamente cosa vuoi misurare, le risposte sono aperte alla speculazione.
  • Quindi lascia che ti presenti alternative e suggerimenti. Forse puoi fare una nuova domanda che è più specifica per l'argomento Oscillatore Raspberry e non generale!

Gli oscillatori possono variare da semplici basse frequenze che costano 5 USD, e quindi altri possono gestire fino a 50 Ghz + - che costano quanto una piccola casa! 75,000USD-100.000 dollari!

Penso che il Raspberry sarà abbastanza buono per misurare le frequenze sub Giga, come segnali wireless 433mhz, comunicazioni bus CPU a bassa velocità, TTS / UART, debug I2C - non molto di più. E le frequenze più alte non saranno davvero precise, poiché in base alla progettazione il Raspberry non esegue il sistema operativo in tempo reale. Quindi dovrai iniziare con il sistema operativo (o come già detto dispositivi esterni in tempo reale- Ma qual è il punto allora?)

Ma se vuoi davvero misurare i segnali, puoi acquistare un dispositivo davvero buono ea prezzi ragionevoli che è alla pari delle specifiche Raspberry. Ma è già ben progettato, pieno di funzionalità, molto maturo nel design e ha dimostrato di essere utile in un ambiente hobbistico.

Non c'è bisogno di reinventare la ruota qui. Ad esempio un DSO Nano per meno di 100USD single channel.

inserisci qui la descrizione dell'immagine

Un canale DSO Nano Quad per meno di 200 USD

inserisci qui la descrizione dell'immagine

E poi, cosa NON PUOI FARE un Raspberry o un dispositivo simile!

E costa una piccola fortuna ...

inserisci qui la descrizione dell'immagine

  • Fino a 110 Ghz, con disco rigido per memorizzare dati, simulazioni e trigger estremamente precisi.
  • Misura Buuetooth, WCDMA / EDGE / 3G / 4G, Wireless A / B / G / N 2.4Ghz / 5Ghz, SATA, AGP / PCI / PCI-Express, segnali Raw Satellite, canali head del disco rigido, Ethernet, ecc, ecc. .

2
Potrei far sembrare il mio RPi come il Rohde & Schwarz, sarebbe un bel caso, forse un po 'sopra la collina, caso mod :-)
ikku

LOL! Sarà uno spettacolo per gli occhi irritati :)
Piotr Kula,

1

È possibile collegare uno dei nostri oscilloscopi Handyscope HS5 / generatori di forme d'onda arbitrari TiePie Engineering alla porta USB. Una libreria compilata per il Raspberry Pi per utilizzare uno o più oscilloscopi contemporaneamente è disponibile per il download. Lo strumento utilizza i propri tempi e memoria, quindi non si verificano perdite di prestazioni. Quindi sì, il Pi è abbastanza potente per un progetto di oscilloscopio.

Handyscope HS5

Specifiche chiave dell'oscilloscopio: 2 canali, 14 bit, 500 MS / s, larghezza di banda 250 MHz, 20 MS / s streaming continuo senza gap a 14 bit, 32 MS di memoria per canale, precisione della base dei tempi 1 ppm.

Specifiche chiave del generatore di forme d'onda arbitrarie: forme d'onda da 1 µHz a 30 MHz, 240 MS / s, 14 bit, memoria 64 MS, uscita da -12 a 12 V (24 Vpp), precisione della base dei tempi 1 ppm.


Ciao. In futuro, ti preghiamo di rivelare la tua affiliazione con il prodotto che stai pubblicizzando. Grazie.

Bly me! Guarda i prezzi! Sembra prodotti carini però. Non nel mio budget.
Piotr Kula,

Non era a conoscenza della necessità di divulgazione dell'affiliazione. Testo modificato per indicare che sono affiliato all'ingegneria TiePie.
Marthein,

0

La tua migliore possibilità è provare se sigrok e il suo frontend libsigrok possono essere compilati su Pi, e quindi acquistare un hardware oscilloscopio compatibile. In questo modo è possibile acquisire segnali fino a 24 mega campioni al secondo. Con una conoscenza sufficiente puoi personalizzare il software come preferisci, inclusa la trasmissione wireless a dispositivi mobili.


0

Qualcuno parla di Sigrok. Penso che il modo più vicino sia usare CY7C68013A ben documentato con driver EZ-USB FX2LP. Su PC desktop non funzionava con Weezy, ma su Jessy funziona bene. Ecco la limitazione nota di circa 24 Msps. Sto pensando a un altro modo, usando l'interfaccia della fotocamera. Questa interfaccia potrebbe gestire 2,1 mega pixel e 30 frame al secondo, il che significa che potrebbe trasferire i dati alla GPU con una velocità di oltre 60 mega "campioni" al secondo. Suoni più utili di 20 MHz SPI o USB.


Queste sono interfacce digitali, quindi questo non produrrebbe un oscilloscopio a meno che non le si guidi con un output ADC ad alta velocità. La maggior parte delle soluzioni pratiche campiona ordini di grandezza più rapidamente, ma non lo fa continuamente, il che si adatta meglio ai normali problemi.
Chris Stratton,

-1

Se non ti dispiace essere limitato alle frequenze audio, uso un convertitore A / D a doppio canale MCP3202 economico a 12 bit per acquisire sul pi con spidev e pydatascope per visualizzare i dati passati su Ethernet tramite socket TCP. Pydatascope funge anche da analizzatore di spettro!

Ho apportato modifiche relativamente banali al codice open source pydatascope per avere canali doppi, soprattutto perché era facile e non che ne avessi davvero bisogno.

Pubblica follow-up o inviami una mail direttamente in caso di domande, saremo lieti di aiutarti.


Stai usando la mia immagine protetta da copyright senza permesso. Rimuovi l'immagine protetta da copyright dal tuo sito web.
James Phillips,

Grazie per la tua risposta @James Philips. Ho rimosso l'immagine dalla tua risposta. Sta aspettando di essere rivisto. Nota che non sono io quello che l'ha aggiunto. Puoi fornire l'indirizzo del tuo sito che contiene l'immagine per coloro che sono interessati a vedere?
niw3,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.