Temperatūras sensora tehnoloģija

STM32 digitālā temperatūras sensora DS18B20 dizains

DS18B20 temperatūras sensora stieples nerūsējošā tērauda zondes komplekts

DS18B20 ir digitālais temperatūras sensors, kas saziņai ar resursdatoru izmanto vienu kopnes laiku. Tikai 1 Lai pabeigtu temperatūras datu nolasīšanu, ir nepieciešams vads;

DS18B20 ir iebūvēts 64 bitu produkta sērijas numurs, lai to varētu viegli identificēt. Var pievienot vairākus DS18B20 sensorus 1 Stieple, un izmantojot 64 bitu identitātes autentifikāciju, no dažādiem sensoriem savākto temperatūras informāciju var nolasīt atsevišķi.

DS18B20 temperatūras sensora stieples nerūsējošā tērauda zondes komplekts

DS18B20 temperatūras sensora stieples nerūsējošā tērauda zondes komplekts

DS18B20 temperatūras sensora zonde TPE Overmolding komplekts

DS18B20 temperatūras sensora zonde TPE Overmolding komplekts

1 vads DS18B20 temperatūras sensors

1 vads DS18B20 temperatūras sensors

Ievads DS18B20
2.1 DS18B20 galvenās iezīmes
1. Pilnībā digitāla temperatūras pārveidošana un izvade.
2. Uzlabota vienas kopnes datu komunikācija.
3. Līdz 12 bitu izšķirtspēja, ar precizitāti līdz ±0,5 grādiem pēc Celsija.
4. Maksimālais darba cikls ar 12 bitu izšķirtspēju ir 750 milisekundes.
5. Var izvēlēties parazitāro darba režīmu.
6. Noteikšanas temperatūras diapazons ir –55°C ~+125°C (–67°F ~+257°F).
7. Iebūvēts EEPROM, temperatūras ierobežojuma trauksmes funkcija.
8. 64-bitu fotolitogrāfijas ROM, iebūvētais izstrādājuma sērijas numurs, ērts vairāku mašīnu savienojumam.
9. Dažādas iepakojuma formas, pielāgoties dažādām aparatūras sistēmām.

DS18B20 mikroshēmas iepakojuma struktūra

DS18B20 mikroshēmas iepakojuma struktūra

2.2 DS18B20 tapas funkcija
GND sprieguma zemējums;
DQ viena datu kopne;
VDD barošanas spriegums;
NC tukša tapa;

DS18B20 mikroshēmas RAM un EEPROM struktūras diagramma

DS18B20 mikroshēmas RAM un EEPROM struktūras diagramma

2.3 DS18B20 darbības princips un pielietojums
DS18B20 temperatūras noteikšana un digitālā datu izvade ir pilnībā integrēta vienā mikroshēmā, tāpēc tai ir spēcīgāka prettraucējumu spēja. Tā vienu darba ciklu var iedalīt divās daļās, proti, temperatūras noteikšana un datu apstrāde.

18B20 ir trīs atmiņas resursu veidi. Tie ir: ROM tikai lasāmā atmiņa, izmanto DS18B20ID koda glabāšanai; pirmais 8 biti ir vienas rindas sērijas kods (DS18B20 kods ir 19H), sekojošo 48 biti ir unikālais mikroshēmas sērijas numurs; pēdējais 8 biti ir CRC kods (atlaišanas pārbaude) no iepriekš minētā 56 biti. Dati tiek iestatīti ražošanas laikā, un lietotājs tos nevar mainīt. DS18B20 ir pavisam 64 ROM biti.

RAM datu reģistrs, izmanto iekšējiem aprēķiniem un datu piekļuvei, dati tiek zaudēti pēc strāvas padeves pārtraukuma, DS18B20 ir pavisam 9 baitu RAM, katrs baits ir 8 biti. Pirmais un otrais baits ir datu vērtības informācija pēc temperatūras konvertēšanas; trešais un ceturtais baits ir lietotāja EEPROM spoguļattēls (parasti izmanto temperatūras trauksmes vērtību glabāšanai). Tās vērtība tiks atsvaidzināta, kad jauda tiks atiestatīta. Piektais baits ir lietotāja trešās EEPROM spoguļattēls. 6, 7th, un 8. baiti ir skaitīšanas reģistri, kas ir paredzēti, lai lietotāji varētu iegūt augstāku temperatūras izšķirtspēju. Tās ir arī pagaidu uzglabāšanas vienības iekšējās temperatūras pārveidošanai un aprēķināšanai. 9. baits ir pirmā CRC kods 8 baiti. EEPROM ir nemainīga atmiņa, ko izmanto, lai saglabātu datus, kas jāsaglabā ilgu laiku, augšējās un apakšējās temperatūras trauksmes vērtības, un verifikācijas dati. DS18B20 ir pavisam 3 EEPROM biti, un RAM ir spoguļattēli, lai atvieglotu lietotāja darbību.

DS18B20 pēc noklusējuma darbojas 12 bitu izšķirtspējas režīmā. 12 bitu dati, kas iegūti pēc konvertēšanas, tiek glabāti divās DS18B20 8 bitu operatīvajā atmiņā (pirmie divi baiti). Pirmais 5 binārie biti ir zīmju biti. Ja izmērītā temperatūra ir lielāka par 0, šie 5 biti ir 0. Vienkārši reiziniet izmērīto vērtību ar 0.0625 lai iegūtu faktisko temperatūru. Ja temperatūra ir mazāka par 0, šie 5 biti ir 1. Izmērītā vērtība ir jāapgriež, pievienoja 1, un pēc tam reizināts ar 0.0625 lai iegūtu faktisko temperatūru. Vai arī izmantojiet bitu darbību, lai iegūtu temperatūru: decimālzīmes aizņem zemāko 4 biti, un augšējie biti ir veseli biti (negatīvie skaitļi netiek ņemti vērā).

2.4 DS18B20 mikroshēmas ROM instrukciju tabula
1. Lasīt ROM [33H] (heksadecimālais komandas vārds ir kvadrātiekavās).
Šī komanda ļauj kopnes kontrollerim nolasīt DS18B20 64 bitu ROM. Šo instrukciju var izmantot tikai tad, ja kopnē ir tikai viens DS18B20. Ja ir pievienots vairāk nekā viens, saziņas laikā radīsies datu konflikti.

2. pievienot ROM [55H]
Šai instrukcijai seko kontrollera izdots 64 bitu sērijas numurs. Ja autobusā ir vairākas DS18B20, reaģēt var tikai mikroshēma ar tādu pašu sērijas numuru kā kontroliera izsniegtajam, un pārējās mikroshēmas gaidīs nākamo atiestatīšanu. Šī instrukcija ir piemērota vienas mikroshēmas un vairāku mikroshēmu savienojumam.

3. Izlaist ROM [CCH]
Šī instrukcija liek mikroshēmai nereaģēt uz ROM kodu. Viena autobusa gadījumā, šo instrukciju var izmantot, lai ietaupītu laiku. Ja šī instrukcija tiek izmantota, kad ir pievienotas vairākas mikroshēmas, radīsies datu konflikti, kā rezultātā rodas kļūdas.

4. Meklēt ROM [F0H]
Pēc mikroshēmas inicializācijas, meklēšanas instrukcija ļauj identificēt visu ierīču 64 bitu ROM, izslēdzot, ja kopnei ir pievienotas vairākas mikroshēmas.

5. Signalizācijas meklēšana [KATRS]
Vairāku mikroshēmu gadījumā, trauksmes mikroshēmas meklēšanas instrukcija reaģē tikai uz mikroshēmām, kas atbilst trauksmes nosacījumam, ja temperatūra ir augstāka par TH vai zemāka par TL. Kamēr mikroshēma nav izslēgta, trauksmes stāvoklis tiks saglabāts, līdz temperatūra atkal tiks mērīta un trauksmes stāvoklis netiks sasniegts.

6. Rakstiet Scratchpad [4EH]
Šī ir instrukcija, kā ierakstīt datus RAM. Divi vēlāk ierakstītie datu baiti tiks saglabāti adresē 2 (Trauksmes RAM TH) un adrese 3 (Trauksmes RAM TL). Rakstīšanas procesu var pārtraukt ar atiestatīšanas signālu.

7. Izlasiet Scratchpad (lasīt datus no RAM) [BEH]
Šī instrukcija nolasīs datus no RAM, sākot no adreses 0 un līdz adresei 9, pabeidzot visu RAM datu nolasīšanu. Mikroshēma ļauj atiestatīšanas signālam pārtraukt lasīšanas procesu, tas ir, nākamos nevajadzīgos baitus var ignorēt, lai samazinātu lasīšanas laiku.

8. Kopēt Scratchpad (kopējiet RAM datus uz EEPROM) [48H]
Šī instrukcija saglabā datus RAM EEPROM, lai dati netiktu zaudēti, kad barošana ir izslēgta. Tā kā mikroshēma ir aizņemta ar EEPROM krātuves apstrādi, kad kontrolieris nosūta lasīšanas laika slotu, kopnes izejas “0”, un kad glabāšanas darbi ir pabeigti, autobuss izvadīs “1”.
Parazītiskā darba režīmā, Tūlīt pēc šīs instrukcijas ir jāizmanto spēcīga pievilkšanās un jāuztur vismaz 10 MS, lai saglabātu mikroshēmas darbību.

9. Pārvērst T (temperatūras pārveidošana) [44H]
Pēc šīs instrukcijas saņemšanas, mikroshēma veiks temperatūras pārveidošanu un saglabās konvertēto temperatūras vērtību RAM 1. un 2. adresē. Tā kā mikroshēma ir aizņemta ar temperatūras pārveidošanas apstrādi, kad kontrolieris nosūta lasīšanas laika slotu, kopnes izejas “0”, un kad glabāšanas darbi ir pabeigti, autobuss izvadīs “1”. Parazītiskā darba režīmā, Tūlīt pēc šīs instrukcijas ir jāizmanto spēcīga pievilkšanās un jāuztur vismaz 500 MS, lai saglabātu mikroshēmas darbību.

10. Atsaukt EEPROM (Kopējiet trauksmes vērtību EEPROM uz RAM) [B8H]
Šī instrukcija kopē trauksmes vērtību EEPROM RAM 3. un 4. baitā. Tā kā mikroshēma ir aizņemta ar kopēšanas apstrādi, kad kontrolieris nosūta lasīšanas laika slotu, kopnes izejas “0”, un kad glabāšanas darbi ir pabeigti, kopnes izejas “1”. Papildus, šī instrukcija tiks automātiski izpildīta, kad mikroshēma tiks ieslēgta un atiestatīta. Tādā veidā, divi trauksmes baitu biti RAM vienmēr būs EEPROM datu spoguļattēls.

11. Lasiet barošanas avotu (Darba režīma slēdzis) [B4H]
Pēc šīs instrukcijas izdošanas, tiek izdots lasīšanas laika intervāls, un mikroshēma atgriezīs savu jaudas statusa vārdu. “0” ir parazitārās jaudas stāvoklis un “1” ir ārējās jaudas stāvoklis.

2.5 DS18B20 laika diagramma
2.5.1 DS18B20 atiestatīšanas un atbildes attiecību diagramma
Pirms katras saziņas ir jāveic atiestatīšana. Atiestatīšanas laiks, gaidīšanas laiks, un reakcijas laiks ir stingri jāieprogrammē atbilstoši laikam.
DS18B20 lasīšanas un rakstīšanas laika intervāls: DS18B20 datu lasīšanu un rakstīšanu apstiprina laika intervāla apstrādes bits un komandas vārds informācijas apmaiņai.

DS18B20 atiestatīšanas un atbildes attiecību diagramma

DS18B20 atiestatīšanas un atbildes attiecību diagramma

2.5.2 Rakstīt datus 0 un dati 1 uz DS18B20
Pirmajos 15 uS no rakstīšanas datu laika starpības, autobusu vajag zemu novilkt ar kontrolieri, un tad tas būs kopnes datu mikroshēmas paraugu ņemšanas laiks. Paraugu ņemšanas laiks ir 15 ~ 60 uS. Ja kontrolieris iztveršanas laikā pavelk autobusu augstu, tas nozīmē rakstīt “1”, un ja kontrolieris pavelk autobusu zemu, tas nozīmē rakstīt “0”.
Katram pārraides bitam ir jābūt zema līmeņa sākuma bitam vismaz 15 uS, un turpmākos datus “0” vai “1” jāpabeidz 45 us laikā.
Visa bita pārraides laikam jābūt 60 ~ 120 uS, pretējā gadījumā nevar garantēt normālu saziņu.
Atzīmēt: DS18B20 nolasa un raksta datus no zemā bita.

Rakstīt datus 0 un dati 1 uz DS18B20

Rakstīt datus 0 un dati 1 uz DS18B20

2.5.3 Datu lasīšana 0 un dati 1 no DS18B20
Kontroles paraugu ņemšanas laikam nolasīšanas laika intervālā jābūt precīzākam. Lasīšanas laika pārtraukuma laikā, resursdatoram ir arī jāģenerē zems līmenis vismaz 1uS, lai norādītu lasīšanas laika sākumu. Tad, 15 ASV dolāru laikā pēc autobusa izlaišanas, DS18B20 nosūtīs iekšējo datu bitu. Šajā laikā, ja kontrole konstatē, ka autobuss ir augsts, tas nozīmē lasīt “1”, un ja autobuss ir zems, tas nozīmē datu nolasīšanu “0”. Pirms katras daļas lasīšanas, kontrolieris pievieno starta signālu.

Lasīt datus 0 un dati 1 no DS18B20

Lasīt datus 0 un dati 1 no DS18B20

Atzīmēt: Lai nodrošinātu pareizu saziņu, datu bits ir jānolasa 15 uS laikā no lasīšanas pārtraukuma sākuma.

Komunikācijas laikā, 8 biti no “0” vai “1” tiek izmantoti kā baits, un baita lasīšana vai rakstīšana sākas no zemākā bita.

2.5.4 Temperatūras nolasīšanas secība vienreiz (autobusā tikai viens DS18B20)

1. Nosūtīt atiestatīšanas signālu
2. Noteikt atbildes signālu
3. Nosūtiet 0xCC
4. Sūtīt 0x44
5. Nosūtīt atiestatīšanas signālu
6. Noteikt atbildes signālu
7. Uzrakstiet 0xcc
8. Uzrakstiet 0xbe
9. Cilpa 8 reizes, lai nolasītu temperatūras zemo baitu
10. Cilpa 8 reizes, lai nolasītu augstu temperatūras baitu
11. Sintēzē 16 bitu temperatūras datus un apstrādā

3. Vadītāja kods

3.1 DS18B20.c
#ietver “ds18b20.h”
/*
Funkcija: DS18B20 inicializācija
Aparatūras savienojums: PB15
*/
tukšums DS18B20_Init(nederīgs)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Pievilkšanās
}

/*
Funkcija: Pārbaudiet, vai ierīce DS18B20 pastāv
Atdeves vērtība: 1 nozīmē, ka ierīce neeksistē 0 nozīmē, ka ierīce ir normāla
*/
u8 DS18B20_CheckDevice(nederīgs) //Satur atiestatīšanas impulsu, noteikšanas impulss
{
DS18B20_OUTPUT_MODE();//Inicializēt izvades režīmā
DS18B20_OUT=0; //Ģenerējiet atiestatīšanas impulsu
DelayUs(750); //Ģenerēt 750us zemu līmeni
DS18B20_OUT=1; //Atbrīvošanas autobuss
DelayUs(15); //Gaidiet DS18B20 atbildi
ja(DS18B20_CleckAck())//Noteikt eksistences impulsu
{
atgriezties 1;
}
atgriezties 0;
}

/*
Funkcija: Noteikt DS18B20 ierīces eksistences impulsu
Atdeves vērtība: 1 norāda uz kļūdu 0 norāda uz normālu
*/
u8 DS18B20_CleckAck(nederīgs)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicializēt ievades režīmā
kamēr(DS18B20_IN&&cnt<200) //Pagaidiet DS18B20 atbildes pastāvēšanas impulsu
{
DelayUs(1);
cnt++;
}
ja(cnt>=200)atgriezties 1; //kļūda

cnt=0;
kamēr((!DS18B20_IN)&&cnt<240) //pagaidiet, kamēr DS18B20 atbrīvos kopni
{
DelayUs(1);
cnt++;
}
ja(cnt>=240)atgriezties 1; //kļūda
atgriezties 0;
}

/*
Funkcija: Uzrakstiet baitu
Vispirms iemācieties mazliet rakstīt.
*/
nederīgs DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicializēt izvades režīmā
priekš(i=0;i<8;i++)
{
DS18B20_OUT=0; //Izveidojiet rakstīšanas laika intervālu (rakstīšanas sākums)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Nosūtiet faktisko datu bitu
DelayUs(60); //Pagaidiet rakstīšanas pabeigšanu
DS18B20_OUT=1; //Atlaidiet autobusu un sagatavojieties nākamajai pārraidei
cmd>>=1; //Turpiniet sūtīt nākamo datu bitu
}
}

/*
Funkcija: Izlasiet baitu
Vispirms iemācieties mazliet lasīt.
*/
u8 DS18B20_ReadByte(nederīgs)
{
u8 i,dati=0;
priekš(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //Inicializēt izvades režīmā
DS18B20_OUT=0; //Izveidojiet lasīšanas laika intervālu (lasīt sākums)
DelayUs(2);
DS18B20_OUT=1; //Atbrīvošanas autobuss
DS18B20_INPUT_MODE(); //Inicializēt ievades režīmā
DelayUs(8); //Pagaidiet DS18B20 datu izvadi
datus>>=1; //Piepildiet augstu bitu ar 0, noklusējuma ir 0
ja(DS18B20_IN) datus|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Atbrīvošanas autobuss, pagaidiet, līdz tiks nolasīts nākamais datu bits
}
atgriezt datus;
}

/*
Funkcija: Vienreiz izlasiet DS18B20 temperatūras datus
Atdeves vērtība: nolasīti temperatūras dati
Apsvērtā situācija: Kopnei ir pievienots tikai viens DS18B20
*/
u16 DS18B20_ReadTemp(nederīgs)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Nosūtīt atiestatīšanas impulsu, noteikt pulsu
DS18B20_WriteByte(0xCC); //Izlaist ROM secības noteikšanu
DS18B20_WriteByte(0x44); //Sāciet temperatūras pārveidošanu

//Pagaidiet, līdz tiek pabeigta temperatūras pārveidošana
kamēr(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Nosūtīt atiestatīšanas impulsu, noteikt pulsu
DS18B20_WriteByte(0xCC); //Izlaist ROM secības noteikšanu
DS18B20_WriteByte(0xBE); //Lasīt temperatūru

temp_L=DS18B20_ReadByte(); //Lasīt datus par zemu temperatūru
temp_H=DS18B20_ReadByte(); //Lasīt datus par augstu temperatūru
temp=temp_L|(temp_H<<8); //Sintezētā temperatūra
atgriešanās temp;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#definējiet DS18B20_H
#ietver “stm32f10x.h”
#ietver “sys.h”
#ietver “kavēšanās.h”
#ietver “ds18b20.h”
#ietver “usart.h”

/*Pakotnes interfeiss*/

//Inicializējiet DS18B20 ievades režīmā
#definējiet DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}

//Inicializējiet DS18B20 izvades režīmā
#definējiet DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO porta izeja
#definējiet DS18B20_OUT PBout(15)

//DS18B20 IO porta ieeja
#definējiet DS18B20_IN PBin(15)

//Funkciju deklarācija
u8 DS18B20_CleckAck(nederīgs);
u8 DS18B20_CheckDevice(nederīgs);
tukšums DS18B20_Init(nederīgs);
u16 DS18B20_ReadTemp(nederīgs);
u8 DS18B20_ReadByte(nederīgs);
nederīgs DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Aizkaves funkcija

/*
Funkcija: Kavēšanās mūsos
*/
spēkā neesošs DelayUs(int mums)
{
#ifdef _SYSTICK_IRQ_
int i,j;
priekš(i=0;iVAL=0; //CNT skaitītāja vērtība
SysTick->LOAD=9*us; //9 nozīmē 1us
SysTick->CTRL|=1<<0; //Sāciet taimeri
darīt
{
tmp=SysTick->CTRL; //Lasīt statusu
}kamēr((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT skaitītāja vērtība
SysTick->CTRL&=~(1<<0); //Izslēdziet taimeri
#endif
};i++)>

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

#ietver “stm32f10x.h”

#ietver “ds18b20.h”

u8 DS18B20_ROM[8]; //Store the 64-bit ROM code of DS18B20

int main(nederīgs)
{
u16 temp;
USARTx_Init(USART1,72,115200);//Initialization of serial port 1
DS18B20_Init(); //DS18B20 inicializācija

/*1. Read the 64-bit ROM code of DS18B20*/
//Nosūtīt atiestatīšanas impulsu, detect existence pulse
kamēr(DS18B20_CheckDevice())
{
printf(“DS18B20 device does not exist!\n”);
DelayMs(500);
}
//Send the command to read the 64-bit ROM code
DS18B20_WriteByte(0x33);

//Loop read 64-bit ROM code
priekš(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}

kamēr(1)
{
/*2. Simultaneously operate all DS18B20 on the bus to start converting temperature*/
DS18B20_CheckDevice(); //Nosūtīt atiestatīšanas impulsu, noteikt pulsu
DS18B20_WriteByte(0xCC); //Izlaist ROM secības noteikšanu
DS18B20_WriteByte(0x44); //Sāciet temperatūras pārveidošanu (let all DS18B20 on the bus convert the temperature)
DelayMs(500); //Wait for all DS18B20 temperature conversions on the line to complete

/*3. Single targeted reading of the temperature of each DS18B20*/
DS18B20_CheckDevice(); //Nosūtīt atiestatīšanas impulsu, noteikt pulsu
DS18B20_WriteByte(0x55); //Send command to match ROM
priekš(i=0;i<8;i++) //Send 64-bit code
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Lasīt temperatūru
temp=DS18B20_ReadByte(); //Read low-order temperature data
temp|=DS18B20_ReadByte()<<8; //Lasīt augstas pakāpes temperatūras datus
printf(“temp1=%d.%dn”,temp>>4,temp&0xF);
printf(“temp2=%fn”,temp*0,0625);

DelayMs(500);
}
}