DS18B20 е дигитален температурен сензор кој користи тајминг на една магистрала за да комуницира со домаќинот. Само 1 Потребна е жица за да се заврши отчитувањето на податоците за температурата;
DS18B20 има вграден 64-битен сериски број на производот за лесна идентификација. Може да се поврзат повеќе сензори DS18B20 1 Жица, и преку 64-битна автентикација на идентитетот, информациите за температурата собрани од различни сензори може да се читаат одделно.
Вовед во DS18B20
2.1 Главни карактеристики на DS18B20
1. Целосно дигитална температурна конверзија и излез.
2. Напредна комуникација со податоци со една шина.
3. До 12-битна резолуција, со точност до ±0,5 степени Целзиусови.
4. Максималниот работен циклус при 12-битна резолуција е 750 милисекунди.
5. Може да се избере паразитски режим на работа.
6. Температурниот опсег за откривање е –55°C ~+125°C (–67° F ~+257° F).
7. Вграден EEPROM, Функција за аларм за ограничување на температурата.
8. 64-бит фотолитографија ROM, вграден сериски број на производот, погодно за поврзување со повеќе машини.
9. Различни форми на пакување, се прилагодат на различни хардверски системи.
2.2 DS18B20 игла функција
Заземјување на напон GND;
DQ единечна магистрала за податоци;
VDD напон на напојување;
NC празен игла;
2.3 Принцип на работа и примена на DS18B20
Откривањето температура DS18B20 и излезот на дигитални податоци се целосно интегрирани на еден чип, така што има посилна способност против пречки. Неговиот еден работен циклус може да се подели на два дела, имено детекција на температура и обработка на податоци.
18B20 има три форми на мемориски ресурси. Тие се: ROM меморија само за читање, се користи за складирање на кодот DS18B20ID; првиот 8 битови се еднолиниски сериски код (Кодот DS18B20 е 19H), следново 48 битови се единствениот сериски број на чипот; последниот 8 битовите се CRC кодот (проверка на технолошки вишок) од горенаведеното 56 битови. Податоците се поставени при производството и корисникот не може да ги промени. DS18B20 има вкупно 64 делови од ROM-от.
Регистар на податоци за RAM меморија, се користи за внатрешна пресметка и пристап до податоци, податоците се губат по прекин на струја, DS18B20 има вкупно 9 бајти RAM меморија, секој бајт е 8 битови. Првиот и вториот бајт се информации за податочната вредност по конверзија на температурата; третиот и четвртиот бајт се огледална слика на EEPROM на корисникот (најчесто се користи за складирање на вредноста на алармот за температура). Неговата вредност ќе се освежи кога ќе се ресетира напојувањето. Петтиот бајт е огледална слика на третиот EEPROM на корисникот. 6-ти, 7ти, а 8-ми бајти се брои регистри, кои се дизајнирани да им овозможат на корисниците да добијат повисока температурна резолуција. Тие се и привремени складишни единици за внатрешна конверзија и пресметка на температурата. 9-тиот бајт е CRC-кодот на првиот 8 бајти. EEPROM е неиспарлива меморија што се користи за складирање на податоци што треба да се зачуваат долго време, горните и долните температурни алармни вредности, и податоци за верификација. DS18B20 има вкупно 3 делови од EEPROM, и има огледални слики во RAM меморијата за да се олесни работењето на корисникот.
DS18B20 стандардно работи во режим на 12-битна резолуција. 12-битните податоци добиени по конверзијата се складираат во две 8-битни RAM-и на DS18B20 (првите два бајта). Првиот 5 битови во бинарни се битови со знак. Ако измерената температура е поголема од 0, овие 5 битови се 0. Само помножете ја измерената вредност со 0.0625 за да се добие вистинската температура. Ако температурата е помала од 0, овие 5 битови се 1. Измерената вредност треба да се преврти, додадена од 1, а потоа се множи со 0.0625 за да се добие вистинската температура. Или користете бит операција за да ја извлечете температурата: децималните места го заземаат долниот дел 4 битови, а горните битови се целобројни битови (негативните броеви не се земаат предвид).
2.4 Табела со инструкции за ROM чип DS18B20
1. Читај ROM [33Х] (хексадецималниот команден збор е во квадратни загради).
Оваа команда му овозможува на контролорот на магистралата да го чита 64-битниот ROM на DS18B20. Оваа инструкција може да се користи само кога има само еден DS18B20 во автобусот. Ако се поврзани повеќе од еден, ќе се појават конфликти на податоци за време на комуникацијата.
2. прикачи РОМ [55Х]
Оваа инструкција е проследена со 64-битен сериски број издаден од контролорот. Кога во автобусот има повеќе DS18B20, може да одговори само чипот со ист сериски број како оној издаден од контролорот, а другите чипови ќе чекаат за следното ресетирање. Оваа инструкција е погодна за поврзување со еден и повеќе чип.
3. Прескокнете го ROM-от [CCH]
Оваа инструкција прави чипот да не реагира на ROM-кодот. Во случај на еден автобус, оваа инструкција може да се користи за да заштеди време. Ако оваа инструкција се користи кога се поврзани повеќе чипови, ќе дојде до конфликт на податоци, што резултира со грешки.
4. Пребарајте ROM [F0H]
Откако ќе се иницијализира чипот, инструкцијата за пребарување дозволува 64-битниот ROM на сите уреди да се идентификува со елиминација кога повеќе чипови се поврзани со магистралата.
5. Барај за аларм [СЕКОЈ]
Во случај на повеќе чипови, инструкцијата за пребарување на чипови за аларм одговара само на чипови кои ги исполнуваат условите за аларм за температура повисока од TH или помала од TL. Се додека чипот не е исклучен, алармната состојба ќе се одржува додека температурата повторно не се измери и не се постигне алармната состојба.
6. Напишете Scratchpad [4ЕХ]
Ова е инструкција за запишување податоци во RAM меморијата. Двата бајта на податоци напишани последователно ќе бидат зачувани на адресата 2 (TH на аларм RAM меморија) и адреса 3 (TL RAM меморија за аларм). Процесот на запишување може да се прекине со сигнал за ресетирање.
7. Прочитајте Scratchpad (читање податоци од RAM меморија) [БЕХ]
Оваа инструкција ќе чита податоци од RAM меморијата, почнувајќи од адресата 0 и до адреса 9, завршување на читањето на целата RAM меморија. Чипот му овозможува на сигналот за ресетирање да го прекине процесот на читање, односно, може да се игнорираат последователните непотребни бајти за да се намали времето на читање.
8. Копирај Scratchpad (копирајте ги податоците од RAM меморијата во EEPROM) [48Х]
Оваа инструкција ги складира податоците во RAM меморијата во EEPROM, така што податоците нема да се изгубат кога е исклучено напојувањето. Бидејќи чипот е зафатен со обработка на складирање EEPROM, кога контролорот испраќа временско слот за читање, излезите на автобусот “0”, и кога ќе се завршат работите за складирање, автобусот ќе излезе “1”.
Во паразитски режим на работа, мора да се користи силно повлекување веднаш по издавањето на оваа инструкција и да се одржува најмалку 10MS за да се одржи работата на чипот.
9. Конвертирај Т (температурна конверзија) [44Х]
По добивањето на оваа инструкција, чипот ќе изврши конверзија на температурата и ќе ја зачува конвертираната температурна вредност во првата и втората адреса на RAM меморијата. Бидејќи чипот е зафатен со обработка на конверзија на температурата, кога контролорот испраќа временско слот за читање, излезите на автобусот “0”, и кога ќе се завршат работите за складирање, автобусот ќе излезе “1”. Во паразитски режим на работа, мора да се користи силно повлекување веднаш по издавањето на ова упатство и да се одржува најмалку 500MS за да се одржи работата на чипот.
10. Потсетете се на EEPROM (Копирајте ја вредноста на алармот во EEPROM во RAM меморијата) [B8H]
Оваа инструкција ја копира вредноста на алармот во EEPROM на третиот и четвртиот бајт во RAM меморијата. Бидејќи чипот е зафатен со обработка на копирање, кога контролорот испраќа временско слот за читање, излезите на автобусот “0”, и кога ќе се завршат работите за складирање, излезите на автобусот “1”. Покрај тоа, оваа инструкција автоматски ќе се изврши кога чипот ќе се вклучи и ќе се ресетира. На овој начин, двата бајти за аларм во RAM меморијата секогаш ќе бидат огледална слика на податоците во EEPROM.
11. Прочитајте напојување (Прекинувач за режим на работа) [B4H]
Откако ќе се издаде ова упатство, се издава временски јаз за читање, и чипот ќе го врати зборот за статусот на моќност. “0” е паразитската моќна состојба и “1” е состојба на надворешна моќ.
2.5 Дијаграм за тајмингот DS18B20
2.5.1 Дијаграм за врска со ресетирање и одговор DS18B20
Пред секоја комуникација мора да се изврши ресетирање. Времето на ресетирање, време на чекање, а времето на одговор треба строго да се програмира според времето.
DS18B20 временски јаз за читање и пишување: Читањето и запишувањето на податоците DS18B20 се потврдува со битот за обработка на временскиот јаз и со командниот збор за размена на информации.
2.5.2 Напиши податоци 0 и податоци 1 до DS18B20
Во првите 15 uS од временскиот јаз на податоците за запишување, автобусот треба да се повлече ниско од контролорот, а потоа ќе биде времето за земање примероци на чипот за податоците на магистралата. Времето на земање примероци е 15~60uS. Ако контролорот ја повлече магистралата високо за време на земање мостри, тоа значи пишување “1”, и ако контролорот ја влече автобусот ниско, тоа значи пишување “0”.
Секој бит на пренос треба да има почетен бит на ниско ниво од најмалку 15uS, и последователните податоци “0” или “1” треба да се заврши во рок од 45 uS.
Времето на пренос на целиот бит треба да се одржува на 60~120 uS, во спротивно не може да се гарантира нормалната комуникација.
Забелешка: DS18B20 чита и запишува податоци од нискиот бит.
2.5.3 Читање податоци 0 и податоци 1 од DS18B20
Времето на земање примероци на контролата за време на јазот за читање треба да биде попрецизно. За време на временскиот јаз за читање, домаќинот исто така мора да генерира ниско ниво од најмалку 1uS за да го означи почетокот на времето за читање. Потоа, во 15uS откако ќе се ослободи автобусот, DS18B20 ќе го испрати внатрешниот бит за податоци. Во ова време, ако контролата утврди дека автобусот е висок, тоа значи читање “1”, а ако автобусот е низок, тоа значи читање податоци “0”. Пред да го прочитате секој дел, контролорот додава сигнал за почеток.
Забелешка: Податочниот бит мора да се прочита во рок од 15 uS од почетокот на јазот за читање за да се обезбеди правилна комуникација.
За време на комуникацијата, 8 делови од “0” или “1” се користат како бајт, а читањето или пишувањето на бајтот започнува од нискиот бит.
2.5.4 Редоследот на температурата за читање еднаш (само еден DS18B20 во автобусот)
1. Испратете сигнал за ресетирање
2. Откријте сигнал за одговор
3. Испрати 0xCC
4. Испрати 0x44
5. Испратете сигнал за ресетирање
6. Откријте сигнал за одговор
7. Напиши 0xcc
8. Напишете 0xbe
9. Јамка 8 пати за читање на нискиот бајт на температура
10. Јамка 8 пати за да го прочитате високиот бајт на температурата
11. Синтетизирајте 16-битни температурни податоци и процесирајте
3. Шифра на возачот
3.1 DS18B20.в
#вклучуваат “ds18b20.h”
/*
Функција: Иницијализација на DS18B20
Хардверска врска: PB15
*/
неважечки DS18B20_Init(празнина)
{
RCC->APB2ENR|=1<<3; //ПБ
GPIOB->CRH&=0x0FFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Повлекување
}
/*
Функција: Проверете дали постои уредот DS18B20
Повратна вредност: 1 значи дека уредот не постои 0 значи дека уредот е нормален
*/
u8 DS18B20_CheckDevice(празнина) //Содржи ресетиран пулс, пулсот за откривање
{
DS18B20_OUTPUT_MODE();//Иницијализирајте во режим на излез
DS18B20_OUT=0; //Генерирајте пулс за ресетирање
DelayUs(750); //Создадете ниско ниво од 750 us
DS18B20_OUT=1; //Автобус за ослободување
DelayUs(15); //Почекајте одговорот на DS18B20
ако(DS18B20_CleckAck())//Откријте го пулсот на постоење
{
враќање 1;
}
враќање 0;
}
/*
Функција: Откријте постоење пулс на уредот DS18B20
Повратна вредност: 1 укажува на грешка 0 укажува на нормално
*/
u8 DS18B20_CleckAck(празнина)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Иницијализирајте во режим на внесување
додека(DS18B20_IN&&cnt<200) //Почекајте пулсот на постоење на одговор DS18B20
{
DelayUs(1);
cnt++;
}
ако(cnt>= 200)враќање 1; //грешка
cnt=0;
додека((!DS18B20_IN)&&cnt<240) //почекајте DS18B20 да ја ослободи магистралата
{
DelayUs(1);
cnt++;
}
ако(cnt>= 240)враќање 1; //грешка
враќање 0;
}
/*
Функција: Напиши бајт
Прво научете како да пишувате малку.
*/
неважечки DS18B20_WriteByte(U8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Иницијализирајте во режим на излез
за(i=0;јас<8;јас++)
{
DS18B20_OUT=0; //Создадете временски јаз за пишување (пишувај почеток)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Испрати вистински бит за податоци
DelayUs(60); //Почекајте да заврши пишувањето
DS18B20_OUT=1; //Ослободете го автобусот и подгответе се за следниот пренос
cmd>>=1; //Продолжете со испраќање на следниот дел од податоците
}
}
/*
Функција: Прочитајте бајт
Прво научете како да читате малку.
*/
u8 DS18B20_ReadByte(празнина)
{
u8 i,податоци=0;
за(i=0;јас<8;јас++)
{
DS18B20_OUTPUT_MODE(); //Иницијализирајте во режим на излез
DS18B20_OUT=0; //Создадете временски јаз за читање (читај почеток)
DelayUs(2);
DS18B20_OUT=1; //Автобус за ослободување
DS18B20_INPUT_MODE(); //Иницијализирајте во режим на внесување
DelayUs(8); //Почекајте излез на податоци DS18B20
податоци>>=1; //Пополнете високо малку со 0, стандардно е 0
ако(DS18B20_IN) податоци|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Автобус за ослободување, почекајте да го прочитате следниот дел од податоците
}
врати податоци;
}
/*
Функција: Прочитајте ги податоците за температурата на DS18B20 еднаш
Повратна вредност: прочитаните податоци за температурата
Разгледувана ситуација: Има само еден DS18B20 поврзан со автобусот
*/
u16 DS18B20_ReadTemp(празнина)
{
u16 temp=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Испрати пулс за ресетирање, откривање на пулсот
DS18B20_WriteByte(0xCC); //Прескокнете откривање на секвенца на ROM
DS18B20_WriteByte(0x44); //Започнете со конверзија на температурата
//Почекајте да заврши конверзијата на температурата
додека(DS18B20_ReadByte()!=0xFF){}
DS18B20_CheckDevice(); //Испрати пулс за ресетирање, откривање на пулсот
DS18B20_WriteByte(0xCC); //Прескокнете откривање на секвенца на ROM
DS18B20_WriteByte(0xBE); //Прочитајте ја температурата
temp_L=DS18B20_ReadByte(); //Читајте податоци за ниска температура
temp_H=DS18B20_ReadByte(); //Читајте податоци за висока температура
temp=temp_L|(temp_H<<8); //Синтетизирана температура
повратна температура;
}
3.2 DS18B20.ч
#ifndef DS18B20_H
#дефинирај DS18B20_H
#вклучуваат “stm32f10x.h”
#вклучуваат “sys.h”
#вклучуваат “одложување.ч”
#вклучуваат “ds18b20.h”
#вклучуваат “usart.h”
/*Интерфејс на пакетот*/
//Иницијализирајте го DS18B20 во режим на внесување
#дефинира DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x80000000;}
//Иницијализирајте го DS18B20 во режим на излез
#дефинира DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x30000000;}
//Излез на порта DS18B20 IO
#дефинирајте го DS18B20_OUT PBout(15)
//Влез на порта DS18B20 IO
#дефинирајте го DS18B20_IN PBin(15)
//Декларација за функција
u8 DS18B20_CleckAck(празнина);
u8 DS18B20_CheckDevice(празнина);
неважечки DS18B20_Init(празнина);
u16 DS18B20_ReadTemp(празнина);
u8 DS18B20_ReadByte(празнина);
неважечки DS18B20_WriteByte(U8 cmd);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Функција за одложување
/*
Функција: Доцнење во нас
*/
неважечки DelayUs(во нас)
{
#ifdef _SYSTICK_IRQ_
int i,ј;
за(i=0;iVAL=0; //CNT контра вредност
SysTick->LOAD=9* нас; //9 значи 1ус
SysTick->CTRL|=1<<0; //Стартувајте го тајмерот
направи
{
tmp=SysTick->CTRL; //Прочитајте статус
}додека((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT контра вредност
SysTick->CTRL&=~(1<<0); //Исклучете го тајмерот
#endif
};јас++)>
3.4 main.c Јавете се на DS18B20 за да ја прочитате температурата и да ја испечатите на сериската порта
#вклучуваат “stm32f10x.h”
#вклучуваат “ds18b20.h”
u8 DS18B20_ROM[8]; //Чувајте го 64-битниот ROM-код на DS18B20
int main(празнина)
{
u16 температура;
USARTx_Heat(USART1,72,115200);//Иницијализирање на сериската порта 1
DS18B20_Топлина(); //Иницијализација на DS18B20
/*1. Прочитајте го 64-битниот ROM-код на DS18B20*/
//Испрати пулс за ресетирање, откривање на пулсот на постоење
додека(DS18B20_CheckDevice())
{
printf(“Уредот DS18B20 не постои!\n”);
Доцнење г-ѓа(500);
}
//Испратете ја командата за читање на 64-битниот ROM-код
DS18B20_WriteByte(0x33);
//Јамка читање 64-битен ROM код
за(i=0;јас<8;јас++)
{
DS18B20_ROM[јас]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%г]=0x%X\n”,јас,DS18B20_ROM[јас]);
}
додека(1)
{
/*2. Истовремено управувајте со сите DS18B20 на автобусот за да започнете со конвертирање на температурата*/
DS18B20_CheckDevice(); //Испрати пулс за ресетирање, откривање на пулсот
DS18B20_WriteByte(0xCC); //Прескокнете откривање на секвенца на ROM
DS18B20_WriteByte(0x44); //Започнете со конверзија на температурата (нека сите DS18B20 на автобусот ја претвораат температурата)
Доцнење г-ѓа(500); //Почекајте да завршат сите конверзии на температурата DS18B20 на линијата
/*3. Единечно насочено отчитување на температурата на секој DS18B20*/
DS18B20_CheckDevice(); //Испрати пулс за ресетирање, откривање на пулсот
DS18B20_WriteByte(0x55); //Испрати команда за да одговара на ROM-от
за(i=0;јас<8;јас++) //Испратете 64-битен код
{
DS18B20_WriteByte(DS18B20_ROM[јас]);
}
DS18B20_WriteByte(0xBE); //Прочитајте ја температурата
temp=DS18B20_ReadByte(); //Читајте податоци за температура од низок ред
темп|=DS18B20_ReadByte()<<8; //Читајте податоци за температурата од висок ред
printf(“temp1=%d.%dn”,темп>>4,темп&0xF);
printf(“temp2=%fn”,температура * 0,0625);
Доцнење г-ѓа(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







