Presentazione
Con Scratch viene simulata la funzione di un Convertitore Analogico Digitale (nota 1).
Grazie alla simulazione si possono apprezzare alcune delle proprietà della conversione.
La conversione analogico digitale (nota 2) converte una tensione analogica in un valore numerico corrispondente:
entrano tensioni, escono numeri
Nota. Il progetto permette di visualizzare la conversione di un evento che viene fatto evolvere in tempo simulato in modo che Scratch possa svolgere correttamente il compito di conversione.
Le diverse funzioni del convertitore sono rappresentate da sprite diversi:
- uno sprite “generatore” genera un segnale per simulare una grandezza fisica Ga presente nell’ambiente (la temperatura, l’intensità luminosa, la quantità di luce …);
- uno sprite “sonda” rileva il segnale e lo trasforma in una tensione variabile Vs proporzionale al segnale, quindi è anche un trasduttore;
- uno sprite amplificatore modifica l’ampiezza del segnale in proporzione Va = Vs * G ed aggiunge eventualmente una componente continua di offset;
- uno sprite S&H campiona la tensione Va e ne trattiene il valore per tutto il tempo necessario alla sua conversione;
- uno sprite convertitore A/D converte la tensione in ingresso restituendo in uscita il numero digit a rappresentare il segnale Ga in ingresso.
Il progetto è disponibile al .
Premendo più volte [tasto giù], si avvia un’animazione che permette ad un oratore di illustrare le funzioni di ciascun componente.
Un aiuta a comprendere il funzionamento della simulazione.
Esempi di conversione
Sono stati predisposti alcuni esempi con i quali si può vedere l’effetto prodotto dalla risoluzione sul risultato finale.
Premendo i tasti numerici seguenti si ottengono conversioni diverse in base alla risoluzione:
- [tasto 1], risoluzione 1 bit;
- [tasto 2], risoluzione 2 bit;
- [tasto 3], risoluzione 3 bit;
- [tasto 4], risoluzione 4 bit.
In essi vengono mantenuti fissi alcuni parametri come:
- periodo di campionamento ∆t camp = 10;
- scala di lettura scalaX = 1 (un passo = una unità di tempo, tic);
Una conversione molto fine si osserva con [tasto 5] che imposta un risoluzione di 5 bit e un intervallo di campionamento ∆t camp = 2.
Gli esempi che seguono mostrano alcuni risultati a risoluzione variabile.
Sono visibili la grandezza originale G amb di colore verde, il numero convertito digit di colore rosso, la tensione V S&H i colore violetto, i valori di soglia di colore rosa.
Aumentando la risoluzione migliora l’approssimazione della tensione discretizzata rispetto alla grandezza originaria.
Si vede anche l’effetto della saturazione che produce un “taglio” alla funzione che dovrebbe riprodurre piuttosto fedelmente la tensione in ingresso.
Risoluzione 1 bit
Con una risoluzione ad un bit si hanno solo due risultati possibili 0 e 1 e l’intervallo di tensione 0-5V viene suddiviso i 2 parti ed è possibile un solo gradino fra i livelli 0 e 5V.
La soglia è una sola posta a 2,5V: se la tensione in ingresso è al disotto di essa il numero in uscita è 0, se ne è al di sopra il valore è 1.
Nota. Una risoluzione così modesta non permette di ricostruire la grandezza originaria ma può essere sufficiente per fare funzionare interruttori a soglia come i relè crepuscolari ammesso che venga aggiunta un’isteresi.
Risoluzione 2 bit
Con una risoluzione a due bit sono possibili 4 risultati 00, 01, 10, 11 e l’intervallo 0-5V viene suddiviso in 3 parti uguali con 4 livelli.
Le soglie sono 3 e sono poste a
0,83
2,5
4,17
e sono possibili 3 gradini.
Risoluzione 3 bit
Con una risoluzione a tre bit sono possibili 8 risultati e l’intervallo 0-5V viene suddiviso in 7 parti uguali con 8 livelli.
Le soglie sono 7 a
0.36
1.07
1.79
2.5
3.21
3.93
4.64
e sono possibili 7 gradini.
Nota. La ricostruzione comincia ad essere interessante. Si vede però l'effetto di una saturazione dove la tensione originaria supera il valore massimo amesso dal convertitore.
Risoluzione 4 bit
Con una risoluzione a quattro bit sono possibili 16 risultati e l’intervallo 0-5V viene suddiviso in 15 parti uguali con 16 livelli.
Per migliorare ulteriormente la precisione della conversione è il caso di aumentare la frequenza di campionamento che equivale a ridurre il periodo “∆t conv”.
Utilizzo avanzato del progetto
All’avvio della bandierina verde si ha il reset di tutte le variabili, dello schermo, l’azzeramento delle liste e l’inserimento dei parametri di base.
Con [tasto F] si disegna la funzione da convertire inserita di default. Il grafico viene ampliato di 100 volte.
Con [tasto T] si effettua un test sulla saturazione con il disegno della funzione troncata che tiene conto dei limiti del convertitore.
Con [tasto G] si modifica il guadagno percentuale dell’amplificazione. Per default il guadagno è fissato al 100% e vale 5.
Con [tasto O] si aggiunge alla tensione amplificata una componente continua di DC offset.
Con [tasto V] si visualizza la tensione amplificata Va che si presenta all’ingresso del convertitore.
Con [tasto C] si avvia la conversione previa una richiesta di definizione dei parametri che sono:
- la risoluzione in bit della conversione (consigliato nella gamma 1-4);
- la scala “scalaX” lungo l’asse orizzontale (con 1 si fa corrispondere un passo lungo l’asse x ad un secondo, con 2 si fa corrispondere un passo lungo l’asse x a 2 secondi …); con scala X inferiore a 1 si vede solo una porzione del periodo a partire da un punto selezionabile a piacere;
- l’intervallo di campionamento “∆t camp”.
Attenzione: il rapporto ∆t camp/scalaX deve essere un numero intero.
Appena terminato l’inserimento dei parametri, il convertitore si avvia automaticamente.
Al termine, con [tasto R] si può ripetere il processo anche dopo aver variato il guadagno G o il DC offset.
Nel grafico si vedono:
- la tensione amplificata (giallo);
- il segnale convertito (rosso);
- barre verticali per fissare gli istanti di campionamento.
La tensione supera la gamma dei valori convertiti.
Sullo stage sono presenti le variabili principali:
- crono: il tempo simulato;
- G amb: il il valore assunto dalla grandezza ambientale sotto misurazione (in una unità di misura non specificabile);
- Vs: la tensione in uscita della sonda;
- gain: il guadagno dell’amplificatore;
- DC: il valore di offset della componente continua da usare per segnali negativi;
- Va: la tensione in uscita dell’amplificatore;
- digit: il valore della tensione Va convertito in numero decimale;
- V S&H: la tensione campionata e trattenuta per consentire la conversione;
- crono0: il momento da cui va effettuata la conversione (0 per default);
- scalaX: la scala dell’asse dei tempi;
- tempo: la variabile tempo misurato in tic;
- risoluzione: il numero di bit previsti per conversione A/D;
- ∆t camp: l’intervalo di tempo in secondi usato per campionare la tensione;
- num quanti: il numero di intervalli disponibili per la conversione;
- quanto: il valore in volt di ciascun intervallo di tensione di uscita a disposizione del convertitore;
ed inoltre le liste :
- record S&H: la lista di tutti i valori di tensione campionati dal blocco S&H;
- digit: la lista dei numeri prodotti all’uscita;
- V out: la lista dei valori di tensione prodotte da un eventuale convertitore D/A nella gamma 0-5V.
A conversione terminata si possono disegnare:
Con [tasto D] si disegna la linea dei valori numerici ottenuti con la conversione;
Con [tasto H] si disegna la linea dei valori raccolti dal blocco S&H;
Con [tasto I] si disegna la linea della tensione ottenibile da un convertitore Digitale Analogico (DAC) ottenuta per interpolazione lineare dei valori di V out nella gamma 0-5V.
Con [tasto E] si cancella tutto.
Con [tasto Q] si cambia sfondo.
Con [tasto A] si disegnano gli assi.
Con [tasto S] si disegnano le soglie di commutazione del convertitore; compare anche la lista delle soglie da fare scomparire premendo di nuovo [tasto S].
Con [tasto L] si disegnano i livelli fissati per il convertitore; compare anche la lista dei livelli da fare scomparire premendo di nuovo [tasto L].
Con [tasto G] si modifica il guadagno percentuale dell’amplificatore.
Con [tasto O] si aggiunge una componente continua di offset.
Dopo aver reinizializzato tutto si può disegnare la funzione del segnale con [tasto F] e quindi si può scegliere il punto di partenza della conversione: con [tasto Z] tenuto premuto, col mouse si fa scorrere un indicatore da destra a sinistra per individuare il punto di inizio della conversione da selezionare con mouseclick.
Fatto questo, tutti i grafici partiranno da questa posizione.
Il generatore di segnale
Lo sprite “generatore” simula la produzione di un segnale di ambiente, per esempio una intensità luminosa, che varia periodicamente tra 0 e 1 o poco più realizzato per mezzo di operazioni su funzioni trigonometriche.
Di default è inserita una variabile “segnale” che vale:
- in questo caso viene calcolato il valore assoluto per avere solo valori positivi;
- il segnale di default è composto da una prima armonica ed una quarta armonica;
- il tempo simulato è dato dal “crono” che può essere settato ad un valore a piacere;
- il periodo è 360 s;
- il valore massimo supera il valore 1;
- il grafico che utilizza 440 punti consente di vedere un periodo intero più un 22% del periodo successivo.
L’implementazione con Scratch è realizzata da:
che fornisce il valore della variabile G amb (il segnale) quando viene fornito il valore della variabile crono.
La forma del segnale, ottenuta con [tasto F], è:
Questo è il segnale di ambiente moltiplicato 100 che verrà convertito.
Si vede che è compreso fra 0 ed un valore che supera decisamente la linea violetta che è posta al valore 100 sul grafico corrispondente al valore 1 del segnale.
Questa linea rappresenta il limite superiore che lo A/D può convertire.
Quando viene scelta la posizione di inizio della conversione, anche questo segnale viene visualizzato a partire dalla stessa posizione.
Per vedere gli assi ed i limiti si preme [tasto A].
La saturazione
I segnali che superano i limiti 0-1 verranno “tagliati” per a causa della saturazione dell’amplificatore, di conseguenza, andranno perse le informazioni per valori esterni ai suddetti limiti. È un fenomeno che corrisponde al clipping degli amplificatori audio.
Con [tasto T] si può effettuare il test sul clipping in quanto si vede lo stesso segnale, in rosso, che viene troncato al superamento dei limiti imposti dal convertitore:
Nel progetto sono a disposizione altre funzioni, basta entrare nella modalità editor di Scratch e sostituirla a quella inserita nel blocco.
Si possono costruire altre funzioni a piacere tenendo conto che il convertitore deve funzionare tra 0 e 5V come, per esempio, accade per la scheda Arduino.
Esercitazione
Ecco un'esercitazione guidata.
Ovviamente basta cambiare i parametri per osservare ulteriormente come si modificano i risutati della conversione.
Approfondimenti.
Di seguito alcuni appunti sulla conversione AD.
Gli spunti per l'articolo sono stati ricavati da:
Tesi di laurea di Motterle Francesco.
Note
nota 1: In un articolo molto più vecchio sono sviluppate considerazioni che quindi si danno per scontate. La vecchia simulazione fu sviluppata con la versione 1 di Scrtach e comunque non era cosi evoluta come quella coollegata con questo articolo, completamente risvista e corretta.
nota 2: In cosa consista la conversione AD l'ho spiegato in questo articolo rivolto ad insegnanti della scuola elementare.