I convertitori Capacitance To Digital

I convertitori capacitance-to-digital consentono di convertire la variazione del valore di una capacità in un valore digitale elaborabile da un microcontrollore. Ecco come implementarli sia dal punto di vista digitale che analogico con i dispositivi della Analog Devices.

I chip AD7141 e AD7143 della Analog Devices integrano al loro interno dei convertitori Capacitance-to-Digital (CDC), ossia dispositivi che consento di leggere le variazioni del valore di una o più capacità. Questo è molto fruttato in tutti gli apparati elettronici, come palmari o computer portatili, che integrano al loro interno pulsanti, cursori o touchpad. Il principio di funzionamento è ben riassunto nella figura 1.

Figura 1: Il touch sensor sono basati sulla misura della perturbazione del campo elettrico, causato dalla dita della mano.

Figura 1: Il touch sensor sono basati sulla misura della perturbazione del campo elettrico, causato dalla dita della mano.

Molti avranno sperimentato, lavorando con circuiti ad alta frequenza, l’effetto di tuning dovuto alla capacità associata alla dita della mano. Mentre in tali applicazioni questo effetto è un problema per l’apparecchiatura elettronica (poiché la disturba), nel caso dei touch sensor si sfrutta proprio tale fenomeno, attraverso ovviamente un controllo affidabile e coerente. I  chip della Analog Devices effettuano una ricalibrazione continua del convertitore A/D per adattarsi alle mutevoli condizioni ambientali. Come si nota dalla figura 1 esiste una sorgente di eccitazione integrata (tipicamente con un frequenza di 240KHz) ed un ricevitore. In cascata a quest’ultimo si trova il convertitore ∑-∆, il quale ha il compito di digitalizzare il segnale  acquisito. La tipologia di convertitore utilizzata (∑-∆) assicura un elevatissima risoluzione (24-bit) ed linearità (0.01%) e precisione (±4fF). Le variazioni di capacità accettate sono ±4pF ed è ammesso un modo comune pari a 17pF. In figura 2 si riporta una tipica risposta del sensore al tocco della capacità. Tale variazione, digitalizzata, può essere acquisita tramite un microcontrollore e quindi gestita in maniera centralizzata.

Figura 2: tipica risposta del sensore alla pressione del tasto

Figura 2: tipica risposta del sensore alla pressione del tasto

Linee guida per la progettazione

Il principale  vantaggio  offerto dai CDC è quello di ridurre sensibilmente  il numero di componenti esterni utilizzati. Essi, infatti, si interfacciano con una capacità esterna che può essere realizzata tramite qualsiasi materiale standard per PCB, compreso FR4, polyamide o PET. La struttura tipica è illustrata in figura 3a; sono presenti tre differenti strati: il supporto isolante tipicamente in tecnologia FR4, le piste in rame ed il supporto protettivo in vetro o plastica. In condizioni normali (tasto non premuto) il convertitore misurerà una capacità Cp (detta capacità di bulk); se il tasto è premuto, invece, si aggiunge anche la capacità del dito (Cf o CIN), creando il circuito equivalente riportato in figura 3c.

Figura 3: struttura tipica per la realizzazione del sensore di capacità.

Figura 3: struttura tipica per la realizzazione del sensore di capacità.

Il  compito del CDC è proprio quello di misurare questa variazione Cf. La progettazione di tali sensori è quindi molto semplificata. L’importante è tenere ben in considerazione le dimensioni del sensore che si crea sul PCB. Il parametro fondamentale è l’area totale, piuttosto che le misure esatte e la forma. Ci sono dei valori massimi e minimi da rispettare. Con un sensore troppo piccolo si rischia di non rilevare la variazione di capacità. Il valore massimo dell’area è, invece, dettato dall’offset del DAC a bordo del AD714x; infatti, se il sensore  risulta troppo esteso, il valore della capacità di bulk rischia di rendere trascurabile (ai fini della misura) quella del dito. In ogni caso il valore della capacità di bulk non deve superare i ±20pF. La tabella 1 riporta i valori minimi, massimi e tipici per differenti forme di sensore:

➤ Pulsante

➤ Switch a 2-vie

➤ Switch a 8-vie

➤ Cursore

➤ Wheel

➤ Key Pad

Tabella 1: valori tipici di progetto del sensore, per differenti forme.

Tabella 1: valori tipici di progetto del sensore, per differenti forme.

Realizzazione di un pulsante

In figura 4 è mostrato come realizzare un pulsante da interfacciare ai CDC AD714x. Si possono scegliere dimensioni comprese tra 5mm e 15mm di diametro.

Figura 4: layout di un pulsante

Figura 4: layout di un pulsante

Oltre alle forme illustrate, il pulsante potrà avere anche forma irregolare, purché soddisfi i requisiti  di dimensioni sopra descritti. Ciascun sensore è costituito da due pad, uno connesso al pin SCR (quello di eccitazione) e l’altro al pin CIN. Entrambi i pad devono trovarsi sul top layer del PCB. In particolare,  il sensore circolare mostrato in figura 4 presenta un’area al suo interno per il montaggio, ad esempio, di un LED che segnali la pressione del pulsante. La connessione del pulsante all’integrato della Analog Devices può essere effettuata con due modalità:

1-single-ended, in cui un pulsante si attiva indipendentemente da altri che possano essere connessi allo stesso CDC.

2-differenziale,  questo metodo implica la presenza di due pulsanti connessi in maniera differenziale allo stesso convertitore. Questo permette di evitare che i due pulsanti possano essere attivati in contemporanea. Ad esempio, questa modalità potrebbe essere utile in quei casi in cui sono presenti un tasto di play ed uno stop. Entrambi  i metodi sono illustrati in figura 5.

Figura 5: connessione single-end e differenziale di un pulsante.

Figura 5: connessione single-end e differenziale di un pulsante.

Quando si preme un tasto, un bit di stato viene impostato ad 1 all’interno del AD714x. Si può anche impostare un interrupt, in modo che il chip possa avvisare l’host processor dell’avvenuta pressione. L’host può quindi interrogare il CDC è capire quale tasto è stato premuto.

Realizzazione di uno switch a 8 vie

In figura 6 si riporta il  layout di uno switch a 8 vie.

Figura 6: layout di uno switch a 8 vie.

Figura 6: layout di uno switch a 8 vie.

Questo sensore ha tipicamente dimensioni quadrate, comprese tra 8mm e 15mm. Necessita di quattro ingressi del AD714x. Questa topologia di sensore permette di rilevare 8 posizioni, indicate con nord, sud, est e overst, nordest, sudest, sudovest e nordovest. In tal caso sono necessari due differenti layer: i pad sul top layer sono connessi al pin SRC, mentre quelli sul secondo layer sono gli ingressi CIN. Le connessioni utilizzate sono di tipo differenziale, come mostrato in figura 7.

Figura 7: connessione di uno switch 8-vie al CDC.

Figura 7: connessione di uno switch 8-vie al CDC.

Anche in questo caso non cambia il principio di gestione rispetto al semplice pulsante. Un interrupt segnala all’host che è avvenuta una variazione. A questo punto, sarà compito del micro interrogare  il registro di stato dell’AD714x è capire quale combinazione ha causato la variazione di capacità (vedere la tabella 2).

Tabella 2: possibili combinazione dello switch a 8 vie.

Tabella 2: possibili combinazione dello switch a 8 vie.

Realizzazione di un cursore

La figura 8 mostra il layout per realizzare un cursore.

Figura 8: layout di cursore.

Figura 8: layout di un cursore.

La larghezza consigliata deve essere compresa tra 5mm e 12mm, mentre la sua lunghezza può variare tra 10mm e 60mm. Il layout può essere diritto (come quello mostrato) o anche curvo (a forma di ferro di cavallo o circolare). Esso è realizzato da un certo numero di segmenti di sensori, normalmente otto. Ciascun segmento deve essere collegato al pin di ingresso CIN dell’AD714x. La sorgente di eccitazione intreccia tutti gli otto segmenti. La modalità di funzionamento di ciascun segmento è la stessa vista per il pulsante. Quindi quando viene poggiato il dito lungo il percorso, più segmenti vengono attivati contemporanea mente. La figura 9 mostra come deve essere realizzata la connessione tra il sensore ed il dispositivo.

Figura 9-10: connessione di cursore al CDC.

Figura 9: connessione di cursore al CDC.

Come comunicare con AD714x

Funzionamento dell’AD714x

Lo schema a blocchi dell’AD714x è riportato in figura 10.

Figura 11: schema a blocchi del AD714x.

Figura 10: schema a blocchi del AD714x.

Come si nota esiste un unico convertitore A/D ed una matrice di commutazione che permette di condividerlo tra tutti gli ingressi attivati. Per realizzare un completo sistema di capsense è necessario, oltre al sensore ed al convertitore, anche un host processor che sia in grado di trattare ed elaborare i dati digitalizzati. La figura 11 riporta lo schema circuitale di una tipica applicazione, in cui si realizzano tre pulsanti ed una barra di scorrimento.

Figura 12: i tre elementi fondamentali per la progettazione di un sistema capsense sono: il sensore, il convertitore CDC ed un host processor che sia in grado di elaborare i dati.

Figura 11: i tre elementi fondamentali per la progettazione di un sistema capsense sono: il sensore, il convertitore CDC ed un host processor che sia in grado di elaborare i dati.

Non esiste un vincolo specifico sul processore da utilizzare. Si potrà quindi impiegare un semplice 8bit, purché dotato di interfaccia SPI o I2C. Eventualmente, nel caso in cui nessuna di tali porte dovesse risultare disponibile, sarà sempre possibile simularle via software. La tensione di alimentazione necessaria per far funzionare  il chip deve essere compresa tra 2.6V e 3.6V. Sono possibili tre modalità di funzionamento:

Full-powered, in cui il dispositivo rimane sempre alimentato. E’ particolarmente indicata per applicazioni (consolle per giochi) che dispongono di una sorgente di alimentazione da rete.

Low power, in cui il dispositivo  si spegne automaticamente. Permette di raggiungere consumi molto più bassi rispetto alla prima modalità. E’ adatta per applicazioni mobile.

Shutdown, in cui il dispositivo  è completamente spento.

Programmazione dell’AD714x

L’esempio proposto nel listato 1 mostra l’implementazione firmware di quattro pulsanti tramite AD714x e il processore ADuC841 della stessa Analog Devices.

BYTE ReadFromAD7142ViaI2C (BYTE DeviceAddress,
const WORD RegisterStartAddress, const BYTE NumberOfRegistersToRead,
WORD *DataBuffer, const
WORD OffsetInBuffer)
{
WORD ReadData;
BYTE LowByteAddress, HighByteAddress;
BYTE LowByteData, HighByteData;
BYTE r, AcknError;
BYTE DeviceAddressHeader;
AcknError=1; //No error on initialisation
//Add the write bit to the device address
DeviceAddressHeader=DeviceAddress<<1 | I2C_WR;
//Split the address in two bytes
HighByteAddress = (RegisterStartAddress & 0xFF00) >>8;
LowByteAddress = RegisterStartAddress & 0x00FF;
//Start the I2C transfer
InitialiseI2CMaster();
StartI2CMaster();
//Send device address
if(!SendByteI2CMaster(DeviceAddressHeader))
{
//Send register address
if(!SendByteI2CMaster(HighByteAddress))
{
if(!SendByteI2CMaster(LowByteAddress))
{
//Send the repeated start
StartI2CMaster();
//Send device address again
//changing the Rd/Wr bit
DeviceAddressHeader=DeviceAddress<<1| I2C_RD;
if(!SendByteI2CMaster(DeviceAddressHeader))
{
//Perform block read, but first,we need to
//know if we must send an ACKN or a NACK
if(NumberOfRegistersToRead==1)
{
HighByteData=ReceiveByteI2CMaster(ACK);
LowByteData=ReceiveByteI2CMaster(NACK);
ReadData=((HighByteData & 0xFF)<<8) | Low-
ByteData;
DataBuffer[OffsetInBuffer]=ReadData;
}
else
{
for (r=0;r<(NumberOfRegistersToRead-1);r++)
{
HighByteData=ReceiveByteI2CMaster(ACK);
LowByteData=ReceiveByteI2CMaster(ACK);
ReadData=((HighByteData&0xFF)<<8|LowByteData;
DataBuffer[OffsetInBuffer+r]=ReadData;
}
//Do the last read sending the NACK
HighByteData=ReceiveByteI2CMaster(ACK);
LowByteData=ReceiveByteI2CMaster(NACK);
ReadData=((HighByteData&0xFF)<<8)|LowByteData;
//Recombine 16-bit data
DataBuffer[OffsetInBuffer+NumberOfRegistersToRead-
1]=ReadData;
}
//Stop transfer
StopI2CMaster();
}
else
//No acknowledgement was found therefore
//send the stop condition
{
StopI2CMaster();
AcknError=0;
}
}
else
//No acknowledgement was found therefore send
//the stop condition
{
StopI2CMaster();
AcknError=0;
}
}
else
//No acknowledgement was found therefore
//send the stop condition
{
StopI2CMaster();
AcknError=0;
}
}
else
//No acknowledgement was found therefore
//send the stop condition
{
StopI2CMaster();
AcknError=0;
}
return(AcknError);
}
Listato 1

In questo caso sono stati utilizzati gli ingressi 0, 1, 2, 3. I restanti  CIN sono stati connessi a Vbias. In particolare,  il listato 1 presenta la funzione ReadFromAD7142ViaI2C, la quale esegue la lettura tramite interfaccia I2C dei registri del AD7142. Tale funzione invia l’indirizzo del dispositivo,  includendo  il bit di scrittura, quindi l’indirizzo del registro da leggere ed infine attende che il CDC gli invii i dati richiesti. La funzione restituisce “1” se l’operazione si è conclusa con successo, altrimenti “0”. Per conclude la procedura, viene inviata la condizione di stop, così come prevede il protocollo I2C.

 

 

Scrivi un commento

EOS-Academy
Abbonati ora!