ADXL372: L’Accelerometro a Bassa Potenza per Rilevamento d’Impatto e Monitoraggio Ambientale

Scopriamo l’integrato ADXL372, un sistema completo di misurazione dell’accelerazione a 3 assi che opera a livelli di potenza molto bassi.

Quando sorge la necessità di avere un’interfaccia per interagire con l’ambiente e per trasformare una grandezza fisica in un segnale elettrico digitale, la scelta della sensoristica oggigiorno è piuttosto semplice, data la vastità dell’offerta in un vasto campo di applicazioni.

Alcuni dei trasduttori comunemente utilizzati sono sensori di corrente, sensori di tensione, tachimetri, sensori di luce, fino ad arrivare a sensoristica più complessa come accelerometri, giroscopi o anche IMU (Inertial Measurement Unit, ovvero unità di misura inerziale), che orma li si trova dappertutto.

Questi non sono altro che piccoli sensori incredibilmente utili, che vengono integrati sempre di più nei dispositivi elettronici che ci circondano: li troviamo nei telefoni cellulari, nei droni, robot di auto-bilanciamento, nei giocattoli, nei telecomandi delle console di gioco, tute “motion capture” e molto altro.

Come suggerisce il nome, il sensore più completo in questo ambito è l’IMU, che in realtà è un sistema composto in grado di misurare i dati di orientamento e fornire una comprensione completa dell’accelerazione, velocità, posizione e orientamento di un dispositivo; tutto ciò, grazie alla combinazione di tre tipologie di sensori, ovvero accelerometro, giroscopio e magnetometro.

Gli accelerometri vengono utilizzati principalmente per misurare l’accelerazione e l’inclinazione, la loro scelta e il loro utilizzo non è per niente banale, infatti è importante considerare tutta una serie di dettagli che vedremo a breve analizzando la breakout board ADXL372.

Gli accelerometri

Come ci suggerisce il temine, un accelerometro non è altro che un dispositivo meccanico o, più recentemente, microelettromeccanico (MEMS=Micro Electro Mechanical System) dedicato alla misura di un’accelerazione, ovvero la quantità di variazione della velocità di un oggetto.

Le forze in gioco possono essere sia statiche che dinamiche, basti pensare nel primo caso alla forza di gravità che costantemente ci tiene saldi al terreno; andandone a misurare la quantità di accelerazione statica si può scoprire il particolare angolo di inclinazione del dispositivo rispetto alla terra; oppure nel caso di forze dinamiche come spostamenti o vibrazioni di qualsiasi tipo e misurandone la quantità di accelerazione dinamica, si può analizzare il modo in cui un particolare dispositivo si muove nello spazio.

Quindi in generale possiamo affermare che possono essere utilizzati per rilevare le vibrazioni nei sistemi o per applicazioni di orientamento.

Grazie agli accelerometri, i dispositivi su cui sono montati riescono a comprendere meglio l’ambiente circostante, un accelerometro può aiutare ad analizzare i problemi di un motore di un’auto andandone a rilevare le sue vibrazioni, oppure sono presenti in varie tipologie di computer portatili in modo da poter proteggere i dischi rigidi dai danni accidentali causati da cadute (l’accelerometro rileva l’improvvisa “caduta libera” del computer e spegne il disco rigido in modo che le testine non rovinino i dischi magnetici).

Un altro esempio può essere la loro applicazione nel mondo degli incidenti automobilistici, dove vengono utilizzati per rilevare un evento di “schianto” e attivare gli airbag al momento giusto; oppure nel più comune mondo dei droni, per permettergli una vasta gamma di funzionalità aggiuntive che altrimenti non avrebbero.

Gli accelerometri possono misurare l’accelerazione su uno, due o tre assi; quelli triassiali si sono diffusi maggiormente da quando il costo di sviluppo e industrializzazione di questi prodotti è diminuito drasticamente.

Semplificando di molto il loro funzionamento e considerando una linea generale, questi dispositivi possono contenere internamente piastre capacitive e quando le forze di accelerazione agiscono sul sensore, queste piastre si muovono l’una rispetto all’altra facendo cambiare la capacità tra esse permettendo di rilevarne l’accelerazione. Esistono anche altre tipologie di accelerometri realizzati con materiali piezoelettrici e grazie a queste minuscole strutture cristalline vengono emesse delle cariche elettriche quando sono poste sotto uno stress meccanico, ad esempio l’accelerazione; quindi ne esistono di varie tecnologie, pur assolvendo alla stessa funzionalità.

Passando oltre e considerando sempre in linea generale le diverse tipologie di accelerometri da un punto di vista funzionale, per potersi interfacciare con loro, oltre la gestione dell’alimentazione, si hanno tre possibili letture/comunicazioni, ovvero analogica, digitale e PWM (Pulse-Width Modulation – modulata a larghezza di impulso).

Nel primo caso questi dispositivi mostrano le accelerazioni attraverso livelli di tensione variabili (tra zero volt e il livello della tensione di alimentazione), in modo tale che un microcontrollore mediante il suo convertitore analogico/digitale (ADC) possa “comprenderne” i dati.

Nel caso di PWM, gli accelerometri trasmettono delle onde quadre con un periodo noto ma con un “duty cycle” (ciclo di lavoro) che varia al variare dell’accelerazione.

Infine, quelli digitali come vedremo a breve, hanno un’interfaccia digitale e mediante un protocollo di comunicazione possono trasmettere un numero di informazioni maggiori verso i microcontrollori, con un conseguente aumento di funzionalità rispetto le due precedenti tipologie e meno suscettibilità al rumore.

Riguardo altre considerazioni generiche sugli accelerometri possiamo dire che sono dei dispositivi a bassissima potenza, con correnti richieste dell’ordine dei milli/microampere o meno e con tensioni di alimentazione di 5 V o inferiore (rendendoli adatti per applicazioni a batteria); questi consumi variano a seconda delle impostazioni del particolare dispositivo e le modalità di risparmio energetico come vedremo nel prossimo paragrafo.

Infine si possono differenziare anche in merito al range di misura, riuscendo a misurare accelerazioni da pochi “g” fino anche ad arrivare a centinaia di “g” e dipendentemente dalla particolare applicazione bisognerà selezionare il più adatto tenendo presente che minore è il range del sensore, più sensibili saranno le letture e viceversa. In base a quanto appena visto, a questo punto analizziamo i dettagli dell’accelerometro ADXL372, presente come cuore della breakout board acquistabile, qui proposta.

L’accelerometro ADXL372

L’ADXL372 è un accelerometro MEMS (Micro Electro Mechanical Systems che indica un dispositivo costituito da strutture meccaniche e circuiti elettronici integrati sullo stesso chip di silicio) a bassissima potenza, a 3 assi, con un range di ±200 g che consuma 22µA ad una velocità di dati di uscita (Output Data rate – ODR) dell’ordine dei 3.200Hz; fornisce all’utente la possibilità di accedere alla sua configurazione e ai registri dei dati tramite periferica seriale (SPI – Serial Peripheral Interface) o il protocollo I²C (Inter-Integrated Circuit).

Opera su un’ampia gamma di tensioni di alimentazione ed è disponibile in un package LGA (16 pin Terminal Land Grid Array) da 3 mm × 3,25 mm × 1,06 mm, con una configurazione di pin come riportato in Fig. 1.

Fig. 1 Configurazione PIN

 

Come potete notare dei 16 pin disponibili, 3 sono riservati (Reserved), 2 non collegati (NIC), 2 sono pin di interrupt (INT1 e 2), tolti i 3 pin di GND e i 2 di alimentazione, i restanti pin riguardano i protocolli di comunicazione appena citati.

Oltre al suo consumo energetico estremamente basso, l’ADXL372 ha molte funzioni tra cui quella per il rilevamento dell’impatto fornendo al contempo una riduzione della potenza a livello di sistema. Sono disponibili varie modalità di funzionamento, descritte qui di seguito.

Measurement Mode: (modalità di misura) ovvero la modalità operativa predefinita, che permette una rilevazione dei dati di accelerazione continua e il consumo è dell’ordine dei 22 µA (tipico), con un ODR di 3.200 Hz, utilizzando un’alimentazione di 2,5 V. Se il parametro ODR (Output Data rate – velocità dei dati in uscita) viene cambiato, anche il relativo consumo in corrente subirà una variazione.
I

nstant On Mode: indica la modalità di accensione istantanea, consente il rilevamento dell’impatto a potenza estremamente bassa; in questa modalità, l’accelerometro monitora costantemente l’ambiente consumando una corrente dell’ordine degli 1,4 µA (tipica). Quando viene rilevato un evento che supera una soglia interna definita, il dispositivo passa alla modalità di misurazione per registrare l’evento.

Di default la soglia è compresa tra 10 g e 15 g, tuttavia si può impostare un valore differente tramite il registro corrispondente, fino a 30 g – 40 g. Essendo una modalità per risparmio energetico, non vengono resi disponibili nuovi dati di accelerazione digitale fino a quando l’accelerometro non passa al funzionamento normale, pur rimanendo accessibili tutti i registri, trovandosi in normale funzionamento di lettura/scrittura.

Wake-Up Mode: ovvero la modalità “sveglia” è ideale per il rilevamento semplice della presenza o assenza di movimento con un consumo energetico estremamente basso.

La modalità di riattivazione è particolarmente utile per l’implementazione di un interruttore on/off attivato a basso movimento, che consente di spegnere il resto del sistema fino a quando non si ha un’attività prolungata.

Se viene rilevato un movimento, l’accelerometro può passare autonomamente in altre modalità, a seconda della configurazione del dispositivo.

Standby: infine questa modalità permette al dispositivo la messa in standby che sospende la misurazione e riduce il consumo di corrente a meno di 100 nA (tutte le funzioni del sensore sono disattivate).

Abbiamo visto come siano presenti differenti configurazioni, tra cui un metodo per acquisire solo l’accelerazione di picco degli eventi oltre la soglia (che incorpora anche un filtro per eliminare gli errori iniziali e di variazione lenta, come la deriva della temperatura ambiente), vediamo ora come sia possibile implementare un funzionamento di questo tipo andando però prima ad analizzare le caratteristiche della breakout board e le sue funzionalità.

Schema eletttrico breakout accelerometro

Diamo dunque uno sguardo allo schema che descrive la breakout board qui proposta; in esso si può notare come il circuito è stato realizzato per portare all’esterno tutte le connessioni dell’integrato (mediante un comodo header con passo 2,54mm) ed avere tutti e soli i componenti per il suo pilotaggio.

Considerando in prima battuta l’accelerometro, esso è identificato come “U3” e rispetto all’analisi fatta sin qui, possiamo notare come sia il protocollo di comunicazione SPI che I²C sono accessibili tramite piedinatura, perciò si ha la possibilità di scegliere il protocollo d’interesse per poterci comunicare.

L’accortezza che è stata tenuta riguarda le alimentazioni.

Dato che l’ADXL372 ha una tensione massima d’alimentazione pari a 3,5V e volendolo rendere compatibile sia con i dispositivi a 3,3V che a 5V (come Arduino, Raspberry Pi e quindi con tutti i circuiti a microprocessore funzionanti con livelli logici TTL), è stato previsto un adattatore di livelli, che per fornire la massima flessibilità viene applicato ad entrambe i protocolli di comunicazione.

Al contrario le linee di interrupt (INT1 e INT2) che possono essere utilizzate mediante il jumper “JINT”, pur portate all’esterno del componente tramite il contatto “IRQ” non hanno alcun adattamento di segnale e devono quindi essere gestite con dispositivi operanti con livelli logici compatibili.

Per avere una corretta alimentazione dell’accelerometro e contemporaneamente anche la possibilità di alimentare la scheda con 5V o 3,3V sono stati aggiunti i componenti “U1” e “U2”.

Il primo dispositivo è un regolatore di tensione (MCP1700T-3302E) della Microchip, utilizzato per generare una tensione costante di 3,3V partendo da una tensione di 5V; come si può notare quando sono presenti i 5V viene anche alimentato un partitore di tensione dato da R2-R3 che fornisce sul pin 1 (SEL) del dispositivo “U2” una tensione diversa da zero.

Il dispositivo “U2” altro non è che uno switch bidirezionale della Texas Instrument (TMUX1219DBVR) e attraverso il pin 1, esso permette di selezionare sulla sua uscita “D” (pin 5) una delle due tensioni in ingresso S1 o S2 (pin 4 e 6 rispettivamente).

Perciò con un valore diverso da zero sul pin 1 (SEL) in uscita sul pin 5 (D) si avrà la tensione presente sul pin 6 (S2), mentre con un valore pari a zero sul pin 1 (SEL) si avrà in uscita sul pin 5 (D) la tensione d’ingresso del pin 4 (S1).

Questo permette di avere automaticamente in uscita al pin 5 di “U2” sempre la corretta alimentazione di 3,3V, indipendentemente dalla tensione d’ingresso scelta.

Ultimo dettaglio importante dello schema elettrico riguarda il jumper “JVIO”, che oltre ad alimentare un LED (Light Emitting Diode – diodo ad emissione luminosa) permette di definire i livelli di tensione (VIO) dei protocolli di comunicazione con cui comunicare verso il “mondo esterno”, perciò può essere impostato a piacimento e dipendentemente dalla tensione utilizzata.

Piano di montaggio dell’accelerometro

Elenco Componenti:

R1: 470 ohm (0603)
R4, R5, R6, R7, R8, R9, R10, R11: 10 kohm (0603)
R2: 6,8 kohm (0603)
R3: 3,3 kohm (0603)
C1, C2, C3, C4, C6, C7: 1 µF 6,3V ceramico (0603)
C5: 10 µF 6,3V tantalio (1206)
U1: MCP1700T-3302E/TT
U2: TMUX1219DBVR
U3: ADXL372BCCZ-RL7
Q1, Q2, Q3, Q4: BSS138W-7-F
LD1: LED red (0603)

Varie:
- Circuito stampato S1598
(33x33mm)

Rileviamo gli impatti con l’accelerometro

Passiamo a questo punto a un’applicazione pratica della breakout board, con la quale vi spieghiamo come sia possibile rilevare un impatto utilizzando semplicemente una scheda Arduino UNO (Arduino) e le sue risorse di calcolo.

Facciamo riferimento alla Fig. 2, nella quale viene riportata la disposizione dei pin dell’header (connettore) e in aggiunta, alla Tabella 1, dalla quale è possibile vedere quelle che sono le connessioni tra le due schede; notate immediatamente che è stata utilizzata l’alimentazione a 5V, perciò il jumper JVIO va messo in corto verso i 5V, mentre riguardo la gestione IRQ il jumper JINT va cortocircuitato verso INT1. Il protocollo d’interesse è SPI.

A questo punto per poter utilizzare l’Arduino si ha la necessità di scaricare ed installare le librerie presenti sul sito ufficiale Github della Analog Device che riporta un progetto d’esempio su questo dispositivo.

Fig. 2 Serigrafia e pinout della breakout board

Tabella 1 Connessioni tra Arduino UNO e breakout board ADXL372

 

Per l’installazione di questo progetto nell’IDE di Arduino si rimanda ad una delle varie guide presenti su internet.

Dal precedente link si potranno scaricare i cinque file presenti nello screenshot proposto nella Fig. 3, che ci serviranno a gestire le informazioni fornite dalla breakout e ad impostare correttamente l’integrato ADXL372.

Nell’elenco, i due file adxl372.cpp e adxl372.h, sono le librerie vere e proprie dell’accelerometro, al loro interno vengono definiti tutti i dettagli implementativi per poter gestire le funzionalità dell’ADXL372; mentre nei due file Communication.cpp e Communication.h sono definite alcune strutture e funzioni aggiuntive per la lettura SPI, per maggiori dettagli si rimanda ai file specifici e relative guide on-line.

 

Fig. 3 Progetto d’esempio per rilevare gli impatti

 

Analizziamo brevemente il funzionamento di questo progetto facendo riferimento esclusivamente a quanto presente nel file ADXL372_example.ino.

Al suo interno, dopo l’import delle varie librerie e la definizione di alcune variabili/strutture, è presente la funzione Set_Impact_Detection(void) riportata nea Listato 1. Come si può notare, in esso viene impostato il setup del dispositivo prima della sua messa in funzione partendo dalla riga 19 in cui viene messo in standby per poi configurarlo.

Tra le varie impostazioni, in prima analisi, troviamo la disattivazione dell’auto-sleep (riga 21), la definizione della larghezza di banda (riga 23) e la definizione dell’ODR (riga 25).

Si tenga presente che le applicazioni di rilevamento dell’impatto spesso richiedono misurazioni di accelerazione con la necessità di una larghezza di banda e “g” elevati, questo perché un impatto è un evento transitorio che produce un impulso di accelerazione con contenuto di frequenza su un ampio intervallo e con una conseguente necessità di larghezza di banda sufficientemente ampia per catturarlo (la riduzione della larghezza di banda ha l’effetto di ridurre l’ampiezza del segnale registrato con conseguente imprecisione della misurazione).

Viene poi impostato (sulla riga 32) il range da rilevare, di cui si è parlato ampiamente in precedenza, per poi definire due parametri fondamentali in questa tipologia di progetto: le soglie di attività/inattività (righe 38 e 39) e il tempo di attività/inattività (righe 42 e 43), oltre che la gestione interrupt (riferitevi alla riga 46).

Con riferimento alla Fig. 4, la modalità di attivazione istantanea (Instant On Mode) è una modalità a bassissima potenza che monitora continuamente l’ambiente per eventi di impatto che superano una soglia definita, quando viene rilevato un impatto, il dispositivo passa alla modalità di misurazione completa e acquisisce il profilo dell’impatto (perciò tali soglie sono fondamentali a seconda delle particolari necessità di progetto).

 

Fig. 4 Soglie di attività/inattività in “Instant On Mode”

 

In aggiunta con riferimento alla Fig. 5, in alcune applicazioni potrebbe sorgere la necessità di disporre di un singolo campione di accelerazione (3 assi) al culmine di un evento di impatto (esso contiene informazioni sufficienti sull’evento) e non è richiesta la cronologia completa dell’accelerazione; in questi casi l’ADXL372 offre la capacità di memorizzare solo l’accelerazione di picco di ogni evento oltre la soglia e del picco più alto in assoluto avendo dei registri dedicati.

Fig. 5 Cattura degli eventi d’impatto

 

Sempre con riferimento alla Fig. 5, non appena viene attivato l’interrupt di “attività”, il dispositivo registra i valori dei 3 assi dell’evento di picco di accelerazione che si verifica tra il trigger di interruzione di attività e il successivo trigger di interruzione di inattività.

Tutto ciò avviene ciclicamente per ogni periodo di attività compreso tra l’attivazione dell’interruzione di attività e la conseguente attivazione dell’interruzione di inattività, memorizzando i dati nella FIFO (First In, First Out) attivata con l’istruzione di cui alla riga 35.

Finché è selezionata la modalità di rilevamento del picco, il dispositivo memorizza anche il picco complessivo più alto e quando questi valori vengono letti dai registri, i dati dal registro vengono cancellati e il dispositivo inizia a cercare il nuovo picco più alto.

Infine, sempre tornando al Listato 1, viene attivata la modalità “Instant On” (nella riga 52) per mettere in funzione definitivamente l’accelerometro.Passando oltre e considerando Listato 2, vengono riportate le altre due funzioni definite nel file ADXL372_example.ino, ovvero setup() e loop(); nella prima viene configurato il monitor seriale (riga 56) e il protocollo SPI (righe 57 e 58) oltre che i pin di Chip Select (riga 61) e gestione interrupt (riga 62), tuttavia è interessante notare che viene chiamata la funzione di configurazione “Set_Impact_Detection()”, che imposta l’accelerometro nella corretta modalità di utilizzo.

Mentre nella funzione loop(), oltre ad essere riscalati i valori letti (righe 80, 81 e 82), vengono visualizzati mediante monitor seriale formattati come da codice. Come visto sin qui, mediante le librerie dedicate dell’Analog Device si riesce ad utilizzare rapidamente l’accelerometro per i propri progetti, tuttavia ne abbiamo vista un’implementazione mediante SPI in configurazione “Instant On Mode”.

A riguardo vi facciamo notare che chi volesse approfondire il funzionamento con il protocollo I²C-Bus in “Measurement Mode”, può fare riferimento all’esempio applicativo disponibile su Github.

Listato 1 – Funzione “Set_Impact _ Setection(void)”

17 void Set_Impact_Detection(void)
18 {
19 adxl372_Set_Op_mode(&adxl372, STAND_BY);
20 
21 adxl372_Set_Autosleep(&adxl372, false);
22 
23 adxl372_Set_BandWidth(&adxl372, BW_3200Hz);
24 
25 adxl372_Set_ODR(&adxl372, ODR_6400Hz);
26 
27 adxl372_Set_WakeUp_Rate(&adxl372, WUR_52ms);
28 
29 adxl372_Set_Act_Proc_Mode(&adxl372, LOOPED);
30 
31 /* Set Instant On threshold */
32 adxl372_Set_InstaOn_Thresh(&adxl372, ADXL_INSTAON_LOW_THRESH); //Low threshold 10-15 G
33 
34 /*Put fifo in Peak Detect and Stream Mode */
35 adxl372_Configure_FIFO(&adxl372, 512, STREAMED, XYZ_PEAK_FIFO);
36 
37 /* Set activity/inactivity threshold */
38 adxl372_Set_Activity_Threshold(&adxl372, ACT_VALUE, true, true);
39 adxl372_Set_Inactivity_Threshold(&adxl372, INACT_VALUE, true, true);
40 
41 /* Set activity/inactivity time settings */
42 adxl372_Set_Activity_Time(&adxl372, ACT_TIMER);
43 adxl372_Set_Inactivity_Time(&adxl372, INACT_TIMER);
44 
45 /* Set instant-on interrupts and activity interrupts */
46 adxl372_Set_Interrupts(&adxl372);
47 
48 /* Set filter settle time */
49 adxl372_Set_Filter_Settle(&adxl372, FILTER_SETTLE_16);
50 
51 /* Set operation mode to Instant-On */
52 adxl372_Set_Op_mode(&adxl372, INSTANT_ON);
53 }

Listato 2 – Funzioni setup e loop per la rilevazione impatti

55 void setup() {
56 Serial.begin(9600);
57 SPI.begin();
58 SPI.setDataMode(SPI_MODE0); //CPHA = CPOL = 0 MODE = 0
59 delay(1000);
60 
61 pinMode(CS_PIN, OUTPUT);
62 pinMode(ADXL_INT1_PIN, INPUT);
63 
64 adxl372_Get_DevID(&adxl372, &devId);
65 
66 Serial.print(“Device id: “);
67 Serial.println(devId, HEX);
68 
69 adxl372_Set_Op_mode(&adxl372, FULL_BW_MEASUREMENT);
70 Set_Impact_Detection();
71 }
72 
73 void loop() {
74 
75 if (digitalRead(ADXL_INT1_PIN)) {
76 delay(500);
77 adxl372_Get_Highest_Peak_Accel_data(&adxl372, &accel_data);
78 
79 /*Transform in G values*/
80 data_G.x = (float)accel_data.x * 100 / 1000;
81 data_G.y = (float)accel_data.y * 100 / 1000;
82 data_G.z = (float)accel_data.z * 100 / 1000;
83 
84 Serial.print(“X accel = “); Serial.print(data_G.x); Serial.println(“ G”);
85 Serial.print(“Y accel = “); Serial.print(data_G.y); Serial.println(“ G”);
86 Serial.print(“Z accel = “); Serial.print(data_G.z); Serial.println(“ G”);
87 Serial.println(“”);
88 
89 }

CONCLUSIONI

Arriviamo così al termine di questo articolo, dove abbiamo analizzato i dettagli di funzionamento dell’accelerometro integrato ADXL372 di Analog Devices, le sue caratteristiche e vi abbiamo esposto come sia facile e immediato realizzare dei progetti mediante la breakout board dedicata, qui descritta ed acquistabile già pronta.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu