Temperatūros jutiklio technologija

STM32 skaitmeninio temperatūros jutiklio DS18B20 konstrukcija

DS18B20 temperatūros jutiklio vielos nerūdijančio plieno zondo rinkinys

DS18B20 yra skaitmeninis temperatūros jutiklis, kuris bendravimui su pagrindiniu kompiuteriu naudoja vieną magistralės laiką. Tik 1 Norint užbaigti temperatūros duomenų nuskaitymą, reikalingas laidas;

DS18B20 turi integruotą 64 bitų gaminio serijos numerį, kad būtų lengva identifikuoti. Galima prijungti kelis DS18B20 jutiklius 1 Viela, ir naudojant 64 bitų tapatybės autentifikavimą, iš skirtingų jutiklių surinktą temperatūros informaciją galima perskaityti atskirai.

DS18B20 temperatūros jutiklio vielos nerūdijančio plieno zondo rinkinys

DS18B20 temperatūros jutiklio vielos nerūdijančio plieno zondo rinkinys

DS18B20 temperatūros jutiklio zondas TPE Overmolding komplektas

DS18B20 temperatūros jutiklio zondas TPE Overmolding komplektas

1 laidas DS18B20 temperatūros jutiklis

1 laidas DS18B20 temperatūros jutiklis

Įvadas į DS18B20
2.1 Pagrindinės DS18B20 savybės
1. Visiškai skaitmeninis temperatūros konvertavimas ir išvestis.
2. Pažangus vienos magistralės duomenų ryšys.
3. Iki 12 bitų skiriamoji geba, iki ±0,5 laipsnių Celsijaus tikslumu.
4. Maksimalus darbo ciklas esant 12 bitų skyrai yra 750 milisekundės.
5. Galima pasirinkti parazitinį darbo režimą.
6. Aptikimo temperatūros diapazonas yra –55°C ~+125°C (–67°F ~+257°F).
7. Integruotas EEPROM, temperatūros ribos aliarmo funkcija.
8. 64-bitų fotolitografijos ROM, įmontuotas gaminio serijos numeris, patogus prijungti prie kelių mašinų.
9. Įvairios pakuotės formos, prisitaikyti prie skirtingų techninės įrangos sistemų.

DS18B20 lusto paketo struktūra

DS18B20 lusto paketo struktūra

2.2 DS18B20 kaiščio funkcija
GND įtampos įžeminimas;
DQ viena duomenų magistralė;
VDD maitinimo įtampa;
NC tuščias kaištis;

DS18B20 lusto RAM ir EEPROM struktūros diagrama

DS18B20 lusto RAM ir EEPROM struktūros diagrama

2.3 DS18B20 veikimo principas ir pritaikymas
DS18B20 temperatūros aptikimas ir skaitmeninių duomenų išvestis yra visiškai integruoti į vieną lustą, todėl jis turi stipresnę apsaugą nuo trukdžių. Jo vieną darbo ciklą galima suskirstyti į dvi dalis, būtent temperatūros aptikimas ir duomenų apdorojimas.

18B20 turi tris atminties išteklių formas. Jie yra: ROM tik skaitymo atmintis, naudojamas DS18B20ID kodui saugoti; pirmasis 8 bitai yra vienos eilutės serijos kodas (DS18B20 kodas yra 19H), sekančią 48 bitai yra unikalus lusto serijos numeris; paskutinis 8 bitai yra CRC kodas (atleidimo patikrinimas) iš aukščiau pateiktų 56 bitai. Duomenys nustatomi gamybos metu ir vartotojas negali jų keisti. DS18B20 iš viso turi 64 ROM bitai.

RAM duomenų registras, naudojamas vidiniam skaičiavimui ir prieigai prie duomenų, duomenys prarandami dingus maitinimui, DS18B20 iš viso turi 9 baitų RAM, kiekvienas baitas yra 8 bitai. Pirmasis ir antrasis baitai yra duomenų vertės informacija po temperatūros konvertavimo; trečiasis ir ketvirtasis baitai yra veidrodinis vartotojo EEPROM vaizdas (dažniausiai naudojamas temperatūros aliarmo vertei saugoti). Jo reikšmė bus atnaujinta, kai maitinimas bus iš naujo nustatytas. Penktasis baitas yra veidrodinis vartotojo trečiojo EEPROM vaizdas. 6-oji, 7th, ir 8 baitai yra skaičiavimo registrai, kurie sukurti taip, kad vartotojai galėtų gauti aukštesnę temperatūros skiriamąją gebą. Jie taip pat yra laikini saugojimo įrenginiai, skirti vidinės temperatūros konvertavimui ir skaičiavimui. 9-asis baitas yra pirmojo CRC kodas 8 baitų. EEPROM yra nepastovi atmintis, naudojama duomenims, kuriuos reikia saugoti ilgą laiką, saugoti, viršutinės ir apatinės temperatūros aliarmo reikšmės, ir patikrinimo duomenis. DS18B20 iš viso turi 3 EEPROM bitai, RAM atmintyje yra veidrodiniai vaizdai, kurie palengvina vartotojo darbą.

Pagal numatytuosius nustatymus DS18B20 veikia 12 bitų raiškos režimu. 12 bitų duomenys, gauti po konvertavimo, saugomi dviejose 8 bitų DS18B20 RAM (pirmieji du baitai). Pirmoji 5 dvejetainiai bitai yra ženklų bitai. Jei išmatuota temperatūra yra didesnė nei 0, šie 5 bitai yra 0. Tiesiog padauginkite išmatuotą vertę iš 0.0625 Norėdami gauti tikrąją temperatūrą. Jei temperatūra žemesnė nei 0, šie 5 bitai yra 1. Išmatuotą vertę reikia apversti, pridėjo 1, ir tada padauginta iš 0.0625 Norėdami gauti tikrąją temperatūrą. Arba naudokite bitų valdymą, kad ištrauktumėte temperatūrą: dešimtainiai skaitmenys užima apatinę 4 bitai, o viršutiniai bitai yra sveikieji bitai (neigiami skaičiai neatsižvelgiami).

2.4 DS18B20 lusto ROM instrukcijų lentelė
1. Skaityti ROM [33H] (laužtiniuose skliaustuose yra šešioliktainis komandos žodis).
Ši komanda leidžia magistralės valdikliui nuskaityti DS18B20 64 bitų ROM. Šią instrukciją galima naudoti tik tada, kai magistrale yra tik vienas DS18B20. Jei prijungtas daugiau nei vienas, bendravimo metu kils duomenų konfliktų.

2. pridėti ROM [55H]
Po šios instrukcijos pateikiamas valdiklio išduotas 64 bitų serijos numeris. Kai autobuse yra keli DS18B20, atsakyti gali tik lustas, kurio serijos numeris yra toks pat kaip ir valdiklio išduotas, o kiti lustai lauks kito atstatymo. Ši instrukcija tinka vieno lusto ir kelių lustų prijungimui.

3. Laivo kambarys [CCH]
Ši instrukcija priverčia lustą nereaguoti į ROM kodą. Vieno autobuso atveju, Šia instrukcija galima sutaupyti laiko. Jei ši instrukcija naudojama, kai prijungti keli lustai, atsiras duomenų konfliktai, dėl kurių atsiranda klaidų.

4. Ieškoti ROM [F0H]
Po lusto inicijavimo, paieškos instrukcija leidžia identifikuoti visų įrenginių 64 bitų ROM pašalinant, kai prie magistralės prijungti keli lustai.

5. Signalizacijos paieška [KIEKVIENAS]
Kelių lustų atveju, aliarmo lusto paieškos instrukcija reaguoja tik į mikroschemas, kurios atitinka aliarmo sąlygą, kai temperatūra aukštesnė nei TH arba žemesnė nei TL. Kol lustas nėra išjungtas, aliarmo būsena bus palaikoma tol, kol temperatūra vėl bus išmatuota ir nebus pasiekta aliarmo būsena.

6. Rašykite bloknotą [4EH]
Tai yra nurodymas įrašyti duomenis į RAM. Du vėliau įrašyti duomenų baitai bus saugomi adresu 2 (TH signalizacijos RAM) ir adresą 3 (TL signalizacijos RAM). Rašymo procesas gali būti nutrauktas atstatymo signalu.

7. Skaitykite bloknotą (skaityti duomenis iš RAM) [BEH]
Ši instrukcija nuskaitys duomenis iš RAM, pradedant nuo adreso 0 ir iki adreso 9, užbaigiant nuskaityti visus RAM duomenis. Lustas leidžia atstatymo signalui nutraukti skaitymo procesą, tai yra, į vėlesnius nereikalingus baitus galima nepaisyti, kad sutrumpėtų skaitymo laikas.

8. Nukopijuokite bloknotą (nukopijuokite RAM duomenis į EEPROM) [48H]
Ši instrukcija išsaugo duomenis RAM į EEPROM, kad duomenys nebūtų prarasti išjungus maitinimą. Kadangi lustas yra užimtas EEPROM saugojimo apdorojimu, kai valdiklis siunčia skaitymo laiko tarpą, magistralės išėjimus “0”, ir baigus saugojimo darbus, magistralė išves “1”.
Parazitiniu darbo režimu, Iš karto po šios instrukcijos paskelbimo turi būti naudojamas stiprus prisitraukimas ir palaikomas mažiausiai 10 MS, kad būtų išlaikytas lusto veikimas.

9. Konvertuoti T (temperatūros konvertavimas) [44H]
Gavęs šį nurodymą, lustas atliks temperatūros konvertavimą ir išsaugos konvertuotą temperatūros reikšmę 1 ir 2 RAM adresuose. Kadangi lustas yra užimtas temperatūros konvertavimo apdorojimu, kai valdiklis siunčia skaitymo laiko tarpą, magistralės išėjimus “0”, ir baigus saugojimo darbus, magistralė išves “1”. Parazitiniu darbo režimu, Iš karto po šios instrukcijos paskelbimo turi būti naudojamas stiprus prisitraukimas ir palaikomas mažiausiai 500 MS, kad būtų išlaikytas lusto veikimas.

10. Prisiminkite EEPROM (Nukopijuokite aliarmo reikšmę EEPROM į RAM) [B8H]
Ši instrukcija nukopijuoja aliarmo reikšmę EEPROM į 3 ir 4 baitus RAM. Kadangi lustas yra užsiėmęs kopijavimo apdorojimu, kai valdiklis siunčia skaitymo laiko tarpą, magistralės išėjimus “0”, ir baigus saugojimo darbus, magistralės išėjimus “1”. Be to, ši instrukcija bus automatiškai vykdoma, kai lustas bus įjungtas ir iš naujo nustatytas. Tokiu būdu, du aliarmo baitų bitai RAM visada bus veidrodinis EEPROM duomenų vaizdas.

11. Skaitykite maitinimo šaltinį (Darbo režimo jungiklis) [B4H]
Išdavus šią instrukciją, išduodamas skaitymo laiko tarpas, ir lustas grąžins galios būsenos žodį. “0” yra parazitinės galios būsena ir “1” yra išorinės galios būsena.

2.5 DS18B20 laiko schema
2.5.1 DS18B20 atstatymo ir atsako ryšio diagrama
Prieš kiekvieną ryšį turi būti atliktas atstatymas. Iš naujo nustatytas laikas, laukimo laikas, ir reakcijos laikas turėtų būti griežtai užprogramuotas pagal laiką.
DS18B20 skaitymo ir rašymo laiko tarpas: DS18B20 duomenų skaitymas ir rašymas patvirtinamas laiko tarpo apdorojimo bitu ir komandos žodžiu keistis informacija.

DS18B20 atstatymo ir atsako ryšio diagrama

DS18B20 atstatymo ir atsako ryšio diagrama

2.5.2 Rašyti duomenis 0 ir duomenis 1 į DS18B20
Pirmuosiuose 15uS duomenų įrašymo laiko tarpas, autobusą reikia žemai patraukti valdikliu, ir tada bus lusto atrankos laikas magistralės duomenims. Mėginių ėmimo laikas yra 15–60 uS. Jei valdiklis mėginių ėmimo metu ištraukia magistralę aukštai, tai reiškia rašyti “1”, o jei valdiklis žemai traukia magistralę, tai reiškia rašyti “0”.
Kiekvienas perdavimo bitas turi turėti žemo lygio pradžios bitą, bent 15 uS, ir vėlesnius duomenis “0” arba “1” turėtų būti baigtas per 45 uS.
Viso bito perdavimo laikas turėtų būti 60–120 uS, kitu atveju negalima garantuoti normalaus ryšio.
PASTABA: DS18B20 nuskaito ir įrašo duomenis iš žemo bito.

Rašyti duomenis 0 ir duomenis 1 į DS18B20

Rašyti duomenis 0 ir duomenis 1 į DS18B20

2.5.3 Duomenų skaitymas 0 ir duomenis 1 nuo DS18B20
Kontrolės mėginių ėmimo laikas per skaitymo laiko tarpą turėtų būti tikslesnis. Per skaitymo laiko tarpą, pagrindinis kompiuteris taip pat turi generuoti žemą lygį, bent 1uS, kad parodytų skaitymo laiko pradžią. Tada, po 15 uS po autobuso išleidimo, DS18B20 atsiųs vidinių duomenų bitą. Šiuo metu, jei kontrolė nustato, kad autobusas yra aukštai, tai reiškia skaitymą “1”, o jei autobusas žemai, tai reiškia duomenų skaitymą “0”. Prieš skaitydami kiekvieną dalį, valdiklis prideda paleidimo signalą.

Skaityti duomenis 0 ir duomenis 1 nuo DS18B20

Skaityti duomenis 0 ir duomenis 1 nuo DS18B20

PASTABA: Kad būtų užtikrintas teisingas ryšys, duomenų bitas turi būti nuskaitytas per 15 uS nuo skaitymo tarpo pradžios.

Bendravimo metu, 8 bitai “0” arba “1” naudojami kaip baitas, o baito skaitymas arba rašymas prasideda nuo žemo bito.

2.5.4 Nuskaitymo temperatūros tvarka vieną kartą (autobuse tik vienas DS18B20)

1. Siųsti atstatymo signalą
2. Aptikti atsako signalą
3. Siųsti 0xCC
4. Siųsti 0x44
5. Siųsti atstatymo signalą
6. Aptikti atsako signalą
7. Parašykite 0xcc
8. Parašykite 0xbe
9. Kilpa 8 kartų perskaityti žemą temperatūros baitą
10. Kilpa 8 kartų perskaityti aukštą temperatūros baitą
11. Sintezuokite 16 bitų temperatūros duomenis ir apdorokite

3. Vairuotojo kodas

3.1 DS18B20.c
#įtraukti “ds18b20.h”
/*
Funkcija: DS18B20 inicijavimas
Aparatinės įrangos jungtis: PB15
*/
negalioja DS18B20_Init(tuščias)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Prisitraukimas
}

/*
Funkcija: Patikrinkite, ar DS18B20 įrenginys yra
Grąžinimo vertė: 1 reiškia, kad įrenginio nėra 0 reiškia, kad įrenginys yra normalus
*/
u8 DS18B20_CheckDevice(tuščias) //Yra atstatymo impulsas, aptikimo impulsas
{
DS18B20_OUTPUT_MODE();//Inicijuoti į išvesties režimą
DS18B20_OUT=0; //Generuokite atstatymo impulsą
DelayUs(750); //Sukurti 750us žemą lygį
DS18B20_OUT=1; //Išleidimo autobusas
DelayUs(15); //Palaukite DS18B20 atsakymo
jei(DS18B20_CleckAck())//Aptikti egzistavimo pulsą
{
grąžinti 1;
}
grąžinti 0;
}

/*
Funkcija: Aptikti DS18B20 įrenginio egzistavimo impulsą
Grąžinimo vertė: 1 rodo klaidą 0 rodo normalų
*/
u8 DS18B20_CleckAck(tuščias)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicijuoti į įvesties režimą
kol(DS18B20_IN&&cnt<200) //Palaukite DS18B20 atsako egzistavimo impulso
{
DelayUs(1);
cnt++;
}
jei(cnt>= 200)grąžinti 1; //klaida

cnt=0;
kol((!DS18B20_IN)&&cnt<240) //palaukite, kol DS18B20 išleis magistralę
{
DelayUs(1);
cnt++;
}
jei(cnt>= 240)grąžinti 1; //klaida
grąžinti 0;
}

/*
Funkcija: Parašykite baitą
Pirmiausia išmokite šiek tiek rašyti.
*/
negalioja DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicijuoti į išvesties režimą
už(i=0;i<8;I ++)
{
DS18B20_OUT=0; //Sukurkite rašymo laiko tarpą (rašyti pradžia)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Siųsti faktinių duomenų bitą
DelayUs(60); //Palaukite, kol bus baigtas rašymas
DS18B20_OUT=1; //Paleiskite autobusą ir pasiruoškite kitam perdavimui
cmd>>=1; //Toliau siųskite kitą duomenų bitą
}
}

/*
Funkcija: Perskaitykite baitą
Pirmiausia išmokite šiek tiek skaityti.
*/
u8 DS18B20_ReadByte(tuščias)
{
u8 i,duomenys=0;
už(i=0;i<8;I ++)
{
DS18B20_OUTPUT_MODE(); //Inicijuoti į išvesties režimą
DS18B20_OUT=0; //Sukurkite skaitymo laiko tarpą (skaitymo pradžia)
DelayUs(2);
DS18B20_OUT=1; //Išleidimo autobusas
DS18B20_INPUT_MODE(); //Inicijuoti į įvesties režimą
DelayUs(8); //Palaukite DS18B20 duomenų išvesties
duomenys>>=1; //Užpildykite aukštą antgalį 0, numatytasis yra 0
jei(DS18B20_IN) duomenys|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Išleidimo autobusas, palaukite, kol perskaitysite kitą duomenų dalį
}
Grąžinimo duomenys;
}

/*
Funkcija: Vieną kartą perskaitykite DS18B20 temperatūros duomenis
Grąžinimo vertė: nuskaityti temperatūros duomenys
Apsvarstyta situacija: Prie magistralės prijungtas tik vienas DS18B20
*/
u16 DS18B20_ReadTemp(tuščias)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Siųsti atstatymo impulsą, aptikti pulsą
DS18B20_WriteByte(0xCC); //Praleisti ROM sekos aptikimą
DS18B20_WriteByte(0x44); //Pradėkite temperatūros keitimą

//Palaukite, kol baigsis temperatūros konvertavimas
kol(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Siųsti atstatymo impulsą, aptikti pulsą
DS18B20_WriteByte(0xCC); //Praleisti ROM sekos aptikimą
DS18B20_WriteByte(0xBE); //Skaityti temperatūrą

temp_L=DS18B20_ReadByte(); //Skaityti žemos temperatūros duomenis
temp_H=DS18B20_ReadByte(); //Skaityti aukštos temperatūros duomenis
temp=temp_L|(temp_H<<8); //Sintetinė temperatūra
grąžinimo temp;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#apibrėžkite DS18B20_H
#įtraukti “stm32f10x.h”
#įtraukti “sys.h”
#įtraukti “delsimas.h”
#įtraukti “ds18b20.h”
#įtraukti “usart.h”

/*Paketo sąsaja*/

//Inicijuoti DS18B20 į įvesties režimą
#apibrėžkite DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}

//Inicijuoti DS18B20 į išvesties režimą
#apibrėžkite DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO prievado išvestis
#apibrėžkite DS18B20_OUT PBout(15)

//DS18B20 IO prievado įvestis
#apibrėžkite DS18B20_IN PBin(15)

//Funkcijos deklaracija
u8 DS18B20_CleckAck(tuščias);
u8 DS18B20_CheckDevice(tuščias);
negalioja DS18B20_Init(tuščias);
u16 DS18B20_ReadTemp(tuščias);
u8 DS18B20_ReadByte(tuščias);
negalioja DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Vėlavimo funkcija

/*
Funkcija: Vėlavimas mumyse
*/
negalioja DelayUs(į mus)
{
#ifdef _SYSTICK_IRQ_
tarp i,j;
už(i=0;iVAL=0; //CNT skaitiklio vertė
SysTick->LOAD=9*us; //9 reiškia 1us
SysTick->CTRL|=1<<0; //Pradėti laikmatį
daryti
{
tmp=SysTick->CTRL; //Skaityti būseną
}kol((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT skaitiklio vertė
SysTick->CTRL&=~(1<<0); //Išjunkite laikmatį
#endif
};I ++)>

3.4 main.c Paskambinkite DS18B20, kad perskaitytumėte temperatūrą ir išspausdintumėte ją į nuoseklųjį prievadą

#įtraukti “stm32f10x.h”

#įtraukti “ds18b20.h”

u8 DS18B20_ROM[8]; //Išsaugokite DS18B20 64 bitų ROM kodą

tarp pagrindinis(tuščias)
{
iki 16 temp;
USARTx_Heat(USART1,72,115200);//Nuosekliojo prievado inicijavimas 1
DS18B20_Šiluma(); //DS18B20 inicijavimas

/*1. Skaitykite 64 bitų ROM kodą DS18B20*/
//Siųsti atstatymo impulsą, aptikti egzistavimo impulsą
kol(DS18B20_CheckDevice())
{
printf(“DS18B20 įrenginio nėra!\n”);
DelayMs(500);
}
//Siųskite komandą nuskaityti 64 bitų ROM kodą
DS18B20_WriteByte(0x33);

//Ciklas nuskaito 64 bitų ROM kodą
už(i=0;i<8;I ++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}

kol(1)
{
/*2. Vienu metu naudokite visus magistralės DS18B20, kad pradėtumėte konvertuoti temperatūrą*/
DS18B20_CheckDevice(); //Siųsti atstatymo impulsą, aptikti pulsą
DS18B20_WriteByte(0xCC); //Praleisti ROM sekos aptikimą
DS18B20_WriteByte(0x44); //Pradėkite temperatūros keitimą (tegul visi magistralės DS18B20 konvertuoja temperatūrą)
DelayMs(500); //Palaukite, kol bus baigti visi DS18B20 temperatūros keitimai linijoje

/*3. Vienas tikslinis kiekvienos DS18B20*/ temperatūros rodmuo
DS18B20_CheckDevice(); //Siųsti atstatymo impulsą, aptikti pulsą
DS18B20_WriteByte(0x55); //Siųsti komandą, kad ji atitiktų ROM
už(i=0;i<8;I ++) //Siųsti 64 bitų kodą
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Skaityti temperatūrą
temp=DS18B20_ReadByte(); //Skaitykite žemos eilės temperatūros duomenis
temp|=DS18B20_ReadByte()<<8; //Skaitykite aukšto lygio temperatūros duomenis
printf(“temp1=%d.%d\n”,temp>>4,temp&0xF);
printf(“temp2=%f\n”,temp*0,0625);

DelayMs(500);
}
}