Sul blog di Elettronica Open Source puoi leggere non solo tutti gli articoli Premium riservati agli abbonati Platinum 2.0 e inseriti nella rivista Firmware 2.0 (insieme ad articoli tecnici, progetti, approfondimenti, news, tutorial a puntate e molto altro) ma anche gli articoli della Rubrica Firmware Reload. In questa Rubrica del blog abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi evergreen per Professionisti, Makers, Hobbisti e Appassionati di elettronica. In questo articolo parliamo di come realizzare l’interfaccia utente di una applicazione a basso assorbimento progettata utilizzando una tecnica a rilevamento capacitivo.
INTRODUZIONE
L’impiego di sensori capacitivi per applicazioni di interfaccia verso l’utente sta sempre più aumentando grazie alla possibilità di ridurre i costi, incrementare la vita dei prodotti riducendo l’utilizzo di componenti meccanici, e accrescere l’attrattività del prodotto dal punto di vista estetico e dell’utilizzo. Sono molte le applicazioni in cui la pressione di pulsanti meccanici e potenziometri viene sostituita da pulsanti capacitivi, controlli a cursore e a rotella. Gli esempi più classici sono controlli per la regolazione di intensità, controllo del volume, pulsanti di avvio, etc. Originariamente, quando la tecnica “capacitive sensing” è arrivata sul mercato, veniva impiegata solamente durante la modalità attiva dei sistemi. In modalità attiva, infatti, la potenza consumata dal circuito di rilevamento è inferiore alla potenza complessiva del sistema. Durante la fase inattiva, o se il dispositivo veniva alimentato a batteria, la funzione di sensing veniva disabilitata per risparmiare energia, utilizzando un qualsiasi stimolo meccanico per risvegliare il sistema. Con i progressi della tecnologia capacitiva e la sua possibilità di essere “low power”, anche i pulsanti di alimentazione possono essere implementati con questa tecnica del “capacitive sensing”. Vediamo allora come progettare una interfaccia utente per una applicazione low power utilizzando questa interessante modalità di acquisizione comandi.
PROGETTO DEL SISTEMA
Il segreto per progettare un sistema di sensing capacitivo low power è partire dalla definizione del sistema. I passi fondamentali da percorrere sono: creare un power budget, definire delle modalità di power e identificare i compiti del sistema in ciascuna di queste modalità. Soltanto quando i concetti precedenti saranno stati del tutto chiariti a livello progettuale, si potrà dire di disporre di validi punti di partenza per lo sviluppo software e hardware.
POWER BUDGET
Per realizzare il power budget di una applicazione, per prima cosa bisogna chiedersi per quanto tempo il sistema dovrà essere in grado di lavorare senza richiedere la sostituzione delle batterie. Per alcuni sistemi queste ultime possono durare anche solo sei mesi, in altre applicazioni, per esempio quelle dove l’elettronica è completamente sigillata oppure dove è collocata in zone di non facile accesso, esistono requisiti sulla durata delle fonti di energia per periodi di non meno di 10-15 anni! Dopo aver effettuato questa scelta sulla vita prevista delle batterie è possibile scegliere i modelli più adatti. Ovviamente, i fattori di costo ed i fattori di forma del sistema spesso limitano la scelta della batteria più indicata. Spesso, se si prevede che lo stesso tipo di batteria debba essere reperibile anche dopo 10 anni, sarà bene fare considerazioni anche sulla sua disponibilità di mercato nel lungo periodo. Una volta scelta la batteria, si può procedere con il power budget, considerando ovviamente le caratteristiche del dispositivo riportate sul foglio specifiche. La massima corrente disponibile, il parametro chiave del power budget, si può calcolare con la seguente equazione:
MAX corrente media disponibile (mA) = Capacità batteria (mAh) / Vita richiesta (h)
Le modalità di power e le funzionalità di sistema saranno progettate perché il consumo complessivo di corrente del sistema sia inferiore alla massima corrente media ottenuta.
MODALITÀ DI POWER
In ogni sistema ci sono almeno due modalità principali: attiva e inattiva. Un sistema che prevede un’interazione con un utente passerà la maggior parte del tempo nella modalità inattiva, rimanendo brevemente in modalità attiva solo quando è necessario. Le modalità attive possono essere molteplici a seconda del livello di interazione richiesto con l’utente, ma, in generale, per le nostre finalità, possono essere raggruppate considerando una singola modalità attiva. L’obbiettivo è avere una modalità attiva in grado di fornire una buona interfaccia utente per brevi periodi di tempo. Nella modalità inattiva l’obbiettivo e quello di consumare il meno possibile per preservare la batteria. A questo punto, avendo la corrente media disponibile per il sistema e le modalità operative, è necessario definire uno schema tra le modalità. Consideriamo per esempio una interfaccia utente utilizzata mediamente 15 minuti in un giorno. In un giorno ci sono 1440 minuti, perciò il sistema sarà in modalità attiva per l’1% del tempo. Se in modalità attiva il consumo è di 100 μA, il suo contributo alla corrente media è di soli 1 μA (cioè l’1%). E' chiaro che anche piccole variazioni nella corrente attiva non impattano sulla durata della batteria. Se invece ora consideriamo il contributo alla corrente media della modalità inattiva, il valore di corrente consumato andrà moltiplicato per il 99%, rimanendo praticamente inalterato. Quindi un 1μA consumato in modalità inattiva vale 1μA nel calcolo della corrente media. Basandoci su questo esempio si vede come sia molto più importante lavorare sui consumi nella modalità inattiva rispetto alla modalità attiva, poiché anche una piccola variazione di consumo migliora notevolmente la durata delle batterie.
FUNZIONALITÀ DEL SISTEMA
A questo punto è necessario definire quali sono i compiti e le funzionalità attive nelle diverse modalità operative del sistema. Nella modalità attiva abbiamo un utente che sta interagendo con il dispositivo. L’interfaccia utente deve essere funzionante al 100% e rispondere velocemente agli stimoli generati dall’utente stesso. Tutti gli ingressi dei sensori capacitivi devono essere campionati e i movimenti sui cursori e sulle rotelle controllati. La frequenza di campionamento in modalità attiva dovrà essere compresa tra 20 e 125 kHz per assicurare una certa reattività del sistema. La corrente in questa fase potrà variare a seconda delle applicazioni in un intervallo da 100 a 500 μA. Per arrivare poi a ridurre la corrente in maniera efficace una volta che si passa in modalità inattiva è necessario che i task in esecuzione in modalità attiva siano interrotti, per questo vanno divisi in due categorie: i task che necessitano che la CPU sia attiva (come le macchine a stati e l’elaborazione dei dati) e quelli invece che non richiedono che la CPU sia attiva. Alla seconda categoria appartengono per esempio i campionamenti dei sensori capacitivi e le conversioni ADC. In modalità inattiva l’obbiettivo principale è preservare la batteria. Sicuramente andrà implementato un algoritmo low power di risveglio al tocco, per determinare quando è necessario passare in modalità attiva. Per esempio, si può decidere di campionare solo uno switch alla frequenza di 1-10 Hz per verificare se un dito è stato appoggiato sulla piazzola capacitiva. Si può utilizzare un low power RTC per pianificare questi controlli. Il consumo di corrente in fase inattiva dovrà essere compreso tra 1 e 3 μA.
PROGETTAZIONE DELL’HARDWARE
I passi fondamentali per la progettazione dell’hardware sono:
- Determinare il numero di aree capacitive necessarie al sistema
- Selezionare una MCU low power con funzionalità di rilevamento capacitivo
- Progettare il PCB
Il numero di zone capacitive dipende dalla complessità dell’interfaccia utente, ogni pulsante capacitivo necessita di un solo ingresso touch, mentre slider e control wheel sono solitamente realizzati con un numero di ingressi variabile da 4 a 8. Una volta decisi il numero di ingressi si procede alla scelta della MCU. L’MCU dovrà avere una modalità di sleep estremamente efficiente e supportare dei risvegli periodici (per esempio potrebbe avere un real time clock). Una famiglia di CPU molto indicata per queste applicazioni è la C8051F99x di Silicon Labs [1].
Le caratteristiche di questa famiglia “F99x” sono:
- Flash integrata (8 kb), RAM integrata (512 byte) e una CPU che garantisce 25MIPS con 150 μA/MHz di consumo in fase attiva
- Acquisizione autonoma di ingressi capacitivi, con tempo di conversione inferiore a 40 μs
- Una modalità di sleep che porta il consumo a 300 nA con LFO interno e tempi di risveglio di 2 μs
- Un ADC integrato da 10 bit e 300 ksps oppure da 12 bit a 75 ksps
- 13/14 ingressi capacitivi in un contenitore ridotto
La scelta del dispositivo giusto può essere fatta anche valutando le architetture di MCU che portano ulteriori vantaggi, per esempio la possibilità di campionare più canali in una singola conversione. Per esempio la famiglia F99x permette di collegare internamente più ingressi capacitivi e analizzarli in una singola conversione. Questo può far risparmiare energia e può tornare utile per la funzionalità di risveglio collegando insieme più sensori capacitivi. Ovviamente, questa funzionalità deve essere abbinata ad un layout dove tutte le aree capacitive abbiano la stessa dimensione e forma per evitare sbilanciamenti nella misura. La periferica di sensing capacitivo interna alla MCU F99x (denominata CS0) ha un oscillatore dedicato che controlla i tempi di conversione, indipendente dal clock di sistema. Questo permette di poter mettere la MCU in una modalità di sospensione quando la conversione è in corso. In più, la funzionalità di risveglio della CPU dalla modalità di sospensione al termine della conversione è già integrata. Se l’applicazione viene inserita in un ambiente soggetto a disturbi sarà necessario eseguire più conversioni per essere sicuri di avere una certa risoluzione sull’individuazione del tocco. La CS0 è in grado di eseguire una media delle conversioni basata su 1, 4, 8, 16, 32 o 64 campioni, senza intervento della CPU.
REALIZZARE IL PCB
La parte finale è quella che prevede la realizzazione del PCB. Un ottimo spunto lo possono fornire le schede di valutazione che solitamente sono disponibili per le MCU con funzionalità di sensing capacitivo. Rimanendo sulla famiglia F99x, possiamo considerare la F990 Slider Evaluation Board, in Figura 2. La sorgente di potenza è una batteria CR2032 accompagnata da una capacità di disaccoppiamento da 1 μF. La capacità risulta necessaria perché la batteria ha una elevata impedenza in uscita e la sua corrente di picco è limitata. La capacità aiuta a risparmiare batteria e ad integrare le richieste di corrente impulsive. La MCU installata è la C8051F990, in un contenitore da 3x3 mm, con 16 pin di I/O. All’esterno gli unici componenti richiesti sono un pull-up per la linea di reset e una capacità per il pin di Vdd. La scheda è equipaggiata con 10 LED e con 10 resistenze di limitazione per la corrente. La parte più interessante della scheda sono le 6 zone capacitive utili a generare una interfaccia utente. Le zone sono realizzate con pattern a “v” in maniera da poter essere usate singolarmente come pulsanti o combinate come cursori. La parte superiore delle piazzole è rivestita in maniera da proteggerle dalle ESD e ottenere una superfice uniforme al tocco. La MCU della scheda dispone di 13 pin in grado di effettuare il sensing capacitivo, per il collegamento alle pad l’ideale sarebbe realizzare le piste di collegamento sul lato inferiore di una scheda a 2 facce oppure su un lato interno di una scheda multistrato. Un’interessante nota tecnica applicativa per comprendere come realizzare il PCB è la AN447: Printed Circuit Design Notes for Capacitive Sensing with the CS0 Module[2].
Articolo della rivista cartacea Firmware Anno 2014 - Numero 107