Temperatuurianduritehnoloogia

STM32 digitaalse temperatuurianduri DS18B20 disain

DS18B20 temperatuurianduri traat roostevabast terasest sondi komplekt

DS18B20 on digitaalne temperatuuriandur, mis kasutab hostiga suhtlemiseks üht siini ajastust. Ainult 1 Temperatuuriandmete lugemise lõpuleviimiseks on vaja traati;

DS18B20-l on hõlpsaks tuvastamiseks sisseehitatud 64-bitine toote seerianumber. Võimalik ühendada mitu DS18B20 andurit 1 Traat, ja 64-bitise identiteedi autentimise kaudu, erinevatelt anduritelt kogutud temperatuuriinfot saab lugeda eraldi.

DS18B20 temperatuurianduri traat roostevabast terasest sondi komplekt

DS18B20 temperatuurianduri traat roostevabast terasest sondi komplekt

DS18B20 temperatuurianduri sond TPE ülevormimiskomplekt

DS18B20 temperatuurianduri sond TPE ülevormimiskomplekt

1 traat DS18B20 temperatuuriandur

1 traat DS18B20 temperatuuriandur

DS18B20 tutvustus
2.1 DS18B20 peamised omadused
1. Täielikult digitaalne temperatuuri muundamine ja väljund.
2. Täiustatud ühe siini andmeside.
3. Kuni 12-bitine eraldusvõime, täpsusega kuni ±0,5 kraadi Celsiuse järgi.
4. Maksimaalne töötsükkel 12-bitise eraldusvõimega on 750 millisekundid.
5. Valida saab parasiitide töörežiimi.
6. Tuvastamistemperatuuri vahemik on –55°C ~+125°C (–67°F ~+257°F).
7. Sisseehitatud EEPROM, temperatuuripiirangu häirefunktsioon.
8. 64-bit fotolitograafia ROM, sisseehitatud toote seerianumber, mugav mitme masina ühendamiseks.
9. Erinevad pakendivormid, kohaneda erinevate riistvarasüsteemidega.

DS18B20 kiibi pakendi struktuur

DS18B20 kiibi pakendi struktuur

2.2 DS18B20 pin funktsioon
GND pinge maandus;
DQ üksik andmesiin;
VDD toiteallika pinge;
NC tühi tihvt;

DS18B20 kiibi RAM-i ja EEPROM-i struktuuriskeem

DS18B20 kiibi RAM-i ja EEPROM-i struktuuriskeem

2.3 DS18B20 tööpõhimõte ja rakendus
DS18B20 temperatuurituvastus ja digitaalne andmeväljund on täielikult integreeritud ühele kiibile, seega on sellel tugevam häirevastane võime. Selle ühe töötsükli võib jagada kaheks osaks, nimelt temperatuuri tuvastamine ja andmetöötlus.

18B20-l on kolme tüüpi mäluressursse. Nad on: ROM kirjutuskaitstud mälu, kasutatakse DS18B20ID koodi salvestamiseks; esimene 8 bitid on üherealised seeriakoodid (DS18B20 kood on 19H), järgmist 48 bitid on kiibi kordumatu seerianumber; viimane 8 bitid on CRC kood (koondamise kontroll) ülalmainitutest 56 bitti. Andmed seatakse tootmisel ja kasutaja ei saa neid muuta. DS18B20-l on kokku 64 ROM-i bitti.

RAM-i andmeregister, kasutatakse sisemiseks arvutuseks ja andmetele juurdepääsuks, andmed kaovad pärast voolukatkestust, DS18B20-l on kokku 9 baiti RAM-i, iga bait on 8 bitti. Esimene ja teine ​​bait on andmete väärtuse teave pärast temperatuuri teisendamist; kolmas ja neljas bait on kasutaja EEPROM-i peegelpilt (kasutatakse tavaliselt temperatuurihäire väärtuste salvestamiseks). Selle väärtust värskendatakse toite lähtestamisel. Viies bait on kasutaja kolmanda EEPROM-i peegelpilt. 6, 7th, ja 8. bait on loendusregistrid, mis on loodud võimaldama kasutajatel saavutada kõrgemat temperatuuri eraldusvõimet. Need on ka ajutised hoiuruumid sisetemperatuuri muundamiseks ja arvutamiseks. 9. bait on esimese CRC-kood 8 baiti. EEPROM on püsimälu, mida kasutatakse andmete salvestamiseks, mida tuleb pikka aega salvestada, ülemine ja alumine temperatuurihäire väärtused, ja kinnitusandmed. DS18B20-l on kokku 3 bitti EEPROM-i, ja kasutaja töö hõlbustamiseks on RAM-is peegelpildid.

DS18B20 töötab vaikimisi 12-bitise eraldusvõimega režiimis. Pärast teisendamist saadud 12-bitised andmed salvestatakse kahes DS18B20 8-bitises RAM-is (kaks esimest baiti). Esimene 5 kahendkoodis olevad bitid on märgibitid. Kui mõõdetud temperatuur on suurem kui 0, need 5 bitid on 0. Lihtsalt korrutage mõõdetud väärtus arvuga 0.0625 tegeliku temperatuuri saamiseks. Kui temperatuur on alla 0, need 5 bitid on 1. Mõõdetud väärtus tuleb ümber pöörata, lisanud 1, ja seejärel korrutada 0.0625 tegeliku temperatuuri saamiseks. Või kasutage temperatuuri eemaldamiseks bitioperatsiooni: kümnendkohad hõivavad madalama 4 bitti, ja ülemised bitid on täisarvu bitid (negatiivseid numbreid ei arvestata).

2.4 DS18B20 kiibi ROM-i juhiste tabel
1. Lugege ROM-i [33H] (kuueteistkümnendsüsteemi käsusõna on nurksulgudes).
See käsk võimaldab siinikontrolleril lugeda DS18B20 64-bitist ROM-i. Seda juhist saab kasutada ainult siis, kui siinil on ainult üks DS18B20. Kui ühendatud on rohkem kui üks, side ajal tekivad andmekonfliktid.

2. lisa ROM [55H]
Sellele juhisele järgneb kontrolleri väljastatud 64-bitine seerianumber. Kui bussis on mitu DS18B20, reageerida saab ainult kontrolleri väljastatud seerianumbriga kiip, ja teised kiibid ootavad järgmist lähtestamist. See juhend sobib ühe- ja mitmekiibiliseks ühendamiseks.

3. Jäta ROM vahele [CCH]
See juhis paneb kiibi ROM-koodile mitte reageerima. Ühe bussi puhul, seda juhist saab kasutada aja säästmiseks. Kui seda juhist kasutatakse mitme kiibi ühendamisel, tekivad andmekonfliktid, mille tulemuseks on vigu.

4. Otsi ROM-ist [F0H]
Pärast kiibi initsialiseerimist, otsingujuhis võimaldab tuvastada kõigi seadmete 64-bitise ROM-i elimineerimise teel, kui siiniga on ühendatud mitu kiipi.

5. Häire otsing [IGA]
Mitme kiibi korral, häirekiibi otsingujuhis vastab ainult kiipidele, mis vastavad häiretingimustele, mille temperatuur on kõrgem kui TH või madalam kui TL. Kuni kiip pole välja lülitatud, häireseisund säilib seni, kuni temperatuuri uuesti mõõdetakse ja häireseisundit ei saavutata.

6. Kirjutage märkmeleht [4EH]
See on juhis andmete kirjutamiseks RAM-i. Kaks baiti hiljem kirjutatud andmeid salvestatakse aadressile 2 (Alarmi RAM-i TH) ja aadress 3 (TL alarm RAM). Kirjutamisprotsessi saab lõpetada lähtestussignaaliga.

7. Lugege märkmelehte (lugeda andmeid RAM-ist) [BEH]
See juhend loeb andmeid RAM-ist, alustades aadressist 0 ja kuni aadressini 9, lõpetades kogu RAM-i andmete lugemise. Kiip võimaldab lähtestussignaalil lugemisprotsessi lõpetada, see tähendab, järgnevaid mittevajalikke baite võib lugemisaja vähendamiseks ignoreerida.

8. Kopeeri märkmeleht (kopeerige RAM-i andmed EEPROM-i) [48H]
See juhend salvestab RAM-is olevad andmed EEPROM-i, nii et andmed ei lähe kaotsi, kui toide on välja lülitatud. Kuna kiip on hõivatud EEPROM-i salvestustöötlusega, kui kontroller saadab lugemise ajapilu, siini väljundid “0”, ja kui ladustamistööd on lõpetatud, buss väljub “1”.
Parasiittöörežiimis, kiibi töö säilitamiseks tuleb kohe pärast selle juhise väljaandmist kasutada tugevat tõmmet ja seda tuleb hoida vähemalt 10 MS.

9. Teisenda T (temperatuuri muundamine) [44H]
Pärast selle juhise saamist, kiip teostab temperatuuri teisenduse ja salvestab teisendatud temperatuuri väärtuse RAM-i 1. ja 2. aadressi. Kuna kiip on hõivatud temperatuuri muundamise töötlemisega, kui kontroller saadab lugemise ajapilu, siini väljundid “0”, ja kui ladustamistööd on lõpetatud, buss väljub “1”. Parasiittöörežiimis, kiibi töö säilitamiseks tuleb kohe pärast selle juhise väljaandmist kasutada tugevat tõmmet ja seda tuleb hoida vähemalt 500 MS.

10. Meenuta EEPROM (Kopeerige häire väärtus EEPROM-is RAM-i) [B8H]
See juhend kopeerib häireväärtuse EEPROM-is RAM-i 3. ja 4. baiti. Kuna kiip on hõivatud kopeerimistöötlusega, kui kontroller saadab lugemise ajapilu, siini väljundid “0”, ja kui ladustamistööd on lõpetatud, siini väljundid “1”. Lisaks, see käsk täidetakse automaatselt, kui kiip sisse lülitatakse ja lähtestatakse. Sel viisil, kaks häirebaidi bitti RAM-is on alati EEPROM-is olevate andmete peegelpilt.

11. Lugege jaotist Toiteallikas (Töörežiimi lüliti) [B4H]
Pärast selle juhise väljaandmist, väljastatakse lugemise ajavahe, ja kiip tagastab oma võimsuse olekusõna. “0” on parasiitjõu olek ja “1” on välise võimsuse olek.

2.5 DS18B20 ajastusskeem
2.5.1 DS18B20 lähtestamise ja reageerimise seoste diagramm
Enne iga sidet tuleb lähtestada. Lähtestamise aeg, ooteaeg, ja reaktsiooniaeg peaks olema rangelt programmeeritud vastavalt ajastusele.
DS18B20 lugemise ja kirjutamise ajavahe: DS18B20 andmete lugemist ja kirjutamist kinnitab ajavahe töötlemise bitt ja käsusõna teabe vahetamiseks.

DS18B20 lähtestamise ja reageerimise seoste diagramm

DS18B20 lähtestamise ja reageerimise seoste diagramm

2.5.2 Kirjuta andmed 0 ja andmed 1 kuni DS18B20
Esimeses 15uS kirjutamisandmete ajavahe, buss tuleb kontrolleriga madalaks tõmmata, ja siis on see siiniandmete kiibi diskreetimisaeg. Proovivõtuaeg on 15 ~ 60 uS. Kui kontroller tõmbab siini diskreetimisajal kõrgele, see tähendab kirjutamist “1”, ja kui kontroller tõmbab bussi madalale, see tähendab kirjutamist “0”.
Iga edastusbiti madala taseme algusbitt peab olema vähemalt 15 uS, ja sellele järgnevad andmed “0” või “1” tuleks lõpule viia 45 uS jooksul.
Kogu biti edastusaeg tuleks hoida vahemikus 60–120 uS, vastasel juhul ei saa normaalset sidet tagada.
Märkus: DS18B20 loeb ja kirjutab andmeid madalast bitist.

Kirjuta andmed 0 ja andmed 1 kuni DS18B20

Kirjuta andmed 0 ja andmed 1 kuni DS18B20

2.5.3 Andmete lugemine 0 ja andmed 1 alates DS18B20
Kontrolli proovivõtuaeg lugemisaja vahe ajal peaks olema täpsem. Lugemisaja vahe ajal, host peab samuti genereerima madala taseme vähemalt 1uS, et näidata lugemisaja algust. Siis, 15 us pärast bussi vabastamist, DS18B20 saadab sisemise andmebiti. Sel ajal, kui juht tuvastab, et buss on kõrgel, see tähendab lugemist “1”, ja kui buss on madal, see tähendab andmete lugemist “0”. Enne iga osa lugemist, kontroller lisab käivitussignaali.

Lugege andmeid 0 ja andmed 1 alates DS18B20

Lugege andmeid 0 ja andmed 1 alates DS18B20

Märkus: Õige side tagamiseks tuleb andmebitt lugeda 15 uS jooksul lugemisvahe algusest.

Suhtlemise ajal, 8 tükid “0” või “1” kasutatakse baitidena, ja baidi lugemine või kirjutamine algab madalast bitist.

2.5.4 Temperatuuri lugemise järjekord üks kord (bussis ainult üksainus DS18B20)

1. Saada lähtestamissignaal
2. Tuvastage vastuse signaal
3. Saada 0xCC
4. Saada 0x44
5. Saada lähtestamissignaal
6. Tuvastage vastuse signaal
7. Kirjutage 0xcc
8. Kirjutage 0xbe
9. Loop 8 korda, et lugeda temperatuuri madalat baiti
10. Loop 8 korda, et lugeda temperatuuri kõrget baiti
11. Sünteesige 16-bitised temperatuuriandmed ja töötlege

3. Juhi kood

3.1 DS18B20.c
#sisaldama “ds18b20.h”
/*
Funktsioon: DS18B20 lähtestamine
Riistvaraühendus: PB15
*/
tühine DS18B20_Init(tühine)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Tõmbamine
}

/*
Funktsioon: Kontrollige, kas seade DS18B20 on olemas
Tagastusväärtus: 1 tähendab, et seadet pole olemas 0 tähendab, et seade on normaalne
*/
u8 DS18B20_CheckDevice(tühine) //Sisaldab lähtestuspulssi, tuvastamise impulss
{
DS18B20_OUTPUT_MODE();//Lähtestage väljundrežiimi
DS18B20_OUT=0; //Loo lähtestamisimpulss
DelayUs(750); //Looge 750us madal tase
DS18B20_OUT=1; //Vabasta buss
DelayUs(15); //Oodake DS18B20 vastust
kui(DS18B20_CleckAck())//Tuvastage olemasolu impulss
{
tagasi 1;
}
tagasi 0;
}

/*
Funktsioon: Tuvastage DS18B20 seadme olemasolu impulss
Tagastusväärtus: 1 näitab viga 0 näitab normaalset
*/
u8 DS18B20_CleckAck(tühine)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Lähtestage sisendrežiimi
samal ajal(DS18B20_IN&&cnt<200) //Oodake DS18B20 vastuse olemasolu impulssi
{
DelayUs(1);
cnt++;
}
kui(cnt>=200)tagasi 1; //viga

cnt=0;
samal ajal((!DS18B20_IN)&&cnt<240) //oodake, kuni DS18B20 siini vabastab
{
DelayUs(1);
cnt++;
}
kui(cnt>=240)tagasi 1; //viga
tagasi 0;
}

/*
Funktsioon: Kirjutage bait
Kõigepealt õppige natuke kirjutama.
*/
tühine DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Lähtestage väljundrežiimi
jaoks(i=0;i<8;i++)
{
DS18B20_OUT=0; //Loo kirjutamisaja vahe (kirjutamise algus)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Saada tegelik andmete bitt
DelayUs(60); //Oodake kirjutamise lõpetamist
DS18B20_OUT=1; //Vabastage buss ja valmistuge järgmiseks ülekandeks
cmd>>=1; //Jätkake järgmise andmebiti saatmist
}
}

/*
Funktsioon: Loe bait
Kõigepealt õppige natuke lugema.
*/
u8 DS18B20_ReadByte(tühine)
{
u8 i,andmed = 0;
jaoks(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //Lähtestage väljundrežiimi
DS18B20_OUT=0; //Loo lugemisaja vahe (lugemise algus)
DelayUs(2);
DS18B20_OUT=1; //Vabasta buss
DS18B20_INPUT_MODE(); //Lähtestage sisendrežiimi
DelayUs(8); //Oodake DS18B20 andmeväljundit
andmeid>>=1; //Täitke kõrge bitiga 0, vaikimisi on 0
kui(DS18B20_IN) andmeid|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Vabasta buss, oodake järgmise andmete lugemist
}
tagastada andmed;
}

/*
Funktsioon: Lugege DS18B20 temperatuuriandmeid üks kord
Tagastusväärtus: loetud temperatuuriandmed
Arvestatud olukord: Siiniga on ühendatud ainult üks DS18B20
*/
u16 DS18B20_ReadTemp(tühine)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Saada lähtestamise impulss, tuvastada pulss
DS18B20_WriteByte(0xCC); //Jäta ROM-i järjestuse tuvastamine vahele
DS18B20_WriteByte(0x44); //Käivitage temperatuuri muundamine

//Oodake, kuni temperatuuri muundamine on lõpule viidud
samal ajal(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Saada lähtestamise impulss, tuvastada pulss
DS18B20_WriteByte(0xCC); //Jäta ROM-i järjestuse tuvastamine vahele
DS18B20_WriteByte(0xBE); //Lugege temperatuuri

temp_L=DS18B20_ReadByte(); //Lugege madala temperatuuri andmeid
temp_H=DS18B20_ReadByte(); //Kõrge temperatuuri andmete lugemine
temp=temp_L|(temp_H<<8); //Sünteesitud temperatuur
tagasivoolu temp;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#defineerige DS18B20_H
#sisaldama “stm32f10x.h”
#sisaldama “sys.h”
#sisaldama “viivitus.h”
#sisaldama “ds18b20.h”
#sisaldama “usart.h”

/*Paketi liides*/

//Lähtestage DS18B20 sisendrežiimi
#määrake DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}

//Lähtestage DS18B20 väljundrežiimi
#defineerige DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO pordi väljund
#määrake DS18B20_OUT PBout(15)

//DS18B20 IO pordi sisend
#defineerige DS18B20_IN PBin(15)

//Funktsiooni deklaratsioon
u8 DS18B20_CleckAck(tühine);
u8 DS18B20_CheckDevice(tühine);
tühine DS18B20_Init(tühine);
u16 DS18B20_ReadTemp(tühine);
u8 DS18B20_ReadByte(tühine);
tühine DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Viivitusfunktsioon

/*
Funktsioon: Viivitus meis
*/
tühine DelayUs(meie sees)
{
#ifdef _SYSTICK_IRQ_
int i,j;
jaoks(i=0;iVAL=0; //CNT loenduri väärtus
SysTick->LOAD=9*us; //9 tähendab 1us
SysTick->CTRL|=1<<0; //Käivitage taimer
teha
{
tmp=SysTick->CTRL; //Loe olekut
}samal ajal((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT loenduri väärtus
SysTick->CTRL&=~(1<<0); //Lülitage taimer välja
#endif
};i++)>

3.4 main.c Helistage numbrile DS18B20, et lugeda temperatuuri ja printida see jadaporti

#sisaldama “stm32f10x.h”

#sisaldama “ds18b20.h”

u8 DS18B20_ROM[8]; //Salvestage DS18B20 64-bitine ROM-kood

int main(tühine)
{
u16 temp;
USARTx_Heat(USART 1,72,115200);//Jadapordi initsialiseerimine 1
DS18B20_Kuumus(); //DS18B20 lähtestamine

/*1. Lugege DS18B20*/ 64-bitist ROM-koodi
//Saada lähtestamise impulss, tuvastada olemasolu impulss
samal ajal(DS18B20_CheckDevice())
{
printf(“DS18B20 seadet pole olemas!\n”);
DelayMs(500);
}
//Saada käsk 64-bitise ROM-koodi lugemiseks
DS18B20_WriteByte(0x33);

//Silmus loeb 64-bitist ROM-koodi
jaoks(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}

samal ajal(1)
{
/*2. Temperatuuri muutmise alustamiseks kasutage samaaegselt kõiki siinis olevaid DS18B20*/
DS18B20_CheckDevice(); //Saada lähtestamise impulss, tuvastada pulss
DS18B20_WriteByte(0xCC); //Jäta ROM-i järjestuse tuvastamine vahele
DS18B20_WriteByte(0x44); //Käivitage temperatuuri muundamine (las kõik siinis olevad DS18B20 teisendavad temperatuuri)
DelayMs(500); //Oodake, kuni kõik DS18B20 temperatuurikonversioonid liinil on lõpule viidud

/*3. Iga DS18B20*/ temperatuuri üks sihitud näit
DS18B20_CheckDevice(); //Saada lähtestamise impulss, tuvastada pulss
DS18B20_WriteByte(0x55); //Saada käsk ROM-i vastendamiseks
jaoks(i=0;i<8;i++) //Saada 64-bitine kood
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Lugege temperatuuri
temp=DS18B20_ReadByte(); //Lugege madala astme temperatuuri andmeid
temp|=DS18B20_ReadByte()<<8; //Lugege kõrgetasemelisi temperatuuriandmeid
printf(“temp1=%d.%d\n”,temp>>4,temp&0xF);
printf(“temp2=%f\n”,temp*0,0625);

DelayMs(500);
}
}