elettronica generale ihep.fi.infn.it/ciber/elettronica_generale_i_part02.pdf · 2018. 10. 27. ·...

75
Elettronica Generale I Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte) 15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 1

Upload: others

Post on 31-Mar-2021

4 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Elettronica Generale IPart 02: Logica sequenziale

DAC e ADC

Arduino (modulo a parte)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 1

Page 2: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Logica Sequenziale

● I dispositivi logici si suddividono in due famiglie principali:

● Logica combinatoriale ● L’uscita all’istante tn dipende unicamente dallo stato degli ingressi sempre al tempo

tn, (trascuriamo i ritardi interni)

● Porte logiche, decoders, multiplexers, ALU

● Logica sequenziale● L’uscita all’istante tn dipende sia dallo stato degli ingressi al tempo tn, sia dallo stato

degli ingressi ad istanti precedenti (tn-1,n-2,.,ecc.)

● Ha quindi una memoria che viene chiamata STATO.

● Latch, flip-flops, macchine a stati, contatori, shift registers

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 2

Page 3: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Flip-flop & Latches

• Logica combinatoriale con “feed-back”

• Uscita riportata all’ingresso

• Latch è una memoria ad 1 bit che cambia stato a seconda dell’ingresso (può o non può aver un ingresso di ENABLE/CLOCK)

• Flip-flop è un latch dotato di un ingresso di clock (segnale di controllo), le cui uscite commutano solo sui fronti (salita e/o discesa) del clock

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 3

Page 4: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Stato “STATE” del sistema

• Stato: è un insieme di variabili (variabili di stato per l’appunto) che rappresentano la memoria di quello che è successo fino ad ora

• Conta-persone: lo stato è il numero di persone passate fino adesso, ogni volta che passa una persona il numero viene incrementato di uno

• Logica sequenziale digitale• Le variabili di stato sono binarie

• Un circuito con n variabili di stato ha 2n stati possibili

• Macchina a stati finiti (Finite State Machine)

• I cambiamenti di stato sono solitamente sincronizzati da un clock

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 4

Page 5: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

CLOCK

• Clock: fornisce la marca temporale che scandisce i cambiamenti di stato del circuito.

• Il segnale di clock è active high se lo stato cambia sui fronti di salita active low se lo stato cambia sui fronti di discesa.

• Periodo del Clock: è il tempo che trascorre tra due transizioni dello stesso tipo

• Frequenza del Clock: è il numero di volte che questo accade per secondo

• Duty Cycle: è la percentuale di tempo, durante un periodo, in cui il clock è attivo.

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 5

Page 6: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

CLOCK

• ACTIVE HIGH

• ACTIVE LOW

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 6

Periodo

th th

tL tL

Frequenza = 1/Periodo

Duty cicle = th (tL) / Periodo

Page 7: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

LATCH elementare• Elemento bistabile:

• Memoria ad un bit ovvero l’elemento più semplice:

• È bistabile in quanto ha due stati stabili:• Stato 1: Q(Vout1) alto, Vin1 basso, Vin2 alto

• Stato 2: Q(Vout1) basso, Vin1 alto, Vin2 basso

• Lo stato dipende dai transienti in fase di accensione

• Ovviamente così disegnato, è un circuito di scarsa utilità

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 7

02/25/09

Vout1

Vin1

Vin2Vout2

Q

/Q

Page 8: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Latch Set Reset (SR Latch)

• Aggiungiamo qualche ingresso:

• Invece dei NOT usiamo i NOR

• Tabella della verità:S R Qn /Qn

0 0 Qn-1 /Qn-1

0 1 0 1

1 0 1 0

1 1 0 0

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 8

S

R

Q

Q

Simbolo

Q

/Q

Set

Reset

S

RQ

/Q

SchemaHold

Reset

Set

??

Page 9: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

• Aggiungiamo due porte AND sugli ingressi che agiscono come “interruttore”

• Il clock abilita il latch sul livello, NON sul fronte!!

• Tabella della verità:C S R Qn /Qn

0 X X Qn-1 /Qn-1

1 0 0 Qn-1 /Qn-1

1 0 1 0 11 1 0 1 01 1 1 0 0

SR Latch con Enable (Clock)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 9

S

R

C

Q

/Q

Schema

S

R

Q

Q

Simbolo

Q

/Q

Set

Reset

CClock

Page 10: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

JK Latch (oscilla, race around)

• A S=R=0 corrisponde un’uscita inutile e non “ortodossa”.

• Il JK introduce un ulteriore feedback tra uscita e ingresso che resolve questa situazione.

• Purtroppo così configurato il JK quando J=K=1 oscilla tra i due stati con una frequenza determinata dai tempi di transito dei gate (race around condition)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 10

Q

/QS

R

C

J

K

Schema (oscilla) • Tabella della verità:C J K Qn /Qn

0 X X Qn-1 /Qn-1

1 0 0 Qn-1 /Qn-1

1 0 1 0 11 1 0 1 01 1 1 /Qn-1 Qn-1

Page 11: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Architettura MASTER - SLAVE

• Risolve i problemi di “race around” legati ai tempi di propagazione finiti delle porte logiche.

• Due latch in cascata:• il primo pilotato direttamente dal clock

• il secondo dal clock invertito

• Quando è attivo il primo stadio, non è attivo il secondo (e viceversa).

• La commutazione delle uscite avviene sul fronte di salita (discesa) del clock.

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 11

Page 12: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Flip Flop SR• Architettura Master Slave

• Tabella della verità:C S R Qn /Qn

0/1 X X Qn-1 /Qn-1

0 0 Qn-1 /Qn-1

0 1 0 1

1 0 1 0

1 1 0 0

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 12

S

C

Q

/Q

S

R

Q

Q

C

R

S

R

Q

Q

C

S

R

Q

Q

Simbolo

Q

/Q

Set

Reset

CClock SR MS

Page 13: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

• Grazie all’architettura MS, possiamo evitare il race around.

• Tabella della verità:C J K Qn /Qn

0/1 X X Qn-1 /Qn-1

0 0 Qn-1 /Qn-1

0 1 0 1

1 0 1 0

1 1 /Qn-1 Qn-1

Flip Flop JK

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 13

C

Q

/Q

S

R

Q

Q

C

S

R

Q

Q

C

J

K

/Q

Q

J

K

Q

Q

Simbolo

Q

/Q

J

K

CClock JK MS

Page 14: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Bestiario • In realtà si usano sempre i flip-flop che lavorano sui fronti del clock.• Solo così si può mantenere la sincronizzazione.• Abitualmente le commutazioni avvengono sui fronti di SALITA !• Latch

• S-R Latch• /S-/R Latch• S-R Latch con Enable• D Latch

• Flip-flop• Edge-Triggered D Flip-Flop• Master/Slave S-R Flip-Flop• Master/Slave J-K Flip-Flop• Edge-Triggered J-K Flip-Flop• T Flip-Flop

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 14

Page 15: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

• Vengono collegati insieme tramite una porta NOT l’ingresso J(S) e K(R) di un flip-flop JK(SR)

• L’unico ingresso si chiama D

• Tabella della verità:C D Qn /Qn

0/1 X Qn-1 /Qn-1

0 0 1

1 1 0

D-Type Flip Flop

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 15

J

K

Q

Q

Schema

Q

/Q

D

CClock

JK MS

D

>CLK

Q

Q

Simbolo

Page 16: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

T (toggle) type Flip-Flop

• Vengono collegati insieme l’ingresso J e K di un flip-flop JK

• L’unico ingresso si chiama T• Quando T = 0 mantiene lo stato

• Quando T = 1 commuta

• Tabella della verità:C T Qn /Qn

0/1 X Qn-1 /Qn-1

0 Qn-1 /Qn-1

1 /Qn-1 Qn-1

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 16

J

K

Q

Q

SchemaQ

/Q

T

CClock

JK MS

T

>CLK

Q

Q

Simbolo

Page 17: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

• I Flip-Flop hanno due ingressi asincroni:• Preset e Reset (Clear).

• Servono ad impostare direttamente le uscite Q , /Q

• Operano indipendentemente dal clock

• Quando disegnate un circuito:• Usate questi ingressi SOLO per inizializzare la logica. Mai per realizzare

funzioni logiche.

• ESEMPIO: SR Latch (con ENABLE):• PRN (N attivo LOW!) fissa l’uscita Q = 1

• CLRN (N attivo LOW!) fissa l’uscita Q = 0

• N.B. S=R=0 Q = /Q = 1 !!

Ingressi Asincroni (Preset, Clear)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 17

Q

/Q

PRN

CLRN

S

R

C

Page 18: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Esempio di circuito con 2 Flip-Flop

• Differenziatore DSegnale/Dt :• Riconosce i fronti di salita /discesa del segnale in ingresso

• Il periodo del Clock è il Dt della derivata

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 18

clock clock

Fronte discesa

Fronte salitaSegnale logico

Page 19: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Contatori (== Divisori)

• Un insieme di n Flip-Flop, ovvero 2n stati possibili• Possono contare in su o in giù

• Possono essere programmati per partire a contare da un numero preimpostato

• Tipologie:• Ripple counter (da evitare per via degli sfasamenti e ritardi che introduce)

• Syncronous counter (tutti i Flip-Flop sono pilotati dallo stesso CLOCK!)

• N.B. Se potete contare fino a N, vuol dire che potete dividere per N

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 19

Page 20: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Ripple Counter• Implementazione molto semplice

• Il clock viene dato in ingresso al primo TFF

• Le uscite Q dei flip-flop sono i bit di uscita

• LSB a sinistra (TFF con il Clock in ingresso)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 20

Q

>CLK

TTFF

PRN

CLN

Q

>CLK

TTFF

PRN

CLN

1 1Q

>CLK

TTFF

PRN

CLN

Q

>CLK

TTFF

PRN

CLN

1 1

Q0 (LSB) Q3Q1 Q2

Clock

• I FF in questo caso transiscono sul fronte di SALITA del Clock

• Quindi al primo colpo di Clock andranno (in sequenza) tutti a 1

• Da lì conteranno all’indietro (DOWN) fino ad arrivare a 0000

• Tra un bit e l’altro si ha un ritardo dovuto alla propagazione del dato nel FF (1-10 ns)

Page 21: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Svantaggi Ripple Counter

• Svantaggio principale:• Ritardo di propagazione del segnale:• Dtpropagazione di circa 10 ns a Flip-Flop• n bit DtTOT ritardo totale = n*Dtpropagazione

• La criticità aumenta con il numero di bit e con la frequenza di clock

• Il conteggio finale rimane affidabile • Cioè se interrompete il clock e aspettate un tempo pari a n*Dtpropagazione , il valore

letto sarà il numero effettivo di colpi di clock ricevuti

• Non sono più affidabili i conteggi intermedi !!!• Ad esempio se volete generare un segnale al «347» colpo di clock, non solo il

segnale verrà generato in ritardo, ma si potranno anche avere dei segnali spuri generati in mezzo alla sequenza di conteggio

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 21

Page 22: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Contatore Sincrono

• Sfruttiamo a nostro vantaggio il ritardo di propagazione

• I Flip-Flop sono tutti pilotati in parallelo dallo stesso Clock

• Uso di logica combinatoriale per stabilire se il Flip-Flop debba caricare 1 o 0 sui vari Tn

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 22

Q

>CLK

TTFF

PRN

CLN

Q

>CLK

TTFF

PRN

CLN

T0 T1Q

>CLK

TTFF

PRN

CLN

Q

>CLK

TTFF

PRN

CLN

T2

Q0 (LSB) Q3Q1 Q2

ClockT3

Page 23: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Contatore Sincrono

• Importante l’ingresso T• T=1 Qn = /Qn-1

• T=0 Qn = Qn-1

• Per Q0 bisogna connettere T0 = 1

• Per Q1, Q2, .... Qn ?

• Dalla figura qui accanto vediamo come dovrebbe funzionare il contatore

• Notate il ritardo costante dei Qn rispetto ai fronti di salita del Clock

• Si nota che Q1 commuta nel momento in cui scende Q0

• Q2 commuta nel momento in cui scendono Q0 e Q1

• Q3 commuta nel momento in cui scendono Q0 e Q1 e Q2

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 23

Clock

Q0

Q1

Q2

Q3

Time t

Page 24: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Contatore Sincrono

• Connettiamo l’ingresso T1 a Q0

• Sfruttiamo il ritardo di propagazione nei flip-flop

• Sul primo fronte di salita del clock Q0 diventa 1, MA solo dopo un tempo tpropagazione (tipicamente qualche ns)

• Quindi il secondo Flip-Flop, sul primo fronte di salita del clock, in ingresso ha ancora zero e quindi la sua uscita Q1 rimarrà nello stato precedente

• Sul secondo fronte di salita del clock Q0 diventa 0, MA solo dopo un tempo tpropagazione (tipicamente qualche ns)

• Quindi il secondo Flip-Flop, sul secondo fronte di salita del clock, in ingresso ha ancora uno e quindi la sua uscita Q1 si ribalta rispetto allo stato precedente

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 24

Q

>CLK

TTFF

PRN

CLN

Q

>CLK

TTFF

PRN

CLN

T0=1 T1= Q0

Q0 (LSB) Q1

Clock

Page 25: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Contatore Sincrono• Q2 deve commutare nel momento in cui Q0 = Q1

transiscono da 1 a 0 • Teniamo presente tpropagazione , e vediamo che la soluzione

cercata è pilotatre T2 con l’AND di Q0 e Q1

• In generale Tn sarà dato dall’AND di tutti i Q precedenti fino a Qn-1

• Riporto seriale:• AND connessi in cascata• rimane un minimo di Ripple che per tanti bit potrebbe far

malfunzionare il contatore

• Riporto parallelo:• AND a n ingressi• Soluzione da adottare, il ritardo introdotto per Tn è sempre

quello di una singola porta AND che è inferiore a quello di un FF

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 25

Q

>CLK

TTFF

PRN

CLN

Q2

Clock

Q1Q0

T2

Q1Q0

Q2T3

Q1

Q0

Qn-1

Tn

Page 26: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Riporto seriale vs Riporto parallelo

• Riporto seriale:• semplicità costruttiva

• Ritardo totale scala con i bit del contatore

• tpropagazione di un FF + tpropagazione di una porta AND * n

• Il ritardo delle porte AND può diventare talmente elevato da far arrivare troppo tardi il T da caricare.

• Riporto parallelo:• Diventa complicato quando i bit sono tanti

• Ritardo totale fisso!!

• tpropagazione di un FF + tpropagazione di una porta AND e BASTA !

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 26

Page 27: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Contatore Programmabile

• Spesso vi è la necessita di contare a partire da un numero prefissato arbitrario

• Il numero potremmo impostarlo usando i PRN (e i CLRN) in maniera adeguata

• In realtà si preferisce usare dei controlli SINCRONI (SLoad, SClear) per non avere Glitches nel funzionamento

• Tutti i contatori hanno un bus in ingresso per caricare un numero di “partenza” cioè da cui partire a contare:• Linea di Load e/o Clear (sincrona o asincrona)

• Tecnica flessibile che permette di cambiare numero di conteggi senza modificare l'hardware

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 27

Tipica funzione di contatore usata in QUARTUS: LPM_COUNTERSono richieste:1) Sload (Syncronous load)2) Clock3) Data[7..0] (bus in ingresso per

programmare il valore prefissato)4) Q[7..0] (bus in uscita con il valore

del conteggio)5) Cout (Carry Out, impulso in uscita

quando il contatore raggiunge FF)

Page 28: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Contatore Sincrono• Sload viene generato a fine conteggio

• Ovvero quando il contatore (8 bit) raggiunge FF• Ad esempio si può sfruttare un AND con n

ingressi, posto sul bus di uscita Q• Oppure sfruttare l’uscita Cout

• Se il conteggio è fisso, può comunque convenire fare un reset del contatore

• Si usa una porta AND opportunamente connessa sulle uscite:• Ogni volta che il conteggio raggiunge la

cifra desiderata si resetta il contatore (si fa a meno della programmabilità)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 28

Clock

Sload

Data

Q

Time t

5F

5F

XX 60 61 62 63 64

Page 29: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Shift Register• Assieme ai contatori forma l’ossatura delle FSM (Finite State Machines)

• Uno Shift Register trasferisce ad ogni colpo di Clock il dato dal Flip-Flop n al Flip-Flop n+1 (macchina sincrona):

• La configurazione mostrata sopra con i D type Flip-Flop è a 4 bit, il Clock “campiona” il segnale in ingresso:• Dato in ingresso seriale (Data In), dato in uscita parallello (Q3, Q2,Q1,Q0)• 4 colpi di Clock per riempire il registro, se il Clock continua il registro si svuota .....

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 29

Data in(seriale)

D

>CLK

Q D

>CLK

Q D

>CLK

Q D

>CLK

Q

Clock

Q0Q1Q2Q3

Page 30: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Shift Register• Anche qui esistono delle funzioni macro:

LPM_SHIFTREG

• Specificare quanti bit

• In figura abbiamo un parallelizzatore

• Si può utilizzare un bus Data in ingresso per fare un serializzatore• Assieme al bus Data avremo anche bisogno di un (S)load !

• Alla base di tutte le comunicazioni (RS232, USB, Ethernet, Radio, TV)• SIPO (Serial In – Parallel Out)

• PISO (Parallel In – Serial Out)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 30

Page 31: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Timing diagram di uno Shift Register

• A 4 bit

• Dopo 4 colpi di Clock abbiamo caricato 1101 (13)

• Dal quinto colpo in poi svuotiamo lo Shift Register che tornerà a zero

• Notate lo scorrimento dei dati sulle uscite

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 31

Page 32: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

RS232 (protocollo seriale)• Trasmissione dati usando (al limite) solo 3 fili:

• Ground (Ritorno) [5]

• Transmit [3]

• Receive [2]

• Nato con le telescriventi, la linea va da -12V a +12V

• Lento ma ancora utilizzato

• Gli altri fili sono usati per funzioni di controllo e dialogo (Hand Shaking) e non sono strettamente necessary

• In foto 2 connettori (DB9 femmina, DB25 maschio) usati per le line RS232

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 32

------------------- 9-Pin 25-Pin

Carrier Detect 1 8

Receive Data 2 3

Transmit Data 3 2

Data Terminal Ready 4 20

System Ground 5 7

Data Set Ready 6 6

Request to Send 7 4

Clear to Send 8 5

Ring Indicator 9 22

Page 33: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

RS232

• Tra i due apparecchi collegati bisogna stabilire prima:• frequenza dei dati (baud rate) (ad esempio 9600, 56K)

• parità (normalmente off)

• stop bit (normalmente uno o due)

• Parametri fissi e non negoziabili:• bit vengono trasmessi a gruppi di 8

• in inizio trasmissione viene inviato uno start bit

• a fine trasmissione vengono trasmessi il bit di parità e gli stop bit

• Il clock viene generato dal ricevente appena riceve lo start bit !

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 33

Page 34: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

RS232• Quando la linea di data va alta (+12V) (start bit)• Inizia la trasmissione dati

• Il ricevitore genera un clock interno che campiona la linea dati con uno shift-register

• Se il protocollo prevede 1 start, 2 stop e no parity, il clock interno dovrà fornire 11 colpi.

• I dati sono in logica negata, il LSB segue lo start

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 34

Clock

Data in

start Q6Q5Q4Q3Q2Q1Q0 Q7 stopstop

0 0 1 0 1 1 0 0

Time t

Page 35: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Ring Counter• Variante dello Shift Register

• Shift Register con l’uscita connessa all’ingresso• Il “token” viene caricato sul primo Flip-Flop (PRN)

• Ad ogni colpo di clock:• Il token passa da un Flip-Flop a quello successivo

• Quando arriva all’ultimo Flip-Flop, viene ricaricato sul Flip-Flop iniziale

• Es. La sequenza di un Ring counter a 4 bit:• 1000 – 0100 – 0010 – 0001 – 1000 ecc. ecc.

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 35

D

>CLK

Q D

>CLK

Q D

>CLK

Q D

>CLK

Q

Clock

Q0Q1Q2Q3Token load

prn

Token out

Page 36: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Sincronizzazione dei segnali• Input asincroni:

• Sono sempre presenti in un sistema digitale:• Ingresso da tastiera, pulsanti, comparatori, ecc.

• Normalmente sono molto più lenti del clock di sistema

• Non è vitale sapere quando esattamente (al ns) è avvenuto l’evento

• PER ESSERE USATI DEVONO ESSERE SINCRONIZZATI !

• Si usa un D type Flip-Flop con il Clock di sistema (Master Clock)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 36

D

>CLK

QUscita sincronaIngresso asincrono

Clock di sistema

Clock

Ing. asinc.

Uscita sinc.

Page 37: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Deglitcher• Purtroppo anche partendo con le migliori intenzioni, a volte troviamo

la presenza di glitches sulle uscite della nostra logica

• Il Deglitcher è un circuito che campiona le uscite con il Master Clock di Sistema e quindi rimuove tutti i segnali asincroni di breve durata

• In pratica è il circuit mostrato precedentemente ma applicato alle uscite invece che ad eventuali ingressi asincroni

• Poichè introduce un ulteriore ritardo di un colpo di Clock va usato solo come “extrema ratio”

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 37

D

>CLK

Q

Clock

Segnale con un glitch Segnale “ripulito”

Ritardo

Page 38: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Debouncer• Analogo al sincronizzatore ma usato per “ripulire” i segnali dei contatti meccanici (segnali con “rimbalzi” sulle scale dei ms)

• Al momento della chiusura dell’interruttore si hanno vari rimbalzi tra lel lamelle degli interruttori

• Va usato un Clock “lento” con un periodo maggiore della durata dei “RIMBALZI”

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 38

+5V

/SW DSW

SPDT switch

74LS04

+5V

GND

/SW

DSW

PUSH first

contact

bounce

TTL hanno una resistenza di pull-up interna a +V

Page 39: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Debouncer

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 39

D

>CLK

Q

Dt_clock > Dt_bounce

+5V

GND

/SW

PUSH Primo

contatto

bounce

+5VSPDT switch

Clock(periodo tipico di 10ms)

Page 40: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Elettronica Generale IPart 02: DAC e ADC

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 40

Page 41: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Teorema di Shannon• Ricostruzione di segnali analogici:

• Campionamento ad intervalli regolari

• Se una funzione x(t) non ha componenti spettrali superiori a fH (Hz), allora risulta completamente determinata dalla serie dei suoi valori campionati ad intervalli di tempo 1/2fH

• Cioè: la frequenza di campionamento fSampling > 2fH

• Questo è il motivo, ad esempio, per cui i CD Audio sono campionati a 44.1 kHz(N.B. lo spettro Audio delle frequenze udibili dall’orecchio umano va da 20 Hz a 20 KHz)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 41

Page 42: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Ricostruzione del segnale• Il segnale varia nel tempo, il campionamento

viene realizzato registrando il valore del segnale ad intervalli regolari con periodo T (intervallo di campionamento)

• Avremo quindi una sequenza di numeri che rappresentano il segnale di origine chiamati campionamenti

• Ogni valore numerico assieme alla sua marca di tempo costituisce le coordinate dei punti nel grafico Ampiezza-Tempo

• Il reciproco dell'intervallo di campionamento (1/T) è la frequenza di campionamento fSampling

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 42

t

ADC+

+ +

++ + + +

++

++

++

+

++ +

++ + + +

++

++

++

+

++ +

++ + + +

++

++

++

+

Samples

Page 43: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Ricostruzione del segnale• Idealmente ad ogni punto i si applica

sinc(xi) facendo riscalando il massimo in modo che coincida il valore del campionamento e gli zeri con gli altri n-1 campionamenti.

• sinc(x) = sin(px)/px• Il segnale originario viene ricostruito

facendo la somma di tutte le n sinc(xi)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 43t

ADC+

+ +

++ + + +

++

++

++

+

++ +

++ + + +

++

++

++

+

++ +

++ + + +

++

++

++

+

Samples

x

• Il segnale ricostruito a questa maniera non può avere frequenze superiori alla metà della frequenza di campionamento fSampling

• Di conseguenza il segnale originario non deve contenere frequenze superiori a fSampling/2 , Criterio di Nyquist

• In pratica un DAC produce una serie di steps che poi vengono filtrati …....

Page 44: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Ricostruzione del segnale (visto in frequenza)

• Potete vedere la ricostruzione anche come una serie di valori di tensioni (determinate dal codice binario in ingresso al DAC) che vengono date in pasto ad un filtro passa-basso con frquenza di taglio fSampling/2 .

• Il filtro passa-basso ideale è una step-function (rect(f)) che per l’appunto è la trasformata di Fourier di sinc(x) .

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 44

The continuous Fourier transform of the normalized sinc (to ordinary frequency) is rect( f ), where the rectangular function is 1 for argument between −1/2 and 1/2, and zero otherwise. This corresponds to the fact that the sinc filter is the ideal (brick-wall, meaning rectangular frequency response) low-pass filter. (Wikipedia)

Page 45: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

DAC (Parametri Importanti)

• Digital to Analog Converter• Risoluzione: legata al numero di bits (ENOB)

• Frequenza di campionamento

• Range dinamico (rapporto tra il valore MAX e MIN che il DAC può riprodurre), legato al rumore di fondo e al numero di bits

• THD + NOISE, rapporto di potenza, rispetto al segnale, di armoniche spurie e rumore presenti in uscita

• Alcune di queste sono importanti sempre, altre solo per i DAC la cui uscita deve variare rapidamente nel tempo

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 45

Page 46: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Tipi di DAC

• Varie tipologie, noi qui vedremo solo il Binary Resistor e il Ladder Converter

• Tra quelli più comuni ci sono anche:• PWM Pulse Width Modulation (motor control)

• Delta-Sigma DAC (precisissimo, audio 1bit DAC [pulse density modulation])

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 46

Page 47: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Poche nozioni sugli Operazionali (1)

• Guadagno con reazione negativa:

• Vout = A(Vin – bVout)

• Vout (1+bA) = AVin Vout= Vin A/(1+bA) • bA >> 1 quindi:

• Vout = 1/b * Vin

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 47

Vin S+

_

b

AVout

Page 48: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Poche nozioni sugli Operazionali (2)

• Esempio pratico:

• Vout viene riportata tramite R2 e R1sull’ingresso

• L’ingresso è quello invertente, quindi Voutviene SOTTRATTO (reazione negativa)

• b la frazine di Vout riportata in ingresso è uguale a:

• b = R1/R1+R2 (Partitore)

• Il guadagno AV = Vout/Vgen = 1/b = 1 + R2/R1

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 48

vgen

+

_

Out

R2

v-

v+

i2

i1 irRi vout

R1

Page 49: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Poche nozioni sugli Operazionali (3)

• Massa virtuale

• Con la reazione negativa, l’ingresso invertente (-) dell’operazionale assume le caratteristiche di una massa virtuale

• La tensione v- rimane uguale a v+ e isviene assorbita da if attraverso Rf

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 49

Vs+

_

Out

Rf

Rs v-

v+

if

is irRi

Rs

is

Rf

if

v-

v+

Vout

ir ≈ 0

is ≈ if

v- ≈ v+

Page 50: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Poche nozioni sugli Operazionali (4)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 50

• is= ir+if is = v-/Ri + (v- - vout)/Rf

• vout = -Av- ( sarebbe A[v+ - v- ])

• ir ≈ is Rf /ARi << is ir ≈ 0 if ≈ is

• Praticamente is è compensata completamente da if

• Mentre v- ripete fedelemente il valore di v+

fi

ifs

fi

ifs

fi

s

RR

ARRvi

RR

))A1(RR(vi

R

)A1(v

R

vi

iF R

v

R

vA

iF

iF

RR

ARRv

F

ir

F

iF

i

sR

ARi

R

ARR

R

)v(vi

iF R

v

R

vA

0)vv(AR

R

A

R

R

v

R

vvvv

R

)vv(Av

R

vvii

R

vv

s

s

ff

fs

s

ff

outfs

s

s

Page 51: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Poche nozioni sugli Operazionali (5)• Circuito Sommatore:

• Sfrutta il principio di massa virtuale

• if = S ik• vout = -Rf * if

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 51

v1

+

_

Out

v-

v+

i1

vout

Rfif

R1

R2

RN

vN

iN

v2

i2

Page 52: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Poche nozioni sugli Operazionali (6)

• Filtro Passa Basso:

• Si aggiunge un condensatore in parallel alla resitenza di feedback:

• Av = -R1/R2 * 1/(1+if/f0)

• 2pf0 = w0 = 1/t = 1/RfCf

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 52

Page 53: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Binary Resistor DAC• Resistenze pesate, quindi se RN-1=10KW , allora RN-2= 20KW , RN-3 = 40KW ,

..., R0 =2N-1 * RN-1 ; e di conseguenza RF = 5KW

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 53

vref

+

_

Out

v-

v+vout

Rf= 5KW

if

RN-1

RN-2

R0

i0

iN-2

S0

SN-2

𝑉out = 𝑉ref1

2𝑆𝑁−1 +

1

4𝑆𝑁−2 +

1

8𝑆𝑁−3 + .....

1

2𝑁𝑆0

Massa virtuale

iN-1SN-1

Page 54: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Problemi legati al DAC Binary Resistor

• Problema più rilevante la risoluzione/precisione:

• Resistenze molto diverse tra loro che devono avere precisioni assolute anche dell’ordine di 1/10000 (12-14 bit)

• Offset dell’operazionale usato come Sommatore Analogico:• Poiché l’Offset in uscita dipende dal Guadagno Non-Invertente, questo cambia a

seconda della configurazione dei bit (interruttori) in ingresso. questo è un problema irrisolvibile e pone un tetto alla risoluzione ottenibile (in pratica qualche mV massimo)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 54

Page 55: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

DAC Ladder Converter• La rete resistiva in effetti divide la corrente

• Assumiamo tutti gli interruttori connessi a GND tranne S3

• Ogni nodo N (0, 1, 2, 3) si vede una resistenza 2R a sinistra ed una resistenza 2R a destra

• Ad ogni nodo N la corrente andrà metà a sinistra e metà a destra

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 55

vref

+

_

Out

v-

v+vout

3R if

R 2R

S2 S3

2R

R

2R

R

2R

2R

2R

S1S0

3210

Il bit3, presenta all’ingresso dell’operazionale, una tensione (Thevenin) attraverso una resistenza equivalente di 3R e un generatore equivalente a Vref/2

vThevenin = Vref/2

3Rv-

Page 56: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Ladder Converter

• Risolve elegantemente i due problemi del Binary Resistor:• Le resistenze hanno solo 2 valori indipendentemente dal numero di bit

• Il guadagno non-invertente dell’operazionale è costante e quindi l’eventuale offset può essere sottratto

• Gli altri bit si comportano alla stessa maniera di S3 con Vref che via via si dimezza

• Il principio di sovrapposizione ......

• Il chip DAC che useremo per il progetto è un Ladder Converter da 12 bit

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 56

𝑉out = 𝑉ref1

2𝑆𝑁−1 +

1

4𝑆𝑁−2 +

1

8𝑆𝑁−3 + .....

1

2𝑁𝑆0

Page 57: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

DAC Progetto• AD7945

• 12-Bit Multiplying DACs

• Guaranteed Specifications with +3.3 V/+5 V Supply

• 0.5 LSBs INL and DNL

• Low Power: 5 uW typ Fast Interface

• 40 ns Strobe Pulsewidth (AD7943)

• 40 ns Write Pulsewidth (AD7945, AD7948)

• Low Glitch: 60 nV-s with Amplifier Connected

• Fast Settling: 600 ns to 0.01% with AD843

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 57

Page 58: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Analog to Digital Converter ADC

• Esistono tantissimi tipi di ADC

• Non possiamo trattarli in questa sede

• Quello che però possiamo valutare sono le caratteristiche principali che riguardano la precisione e l’errore di conversione

• L’ADC converte una quantità continua (i.e. tensione), in un numero intero (binario)

• Normalmente la quantità da convertire varia nel tempo

• Range e Risoluzione (i.e. tensione massima e step minimo)

• EFSR (Full Scale Range) = VrefH - VrefL (Ad esempioo 2 Volt - 0 Volt)

• Q = EFSR / (2N -1) (N = numero di bit dell'ADC)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 58

Page 59: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Tipologie di ADC• Parametri principali: Risoluzione, Frequenza di campionamento.

• In ingresso generalmente si ha un circuito di Sample and Hold (S/H) che campiona il segnale ad un determinato istante e lo mantiene fino a conversione avvenuta.

• Varie tipologie per la parte di conversione:• Bancata di comparatori (Flash ADC)

• Bancata di comparatori pipelined (Pipelined FADC)

• Approssimazione successiva

• Wilkinson (a rampa)

• Doppia rampa (ARDUINO)

• Delta o Sigma-Delta

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 59

Page 60: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Errori di conversione (1)• In generale l'ADC è di tipo lineare (poche eccezion, ad esempio a

risposta logaritmica per applicazioni voce

• Gli errori di conversione sono dovuti a:• Errore di quantizzazione, insito nel processo di “discretizzare” una quantità

continua

• Errore di apertura, legato alla durata del campionamento della quantità che varia nel tempo

• Errore di jitter, legato alla variazione dell’istante in cui viene aperto il “gate” di campionamento

• Errore di linearità, errore di linearità differenziale DNL, errore di linearità integrale INL

• Rumore elettronico15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 60

Page 61: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Errori di conversione (2)

• Si ha quindi una dispersione dei valori convertiti che (soprattutto ad alta frequenza) può risultare maggiore dell'errore di quantizz. o di NON linearità (vedi dopo).

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 61

Quantizzazione: la differenza tra Vin e la tensione

corrispondente al codice generato dall'ADC, normalmente

quantificato in +- 1/2 LSB [Least Significant Bit].

Jitter: dovuto al jitter del clock di campionamento. Importante

per segnali che variano nel tempo con frequenze caratteristiche vicine alla fSampling. In pratica il segnale viene campionato in maniera casuale attorno alla marca temporale “vera”.

Apertura: Durata finita della finestra di sampling (Dt). Il valore

convertito è di fatto una media su questo arco di tempo.

Jitter

Page 62: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Errori di conversione (3)• Non linearità differenziale DNL (Volt):

• DNL: per ogni codice generato D viene valutato l'intervallo di tensione in ingresso corrispondente a quel codice L(D). Viene quindi calcolato il valor medio di L: <L>. Per ogni codice D viene quindi valutata la differenza tra L e <L>. Si ha quindi:• DNL(D) = L(D) - <L> (Volt)

• MAX (|DNL(D)|) viene dato come valore di DNL (Differential Non Linearity)

• In altre parole rappresenta lo scostamento massimo tra l'intervallo di tensione medio (che in un ADC ideale corrisponderebbe alla sua risoluzione) e l'intervallo trovato per ogni codice D generato.

• Viene anche espressa in termini di LSB. Un buon ADC è caratterizzato da DNL < 0.5 LSB.

• DNL(D) / <L> == L(D) - 1 (con L(D) espresso in unità di LSB)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 62

Page 63: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Errori di conversione (4)• Non linarità integrale INL (Volt):

• Per ogni codice D viene valutato il valore di tensione nominale corrispondente a quel codice A(D) = D*<L>

• A(D) viene confrontato con Vin - VrefL , quindi:• INL(D) = A(D) - (Vin - VrefL)

• INL = MAX(|INL(D)|)

• In altre parole, si valuta lo scostamento massimo tra A(D) e il Vin corrispondente.

• A(D) e DNL(D) sono legati tra loro da:• A(D) = Si=0

i=D DNL(i) + INL(0) [eventuale offset fisso] - DNL(0)/2 - DNL(D)/2

• L'errore totale è quindi: DQuantization + DAperture + DJitter + DNL + INL

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 63

Page 64: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Esempi di DNL, INL e “Missing Code”

• A sinistra un esempio di non linearità differenziale, a destra di non linearità integrale con presenza di missing code

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 64

Page 65: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Misura del DNL

• Non è banale. Soprattutto per ADC che hanno risoluzioni molto elevate (eg. 16 bit).

• Immaginate di dover trovare per ognuno dei (eg. 64000) codici l'intervallino di tensione corrispondente (eg. <L> = 2V / 64000).

• NON si fa con un partitore di tensione in ingresso !

• Quello che si può usare è un metodo statistico:• Si manda una tensione variabile nel tempo che “spazzoli” tutto il range dell'ADC

• Normalmente si usa una sinusoide, che ha una solo frequenza ben definita

• Noi useremo una triangolare

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 65

Page 66: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Perché triangolare ?• L'onda triangolare “spazzola” in tempi uguali intervalli di tensioni uguali !!

(Nella realtà occorre stare lontani dai vertici)

• Quindi se divido il Range dell’ADC in 2N intervalli uguali, ognuno di questi viene “coperto” dall'onda triangolare con lo stesso intervallo di tempo Dt

• Ovvero ho una distribuzione «piatta» di tensioni da convertire !

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 66

Range A

DC

VrefH

VrefL

V

t

Page 67: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Popolazione uniforme in intervalli di tensione

• In altre parole, se costruisco un istogramma con in ascissa gli intervalli DV e in ordinata la probabilità che la tensione dell'onda triangolare si trovi in QUEL DETERMINATO INTERVALLO, trovo una distribuzione PIATTA (uniforme)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 67

P(DV)

1/2N

3DV2DVDV 2NDV

Distribuzione in INGRESSO al DAC

Page 68: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Popolazione uniforme dei codici numerici• A questo punto supponiamo che gli intervalli DV siano quelli corrispondenti ai

vari (2N) codici di conversione del mio ADC a N bit.

• Per ogni codice D di conversione avremo un intervallo DV(D) corrispondente.

• Se questi intervalli fossero tutti esattamente uguali (DNL = 0), rifacendo l'istogramma di prima con in ascissa D (invece di DV(D)) troverei la stessa distribuzione piatta

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 68

P(D)

1/2N

11101 2N100 101

Distribuzione in USCITA dal DAC

Page 69: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Condizioni non uniformi, presenza di DNL

• Ovviamente gli intervalli NON sono tutti uguali (per via del DNL)

• Se un intervallo è più largo, l'onda triangolare ci stazionerà per più tempo. L'opposto se l'intervallo è più piccolo.

• L’istogramma quindi diventerà simile a questo:

• Con bin corrispondenti a codici

diversi, aventi P(D) diversi tra loro

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 69

P(D)

1/2N

11101 2N100 101

Distribuzione in USCITA dal DAC

Page 70: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

La probabilità P(D)

• La probabilità P(D) è data da:• P(D) = DV(D) / VRangeADC

• Ovvero usando le definizioni precedenti:

• P(D) = L(D) / VRangeADC

• Quindi se riusciamo a misurare P(D) per ogni codice D dell'ADC possiamo ricavare la DNL:

• DNL(D) = VRangeADC (P(D) - <P(D)>)

• DNL(D) = VRangeADC (P(D) - 1/2N)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 70

Page 71: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Misura di DNL• Abbiamo un modo semplice di misurare P(D) e quindi di conseguenza la

DNL(D):• La misura di P(D), diventa una misura di conteggio

• Si fa campionare all'ADC un segnale triangolare in ingresso

• Si acquisiscono un numero totale NTOT di conversioni

• Si costruisce un istogramma con in ascissa il codice D del conteggio e in ordinata il numero di volte N(D) che si è presentato quel codice particolare

• Il rapporto tra il numero di volte che si è presentato il codice D (N(D)) e il numero totale di conversioni registrate (NTOT) è la nostra P(D) che cerchiamo

• P(D) = N(D) / NTOT

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 71

Page 72: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Misura di DNL(D)• Quante conversioni si devono acquisire ?

• Dipende dalla precisione richiesta dalla misura.

• La popolazione di ogni “bin” dell'istogramma segue una distribuzione binomiale con probabilità P(D), che noi stimiamo con:• P(D) = N(D) / NTOT

• La varianza s2(D) del numero N(D) di conteggi nel bin è quindi data da:

• s2(D) = P(D)(1-P(D))NTOT (Binomiale)

• Se P(D) è molto piccolo rispetto a 1 (nel caso del nostro ADC a 10 bit P(D) sarà un valore prossimo a 1/1024) allora la varianza si approssima a:

• s2(D) = P(D) NTOT = N(D) (Poissoniana)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 72

Page 73: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

Misura di DNL(D)• L'errore su P(D) è quindi dato da (senza considerare le corrleazioni presenti):

• sP(D) = s(D) / NTOT

• sP(D) = √N(D) / NTOT

• sP(D) = √P(D)NTOT / NTOT

• sP(D) = √(P(D) / NTOT )

• L'errore relativo su P(D) è dato da:

• sP(D)/P(D) = 1/√P(D)NTOT = 1/√N(D).

• Quindi per avere una precisione su DNL del 10%, basta che in ogni bin ci siano almeno 100 conteggi.

• NTOT ≈ 2N * 100 = 25600 conteggi

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 73

Page 74: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

In laboratorio• Il DNL dipende dalla frequenza del segnale in ingresso e dalla frequenza di

campionamento

• Prima si misura la frequenza di campionamento dell’Arduino (~10 KHz) ricostruendo l’onda triangolare

• Valutiamo DNL(D) per due frequenze dell'onda triangolare (10 Hz e 500 Hz)

• La prima verifica da fare è la ricostruzione del segnale dai campionamenti dall'ADC

• A seguito si fanno gli istogrammi e si valuta sia DNL(D) che INL(D)

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 74

Page 75: Elettronica generale Ihep.fi.infn.it/CIBER/Elettronica_generale_I_Part02.pdf · 2018. 10. 27. · Elettronica Generale I. Part 02: Logica sequenziale DAC e ADC Arduino (modulo a parte)

In laboratorio

• Con i dati acquisiti dall’ARDUINO dovrete eleborare dei grafici che mostrino la DNL e INL del suo ADC:

15/10/2018 Elettronica Generale I_a , Raffaello D'Alessandro 75