SENSORE DI TEMPERATURA DS18B20

Tutorial sul Sensore di Temperatura Digitale DS18B20 dove viene Illustrato il Funzionamento, le Caratteristiche e il Metodo di Comunicazione…

 

 

 
 



 

INTRO

L’integrato DS18B20 è un sensore digitale di temperatura che permette di effettuare una misura in gradi Celsius con una definizione che va da 9bit ad un massimo di 12bit. Inoltre dispone di un allarme interno con la possibilità di fissare la temperatura di allarme su una memoria non volatile (ovvero che non si cancella allo spegnimento del dispositivo) e settare se avere l’allarme per temperature maggiori o minori di quella fissata.

Il sensore al suo interno dispone sostanzialmente dell’elemento sensibile alla temperatura, un ADC e un sistema per la trasmissione con protocollo One-Wire. Lo schema a blocchi semplificato è il seguente:

La memoria a 64 bit serve per memorizzare il codice dell’indirizzo del sensore, visto che si possono collegare più sensori dello stesso tipo sullo stesso canale One-Wire di comunicazione. Con un unico microcontrollore è quindi possibile controllare più sensori.

È perfetto quindi per reti di sensori o controllo di temperature in varie zone. Essendo l’uscita del sensore digitale, si hanno pochi problemi di rumore e inoltre, con la resistenza di pull-up come in figura, si può avere una distanza di circa 100m tra sensore e microcontrollore.

Il sensore è disponibile con package trough hole TO-92 o a montaggio superficiale e la configurazione dei pin è quella mostrata nella figura sovrastante.

 





 
CARATTERISTICHE DEL SENSORE

Le caratteristiche salienti del sensore sono le seguenti:

  • Range di temperatura -55°C fino a 125°C
  • Precisione di ±0.5°C da -10°C fino a 85°C
  • Precisione di 2°C fuori dal range sopracitato
  • Tensione di alimentazione da 3V fino a 5.5V
  • Corrente assorbita 1.5mA, 1mA in stand-by
  • Massima corrente pin comunicazione 4mA
  • Tempo per la conversione 94ms (9bit) e 750ms per 12bit

Riesco quindi a misurare temperature negative e positive tra -55°C e 125°C con una precisione di 2°C tranne nel range -10°C-85°C dove scende ad un valore standard per i sensori di temperatura ovvero 0.5°C. La tensione di alimentazione va da 3V fino un massimo di 5.5 con corrente di 1.5mA durante la lettura e 1mA in stand-by.

La differenza tra 9, 10, 11 e 12bit sta nella minima variazione di temperatura rilevabile ovvero rispettivamente 0.5°C, 0.25°C, 0.125°C e 0.0625°C oltre che nel maggiore tempo di conversione al crescere del numero di bit.

La porta One-Wire può assorbire una corrente di 4mA visto che è in configurazione open drain:

La resistenza di pull-up da 4.7K fa si che il valore di tensione, quando si vuole avere un uno logico, sia alto visto che il mosfet è spento e quindi non scorre corrente. Considerando che il mosfet ha una resistenza di 100 Ohm quando acceso e che il BUS 1-Wire avrà una certa resistenza, quando si ha uno zero logico, si avrà un valore 0 logico di 100mV invece di 0V con alimentazione a 5V.

 

CONFIGURAZIONE E COMUNICAZIONE DEL MODULO

Il modulo prima di iniziare le fasi di conversione va inizializzato. Inoltre il modulo ha un modo particolare di rappresentare la temperatura, anche se molto semplice ed intuitivo. Iniziamo ad analizzare come vengono rappresentati i dati:

Si ha un byte meno significativo e un byte più significativo, nel byte meno significativo vi sono i numeri con la virgola ovvero 0.5C, 0.25°C, 0.125°C e 0.0625°C, i bit da 4 a 10 sono normali bit in codice binari e i bit da 12 a 15 rappresentano il segno ovvero se questi bit sono a 1 la temperatura è negativa, altrimenti positiva, come si può vedere dall’esempio.

Il registro di configurazione e i comandi sono i seguenti:

Il primo comando serve per leggere la temperatura e se si invia questo comando il sensore trasmette al master il valore. Gli altri comandi servono a scrivere o leggere i registri di configurazione, scrivendo il valore del livello alto di soglia, il livello basso di soglia (espressi entrambi in binario) e il byte di configurazione.

Per avviare la comunicazione il TX deve inviare un livello basso per almeno 480us e il sensore, se tutto funziona risponderà con un livello basso dopo circa 40us dalla fine del livello basso del master, secondo il diagramma a seguire:

Per la codifica dei bit in trasmissione e ricezione si usano dei slot temporali di durata di almeno 60us. Ogni slot temporale deve essere separato da un periodo a livello alto di almeno 1us. Entrambi gli slot temporali iniziano con un periodo a livello basso di durata almeno 1us o minore di 15us. Poi se dopo 15uS lo stato basso permane sto scrivendo o leggendo uno 0 logico, altrimenti se dopo l’impulso a livello basso il segnale ritorna a livello alto sto leggendo o scrivendo un 1 logico.

 

OPERAZIONE DI ESEMPIO

Come indicato dal datasheet bisogna eseguire i seguenti comandi per inizializzare e richiedere la prima comunicazione con il modulo DS18B20. In particolare i passi che vedremo servono nel caso di un unico sensore e TX indica le operazioni fatte dal master mentre RX indica le risposte del dispositivo slave ovvero il nostro sensore. Si avrà:

  1. TX: pone il bus a livello basso per 500us
  2. RX: risponde ponendo a livello basso il bus per 60-240us
  3. TX: invia il comando CCh per dire che non trasmette indirizzo
  4. TX: invia il comando 4Eh per dire che vuole configurare il sensore
  5. TX: invia i 3 byte con le due soglie e il registro di configurazione dei bit del convertitore
  6. TX: pone il bus a livello basso per 500us
  7. RX: risponde ponendo a livello basso il bus per 60-240us
  8. TX: invia il comando CCh per dire che non trasmette indirizzo
  9. TX: invia il comando BEh per dire che vuole leggere la memoria
  10. RX: invia 9 byte con il CRC (ovvero bit di controllo) e il dato di temperatura

Dopo questi primi passi bisogna solo leggere il dato con i seguenti comandi:

  1. TX: pone il bus a livello basso per 500us
  2. RX: risponde ponendo a livello basso il bus per 60-240us
  3. TX: invia il comando CCh per dire che non trasmette indirizzo
  4. TX: invia il comando BEh per dire che vuole leggere la memoria
  5. RX: invia 9 byte con il CRC (ovvero bit di controllo) e il dato di temperatura



 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

2 pensieri su “SENSORE DI TEMPERATURA DS18B20

Lascia un commento

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