DS18B20 je digitální teplotní senzor, který ke komunikaci s hostitelem používá časování jedné sběrnice. Pouze 1 K dokončení načítání teplotních údajů je zapotřebí drát;
DS18B20 má vestavěné 64bitové sériové číslo produktu pro snadnou identifikaci. Lze připojit více senzorů DS18B20 1 Drát, a prostřednictvím 64bitové autentizace identity, teplotní informace shromážděné z různých senzorů lze číst samostatně.
Úvod do DS18B20
2.1 Hlavní vlastnosti DS18B20
1. Plně digitální převod teploty a výstup.
2. Pokročilá datová komunikace po jedné sběrnici.
3. Až 12bitové rozlišení, s přesností až ±0,5 stupně Celsia.
4. Maximální pracovní cyklus při 12bitovém rozlišení je 750 milisekund.
5. Lze zvolit parazitní pracovní režim.
6. Rozsah detekční teploty je –55°C ~+125°C (–67°F ~+257°F).
7. Vestavěná EEPROM, funkce alarmu teplotního limitu.
8. 64-bitová fotolitografie ROM, sériové číslo zabudovaného produktu, vhodné pro připojení více strojů.
9. Různé formy balení, přizpůsobit různým hardwarovým systémům.
2.2 Funkce pinu DS18B20
Zem napětí GND;
DQ jednoduchá datová sběrnice;
VDD napájecí napětí;
NC prázdný kolík;
2.3 Princip činnosti a aplikace DS18B20
Detekce teploty DS18B20 a digitální výstup dat jsou plně integrovány na jednom čipu, takže má silnější schopnost proti rušení. Jeho jeden pracovní cyklus lze rozdělit na dvě části, jmenovitě zjišťování teploty a zpracování dat.
18B20 má tři formy paměťových zdrojů. jsou: ROM paměť pouze pro čtení, slouží k uložení kódu DS18B20ID; první 8 bity jsou jednořádkový sériový kód (Kód DS18B20 je 19H), následující 48 bity jsou jedinečné sériové číslo čipu; poslední 8 bity jsou CRC kód (kontrola nadbytečnosti) z výše uvedeného 56 bitů. Údaje jsou nastaveny ve výrobě a uživatel je nemůže změnit. DS18B20 má celkem 64 bitů ROM.
datový registr RAM, slouží pro interní výpočty a přístup k datům, data se po výpadku napájení ztratí, DS18B20 má celkem 9 bajtů RAM, každý bajt je 8 bitů. První a druhý bajt jsou informace o datové hodnotě po převodu teploty; třetí a čtvrtý bajt jsou zrcadlovým obrazem EEPROM uživatele (běžně používané pro ukládání hodnot teplotního alarmu). Jeho hodnota se obnoví po resetování napájení. Pátý bajt je zrcadlovým obrazem třetí EEPROM uživatele. 6, 7čt, a 8. bajty jsou čítací registry, které jsou navrženy tak, aby uživatelům umožnily získat vyšší teplotní rozlišení. Jsou to také dočasné skladovací jednotky pro převod a výpočet vnitřní teploty. Devátý bajt je CRC kód prvního bajtu 8 bajtů. EEPROM je energeticky nezávislá paměť sloužící k ukládání dat, která je třeba ukládat po dlouhou dobu, horní a dolní hodnoty alarmu teploty, a ověřovací údaje. DS18B20 má celkem 3 bitů EEPROM, a v paměti RAM jsou zrcadlové obrazy pro usnadnění obsluhy uživatele.
DS18B20 standardně pracuje v režimu 12bitového rozlišení. 12bitová data získaná po konverzi jsou uložena ve dvou 8bitových RAM DS18B20 (první dva bajty). První 5 binární bity jsou znaménkové bity. Pokud je naměřená teplota větší než 0, tyto 5 bity jsou 0. Stačí naměřenou hodnotu vynásobit 0.0625 abyste získali skutečnou teplotu. Pokud je teplota nižší než 0, tyto 5 bity jsou 1. Naměřenou hodnotu je třeba převrátit, přidal 1, a poté vynásobeno 0.0625 abyste získali skutečnou teplotu. Nebo použijte bitovou operaci k extrakci teploty: desetinná místa zaujímají nižší 4 bitů, a horní bity jsou celočíselné bity (záporná čísla se neberou v úvahu).
2.4 Tabulka instrukcí ROM čipu DS18B20
1. Přečtěte si ROM [33H] (hexadecimální příkazové slovo je v hranatých závorkách).
Tento příkaz umožňuje řadiči sběrnice číst 64bitovou paměť ROM DS18B20. Tuto instrukci lze použít pouze v případě, že je na sběrnici pouze jeden DS18B20. Pokud je připojeno více než jeden, během komunikace dojde ke konfliktům dat.
2. připojit ROM [55H]
Po této instrukci následuje 64bitové sériové číslo vydané řadičem. Když je na sběrnici více DS18B20, reagovat může pouze čip se stejným sériovým číslem, jaké má vydaný kontrolér, a ostatní čipy počkají na další reset. Tento návod je vhodný pro jednočipové i vícečipové připojení.
3. Přeskočit ROM [CCH]
Tato instrukce způsobí, že čip nebude reagovat na kód ROM. V případě jednoho autobusu, tento pokyn lze použít k úspoře času. Pokud je tato instrukce použita, když je připojeno více čipů, dojde ke konfliktům dat, což má za následek chyby.
4. Prohledejte ROM [F0H]
Po inicializaci čipu, vyhledávací instrukce umožňuje 64bitovou ROM všech zařízení identifikovat odstraněním, když je ke sběrnici připojeno více čipů.
5. Hledání alarmů [KAŽDÝ]
V případě více čipů, instrukce pro vyhledávání čipu alarmu reaguje pouze na čipy, které splňují podmínku alarmu teploty vyšší než TH nebo nižší než TL. Dokud není čip vypnutý, stav alarmu bude udržován, dokud nebude znovu změřena teplota a nebude dosaženo podmínky alarmu.
6. Napište Zápisník [4EH]
Toto je instrukce pro zápis dat do RAM. Dva bajty následně zapsaných dat budou uloženy na adrese 2 (TH paměti RAM) a adresu 3 (TL paměti RAM). Proces zápisu lze ukončit signálem reset.
7. Přečtěte si Zápisník (číst data z RAM) [BEH]
Tato instrukce načte data z paměti RAM, počínaje adresou 0 a až na adresu 9, dokončení čtení všech dat RAM. Čip umožňuje resetovacím signálem ukončit proces čtení, to je, následné zbytečné bajty lze ignorovat, aby se zkrátila doba čtení.
8. Kopírovat Zápisník (zkopírujte data RAM do EEPROM) [48H]
Tato instrukce ukládá data v RAM do EEPROM, takže data nebudou ztracena při vypnutí napájení. Protože čip je zaneprázdněn zpracováním úložiště EEPROM, když ovladač odešle časový úsek čtení, výstupy sběrnice “0”, a po dokončení skladovacích prací, autobus vyjede “1”.
V parazitním pracovním režimu, okamžitě po vydání tohoto pokynu je nutné použít silný pull-up a udržovat jej po dobu alespoň 10MS, aby se zachoval provoz čipu.
9. Převést T (teplotní přeměna) [44H]
Po obdržení tohoto pokynu, čip provede převod teploty a uloží převedenou hodnotu teploty na 1. a 2. adresu RAM. Protože čip je zaneprázdněn zpracováním převodu teploty, když ovladač odešle časový úsek čtení, výstupy sběrnice “0”, a po dokončení skladovacích prací, autobus vyjede “1”. V parazitním pracovním režimu, okamžitě po vydání tohoto pokynu je nutné použít silný pull-up a udržovat jej po dobu nejméně 500 MS, aby se zachovala činnost čipu.
10. Vyvolejte EEPROM (Zkopírujte hodnotu alarmu z EEPROM do RAM) [B8H]
Tato instrukce zkopíruje hodnotu alarmu v EEPROM do 3. a 4. bajtu v RAM. Protože čip je zaneprázdněn zpracováním kopírování, když ovladač odešle časový úsek čtení, výstupy sběrnice “0”, a po dokončení skladovacích prací, výstupy sběrnice “1”. Navíc, tato instrukce bude automaticky provedena při zapnutí a resetu čipu. Takto, dva bity alarmového bajtu v RAM budou vždy zrcadlovým obrazem dat v EEPROM.
11. Přečtěte si o tématu Napájení (Přepínač pracovního režimu) [B4H]
Po vydání tohoto pokynu, je vydán interval čtení, a čip vrátí své slovo stavu napájení. “0” je parazitický mocenský stát a “1” je stav vnějšího napájení.
2.5 Schéma časování DS18B20
2.5.1 DS18B20 Reset a schéma vztahu odezvy
Před každou komunikací je nutné provést reset. Čas resetování, čekací doba, a doba odezvy by měla být přesně naprogramována podle načasování.
Časová prodleva DS18B20 pro čtení a zápis: Čtení a zápis dat DS18B20 je potvrzen bitem zpracování časové mezery a příkazovým slovem pro výměnu informací.
2.5.2 Zápis dat 0 a data 1 na DS18B20
V prvních 15uS časové mezery zápisu dat, sběrnici je třeba stáhnout řadičem, a pak to bude doba vzorkování čipu pro data sběrnice. Doba vzorkování je 15~60uS. Pokud regulátor vytáhne sběrnici vysoko během doby vzorkování, to znamená psát “1”, a pokud řadič stáhne sběrnici nízko, to znamená psát “0”.
Každý bit přenosu by měl mít nízkoúrovňový startovací bit alespoň 15uS, a následná data “0” nebo “1” by měla být dokončena do 45 us.
Přenosová doba celého bitu by měla být udržována na 60~120uS, jinak nelze zaručit normální komunikaci.
Poznámka: DS18B20 čte a zapisuje data z dolního bitu.
2.5.3 Čtení dat 0 a data 1 od DS18B20
Vzorkovací čas kontroly během intervalu čtení by měl být přesnější. Během intervalu čtení, hostitel musí také generovat nízkou úroveň alespoň 1uS, aby indikoval začátek doby čtení. Pak, za 15uS po uvolnění autobusu, DS18B20 odešle interní datový bit. V tuto chvíli, pokud kontrola zjistí, že sběrnice je vysoko, to znamená číst “1”, a pokud je autobus nízko, to znamená čtení dat “0”. Před přečtením každého bitu, ovladač přidá spouštěcí signál.
Poznámka: Aby byla zajištěna správná komunikace, musí být datový bit načten do 15 uS od začátku čtecí mezery.
Během komunikace, 8 kousky “0” nebo “1” se používají jako byte, a čtení nebo zápis bajtu začíná od nízkého bitu.
2.5.4 Pořadí měření teploty jednou (pouze jeden DS18B20 na sběrnici)
1. Odešlete resetovací signál
2. Detekce signálu odezvy
3. Odeslat 0xCC
4. Odeslat 0x44
5. Odešlete resetovací signál
6. Detekce signálu odezvy
7. Napište 0xcc
8. Napište 0xbe
9. Smyčka 8 krát pro přečtení dolního bajtu teploty
10. Smyčka 8 krát pro přečtení vysokého bajtu teploty
11. Syntéza 16bitových teplotních dat a zpracování
3. Kód řidiče
3.1 DS18B20.c
#zahrnout “ds18b20.h”
/*
Funkce: Inicializace DS18B20
Hardwarové připojení: PB15
*/
void DS18B20_Init(neplatné)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Vytahování
}
/*
Funkce: Zkontrolujte, zda existuje zařízení DS18B20
Návratová hodnota: 1 znamená, že zařízení neexistuje 0 znamená, že zařízení je normální
*/
u8 DS18B20_CheckDevice(neplatné) //Obsahuje resetovací impuls, detekční puls
{
DS18B20_OUTPUT_MODE();//Inicializujte do výstupního režimu
DS18B20_OUT=0; //Vygenerujte resetovací impuls
DelayUs(750); //Vygenerujte nízkou úroveň 750us
DS18B20_OUT=1; //Uvolněte sběrnici
DelayUs(15); //Počkejte na odpověď DS18B20
-li(DS18B20_CleckAck())//Zjistit existenci pulzu
{
návrat 1;
}
návrat 0;
}
/*
Funkce: Zjistit existenci pulzu zařízení DS18B20
Návratová hodnota: 1 označuje chybu 0 označuje normální
*/
u8 DS18B20_CleckAck(neplatné)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicializujte do vstupního režimu
zatímco(DS18B20_IN&&cnt<200) //Počkejte na impuls existence odezvy DS18B20
{
DelayUs(1);
cnt++;
}
-li(cnt>=200)návrat 1; //chyba
cnt=0;
zatímco((!DS18B20_IN)&&cnt<240) //počkejte, až DS18B20 uvolní sběrnici
{
DelayUs(1);
cnt++;
}
-li(cnt>=240)návrat 1; //chyba
návrat 0;
}
/*
Funkce: Napište bajt
Nejprve se naučte trochu psát.
*/
void DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicializujte do výstupního režimu
pro(i=0;i<8;i ++)
{
DS18B20_OUT=0; //Vygenerovat časový interval zápisu (psát začátek)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Odeslat bit aktuálních dat
DelayUs(60); //Počkejte na dokončení zápisu
DS18B20_OUT=1; //Uvolněte sběrnici a připravte se na další přenos
cmd>>=1; //Pokračujte v odesílání dalšího bitu dat
}
}
/*
Funkce: Přečíst bajt
Nejprve se naučte trochu číst.
*/
u8 DS18B20_ReadByte(neplatné)
{
u8 i,data=0;
pro(i=0;i<8;i ++)
{
DS18B20_OUTPUT_MODE(); //Inicializujte do výstupního režimu
DS18B20_OUT=0; //Vygenerovat interval čtení (začátek čtení)
DelayUs(2);
DS18B20_OUT=1; //Uvolněte sběrnici
DS18B20_INPUT_MODE(); //Inicializujte do vstupního režimu
DelayUs(8); //Počkejte na výstup dat DS18B20
data>>=1; //Naplňte vysoký bit 0, výchozí je 0
-li(DS18B20_IN) data|= 0x80;
DelayUs(60);
DS18B20_OUT=1; //Uvolněte sběrnici, počkejte na načtení dalšího bitu dat
}
vrátit data;
}
/*
Funkce: Přečtěte si údaje o teplotě DS18B20 jednou
Návratová hodnota: přečtené údaje o teplotě
Uvažovaná situace: Ke sběrnici je připojen pouze jeden DS18B20
*/
u16 DS18B20_ReadTemp(neplatné)
{
u16 teplota=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Odeslat resetovací impuls, detekovat puls
DS18B20_WriteByte(0XCC); //Přeskočit detekci sekvence ROM
DS18B20_WriteByte(0x44); //Spusťte převod teploty
//Počkejte na dokončení převodu teploty
zatímco(DS18B20_ReadByte()!=0xFF){}
DS18B20_CheckDevice(); //Odeslat resetovací impuls, detekovat puls
DS18B20_WriteByte(0XCC); //Přeskočit detekci sekvence ROM
DS18B20_WriteByte(0Xbe); //Odečtěte teplotu
temp_L=DS18B20_ReadByte(); //Přečtěte si údaje o nízké teplotě
temp_H=DS18B20_ReadByte(); //Přečtěte si údaje o vysoké teplotě
temp=temp_L|(temp_H<<8); //Syntetizovaná teplota
zpětná teplota;
}
3.2 DS18B20.h
#ifndef DS18B20_H
#definovat DS18B20_H
#zahrnout “stm32f10x.h”
#zahrnout “sys.h”
#zahrnout “zpoždění.h”
#zahrnout “ds18b20.h”
#zahrnout “usart.h”
/*Rozhraní balíčku*/
//Inicializujte DS18B20 do vstupního režimu
#definovat DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}
//Inicializujte DS18B20 do výstupního režimu
#definovat DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}
//Výstup IO portu DS18B20
#definovat DS18B20_OUT Pout(15)
//Vstup IO portu DS18B20
#definovat DS18B20_IN PBin(15)
//Deklarace funkce
u8 DS18B20_CleckAck(neplatné);
u8 DS18B20_CheckDevice(neplatné);
void DS18B20_Init(neplatné);
u16 DS18B20_ReadTemp(neplatné);
u8 DS18B20_ReadByte(neplatné);
void DS18B20_WriteByte(u8 cmd);
#Endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Funkce zpoždění
/*
Funkce: Zpoždění v nás
*/
void DelayUs(v nás)
{
#ifdef _SYSTICK_IRQ_
int i,j;
pro(i=0;iVAL=0; //Hodnota čítače CNT
SysTick->ZÁTĚŽ=9*us; //9 znamená 1us
SysTick->CTRL|=1<<0; //Spustit časovač
dělat
{
tmp=SysTick->CTRL; //Stav čtení
}zatímco((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //Hodnota čítače CNT
SysTick->CTRL&=~(1<<0); //Vypněte časovač
#Endif
};i ++)>
3.4 main.c Zavolejte DS18B20, abyste načetli teplotu a vytiskli ji na sériový port
#zahrnout “stm32f10x.h”
#zahrnout “ds18b20.h”
u8 DS18B20_ROM[8]; //Uložte 64bitový kód ROM DS18B20
int main(neplatné)
{
u16 tepl;
USARTx_Heat(USART1,72,115200);//Inicializace sériového portu 1
DS18B20_Heat(); //Inicializace DS18B20
/*1. Přečtěte si 64bitový kód ROM DS18B20*/
//Odeslat resetovací impuls, detekovat puls existence
zatímco(DS18B20_CheckDevice())
{
Printf(“Zařízení DS18B20 neexistuje!\n”);
DelayMs(500);
}
//Odešlete příkaz ke čtení 64bitového kódu ROM
DS18B20_WriteByte(0x33);
//Smyčka čte 64bitový kód ROM
pro(i=0;i<8;i ++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
Printf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}
zatímco(1)
{
/*2. Současným provozem všech DS18B20 na sběrnici zahájíte převod teploty*/
DS18B20_CheckDevice(); //Odeslat resetovací impuls, detekovat puls
DS18B20_WriteByte(0XCC); //Přeskočit detekci sekvence ROM
DS18B20_WriteByte(0x44); //Spusťte převod teploty (nechte všechny DS18B20 na sběrnici převést teplotu)
DelayMs(500); //Počkejte na dokončení všech převodů teploty DS18B20 na lince
/*3. Jediné cílené čtení teploty každého DS18B20*/
DS18B20_CheckDevice(); //Odeslat resetovací impuls, detekovat puls
DS18B20_WriteByte(0x55); //Odeslat příkaz, aby odpovídal ROM
pro(i=0;i<8;i ++) //Odeslat 64bitový kód
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0Xbe); //Odečtěte teplotu
temp=DS18B20_ReadByte(); //Přečtěte si data o teplotě nízkého řádu
Temp|=DS18B20_ReadByte()<<8; //Přečtěte si data o teplotě vyššího řádu
Printf(“temp1=%d.%d\n”,Temp>>4,Temp&0xF);
Printf(“temp2=%f\n”,teplota*0,0625);
DelayMs(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







