A/D seconda parte
Conversione A/D La conversione da segnale analogico a digitale è importante per due motivi: Il segnale digitale è più preciso di quello analogico, nel senso che è meno sensibile ai disturbi esterni Ogni microcontrollore che si interfaccia ai segnali, lavora in digitale Come detto nella prima parte, prima di trasformare un segnale da analogico a digitale bisogna campionarlo Il teorema di Shanon ci da indicazioni sulla frequenza di campionamento fc>=2fmax
Teorema di Fourier Un qualsiasi segnale periodico, può essere ottenuto mediante la somma di un termine costante e di infinite funzioni sinusoidali e cosinusoidali, le cui frequenze sono multipli interi di quella del segnale
Caratteristiche Errore di quantizzazione: Dove FS è la tensione di fondoscala, n è il numero di bit Risoluzione: variazione minima del segnale di ingresso in grado di determinare la variazione del codice digitale in uscita Accuratezza: differenza tra valore analogico in ingresso e il valore analogico in uscita Tempo di conversione tc Parametro fondamentale Importante è la seguente relazione
Esempio Determinare il valore massimo di frequenza di un segnale analogico sinusoidale che può essere convertito direttamente da un ADC a 8 bit con FS=10V e tempo di conversione 100s Dalla relazione della slide precedente si ricava che fmax<=12,4 Hz
A/D Alcuni microcontrollori sono dotati di convertitori A/D altri non sono dotati Per poter acquisire grandezze analogiche è necessario quindi, collegare un convertitore A/D esterno Il convertitore preso in considerazione è MCP3008 oppure MCP3208 I convertitori MCP300x e MCP320X sono dotati di x canali; nel nostro caso ci sono 8 canali MCP300X è un convertitore a 10 bit; MCP320X è un convertitore a 12 bit La comunicazione tra Raspberry e l’integrato MCP3Y0X avviene attraverso il bus SPI Serial Peripheral Interface Bus La comunicazione SPI è utilizzata per piccole distanze ed è full duplex ed è stato sviluppato dalla Motorola. Utilizza una architettura master-slave con un solo master e più slave
MCP300X-MCP320X
Pin per la comunicazione SPI MOSI (Master Output Slave Input) - uscita dei dati dal micro verso la periferica MISO (Master Input, Slave output) - usato dalla periferica per trasmettere dati al micro SCLK - clock, generato dal micro CS: Chip Select
SPI La comunicazione SPI è abbastanza veloce, può raggiungere 10 Mbps La lettura e la scrittura di un dato avviene sul fronte di salita o di discesa del clock. Ciò rende immune dal rumore. Si possono collegare più slave
SPI Un dispositivo SPI possiede due bit di configurazione detti CPOL Clock POLarity e CPHA Clock PHAse. CPOL determina lo stato idle del segnale di sincronismo CPOL=0 - segnale di clock è considerato idle quando è a livello logico basso. CPHA determina su quale fronte del segnale di clock vengono letti i dati CPHA=0 i dati in uscita dal Master vengono letti in corrispondenza del fronte di discesa e i dati in uscita dagli Slave vengono letti in corrispondenza del fronte di salita del segnale di clock.
SPI
SPI
MCP3004 ed MCP3008 MCP3208 è un convertitore A/D a 12 bit e 8 canali MCP3008 è un convertitore meno recente a 10 bit e 8 canali. MCP3004 è un convertitore a 4 canali e a 10 bit Per aumentare il numero di canali, si possono collegare più device in parallelo Schema di conversione per MCP3008 o 3004 a 10 bit
MCP3204/MCP3208 Per il convertitore MCP300x è previsto uno shift dei bit diverso da quello del convertitore MCP320X; lo si può notare dal confronto tra questo schema e quello precedente Schema di conversione per MCP3008 o 3004 a 10 bit
MCP3008
MCP3204
MCP3208
MCP320X Liv 0 Liv 1 Liv 2 Liv 3 -------------------------------- bit0 bit 1 bit 2 bit 3 -------------------------------- bit 4091 bit 4092 bit 4093 bit 4094 bit 4095 3.3 V L’integrato MCP3208 è a 12 bit, è quindi formato da 212=4096 livelli. La tensione di riferimento 3.3 V viene diviso per 4095 livelli; la risoluzione è quindi 3.3 V/4095=0.000806 V
MCP300X Liv 0 Liv 1 2 3 ……………………………………………………………………………………………… Liv 1019 Liv 1020 Liv 1021 Liv 1022 Liv 1023 3.3 V L’integrato MCP3008 è a 12 bit, è quindi formato da 210=1024 livelli. La tensione di riferimento 3.3 V viene diviso per 1024 livelli; La risoluzione è quindi 3.3 V/1023=0.003226 V
OUT 1 2 3 4 5 6 7 8 ch0 ch1 out adc[1]&11 adc[2]
CS, MOSI, MISO CS MOSI MISO canale D2 D1 D0 1 2 3 4 5 6 7 1 S D2 D1 D0 1 S D2 D1 D0 x ? B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 Dati inviati dal master MOSI Dati inviati dallo slave MISO canale D2 D1 D0 1 2 3 4 5 6 7
ADC0809/ADC0808
ADC0809/ADC0808 convertitore AD a 8 bit di uscita D0-D7 (e dunque 28=256 livelli di quantizzazione) e 8 canali di ingresso IN0-IN7 multiplexati internamente. Tabella degli indirizzi: