Tehnologija senzorja temperature

Zasnova digitalnega temperaturnega senzorja DS18B20 za STM32

DS18B20 TEMPERATURNI SENZIRANJE VIT SONCE

DS18B20 je digitalni temperaturni senzor, ki za komunikacijo z gostiteljem uporablja en sam avtobus. Samo 1 Žica je potrebna za dokončanje odčitavanja temperaturnih podatkov;

DS18B20 ima vgrajeno 64-bitno serijsko številko izdelka za enostavno identifikacijo. Z več senzorji DS18B20 je mogoče povezati z 1 Žica, in skozi 64-bitno preverjanje pristnosti identitete, Informacije o temperaturi, zbrane iz različnih senzorjev, lahko berete ločeno.

DS18B20 TEMPERATURNI SENZIRANJE VIT SONCE

DS18B20 TEMPERATURNI SENZIRANJE VIT SONCE

DS18B20 sonda temperaturnega senzorja TPE Komplet za preoblikovanje

DS18B20 sonda temperaturnega senzorja TPE Komplet za preoblikovanje

1 žični temperaturni senzor DS18B20

1 žični temperaturni senzor DS18B20

Uvod v DS18B20
2.1 Glavne značilnosti DS18B20
1. Popolnoma digitalna pretvorba in izhod temperature.
2. Napredna podatkovna komunikacija z enim vodilom.
3. Do 12-bitne ločljivosti, z natančnostjo do ±0,5 stopinj Celzija.
4. Največji delovni cikel pri 12-bitni ločljivosti je 750 milisekundah.
5. Izberete lahko parazitski način delovanja.
6. Temperaturno območje zaznavanja je –55°C ~+125°C (–67°F ~+257°F).
7. Vgrajen EEPROM, funkcija alarma mejne temperature.
8. 64-bitna fotolitografija ROM, vgrajena serijska številka izdelka, priročno za povezavo z več stroji.
9. Različne oblike pakiranja, prilagoditi različnim strojnim sistemom.

Struktura paketa čipov DS18B20

Struktura paketa čipov DS18B20

2.2 Funkcija nožice DS18B20
GND napetost ozemljitev;
DQ enojno podatkovno vodilo;
Napajalna napetost VDD;
NC prazen zatič;

Diagram strukture RAM in EEPROM čipa DS18B20

Diagram strukture RAM in EEPROM čipa DS18B20

2.3 Načelo delovanja in uporaba DS18B20
Zaznavanje temperature DS18B20 in digitalni izhod podatkov sta v celoti integrirana na enem čipu, zato ima močnejšo sposobnost proti motnjam. Njegov delovni cikel lahko razdelimo na dva dela, in sicer zaznavanje temperature in obdelava podatkov.

18B20 ima tri oblike pomnilniških virov. So: bralni pomnilnik ROM, uporablja se za shranjevanje kode DS18B20ID; prvi 8 biti so enovrstična serijska koda (Koda DS18B20 je 19H), naslednje 48 biti so edinstvena serijska številka čipa; zadnji 8 biti so koda CRC (preverjanje redundance) zgoraj navedenega 56 koščki. Podatki so nastavljeni ob izdelavi in ​​jih uporabnik ne more spremeniti. DS18B20 ima skupno 64 bitov ROM-a.

register podatkov RAM, uporablja se za interni izračun in dostop do podatkov, podatki se izgubijo po izpadu električne energije, DS18B20 ima skupno 9 bajtov RAM-a, vsak bajt je 8 koščki. Prvi in ​​drugi bajt sta informacija o vrednosti podatkov po pretvorbi temperature; tretji in četrti bajt sta zrcalna slika uporabnikovega EEPROM-a (običajno uporablja za shranjevanje vrednosti temperaturnega alarma). Njegova vrednost bo osvežena, ko se napajanje ponastavi. Peti bajt je zrcalna slika uporabnikovega tretjega EEPROM-a. 6, 7th, in 8. bajti so registri štetja, ki so zasnovani tako, da uporabnikom omogočajo višjo temperaturno ločljivost. So tudi začasne pomnilniške enote za pretvorbo in izračun notranje temperature. 9. bajt je koda CRC prvega 8 bajtov. EEPROM je obstojen pomnilnik, ki se uporablja za shranjevanje podatkov, ki jih je treba shraniti dlje časa, alarmne vrednosti zgornje in spodnje temperature, in podatke za preverjanje. DS18B20 ima skupno 3 bitov EEPROM-a, v RAM-u pa so zrcalne slike, ki uporabniku olajšajo delovanje.

DS18B20 privzeto deluje v 12-bitnem načinu ločljivosti. 12-bitni podatki, pridobljeni po pretvorbi, so shranjeni v dveh 8-bitnih RAM-ih DS18B20 (Če je temperatura nižja od). Prvi 5 biti v binarni obliki so predznakovni. Če je izmerjena temperatura večja od 0, 12-bitni podatki, pridobljeni po pretvorbi, so shranjeni v dveh 8-bitnih RAM-ih DS18B20 5 Izmerjeno vrednost je treba obrniti 0. Samo pomnožite izmerjeno vrednost z 0.0625 da dobite dejansko temperaturo. Če je temperatura nižja od 0, 12-bitni podatki, pridobljeni po pretvorbi, so shranjeni v dveh 8-bitnih RAM-ih DS18B20 5 Izmerjeno vrednost je treba obrniti 1. Izmerjeno vrednost je treba obrniti, v RAM-u pa so zrcalne slike, ki uporabniku olajšajo delovanje 1, and then multiplied by 0.0625 da dobite dejansko temperaturo. Ali pa uporabite bitno operacijo za pridobivanje temperature: decimalna mesta zasedajo spodnje 4 koščki, in zgornji biti so celoštevilski biti (negativna števila se ne upoštevajo).

2.4 Tabela z navodili ROM za čip DS18B20
1. Preberite ROM [33H] (šestnajstiška ukazna beseda je v oglatih oklepajih).
Ta ukaz krmilniku vodila omogoča branje 64-bitnega ROM-a DS18B20. To navodilo je mogoče uporabiti le, če je na vodilu samo en DS18B20. Če je povezanih več, med komunikacijo pride do konfliktov podatkov.

2. pripni ROM [55H]
Temu navodilu sledi 64-bitna serijska številka, ki jo izda krmilnik. Ko je na vodilu več DS18B20, odzove se lahko le čip z enako serijsko številko, kot jo je izdal krmilnik, in drugi čipi bodo čakali na naslednjo ponastavitev. To navodilo je primerno za povezavo z enim in več čipom.

3. Ladijska soba [CCH]
Zaradi tega navodila se čip ne odziva na kodo ROM. V primeru enega avtobusa, to navodilo lahko uporabite za prihranek časa. Če se to navodilo uporablja, ko je povezanih več čipov, pride do konfliktov podatkov, kar povzroča napake.

4. Iskanje ROM [F0H]
Po inicializaciji čipa, navodilo za iskanje omogoča identifikacijo 64-bitnega ROM-a vseh naprav z izločitvijo, ko je na vodilo priključenih več čipov.

5. Iskanje alarma [VSAK]
V primeru več čipov, navodilo za iskanje alarmnega čipa se odzove samo na čipe, ki izpolnjujejo alarmni pogoj temperature, višje od TH ali nižje od TL. Dokler čip ni izklopljen, alarmno stanje se bo ohranilo, dokler temperatura ni ponovno izmerjena in alarmno stanje ni doseženo.

6. Pišite Beležnica [4EH]
To je navodilo za zapisovanje podatkov v RAM. Dva bajta naknadno zapisanih podatkov bosta shranjena na naslovu 2 (TH alarmnega RAM-a) in naslov 3 (TL alarmnega RAM-a). Postopek zapisovanja lahko prekinete s signalom za ponastavitev.

7. Preberite Scratchpad (branje podatkov iz RAM-a) [BEH]
To navodilo bo prebralo podatke iz RAM-a, začenši z naslovom 0 in do naslova 9, dokončanje branja vseh podatkov RAM-a. Čip omogoča, da signal ponastavitve prekine proces branja, to je, naslednje nepotrebne bajte lahko prezrete, da skrajšate čas branja.

8. Kopiraj Scratchpad (kopirajte podatke RAM v EEPROM) [48H]
To navodilo shrani podatke v RAM v EEPROM, tako da se podatki ne izgubijo, ko je napajanje izklopljeno. Ker je čip zaposlen z obdelavo pomnilnika EEPROM, ko krmilnik pošlje časovno režo za branje, izhodi vodila “0”, in ko so skladiščna dela končana, vodilo bo izšlo “1”.
V parazitskem načinu delovanja, močan pull-up je treba uporabiti takoj po izdaji tega navodila in ga vzdrževati vsaj 10 MS, da se ohrani delovanje čipa.

9. Pretvori T (temperaturna pretvorba) [44H]
Po prejemu tega navodila, čip bo izvedel pretvorbo temperature in shranil pretvorjeno vrednost temperature v 1. in 2. naslov RAM-a. Ker je čip zaposlen s pretvorbo temperature, ko krmilnik pošlje časovno režo za branje, izhodi vodila “0”, in ko so skladiščna dela končana, vodilo bo izšlo “1”. V parazitskem načinu delovanja, močan pull-up je treba uporabiti takoj po izdaji tega navodila in ga vzdrževati vsaj 500 MS, da se ohrani delovanje čipa.

10. Prikličite EEPROM (Kopirajte vrednost alarma iz EEPROM v RAM) [B8H]
To navodilo kopira vrednost alarma v EEPROM v 3. in 4. bajt v RAM-u. Ker je čip zaposlen s kopiranjem, ko krmilnik pošlje časovno režo za branje, izhodi vodila “0”, in ko so skladiščna dela končana, izhodi vodila “1”. Poleg tega, to navodilo se samodejno izvede, ko se čip vklopi in ponastavi. Na ta način, dva alarmna bajtna bita v RAM-u bosta vedno zrcalna slika podatkov v EEPROM-u.

11. Preberite Napajanje (Stikalo za način dela) [B4H]
Po izdaji tega navodila, izda se časovna vrzel za branje, in čip bo vrnil svojo besedo stanja napajanja. “0” je parazitsko stanje moči in “1” je stanje zunanje moči.

2.5 DS18B20 Časovni diagram
2.5.1 Diagram razmerja med ponastavitvijo in odzivom DS18B20
Pred vsako komunikacijo je treba izvesti ponastavitev. Čas ponastavitve, čakalna doba, in odzivni čas mora biti strogo programiran glede na čas.
Časovna vrzel za branje in pisanje DS18B20: Branje in zapisovanje podatkov DS18B20 potrdi bit za obdelavo časovne vrzeli in ukazna beseda za izmenjavo informacij.

Diagram razmerja med ponastavitvijo in odzivom DS18B20

Diagram razmerja med ponastavitvijo in odzivom DS18B20

2.5.2 Zapišite podatke 0 in podatkov 1 na DS18B20
V prvih 15 uS časovne vrzeli zapisa podatkov, krmilnik mora vodilo potegniti nizko, in potem bo to čas vzorčenja čipa za podatke vodila. Čas vzorčenja je 15~60uS. Če krmilnik potegne vodilo visoko med časom vzorčenja, pomeni pisanje “1”, in če krmilnik potegne vodilo nizko, pomeni pisanje “0”.
Vsak bit prenosa mora imeti začetni bit nizke ravni vsaj 15uS, in kasnejše podatke “0” oz “1” je treba dokončati v 45uS.
Čas prenosa celotnega bita mora biti 60~120uS, sicer normalne komunikacije ni mogoče zagotoviti.
Opomba: DS18B20 bere in zapisuje podatke iz nizkega bita.

Zapišite podatke 0 in podatkov 1 na DS18B20

Zapišite podatke 0 in podatkov 1 na DS18B20

2.5.3 Branje podatkov 0 in podatkov 1 od DS18B20
Čas vzorčenja kontrole med časovno vrzeljo branja bi moral biti natančnejši. Med časovno vrzeljo branja, gostitelj mora ustvariti tudi nizko raven vsaj 1uS, da pokaže začetek časa branja. Potem, v 15uS po sprostitvi avtobusa, DS18B20 bo poslal notranji podatkovni bit. V tem času, če kontrola ugotovi, da je avtobus visok, to pomeni branje “1”, in če je avtobus nizek, to pomeni branje podatkov “0”. Pred branjem vsakega bitja, krmilnik doda startni signal.

Branje podatkov 0 in podatkov 1 od DS18B20

Branje podatkov 0 in podatkov 1 od DS18B20

Opomba: Podatkovni bit je treba prebrati znotraj 15 uS od začetka bralne vrzeli, da se zagotovi pravilna komunikacija.

Med komunikacijo, 8 koščki “0” oz “1” se uporabljajo kot bajt, in branje ali pisanje bajta se začne od nizkega bita.

2.5.4 Vrstni red odčitavanja temperature enkrat (samo en DS18B20 na avtobusu)

1. Pošlji signal za ponastavitev
2. Zazna odzivni signal
3. Pošlji 0xCC
4. Pošlji 0x44
5. Pošlji signal za ponastavitev
6. Zazna odzivni signal
7. Napišite 0xcc
8. Napišite 0xbe
9. Zanka 8 krat za branje nizkega bajta temperature
10. Zanka 8 krat za branje visokega bajta temperature
11. Sintetizirajte in obdelajte 16-bitne temperaturne podatke

3. Koda voznika

3.1 DS18B20.c
#vključiti “ds18b20.h”
/*
funkcija: Inicializacija DS18B20
Strojna povezava: PB15
*/
void DS18B20_Init(praznina)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Pull-up
}

/*
funkcija: Preverite, ali naprava DS18B20 obstaja
Povratna vrednost: 1 pomeni, da naprava ne obstaja 0 pomeni, da je naprava normalna
*/
u8 DS18B20_CheckDevice(praznina) //Vsebuje impulz za ponastavitev, detekcijski impulz
{
DS18B20_IZHODNI_NAČIN();//Inicializiraj v izhodni način
DS18B20_OUT=0; //Ustvari ponastavitveni impulz
DelayUs(750); //Ustvari nizko raven 750 us
DS18B20_OUT=1; //Sprostite vodilo
DelayUs(15); //Počakajte na odgovor DS18B20
če(DS18B20_CleckAck())//Zaznavanje utripa obstoja
{
vrnitev 1;
}
vrnitev 0;
}

/*
funkcija: Zaznavanje impulza obstoja naprave DS18B20
Povratna vrednost: 1 označuje napako 0 kaže normalno
*/
u8 DS18B20_CleckAck(praznina)
{
u8 cnt=0;
DS18B20_VHODNI_NAČIN();//Inicializiraj v način vnosa
medtem ko(DS18B20_IN&&cnt<200) //Počakajte na impulz obstoja odziva DS18B20
{
DelayUs(1);
cnt++;
}
če(cnt>=200)vrnitev 1; //napaka

cnt=0;
medtem ko((!DS18B20_IN)&&cnt<240) //počakajte, da DS18B20 sprosti vodilo
{
DelayUs(1);
cnt++;
}
če(cnt>=240)vrnitev 1; //napaka
vrnitev 0;
}

/*
funkcija: Napišite bajt
Najprej se naučite malo pisati.
*/
void DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_IZHODNI_NAČIN(); //Inicializiraj v izhodni način
za(i=0;i<8;i ++)
{
DS18B20_OUT=0; //Ustvari časovno vrzel pri pisanju (napiši začetek)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Pošlji dejanski bit podatkov
DelayUs(60); //Počakajte na zaključek pisanja
DS18B20_OUT=1; //Sprostite avtobus in se pripravite na naslednji prenos
cmd>>=1; //Nadaljujte s pošiljanjem naslednjega bita podatkov
}
}

/*
funkcija: Preberi bajt
Najprej se naučite malo brati.
*/
u8 DS18B20_ReadByte(praznina)
{
u8 i,podatek=0;
za(i=0;i<8;i ++)
{
DS18B20_IZHODNI_NAČIN(); //Inicializiraj v izhodni način
DS18B20_OUT=0; //Ustvarite časovno vrzel pri branju (brati začetek)
DelayUs(2);
DS18B20_OUT=1; //Sprostite vodilo
DS18B20_VHODNI_NAČIN(); //Inicializiraj v način vnosa
DelayUs(8); //Počakajte na izpis podatkov DS18B20
podatke>>=1; //Napolnite visok košček z 0, privzeto je 0
če(DS18B20_IN) podatke|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Sprostite vodilo, počakajte na branje naslednjega bitja podatkov
}
povratne podatke;
}

/*
funkcija: Enkrat preberite podatke o temperaturi DS18B20
Povratna vrednost: podatki o temperaturi se preberejo
Upoštevana situacija: Na vodilo je priključen samo en DS18B20
*/
u16 DS18B20_ReadTemp(praznina)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Pošlji impulz ponastavitve, zaznati utrip
DS18B20_WriteByte(0xCC); //Preskoči zaznavanje zaporedja ROM
DS18B20_WriteByte(0x44); //Začnite pretvorbo temperature

//Počakajte, da se pretvorba temperature zaključi
medtem ko(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Pošlji impulz ponastavitve, zaznati utrip
DS18B20_WriteByte(0xCC); //Preskoči zaznavanje zaporedja ROM
DS18B20_WriteByte(0xBE); //Odčitajte temperaturo

temp_L=DS18B20_ReadByte(); //Preberite podatke o nizki temperaturi
temp_H=DS18B20_ReadByte(); //Preberite podatke o visoki temperaturi
temp=temp_L|(temp_H<<8); //Sintetizirana temperatura
povratna temp;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#definirajte DS18B20_H
#vključiti “stm32f10x.h”
#vključiti “sys.h”
#vključiti “zamuda.h”
#vključiti “ds18b20.h”
#vključiti “USART.H”

/*Vmesnik paketa*/

//Inicializirajte DS18B20 v način vnosa
#definirajte DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x80000000;}

//Inicializirajte DS18B20 v izhodni način
#definirajte DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO port izhod
#definirajte DS18B20_OUT PBout(15)

//DS18B20 IO port vhod
#definirajte DS18B20_IN PBin(15)

//Deklaracija funkcije
u8 DS18B20_CleckAck(praznina);
u8 DS18B20_CheckDevice(praznina);
void DS18B20_Init(praznina);
u16 DS18B20_ReadTemp(praznina);
u8 DS18B20_ReadByte(praznina);
void DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Funkcija zakasnitve

/*
funkcija: Zamuda pri nas
*/
neveljavni DelayUs(int us)
{
#ifdef _SYSTICK_IRQ_
int i,j;
za(i=0;iVAL=0; //Vrednost števca CNT
SysTick->LOAD=9*us; //9 pomeni 1us
SysTick->CTRL|=1<<0; //Zaženi časovnik
naredi
{
tmp=SysTick->CTRL; //Preberi stanje
}medtem ko((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VRED=0; //Vrednost števca CNT
SysTick->CTRL&=~(1<<0); //Izklopite časovnik
#endif
};i ++)>

3.4 main.c Pokličite DS18B20, da preberete temperaturo in jo natisnete na serijska vrata

#vključiti “stm32f10x.h”

#vključiti “ds18b20.h”

u8 DS18B20_ROM[8]; //Shranite 64-bitno kodo ROM DS18B20

int main(praznina)
{
u16 temp;
USARTx_Heat(USART1,72,115200);//Inicializacija serijskih vrat 1
DS18B20_Toplota(); //Inicializacija DS18B20

/*1. Preberite 64-bitno kodo ROM DS18B20*/
//Pošlji impulz ponastavitve, zaznavanje utripa obstoja
medtem ko(DS18B20_CheckDevice())
{
printf(“Naprava DS18B20 ne obstaja!\n”);
DelayMs(500);
}
//Pošljite ukaz za branje 64-bitne kode ROM
DS18B20_WriteByte(0x33);

//Zanka za branje 64-bitne kode ROM
za(i=0;i<8;i ++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]u8 DS18B20_ROM”,i,DS18B20_ROM[i]);
}

medtem ko(1)
{
/*2. Istočasno upravljajte vse DS18B20 na vodilu, da začnete pretvarjati temperaturo*/
DS18B20_CheckDevice(); //Pošlji impulz ponastavitve, zaznati utrip
DS18B20_WriteByte(0xCC); //Preskoči zaznavanje zaporedja ROM
DS18B20_WriteByte(0x44); //Začnite pretvorbo temperature (naj vsi DS18B20 na vodilu pretvarjajo temperaturo)
DelayMs(500); //Počakajte, da se končajo vse pretvorbe temperature DS18B20 na liniji

/*3. Enotno ciljno odčitavanje temperature vsakega DS18B20*/
DS18B20_CheckDevice(); //Pošlji impulz ponastavitve, zaznati utrip
DS18B20_WriteByte(0x55); //Pošlji ukaz za ujemanje z ROM-om
za(i=0;i<8;i ++) //Pošlji 64-bitno kodo
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Odčitajte temperaturo
temp=DS18B20_ReadByte(); //Branje temperaturnih podatkov nizkega reda
temp|=DS18B20_ReadByte()<<8; //Branje temperaturnih podatkov visokega reda
printf(“temp2=%fn”,temp>>4,temp&0xF);
printf(“x55”,temp*0,0625);

DelayMs(500);
}
}