La diffusione dell’ Internet delle cose o Internet of things (IOT) ha reso ancora più importante la reperibilità di sensori accurati, economici ed immuni al rumore, requisito particolarmente importante in ambito automotive. Tra i sensori più comuni ed utilizzati, quello di temperatura fa la parte del leone; da svariate decine di anni sono disponibili nel mercato della componentistica elettronica, un gran numero di semiconduttori che ci garantiscono un’accuratezza ed una semplicità d’uso elevata. Vediamo oggi un prodotto relativamente recente della Texas Instruments, che, oltre ad una buona precisione, unisce una buona immunità al rumore ad un buon prezzo: LMT01, disponibile in formato WSON e TO92, ha un’accuratezza nella misura di temperatura nel range -50°C 150°C, di +/- 0.7 °C, che si riducono a +/-0.5°C nel range -20°C 90°C (Fig.1).

La peculiarità di questo trasduttore è quella di fornire un’uscita digitale consistente in un treno di impulsi di corrente che tipicamente raggiungono i 34 uA per il livello basso e i 125uA per il livello alto, convertiti tramite una resistenza di 10Kohm, in un treno di impulsi di tensione, compresi tra 340mV ed 1,25V facilmente elevabili in segnali logici standard, attraverso un comparatore (generalmente si utilizza quello interno al microcontrollore stesso), oppure tramite un transistor esterno utilizzato per convertire il segnale in livelli logici correttamente interpretabili dal micro e processati tramite un GPIO (General Pourpouse Input Output) dello stesso.

La temperatura è facilmente determinata attraverso il conteggio degli impulsi da parte dell’MCU a cui il sensore è collegato.

Internamente un LMT01 è costituito da tutto quello che serve per effettuare la misura di temperatura, convertirla in digitale e trasmetterla all’esterno tramite un treno di impulsi (Fig.2). Un circuito analogico misura la temperatura, che viene convertita in digitale tramite un ADC sigma-delta, la cui uscita viene poi processata da un circuito che lo trasforma in un treno d’impulsi digitale che viene infine convertito in un treno d’impulsi di corrente.

Figura 2

La tensione applicata ai pin dell’integrato, viene regolata da un regolatore di tensione interno al chip, in modo da fornire il valore di tensione corretto, necessario al funzionamento delle varie sezioni dello stesso.

Quando viene fornita tensione al sensore, il valore di corrente viene mantenuto al livello più basso, cioè 34uA per al massimo 54ms, mentre viene acquisita la temperatura; una volta acquisita la misura, inizia il treno di impulsi.

Quando l’integrato è alimentato, la misurazione viene effettuata continuamente, approssimativamente ogni 104ms massimo (Fig. 3).

Figura 3

L’uscita del LMT01 è tale da produrre un minimo di 1 impulso (che corrisponde ad una temperatura di circa -50°C) ed un massimo teorico di 4095 impulsi (4096 impulsi corrispondono ad oltre 200°C, valore teorico in quanto il sensore non può effettuare misure superiori a 150°C, pena il danneggiamento irreparabile); ogni impulso “pesa” 0,0625°C (256°C/4096=0,0625°C). La funzione di trasferimento appena vista rappresenta una buona approssimazione del valore di temperatura ed è lineare, utilizzando appunto un’equazione del primo ordine; per ottenere risultati ancora più precisi si può utilizzare un secondo metodo, facente uso dell’interpolazione dei valori presenti in una “look-up table” presente nel datasheet.

La demoboard LMT01EVM

Per testare il componente, la Texas Instruments ha realizzato una evaluation board (LMT01EVM) per la quale ha sviluppato anche una GUI basata su LabView, che permette di rappresentare graficamente in tempo reale, la temperatura misurata.

[boris]

Una volta scaricato, bisogna estrarre il contenuto in una cartella e poi lanciare “setup.exe”; si seleziona la destinazione dell’installazione e si conferma l’accettazione delle licenze.

A questo punto verrà visualizzata la schermata visibile in Fig. 4: è importante lasciare selezionato “Disable Windows Fast Startup” per assicurare il corretto funzionamento dell’interfaccia.

Figura 4

Una volta conclusa l’installazione, possiamo lanciare l’esecuzione dell’interfaccia (Fig. 5). Una volta selezionata la corretta porta COM (si può verificare tramite il pannello di controllo quale porta seriale è stata dedicata alla demoboard) è finalmente possibile visualizzare la temperatura acquisita (Fig. 6).

Figura 5

Figura 6

Abbiamo visto che la misura consiste nel conteggio degli impulsi in uscita del nostro LMT01 quindi è molto facile utilizzare un microcontrollore per il conteggio e convertire poi il risultato in °C, tramite la semplice formula T[°C]= (PC/4096*256)-50 dove PC è il numero di impulsi, equivalente a temperature = 0.0625 x pulseCount – 50, già vista in precedenza.

Utilizziamo il sensore LMT01 con Arduino

Vediamo quindi com’è possibile realizzare un semplice termometro con Arduino. Guardando lo schema a blocchi dell’ATmega 328P (Fig. 7), vediamo che all’interno del microcontrollore, oltre ai vari moduli come EEPROM, Flash, SRAM, ADC, timer, etc. è presente un comparatore analogico (Analog Comp.) che può essere utilizzato per leggere il nostro LMT01 in maniera semplice e senza ricorrere a componenti esterni oltre al sensore stesso e ad una resistenza.

Figura 7

Per la configurazione del comparatore, il metodo più diretto è quello di ricorrere alla configurazione dei registri dell’ATmega 328P e quindi dell’Arduino. Lavorare con i registri non è affatto una cosa impossibile, anzi, permette un livello di configurazione di basso livello veramente notevole ma comporta l’inconveniente di essere, almeno apparentemente, meno diretto e può sembrare a volte macchinoso. Per semplificarci la vita ci vengono incontro le librerie che, specialmente nel caso di Arduino, tendono a “nasconderci” la complessità del hardware sottostante.

Per permettere a tutti di sperimentare facilmente con questo interessantissimo sensore della TI, vogliamo proporvi l’utilizzo di un’ottima libreria, scritta da un italiano, Leonardo Miliani (www.leonardomiliani.com) che sicuramente molti di voi conosceranno; la libreria in oggetto è la AnalogComp scaricabile dal sito ufficiale di Leonardo (www.leonardomiliani.com/?p=630).

Passiamo ora al circuito vero e proprio: come dicevamo, utilizzando il comparatore interno di Arduino, il layout del sistema è veramente semplice (Fig. 8): si collega il terminale VN del sensore al pin D7 e si collega sempre a VN, un resistore da 18K verso massa; VP si collega a 5V.

Figura 8

Veniamo ora all’utilizzo della libreria di Leonardo Miliani, all’interno dello sketch di test: la prima riga di codice per il suo utilizzo sarà ovviamente #include “analogComp.h”, poi dovremo impostare i multiplexer interni per configurare gli ingressi AIN+ e AIN- del comparatore, operazione effettuata tramite l’istruzione analogComparator.setOn(AIN+, AIN-). AIN+ è l’ingresso non invertente del comparatore e può essere connesso ad AIN0 oppure ad INTERNAL_REFERENCE, la tensione di riferimento interna di 1,1V, mentre AIN-, ingresso invertente, può essere connesso ad AIN1 oppure ad uno a scelta tra gli ingressi analogici disponibili (A0..Ax). Noi vogliamo comparare la tensione del pin VN del LMT01 con il riferimento interno di 1,1V, quindi utilizzeremo la seguente configurazione analogComparator.setOn(INTERNAL_REFERENCE, AIN1) in cui VN è connessa ad AIN1, corrispondente nell’arduino uno, al pin digitale D7 internamente multiplexato per funzionare connesso al comparatore, come abbiamo visto in precedenza.

A questo punto vogliamo attivare un interrupt che incrementi il conteggio ogni volta che il comparatore rileva un impulso sul pin VN, cioè ogni volta che la tensione su AIN+ diventi minore di quella presente su AIN-. Per fare questo utilizziamo un’altra funzionalità della libreria e cioè l’abilitazione degli interrupt che nel nostro caso avrà la forma seguente: analogComparator.enableInterrupt(impulsi,FALLING). Vediamo un attimo, dal punto di vista elettrico, cosa succede. Il sensore genera impulsi di corrente di 34uA per il livello basso, che sono convertiti dalla nostra resistenza da 18Kohm a circa 0.6V e 125uA per il livello alto, corrispondenti ad una tensione di 2.25V, maggiori della tensione di soglia del comparatore, pari ad 1.1V e comunque all’interno della specifica che richiede una tensione minima di 2V tra VP e VN (Fig. 9). E’ stato scelto di visualizzare la misura tramite la seriale dell’arduino (Fig. 10), nulla vieta di utilizzare la libreria per i display LCD, molto semplice da usare e realizzare un semplice, economico e preciso termometro stand-alone.

Figura 9

Figura 10

Conclusioni

Abbiamo visto come è semplice implementare il sensore di temperatura LMT01 su Arduino, ma possiamo fare lo stesso anche su altre piattaforme come MBED oppure su altri tipi di microcontrollore. Anche la portabilità del codice può avvenire in maniera molto semplice, una volta capito il principio di funzionamento. Questo sensore può essere una valida alternativa ai classici sensori che utilizziamo per effettuare termometri compatti, precisi ed economici, soprattutto quando non possiamo collocare tale trasduttore vicino al micro stesso ma dobbiamo effettuare le misure in un ambiente piuttosto rumoroso e con lunghezze dei cavi relativamente lunghe (fino a 2m).

[/boris]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu