Technológia snímača teploty

Návrh digitálneho snímača teploty DS18B20 pre STM32

Súprava sondy DS18B20 drôtu na snímanie teploty z nehrdzavejúcej ocele

DS18B20 je digitálny teplotný senzor, ktorý využíva časovanie jednej zbernice na komunikáciu s hostiteľom. Iba 1 Na dokončenie odčítania údajov o teplote je potrebný drôt;

DS18B20 má zabudované 64-bitové sériové číslo produktu pre jednoduchú identifikáciu. Je možné pripojiť viacero snímačov DS18B20 1 Drôt, a prostredníctvom 64-bitovej autentifikácie identity, informácie o teplote zhromaždené z rôznych snímačov možno čítať samostatne.

Súprava sondy DS18B20 drôtu na snímanie teploty z nehrdzavejúcej ocele

Súprava sondy DS18B20 drôtu na snímanie teploty z nehrdzavejúcej ocele

DS18B20 sonda teplotného snímača TPE Overmolding kit

DS18B20 sonda teplotného snímača TPE Overmolding kit

1 drôtový snímač teploty DS18B20

1 drôtový snímač teploty DS18B20

Úvod do DS18B20
2.1 Hlavné vlastnosti DS18B20
1. Plne digitálny prevod teploty a výstup.
2. Pokročilá dátová komunikácia s jednou zbernicou.
3. Až 12-bitové rozlíšenie, s presnosťou až ±0,5 stupňa Celzia.
4. Maximálny pracovný cyklus pri 12-bitovom rozlíšení je 750 milisekúnd.
5. Je možné zvoliť parazitný pracovný režim.
6. Teplotný rozsah detekcie je –55°C ~+125°C (–67°F ~+257°F).
7. Vstavaná EEPROM, funkcia alarmu teplotného limitu.
8. 64-bitová fotolitografia ROM, vstavané sériové číslo produktu, vhodné pre pripojenie viacerých strojov.
9. Rôzne formy balenia, prispôsobiť rôznym hardvérovým systémom.

Štruktúra balíka čipu DS18B20

Štruktúra balíka čipu DS18B20

2.2 Funkcia pinu DS18B20
Zem napätia GND;
Jednotná dátová zbernica DQ;
VDD napájacie napätie;
NC prázdny kolík;

Schéma štruktúry čipu DS18B20 RAM a EEPROM

Schéma štruktúry čipu DS18B20 RAM a EEPROM

2.3 Princíp činnosti a aplikácia DS18B20
Detekcia teploty DS18B20 a digitálny výstup dát sú plne integrované na jednom čipe, takže má silnejšiu schopnosť proti rušeniu. Jeho jeden pracovný cyklus možno rozdeliť na dve časti, menovite zisťovanie teploty a spracovanie údajov.

18B20 má tri formy pamäťových zdrojov. sú: ROM pamäť iba na čítanie, slúži na uloženie kódu DS18B20ID; prvý 8 bity sú jednoriadkový sériový kód (Kód DS18B20 je 19H), nasledujúce 48 bity sú jedinečné sériové číslo čipu; posledný 8 bity sú CRC kód (kontrola nadbytočnosti) z vyššie uvedeného 56 bitov. Údaje sú nastavené pri výrobe a používateľ ich nemôže zmeniť. DS18B20 má celkom 64 bitov ROM.

dátový register RAM, slúži na interný výpočet a prístup k údajom, údaje sa stratia po výpadku napájania, DS18B20 má celkom 9 bajtov RAM, každý bajt je 8 bitov. Prvý a druhý bajt sú informácie o hodnote údajov po konverzii teploty; the third and fourth bytes are the mirror image of the user’s EEPROM (commonly used for temperature alarm value storage). Its value will be refreshed when the power is reset. The fifth byte is the mirror image of the user’s third EEPROM. The 6th, 7th, and 8th bytes are count registers, which are designed to allow users to obtain higher temperature resolution. They are also temporary storage units for internal temperature conversion and calculation. The 9th byte is the CRC code of the first 8 bajtov. EEPROM is a non-volatile memory used to store data that needs to be saved for a long time, upper and lower temperature alarm values, and verification data. DS18B20 má celkom 3 bits of EEPROM, and there are mirror images in RAM to facilitate user operation.

DS18B20 works in 12-bit resolution mode by default. 12-bitové dáta získané po konverzii sú uložené v dvoch 8-bitových RAM DS18B20 (prvé dva bajty). Prvý 5 binárne bity sú znamienkové bity. Ak je nameraná teplota väčšia ako 0, tieto 5 bity sú 0. Nameranú hodnotu stačí vynásobiť 0.0625 aby ste získali skutočnú teplotu. Ak je teplota nižšia ako 0, tieto 5 bity sú 1. Nameranú hodnotu je potrebné prevrátiť, pridal 1, a potom sa vynásobí 0.0625 aby ste získali skutočnú teplotu. Alebo použite bitovú operáciu na extrakciu teploty: desatinné miesta zaberajú nižšie 4 bitov, a horné bity sú celočíselné bity (záporné čísla sa neberú do úvahy).

2.4 Tabuľka inštrukcií ROM čipu DS18B20
1. Prečítajte si ROM [33H] (hexadecimálne príkazové slovo je v hranatých zátvorkách).
Tento príkaz umožňuje riadiacej jednotke zbernice čítať 64-bitovú ROM DS18B20. Túto inštrukciu je možné použiť len vtedy, keď je na zbernici iba jeden DS18B20. Ak je pripojených viac ako jeden, počas komunikácie dôjde ku konfliktom údajov.

2. pripojiť ROM [55H]
Po tejto inštrukcii nasleduje 64-bitové sériové číslo vydané kontrolérom. Keď je na zbernici viacero DS18B20, reagovať môže len čip s rovnakým sériovým číslom, aké vydal kontrolór, a ostatné čipy počkajú na ďalší reset. Tento návod je vhodný pre jednočipové a viacčipové pripojenie.

3. Preskočiť ROM [CCH]
Táto inštrukcia spôsobí, že čip nebude reagovať na kód ROM. V prípade jedného autobusu, tento pokyn možno použiť na úsporu času. Ak sa táto inštrukcia použije, keď je pripojených viacero čipov, dôjde ku konfliktom údajov, čo má za následok chyby.

4. Vyhľadajte ROM [F0H]
Po inicializácii čipu, vyhľadávacia inštrukcia umožňuje 64-bitovú ROM všetkých zariadení, ktoré majú byť identifikované odstránením, keď je k zbernici pripojených viacero čipov.

5. Alarm Search [KAŽDÝ]
V prípade viacerých čipov, inštrukcia na vyhľadávanie čipu alarmu reaguje len na čipy, ktoré spĺňajú podmienku alarmu teploty vyššej ako TH alebo nižšej ako TL. Pokiaľ nie je čip vypnutý, stav alarmu bude zachovaný, kým sa teplota znova nezmeria a kým sa nedosiahne stav alarmu.

6. Napíšte Scratchpad [4EH]
Toto je pokyn na zápis údajov do pamäte RAM. Dva bajty následne zapísaných údajov budú uložené na adrese 2 (TH pamäte RAM) a adresu 3 (TL alarmovej pamäte RAM). Proces zápisu môže byť ukončený signálom reset.

7. Prečítajte si Zápisník (čítať dáta z RAM) [BEH]
Táto inštrukcia načíta údaje z pamäte RAM, počnúc od adresy 0 a až na adresu 9, dokončenie čítania všetkých údajov RAM. Čip umožňuje resetovacím signálom ukončiť proces čítania, to je, následné nepotrebné bajty možno ignorovať, aby sa skrátil čas čítania.

8. Kopírovať aplikáciu Scratchpad (skopírujte dáta RAM do EEPROM) [48H]
Táto inštrukcia ukladá dáta v RAM do EEPROM, takže dáta sa nestratia pri vypnutí napájania. Pretože čip je zaneprázdnený spracovaním pamäte EEPROM, keď ovládač odošle časový úsek čítania, výstupy zbernice “0”, a keď sú skladovacie práce dokončené, autobus vystúpi “1”.
V parazitnom pracovnom režime, okamžite po vydaní tohto pokynu sa musí použiť silné vytiahnutie a musí sa udržiavať najmenej 10 MS, aby sa zachovala činnosť čipu.

9. Previesť T (teplotná premena) [44H]
Po obdržaní tohto pokynu, čip vykoná prevod teploty a prevedenú hodnotu teploty uloží na 1. a 2. adresu RAM. Pretože čip je zaneprázdnený spracovaním konverzie teploty, keď ovládač odošle časový úsek čítania, výstupy zbernice “0”, a keď sú skladovacie práce dokončené, autobus vystúpi “1”. V parazitnom pracovnom režime, okamžite po vydaní tohto pokynu sa musí použiť silné vytiahnutie a musí sa udržiavať najmenej 500 MS, aby sa zachovala činnosť čipu.

10. Vyvolajte EEPROM (Skopírujte hodnotu alarmu z EEPROM do RAM) [B8H]
Táto inštrukcia skopíruje hodnotu alarmu v EEPROM do 3. a 4. bajtu v RAM. Keďže čip je zaneprázdnený spracovaním kopírovania, keď ovládač odošle časový úsek čítania, výstupy zbernice “0”, a keď sú skladovacie práce dokončené, výstupy zbernice “1”. Navyše, táto inštrukcia sa vykoná automaticky, keď sa čip zapne a resetuje. Týmto spôsobom, dva alarmové bajtové bity v RAM budú vždy zrkadlovým obrazom údajov v EEPROM.

11. Prečítajte si napájanie (Prepínač pracovného režimu) [B4H]
Po vydaní tohto pokynu, zobrazí sa časový interval čítania, a čip vráti svoje slovo stavu napájania. “0” je parazitický mocenský štát a “1” je stav externého napájania.

2.5 Schéma časovania DS18B20
2.5.1 DS18B20 Reset a diagram vzťahu odozvy
Pred každou komunikáciou je potrebné vykonať reset. Čas resetovania, čakacia doba, a čas odozvy by mal byť presne naprogramovaný podľa načasovania.
DS18B20 časová medzera čítania a zápisu: Čítanie a zápis dát DS18B20 je potvrdené bitom spracovania časovej medzery a príkazovým slovom na výmenu informácií.

Diagram vzťahu resetovania a odozvy DS18B20

Diagram vzťahu resetovania a odozvy DS18B20

2.5.2 Zapisujte údaje 0 a údaje 1 na DS18B20
V prvých 15 uS časovej medzery zápisu dát, zbernicu je potrebné stiahnuť ovládačom, a potom to bude čas vzorkovania čipu pre dáta zbernice. Čas vzorkovania je 15~60uS. Ak ovládač vytiahne zbernicu vysoko počas vzorkovacieho času, to znamená písať “1”, a ak radič stiahne zbernicu nízko, to znamená písať “0”.
Každý bit prenosu by mal mať nízkoúrovňový štartovací bit aspoň 15uS, a následné údaje “0” alebo “1” by mala byť dokončená do 45 us.
Prenosový čas celého bitu by sa mal udržiavať na 60~120uS, inak nie je možné zaručiť normálnu komunikáciu.
Poznámka: DS18B20 číta a zapisuje dáta z nízkeho bitu.

Zapisujte údaje 0 a údaje 1 na DS18B20

Zapisujte údaje 0 a údaje 1 na DS18B20

2.5.3 Čítanie údajov 0 a údaje 1 od DS18B20
Čas vzorkovania kontroly počas intervalu čítania by mal byť presnejší. Počas intervalu čítania, hostiteľ musí tiež generovať nízku úroveň aspoň 1uS, aby označil začiatok času čítania. Potom, za 15uS po uvoľnení autobusu, DS18B20 odošle interný dátový bit. V tomto čase, ak kontrola zistí, že zbernica je vysoko, znamená to čítať “1”, a ak je autobus nízko, znamená čítanie údajov “0”. Pred prečítaním každého bitu, ovládač pridá štartovací signál.

Čítanie údajov 0 a údaje 1 od DS18B20

Čítanie údajov 0 a údaje 1 od DS18B20

Poznámka: Dátový bit sa musí prečítať do 15 uS od začiatku čítacej medzery, aby sa zabezpečila správna komunikácia.

Počas komunikácie, 8 kúsky “0” alebo “1” sa používajú ako bajt, a čítanie alebo zápis bajtu začína od nízkeho bitu.

2.5.4 Poradie odčítania teploty raz (iba jeden DS18B20 v autobuse)

1. Pošlite resetovací signál
2. Detekcia signálu odozvy
3. Odoslať 0xCC
4. Odoslať 0x44
5. Pošlite resetovací signál
6. Detekcia signálu odozvy
7. Napíšte 0xcc
8. Napíšte 0xbe
9. Slučka 8 krát na prečítanie dolného bajtu teploty
10. Slučka 8 krát na prečítanie vysokého bajtu teploty
11. Syntetizujte 16-bitové teplotné údaje a spracujte ich

3. Kód vodiča

3.1 DS18B20.c
#zahŕňajú “ds18b20.h”
/*
Funkcia: Inicializácia DS18B20
Hardvérové ​​pripojenie: PB15
*/
void DS18B20_Init(neplatné)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Vytiahnutie
}

/*
Funkcia: Skontrolujte, či existuje zariadenie DS18B20
Návratová hodnota: 1 znamená, že zariadenie neexistuje 0 znamená, že zariadenie je normálne
*/
u8 DS18B20_CheckDevice(neplatné) //Obsahuje resetovací impulz, detekčný impulz
{
DS18B20_OUTPUT_MODE();//Inicializujte do výstupného režimu
DS18B20_OUT=0; //Vygenerujte resetovací impulz
DelayUs(750); //Vygenerujte nízku úroveň 750us
DS18B20_OUT=1; //Uvoľnite autobus
DelayUs(15); //Počkajte na odpoveď DS18B20
ak(DS18B20_CleckAck())//Zistiť pulz existencie
{
vrátiť 1;
}
vrátiť 0;
}

/*
Funkcia: Detekcia existencie impulzu zariadenia DS18B20
Návratová hodnota: 1 označuje chybu 0 označuje normálne
*/
u8 DS18B20_CleckAck(neplatné)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicializujte do režimu vstupu
zatiaľ čo(DS18B20_IN&&cnt<200) //Počkajte na impulz existencie odozvy DS18B20
{
DelayUs(1);
cnt++;
}
ak(cnt>= 200)vrátiť 1; //chyba

cnt=0;
zatiaľ čo((!DS18B20_IN)&&cnt<240) //počkajte, kým DS18B20 uvoľní zbernicu
{
DelayUs(1);
cnt++;
}
ak(cnt>= 240)vrátiť 1; //chyba
vrátiť 0;
}

/*
Funkcia: Napíšte bajt
Najprv sa nauč trochu písať.
*/
void DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicializujte do výstupného režimu
pre(i=0;i<8;i++)
{
DS18B20_OUT=0; //Generovať časový interval zápisu (písať začiatok)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Odoslať bit skutočných údajov
DelayUs(60); //Počkajte na dokončenie zápisu
DS18B20_OUT=1; //Uvoľnite zbernicu a pripravte sa na ďalší prenos
cmd>>=1; //Pokračujte v odosielaní ďalšieho bitu údajov
}
}

/*
Funkcia: Prečítajte si bajt
Najprv sa nauč trochu čítať.
*/
u8 DS18B20_ReadByte(neplatné)
{
u8 i,údaje = 0;
pre(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //Inicializujte do výstupného režimu
DS18B20_OUT=0; //Generovať časový interval čítania (začiatok čítania)
DelayUs(2);
DS18B20_OUT=1; //Uvoľnite autobus
DS18B20_INPUT_MODE(); //Inicializujte do režimu vstupu
DelayUs(8); //Počkajte na výstup údajov DS18B20
údajov>>=1; //Naplňte vysoký bit 0, predvolená hodnota je 0
ak(DS18B20_IN) údajov|= 0x80;
DelayUs(60);
DS18B20_OUT=1; //Uvoľnite autobus, počkajte na načítanie ďalšieho bitu údajov
}
vrátiť údaje;
}

/*
Funkcia: Prečítajte si údaje o teplote DS18B20 raz
Návratová hodnota: načítané údaje o teplote
Zvažovaná situácia: K zbernici je pripojený iba jeden DS18B20
*/
u16 DS18B20_ReadTemp(neplatné)
{
u16 teplota=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Odoslať resetovací impulz, detekovať pulz
DS18B20_WriteByte(0xCC); //Preskočiť detekciu sekvencie ROM
DS18B20_WriteByte(0x44); //Start a temperature conversion

//Wait for temperature conversion to complete
zatiaľ čo(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Odoslať resetovací impulz, detekovať pulz
DS18B20_WriteByte(0xCC); //Preskočiť detekciu sekvencie ROM
DS18B20_WriteByte(0xBE); //Read temperature

temp_L=DS18B20_ReadByte(); //Read low temperature data
temp_H=DS18B20_ReadByte(); //Read high temperature data
temp=temp_L|(temp_H<<8); //Synthesized temperature
spiatočka;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#define DS18B20_H
#zahŕňajú “stm32f10x.h
#zahŕňajú “sys.h
#zahŕňajú “delay.h
#zahŕňajú “ds18b20.h”
#zahŕňajú “usart.h”

/*Package interface*/

//Initialize DS18B20 to input mode
#define DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}

//Initialize DS18B20 to output mode
#define DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO port output
#define DS18B20_OUT PBout(15)

//DS18B20 IO port input
#define DS18B20_IN PBin(15)

//Function declaration
u8 DS18B20_CleckAck(neplatné);
u8 DS18B20_CheckDevice(neplatné);
void DS18B20_Init(neplatné);
u16 DS18B20_ReadTemp(neplatné);
u8 DS18B20_ReadByte(neplatné);
void DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Delay function

/*
Funkcia: Delay in us
*/
void DelayUs(int us)
{
#ifdef _SYSTICK_IRQ_
int i,j;
pre(i=0;iVAL=0; //CNT counter value
SysTick->LOAD=9*us; //9 means 1us
SysTick->CTRL|=1<<0; //Start timer
robiť
{
tmp=SysTick->CTRL; //Read status
}zatiaľ čo((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT counter value
SysTick->CTRL&=~(1<<0); //Turn off the timer
#endif
};i++)>

3.4 main.c Call DS18B20 to read the temperature and print it to the serial port

#zahŕňajú “stm32f10x.h

#zahŕňajú “ds18b20.h”

u8 DS18B20_ROM[8]; //Uložte si 64-bitový kód ROM DS18B20

int main(neplatné)
{
u16 tepl;
USARTx_Heat(USART1,72,115200);//Inicializácia sériového portu 1
DS18B20_Heat(); //Inicializácia DS18B20

/*1. Prečítajte si 64-bitový kód ROM DS18B20*/
//Odoslať resetovací impulz, detekovať pulz existencie
zatiaľ čo(DS18B20_CheckDevice())
{
printf(“Zariadenie DS18B20 neexistuje!\n”);
OneskorenieMs(500);
}
//Pošlite príkaz na prečítanie 64-bitového kódu ROM
DS18B20_WriteByte(0x33);

//Slučkové čítanie 64-bitového kódu ROM
pre(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}

zatiaľ čo(1)
{
/*2. Súčasne prevádzkujte všetky DS18B20 na zbernici, aby ste spustili konverziu teploty*/
DS18B20_CheckDevice(); //Odoslať resetovací impulz, detekovať pulz
DS18B20_WriteByte(0xCC); //Preskočiť detekciu sekvencie ROM
DS18B20_WriteByte(0x44); //Start a temperature conversion (nech všetky DS18B20 na zbernici konvertujú teplotu)
OneskorenieMs(500); //Počkajte na dokončenie všetkých teplotných konverzií DS18B20 na linke

/*3. Jednorazové cielené odčítanie teploty každého DS18B20*/
DS18B20_CheckDevice(); //Odoslať resetovací impulz, detekovať pulz
DS18B20_WriteByte(0x55); //Odoslať príkaz, aby sa zhodoval s ROM
pre(i=0;i<8;i++) //Odoslať 64-bitový kód
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Read temperature
temp=DS18B20_ReadByte(); //Čítanie údajov o teplote nízkeho rádu
tepl|=DS18B20_ReadByte()<<8; //Čítanie údajov o teplote vysokého rádu
printf(“temp1=%d.%d\n”,tepl>>4,tepl&0xF);
printf(“temp2=%f\n”,teplota*0,0625);

OneskorenieMs(500);
}
}