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:
Prima di iniziare verifichiamo di aver installato:
Inoltre:
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:
Individuare:
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:
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.
Per osservare meglio il segnale dobbiamo impostare la base dei tempi su un valore più adeguato, per esempio ad 1s/div (nota 3):
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.
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.
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:
Leggiamo sul grafico:
Utilizziamo i cursori per misurare:
Utilizziamo l'apposita icona ( ) 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:
Colleghiamo:
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.
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.
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:
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:
VA - VR - VB = 0
VR = VA - VB
Questa operazione può essere effettuata attraverso 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:
Colleghiamo ad Arduino un resistore (da 1 kΩ a 10 kΩ) ed un condensatore (da 100 nF a 1 µF):
Visualizziamo la tensione in uscita al pin 11 di Arduino e la tensione ai capi di C:
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.
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
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.
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).
[ 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:
Data di creazione di questa pagina: ottobre 2024
Ultima modifica: 14 novembre 2024
Appunti scolastici - Versione 0.1028 - Novembre 2024
Copyright 2012-2024, Vincenzo Villa (https://www.vincenzov.net)
Creative Commons | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)