Tecnologia del sensor de temperatura

Disseny del sensor de temperatura digital DS18B20 per a STM32

DS18B20 Kit de sonda d'acer inoxidable de filferro de detecció de temperatura

DS18B20 és un sensor de temperatura digital que utilitza un únic temps de bus per comunicar-se amb l'amfitrió. Només 1 Es necessita un cable per completar la lectura de les dades de temperatura;

El DS18B20 té un número de sèrie del producte de 64 bits integrat per a una identificació fàcil. Es poden connectar diversos sensors DS18B20 1 Cable, i mitjançant l'autenticació d'identitat de 64 bits, la informació de temperatura recollida de diferents sensors es pot llegir per separat.

DS18B20 Kit de sonda d'acer inoxidable de filferro de detecció de temperatura

DS18B20 Kit de sonda d'acer inoxidable de filferro de detecció de temperatura

Sonda del sensor de temperatura DS18B20 Kit de sobreemmotllament TPE

Sonda del sensor de temperatura DS18B20 Kit de sobreemmotllament TPE

1 cable sensor de temperatura DS18B20

1 cable sensor de temperatura DS18B20

Introducció a DS18B20
2.1 Característiques principals de DS18B20
1. Conversió i sortida de temperatura totalment digital.
2. Comunicació avançada de dades de bus únic.
3. Resolució de fins a 12 bits, amb una precisió de fins a ±0,5 graus centígrads.
4. El cicle de treball màxim amb una resolució de 12 bits és 750 mil·lisegons.
5. Es pot seleccionar el mode de treball paràsit.
6. El rang de temperatura de detecció és de -55 °C a +125 °C (-67 ° F ~ + 257 ° F).
7. EEPROM incorporada, funció d'alarma de límit de temperatura.
8. 64-Fotolitografia de bits rom, número de sèrie del producte integrat, convenient per a la connexió de diverses màquines.
9. Diverses formes d'embalatge, adaptar-se a diferents sistemes de maquinari.

Estructura del paquet de xips DS18B20

Estructura del paquet de xips DS18B20

2.2 Funció de pin DS18B20
Terra de tensió GND;
Bus de dades únic DQ;
Tensió d'alimentació VDD;
Pin buit NC;

Diagrama d'estructura de RAM i EEPROM del xip DS18B20

Diagrama d'estructura de RAM i EEPROM del xip DS18B20

2.3 Principi de funcionament i aplicació DS18B20
La detecció de temperatura DS18B20 i la sortida de dades digitals estan totalment integrades en un xip, de manera que té una capacitat anti-interferència més forta. El seu cicle de treball es pot dividir en dues parts, és a dir, detecció de temperatura i processament de dades.

18B20 té tres formes de recursos de memòria. Ho són: Memòria ROM de només lectura, s'utilitza per emmagatzemar el codi DS18B20ID; el primer 8 els bits són codi de sèrie d'una sola línia (El codi DS18B20 és 19H), el següent 48 els bits són el número de sèrie únic del xip; l'últim 8 els bits són el codi CRC (control de redundància) dels anteriors 56 bites. Les dades s'estableixen en producció i l'usuari no les pot canviar. DS18B20 té un total de 64 bits de ROM.

Registre de dades RAM, utilitzat per al càlcul intern i l'accés a les dades, Les dades es perden després d'una fallada de corrent, DS18B20 té un total de 9 bytes de RAM, cada byte és 8 bites. El primer i el segon bytes són la informació del valor de les dades després de la conversió de la temperatura; el tercer i quart bytes són la imatge mirall de l'EEPROM de l'usuari (s'utilitza habitualment per a l'emmagatzematge de valors d'alarma de temperatura). El seu valor s'actualitzarà quan es reiniciï l'alimentació. El cinquè byte és la imatge mirall de la tercera EEPROM de l'usuari. El 6è, 7th, i els 8è bytes són registres de recompte, que estan dissenyats per permetre als usuaris obtenir una resolució de temperatura més alta. També són unitats d'emmagatzematge temporal per a la conversió i el càlcul de la temperatura interna. El 9è byte és el codi CRC del primer 8 bytes. EEPROM és una memòria no volàtil que s'utilitza per emmagatzemar dades que s'han de desar durant molt de temps, Valors d'alarma de temperatura superior i inferior, i dades de verificació. DS18B20 té un total de 3 bits d'EEPROM, i hi ha imatges mirall a la memòria RAM per facilitar el funcionament de l'usuari.

El DS18B20 funciona en mode de resolució de 12 bits per defecte. Les dades de 12 bits obtingudes després de la conversió s'emmagatzemen en dues RAM de 8 bits del DS18B20 (els dos primers bytes). El primer 5 els bits en binari són bits de signe. Si la temperatura mesurada és més gran que 0, aquests 5 Els bits ho són 0. Només heu de multiplicar el valor mesurat per 0.0625 Per obtenir la temperatura real. Si la temperatura és inferior a 0, aquests 5 Els bits ho són 1. Cal invertir el valor mesurat, afegit per 1, i després es va multiplicar per 0.0625 Per obtenir la temperatura real. O utilitzeu l'operació de bits per extreure la temperatura: els decimals ocupen els inferiors 4 bites, i els bits superiors són bits enters (no es tenen en compte els nombres negatius).

2.4 Taula d'instruccions ROM del xip DS18B20
1. Llegir ROM [33H] (la paraula d'ordre hexadecimal està entre claudàtors).
Aquesta ordre permet que el controlador de bus llegeixi la ROM de 64 bits del DS18B20. Aquesta instrucció només es pot utilitzar quan només hi ha un DS18B20 al bus. Si hi ha més d'un connectat, Els conflictes de dades es produiran durant la comunicació.

2. atch ROM [55H]
Aquesta instrucció va seguida d'un número de sèrie de 64 bits emès pel controlador. Quan hi ha diversos DS18B20 a l'autobús, només pot respondre el xip amb el mateix número de sèrie que l'emès pel controlador, i els altres xips esperaran el proper restabliment. Aquesta instrucció és adequada per a connexió d'un sol xip i multixip.

3. Omet la ROM [CCH]
Aquesta instrucció fa que el xip no respongui al codi ROM. En el cas d'un únic autobús, aquesta instrucció es pot utilitzar per estalviar temps. Si aquesta instrucció s'utilitza quan hi ha diversos xips connectats, es produiran conflictes de dades, resultant en errors.

4. Cerca ROM [F0H]
Després d'inicialitzar el xip, la instrucció de cerca permet identificar la ROM de 64 bits de tots els dispositius mitjançant l'eliminació quan es connecten diversos xips al bus.

5. Cerca d'alarma [CADA]
En el cas de múltiples fitxes, la instrucció de cerca de xips d'alarma només respon als xips que compleixen la condició d'alarma de temperatura superior a TH o inferior a TL. Sempre que el xip no estigui apagat, l'estat d'alarma es mantindrà fins que es torni a mesurar la temperatura i no s'arribi a la condició d'alarma.

6. Escriu Scratchpad [4EH]
Aquesta és la instrucció per escriure dades a la memòria RAM. Els dos bytes de dades escrits posteriorment s'emmagatzemaran a l'adreça 2 (TH de RAM d'alarma) i adreça 3 (TL de RAM d'alarma). El procés d'escriptura es pot acabar mitjançant un senyal de reinici.

7. Llegir Scratchpad (llegir dades de la memòria RAM) [BEH]
Aquesta instrucció llegirà dades de la memòria RAM, a partir de l'adreça 0 i fins a l'adreça 9, completant la lectura de totes les dades de la RAM. El xip permet que el senyal de restabliment acabi el procés de lectura, és a dir, es poden ignorar els bytes innecessaris posteriors per reduir el temps de lectura.

8. Copia Scratchpad (copieu les dades de la RAM a l'EEPROM) [48H]
Aquesta instrucció emmagatzema les dades a la memòria RAM a l'EEPROM de manera que les dades no es perdin quan s'apaga. Com que el xip està ocupat amb el processament d'emmagatzematge EEPROM, quan el controlador envia una franja de temps de lectura, les sortides del bus “0”, i quan s'acabin els treballs d'emmagatzematge, sortirà el bus “1”.
En mode de treball paràsit, s'ha d'utilitzar un pull-up fort immediatament després d'emetre aquesta instrucció i mantenir-lo durant almenys 10 MS per mantenir el funcionament del xip.

9. Converteix T (conversió de temperatura) [44H]
Després de rebre aquesta instrucció, el xip realitzarà una conversió de temperatura i emmagatzemarà el valor de temperatura convertit a la 1a i 2a adreces de la RAM. Com que el xip està ocupat amb el processament de conversió de temperatura, quan el controlador envia una franja de temps de lectura, les sortides del bus “0”, i quan s'acabin els treballs d'emmagatzematge, sortirà el bus “1”. En mode de treball paràsit, s'ha d'utilitzar un pull-up fort immediatament després d'emetre aquesta instrucció i mantenir-lo durant almenys 500 MS per mantenir el funcionament del xip.

10. Recordeu EEPROM (Copieu el valor de l'alarma de l'EEPROM a la RAM) [B8H]
Aquesta instrucció copia el valor d'alarma a l'EEPROM al 3r i 4t bytes de la RAM. Com que el xip està ocupat amb el processament de còpies, quan el controlador envia una franja de temps de lectura, les sortides del bus “0”, i quan s'acabin els treballs d'emmagatzematge, les sortides del bus “1”. A més, this instruction will be automatically executed when the chip is powered on and reset. D'aquesta manera, the two alarm byte bits in RAM will always be the mirror image of the data in EEPROM.

11. Read Power Supply (Working Mode Switch) [B4H]
After this instruction is issued, a read time gap is issued, and the chip will return its power status word. “0” is the parasitic power state and “1” is the external power state.

2.5 DS18B20 Timing Diagram
2.5.1 DS18B20 Reset and Response Relationship Diagram
A reset must be performed before each communication. The reset time, waiting time, and response time should be strictly programmed according to the timing.
DS18B20 read and write time gap: DS18B20 data reading and writing is confirmed by the time gap processing bit and command word to exchange information.

DS18B20 reset and response relationship diagram

DS18B20 reset and response relationship diagram

2.5.2 Write data 0 i dades 1 a DS18B20
En els primers 15uS de la bretxa de temps de dades d'escriptura, el controlador ha de baixar l'autobús, i llavors serà el temps de mostreig del xip per a les dades del bus. El temps de mostreig és de 15 ~ 60 uS. Si el controlador tira el bus alt durant el temps de mostreig, vol dir escriure “1”, i si el controlador baixa el bus, vol dir escriure “0”.
Cada bit de transmissió hauria de tenir un bit d'inici de baix nivell d'almenys 15uS, i les dades posteriors “0” o “1” s'hauria de completar en 45uS.
El temps de transmissió de tot el bit s'ha de mantenir a 60 ~ 120uS, en cas contrari no es pot garantir la comunicació normal.
Nota: DS18B20 llegeix i escriu dades del bit baix.

Write data 0 i dades 1 a DS18B20

Write data 0 i dades 1 a DS18B20

2.5.3 Lectura de dades 0 i dades 1 de DS18B20
El temps de mostreig del control durant el temps de lectura hauria de ser més precís. Durant el temps de lectura, l'amfitrió també ha de generar un nivell baix d'almenys 1uS per indicar l'inici del temps de lectura. Aleshores, en 15 uS després que l'autobús s'alliberi, el DS18B20 enviarà el bit de dades intern. En aquest moment, si el control troba que l'autobús està alt, vol dir llegir “1”, i si l'autobús és baix, vol dir llegir dades “0”. Abans de llegir cada bit, el controlador afegeix un senyal d'inici.

Llegir dades 0 i dades 1 de DS18B20

Llegir dades 0 i dades 1 de DS18B20

Nota: El bit de dades s'ha de llegir en un termini de 15 uS des de l'inici de la bretxa de lectura per garantir una comunicació correcta.

Durant la comunicació, 8 trossos de “0” o “1” s'utilitzen com a byte, i la lectura o escriptura del byte comença des del bit baix.

2.5.4 Ordre de lectura de la temperatura una vegada (només un DS18B20 a l'autobús)

1. Enviar senyal de restabliment
2. Detectar senyal de resposta
3. Envia 0xCC
4. Envia 0x44
5. Enviar senyal de restabliment
6. Detectar senyal de resposta
7. Escriu 0xcc
8. Escriu 0xbe
9. Bucle 8 vegades per llegir el byte baix de temperatura
10. Bucle 8 vegades per llegir el byte alt de temperatura
11. Sintetitza i processa dades de temperatura de 16 bits

3. Codi del conductor

3.1 DS18B20.c
#incloure “ds18b20.h”
/*
Funció: Inicialització DS18B20
Connexió de maquinari: PB15
*/
void DS18B20_Init(buit)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Pull-up
}

/*
Funció: Comproveu si el dispositiu DS18B20 existeix
Valor de retorn: 1 significa que el dispositiu no existeix 0 significa que el dispositiu és normal
*/
u8 DS18B20_CheckDevice(buit) //Conté pols de reinici, pols de detecció
{
DS18B20_OUTPUT_MODE();//Inicialitzar al mode de sortida
DS18B20_OUT=0; //Genera pols de reinici
DelayUs(750); //Genera un nivell baix de 750 us
DS18B20_OUT=1; //Allibera l'autobús
DelayUs(15); //Espereu la resposta de DS18B20
si(DS18B20_CleckAck())//Detectar pols d'existència
{
tornar 1;
}
tornar 0;
}

/*
Funció: Detectar pols d'existència del dispositiu DS18B20
Valor de retorn: 1 indica error 0 indica normalitat
*/
u8 DS18B20_CleckAck(buit)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicialitzar al mode d'entrada
mentre(DS18B20_IN&&cnt<200) //Espereu el pols d'existència de la resposta DS18B20
{
DelayUs(1);
cnt++;
}
si(cnt>=200)tornar 1; //error

cnt=0;
mentre((!DS18B20_IN)&&cnt<240) //espereu que DS18B20 alliberi l'autobús
{
DelayUs(1);
cnt++;
}
si(cnt>=240)tornar 1; //error
tornar 0;
}

/*
Funció: Escriu un byte
Primer aprèn a escriure una mica.
*/
void DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicialitzar al mode de sortida
per(i=0;i<8;i++)
{
DS18B20_OUT=0; //Generar bretxa de temps d'escriptura (començar a escriure)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Envia bit de dades real
DelayUs(60); //Espereu que finalitzi l'escriptura
DS18B20_OUT=1; //Deixeu anar l'autobús i prepareu-vos per a la següent transmissió
cmd>>=1; //Continueu enviant el següent bit de dades
}
}

/*
Funció: Llegeix un byte
Primer aprèn a llegir una mica.
*/
u8 DS18B20_ReadByte(buit)
{
u8 i,dades=0;
per(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //Inicialitzar al mode de sortida
DS18B20_OUT=0; //Generar interval de temps de lectura (inici de lectura)
DelayUs(2);
DS18B20_OUT=1; //Allibera l'autobús
DS18B20_INPUT_MODE(); //Inicialitzar al mode d'entrada
DelayUs(8); //Espereu la sortida de dades DS18B20
dades>>=1; //Ompliu el bit alt amb 0, per defecte és 0
si(DS18B20_IN) dades|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Allibera l'autobús, espereu a llegir el següent bit de dades
}
retornar dades;
}

/*
Funció: Llegiu les dades de temperatura del DS18B20 una vegada
Valor de retorn: les dades de temperatura llegides
Situació considerada: Només hi ha un DS18B20 connectat al bus
*/
u16 DS18B20_ReadTemp(buit)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Envia pols de restabliment, detectar el pols
DS18B20_WriteByte(0xCC); //Omet la detecció de la seqüència ROM
DS18B20_WriteByte(0x44); //Inicieu una conversió de temperatura

//Espereu que finalitzi la conversió de la temperatura
mentre(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Envia pols de restabliment, detectar el pols
DS18B20_WriteByte(0xCC); //Omet la detecció de la seqüència ROM
DS18B20_WriteByte(0xBE); //Llegir la temperatura

temp_L=DS18B20_ReadByte(); //Llegir dades de baixa temperatura
temp_H=DS18B20_ReadByte(); //Llegir dades d'alta temperatura
temp=temp_L|(temp_H<<8); //Temperatura sintetitzada
temperatura de retorn;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#defineix DS18B20_H
#incloure “stm32f10x.h”
#incloure “sys.h”
#incloure “retard.h”
#incloure “ds18b20.h”
#incloure “usart.h”

/*Interfície del paquet*/

//Inicialitzeu el DS18B20 al mode d'entrada
#defineix DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x80000000;}

//Inicialitzeu el DS18B20 al mode de sortida
#defineix DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x30000000;}

//Sortida del port d'E/S DS18B20
#definir DS18B20_OUT PBout(15)

//Entrada del port d'E/S DS18B20
#definir DS18B20_IN PBin(15)

//Declaració de funció
u8 DS18B20_CleckAck(buit);
u8 DS18B20_CheckDevice(buit);
void DS18B20_Init(buit);
u16 DS18B20_ReadTemp(buit);
u8 DS18B20_ReadByte(buit);
void DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Funció de retard

/*
Funció: Retard en nosaltres
*/
anul·la DelayUs(int nosaltres)
{
#ifdef _SYSTICK_IRQ_
int i,j;
per(i=0;iVAL=0; //Valor del comptador CNT
SysTick->CÀRREGA=9*us; //9 significa 1us
SysTick->CTRL|=1<<0; //Inicieu el temporitzador
fer
{
tmp=SysTick->CTRL; //Estat de lectura
}mentre((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //Valor del comptador CNT
SysTick->CTRL&=~(1<<0); //Apagueu el temporitzador
#endif
};i++)>

3.4 main.c Truqueu al DS18B20 per llegir la temperatura i imprimir-la al port sèrie

#incloure “stm32f10x.h”

#incloure “ds18b20.h”

u8 DS18B20_ROM[8]; //Emmagatzema el codi ROM de 64 bits de DS18B20

int principal(buit)
{
u16 temp;
USARTx_Calor(USART1,72,115200);//Inicialització del port sèrie 1
DS18B20_Calor(); //Inicialització DS18B20

/*1. Llegiu el codi ROM de 64 bits de DS18B20*/
//Envia pols de restabliment, detectar pols d'existència
mentre(DS18B20_CheckDevice())
{
imprimirf(“El dispositiu DS18B20 no existeix!\n”);
RetardSra(500);
}
//Envieu l'ordre per llegir el codi ROM de 64 bits
DS18B20_WriteByte(0x33);

//Llegir en bucle codi ROM de 64 bits
per(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
imprimirf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}

mentre(1)
{
/*2. Funcioneu simultàniament tots els DS18B20 a l'autobús per començar a convertir la temperatura*/
DS18B20_CheckDevice(); //Envia pols de restabliment, detectar el pols
DS18B20_WriteByte(0xCC); //Omet la detecció de la seqüència ROM
DS18B20_WriteByte(0x44); //Inicieu una conversió de temperatura (deixeu que tots els DS18B20 del bus converteixin la temperatura)
RetardSra(500); //Espereu que es completin totes les conversions de temperatura del DS18B20 a la línia

/*3. Lectura única dirigida de la temperatura de cada DS18B20*/
DS18B20_CheckDevice(); //Envia pols de restabliment, detectar el pols
DS18B20_WriteByte(0x55); //Envia l'ordre perquè coincideixi amb la ROM
per(i=0;i<8;i++) //Enviar codi de 64 bits
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Llegir la temperatura
temp=DS18B20_ReadByte(); //Llegiu dades de temperatura de baix nivell
temp|=DS18B20_ReadByte()<<8; //Llegeix les dades de temperatura d'ordre elevat
imprimirf(“temp1=%d.%d\n”,temp>>4,temp&0xF);
imprimirf(“temp2=%f\n”,temperatura*0,0625);

RetardSra(500);
}
}