Hőmérséklet-érzékelő technológia

DS18B20 digitális hőmérséklet-érzékelő kialakítása az STM32-hez

DS18B20 hőmérsékletérzékelő huzal, rozsdamentes acél szondakészlet

A DS18B20 egy digitális hőmérséklet-érzékelő, amely egyetlen buszidőzítést használ a gazdagéppel való kommunikációhoz. Csak 1 A hőmérsékleti adatok leolvasásához vezetékre van szükség;

A DS18B20 beépített 64 bites sorozatszámmal rendelkezik az egyszerű azonosítás érdekében. Több DS18B20 érzékelő csatlakoztatható 1 Huzal, és 64 bites identitás-hitelesítéssel, a különböző érzékelőktől gyűjtött hőmérsékleti információk külön-külön leolvashatók.

DS18B20 hőmérsékletérzékelő huzal, rozsdamentes acél szondakészlet

DS18B20 hőmérsékletérzékelő huzal, rozsdamentes acél szondakészlet

DS18B20 hőmérséklet-érzékelő szonda TPE Overmolding készlet

DS18B20 hőmérséklet-érzékelő szonda TPE Overmolding készlet

1 vezetékes DS18B20 hőmérséklet-érzékelő

1 vezetékes DS18B20 hőmérséklet-érzékelő

A DS18B20 bemutatása
2.1 A DS18B20 főbb jellemzői
1. Teljesen digitális hőmérséklet-átalakítás és kimenet.
2. Fejlett egybuszos adatkommunikáció.
3. Akár 12 bites felbontás, akár ±0,5 Celsius fokos pontossággal.
4. A maximális munkaciklus 12 bites felbontásnál 750 milliszekundum.
5. Kiválasztható a parazita üzemmód.
6. Az érzékelési hőmérséklet tartomány –55°C ~ +125°C (–67°F ~+257°F).
7. Beépített EEPROM, hőmérséklet határérték riasztás funkció.
8. 64-bit fotolitográfia ROM, beépített termék sorozatszáma, kényelmes többgépes csatlakoztatáshoz.
9. Különféle csomagolási formák, alkalmazkodni a különböző hardverrendszerekhez.

DS18B20 chip csomag felépítése

DS18B20 chip csomag felépítése

2.2 DS18B20 tű funkció
GND feszültség földelés;
DQ egyetlen adatbusz;
VDD tápfeszültség;
NC üres tű;

DS18B20 chip RAM és EEPROM szerkezeti diagram

DS18B20 chip RAM és EEPROM szerkezeti diagram

2.3 DS18B20 működési elv és alkalmazás
A DS18B20 hőmérsékletérzékelés és a digitális adatkimenet teljes mértékben egy chipen van integrálva, tehát erősebb az interferencia-elhárító képessége. Egy munkaciklusa két részre osztható, nevezetesen hőmérsékletérzékelés és adatfeldolgozás.

18A B20 háromféle memória-erőforrással rendelkezik. Ők azok: ROM csak olvasható memória, a DS18B20ID kód tárolására szolgál; az első 8 A bitek egysoros sorozatkódok (A DS18B20 kód 19H), a következőket 48 A bitek a chip egyedi sorozatszámai; az utolsó 8 bitek a CRC kódok (redundancia ellenőrzés) a fentiek közül 56 bitek. Az adatok gyártáskor kerülnek beállításra, és a felhasználó nem módosíthatja azokat. A DS18B20 összesen 64 ROM bitek.

RAM adatregiszter, belső számításokhoz és adateléréshez használják, áramszünet után az adatok elvesznek, A DS18B20 összesen 9 bájt RAM, minden bájt az 8 bitek. Az első és a második bájt a hőmérséklet-átalakítás utáni adatérték információ; a harmadik és negyedik bájt a felhasználó EEPROM-jának tükörképe (általában hőmérséklet-riasztási értékek tárolására használják). Értéke a tápfeszültség visszaállításakor frissül. Az ötödik bájt a felhasználó harmadik EEPROM-jának tükörképe. A 6, 7th, a 8. bájtok pedig számlálóregiszterek, amelyek célja, hogy a felhasználók magasabb hőmérsékleti felbontást érjenek el. Ideiglenes tárolóegységek is a belső hőmérséklet átalakításához és kiszámításához. A 9. bájt az első CRC kódja 8 bájtok. Az EEPROM egy nem felejtő memória, amelyet olyan adatok tárolására használnak, amelyeket hosszú ideig kell menteni, felső és alsó hőmérsékleti riasztási értékek, és ellenőrző adatok. A DS18B20 összesen 3 bit EEPROM, és a RAM-ban tükörképek találhatók a felhasználói kezelés megkönnyítése érdekében.

A DS18B20 alapértelmezés szerint 12 bites felbontású módban működik. Az átalakítás után kapott 12 bites adatokat a DS18B20 két 8 bites RAM-jában tárolják. (az első két bájt). Az első 5 A bináris bitek előjelbitek. Ha a mért hőmérséklet nagyobb, mint 0, ezek 5 bitek vannak 0. Csak szorozza meg a mért értéket ezzel 0.0625 hogy megkapjuk a tényleges hőmérsékletet. Ha a hőmérséklet kisebb, mint 0, ezek 5 bitek vannak 1. A mért értéket meg kell fordítani, tette hozzá 1, majd megszorozzuk vele 0.0625 hogy megkapjuk a tényleges hőmérsékletet. Vagy használjon bitműveletet a hőmérséklet kivonására: a tizedesjegyek az alsót foglalják el 4 bitek, a felső bitek pedig egész bitek (a negatív számokat nem veszik figyelembe).

2.4 DS18B20 chip ROM utasítás táblázat
1. Olvassa el a ROM-ot [33H] (a hexadecimális parancsszó szögletes zárójelben van).
Ez a parancs lehetővé teszi a buszvezérlő számára, hogy beolvassa a DS18B20 64 bites ROM-ját. Ez az utasítás csak akkor használható, ha csak egy DS18B20 van a buszon. Ha egynél több van csatlakoztatva, adatütközések lépnek fel a kommunikáció során.

2. csatolja a ROM-ot [55H]
Ezt az utasítást a vezérlő által kiadott 64 bites sorozatszám követi. Ha több DS18B20 van a buszon, csak a vezérlő által kiadott sorozatszámmal megegyező chip tud válaszolni, és a többi chip várni fog a következő resetre. Ez az utasítás egylapkás és többlapkás csatlakoztatásra alkalmas.

3. ROM kihagyása [CCH]
Ez az utasítás arra készteti a chipet, hogy ne reagáljon a ROM kódra. Egyetlen busz esetén, ezzel az utasítással időt takaríthat meg. Ha ezt az utasítást több chip csatlakoztatásakor használja, adatütközések lépnek fel, hibákat eredményezve.

4. ROM keresése [F0H]
A chip inicializálása után, a keresési utasítás lehetővé teszi az összes eszköz 64 bites ROM-jának azonosítását, ha több chip csatlakozik a buszhoz.

5. Riasztás keresése [MINDEN]
Több chip esetén, a riasztási chip keresési utasítás csak azokra a chipekre reagál, amelyek megfelelnek a TH-nál magasabb vagy TL-nél alacsonyabb hőmérsékletű riasztási feltételnek. Amíg a chip nincs kikapcsolva, a riasztási állapot mindaddig megmarad, amíg a hőmérsékletet ismét meg nem mérik, és a riasztási állapotot el nem érik.

6. Írjon Firkálótömböt [4EH]
Ez az utasítás az adatok RAM-ba írásához. A később írt két bájt adat a címen lesz tárolva 2 (A riasztási RAM TH) és címet 3 (TL riasztási RAM). Az írási folyamat egy reset jellel fejezhető be.

7. Olvassa el a Firkálótömböt (adatok olvasása a RAM-ból) [BEH]
Ez az utasítás adatokat olvas be a RAM-ból, címtől kezdve 0 és címig 9, a teljes RAM-adat beolvasásának befejezése. A chip lehetővé teszi, hogy a reset jel leállítsa az olvasási folyamatot, vagyis, az ezt követő felesleges bájtok figyelmen kívül hagyhatók az olvasási idő csökkentése érdekében.

8. Firkálótömb másolása (másolja a RAM-adatokat EEPROM-ba) [48H]
Ez az utasítás a RAM-ban lévő adatokat az EEPROM-ba tárolja, így az adatok nem vesznek el, ha a tápfeszültség ki van kapcsolva. Mivel a chip EEPROM tárolási feldolgozással van elfoglalva, amikor a vezérlő olvasási időrést küld, a busz kimeneteket “0”, és amikor a tárolási munka befejeződött, a busz kimenetet fog adni “1”.
Parazita üzemmódban, Az utasítás kiadása után azonnal erős felhúzást kell alkalmazni, és legalább 10 MS-ig fenn kell tartani a chip működésének fenntartása érdekében.

9. Konvertálja a T (hőmérséklet átalakítás) [44H]
Miután megkapta ezt az utasítást, a chip hőmérséklet-konverziót hajt végre, és a konvertált hőmérsékleti értéket a RAM 1. és 2. címén tárolja. Mivel a chip a hőmérséklet-átalakítással van elfoglalva, amikor a vezérlő olvasási időrést küld, a busz kimeneteket “0”, és amikor a tárolási munka befejeződött, a busz kimenetet fog adni “1”. Parazita üzemmódban, Az utasítás kiadása után azonnal erős felhúzást kell alkalmazni, és legalább 500 MS-ig fenn kell tartani a chip működésének fenntartása érdekében.

10. Hívja elő az EEPROM-ot (Másolja a riasztási értéket az EEPROM-ban a RAM-ba) [B8H]
Ez az utasítás az EEPROM riasztási értékét a RAM 3. és 4. bájtjába másolja. Mivel a chip a másolási folyamattal van elfoglalva, amikor a vezérlő olvasási időrést küld, a busz kimeneteket “0”, és amikor a tárolási munka befejeződött, a busz kimeneteket “1”. Ezen kívül, ez az utasítás automatikusan végrehajtásra kerül, amikor a chipet bekapcsolják és visszaállítják. Ily módon, a RAM-ban lévő két riasztási bájtbit mindig az EEPROM-ban lévő adatok tükörképe lesz.

11. Olvassa el a tápegységet (Üzemmód kapcsoló) [B4H]
Az utasítás kiadása után, olvasási időköz kerül kiadásra, és a chip visszaadja a teljesítmény állapot szót. “0” a parazita hatalmi állapot és “1” a külső teljesítmény állapota.

2.5 DS18B20 időzítési diagram
2.5.1 DS18B20 visszaállítási és válaszkapcsolati diagram
Minden kommunikáció előtt alaphelyzetbe kell állítani. A visszaállítási idő, várakozási idő, és a válaszidőt szigorúan az időzítésnek megfelelően kell programozni.
DS18B20 olvasási és írási időköz: A DS18B20 adatolvasást és -írást az időrés feldolgozó bitje és az információcseréhez szükséges parancsszó erősíti meg.

DS18B20 visszaállítási és válaszkapcsolati diagram

DS18B20 visszaállítási és válaszkapcsolati diagram

2.5.2 Írjon adatokat 0 és adatok 1 a DS18B20-hoz
Az írási adatok első 15uS-ében időrés, a buszt le kell húzni a vezérlővel, és akkor ez lesz a buszadatok chip-mintavételi ideje. A mintavételi idő 15-60 uS. Ha a vezérlő magasra húzza a buszt a mintavételi idő alatt, írást jelent “1”, és ha a vezérlő alacsonyra húzza a buszt, írást jelent “0”.
Minden átviteli bitnek rendelkeznie kell legalább 15 uS alacsony szintű indítóbittel, és az azt követő adatok “0” vagy “1” 45 eS-en belül kell befejezni.
A teljes bit átviteli idejét 60-120 uS között kell tartani, ellenkező esetben a normál kommunikáció nem garantálható.
Jegyzet: A DS18B20 az alacsony bitről olvas és ír adatokat.

Írjon adatokat 0 és adatok 1 a DS18B20-hoz

Írjon adatokat 0 és adatok 1 a DS18B20-hoz

2.5.3 Adatok olvasása 0 és adatok 1 a DS18B20-tól
A vezérlés mintavételezési ideje az olvasási időrés alatt pontosabb legyen. Az olvasási időköz alatt, a gazdagépnek legalább 1uS alacsony szintet is generálnia kell, hogy jelezze az olvasási idő kezdetét. Majd, 15 USA-ban, miután a buszt kiengedik, a DS18B20 elküldi a belső adatbitet. Ebben az időben, ha a vezérlő megállapítja, hogy a busz magas, olvasást jelent “1”, és ha alacsony a busz, adatok olvasását jelenti “0”. Mielőtt elolvasná az egyes részeket, a vezérlő indítójelet ad hozzá.

Adatok olvasása 0 és adatok 1 a DS18B20-tól

Adatok olvasása 0 és adatok 1 a DS18B20-tól

Jegyzet: Az adatbitet az olvasási rés kezdetétől számított 15 uS-en belül kell beolvasni a megfelelő kommunikáció érdekében.

A kommunikáció alatt, 8 darabjait “0” vagy “1” bájtként használatosak, és a bájt olvasása vagy írása az alsó bittől kezdődik.

2.5.4 A hőmérséklet egyszeri leolvasási sorrendje (csak egyetlen DS18B20 van a buszon)

1. Reset jel küldése
2. Válaszjel érzékelése
3. 0xCC küldése
4. 0x44 küldése
5. Reset jel küldése
6. Válaszjel érzékelése
7. Írj 0xcc-t
8. Írj 0xbe-t
9. Hurok 8 alkalommal a hőmérséklet alacsony bájtjának olvasásához
10. Hurok 8 alkalommal olvassa be a hőmérséklet magas bájtját
11. Szintetizálja a 16 bites hőmérsékleti adatokat és dolgozza fel

3. Driver kód

3.1 DS18B20.c
#tartalmaz “ds18b20.h”
/*
Funkció: DS18B20 inicializálás
Hardver csatlakozás: PB15
*/
void ds18b20_init(üres)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Push-up
}

/*
Funkció: Ellenőrizze, hogy létezik-e a DS18B20 eszköz
Visszatérési érték: 1 azt jelenti, hogy az eszköz nem létezik 0 azt jelenti, hogy a készülék normális
*/
u8 DS18B20_CheckDevice(üres) //Reset impulzust tartalmaz, észlelő impulzus
{
DS18B20_OUTPUT_MODE();//Inicializálás kimeneti módba
DS18B20_OUT=0; //Reset impulzus generálása
DelayUs(750); //750us alacsony szintet generál
DS18B20_OUT=1; //Kioldó busz
DelayUs(15); //Várja meg a DS18B20 válaszát
ha(DS18B20_CleckAck())//Létezési impulzus észlelése
{
visszatérés 1;
}
visszatérés 0;
}

/*
Funkció: A DS18B20 eszköz létezési impulzusának észlelése
Visszatérési érték: 1 hibát jelez 0 normált jelez
*/
u8 DS18B20_CleckAck(üres)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicializálás beviteli módba
míg(DS18B20_IN&&CNT<200) //Várja meg a DS18B20 válasz létezési impulzust
{
DelayUs(1);
cnt++;
}
ha(CNT>=200)visszatérés 1; //hiba

cnt=0;
míg((!DS18B20_IN)&&CNT<240) //várja meg, amíg a DS18B20 felszabadítja a buszt
{
DelayUs(1);
cnt++;
}
ha(CNT>=240)visszatérés 1; //hiba
visszatérés 0;
}

/*
Funkció: Írj egy bájtot
Először tanulj meg egy kicsit írni.
*/
void ds18b20_writebyte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicializálás kimeneti módba
számára(i=0;én<8;i++)
{
DS18B20_OUT=0; //Írási időrés generálása (írás kezdése)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Valós adatbit küldése
DelayUs(60); //Várja meg az írás befejezését
DS18B20_OUT=1; //Engedje el a buszt, és készüljön fel a következő adásra
cmd>>=1; //Folytassa a következő adatbit elküldését
}
}

/*
Funkció: Olvasson egy bájtot
Először tanulj meg olvasni egy kicsit.
*/
u8 DS18B20_ReadByte(üres)
{
u8 i,adat=0;
számára(i=0;én<8;i++)
{
DS18B20_OUTPUT_MODE(); //Inicializálás kimeneti módba
DS18B20_OUT=0; //Olvasási időrés generálása (olvasás kezdete)
DelayUs(2);
DS18B20_OUT=1; //Kioldó busz
DS18B20_INPUT_MODE(); //Inicializálás beviteli módba
DelayUs(8); //Várja meg a DS18B20 adatkimenetet
adat>>=1; //Töltse fel a magas bitet 0, alapértelmezett az 0
ha(DS18B20_IN) adat|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Kioldó busz, várja meg a következő adatrészlet olvasását
}
visszaadja az adatokat;
}

/*
Funkció: Olvassa el egyszer a DS18B20 hőmérsékleti adatait
Visszatérési érték: a hőmérsékleti adatok olvashatók
Megfontolt helyzet: Csak egy DS18B20 csatlakozik a buszhoz
*/
u16 DS18B20_ReadTemp(üres)
{
u16 hőmérséklet=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0XCC); //A ROM-szekvencia észlelésének kihagyása
DS18B20_Writebyte(0x44); //Indítsa el a hőmérséklet-átalakítást

//Várja meg, amíg a hőmérséklet-átalakítás befejeződik
míg(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0XCC); //A ROM-szekvencia észlelésének kihagyása
DS18B20_Writebyte(0XBE); //Olvassa le a hőmérsékletet

temp_L=DS18B20_ReadByte(); //Olvassa el az alacsony hőmérsékletű adatokat
temp_H=DS18B20_ReadByte(); //Olvassa el a magas hőmérsékletű adatokat
temp=temp_L|(temp_H<<8); //Szintetizált hőmérséklet
visszatérési hőmérséklet;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#DS18B20_H meghatározása
#tartalmaz “stm32f10x.h”
#tartalmaz “sys.h”
#tartalmaz “késleltetés.h”
#tartalmaz “ds18b20.h”
#tartalmaz “usart.h”

/*Csomag felület*/

//Inicializálja a DS18B20-at bemeneti módba
#definiálja a DS18B20_INPUT_MODE-ot() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}

//Inicializálja a DS18B20-at kimeneti módba
#határozza meg a DS18B20_OUTPUT_MODE paramétert(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO port kimenet
#definiálja a DS18B20_OUT PBout-ot(15)

//DS18B20 IO port bemenet
#definiálja a DS18B20_IN PBin-t(15)

//Funkció deklaráció
u8 DS18B20_CleckAck(üres);
u8 DS18B20_CheckDevice(üres);
void ds18b20_init(üres);
u16 DS18B20_ReadTemp(üres);
u8 DS18B20_ReadByte(üres);
void ds18b20_writebyte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Késleltetés funkció

/*
Funkció: Késés bennünk
*/
érvénytelen DelayUs(int bennünk)
{
#ifdef _SYSTICK_IRQ_
int i,j;
számára(i=0;iVAL=0; //CNT számláló értéke
SysTick->LOAD=9*us; //9 1us-t jelent
SysTick->CTRL|=1<<0; //Indítsa el az időzítőt
csinál
{
tmp=SysTick->CTRL; //Állapot olvasása
}míg((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT számláló értéke
SysTick->CTRL&=~(1<<0); //Kapcsolja ki az időzítőt
#endif
};i++)>

3.4 main.c Hívja a DS18B20 számot, hogy leolvassa a hőmérsékletet, és kinyomtassa a soros portra

#tartalmaz “stm32f10x.h”

#tartalmaz “ds18b20.h”

u8 DS18B20_ROM[8]; //Tárolja a DS18B20 64 bites ROM kódját

int fő(üres)
{
u16 hőm;
USARTx_Heat(USART1,72,115200);//A soros port inicializálása 1
Ds18b20_init(); //DS18B20 inicializálás

/*1. Olvassa be a DS18B20*/ 64 bites ROM kódját
//Reset impulzus küldése, érzékeli a létezési impulzust
míg(DS18B20_CheckDevice())
{
printf(“A DS18B20 eszköz nem létezik!\n”);
DelayMs(500);
}
//Küldje el a parancsot a 64 bites ROM kód olvasásához
DS18B20_Writebyte(0x33);

//Hurok beolvasása 64 bites ROM kód
számára(i=0;én<8;i++)
{
DS18B20_ROM[én]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%D]=0x%X\n”,én,DS18B20_ROM[én]);
}

míg(1)
{
/*2. Működtesse egyidejűleg az összes DS18B20-at a buszon a hőmérséklet átalakításához*/
DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0XCC); //A ROM-szekvencia észlelésének kihagyása
DS18B20_Writebyte(0x44); //Indítsa el a hőmérséklet-átalakítást (hagyja, hogy a buszon lévő összes DS18B20 konvertálja a hőmérsékletet)
DelayMs(500); //Várja meg, amíg az összes DS18B20 hőmérséklet-átalakítás befejeződik a vonalon

/*3. Mindegyik DS18B20*/ hőmérsékletének egyetlen célzott leolvasása
DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0x55); //Parancs küldése a ROM-nak megfelelő
számára(i=0;én<8;i++) //64 bites kód küldése
{
DS18B20_Writebyte(DS18B20_ROM[én]);
}
DS18B20_Writebyte(0XBE); //Olvassa le a hőmérsékletet
temp=DS18B20_ReadByte(); //Olvassa el az alacsony rendű hőmérsékleti adatokat
hőmérséklet|=DS18B20_ReadByte()<<8; //Magas rendű hőmérsékleti adatok olvasása
printf(“temp1=%d.%d\n”,hőmérséklet>>4,hőmérséklet&0xF);
printf(“temp2=%f\n”,hőmérséklet*0,0625);

DelayMs(500);
}
}