ARDUINO и цифров сензор DS18B20. Инструкции за използване на DS18B20 Датчик за температура DS18B20 Датчик за температура

Трябва ли да измерите температурата в околната среда, неблагоприятна за чип?

DS18B20 сензорът ще ви помогне да измерите температурата на водата в аквариума или в чайника. Можете да го използвате за измерване на температурата на улицата и в същото време да не се страхувате, че сензорът ще вали. Dachnips ще оценят възможността за измерване на температурата на почвата в оранжерията и на сайта.

В постоянната памет DS18B20 можете да запишете стойностите на граничната температура, когато излезете от сензора, ще превключите в режим на аларма. На общата гума на много сензори микроконтролерът може да разбере кои от тях са преминали към този режим. По този начин става лесно да се определи проблемната област в контролираната среда.

Резолюцията на показанията е конфигурирана и може да бъде от 9 до 12 бита. По-малко разрешаване - над скоростта на трансформация.

Връзка

Сензорът на уплътнителя въз основа на чипа DS18B20 може да бъде свързан по два начина:

За три жици: храна (червена), земя (черна) и сигнал (бял).

За две жици: Земя и сигнал. В този случай сензорът от време на време може да осигури неправилни показания, които са лесни за изключване от крайния резултат чрез филтрация.

Независимо от метода на свързване, сигналната жица трябва да бъде свързана с мощност чрез резистор от 4.7 com. Когато е свързан само един сензор, резистор е 10 com.

За да свържете сензора до Arduino или пакетна дъска, ще бъде удобно да използвате клемната лента.

За да свържете 1-жилни устройства до Arduino, има завършена библиотека и е от DS18B20 да работи с DS18B20. Има библиотечна надстройка от Miles Burton.

Характеристики:
  • Захранване: 3.0..5.5 в
  • Температурен диапазон: -55 ° C .. + 125 ° C
  • Точност на температурните показания: 0.5 ° C
  • Стъпка на свидетелството: 0.0625 ° С
  • Интерфейс: 1-тел
  • Дълъг проводник: 1 метър
  • Текущо потребление: 1mA

В асортимента на нашия магазин се появи сензор далас температури 18B20 В корпуса на влагозаслуженията с широка гама от измерени температури от -55 до + 125 ° C. Данните за защита на влагата и максимална температура в +125 градуса незабавно действат върху мисли за екстремно изпитване в кипяща вода. Ще се справим с това.

Компоненти за повторение (Купи в Китай):

Този сензор работи на 1-жица.

Всяко такова устройство съдържа уникален 64-битов "ROM" код, състоящ се от 8 бита, определящи кода на серията, 48 бита с уникален номер и 8 бита устойчиви на шума CRC код.

Информацията за измерената температура се съхранява в оперативната памет на сензора, която се състои от 9 байта.

1 и 2 Байтовете съхраняват информация за температурата.

3 и 4 Байтовете се съхраняват в съответствие с горните и долните температурни граници.

5 и 6 Байтовете са запазени.

7 и 8 Байтове се използват за измерване на температурата на ултра-измерване.

9 Байт съхранява устойчив на шума CRC код на предишни 8 байта.

Основните команди, използвани при работа с библиотеката:

търсене (адрес на връщане)

Търсенията за следващото 1-телево устройство, ако устройството е намерено, след това в 8 байтовия масив от адресителния ратен файл, неговият ROM код се записва, в противен случай връща FALSE.

reset_search ()

Изпълнява ново търсене от първото устройство.

нулиране ()

Извършва нулиране на гумите, необходимо е преди свързване към сензора.

изберете (адресът)

Изпълнява избор на устройство след нулиране, кодът на ROM устройството се пропуска.

пишете (байт)

Предава информационния байт към устройството

пишете (байт, 1)

прочети ()

Чете информационен байт от устройството

cRC8 (DataArray, дължина)

Изчислява CRC байтовия код от масива datesAirlay, дълга дължина

Използвайки командата за запис, можем да прехвърлим контролни команди на сензора за местоположение под формата на байтове, помислете за основните от тях:

0x44. - Провеждане на измерване на температурата и запис на данни на RAM

0x4E. - Запис 3 байта в 3, 4 и 5-та байта от овен

0x48. - копиране на третия и 4-та байта на RAM в EEPROM

0xb8. - Копиране на данни от EEPROM до 3 и 4Y RAM байтове

Свържете се с Arduino.

От сензора излизат три жици:

Червен: "+" сила.

Черните:"-"

Бяло: Изходна продукция

Свързване на сензора:

Червен: На + 5 Volt Arduino.

Черните На всеки от GND Pins --- Arduino.

White. На всеки arduino цифров вход (в пример D10).

За да работите със сензора, е необходимо да се свържете сигналната жица с захранващия проводник с резистор с номинална стойност 4.7 com.

Да започнем с най-много полезен пример За да работите със сензора, изходните температурни показания в пристанищния монитор.

Примерна програма за програмата

#Include. Onewire DS (10); // свързани с 10 щифта (резистор на 4.7k задължително) void setup (void) (serial.bgin (9600);) void loop (байт i; байт подарък \u003d 0; yeapy type_s; байтови данни; byte addr; flated addr; поплавък по Целзий; Фаренхайт; ако (! Ds.search ("Няма повече адреси."); Serial.println (); ds.reset_search (); закъснение (250); връщане;) сериен. Отпечатване ("ROM \u003d"); за (I \u003d 0; аз< 8; i++) { Serial.write(" "); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // начало коммуникации delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // читаем значение Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for (i = 0; i < 9; i++) { // смотрим 9 байтов data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Преобразуем получненный данные в температуру // Используем int16_t тип, т.к. он равен 16 битам // даже при компиляции под 32-х битный процессор int16_t raw = (data << 8) | data; if (type_s) { raw = raw << 3; if (data == 0x10) { raw = (raw & 0xFFF0) + 12 - data; } } else { byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); }

Dallas18b20 Екстремно тестване

Както вече споменахме, решихме да подредим екстремното тестване на сензора, но просто пропускане на сензора в кипящата вода не е интересно. Поставете сензора в стъклото и се свари. За яснота в монитора на портовете ще се показват стойностите на температурата. На видеоклипа, прикрепен по-долу, може да се види плавно повишаване на температурата. Искам да отбележа Тази температура на вода при нормално атмосферно налягане не може да бъде над 100 ° C. Когато тествате сензора в кипяща вода, натрупаната от нас температура е 99.87 ° С. Тестът може да се счита за успешен.

Схемата се добавя към релето, за автоматично изключване на котела при температура от 99.5 ° С. За да не се режат кабелите на котела, да се свържете през изхода, вътре в това, от което се намира горното реле.

Важно

Температурният сензор е в металния корпус, преходът от метал към кабела е изолиран с се свиваща тръба. На метала тръбата се побира много плътно, кабелът е по-слаб, през това място може, поне вероятността и малка, водата се изтече. За да избегнем тази ситуация, ние съветваме да не потапяме сензора в цялата вода. Ако все още имате такава нужда, препоръчваме да проявявате този участък по-внимателно.

Примерен код

#Include. Onewire DS (10); // свързан с 10 pyuse (резистор на 4,7 000 задължителен) void setup (void) (serial.begin (9600); пинмод (3, изход); // включване на цифров котел (3, нисък);) void loop (празен); ) (Byte i; byte prevision \u003d 0; байт тип_S; байтови данни; байт addr; float по Целзий, Фаренхайт; ако (! Ds.Search (ADDR)) (Serial.println ("Няма повече адреси"); serial.println (); ds.reset_search (); закъснение (250); връщане;) serial.print ("rom \u003d"); за (i \u003d 0; аз< 8; i++) { Serial.write(" "); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // начало коммуникации delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); // читаем значение Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for (i = 0; i < 9; i++) { // смотрим 9 байтов data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Преобразуем получненный данные в температуру // Используем int16_t тип, т.к. он равен 16 битам // даже при компиляции под 32-х битный процессор int16_t raw = (data << 8) | data; if (type_s) { raw = raw << 3; if (data == 0x10) { raw = (raw & 0xFFF0) + 12 - data; } } else { byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); // Если температура достигает температуры кипения (с погрешностью), отключаем кипятильник if (celsius > 99.5) (цифрови фрази (3, високи);))

#Include.

Onewire DS (10); // свържете сензора до 10 цифрови бор

void setup (void) (
Serial.bgin (9600);
Pinmode (3, изход);
// включване на бойлер
Цифрови фрази (3, ниски);
}

void loop (void) (
Байт I;
Байт тип_S;
Байт данни;
BYTE ADDR;
Float Целзий, Фаренхайт;

// търсим ARRES сензор
Ако (! Ds.Search (ADDR) (
Serial.println ("Няма повече адреси".);
Serial.println ();
ds.reset_search ();
Закъснение (250);
Връщане;
}

// проверка дали не е предадена намеса
Ако (Onewire :: CRC8 (ADDR, 7)! \u003d ADDR) (
Serial.println ("CRC не е валиден!");
Връщане;
}
Serial.println ();

// определя серията сензори
Превключвател (addr) (
Случай 0x10:
Serial.println ("chip \u003d ds18s20");
Тип_S \u003d 1;
Почивка;
Случай 0x28:
Serial.println ("chip \u003d ds18B20");
Тип_S \u003d 0;
Почивка;
Случай 0x22:
Serial.println ("chip \u003d ds1822");
Тип_S \u003d 0;
Почивка;
По подразбиране:
Serial.println ("устройството не е фамилно устройство DS18X20.");
Връщане;
}

ds.reset ();
Ds.Избор (ADDR);
ds.write (0xbe); // прочетете оперативната памет на сензора

за (i \u003d 0; аз< 9; i++) {
Данни [I] \u003d Ds.Преца (); // попълнете масив от данни за четене
}

// Данните за температура се съдържат в първите два байта, превеждат ги на една стойност и ние се превръщаме в шестнадесетичен номер
Int16_t сурови \u003d (данни<< 8) | data;
ако (type_s) (
RAW \u003d RAW.<< 3;
Ако (данни \u003d\u003d 0x10) (
RAW \u003d (суровини и 0xFFF0) + 12 - данни;
}
}
Друго (
Байт cfg \u003d (данни и 0x60);
ако (cfg \u003d\u003d 0x00) raw \u003d суров & ~ 7;
Иначе, ако (cfg \u003d\u003d 0x20) суров \u003d суров & ~ 3;
Друго, ако (cfg \u003d\u003d 0x40) raw \u003d суров & ~ 1;
}
Целзий \u003d (float) суров / 16.0;
Fahrenheit \u003d Целзий * 1.8 + 32.0;
Serial.print ("temp \u003d");
Serial.print (по Целзий);
Serial.print ("C");
Serial.print (Фаренхайт);
Serial.println ("F");

// ако температурата достигне точката на кипене (с грешката), изключете котела
Ако (Целзий\u003e 99.5)
{
Цифрови фрази (3, високи);
}
}

Купи в Русия

Температурният сензор в Arduino е един от най-често срещаните типове сензори. Разработчикът на проекти с термометри на Arduino е на разположение в много различни варианти, различаващи се в принципа на действие, точност, конструктивно изпълнение. DS18B20 цифров сензор е един от най-популярните температурни сензори, често се използва в водоустойчив калъф за измерване на температурата на водата или други течности. В тази статия ще намерите описание на сензора DS18B20 на руски език, ние ще разгледаме характеристиките на свързването с Arduino, принципа на работа на сензора, описанието на библиотеките и скиците.

DS18B20 е цифров температурен сензор с различни полезни функции. По същество, DS18B20 е цял микроконтролер, който може да съхранява стойността на измерването, да сигнализира температурата за зададените граници (самите граници могат да бъдат инсталирани и променят), промяна на точността на измерванията, метода на взаимодействие с взаимодействието с взаимодействието с контролера и много Повече ▼. Всичко това е в много малка сграда, която освен това се предлага в водоустойчива производителност.

Датчът на температурата на DS18B20 има различни видове жилища. Можете да изберете един от три - 8-пин (150 mils), 8-пинов μsop и 3-пинов до-92. Последното е най-често и произведено в специален случай за защита на влага, така че да може да бъде безопасен под вода. Всеки сензор има 3 контакта. За случая до-92, трябва да погледнете цвета на проводниците: черно - земя, червено-хранене и бяло / жълто / синьо - сигнал. В онлайн магазините можете да си купите готов модул DS18B20.

Къде да купя сензор

Естествено, DS18B20 е по-евтино да купите по-евтино на AliExpress, въпреки че се продава във всички специализирани руски онлайн магазини с Arduino. Ето някои връзки например:

Паметта на сензора се състои от два вида: оперативен и нелетилен - SRAM и EEPROM. Последните записи на регистрите и регистри на конфигурацията, TL, които могат да бъдат използвани като регистри на общо предназначение, ако не се използват за определяне на обхвата на допустимите температурни стойности.

Основната задача на DS18B20 е да се определи температурата и трансформацията на резултата, получен в цифров изглед. Ние можем самостоятелно да определим необходимото разрешение, като определим количеството точност - 9, 10, 11 и 12. В тези случаи резолюцията ще бъде равна на 0,5 ° C, 0.25С, 0.125С и 0.0625С.

Получените температурни измервания се запазват в SRAM сензора. 1 и 2 байта запазват получената температура, 3 и 4, за да се запазят границите на измерване, 5 и 6 запазени, 7 и 8 се използват за определяне с висока точност, последният 9 байт съхранява CRC кода CRC код.

Свързване DS18B20 до Arduino

DS18B20 е цифров сензор. Цифровите сензори предават стойността на измерената температура под формата на специфичен двоичен код, който влиза в цифровите или аналоговите щифтове на Arduino и след това се декодира. Кодовете могат да бъдат най-различни, DS18B20 работи чрез 1-жичен протокол за данни. Няма да отидем в детайлите на този цифров протокол, посочваме само необходимия минимум за разбиране на принципите на взаимодействие.

Обменът на информация в 1-тел се дължи на следните операции:

  • Инициализация - определянето на поредица от сигнали, от които започва измерването и другите операции. Учителят прилага импулс за нулиране, след това сензорът трябва да представи импулс на присъствието, което докладва готовността за извършване на операцията.
  • Запис на данни - байтата с данни се предават на сензора.
  • Четене на данни - байт взема от сензора.

За да работите със сензора, ще се нуждаем от софтуер:

  • Arduino Ide;
  • Onewire библиотека Ако няколко сензора се използват в автобуса, можете да използвате библиотеката Dallastemperature. Тя ще работи на върха на Onewire.

От оборудването ще ви трябва:

  • Един или повече DS18B20 сензори;
  • Arduino микроконтролер;
  • Съединители;
  • Резистор с 4.7 kΩ (в случай на свързване на един сензор, резистор ще бъде оразмерен от 4 до 10k);
  • Платка;
  • USB кабел за свързване към компютър.

За борда на ARDUINO, сензорът се свързва просто: GND от термичния сензор е прикрепен към Arduino GND, VDD е свързан към 5V, данни към всеки цифров щифт.

Най-простата диаграма на свързването на цифровия сензор DS18B20 е представена на фигурата.

Алгоритъмът за получаване на информация за температурата в скицата се състои от следните стъпки:

  • Определение на адреса на сензора, проверете връзката му.
  • Сензорът служи като изискване за четене на температурата и излага измерената стойност в регистъра. Процедурата отнема повече от останалите, отнема около 750 ms.
  • Командата се връчва за четене на информация от регистъра и изпращане на стойността на "Port Monitor",
  • Ако е необходимо, той се превръща в градуса по Целзий / Фаренхайт.

Пример за проста скица за DS18B20

Най-простата скица за работа с цифров сензор е както следва. (В скицата използваме библиотеката Onewire, която ще бъде разговаряна повече от малко по-късно).

#Include. / * * Описание на взаимодействието с DS18B20 цифров сензор * Свързване на DS18B20 до Arduino чрез PIN 8 * / Onewire DS (8); // Създайте OneWire обект за 1-жичен автобус, с който ще работите с Void Setup () Sensor (Serial.Begin (9600);) void loop () (// определя температурата от DS18B20 байтов датчик за данни ; // място за ds.reset () температура стойност; // започваме взаимодействие с нулиране на всички предишни команди и ds.write параметри (0xcc); // ние даваме командата DS18B20 за пропускане на адреса на адреса. в Нашият случай, само един фърмуер Ds.Write (0x44); // дават сензора DS18B20 за измерване на температурата. Самата стойност на температурата все още не е все още - сензорът ще го постави във вътрешната памет за забавяне (1000); // MicroCircuit измерва температурата и ние чакаме. Ds.reset (); // сега се подготвяте да получите стойността на измерената температура на ds. пишете (0xCC); ds.write (0xBE); // моля прехвърляйте Стойност на регистрите с температурата // Получете и прочетете отговора на данните \u003d Ds.Прочетете (); // прочетете стойността на температурата на по-младата байт (); // сега старшият // формират крайна стойност I: // - първи "лепило" стойност, // - след това го умножи върху коефициента, съответстващ на резолюцията (за 12 бита по подразбиране - това е 0.0625) поплавък \u003d ((данни)<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Скица за работа с DS18B20 сензор без забавяне

Можете да усложвате малко програма за DS18B20, за да се отървете от спирането на работата на скицата.

#Include. Onewire DS (8); // Обект Onewire int температура \u003d 0; // Глобална стойност на променлива температура на съхранение от DS18B20 LongupdateTime \u003d 0 сензор; // променлива за съхранение на последното време за четене от TEST int temp_update_time \u003d 1000 сензор; // да определят честотата на празнота (Serial.Begin (9600);) void loop () (detecttemperature (); // определя температурата от DS18B20 сериал.println сензор (температура); // показват получения резултат Температурата на температурата има int тип, фракционната част просто ще бъде изхвърлена) int detectteMperature () (байт данни; ds.reset (); ds.write (0xcc); ds.write (0x44); ; ако (millis () - lastupdateTime\u003e temp_updatetime \u003d millis (); ds.reset (); ds.write (0xcc); ds.write (0xbe); data \u003d ds.read (); data \u003d ds.pead () ; // формиране на стойност температура \u003d (данни<< 8) + data; temperature = temperature >> 4; } }

Dallastemperaturey и DS18B20 библиотека

Във вашите скици можем да използваме библиотеката Dallastemperature, която опростява някои аспекти на работата с DS18B20 сензор до 1 тел. Пример за скица:

#Include. // номер на Arduino Pina с свързан #Define PIN_DS18B20 8 // създаване на Onewire Onewire Object (PIN_DS18B20); // Създайте обект Dallastemperature, за да работите със сензорите, като го прехвърлите линк към обекта, за да работите с 1 тел. Dallastemperature dallassens (& onewire); // специален обект за съхранение на адресното устройство deviceaddress sensorAddress; Void loop (void) (// заявка за измерване на температурния сензор сериал. ("Измерване на температурата ..."); dallassens.requesttemperatures (); // молим DS18B20 да събира данни serial.println ("екзекутира". ); // заявка за получаване на запаметена печатаща температура на температурата; dallassens.gettempc (deviceaddress); serial.print ("temp c:"); serial.println (tempc);) // спомагателна функция за показване на DS18B20 Void PinterAddress сензор сензор адрес (за (за (uint8_t i \u003d 0; аз< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Библиотека на Onewire за работа с DS18B20

DS18B20 използва 1-жичния протокол за обмен на информация с Arduino, за която вече е написана отлична библиотека. Можете и трябва да го използвате, за да не изпълните всички функции ръчно. . За да инсталирате библиотеката, изтеглете архива, разопаковайте директорията на Arduino в папката на библиотеката. Библиотеката се свързва с помощта на командата #include

Всички DS18B20 сензори са свързани успоредно, за тях всички достатъчни резистор. Използвайки библиотеката Onewire, можете едновременно да прочетете всички данни от всички сензори. Ако броят на свързаните сензори е повече от 10, трябва да изберете резистор с устойчивост на не повече от 1.6 com. Също така, за по-точно измерване на температурата, трябва да поставите допълнителен резистор на 100 ... 120 ома между изхода на данните на борда на Arduino и Data на всеки сензор. Можете да разберете от кой сензор се получава това или тази стойност, като се използва уникален сериен 64-битов код, който ще бъде издаден в резултат на изпълнението на програмата.

За да свържете температурните сензори в нормален режим, трябва да използвате схемата, показана на фигурата.

Заключения

Microcircuit Dallas DS18B20 е много интересно устройство. Температурните сензори и термометри, създадени на основата си, са подходящи за повечето задачи с характеристики, разработени от функционалните, сравнително не на пътя. Специален сензор за популярност DS18B20 е намалял като устройство, което е влагозаслужено за измерване на температурата на флуида.

За допълнителни възможности е необходимо да се плати относителната трудност да работи със сензора. За да свържете DS18B20, ние непременно ще се нуждаем от резистор с номинална стойност от около 5k. За да работите със сензора в скици Ардуино, трябва да инсталирате допълнителна библиотека и да получите определени умения за работа с нея - всичко не е съвсем тривиално там. Въпреки това, можете да си купите вече готов модул, а за скицата в повечето случаи има достатъчно прости примери в тази статия.

В процеса на изучаване на микроконтролери, той рано или късно е необходимо да се измери такъв метеорологичен параметър на околната среда, като температурата му. Съвременният световен електронен пазар предлага широка гама от температурни сензори. Основните разлики между тях се състоят в обхвата на измерената температура, захранващото напрежение, обхвата на приложението, общите размери, методите за преобразуване на температурата, интерфейс за взаимодействие с системата за управление на потребителя. Така исторически се случи, че в момента един от най-популярните температурни сензори е сензорът DS18.В20dallas Semiconductor Corporation. За него следния разказ.

DS18.В20- цифров температурен сензор с програмируема резолюция за преобразуване.

Отличителни черти:

1) Използване на интерфейсния автобус с 1 проводния автобус за взаимодействие с системата за управление;
2) наличието на уникален 64-битов последователен идентификационен код, разположен във вътрешната ROM памет и предназначена за многоточкови системи, където трябва да бъде разгледан специфичният сензор;
3) Захранващото напрежение е 3-5.5V, което му позволява не само в 5-волтови системи, но и 3.3 (повечето микроконтролери);
4) обхватът на измерената температура е -55 ... + 125 ° С;
5) Точност от ± 0.5 o C, въпреки че е вярно само за обхвата -10 ... + 85 o c;
6) Резолюцията за преобразуване се определя от потребителя и е 9 ... 12 бита;
7) има вътрешни тригери на горните и долните прагове за задействане с аларма, генерираща аларма за системи, използващи термостатична логика;
8) Тези сензори са програмно съвместими с DS1822. И широко използвани в промишлени термостатични регулатори, промишлени системи, в потребителската електроника и други термични чувствителни системи.

Описание и принцип на работа на устройството:

В моята статия ще опиша пример за работа със сензора, направен в корпуса до 92.

Изглежда така:

Вътре, това нещо е подредено много просто, погледнете:

По-подробно разгледайте тази блокова диаграма.

Въпреки това, храненето по този начин прави някои ограничения за параметрите на сензора. Задържането на линията за данни за известно време обсъжда кондензатора, който ще доведе до де-енергията на вътрешната VDD линия и съответно сензорът. Следователно в неизползваното време трябва да се запази високо логическо ниво на линията DQ. Трябва да се отбележи една важна забележка. При превръщането на температурата и копирането на данни от Scratchpad в EEPROM (в един от регистрите), текущият ток, консумиран от текущия VDD ток, може да достигне 1.5-та, което е немощ на вътрешния кондензатор и ще има голям спад на напрежението На резистор за суспензия, който неприемливо ще повлияе на работата на устройството като цяло. За да направите това, е необходимо да се организира линия DQ схема на мощна обвивка, прилагана от тази схема:

След издаването на екип Конвертирам.T. или Копие.Scratcpad. Трябва да активирате мощен MOSFET-транзистор лифт DQ не по-късно от 10 mx (макс.), Според разработчиците на сензора, след което времето за преобразуване (TCONV) или времето за прехвърляне на данни (TWR \u003d 10 mc) и по това време Няма действия с мощна обвивка на линията DQ не трябва да бъде!

За стандартната храна трябва да кажете малко, защото всичко е просто, и дори MOSFET не е необходим изобщо:

Подсистемата "64-битова ROM и 1-тел порт" съдържа уникален 64-битов сериен идентификационен код, разположен в нелетил ROM памет, също в този възел има интерфейс на взаимодействие с 1-жичната система за управление. Подсистемата за управление на паметта на паметта предава данни между 1-жичния интерфейс и Scratcpad Memory, който на свой ред има достъп до регистрите на температурата, горната и долната аларма, регистъра на конфигурацията и генераторския регистър 8- Bithing checksum за защита на системата от Неправилни данни.

Когато захранването е включено по подразбиране, сензорът има решение за превръщане на 12 бита и веднага влиза в режима на намалена мощност. Да инициира преобразуването, капитанът трябва да премине командата Конвертирам.T. . След като конвертирате температурата към цифровия код, този код се намира в паметта на Scratchpad под формата на двойна дума и сензорът се връща към енергоспестяващия режим.

Преобразуване на температурата.

Сега ще разберем как се преобразува температурата в сензора. В действителност, ADC се намира вътре в температурния сензор и изхода, разположен в температурния регистър, се прехвърля в паметта на скрап. Данните за температурата имат следния формат:

Знамето на иконата S се използва за обозначаване на броя на номерата (s \u003d 0 - броя, съдържащ се в бита 10-0 позитивно, и s \u003d 1, ако броят, съдържащ се в същите битове, е отрицателен, т.е. в този случай, температурата изглежда в допълнителен код (допълнителен код до две)).

Когато конфигурирате резолюцията за преобразуване от 12 бита, всички 12 бита (битов 11-битов 0) участват и съдържат надеждни данни. При създаването на разделителна способност 11 бита, съдържанието на бита 0 не трябва да се взема предвид, когато създаването на 10 бита не трябва да се вземат под внимание 0 и 1 и т.н.

Алармата е функцията на термостата.

Това осигурява 2 8-битови регистрите, th и tl. Стойността на горния праг на температурата и съответно в TL, долната. Ако температурата над стойността на Th или под TL е зададена на флага на алармата. Този алармен флаг се открива от водещото устройство чрез издаване на команда. Търсене на аларма. на DQ линия. Аларменият флаг се актуализира при всяка операция за преобразуване на температурата. Между другото, само бита от 11 до четвъртия температурен регистър се използват в сравнение с TH или TL регистъра, от това следва, че функцията на термостата работи само за целочислени температурни стойности. Регистрите са физически EEPROM с памет, така че те запазват ценностите си, когато захранването е изключено. Самите регистрите са подобни на температурния регистър, само те са 8-битови, знамето S е абсолютно същата стойност, както в предишния случай:

Този код, както е отбелязано по-рано, е необходимо, за да се идентифицира всяко устройство на линията в системите за измерване на температурата.

Форматът на тази памет е:

По-младите 8 бита се изхвърлят, за да определят семейството и съдържат стойността на 0x28. Следващите 48 бита съдържат уникален сериен номер на устройството. Най-старият байт съдържа стойността на CRC контролната сума, изчислена за по-младите 56 бита на ROM паметта.

Организация на паметта.

Паметта на сензора се състои от памет на Notepad (Scratcpad) и EEPROM памет за съхранение на конфигурационни данни и стойности на регистрите на горните и долните прагове на алармата.

Когато захранването е изключено, данните от батерията 2, 3 и 4 запазват стойността си в EEPROM. Е, когато се включи, стойността в тях остава непроменена. Байт 0 и 1 съдържат стойността на преобразуваната температура, байта 5, 6, 7 са запазени за вътрешна употреба и не могат да бъдат достъпни за потребителя за своите нужди.

8-мият байт съдържа стойността, генерирана от вградената логика на CRC кодовата формация за байтове от 0 до 7, което свежда до минимум възможността за погрешна температура в края.

Трябва да се отбележи, че ако функцията на термостата не се използва, тогава регистрите на TH и TL могат да се използват като памет с общо предназначение - можете да съхраните всяка информация в тях.

Данните се записват в байтове 2, 3 и 4, като се започне с по-младия бит 2, използвайки командата Напишете скралп.. За да проверите целостта на записаните данни, можете да ги прочетете, за които е необходимо да преминете командата на сензора Прочетете скрап.След което капитанът трябва да получава данни от по-младия байт 0.

За да запазите данните на старшите, юношеския термостат, както и регистъра на конфигурацията в EEPROM памет, капитанът трябва да премине командата на командата Копиране на скрап..

Както е отбелязано по-рано, данните, които вече са записани в EEPROM, когато захранването е изключено, се запаметява. Но когато захранването е включено от съответните EEPROM клетки, стойностите се изтеглят автоматично в съответните регистри на паметта на Scratcpad. Удобно, нали? :)

В допълнение, данните, записани в EEPROM, могат по всяко време да бъдат презаписани в паметта на Scratchpad. Това е необходимо, например, когато сте променили конфигурацията в процеса, и след това трябва да станете в "стандартен режим на работа", т.е. Върнете тази конфигурация на работата, която беше преди промяна на съдържанието на регистрите на паметта на Scratcpad. Ето всъщност за това, водещото устройство трябва да предаде командата на сензора. Спомнете си E.2 .

В регистъра на конфигурацията могат да бъдат определени само 2 бита: R0 и R1. Тези битове определят резолюцията на преобразуването на температурата и по подразбиране е настроено на 1, което определя първоначалната настройка до 12-битова резолюция на конверсия.

Всички възможни конфигурации на тези битове и съответните разрешения са представени в таблицата по-долу. Трябва да се отбележи, че по-голямата резолюция на преобразуването, колкото повече време за преобразуване, например за 12-битова резолюция, времето за преобразуване е 750ms (макс.).

Взаимодействие с контролната система.

DS18B20, както е отбелязано по-рано, за да комуникирате с устройството за задвижване, използвайте автобуса с 1 жичен интерфейс. Следователно, за да го свържете, системата за управление трябва да предостави изход за изход или с високо съдържание на линия.

По-долу е показан вътрешен интерфейс на сензора:

В неактивно състояние (в празно състояние), DQ линията се привлича в резистор към "+" мощност. Така тази линия трябва винаги да се съхранява в това състояние между транзакциите (предавания данни за данните). Ако по някаква причина транзакцията трябва да бъде спряна, DQ линията трябва да се съхранява на високо логическо ниво, ако това предаване продължава допълнително. В процеса на спиране на транзакцията можем да запазим DQ линията за дълго време на високо логическо ниво, като се започне с 1 SCS. Но ако шината за данни се съхранява на ниското ниво на логиката по-дълго от 480μs, ще се появи пълно нулиране на целия сензор в този автобус.

Поредица от операции за обмен.

Всеки път, когато системата за управление е достъпна до сензора, трябва да се следва следната последователност от действия:

1) инициализация;
2) ROM командата (последвана от необходимите данни за данните);
3) функционалната команда на сензора (последвана от необходимия обмен на данни).

Ако няма стъпка при достъп до сензора - сензорът няма да отговори. Изключението е екипът Търсене.ROM [ Е.0 х.] и Аларма.Търсене. [ ECH.] , след тяхното изпълнение, капитанът трябва да се върне към първия етап на контролната последователност.

Така. Всички транзакции започват с инициализация. Тази операция е придружена от разработването на импулсно устройство, на което задвижваните устройства (в този случай, сензорът (ите)) предават присъствието на присъствието импулс, че сензорите са свързани и готови за работа.

Като цяло, 1-живият интерфейсен автобус, внедрен в сензора, определя няколко вида сигнали на линията за данни: нулиране импулс, импулс на присъствие, запис 0, запис 1, четене 0, четене 1. Всички тези операции изпълняват главното устройство , с изключение на импулса на присъствието. Той образува само сензора (ите).

Така че, за начало, главното устройство превключва в режима на предавателя и настройва DQ линията при 0 за известно време най-малко 480μs (подчертано в Bold Black). Той нулира сензора. След това линията трябва да бъде пусната и да преведе главното устройство в режим на приемник, докато издърпващия резистор ще настрои линията за данни на високо логическо ниво (подчертано в тънък черен цвят). След като сензорът почита нарастващия фронт, сензорът ще очаква напред до 15-60μs и ще възстанови линията за данни на 0 и ще се съхранява за 60-240μs. След това време сензорът освобождава линията и ще бъде монтирана на логическото ниво 1 за най-малко 480μs след откриване на сензора за пулс.

Сега нека поговорим за това как се извършва процесът на прехвърляне на данни. Обикновено, битове. Случаят е следващ. Взето е сегмент от време и през това време майсторът изглежда, че имаме на линия там, да кажем 1 - това означава, че са записали 1, ако 0 означава, че е записано нула. Но това е само абстрактно обяснение. Всъщност има някои нюанси, свързани с временната рамка на целия този случай.

Гледайте снимки:

Всичко започва с факта, че водещият трябва да пропусне линията, даден на ниско логическо ниво, и от тази точка на слота за запис / четене 1/0, който е от 60 до 120 mx. Между слотовете за запис / четене, линията за данни трябва да бъде инсталирана на 1 в даден момент, няма по-малко време за възстановяване (1μs). За да организирате рекорден слот 0, е необходимо да запазите линията за данни в 0 всички времеви слот, но ако трябва да пишете на сензора 1, тогава първо да възстановим линията за данни на 0, след това очакваме поне 1 mx и освободете линията в 1, по време на запис 1 (60-120μs) ще бъде записан 1 към сензора (вижте горната дясна фигура).

Всъщност, ако за 15-60 μs, след началото, 1 ще бъде открит на линията за данни, след това ще бъде записана и ако тя ще бъде пусната за 60-240μs.

Четенето на данните е придружено от водещо устройство, когато възприема линията, в очакване на най-малко 1 mx и изглежда 15 mx, че се случва: ако остане 0, сензорът предава 0, ако е включен на 1, след това 1.

Екипи.

ROM екип.

Тези команди трябва да следват последователността на инициализация и да съдържат инструкциите за търсене на съответния сензор и др. Освобождаването на всяка команда е 8bit. След изпълнението на съответната команда можете да прехвърлите функционалната команда към сензора.

Търсене на ROM

Когато системата първоначално е свързана, тя трябва да разпознае всички устройства, свързани с автобуса. За това този екип. Но, тъй като имаме само един сензор, няма да използваме тази команда.

Четене на ROM

Тази команда се използва само когато има само един сензор в автобуса. Това позволява на водещото устройство да чете съдържанието на 64 ROM паметта, без да използва командата за търсене. И ако се опитате да използвате тази команда, когато броят на сензорите е свързан, повече от 1, те ще започнат да преминават съдържанието на тази памет, което ще доведе до нежелани последици.

Съвпадение на ROM

Това е команда за съответствие на ROM. Съветникът освобождава 64 бита от съответната ROM памет, свързана към сензорния автобус, и вече е определено какво да правя с него (измерете температурата и т.н.). Други сензори на гумата ще изчакат своя ред по това време.

Skip Rom.

Това е ROM команда. Не взема предвид адреса на конкретен сензор в автобуса и незабавно призив на всички. След тази команда можете да дадете, например, командата за преобразуване на температурата и всички сензори ще започнат превръщането. Въпреки това, за да се покаже командата за четене на памет, след като се обадите на тази команда ще доведе до непредсказуеми резултати (защото наведнъж всички сензори ще предават данни). Така че само с един свързан сензор е възможно такава ситуация.

Търсене на аларма.

Тази команда е идентична с първата в тази таблица, с изключение на това, че сензорите търсят гумата с регулатора на алармата.

Функционални екипи.

Тези команди извършват функционални операции на всички процеси, например, стартирането на операцията за преобразуване на температурата, копиране на паметта и др. Общо команди 6, освобождаване от всяка 8bit.

Конвертиране на Т.

Преобразуване на текущи температури. След изпълнението на тази команда, 2-байтовите данни се въвеждат в регистъра на температурата.

Напишете скралп.

Записва данни на регистрите 2-4, като се започне с второ, по-млади битове напред. По време на предаването трябва да се наблюдават данни в три регистри, така че магьосникът да не пусне сензорите, защото загубата на данни е възможна.

Прочетете скрап.

Той инициира процеса на прехвърляне на данни към всички регистри на паметта на Scratcpad, като се започне с по-младия байт 0 и завършващ с по-стария байт 8 (CRC).

Копиране на скрап.

Тази команда копира съдържанието на байтовите регистри 2, 3 и 4 към съответните EEPROM клетки.

Спомнете си E.2

Тази команда копира данни от EEPROM на подходящите места в бележките на Scratchpad. Както е отбелязано по-рано, когато включите захранването, тази операция се случва автоматично.

Четене на захранването

Тук, всъщност, цялата мъдрост на работа с DS18B20 температурен сензор. За по-подробна информация ние се обръщаме към информацията за данни (). Сега е необходимо да се въведе цялата тази дейност в хардуера.

Схема на устройството:

Събрание чертеж на печатната платка (извинявам се за качеството, просто ще работя, за отстраняване на грешки):

Не забравяйте да промените таксата

Тъй като това е макет, аз го извадих от стария проект, така че на борда, който е по-горе - малко не това, което имам (в моя аз сега премахнах всичко твърде много и стана точно като в чертежите по-горе) .

Това се случи с мен:

Оказа се като сандвич

Изходният кодекс на програмата е написан в средата за развитие. Не се опитах да използвам максимума на готови библиотеки AVR-GCC компилатор, но написах всичко, което казват: "на ръка". Целта ми е да не демонстрирам виртуоза притежанието на SI, но само пример, написан в един час, способен да предоставя на новодошлите на общото представяне на работата със сензора.
Устройството е предназначено за използване в помещението, затова не предвижда измерването на отрицателните температури.

Изтеглете източника и поставяне на PCB по-долу

Всички допълнителни въпроси, желания в очакване на адреса: [Защитен имейл]

Все пак, фирмата "Далас полупроводник" таксита. Ние произвеждаме много уникални и евтини парчета. Един от тях е цифров сензор DS18B20. Чука малко по-малко череша кост с три заключения. Първият извод е Power + 5 волта, вторият е често срещан (нула), но третата е аларма, серийният код се отстранява от пропорционалната температура. Сензорът осигурява измерване на температурата в диапазона (-55 ... +125) ° C с грешка на измерването ± 0.5 ° C в диапазона (-10 ... +85) ° C. Всички процеси на гумата се контролират от централния микропроцесор. Вътре - сложна схема със сензор, ADC, ROM, регистри на съхранение и последователна изходна система.

Основните характеристики на DS18B20 са нейният преобразувател на температурата. Разделителната способност на температурния преобразувател може да бъде променена от потребителя и е 9, 10, 11 или 12 бита, съответстващи на стъпки от 0.5 ° С, 0.25 ° С, съответно 0.125 ° С и 0.0625 ° С. По подразделната способност е 12-битова.

Аз легнах около пет PIC16F628 контролери и по някакъв начин открих, че имах всички термометри или живак или алкохол, който се счита за ясно разстройство. Ето защо беше решено да се съберат няколко схеми на този сензор, за измерване на температурата на улицата, температурата в апартамента, добре, аз все още ще направя една мини-възможност за измерване на температурата на човек, а след това на тези електронни степени на аптеката небрежно са! Е, друга система за измерване на температурата ще се нуждае от робот, така че във всеки случай ще е необходим като тест.

От забелязаните недостатъци:

1. Високо термично съпротивление на случая. Това е невъзможно да се измери бързо. Невъзможно е да се измери бързите промени. На видеото може да се види.

2. Температурният диапазон -55 - +125 очевидно не е промишлен и като цяло, да кажем, наградите в Oymyakne или подземни низови мини на Таймир (и там -50-60 и дори -70, това се случва) той ще го направи не показва температурата. Това е, дори и целият обхват на домакинствата.

Таксата се отглежда от едната страна. Позволи на двойка коса, когато окабеляването ще бъде коригирано в следващите издания.

Изглед отгоре. Деактивирани изхвърляния - минус температури.

Тестове. Започна да взривява сешоар за сушене на коса, след това се изключи. Остава дори в случая да организира. Цената на устройството е $ 6 захранване - от стария мобилен телефон.

Може да се направи експериментална опция с захранвана от слънчевата батерия на LCD индикатори, за да не се притеснява изобщо с власт. Гледайте на прозореца и оставете да работите завинаги! Между другото, кой се нуждае от фърмуер, пишете, знам правилното.

P.S. Днес сравнява показанията с друго устройство, където сензорът е термисторът. Както виждаме - всичко съвпада.