Generazione di funzioni e sistemi di misura

annuncio pubblicitario
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
Generazione di funzioni e sistemi di misura
Generazione di funzioni e sistemi di misura
Il generatore di forme d’onda
I generatori di segnali sono in grado di generare arbitrarie forme d’onda, analogiche o digitali, per il
test di dispositivi elettronici.
È possibile aggiungere ai segnali varie forme di distorsione.
I sistemi di misura
Il principale interesse è quello di soddisfare i
requisiti per assicurare una elevata qualità dei
produttori, nonché il collaudo dei prodotti per
l'industria elettronica.
Il termine DUT (Device Under Test) è usato in
generale all'interno dell’elettronica per riferirsi
a qualsiasi assemblaggio elettronico in prova
da sottoporre a test specifici.
La
1
generazione
di forme
d’onda
viene
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
utilizzata:
Per la verifica ed il test dei prototipi industriali.
Per il test dei convertitori A/D e D/A
Per la generazione di treni di impulsi da utilizzare nei test critici dei dispositivi
Per la simulazione di eventi, riproduzione di segnali reali e sostituzione al posto di segnali veri.
Generazione di segnali
Il generatore di segnale è un'apparecchiatura elettronica in grado di generare un segnale elettrico
con caratteristiche scelte a priori dall'operatore; il segnale, ai fini dell'utilizzo dell'apparecchiatura, può
essere considerato stabile e preciso nel dominio del tempo.
I segnali periodici hanno le seguenti caratteristiche: ampiezza, frequenza e fase fisse.
Il tempo di salita e di discesa, e ampiezza d’impulso
Una tensione continua sovrapposta all’alternata viene definita “offset”
Nella trasmissione di segnali esistono due differenti
tipologie:
a massa comune
e differenziali
Forme d’onda base
Per forma d'onda si intende il profilo generato, su un piano cartesiano, dalla misurazione di un
segnale rispetto a due grandezze che lo caratterizzano. Nel campo dell'elaborazione audio vengono
considerati i segnali elettrici. In questo caso le grandezze in gioco sono il tempo t e il potenziale
elettrico V del segnale, misurato in volt. Sull'asse delle ascisse si riporta il valore del tempo e sulle
ordinate si riporta il valore misurato in volt.
2
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
Forme d’onda complesse
• Modulazione analogica (modulazione in ampiezza AM, in frequenza
FM, in fase PM)
• Modulazione digitale (ASK, FSK, PSK)
• Segnale modulato in ampiezza di tempo (PWM)
Modulazione d’ampiezza AM
Modulazione digitale di frequenza FSK
Il generatore di funzioni AFG (Arbitrary Function Generator)
È in grado di generare una vasta gamma di funzioni in modo estremamente stabile e accurato.
I Moderni AFG utilizzano architetture di calcolo digitali per la generazione dei segnali (DDS = Direct
Digital Synthesis).
Il generatore di forme d’onda AWG (Arbitrary Waveform Generator)
È in grado di generare forme d’onda qualsiasi, non solo quelle standard, ma anche di particolari
interpolando sequenze di campioni precedentemente immagazzinate in memoria dall’utente o
misurate.
3
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
Dispositivi di Misura
Integrità del segnale
• Negli ultimi 20 anni la transazione elementare di calcolo è passata dal µs al ns, una commutazione
di stato logico oggi avviene 100 volte più rapidamente.
• Questi segnali trasportano, quindi, un numero di componenti ad alta frequenza molto maggiore di
quello che la periodicità del segnale lascerebbe immaginare.
• Quando la velocità del fronte di salita (o di discesa) è almeno sei volte più veloce del ritardo di
propagazione del segnale, le tracce di pochi centimetri diventano vere e proprie linee di trasmissione.
• Le superfici conduttive assumono comportamenti induttivi, si ha un maggiore assorbimento di
corrente e frequenti fenomeni di rimbalzo di masse. Questi fattori aumentano le EMI e le interferenze
tra linee dei bus.
• Si possono manifestare, quindi, malfunzionamenti elettronici.
Per poter affrontare e risolvere tali problemi servono strumenti di misura molto veloci.
L’oscilloscopio
L'oscilloscopio è uno strumento di misura elettronico che consente di visualizzare, su uno schermo
un grafico bidimensionale con l'andamento temporale dei segnali elettrici e di misurare abbastanza
semplicemente tensioni e molto raramente anche le correnti. L'asse orizzontale del grafico
solitamente rappresenta il tempo, rendendo l'oscilloscopio adatto ad analizzare grandezze
periodiche. L'asse verticale rappresenta la tensione.
Oscilloscopio con 2 canali
La frequenza massima dei segnali visualizzabili, così come la risoluzione temporale, ovvero la più
rapida variazione rilevabile, dipende dalla banda passante dello strumento, a sua volta dipendente
dalla qualità e in ultima analisi dal costo. Si spazia dalle decine di megahertz adatti per lavorare con
segnali audio ai costosi modelli digitali da diversi gigahertz.
DAC (Digital to Analog Converter) con scheda Arduino
Il DAC è l'abbreviazione di un convertitore da digitale a analogico. Nella presente si paragona il DAC
PWM a 8-Bit con il DAC del tipo R2R utilizzante vari numeri di bit, in particolare da 1 a 6 bit. Potrete
essere sorpresi di quanto suoni bene un semplice DAC già a 4-bit. Questo articolo include esempi di
suoni diversi per le varie opzioni DAC e dimostra alcune astrazioni software che permettono l’utilizzo
di DAC multipli.
Come accennato prima il DAC è l’abbreviazione di un convertitore digitale-analogico.
Fondamentalmente un valore binario o digitale viene convertito in un valore analogico di tensione. Un
DAC a 8-Bit può convertire un valore binario nei valori da 0 a 255 con una tensione analogica
4
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
compresa tra 0 a 5V. La gamma di tensione esatta della conversione dipende dalla configurazione
del DAC, ma per la maggior parte dei software si utilizzerà con i valori estremi compresi tra 0 e 5V.
DAC valori dell’offset per la massima escursione negativa e positiva
Dal momento che i segnali analogici, in particolare nel suono, necessitano di una oscillazione sia con
valori positivi e negativi intorno alla tensione di 0V. Se le uscite in tensione del DAC possono
effettuare una variazione tra un minimo di 0V e un massimo di 5V occorre effettuare uno
spostamento dell’offset della metà della massima variazione in modo da ottenere che la tensione di
2,5V venga associata al valore di tensione coincidente con 0V. In tal caso la variazione massima
della semionda positiva sarà di +2,5V coincidente con la tensione di uscita del DAC di +5V, mentre la
massima tensione di uscita della semionda negativa sarà di -2,5V coincidente con una tensione di
uscita del DAC di 0V.
Chiamiamo semplicemente metà scala come valore zero in modo che tutti i numeri sopra alla metà
sono positivi mentre al di sotto sono negativi. Per un convertitore a 8 bit possiamo usare il MSB come
un bit di segno per ottenere il risultato MSB = 0 = num. negativo e MSB = 1 = num. positivo. Si
consideri che il numero 128 in decimale coincide in binario con 10000000. Si noti che il MSB è
impostato a 1, questo è fondamentalmente il valore di metà scala dei possibili valori disponibili (da 0
a 255). Pensate al MSB come un bit di segno, sarà ‘1’ per i valori positivi e ‘0’ per valori negativi.
Utilizzando questa tensione di offset di metà della scala siamo in grado di convertire un numero
digitale che potrebbe rappresentare dati audio in un valore da utilizzare in un DAC. Il primo passo è
quello di convertire il numero nel range di + / -127 e aggiungere 128 ad esso. In questo esempio che
avrà un ‘range’ della tensione analogica compreso tra 0 e 5V con il punto zero fissato a 2.5V. Si
consideri che per eliminare la tensione fissa dell’offset del valore di 2,5V si può utilizzare in hardware
un semplice condensatore che venie collegato in serie, il quale blocca la componente continua e
lascia passare la tensione sinusoidale alternata.
Accoppiamento in A.C.
Il condensatore in serie non è nemmeno necessario nella maggior parte delle applicazioni, in quanto
è già presente all’ingresso dello stadio amplificatore. Per esempio se viene utilizzata la scheda audio
per amplificare il segnale generato dal DAC in modo da poterlo ascoltare sulle casse amplificate del
Personal Computer, questo ingresso è già dotato di un condensatore in serie. Naturalmente c'è una
risposta in frequenza per il condensatore in serie, ma il valore del condensatore è di solito
abbastanza alto in modo che non sarà un problema anche per le gamme di frequenza audio alte e
basse (da 20Hz fino a 20KHz).
Figura 1
Lo schema elettrico (fig. 1) mostra il circuito che è stato collegato all’uscita del DAC e l’input della
scheda audio del PC. La resistenza in serie e il condensatore collegato verso massa servono a
formare un semplice filtro passa-basso per limitare il rumore ad alta frequenza generato dal DAC che
si ottiene nel passaggio istantaneo tra i diversi valori di tensione, in pratica rimuove tutte le
componenti ad alta frequenza. La resistenza variabile (Potenziometro o trimmer) da 100KOhm
permette di regolare il livello di tensione dell’uscita per adattarlo alla sensibilità della scheda audio del
5
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
PC. Un ingresso di linea dovrebbe essere tenuto nella gamma di 1V di picco-picco massimo. Dato
che la scheda audio possiede un accoppiamento di tipo A.C. si ha bisogno solo di regolare
l'ampiezza utilizzando questo trimmer o potenziometro come un partitore di tensione.
PWM in uscita
Non ci sono parti da aggiungere per l’esecuzione del suono che utilizza l’uscita PWM. Il codice
eseguito con la tecnica del PWM è stato scritto da Michael Smith e genera un PWM a circa 60KHz.
Questa frequenza è facilmente filtrata tramite il filtro di cui sopra. Sovente non si ha nemmeno
bisogno del filtro perché nella scheda audio ci sono i filtri di ingresso che tagliano tutte le alte
frequenze superiori a 20KHz. Anche se si volesse utilizzare un altoparlante collegandolo
direttamente all’uscita del DAC, non si avrebbe la necessità di filtrare perché l'altoparlante stesso
funziona da filtro (la bobina dell’altoparlante semplicemente non può emettere delle frequenze
superiori a 20KHz).
Il fatto che pochi componenti o nessun circuito esterno sia necessario per la generazione del suono
PWM rende questa una buona opzione per i progetti con il microcontrollore. Il suono con PWM è
anche chiamato PCM o Pulse Code Modulation. E’ possibile generare un suono di alta qualità ad alto
volume utilizzando un semplice amplificatore audio in classe C insieme a qualche semplice filtraggio.
Ecco un esempio di output audio in PWM con una scheda Arduino. Il primo software utilizza il circuito
di filtro sopra descritto. Il secondo non è filtrato, tranne per quello che concerne l’ingresso della
scheda audio. E’ interessante confrontare con il DAC da 6-bit del tipo R2R descritto più avanti. Il
grafico mostra la forma d'onda catturata con il software Audacity.
Campioni di suono che utilizzano il PWM a 8-Bit: filtrati e non filtrati
Il programma audio utilizza un campione di suono con uno spettro molto ampio. Questo ci permette
di effettuare un buon test delle configurazioni del DAC e di “giocare” con le frequenze di
campionamento. Il grafico sottostante mostra il grafico dello spettro per il file audio di cui sopra.
Anche per questo grafico è stato utilizzato il software Audacity lavorando ovvero campionando il
segnale in uscita del DAC non filtrato a 6-bit nella configurazione del tipo R2R.
Figura 2
Uscita del DAC con R2R
Il diagramma della fig. 3 mostra il circuito del DAC a 6-bit di tipo R2R. Come è possibile vedere è
stato scelto come valore di R il valore standard di10Kohm ottenendo per il valore di 2R = 20Kohm.
L'idea di base è che la scala R2R è un divisore di tensione in cui ogni resistenza alza verso l'alto o
6
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
abbassa verso il basso la resistenza di uscita. Gli integrati DAC monolitici usano un metodo simile
con un generatore di corrente di riferimento interno per ottenere la conversione da digitale ad
analogico della corrente di uscita.
Figura 3
Occorre ricordare che questo tipo di DAC ha una impedenza di uscita di circa 10Kohm. Questo
significa che non è possibile pilotare carichi con una bassa resistenza come ad esempio collegare
all’uscita un piccolo altoparlante con una impedenza caratteristica di 8ohm. Per questi esperimenti,
occorrerà collegarlo alla linea di ingresso della scheda audio del PC.
Il codice originale è stato modificato creando una funzione denominata SetDAC(int value) che deve
essere richiamata all’interno della routine dell’interrupt. Questa funzione permette con una semplice
modifica l’utilizzo di differenti tipologie di DAC.
Con la nuova funzione SetDAC richiamata dall’interrupt sono state create due versioni, una in cui
viene utilizzato il PWM e l’altra in cui si utilizza un DAC a 6-bit del tipo R2R. In realtà occorre
impostare nella routine di gestione dell’interrupt il numero dei bit da utilizzare per il campionamento
del suono. A tal proposito risulta interessante ascoltare alcuni esempi di suoni con differenti
risoluzioni (6, 4, 2 e anche 1 bit di risoluzione). Personalmente sono stato sorpreso di quanto suoni
bene il DAC con una risoluzione di soli 4-bit, mentre anche con un DAC a singolo bit si può sentire il
suono pur con qualche distorsione. Mi chiedo come suoni una voce campionata con un singolo bit
del DAC.
7
I.I.S. Primo Levi
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
Questi campioni includono sia una versione filtrata ed una versione non filtrata. Se si guarda la forma
d'onda tramite il software Audacity o altro programma analogo vedrete i singoli punti di
campionamento per le configurazioni con una bassa risoluzione del DAC.
Suoni campionati con il DAC di tipo R2R:
6-Bit filtrato e non filtrato
4-Bit filtrato e non filtrato
2-Bit filtrato e non filtrato
1-Bit filtrato e non filtrato
Il grafico di fig. 4 mostra la forma d’onda generata da un DAC a 4-bit del tipo R2R tramite il software
Audacity.
Figura 4
Come prova è stato confrontato un segnale generato da un PWM a 8-bit con un DAC a 6-bit del tipo
R2R le cui uscite sono state impostate sull’oscilloscopio ad una stessa ampiezza picco-picco e la
seconda veniva invertita e sommata alla precedente ottenendo in pratica che le due forme d'onda
erano quasi identiche. Si consideri che sostanzialmente risultano identici i due suoni ascoltati.
Dopo aver effettuato alcuni esperimenti con l’audio stereo è presumibile che l’utilizzo di un DAC a 4bit possa permettere l’esecuzione della maggior parte di applicazioni ludiche e/o di controllo. Inoltre è
possibile ottenere due canali di un doppio DAC a 4-bit occupando un solo port a 8 bit. Risulta
evidente che la riproduzione accurata della musica si ottiene solo con un DAC a 8 bit o superiore
come nei riproduttori MP3 che utilizzano un doppio DAC con almeno 16 bit di risoluzione.
Suono campionato
1 bit filtrato
Suono campionato
1 bit non filtrato
Suono campionato
2 bit filtrato
Suono campionato
2 bit non filtrato
Suono campionato
4 bit filtrato
Suono campionato
4 bit non filtrato
Suono campionato
6 bit filtrato
Suono campionato
6 bit non filtrato
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_1bit_filtro.wav
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_1bit_no_filtro.wav
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_2bit_filtro.wav
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_2bit_no_filtro.wav
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_4bit_filtro.wav
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_4bit_no_filtro.wav
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_6bit_filtro.wav
con un DAC R2R a
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_6bit_no_filtro.wav
8
I.I.S. Primo Levi
Suono campionato con un DAC R2R a
8 bit filtrato
Suono campionato con un DAC R2R a
8 bit non filtrato
Lab. Sistemi (vers. 1.0)
Classe 5AN/5BN
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_8bit_filtro.wav
http://www.iisprimolevi.it/Lavori/Arduino/DAC_R2R_8bit_no_filtro.wav
Dopo questa serie di esperimenti vediamo come ottenere la generazione del suono con la scheda
Arduino. In particolare cercheremo di mostrare alcune tecniche di campionamento che forniranno dei
bei toni audio da utilizzare per riprodurre la musica.
Codice sorgente: Audio_PCM.zip si trova al link: http://www.iisprimolevi.it/Lavori/Arduino/Audio_PCM.zip
//----------------------------------------------------------------------------/* Si progetti un software in linguaggio C++ per la scheda Arduino in grado di soddisfare
le seguenti richieste:
1. Si richiede di generare una onda sinusoidale con una frequenza quanto piu' elevata possibile (come opzione si
consideri una frequenza di 97,65 Hz = 10,24 msec. con una tolleranza del ±5%).
2. L'onda sinusoidale generata deve essere formata con 256 step differenti e utilizzare un DAC
esterno a 6 bit la cui uscita viene collegata alla scheda audio del PC.
3. La tabella dell’onda sinusoidale da utilizzare nel software e’ la presente:
byte tabella_sine [256] =
{
0x00, 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15,
0x18, 0x1c, 0x1f, 0x22, 0x25, 0x28, 0x2b, 0x2e,
0x30, 0x33, 0x36, 0x39, 0x3c, 0x3f, 0x41, 0x44,
0x47, 0x49, 0x4c, 0x4e, 0x51, 0x53, 0x55, 0x58,
0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68,
0x6a, 0x6c, 0x6d, 0x6f, 0x70, 0x72, 0x73, 0x75,
0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7c,
0x7d, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e,
0x7d, 0x7c, 0x7c, 0x7b, 0x7a, 0x79, 0x78, 0x77,
0x76, 0x75, 0x73, 0x72, 0x70, 0x6f, 0x6d, 0x6c,
0x6a, 0x68, 0x66, 0x64, 0x62, 0x60, 0x5e, 0x5c,
0x5a, 0x58, 0x55, 0x53, 0x51, 0x4e, 0x4c, 0x49,
0x47, 0x44, 0x41, 0x3f, 0x3c, 0x39, 0x36, 0x33,
0x30, 0x2e, 0x2b, 0x28, 0x25, 0x22, 0x1f, 0x1c,
0x18, 0x15, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03,
0x00, 0xfd, 0xfa, 0xf7, 0xf4, 0xf1, 0xee, 0xeb,
0xe8, 0xe4, 0xe1, 0xde, 0xdb, 0xd8, 0xd5, 0xd2,
0xd0, 0xcd, 0xca, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc,
0xb9, 0xb7, 0xb4, 0xb2, 0xaf, 0xad, 0xab, 0xa8,
0xa6, 0xa4, 0xa2, 0xa0, 0x9e, 0x9c, 0x9a, 0x98,
0x96, 0x94, 0x93, 0x91, 0x90, 0x8e, 0x8d, 0x8b,
0x8a, 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x84,
0x83, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81,
0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82,
0x83, 0x84, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
0x8a, 0x8b, 0x8d, 0x8e, 0x90, 0x91, 0x93, 0x94,
0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4,
0xa6, 0xa8, 0xab, 0xad, 0xaf, 0xb2, 0xb4, 0xb7,
0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xca, 0xcd,
0xd0, 0xd2, 0xd5, 0xd8, 0xdb, 0xde, 0xe1, 0xe4,
0xe8, 0xeb, 0xee, 0xf1, 0xf4, 0xf7, 0xfa, 0xfd
};
//-----------------------------------------------------------------------------
9
Scarica