Oscilloscopio digitale Open Source

DSO Nano v2 Immagine tratta da: http://farm6.staticflickr.com/5176/5472454544_0cf570f70e_z.jpg

Chi ha detto che, perché un dispositivo sia semplice, efficace, versatile e potente, c’è bisogno che costi un occhio della testa? Beh, in realtà si tratta di esperienza di vita vissuta un pò da tutti. Tuttavia, quello che vi proponiamo oggi, è un simpatico esperimento Open Source, un progetto davvero interessante che prova a coniugare tutte queste caratteristiche per creare un utile supporto al debug ed all’analisi dei circuiti. Stiamo parlando di un oscilloscopio digitale con schema elettrico e software disponibili! Analizzeremo insieme a Voi ogni parte di questo grandioso progetto.

Che cos’è DSO Nano v2

Il DSO Nano v2 (il cui nome è acronimo di Digital Storage Oscilloscope)  è, per l’appunto, un Oscilloscopio Digitale progettato per permettere, ad un ingegnere elettronico ma non solo, di eseguire operazioni di analisi elementari sui segnali. Si tratta, come vedremo meglio tra poco, di un dispositivo dalle dimensioni molto contenute che utilizza un ARM Cortex™-M3 a 32-bit e che permette, grazie alle sue basilari ma complete caratteristiche tecniche, di effettuare operazioni di il controllo delle forme d’onda. Esso è equipaggiato con un display LCD, un lettore di memory card di tipo SD ed un’interfaccia USB che consente la connessione al PC per gestire i dati memorizzati e lavorare sul firmware.

Viste le sue dimensioni (sta davvero in un palmo di mano!), esso consente di fare misure sul campo ed operare in maniera veloce e piuttosto intuitiva. Così, anche il lavoro dell’hobbysta diventerà molto semplice.

Ma la più interessante delle caratteristiche di questo progetto è che esso è letteralmente “a disposizione”. Il progetto è, infatti, Open e chiunque abbia il desiderio di metterci le mani sopra per provare a lavorarci per modificarlo, potrà farlo. Tra un po’ vedremo, nel dettaglio, come avere accesso a queste informazioni.

Nel frattempo, vi siete incuriositi? Bene! Adesso andiamo con ordine…

Features, interfaccia utente, bundle e dintorni

Cominciamo guardandolo da fuori. La struttura di base è davvero semplice e permette di padroneggiare immediatamente lo strumento. Sul wiki ufficiale, pagina in cui compaiono le informazioni complete sul prodotto, viene riportata anche questa immagine

grazie alla quale si può prendere facilmente confidenza con il DSO Nano.

Veniamo adesso alle specifiche tecniche, riportate qui di seguito grazie alla tabella

Display

Full Color 2.8″ TFT LCD 65K 320×240

Banda analogica

0 – 200 kHz

Max sample rate

1Msps @ 12Bits

Profondità di memoria

4096 Punti

Sensibilità orizzontale

1 us/Div~10 s/Div

Posizione orizzontale

modificabile con gli indicatori

Sensibilità verticale

10 mV/Div~10 V/Div (con sonda ×1)

0.5V/Div~100V/Div (con sonda ×10)
Posizione verticale

modificabile con gli indicatori

Impedenza d’ingresso

>500 kOhm

Max tensione input

80 Vpp (by ×1 probe)

Accoppiamento

DC

Modalità di trigger

Auto, Normale, Singolo, None, Scan & Fit

Rising/Falling edge/level trigger

Trigger level modificabile con gli indicatori

Sensibilità del Trigger modificabile con gli indicatori

Funzioni di forma d’onda

Auto measurement: frequency, cycle time, duty cycle, peak voltage, RMS voltage, Average voltage and DC voltage

Markers verticali per misure precise

Markers orizzontali per misure precise

Hold/Run

Generatore di segnale

10 Hz~1 MHz square wave

Memorizzazione della forma d’onda

Micro-SD card

Tipo di connessione al PC con USB

SD card reader (memoria di massa)

Aggiornamento

USB

Alimentazione

500 mAh 3.7 V Lithium battery / USB

Dimensioni (senza probe)

95mm*62mm*13mm

Peso

76 g

Nell’immagine che segue, invece, vi proponiamo la spiegazione completa del display acceso mentre visualizza due forme d’onda di test.

Tutto intorno all’area di visualizzazione vengono posizionati una serie di cursori, indicatori e marker grazie ai quali si accede immediatamente non soltanto alle misurazioni appena effettuate ma anche alla possibilità di impostare ogni singolo parametro.
I pulsanti Left/Right vengono utilizzati principalmente per effettuare la “navigazione” all’interno dei menu dello strumento. La funzione di ciascun elemento viene ben chiarita grazie ai commenti che vedete posizionati nell’immagine.
Si vede chiaramente come sia possibile utilizzare cursori che effettuino misurazioni, come nel caso dell’intervallo temporale evidenziato. Questa, come tutti noi ben sappiamo, che una funzione-chiave nella valutazione del funzionamento di un circuito, specie se lavoriamo con segnali digitali. È davvero una buona notizia che questo strumento sia in grado di effettuare questa misura con una precisione più che accettabile (ma lo vedremo meglio più avanti).
La gestione della navigazione all’interno dei menu viene fatta con evidenziazione della funzione selezionata e l’utilizzo dei pulsanti Up/Down e OK completa il quadro dei comandi disponibili e delle operazioni che è possibile eseguire.

Prima di continuare è importante segnalare che sul sito internet di riferimento per il progetto (che vi indicheremo meglio tra poco) è presente una guida completa che spiega come si può modificare, aggiornare ed impostare ogni parametro della visualizzazione, dai caratteri ai colori, finanche ai menu.

Riguardo l’interfaccia, comunque, c’è da dire che l’estetica dell’oscilloscopio aiuta moltissimo ad identificare immediatamente le funzioni disponibili. Il display, infatti, è letteralmente circondato da pulsanti. Il menu in alto consente di effettuare le modifiche (correzioni/aggiusti) alla visualizzazione del segnale. La barra di stato in basso, invece, fornisce l’indicazione delle misure che vengono effettuate e notifica lo stato di funzionamento del dispositivo.
È possibile modificare questa visualizzazione in maniera da aggiungere altre e più sofisticate funzioni grazie alle opzioni presenti nei menu.

Zoom sul segnale
Muovendo i cursori della “Vertical Scale” e della “Time Base” è possibile esaminare meglio il segnale. Questo risulta particolarmente utile quando quello in esame non è un segnale periodico ma piuttosto irregolare o che presenta delle oscillazioni notevoli.
Modificando, in definitiva, parametri come voltage/div o time/div si può riuscire ad ottenere lo scopo. Ciascuna “div” non è altro che l’unità della griglia di “divisione” dello schermo. Come abbiamo visto in tabella, la scala verticale va da 10 mV/div fino a 10 V/div. La base dei tempi, invece, da 1 us/div a 10 s/div. Necessario è, inoltre, tenere a mente anche che quando la scala dei tempi che si usa è la più grande possibile, la visualizzazione potrebbe sembrare bloccata, come congelata (frozen), dal momento che 10 s/div  vuol dire che ci vogliono 120 secondi per effettuare l’operazione di refresh dell’intero schermo.

La forma d’onda potrebbe essere, come spesso accade all’inizio negli oscilloscopi, non perfettamente centrata nel display. Se la visualizzazione non dovesse essere corretta per questo motivo l’impostazione utile a risolvere il problema sarà certamente la modifica del valore voltage/div.

Grazie alla pressione del pulsante A si può ottenere il freeze  della visualizzazione corrente (praticamente lo stato di funzionamento diventerà HOLD). Una nuova pressione renderà nuovamente operativo l’oscilloscopio (e lo stato tornerà ad essere RUN).

Modalità di trigger

Questo particolare oscilloscopio possiede sei differenti modalità di trigger; si tratta di:

  • AUTO: effettua costantemente l’aggiornamento della visualizzazione del display ed il controllo sull’istante di trigger.
  • NORM (al): visualizza la forma d’onda non appena sia stata sincronizzata e non visualizza nulla se l’aggancio non è riuscito.
  • SING (le): visualizza la forma d’onda non appena sia stata raggiunta una condizione di trigger e poi cancella lo schermo.
  • SCAN: effettua uno sweep continuo e ripetuto della forma d’onda.
  • NONE: aggiorna lo schermo continuamente con la forma d’onda visualizzata a prescindere dall’istante di trigger.
  • FIT: avviene la correzione automatica della posizione e dei fattori di scala sia verticali sia orizzontali per effettuare la corretta visualizzazione.

Tra queste modalità è utile effettuare un confronto, anche per capire quando/dove/come e magari perchè preferirne una o un’altra; facciamo questo con la seguente tabella:

Confronto tra le modalità di trigger

Modo

Trigger

Mostra la forma d’onda

Sincronizzazione

Applicazioni d’esempio

AUTO

Si

Sempre

Yes

Generico

NORM

Si

Triggered

Si

Solo segnali periodici

SING

Si

Triggered

Auto-hold

Cattura di un impulso

SCAN

No

Sempre

No

Monitoraggio di un segnale

NONE

No

Sempre

No

Mostra un forma d’onda non sincronizzata

FIT

Si

Auto-adjust

Si

Mostra segnali periodici

La funzione di automisurazione può essere molto utile per effettuare analisi veloce sui segnali e sulle loro caratteristiche. Le opzioni di misura includono grandezze come la frequenza, il duty-cycle (ovviamente!), la tensione di picco ma anche il valore RMS e molte altre. Ovviamente alcune di queste saranno accessibili soltanto nel momento in cui ci sia effettivamente l’aggancio al segnale e, quindi, almeno un istante di trigger valido.
Come accennavamo in precedenza, per ottenere misure molto più precise di quelle che si possono realizzare “ad occhio”, è possibile utilizzare i marker X1 e X2 sia per le misure di tensione sia per le misure di tempo (infatti “X” sta sia per “V” sia per “T”).
Memorizzazione della forma d’onda
Come si intuisce già guardando le caratteristiche, le forme d’onda visualizzate possono essere salvate grazie all’utilizzo di una memory card di tipo SD che sia formattata con un filesystem di tipo FAT16. Quando la microSD è pronta, l’FS (file save) ed il FL (file load) saranno segnalati tramite l’utilizzo di icone dedicate su schermo.
Generazione di segnale
Il jack audio da 3.5m disponibile viene utilizzato come generatore di segnale. L’uscita è un’onda quadra di frequenza variabile compresa nell’intervallo tra 10 Hz ed 1 MHz. La frequenza può essere modificata grazie al Fo (“frequency out”). La tensione di picco, così come la potenza fornita, dipendono dall’alimentazione; così, quando l’alimentazione attiva è quella batteria, avremo 3.7 V circa mentre se l’alimentazione arriva tramite USB disporremo di 5 V.
Ed a proposito della batteria, vale la pena di specificare di che tipo di alimentazione questo oscilloscopio dispone. L’alimentazione è interna e provvista da una batteria di tipo LiPo da 500 mAh.
E siamo giunti ora la momento della Package list; nel bundle ci sono:
  • DSO Nano V2 (ovviamente)
  • Probe (X1)
  • Test Probe (X1 )
  • Cacciavite (X1)
  • Borsa (X1)
  • Supporto (X1)

Note:
– il cavo Mini-USB NON è incluso nel bundle. Tuttavia per caricare la batteria del DSO sarà necessario averne uno.
– una scheda di memoria da 2 GB tipo Micro-SD è l’ideale per conservare i dati ma anche questa non è compresa nella confezione.

Novità della v2

Come tutte le nuove release, anche questa conta diverse modiche e caratteristiche riviste, alcune, in verità, più significative di altre. La più evidente delle novità riguarda il package, che è cambiato diventando “semi-steel”; questa modifica, in realtà, è stata motivata da diversi fattori, primo tra tutti la durata, in termini di resistenza e robustezza. Queste caratteristiche meccaniche si accompagnano alla necessità di schermare il circuito da potenziali rumori che vadano a corrompere i segnali in transito sulle piste di collegamento. In ultimo, uno degli aspetti che rende, per i produttori, utile questa nuova “veste”, è la faciltà di assembleaggio raggiunta adesso proprio grazie al nuovo case.

La lista delle altre modifiche effettuate si compone di:

  • Unibody PCB design per migliorare l’affidabilità;
  • uso del CI LTC4054 per migliorare la carica della batteria;
  • realizzazione di un canale dedicato per la generazione del segnale;
  • pulsante dedicato per la funzione Auto-Set;
  • connettore per la batteria Fixed;
  • ridimensionamento a 95 mm*62 mm*13 mm e 76 g;
  • aggiornamento del software.

Lo schema elettrico

Per completezza riportiamo uno dei documenti che completano il quadro informativo che i creatori del DSO hanno predisposto: lo schema elettrico. Eccone un’immagine tratta dal pdf che hanno ufficialmente rilasciato.

Grazie a questa immagine risulta immediatamente chiaro come sia costituito il dispositivo, quale sia la sua configurazione hardware completa e come siano stati organizzati i collegamenti tra la sezione di elaborazione dei dati, gestita dal microcontrollore della famiglia STM32F103xx, quella di acquisizione dei dati, che qui viene indicata con “CN1″ (ovviamente più per prassi che per necessità visto che di canali di acquisizione ne è presente solo uno), e quella di acquisizione e gestione degli input, tramite pulsanti dislocati sul case come visto in precedenza.

La sezione di acquisizione è qui caratterizzata da una serie di possibili ingressi, tutti opportunamente diltrati, indirizzati ad un Multiplexer ad 8 canali, il 74HC4051, un dispositivo realizzato in tecnologia cMOS con gate in Silicio. Si tratta, più specificatamente, di un multiplexer/demultiplexer analogico con 3 linee di selezione, un ingresso di enable attivo-Basso (E), 8 ingressi indipendenti ed un pin di in/out comune che permette la gestione degli ingressi sulla base del tipo di segnale in arrivo.

Spicca in questo schema l’FDFMA2P853, un dispositivo progettato come soluzione integrata per caricare le batterie dei dispositivi cellulari, ma non solo; è infatti rivolto ad ogni soluzione portatile a basso consumo. Al suo interno, un MOSFET caratterizzato da una bassa resistenza DS ed un diodo schottky che garantisca basse perdite di segnale condotto.

Il firmware

Ed ora, veniamo al firmware. Iniziamo subito con una breve lista dei tools di cui si ha bisogno:

  1. IAR Workbench evaluation for ARM. (32KB code limit);
  2. la versione del firmware APP più recente disponibile;
  3. Dfuse;
  4. un PC su cui sia in esecuzione un sistema operativo Windows (98 o successivi);
  5. un cavo mini-USB per collegare il DSO al PC.

Il firmware si compone di diverse funzioni, come vediamo qui di seguito nell’astratto del main:

/*******************************************************************************
File Name: main.c  
********************************************************************************/

#include "Function.h"
#include "Menu.h"
#include "Lcd.h"
#include "Calculate.h"
#include "stm32f10x_lib.h"
#include "HW_V1_Config.h"
#include "Files.h"
#include "string.h"
#include "ASM_Function.h"

void   main(void)

{
  • in “Menu.h” si definiscono tutte le variabili che verrano utilizzate, considerandone anche i relativi valori. Utile, a questo scopo è, ad esempio, la funzione che definisce i valori di tensione in relazione alla sensibilità verticale://———— voltage range related parameter definitions————
    unsigned const char Item_V[20][10] = // vertical sensitivity labels
    // 0           1           2           3           4           5          6            7           8           9   probe attenuation x1
    {“10mV/Div”, “20mV/Div”, “50mV/Div”, “0.1V/Div”, “0.2V/Div”, “0.5V/Div”, ” 1V/Div “, ” 2V/Div “, ” 5V/Div “, ” 10V/Div”,
    //    10        11           12         13         14           15          16          17         18          19  probe attenuation x10
    “0.2V/Div”, “0.5V/Div”, ” 1V/Div “, ” 2V/Div “, ” 5V/Div “, ” 10V/Div”, ” 20V/Div”, ” 50V/Div”, “100V/Div”, ” -GND-  “};
  • “Lcd.h” si occupa della gestione dello schermo (facile da intuire, no?) e lo fa, tra le altre, con due funzioni  piuttosto utili: una che imposta le coordinate dell’area di visualizzazione e l’altra che si occupa di gestire gli input./*******************************************************************************
    Function Name : LCD_SET_WINDOW
    Description : use  (x1,y1) and (x2,y2) to set a rectangle  area
    Para :  (x1,y1) and (x2,y2)
    *******************************************************************************/
    void    LCD_SET_WINDOW(short x1, short x2, short y1, short y2)
    {
    LCD_WR_REG(0x0050, y1);
    LCD_WR_REG(0x0051, y2);
    LCD_WR_REG(0x0052, x1);
    LCD_WR_REG(0x0053, x2);
    LCD_WR_REG(0x0020, y1);
    LCD_WR_REG(0x0021, x1);
    LDC_DATA_OUT = 0x0022; // Reg. Addr.
    LCD_RS_LOW(); // RS=0,Piont to Index Reg.
    LCD_nWR_ACT(); // WR Cycle from 1 -> 0 -> 1
    LCD_nWR_ACT(); // WR Cycle from 1 -> 0 -> 1
    LCD_RS_HIGH(); // RS=1,Piont to object Reg.
    }
    /*******************************************************************************
    Point_SCR: Set display position   Input: X, Y
    *******************************************************************************/
    void Point_SCR(unsigned short x0, unsigned short y0)
    {
    LCD_WR_REG(0x0020,y0);
    LCD_WR_REG(0x0021,x0);
    LDC_DATA_OUT=0x0022;  //DRAM Reg.
    LCD_RS_LOW();
    LCD_nWR_ACT();        //WR Cycle from 1 -> 0 -> 1
    LCD_nWR_ACT();        //WR Cycle from 1 -> 0 -> 1
    LCD_RS_HIGH();
    }
  • “Calculate.h” si occupa, tra le altre cose, effettuare le conversioni. Ad esempio tra numeri a 32 bit o a 16 e stringhe con la precisione ad una cifra decimale;
  • l’header file “stm32f10x_lib.h” serve ad effettuare l’inizializzazione di tutti i puntatori alle periferiche ed è un file marchiato STM (Copyright 2007)

Il main risulta piuttosto snello ed utile a chiamare in causa solo le funzioni che servono e quando servono. Esso è prevalentemente costituito da un loop in cui si verifica la presenza di segnale, la condizione di trigger e si effettua l’acquisizione, aggiornando lo schermo di conseguenza. Il tutto in 452 linee di codice.

Una della feature software documentate è la funzione che permette l’esportazione dei dati in formato XML. Qui riportiamo un breve estratto di questa funzione in cui ci sono 5 campioni rilevati attorno alla condizione di trigger.
Nella sezione “Profilo” ci sono informazioni relative alla configurazione attiva al momento dell’acqusizione, dato che potrebbe essere utile acquisire per successiva analisi dei risultati. Ed ancora, sono 3  gli elementi “numerici” in questa sezione, denominati  triggerIndex, sampleCount e timeRange. Il primo rappresenta il numero totale di di campioni presenti nel file (come una sorta di dimensione che, nella revision 3 del firmware è 3072). timeRange, ovvero il secondo, rappresenta l’intervallo temporale  (misurato in secondi) tra il primo e l’ultimo campione (o più semplicemente la durata). Il terzo, è nient’altro che l’indice di trigger. Da questi dati si può facilmente risalire all’intervallo di tempo che c’è tra un campione ed il successivo (basta calcolare timeRange/sampleCount) e con esso, evidentemente, anche la frequenza di campionamento.

<?xml version="1.0" encoding="UTF-8"?>
<Document>
<Profile>
<triggerMode>NORM</triggerMode>
<triggerKind>EdgeRising</triggerKind>
<triggerLevel>3.76V</triggerLevel>
<triggerSensitivity>200mV</triggerSensitivity>
<attenuation>x1</attenuation>
<voltageDiv>1V</voltageDiv>
<timeDiv>200us</timeDiv>
<firmware>V3.20</firmware>
<fileNumber>S003</fileNumber>
<triggerIndex>1220</triggerIndex>
<sampleCount>3072</sampleCount>
<timeRange>24.576e-3</timeRange>
</Profile>
<Point>
<seq>1218</seq>
<val>-40.000e-3</val>
</Point>
<Point>
<seq>1219</seq>
<val>-40.000e-3</val>
</Point>
<Point>
<seq>1220</seq>
<val>5.280</val>
</Point>
<Point>
<seq>1221</seq>
<val>5.200</val>
</Point>
<Point>
<seq>1222</seq>
<val>5.160</val>
</Point>
</Document>

Ed ora è il momento di approfondire l’aspetto davvero più lodevole del progetto: il codice è Open Source e la comunità tutta, gli utilizzatori, i programmatori che lo desiderassero ma anche gli studenti, insomma chiunque può provare a modificarlo sentendosi libero di proporre o apportare aggiornamenti o modifiche a quanto realizzato dai progettisti. Le versioni più aggiornate del firmware richiedono test e verifiche ma se volete dare il vostro contributo questo progetto ve ne darà la possibilità reale. Potrete, così, intervenire su tool, firmware, documentazione ma anche bug ed altro. A tal proposito, vi proponiamo un utile prospetto che segnala gli aggiornamenti effettuati su questo progetto “so far”.

Revisione

Descrizione

Release

v0.9b Prima release ufficiale 25 Agosto 2010
v0.91b Release aggiornata 31 Maggio 2011

Vale la pena di specificare che tutta la documentazione riguardante il progetto, e quindi tutti i dettagli su cosa è cambiato da una versione alla successiva, lo schema elettrico, la part-list, il layout, il firmware e tutto, ma davvero tutto, ciò che possa servirvi (o interessarvi) sapere è reperibile in giro su internet ed in particolare sul wiki del progetto, che è online a questo indirizzo ma anche sul repository ufficiale del DSO Nano, che è questo.

Tiriamo le somme

A questo punto è venuto il momento di dire la mia su questo prodotto ma immagino si sia capito cosa ne penso. Ritengo si tratti di uno strumento davvero ben fatto, che suscita certamente una grande curiosità sia in chi vi scrive sia in chi lo acquista. Uno degli indubbi vantaggi che il progetto ha è il prezzo, davvero più che abbordabile.

Fare misurazioni con uno strumento palmare è sempre una cosa gradita, anche quando le si deve effettuare per mero hobby.

Tuttavia personalmente ne sconsiglio l’acquisto a tutti coloro che non abbiano necessità prettamente “ludiche” o comunque di caratura professionale. La più grande limitazione di questo progetto è in banda, come avrete certamente notato. 200 kHz è numero, certo, e come tale non vuol dire niente. Però se devo provare ad immaginare qualche applicazione, beh vi suggerirei di pensare che la banda del segnale telefonico è 3400 Hz (lordi), quella del segnale audio è 20 kHz (lordi) e… beh, sono le prime due applicazioni che mi sono venute in mente.

Certo, ce ne sono milioni ancora, e di tipo completamente diverso, e sebbene per molte di esse questa banda passante sia sufficiente, per altre magari no. Penso al segnale televisivo o a segnali RF e trasmissioni a banda larga.

Ma probabilmente queste applicazioni suggeriscono da sole che molto altro sarebbe più utile di uno strumento come questo.

E allora, se vi state chiedendo se potrebbe servirvi, vi suggerisco di chiedervi: per fare che cosa?

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

16 Comments

  1. Boris L. 11 dicembre 2012
  2. Boris L. 11 dicembre 2012
  3. Piero Boccadoro Piero Boccadoro 11 dicembre 2012
  4. Emanuele Emanuele 20 dicembre 2012
  5. faberreds 21 aprile 2013
  6. Luigi Francesco Cerfeda 21 aprile 2013
  7. Piero Boccadoro Piero Boccadoro 21 aprile 2013
  8. Piero Boccadoro Piero Boccadoro 21 aprile 2013
  9. Giorgio B. Giorgio B. 21 aprile 2013
  10. Piero Boccadoro Piero Boccadoro 21 aprile 2013
  11. Piero Boccadoro Piero Boccadoro 21 aprile 2013
  12. Boris L. 21 aprile 2013
  13. Boris L. 21 aprile 2013
  14. Nicola Fabbri 21 aprile 2013
  15. Piero Boccadoro Piero Boccadoro 22 aprile 2013
  16. Nicola Fabbri 22 aprile 2013

Leave a Reply