Tehnologija senzora temperature

Dizajn DS18B20 digitalnog temperaturnog senzora za STM32

DS18B20 Komplet sonde od nehrđajućeg čelika za senzor temperature

DS18B20 je digitalni temperaturni senzor koji koristi jedan tajming sabirnice za komunikaciju s domaćinom. Samo 1 Žica je potrebna da se završi očitavanje podataka o temperaturi;

DS18B20 ima ugrađeni 64-bitni serijski broj proizvoda za laku identifikaciju. Na više DS18B20 senzora može se povezati 1 Žica, i kroz 64-bitnu autentifikaciju identiteta, informacije o temperaturi prikupljene od različitih senzora mogu se čitati zasebno.

DS18B20 Komplet sonde od nehrđajućeg čelika za senzor temperature

DS18B20 Komplet sonde od nehrđajućeg čelika za senzor temperature

DS18B20 sonda temperaturnog senzora TPE Komplet za prelijevanje

DS18B20 sonda temperaturnog senzora TPE Komplet za prelijevanje

1 žični senzor temperature DS18B20

1 žični senzor temperature DS18B20

Uvod u DS18B20
2.1 Glavne karakteristike DS18B20
1. Potpuno digitalna konverzija i izlaz temperature.
2. Napredna komunikacija podataka jednom sabirnicom.
3. Do 12-bitne rezolucije, sa tačnošću do ±0,5 stepeni Celzijusa.
4. Maksimalni radni ciklus pri 12-bitnoj rezoluciji je 750 milisekundi.
5. Parazitski način rada se može odabrati.
6. Raspon temperature detekcije je –55°C ~+125°C (–67° F ~+257° F).
7. Ugrađeni EEPROM, funkcija alarma ograničenja temperature.
8. 64-bit fotolitografija ROM, ugrađeni serijski broj proizvoda, pogodan za povezivanje više mašina.
9. Razni oblici pakovanja, prilagoditi različitim hardverskim sistemima.

Struktura paketa čipa DS18B20

Struktura paketa čipa DS18B20

2.2 DS18B20 funkcija pina
GND napon uzemljenja;
DQ jedna sabirnica podataka;
VDD napon napajanja;
NC prazan pin;

Strukturni dijagram RAM-a i EEPROM čipa DS18B20

Strukturni dijagram RAM-a i EEPROM čipa DS18B20

2.3 DS18B20 princip rada i primjena
DS18B20 detekcija temperature i digitalni izlaz podataka su potpuno integrisani na jednom čipu, tako da ima jaču sposobnost protiv smetnji. Njegov jedan radni ciklus može se podijeliti na dva dijela, odnosno detekcija temperature i obrada podataka.

18B20 ima tri oblika memorijskih resursa. Jesu: ROM memorija samo za čitanje, koristi se za pohranjivanje DS18B20ID koda; prvi 8 bitovi su jednoredni serijski kod (DS18B20 kod je 19H), sledeće 48 bitovi su jedinstveni serijski broj čipa; posljednji 8 bitovi su CRC kod (provjera redundancije) gore navedenog 56 bits. Podaci se postavljaju u proizvodnji i korisnik ih ne može mijenjati. DS18B20 ima ukupno 64 bitovi ROM-a.

RAM registar podataka, koristi se za interni proračun i pristup podacima, podaci se gube nakon nestanka struje, DS18B20 ima ukupno 9 bajtova RAM-a, svaki bajt je 8 bits. Prvi i drugi bajt su informacije o vrijednosti podataka nakon konverzije temperature; treći i četvrti bajt su zrcalna slika korisničkog EEPROM-a (obično se koristi za skladištenje vrijednosti alarma temperature). Njegova vrijednost će se osvježiti kada se napajanje resetuje. Peti bajt je zrcalna slika trećeg EEPROM-a korisnika. 6, 7th, a 8. bajtovi su registri brojanja, koji su dizajnirani da omoguće korisnicima da dobiju višu temperaturnu rezoluciju. Oni su takođe privremene jedinice za skladištenje za unutrašnju konverziju i proračun temperature. 9. bajt je CRC kod prvog 8 bajtova. EEPROM je nepromjenjiva memorija koja se koristi za pohranjivanje podataka koje je potrebno dugo čuvati, gornje i donje alarmne vrijednosti temperature, i podatke o verifikaciji. DS18B20 ima ukupno 3 bitovi EEPROM-a, i postoje zrcalne slike u RAM-u kako bi se olakšao rad korisnika.

DS18B20 radi u 12-bitnoj rezoluciji prema zadanim postavkama. 12-bitni podaci dobiveni nakon konverzije pohranjeni su u dva 8-bitna RAM-a DS18B20 (prva dva bajta). Prvi 5 bitovi u binarnosti su bitovi predznaka. Ako je izmjerena temperatura veća od 0, ove 5 bitovi su 0. Samo pomnožite izmjerenu vrijednost sa 0.0625 da dobijete stvarnu temperaturu. Ako je temperatura manja od 0, ove 5 bitovi su 1. Izmjerenu vrijednost treba invertirati, dodao je 1, a zatim pomnoženo sa 0.0625 da dobijete stvarnu temperaturu. Ili koristite bitnu operaciju za izdvajanje temperature: decimalna mjesta zauzimaju niže 4 bits, a gornji bitovi su cijeli brojevi (negativni brojevi se ne uzimaju u obzir).

2.4 DS18B20 čip ROM tablica instrukcija
1. Pročitaj ROM [33H] (heksadecimalna komandna reč je u uglastim zagradama).
Ova komanda omogućava kontroleru magistrale da čita 64-bitni ROM DS18B20. Ova instrukcija se može koristiti samo kada postoji samo jedan DS18B20 na sabirnici. Ako je povezano više njih, sukobi podataka će se pojaviti tokom komunikacije.

2. atch ROM [55H]
Nakon ove upute slijedi 64-bitni serijski broj koji izdaje kontroler. Kada postoji više DS18B20 na sabirnici, samo čip sa istim serijskim brojem kao onaj koji je izdao kontroler može odgovoriti, a ostali čipovi će čekati na sljedeće resetiranje. Ovo uputstvo je pogodno za povezivanje sa jednim i više čipova.

3. Preskoči ROM [CCH]
Ova instrukcija čini da čip ne reaguje na ROM kod. U slučaju jednog autobusa, ovo uputstvo se može koristiti za uštedu vremena. Ako se ova instrukcija koristi kada je spojeno više čipova, doći će do sukoba podataka, što rezultira greškama.

4. Pretraži ROM [F0H]
Nakon što se čip inicijalizira, instrukcija za pretragu omogućava da se 64-bitni ROM svih uređaja identifikuje eliminacijom kada je više čipova povezano na sabirnicu.

5. Pretraga alarma [SVAKI]
U slučaju više čipova, instrukcija za pretraživanje alarmnog čipa odgovara samo na čipove koji ispunjavaju alarmni uvjet temperature veće od TH ili manje od TL. Sve dok čip nije isključen, stanje alarma će se održavati sve dok se temperatura ponovo ne izmjeri i stanje alarma se ne postigne.

6. Write Scratchpad [4EH]
Ovo je instrukcija za pisanje podataka u RAM. Dva bajta podataka koji su naknadno napisani biće pohranjeni na adresi 2 (TH alarmne memorije) i adresu 3 (TL alarmne memorije). Proces pisanja može biti prekinut signalom resetovanja.

7. Pročitajte Scratchpad (čitanje podataka iz RAM-a) [BEH]
Ova instrukcija će čitati podatke iz RAM-a, počevši od adrese 0 i do adrese 9, završava čitanje cjelokupnih RAM podataka. Čip omogućava da signal za resetovanje prekine proces čitanja, to jest, naknadni nepotrebni bajtovi se mogu zanemariti kako bi se smanjilo vrijeme čitanja.

8. Kopiraj Scratchpad (kopirajte RAM podatke u EEPROM) [48H]
Ova instrukcija pohranjuje podatke u RAM u EEPROM tako da podaci neće biti izgubljeni kada se napajanje isključi. Pošto je čip zauzet obradom EEPROM memorije, kada kontroler pošalje vremenski slot za čitanje, izlaze sa sabirnice “0”, i kada su radovi na skladištenju završeni, sabirnica će izaći “1”.
U parazitskom režimu rada, snažno povlačenje se mora koristiti odmah nakon izdavanja ove instrukcije i održavati najmanje 10 MS da bi se održao rad čipa.

9. Pretvori T (konverzija temperature) [44H]
Nakon prijema ovog uputstva, čip će izvršiti konverziju temperature i pohraniti konvertiranu vrijednost temperature u 1. i 2. adresu RAM-a. Pošto je čip zauzet obradom konverzije temperature, kada kontroler pošalje vremenski slot za čitanje, izlaze sa sabirnice “0”, i kada su radovi na skladištenju završeni, sabirnica će izaći “1”. U parazitskom režimu rada, snažno povlačenje se mora koristiti odmah nakon izdavanja ove instrukcije i održavati najmanje 500 MS za održavanje rada čipa.

10. Pozovite EEPROM (Kopirajte vrijednost alarma iz EEPROM-a u RAM) [B8H]
Ova instrukcija kopira vrijednost alarma u EEPROM-u u 3. i 4. bajt u RAM-u. Pošto je čip zauzet obradom kopiranja, kada kontroler pošalje vremenski slot za čitanje, izlaze sa sabirnice “0”, i kada su radovi na skladištenju završeni, izlaze sa sabirnice “1”. Osim toga, ova instrukcija će se automatski izvršiti kada se čip uključi i resetuje. Na ovaj način, dva bita alarmnog bajta u RAM-u će uvijek biti zrcalna slika podataka u EEPROM-u.

11. Pročitajte Napajanje (Prekidač radnog režima) [B4H]
Nakon izdavanja ovog uputstva, izdaje se vremenski razmak za čitanje, a čip će vratiti svoju riječ statusa napajanja. “0” je parazitsko stanje snage i “1” je stanje eksternog napajanja.

2.5 DS18B20 Vremenski dijagram
2.5.1 DS18B20 Reset i dijagram odnosa odgovora
Reset se mora izvršiti prije svake komunikacije. Vreme resetovanja, vrijeme čekanja, a vrijeme odgovora treba striktno programirati prema vremenu.
DS18B20 vremenski razmak čitanja i pisanja: Čitanje i pisanje podataka DS18B20 potvrđeno je bitom za obradu vremenskog razmaka i komandnom riječju za razmjenu informacija.

DS18B20 reset i dijagram odnosa odgovora

DS18B20 reset i dijagram odnosa odgovora

2.5.2 Upišite podatke 0 i podatke 1 do DS18B20
U prvih 15uS vremenskog razmaka podataka za upisivanje, bus mora biti nisko povučen od strane kontrolera, i tada će to biti vrijeme uzorkovanja čipa za podatke sabirnice. Vrijeme uzorkovanja je 15~60uS. Ako kontroler povuče sabirnicu visoko tokom vremena uzorkovanja, znači pisanje “1”, i ako kontroler povuče sabirnicu nisko, znači pisanje “0”.
Svaki bit prijenosa treba imati početni bit niskog nivoa od najmanje 15uS, i naknadni podaci “0” ili “1” treba završiti u roku od 45uS.
Vrijeme prijenosa cijelog bita treba održavati na 60~120uS, inače se ne može garantovati normalna komunikacija.
Napomena: DS18B20 čita i upisuje podatke iz niskog bita.

Upišite podatke 0 i podatke 1 do DS18B20

Upišite podatke 0 i podatke 1 do DS18B20

2.5.3 Čitanje podataka 0 i podatke 1 od DS18B20
Vrijeme uzorkovanja kontrole tokom vremenskog razmaka očitavanja trebalo bi da bude preciznije. Tokom vremenskog razmaka za čitanje, domaćin također mora generirati nizak nivo od najmanje 1uS da bi označio početak vremena čitanja. Onda, za 15uS nakon puštanja sabirnice, DS18B20 će poslati interni bit podataka. U ovo vrijeme, ako kontrola utvrdi da je sabirnica visoka, to znači čitanje “1”, i ako je autobus nizak, to znači čitanje podataka “0”. Prije čitanja svakog bita, kontroler dodaje startni signal.

Pročitajte podatke 0 i podatke 1 od DS18B20

Pročitajte podatke 0 i podatke 1 od DS18B20

Napomena: Bit podataka mora biti pročitan unutar 15uS od početka razmaka čitanja kako bi se osigurala ispravna komunikacija.

Tokom komunikacije, 8 bits of “0” ili “1” se koriste kao bajt, a čitanje ili pisanje bajta počinje od nižeg bita.

2.5.4 Redoslijed očitavanja temperature jednom (samo jedan DS18B20 u autobusu)

1. Pošaljite signal za resetovanje
2. Otkrivanje signala odgovora
3. Pošalji 0xCC
4. Pošalji 0x44
5. Pošaljite signal za resetovanje
6. Otkrivanje signala odgovora
7. Napišite 0xcc
8. Napišite 0xbe
9. Loop 8 puta za očitavanje niskog bajta temperature
10. Loop 8 puta za čitanje visokog bajta temperature
11. Sintetizirati 16-bitne podatke o temperaturi i obraditi

3. Šifra vozača

3.1 DS18B20.c
#uključiti “ds18b20.h”
/*
Funkcija: DS18B20 inicijalizacija
Hardverska veza: PB15
*/
void DS18B20_Init(void)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Pull-up
}

/*
Funkcija: Provjerite postoji li uređaj DS18B20
Povratna vrijednost: 1 znači da uređaj ne postoji 0 znači da je uređaj normalan
*/
u8 DS18B20_Provjera uređaja(void) //Sadrži reset puls, puls detekcije
{
DS18B20_OUTPUT_MODE();//Inicijalizirajte u izlazni način
DS18B20_OUT=0; //Generirajte reset puls
DelayUs(750); //Generirajte nizak nivo od 750us
DS18B20_OUT=1; //Puštanje autobusa
DelayUs(15); //Sačekajte odgovor DS18B20
ako(DS18B20_CleckAck())//Otkrivanje pulsa postojanja
{
povratak 1;
}
povratak 0;
}

/*
Funkcija: Otkrivanje pulsa postojanja DS18B20 uređaja
Povratna vrijednost: 1 ukazuje na grešku 0 označava normalno
*/
u8 DS18B20_CleckAck(void)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicijalizirajte u način unosa
dok(DS18B20_IN&&cnt<200) //Pričekajte impuls postojanja odgovora DS18B20
{
DelayUs(1);
cnt++;
}
ako(cnt>=200)povratak 1; //greška

cnt=0;
dok((!DS18B20_IN)&&cnt<240) //sačekajte da DS18B20 pusti sabirnicu
{
DelayUs(1);
cnt++;
}
ako(cnt>=240)povratak 1; //greška
povratak 0;
}

/*
Funkcija: Napišite bajt
Prvo nauči malo pisati.
*/
void DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicijalizirajte u izlazni način
za(i=0;i<8;i++)
{
DS18B20_OUT=0; //Generirajte vremenski razmak pisanja (početak pisanja)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Pošaljite stvarni bit podataka
DelayUs(60); //Sačekajte da se upis završi
DS18B20_OUT=1; //Pustite autobus i pripremite se za sljedeći prijenos
cmd>>=1; //Nastavite slati sljedeći bit podataka
}
}

/*
Funkcija: Pročitaj bajt
Prvo nauči malo čitati.
*/
u8 DS18B20_ReadByte(void)
{
u8 i,podaci=0;
za(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //Inicijalizirajte u izlazni način
DS18B20_OUT=0; //Generirajte vremensku prazninu za čitanje (pročitaj početak)
DelayUs(2);
DS18B20_OUT=1; //Puštanje autobusa
DS18B20_INPUT_MODE(); //Inicijalizirajte u način unosa
DelayUs(8); //Pričekajte izlaz podataka DS18B20
podaci>>=1; //Napunite visoki dio sa 0, default is 0
ako(DS18B20_IN) podaci|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Puštanje autobusa, sačekajte čitanje sljedećeg bita podataka
}
vratiti podatke;
}

/*
Funkcija: Jednom pročitajte temperaturne podatke DS18B20
Povratna vrijednost: očitani podaci o temperaturi
Razmotrena situacija: Na sabirnicu je povezan samo jedan DS18B20
*/
u16 DS18B20_ReadTemp(void)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Pošaljite puls za resetovanje, detektovati puls
DS18B20_WriteByte(0xCC); //Preskoči detekciju ROM sekvence
DS18B20_WriteByte(0x44); //Pokrenite konverziju temperature

//Pričekajte da se konverzija temperature završi
dok(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Pošaljite puls za resetovanje, detektovati puls
DS18B20_WriteByte(0xCC); //Preskoči detekciju ROM sekvence
DS18B20_WriteByte(0xBE); //Očitajte temperaturu

temp_L=DS18B20_ReadByte(); //Pročitajte podatke o niskim temperaturama
temp_H=DS18B20_ReadByte(); //Pročitajte podatke o visokoj temperaturi
temp=temp_L|(temp_H<<8); //Sintetizovana temperatura
povratna temp;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#definirati DS18B20_H
#uključiti “stm32f10x.h”
#uključiti “sys.h”
#uključiti “kašnjenje.h”
#uključiti “ds18b20.h”
#uključiti “usart.h”

/*Interfejs paketa*/

//Inicijalizirajte DS18B20 u način unosa
#definirajte DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}

//Inicijalizirajte DS18B20 u izlazni mod
#definirajte DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO port izlaz
#definirati DS18B20_OUT PBout(15)

//DS18B20 IO ulaz za port
#definirati DS18B20_IN PBin(15)

//Deklaracija funkcije
u8 DS18B20_CleckAck(void);
u8 DS18B20_Provjera uređaja(void);
void DS18B20_Init(void);
u16 DS18B20_ReadTemp(void);
u8 DS18B20_ReadByte(void);
void DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Funkcija odgode

/*
Funkcija: Kašnjenje u nama
*/
void DelayUs(int us)
{
#ifdef _SYSTICK_IRQ_
int i,j;
za(i=0;iVAL=0; //Vrijednost CNT brojača
SysTick->LOAD=9*us; //9 znači 1us
SysTick->CTRL|=1<<0; //Start timer
uradi
{
tmp=SysTick->CTRL; //Read status
}dok((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //Vrijednost CNT brojača
SysTick->CTRL&=~(1<<0); //Isključite tajmer
#endif
};i++)>

3.4 main.c Pozovite DS18B20 da pročitate temperaturu i odštampate je na serijski port

#uključiti “stm32f10x.h”

#uključiti “ds18b20.h”

u8 DS18B20_ROM[8]; //Sačuvajte 64-bitni ROM kod DS18B20

int main(void)
{
u16 temp;
USARTx_Heat(USART1,72,115200);//Inicijalizacija serijskog porta 1
DS18B20_Heat(); //DS18B20 inicijalizacija

/*1. Pročitajte 64-bitni ROM kod DS18B20*/
//Pošaljite puls za resetovanje, detektovati puls postojanja
dok(DS18B20_CheckDevice())
{
printf(“DS18B20 uređaj ne postoji!\n”);
DelayMs(500);
}
//Pošaljite naredbu za čitanje 64-bitnog ROM koda
DS18B20_WriteByte(0x33);

//Petlja čita 64-bitni ROM kod
za(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%Xn”,i,DS18B20_ROM[i]);
}

dok(1)
{
/*2. Istovremeno upravljajte svim DS18B20 na sabirnici da započnete pretvaranje temperature*/
DS18B20_CheckDevice(); //Pošaljite puls za resetovanje, detektovati puls
DS18B20_WriteByte(0xCC); //Preskoči detekciju ROM sekvence
DS18B20_WriteByte(0x44); //Pokrenite konverziju temperature (neka svi DS18B20 na sabirnici pretvaraju temperaturu)
DelayMs(500); //Pričekajte da se završe sve konverzije temperature DS18B20 na liniji

/*3. Jedno ciljano očitavanje temperature svakog DS18B20*/
DS18B20_CheckDevice(); //Pošaljite puls za resetovanje, detektovati puls
DS18B20_WriteByte(0x55); //Pošaljite naredbu koja odgovara ROM-u
za(i=0;i<8;i++) //Pošalji 64-bitni kod
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Očitajte temperaturu
temp=DS18B20_ReadByte(); //Čitanje podataka o temperaturi nižeg reda
temp|=DS18B20_ReadByte()<<8; //Pročitajte podatke o temperaturi visokog reda
printf(“temp1=%d.%dn”,temp>>4,temp&0xF);
printf(“temp2=%fn”,temp*0,0625);

DelayMs(500);
}
}