DS18B20 je digitalni temperaturni senzor koji koristi jednokratnu sabirnicu vremena za komunikaciju s hostom. Samo 1 Žica je potrebna za dovršetak očitanja podataka o temperaturi;
DS18B20 ima ugrađeni 64-bitni serijski broj proizvoda za jednostavnu identifikaciju. Moguće je spojiti više senzora DS18B20 1 Žica, i kroz 64-bitnu autentifikaciju identiteta, informacije o temperaturi prikupljene s različitih senzora mogu se zasebno očitati.
Uvod u DS18B20
2.1 Glavne karakteristike DS18B20
1. Potpuno digitalna pretvorba i izlaz temperature.
2. Napredna podatkovna komunikacija s jednom sabirnicom.
3. Do 12-bitne rezolucije, s točnošću do ±0,5 stupnjeva Celzijusa.
4. Maksimalni radni ciklus pri 12-bitnoj rezoluciji je 750 milisekundi.
5. Može se odabrati parazitski način rada.
6. Raspon temperature detekcije je –55°C ~+125°C (–67°F ~+257°F).
7. Ugrađeni EEPROM, funkcija alarma ograničenja temperature.
8. 64-malo fotolitografija ROM, ugrađeni serijski broj proizvoda, pogodan za spajanje na više strojeva.
9. Razni oblici pakiranja, prilagoditi različitim hardverskim sustavima.
2.2 Funkcija pina DS18B20
GND napon uzemljenja;
DQ jedna podatkovna sabirnica;
VDD napon napajanja;
NC prazna igla;
2.3 DS18B20 princip rada i primjena
DS18B20 detekcija temperature i digitalni izlaz podataka potpuno su integrirani na jednom čipu, tako da ima jaču sposobnost sprječavanja smetnji. Njegov jedan radni ciklus može se podijeliti u dva dijela, naime detekcija temperature i obrada podataka.
18B20 ima tri oblika memorijskih resursa. Oni su: ROM memorija samo za čitanje, koristi se za pohranu DS18B20ID koda; prvi 8 bitovi su jednoredni serijski kod (DS18B20 kod je 19H), sljedeće 48 bitovi su jedinstveni serijski broj čipa; posljednji 8 bitovi su CRC kod (provjera redundantnosti) od navedenog 56 bitovi. Podaci su postavljeni u proizvodnji i korisnik ih ne može mijenjati. DS18B20 ima ukupno 64 komadići ROM-a.
RAM registar podataka, koristi se za interni izračun i pristup podacima, podaci se gube nakon nestanka struje, DS18B20 ima ukupno 9 bajtova RAM-a, svaki bajt je 8 bitovi. Prvi i drugi bajt su informacije o vrijednosti podataka nakon pretvorbe temperature; treći i četvrti bajt su zrcalna slika korisničkog EEPROM-a (obično se koristi za pohranu vrijednosti temperaturnog alarma). Njegova vrijednost će se osvježiti kada se napajanje ponovno postavi. Peti bajt je zrcalna slika trećeg EEPROM-a korisnika. 6, 7th, and 8th bytes are count registers, which are designed to allow users to obtain higher temperature resolution. They are also temporary storage units for internal temperature conversion and calculation. The 9th byte is the CRC code of the first 8 bajtova. EEPROM is a non-volatile memory used to store data that needs to be saved for a long time, upper and lower temperature alarm values, and verification data. DS18B20 ima ukupno 3 bits of EEPROM, and there are mirror images in RAM to facilitate user operation.
DS18B20 works in 12-bit resolution mode by default. The 12-bit data obtained after conversion is stored in two 8-bit RAMs of DS18B20 (the first two bytes). The first 5 bits in binary are sign bits. If the measured temperature is greater than 0, these 5 bits are 0. Just multiply the measured value by 0.0625 to get the actual temperature. Ako je temperatura manja od 0, these 5 bits are 1. Izmjerenu vrijednost treba obrnuti, dodao/la 1, a zatim pomnožen sa 0.0625 to get the actual temperature. Ili upotrijebite bitnu operaciju za izdvajanje temperature: decimalna mjesta zauzimaju niže 4 bitovi, a gornji bitovi su cjelobrojni bitovi (negativni brojevi se ne uzimaju u obzir).
2.4 Tablica s uputama za ROM čip DS18B20
1. Čitaj ROM [33H] (heksadecimalna naredbena riječ je u uglatim zagradama).
Ova naredba omogućuje kontroleru sabirnice čitanje 64-bitnog ROM-a DS18B20. Ova se instrukcija može koristiti samo kada postoji samo jedan DS18B20 na sabirnici. Ako je spojeno više njih, tijekom komunikacije doći će do sukoba podataka.
2. spojiti ROM [55H]
Nakon ove upute slijedi 64-bitni serijski broj koji izdaje upravljač. Kada je više DS18B20 na autobusu, može odgovoriti samo čip s istim serijskim brojem kao onaj koji je izdao kontroler, a ostali će čipovi čekati sljedeći reset. Ova je uputa prikladna za povezivanje s jednim i više čipova.
3. Preskoči ROM [CCH]
Ova uputa čini da čip ne reagira na ROM kod. U slučaju jednog autobusa, ova se uputa 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 pogreškama.
4. Traži ROM [F0H]
Nakon što se čip inicijalizira, uputa za pretraživanje omogućuje da se 64-bitni ROM svih uređaja identificira uklanjanjem kada je više čipova spojeno na sabirnicu.
5. Pretraga alarma [SVAKI]
U slučaju više čipova, uputa za traženje alarmnog čipa odgovara samo na čipove koji ispunjavaju alarmni uvjet temperature više od TH ili niže od TL. Sve dok čip nije isključen, stanje alarma će se održavati sve dok se temperatura ponovno ne izmjeri i stanje alarma se ne postigne.
6. Pišite Scratchpad [4EH]
Ovo je uputa za pisanje podataka u RAM. Dva bajta naknadno upisanih podataka bit će pohranjena na adresi 2 (TH alarmnog RAM-a) i adresu 3 (TL alarmnog RAM-a). Proces pisanja može se prekinuti signalom resetiranja.
7. Pročitajte Scratchpad (čitati podatke iz RAM-a) [BEH]
Ova instrukcija će očitati podatke iz RAM-a, počevši od adrese 0 i do adrese 9, dovršetak čitanja cjelokupnih RAM podataka. Čip omogućuje signalu resetiranja da prekine proces očitavanja, to jest, sljedeći nepotrebni bajtovi mogu se zanemariti kako bi se smanjilo vrijeme čitanja.
8. Kopiraj Scratchpad (kopirati RAM podatke u EEPROM) [48H]
Ova uputa pohranjuje podatke u RAM u EEPROM tako da se podaci ne izgube kada se napajanje isključi. Budući da je čip zauzet obradom EEPROM memorije, kada kontroler pošalje vremenski utor za čitanje, izlaze sabirnice “0”, a kada se posao skladištenja završi, izlaz će sabirnica “1”.
U parazitskom načinu rada, snažno povlačenje mora se upotrijebiti odmah nakon izdavanja ove upute i održavati najmanje 10 MS kako bi se održao rad čipa.
9. Pretvori T (pretvorba temperature) [44H]
Nakon primitka ove upute, čip će izvršiti pretvorbu temperature i pohraniti pretvorenu vrijednost temperature u 1. i 2. adresu RAM-a. Budući da je čip zauzet obradom pretvorbe temperature, kada kontroler pošalje vremenski utor za čitanje, izlaze sabirnice “0”, a kada se posao skladištenja završi, izlaz će sabirnica “1”. U parazitskom načinu rada, snažno povlačenje mora se upotrijebiti odmah nakon izdavanja ove upute i održavati najmanje 500 MS kako bi se održao rad čipa.
10. Prisjetite se EEPROM-a (Kopirajte vrijednost alarma iz EEPROM-a u RAM) [B8H]
Ova uputa kopira vrijednost alarma u EEPROM-u u 3. i 4. bajt u RAM-u. Budući da je čip zauzet obradom kopiranja, kada kontroler pošalje vremenski utor za čitanje, izlaze sabirnice “0”, a kada se posao skladištenja završi, izlaze sabirnice “1”. Uz to, ova će se instrukcija automatski izvršiti kada se čip uključi i resetira. Na ovaj način, dva bita bajta alarma u RAM-u uvijek će biti zrcalna slika podataka u EEPROM-u.
11. Pročitajte Napajanje (Prekidač načina rada) [B4H]
Nakon izdavanja ove upute, izdaje se vremenski razmak za čitanje, i čip će vratiti svoju riječ statusa napajanja. “0” je parazitsko stanje moći i “1” je stanje vanjske snage.
2.5 DS18B20 vremenski dijagram
2.5.1 DS18B20 Dijagram odnosa resetiranja i odgovora
Resetiranje se mora izvršiti prije svake komunikacije. Vrijeme resetiranja, vrijeme čekanja, a vrijeme odgovora treba biti strogo programirano prema vremenu.
DS18B20 vremenski razmak za čitanje i pisanje: Čitanje i pisanje podataka DS18B20 potvrđuje bit obrade vremenskog razmaka i naredbena riječ za razmjenu informacija.
2.5.2 Zapišite podatke 0 i podataka 1 do DS18B20
U prvih 15uS vremenskog razmaka zapisa podataka, kontroler treba sabirnicu povući nisko, i tada će to biti vrijeme uzorkovanja čipa za podatke sabirnice. Vrijeme uzorkovanja je 15~60uS. Ako regulator povuče sabirnicu visoko tijekom vremena uzorkovanja, to znači pisanje “1”, a ako kontroler povuče sabirnicu nisko, to znači pisanje “0”.
Svaki bit prijenosa trebao bi imati početni bit niske razine od najmanje 15uS, i naknadne podatke “0” ili “1” treba završiti unutar 45uS.
Vrijeme prijenosa cijelog bita treba održavati na 60~120uS, inače se ne može jamčiti normalna komunikacija.
Bilješka: DS18B20 čita i zapisuje podatke iz niskog bita.
2.5.3 Čitanje podataka 0 i podataka 1 od DS18B20
Vrijeme uzorkovanja kontrole tijekom vremenskog razmaka očitavanja trebalo bi biti točnije. Tijekom vremenskog razmaka za čitanje, host također mora generirati nisku razinu od najmanje 1uS da označi početak vremena čitanja. Zatim, u 15uS nakon što je autobus pušten, DS18B20 će poslati bit internih podataka. U ovom trenutku, ako kontrola utvrdi da je autobus visok, to znači čitanje “1”, a ako je autobus nizak, to znači čitanje podataka “0”. Prije čitanja svakog bita, kontroler dodaje startni signal.
Bilješka: Podatkovni bit mora se pročitati unutar 15 uS od početka praznine za čitanje kako bi se osigurala ispravna komunikacija.
Tijekom komunikacije, 8 komadići “0” ili “1” koriste se kao bajt, a čitanje ili pisanje bajta počinje od niskog bita.
2.5.4 Redoslijed očitavanja temperature jednom (samo jedan DS18B20 u autobusu)
1. Pošalji signal resetiranja
2. Otkrij signal odgovora
3. Pošalji 0xCC
4. Pošalji 0x44
5. Pošalji signal resetiranja
6. Otkrij signal odgovora
7. Napišite 0xcc
8. Napiši 0xbe
9. Petlja 8 puta za očitavanje niskog bajta temperature
10. Petlja 8 puta za očitavanje visokog bajta temperature
11. Sintetizirajte 16-bitne podatke o temperaturi i obradite ih
3. Kod vozača
3.1 DS18B20.c
#uključivati “ds18b20.h”
/*
Funkcija: DS18B20 inicijalizacija
Veza hardvera: PB15
*/
void ds18b20_init(poništiti)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Izvlačenje
}
/*
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_CheckDevice(poništiti) //Sadrži impuls resetiranja, detekcijski puls
{
DS18B20_IZLAZNI_NAČIN();//Inicijalizirati u izlazni način
DS18B20_OUT=0; //Generirajte impuls resetiranja
DelayUs(750); //Generirajte nisku razinu od 750 us
DS18B20_OUT=1; //Pusti sabirnicu
DelayUs(15); //Pričekajte odgovor DS18B20
ako(DS18B20_CleckAck())//Otkrij puls postojanja
{
povratak 1;
}
povratak 0;
}
/*
Funkcija: Detektirajte puls postojanja DS18B20 uređaja
Povratna vrijednost: 1 označava grešku 0 označava normalno
*/
u8 DS18B20_CleckAck(poništiti)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicijalizirati u način unosa
dok(DS18B20_IN&&cnt<200) //Pričekajte puls postojanja odgovora DS18B20
{
DelayUs(1);
cnt++;
}
ako(cnt>=200)povratak 1; //greška
cnt=0;
dok((!DS18B20_IN)&&cnt<240) //pričekajte da DS18B20 pusti sabirnicu
{
DelayUs(1);
cnt++;
}
ako(cnt>=240)povratak 1; //greška
povratak 0;
}
/*
Funkcija: Napiši bajt
Prvo nauči malo pisati.
*/
void ds18b20_writeByte(u8 cmd)
{
u8 i;
DS18B20_IZLAZNI_NAČIN(); //Inicijalizirati u izlazni način
za(i=0;ja<8;i++)
{
DS18B20_OUT=0; //Generirajte prazninu u vremenu pisanja (napisati početak)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Pošalji stvarni bit podataka
DelayUs(60); //Pričekajte završetak pisanja
DS18B20_OUT=1; //Otpustite autobus i pripremite se za sljedeći prijenos
cmd>>=1; //Nastavite slati sljedeći bit podataka
}
}
/*
Funkcija: Pročitaj bajt
Prvo naučite malo čitati.
*/
u8 DS18B20_ReadByte(poništiti)
{
u8 i,podatak=0;
za(i=0;ja<8;i++)
{
DS18B20_IZLAZNI_NAČIN(); //Inicijalizirati u izlazni način
DS18B20_OUT=0; //Generirajte prazninu u vremenu čitanja (početak čitanja)
DelayUs(2);
DS18B20_OUT=1; //Pusti sabirnicu
DS18B20_INPUT_MODE(); //Inicijalizirati u način unosa
DelayUs(8); //Pričekajte izlaz podataka DS18B20
podaci>>=1; //Napunite gornji dio sa 0, zadano je 0
ako(DS18B20_IN) podaci|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Pusti sabirnicu, pričekajte čitanje sljedećeg bita podataka
}
vratiti podatke;
}
/*
Funkcija: Jednom pročitajte podatke o temperaturi DS18B20
Povratna vrijednost: očitani podaci o temperaturi
Razmotrena situacija: Na sabirnicu je spojen samo jedan DS18B20
*/
u16 DS18B20_ReadTemp(poništiti)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Pošaljite impuls resetiranja, otkriti puls
DS18B20_WRITEBYTE(0Xcc); //Preskoči otkrivanje slijeda ROM-a
DS18B20_WRITEBYTE(0x44); //Pokrenite pretvorbu temperature
//Pričekajte da se pretvorba temperature završi
dok(Ds18b20_readbyte()!=0xFF){}
DS18B20_CheckDevice(); //Pošaljite impuls resetiranja, otkriti puls
DS18B20_WRITEBYTE(0Xcc); //Preskoči otkrivanje slijeda ROM-a
DS18B20_WRITEBYTE(0Xbe); //Očitajte temperaturu
temp_L=DS18B20_ReadByte(); //Očitajte podatke o niskoj temperaturi
temp_H=DS18B20_ReadByte(); //Očitajte podatke o visokoj temperaturi
temp=temp_L|(temp_H<<8); //Sintetizirana temperatura
povratak temp;
}
3.2 DS18B20.h
#ifndef DS18B20_H
#definirati DS18B20_H
#uključivati “stm32f10x.h”
#uključivati “sys.h”
#uključivati “kašnjenje.h”
#uključivati “ds18b20.h”
#uključivati “usart.h”
/*Sučelje paketa*/
//Inicijalizirajte DS18B20 na način unosa
#definirajte DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x80000000;}
//Inicijalizirajte DS18B20 u način rada izlaza
#definirajte DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x30000000;}
//DS18B20 izlaz IO porta
#definirati DS18B20_OUT PBout(15)
//DS18B20 ulaz IO porta
#definirati DS18B20_IN PBin(15)
//Deklaracija funkcije
u8 DS18B20_CleckAck(poništiti);
u8 DS18B20_CheckDevice(poništiti);
void ds18b20_init(poništiti);
u16 DS18B20_ReadTemp(poništiti);
u8 DS18B20_ReadByte(poništiti);
void ds18b20_writeByte(u8 cmd);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Funkcija odgode
/*
Funkcija: Zastoj u nama
*/
poništiti DelayUs(int us)
{
#ifdef _SYSTICK_IRQ_
int i,j;
za(i=0;iVAL=0; //Vrijednost CNT brojača
SysTick->OPTEREĆENJE=9*us; //9 znači 1us
SysTick->CTRL|=1<<0; //Pokreni mjerač vremena
učiniti
{
tmp=SysTick->CTRL; //Pročitaj status
}dok((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VRIJEDNOST=0; //Vrijednost CNT brojača
SysTick->CTRL&=~(1<<0); //Isključite mjerač vremena
#endif
};i++)>
3.4 main.c Nazovite DS18B20 da očitate temperaturu i ispišete je na serijski priključak
#uključivati “stm32f10x.h”
#uključivati “ds18b20.h”
u8 DS18B20_ROM[8]; //Pohranite 64-bitni ROM kod DS18B20
Int Main(poništiti)
{
u16 temp;
USARTx_Heat(USART1,72,115200);//Inicijalizacija serijskog porta 1
Ds18b20_init(); //DS18B20 inicijalizacija
/*1. Pročitajte 64-bitni ROM kod DS18B20*/
//Pošaljite impuls resetiranja, otkriti puls postojanja
dok(DS18B20_CheckDevice())
{
printf(“Uređaj DS18B20 ne postoji!\n”);
KašnjenjeMs(500);
}
//Pošaljite naredbu za čitanje 64-bitnog ROM koda
DS18B20_WRITEBYTE(0x33);
//Petlja za čitanje 64-bitnog ROM koda
za(i=0;ja<8;i++)
{
DS18B20_ROM[ja]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%Xn”,ja,DS18B20_ROM[ja]);
}
dok(1)
{
/*2. Istovremeno pokrenite sve DS18B20 na sabirnici za početak pretvaranja temperature*/
DS18B20_CheckDevice(); //Pošaljite impuls resetiranja, otkriti puls
DS18B20_WRITEBYTE(0Xcc); //Preskoči otkrivanje slijeda ROM-a
DS18B20_WRITEBYTE(0x44); //Pokrenite pretvorbu temperature (neka svi DS18B20 na busu pretvaraju temperaturu)
KašnjenjeMs(500); //Pričekajte da se završe sve pretvorbe temperature DS18B20 na liniji
/*3. Jedno ciljano očitavanje temperature svakog DS18B20*/
DS18B20_CheckDevice(); //Pošaljite impuls resetiranja, otkriti puls
DS18B20_WRITEBYTE(0x55); //Pošalji naredbu za podudaranje ROM-a
za(i=0;ja<8;i++) //Pošaljite 64-bitni kod
{
DS18B20_WRITEBYTE(DS18B20_ROM[ja]);
}
DS18B20_WRITEBYTE(0Xbe); //Očitajte temperaturu
temp=DS18B20_ReadByte(); //Očitajte niže temperaturne podatke
temp|=DS18B20_ReadByte()<<8; //Očitajte temperaturne podatke visokog reda
printf(“temp1=%d.%dn”,temp>>4,temp&0xF);
printf(“temp2=%fn”,temp*0,0625);
KašnjenjeMs(500);
}
}
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt







