DSO 101, con Arduino

Arduino e Picoscope 2205A MSO

L'oscilloscopio è lo strumento principale usato nel laboratorio di elettronica per l'osservazione e la misura di segnali variabili nel tempo. Oggi si utilizzano quasi esclusivamente oscilloscopi digitali (Digital Storage Oscilloscope, DSO), spesso collegati al computer.

In questa esercitazione introduttiva (nota 1) utilizzeremo l'oscilloscopio per osservare alcuni segnali generati da Arduino.

Il materiale utilizzato:

Sonda per oscilloscopio

Preliminari

Prima di iniziare verifichiamo di aver installato:

Inoltre:

Sonda X1 / X10

Collegare PicoScope al PC con il cavo USB e successivamente avviare il programma. Se PicoScope non è collegato viene eseguita la modalità "demo" del software, utile per esercitarsi, ma non per fare misure reali. Di seguito le due schermate a confronto, in alto quando lo strumento è collegato, in basso la versione demo:

PicoScope Demo

Individuare:

Attenuatore di ingresso

Base dei tempi

Trigger

Running

Attività 1

Il primo programma scritto per Arduino è normalmente il seguente (nota 4):

void setup() { pinMode(LED_BUILTIN, OUTPUT);
             }
void loop() { digitalWrite(LED_BUILTIN, HIGH);
              delay(1000);
              digitalWrite(LED_BUILTIN, LOW);
              delay(1000);
            }

Il LED presente sulla scheda Arduino dovrebbe lampeggiare circa una volta al secondo.

Per osservare con l'oscilloscopio il segnale occorre collegare:

In questo modo misureremo la tensione tra il pin 13 di Arduino e la massa. Alcuni aspetti da tenere ben presenti:

La tensione Vo misurata

Sullo schermo dell'oscilloscopio osserveremo un'immagine simile alla seguente; la linea orizzontale passa da 0 V e 5 V in modo sincronizzato con l'accensione e lo spegnimento del LED.

Led lampeggiante: 0,5 Hz

Per osservare meglio il segnale dobbiamo impostare la base dei tempi su un valore più adeguato, per esempio ad 1s/div (nota 3):

Led lampeggiante: 0,5 Hz

Siamo interessati a misurare:

Nel grafico possiamo leggere direttamente che:

La lettura è resa più agevole bloccando l'immagine con il pulsante Running/Stopped (ciò È MALE...) ed utilizzando i cursori (rulers) orizzontali e verticali.

I rulers vengono posizionati trascinando con il mouse i rettangoli presenti lungo l'asse verticale, in alto ed in basso.

Rulers

Sugli assi del grafico, in corrispondenza dei rulers, è possibile leggere:

Nella finestra che viene automaticamente visualizzata è inoltre possibile leggere anche:

Modifichiamo il valore dell'attenuatore di ingresso del canale A, portandolo per esempio su ± 20 V oppure ± 5 V; osserviamo i cambiamenti nel grafico e nelle tensioni misurate.

Attività 2

L'oscilloscopio è un strumento utile soprattutto per visualizzare segnali di breve durata. Se modifichiamo il codice riducendo i ritardi presenti a pochi millisecondi il LED continuerà a lampeggiare, ma il nostro occhio non sarà più in grado di osservare il fenomeno perché troppo veloce.

Possiamo per esempio impostare un ritardo di 20 ms ( delay(20) ) o meno ed osservare il segnale generato.

Per misurare il fenomeno con l'oscilloscopio occorre scegliere una base dei tempi adeguata. In molti casi è utile poter visualizzare 3-5 cicli del segnale.

L'immagine che appare scorre continuamente sullo schermo ed è praticamente illeggibile. Per fermarla è possibile:

Segnale con delay() breve

Leggiamo sul grafico:

Utilizziamo i cursori per misurare:

Utilizziamo l'apposita icona ( Mesurements ) per effettuare misure in modo automatico:

Impostiamo diversi valori con delay() e misuriamo i segnali generati.

Possiamo anche eliminare del tutto l'uso di delay() e misurare il segnale generato.

I segnali visualizzati possono essere salvati in vari formati per poterli analizzare in un secondo momento:

Attività 3

Colleghiamo:

Sonda collegata al pin 11

Riscriviamo il codice già visto adattandolo al pin 11 e verifichiamo il suo funzionamento.

Scriviamo il seguente codice (nota 5) e verifichiamo il suo funzionamento, sia osservando il LED, che dovrebbe apparire debolmente acceso, sia attraverso l'oscilloscopio.

void setup() {
  pinMode(11, OUTPUT);
  }
void loop() {
  analogWrite(11, 25);
  }

Modifichiamo il valore da 25 a 50 (o altro valore) ed osserviamo il suo funzionamento.

Colleghiamo una seconda sonda all'oscilloscopio (canale B, rosso). Il coccodrillo della seconda sonda deve essere, come sempre, collegato a massa.

Due sonde

Le due tensioni misurate dai due canali possono essere indicate sullo schema nel modo seguente, dove VA è la tensione generata da Arduino e VB è la tensione ai capi del LED.

Le due tensioni misurare

Attiviamo il canale B dell'oscilloscopio usando l'apposito pulsante. I due canali hanno in comune l'asse del tempo, ma il posizionamento verticale, la scala ed i cursori possono essere scelti indipendentemente:

Due canali

Si noti che i due canali hanno impostazioni diverse per meglio osservare i due segnali:

Per una maggiore semplicità nelle misure, il trigger dovrebbe essere impostato in riferimento al segnale di ampiezza maggiore (canale A in questo caso):

Misuriamo per ciascun canale le tensioni massime e minime, il periodo, la frequenza, TON, TOFF. Usiamo sia i cursori che le misure automatiche.

[ Avanzato ] Se siamo interessati alla misura della tensione ai capi del resistore non possiamo semplicemente collegare la sonda (perché?). Dobbiamo invece applicare la legge di Kirchhoff alle maglie:

Misurare VR

VA - VR - VB = 0

VR = VA - VB

Questa operazione può essere effettuata attraverso Math Channels (Math channels):

Math Channels:

[ Avanzato ] Analogamente non possiamo misurare la corrente nel LED in modo diretto (perché?). Possiamo però applicare le legge di Ohm al resistore:

IR = VR / R = (VA - VB) / R

Anche in questo caso è possibile usare Math Channels → Edit:

Attività 4

Colleghiamo ad Arduino un resistore (da 1 kΩ a 10 kΩ) ed un condensatore (da 100 nF a 1 µF):

RC

Visualizziamo la tensione in uscita al pin 11 di Arduino e la tensione ai capi di C:

RC: tensioni

Misuriamo per ciascun canale le tensioni massime e minime, il periodo, la frequenza. Usiamo sia i cursori che le misure automatiche.

Il segnale collegato al canale B appare molto piccolo, al limite della leggibilità (nota 7). Il tentativo di modificare l'attenuatore di ingresso porta a volte a situazioni di superamento della tensione misurabile (overrange), identificato da un punto esclamativo bianco su fondo rosso:

[ Avanzato ] Una tecnica per meglio visualizzare il segnale, a volte utile in questi casi, è quella di utilizzare un accoppiamento AC (AC coupling mode). Esso sottrae automaticamente al segnale il suo valor medio, permettendo di impostare l'attenuatore di ingresso su un valore più piccolo senza causare overrange.

Accoppiamento AC

Attenzione!: in questo caso le tensioni misurate non sono quelle reali, ma la differenza rispetto al valor medio!

[ Avanzato ] Visualizziamo la tensione ai capi di R

[ Avanzato ] Visualizziamo la corrente in R

Attività 5

Colleghiamo l'ingresso di un inverter alla porta 11 di Arduino, alimentiamo il circuito integrato e visualizziamo le tensioni in ingresso ed in uscita alla porta logica.

Arduino e porta NOT

Porta NOT: forme d'onda

Misuriamo per ciascun canale le tensioni massime e minime, il periodo, la frequenza. Usiamo sia i cursori che le misure automatiche.

[ Avanzato ] I segnali potrebbero apparire distorti e affetti da interferenze. Per migliorare la qualità della misura è utile:

[ Avanzato ] Se diminuiamo di molto la base dei tempi possiamo osservare che i fronti di salita ed i fronti di discesa non sono verticali e che tra ingresso ed uscita è presente un ritardo di propagazione (nota 8).

Attività 6

[ Avanzato ] Colleghiamo l'oscilloscopio al pin Tx ed osserviamo il segnale generato dal seguente codice:

void setup() {
  Serial1.begin(9600);
  }
void loop() {
  Serial1.write(10);
  delay(10);
}

Si tratta di una trasmissione seriale, anch'essa non facile da bloccare con il trigger, soprattutto se si toglie o diminuisce il delay().

Osservare gli effetti della modifica dell'argomento di:

Note

  1. In American university course numbering systems, the number 101 is often used for an introductory course at a beginner's level in a department's subject area. [...] Based on this usage, the term "101" has been extended to mean an introductory level of learning or a collection of introductory materials to a topic
  2. La posizione x10 garantisce una maggior banda passante ed una maggiore impedenza di ingresso, per questo è preferita nelle misure avanzate. Richiede un'operazione preliminare di compensazione e potrebbe rendere problematico l'esame di segnali di piccola ampiezza. Infine, per ottenere misure di ampiezza corrette, è necessario impostare sull'oscilloscopio la posizione X10.
  3. Il termina divisione (div) indica semplicemente un "quadretto" che, tradizionalmente forma una griglia 10 x 8. Per esempio la scritta 1 ms/div significa che ogni "quadretto" corrisponde ad un millisecondo e quindi il grafico ha durata 10 millisecondi.
  4. Per una spiegazione dettagliata: https://docs.arduino.cc/built-in-examples/basics/Blink
  5. Per una spiegazione dettagliata: https://www.arduino.cc/reference/.../analogwrite
  6. Nell'esempio mostrato è stato utilizzato Arduino 101
  7. L'andamento effettivo dipende dal valore di R, dal valore di C e dal valore impostato con analogWrite()
  8. Una discussione dell'argomento che va oltre gli scopi di questa pagina coinvolge anche alcune caratteristiche dell'oscilloscopio usate per la misura


Data di creazione di questa pagina: ottobre 2024
Ultima modifica: 14 novembre 2024


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima