Датчик температури Далас. Arduino та цифровий датчик температури DS18B20. Загальна характеристика, назви та маркування висновків моделей DS18B20

У статті наводиться докладний описінтегрального датчика температури DS18B20 російською мовою Інформація переведена на російську з офіційної документації виробника датчика – компанії Dallas Semiconductor.

Загальний опис.

DS18B20 це цифровий вимірювач температури, з роздільною здатністю перетворення 9 - 12 розрядів і функцією тривожного сигналуконтролю над температурою. Параметри контролю можуть бути задані користувачем та збережені в незалежній пам'яті датчика.

DS18B20 обмінюється даними з мікроконтролером по однопровідній лінії зв'язку, використовуючи протокол інтерфейсу 1-Wire.

Діапазон вимірювання температури становить від -55 до +125 °C. Для діапазону від -10 до +85 °C похибка не перевищує 0,5 °C.

Кожна мікросхема DS18B20 має унікальний серійний код довжиною 64 розряду, який дозволяє кільком датчикам підключатися на одну. загальну лініюзв'язку. Тобто. через один порт мікроконтролера можна обмінюватись даними з кількома датчиками, розподіленими на значній відстані. Режим дуже зручний для використання в системах екологічного контролю, моніторингу температури в будинках, вузлах обладнання.

Коротко про особливості DS18B20.

  • Для однопровідного інтерфейсу 1-Wire достатньо одного порту зв'язку з контролером.
  • Кожен пристрій має унікальний серійний код завдовжки 64 розряди.
  • Можливість підключення кількох датчиків через лінію зв'язку.
  • Немає потреби у зовнішніх компонентах.
  • Можливість отримання харчування безпосередньо від лінії зв'язку. Напруга живлення в межах 3,0 … 5,5 В.
  • Діапазон вимірювання температури -55...+125°C.
  • Похибка не перевищує 0,5 °C у діапазоні -10 ... +85 °C.
  • Дозвіл перетворення 9...12 біт. Задається користувачем.
  • Час виміру, не перевищує 750 мс, при максимально можливій роздільній здатності 12 біт.
  • Можливість програмування параметрів тривожного сигналу.
  • Тривожний сигнал передає дані адресу датчика, у якого температури вийшла за задані межі.
  • Сумісність програмного забезпеченняіз DS1822.
  • Вкрай широкі сфери застосування.

Призначення висновків.

Огляд датчика DS18B20

1 блок-схема датчика DS18B20. 64-бітове ПЗП (ROM) зберігає унікальний серійний код пристрою. Оперативна пам'ять містить:

  • значення виміряної температури (2 байти);
  • верхній та нижній порогові значення спрацьовування тривожного сигналу (Th, Tl);
  • регістр конфігурації (1 байт).

Через регістр конфігурації можна встановити роздільну здатність перетворення термодатчика. Дозвіл може бути заданий 9, 10, 11 або 12 біт. Регістр конфігурації та пороги тривожного сигналу містяться в незалежній пам'яті (EEPROM).

Режим – вимірювання температури.

Основна функція DS18B20 – перетворення температури датчика на цифровий код. Дозвіл перетворення визначається 9, 10, 11 або 12 біт. Це відповідає роздільній здатності - 0,5 (1/2) °C, 0,25 (1/4) °C, 0,125 (1/8) °C та 0,0625 (1/16) °C. При включенні живлення стан регістру конфігурації встановлюється на дозвіл 12 біт.

Після включення живлення DS18B20 знаходиться в стані спокою, що низько споживає. Щоб ініціювати вимірювання температури, майстер (мікроконтролер) повинен виконати команду ПЕРЕТВОРЕННЯ ТЕМПЕРАТУРИ . Після завершення перетворення результат вимірювання температури буде в 2 байтах регістра температури, і датчик знову перейде в стан спокою.

Якщо DS18B20 увімкнено за схемою із зовнішнім живленням, то майстер може контролювати стан команди конвертації. Для цього він повинен читати стан лінії (виконувати тимчасовий слот читання), по завершенні команди лінія перейде у високий стан. Під час виконання команди конвертації лінія утримується у низькому стані.

DS18B20 вимірює температуру у градусах за шкалою Цельсія. Результат виміру представляється як 16-розрядне, знакове число у додатковому коді (рис. 2.). Біт знака (S) дорівнює 0 для позитивних чиселта дорівнює 1 для негативних. При роздільній здатності 12 біт, у регістра температури все біти значні, тобто. мають достовірні значення. Для роздільної здатності 11 біт, не визначений біт 0. Для роздільної здатності 10-бітного не визначені біти 0, 1. При роздільній здатності 9 біт, не достовірне значення мають біти 0, 1 і 2. У таблиці 2 показані приклади відповідності цифрових кодів значенню температури.

Для людей не досвідчених у двійковій математиці напишу, що для обчислення температури треба:

  • При позитивне значення(S=0) код перевести в десятковий і помножити на 0,0625 °C.
  • При негативне значення(S=1) спочатку необхідно перевести додатковий код у прямий. Для цього треба інвертувати кожен розряд двійкового коду та додати 1. А потім перевести в десятковий і помножити на 0,0625 °C.

Режим – передача сигналу тривоги.

Після виконання команди перетворення температури виміряне значення порівнюється з верхнім і нижнім порогами з регістрів Th, Tl (формат на малюнку 3). Це байтові значення, знакові, додатковому коді, S =0 означає, що число позитивне, а S=1 – негативне. Зберігаються граничні значення в енергонезалежній пам'яті (EEPROM). Th і Tl доступні для читання та запису через байти 2, 3 оперативної пам'яті. Детально про це у розділі.

Через різну довжину регістрів TH, TL і температури, вони порівнюються тільки з бітами 11 по 4 регістра температури. Якщо значення виміряної температури перевищує TH або нижче, ніж TL, формується ознака аварії в DS18B20. Ознака перезаписується з кожним виміром температури, і якщо температура повертається в задані межі, вона скидається.

Провідний пристрій може перевірити стан ознаки аварії за допомогою команди ПОШУК ТРИВОЖНОГО СИГНАЛУ. Будь-який датчик із активною ознакою відповість на команду пошуку. Таким чином майстер точно визначить, який DS18B20 виробляє сигнал тривоги. Після зміни значень регістрів TH і TL тільки наступне перетворення температури сформує достовірну ознаку тривоги.

Живлення термодатчика DS18B20.

Однак коли DS18B20 виконує операцію перетворення температури або копіювання даних пам'яті в EEPROM, струм може досягати величини 1,5 мА. Такий струм може спричинити зниження напруги живлення пристрою до неприпустимого значення. Струму підтягуючого резистора та енергії, запасеної на Cpp, недостатньо для живлення в цих двох режимах. Для забезпечення достатнього живлення пристрою необхідно забезпечити потужну підтяжку шини до високого рівня в той час, коли відбувається перетворення температури або копіювання даних пам'яті в EEPROM. Це можна зробити за допомогою транзистора MOSFET, як показано на схемі (рисунок 4). Шина даних має бути підключена до потужного живлення:

  • протягом 10 мкс після команд КОНВЕРТУВАННЯ та КОПІЮВАННЯ ПАМ'ЯТІ ;
  • протягом часу перетворення (tconv) та передачі даних (не менше t WR = 10мс).

Жодних інших операцій у цей час на шині допускати не можна.

Як правило, у сучасних мікроконтролерів вихідного струму високого рівня цілком достатньо для живлення DS18B20. Тоді у MOSFET транзисторі потреби немає.

Для живлення DS18B20 можна використовувати звичайний метод – підключення зовнішнього живлення через висновок V DD (рисунок 5). Очевидні перевагицього методу у відсутності необхідності в MOSFET транзисторі і в тому, що під час перетворення шина залишається вільною і може використовуватися з іншою метою.

Я в таких випадках використовую наступну схему підключення DS18B20.

У цій схемі термодатчик працює у режимі із зовнішнім живленням, яке запасається на додатковому конденсаторі через діод. У моїх пристроях схема працює чудово.

64-розрядний серійний код пристрою.

Пам'ять датчика.

Організація пам'яті DS18B20 показана малюнку 7. Вся пам'ять включає оперативну (SRAM) і енергонезалежну (EEPROM) пам'ять. У EEPROM зберігаються регістри TH, TL та регістр конфігурації. Якщо функція тривожного сигналу не використовується, то регістри TH та TL можуть використовуватись як регістри загального призначення. Усі команди управління пам'яттю докладно описані у розділі .

У байтах з адресами 0 та 1 зберігаються молодший та старший байти регістру виміряної температури. Ці байти доступні лише для читання. 2-й і 3-й байти - TH і TL регістри. Байт 4 – регістр конфігурації. Детально про цей регістр у розділі РЕЄСТР КОНФІГУРАЦІЇ. Байти 5, 6, 7 зарезервовані, не можуть бути записані і, читаючи, завжди повертають 1.

Байт 8 доступний лише для читання. Він містить циклічний код (CRC) перших восьми байтів. DS18B20 формує цей код за способом, описаним у частині .

Запис даних у байти 2, 3 і 4 відбувається командою ЗАПИС ПАМ'ЯТІ. Дані повинні передаватися, починаючи з молодшого біта байта 2. Для перевірки запису даних можна прочитати пам'ять командою ЧИТАННЯ ПАМ'ЯТІ [код BEh]. При читанні дані передаються по шині, послідовно починаючи з молодшого біта байта 0. Запис даних TH, TL і регістра конфігурації в EEPROM відбувається за командою КОПІЮВАННЯ ПАМ'ЯТІ .

При включенні живлення дані з енергонезалежної пам'яті EEPROM перевантажуються в оперативну пам'ять (SRAM). Перезавантаження даних з EEPROM можна також зробити командою ПЕРЕЗАВАНТАЖЕННЯ E 2 . Майстер повинен контролювати стан шини, щоб визначити завершення перезавантаження. Слот читання низького рівня означає, що перезавантаження ще не закінчилося. Після завершення перезавантаження DS18B20 передає слот читання 1.

Регістр конфігурації термодатчика.

Байт 4 пам'яті це регістр конфігурації (формат малюнку 8). Бітами R0, R1 можна встановити роздільну здатність перетворення (коди в таблиці 3). При включенні живлення стан бітів R0, R1 = 11, що відповідає роздільній здатності 12 біт. Потрібно пам'ятати, що існує пряма залежність часу перетворення від роздільної здатності. Біти 7 та 0…4 зарезервовані, не можуть використовуватися, при читанні повертають 1.

Генерація циклічного коду(CRC)

Байти циклічного коду (CRC) розташовані в 64-бітовому ROM коді і в дев'ятому байті пам'яті SRAM. Циклічний код з ROM обчислюється для 56 біт коду ROM і розташовується в старшому байті ROM. Циклічний код із SRAM обчислюється з байтів 0…7 SRAM. Циклічний код дозволяє контролювати правильність читання даних із DS18B20. Майстер обчислює циклічний код для даних і порівнює з прийнятим кодом. З цього приймається рішення про коректність даних.

Утворюючий поліном циклічного коду виглядає так:

C R C = X 8 + X 5 + X 4 + 1

Майстер може обчислити циклічний код використовуючи генератор полінома, за схемою малюнку 9. Він складається з регістра зсуву і логічних елементівтипу "що виключає АБО". Регістр зсуву спочатку перебуває у стані 0. Біти надходять у регістр зсуву, починаючи з молодшого біта, коду з ROM чи SRAM, один біт одного такт зсуву. Після зсуву 56-го біта ROM або старшого біта 7-го байта SRAM, в регістрі зсуву буде обчислений циклічний код. Якщо зрушити в генератор 8 біт ROM або SRAM, прийняті з DS18B20, то у разі правильних даних регістр зсуву буде містити всі 0.

Однопровідний інтерфейс 1-Wire

Система з шиною 1-Wire складається з одного провідного пристрою (МАЙСТЕР), який управляє одним або декількома веденими пристроями (СЛЕЙВ). DS18B20 може бути лише веденим. Система, в якій один ведений пристрій, називається одноточковою. Система з кількома веденими – багатоточковою. Усі команди та дані обміну передаються по шині молодшим бітом уперед. У подальшій інформації про інтерфейс 1-Wire виділено три розділи: апаратна конфігурація, послідовність операцій та сигнали (типи та часові вимоги).

Апаратна конфігурація.

Інтерфейс 1-Wire має одну лінію зв'язку. Кожен пристрій (провідний чи ведений) підключено до шини даних портом з виходом типу відкритий колектор або з трьома станами. Така конфігурація дозволяє кожному пристрою системи не займати лінію зв'язку, коли він не активний, і тримати шину вільною для інших пристроїв. У мікросхемі DS18B20 вихід (DQ) – відкритий стік. Його еквівалентна схема наведена на малюнку 10. Шина 1-Wire вимагає застосування зовнішнього резистора, що підтягує, опором приблизно 5 кОм, для забезпечення високого рівня сигналу при неактивному стані пристроїв. Якщо операція має бути припинена, шина має бути встановлена ​​в неактивний стан до наступної операції. Шина може бути в стані високого рівня як завгодно довгий час. Переведення шини в стан низького рівня на більш ніж 480 мкс призведе до того, що всі компоненти системи будуть скинуті.

Послідовність операцій.

Черговість операцій для доступу до термодатчика DS18B20 має такий вигляд.

  • Ініціалізація.
  • Команда ROM (необхідна будь-якого обміну даними).
  • Функціональна команда (необхідна будь-якого обміну даними).

Така послідовність повинна суворо дотримуватися. В іншому випадку DS18B20 не реагуватиме на команди. Винятком є ​​команди ПОШУК ПЗУ [код F0h] та ПОШУК АВАРІЇ [код ECh]. Після формування цих двох команд провідний пристрій (майстер) повинен повернутися до першого кроку (ініціалізація).

Ініціалізація.

Обмін по шині завжди починається з операції ІНІЦІАЛІЗАЦІЇ. Для ініціалізації провідний пристрій виробляє імпульс скидання, за ним повинен наслідувати імпульс присутності від веденого пристрою. Імпульс присутності повідомляє провідного пристрою, що ведений пристрій присутній в системі і готовий до виконання операції. Часові параметри імпульсів скидання та присутності описані у розділі .

Команди ROM-кодів.

Після того, як провідний пристрій отримає імпульс присутності, він може оперувати командами ROM. Це команди для операцій із 64-бітними індивідуальними кодами кожного веденого пристрою. Вони дозволяють провідному пристрою вибрати конкретний ведений пристрій серед багатьох інших. Також, використовуючи ці команди, можна дізнатися, скільки ведених пристроїв підключено до шини, їх типи, виділити пристрої може тривоги. Існує 5 команд ROM, завдовжки 8 біт кожна. Перед виконанням функціональних команд DS18B20 провідний пристрій повинен надіслати команду ROM. Блок-схема виконання ROM команд зображено малюнку 11.

Пошук ROM

Після включення живлення, провідний пристрій повинен вважати ROM коди всіх керованих пристроїв, підключених до шини. Це дозволить визначити кількість ведених пристроїв та їх типи. Провідний пристрій вивчає коди ROM через процес ідентифікації кодів кожного пристрою на шині. Воно має виконати команду пошуку ROM стільки разів, скільки необхідно для ідентифікації всіх керованих пристроїв. При одному веденому пристрої у системі простіше використовувати команду ЧИТАННЯ ROM. Після пошуку ROM операції на шині повинні знову початися з ініціалізації.

Читання ROM

Команда застосовується в одноточкових системах з одним веденим пристроєм. Вона дає можливість провідному пристрою прочитати 64-бітний ROM код без використання команди ПОШУК ROM. Застосування команди ЧИТАННЯ ROM у багатоточковій системі призведе до конфліктів даних між керованими пристроями.

Збіг ROM

Команда Збіг ROM, після якої повинен слідувати 64-бітний код ROM, дозволяє майстру звертатися до конкретного веденого пристрою. Тільки один ведений пристрій, код якого збігається з переданим кодом, прореагує на функціональні команди. Інші керовані пристрої будуть неактивними до наступного імпульсу скидання.

Пропуск ROM

Команда дозволяє провідному пристрою звертатися до всіх пристроїв шин одночасно, без використання ROM кодів. Наприклад, можна запустити на всіх пристроях операцію перетворення температури, виконавши команду ПРОПУСК ROM, а потім КОНВЕРТАЦІЯ ТЕМПЕРАТУРИ. Команда ЧИТАННЯ ПАМ'ЯТІ може йти за командою ПРОПУСК ROM тільки при одному веденому пристрої, підключеному до лінії зв'язку. Така послідовність команд значно заощаджує час обміну з датчиками. Особливо ефективна при використанні в системі одного веденого пристрою.

Пошук тривожного сигналу

Команда діє ідентично команді ПОШУК ROM. Відрізняється тим, що на неї дадуть відповідь тільки ведені пристрої в стані тривоги. Команда дозволяє веденому пристрою визначити, які термодатчики перебувають у стані тривоги після останнього перетворення температури. Після кожного пошуку тривоги необхідно повертатися на ініціалізацію.

Група функціональних команд

Після виконання ROM команди для вибору DS18B20 з потрібним кодом, провідний пристрій може надсилати функціональні команди датчика. Вони дозволяють записати та прочитати дані з оперативної пам'яті DS18B20, ініціювати перетворення температури та визначити режим живлення. Функціональні команди DS18B20 описуються нижче, зібрані таблиці 4, алгоритм роботи з ними наведено малюнку 12.

Перетворення температури

Запис пам'яті

Команда дозволяє завантажити 3 байти в оперативну пам'ять датчика. Перший байт записується в регістр Th (2 байт пам'яті), другий байт Th (байт 3 пам'яті) і третій байт в регістр конфігурації (байт 4). Провідний пристрій передає дані починаючи з молодшого біта. Всі три байти необхідно записати до того, як провідний пристрій сформує сигнал скидання.

Читання пам'яті

Команда використовується для читання пам'яті пристрою. Передача даних відбувається починаючи з молодшого біта байта 0 пам'яті, і продовжується до тих пір, поки всі 9 байтів будуть раховані. Якщо потрібна лише частина даних, пристрій може перервати передачу, сформувавши імпульс скидання.

Копіювання пам'яті

Команда перезавантажує значення регістрів Th, Tl та регістра конфігурації з EEPROM в оперативну пам'ять. Після надсилання команди ПЕРЕЗАВАНТАЖЕННЯ, провідний пристрій може виконати слот читання, і DS18B20 повідомить стан перезавантаження. Передача 0 означатиме, що операція ще виконується, 1 – операція завершена. Операція перезавантаження автоматично відбувається при увімкненні живлення. Тому в оперативній пам'яті містяться достовірні дані одразу після подачі харчування.

Читання режиму харчування

Таблиця 4. Функціональні команди DS18B20.

КОМАНДА ОПИС КІД ОПЕРАЦІЇ НА ШИНІ ПРИМІТКА.
КОМАНДА КОНВЕРТУВАННЯ ТЕМПЕРАТУРИ
Вимірювання температури Ініціалізує вимірювання температури 44h DS18B20 передає майстру стан операції перетворення температури 1
КОМАНДИ РОБОТИ З ПАМ'ЯТЬЮ
Читання пам'яті Читає всю оперативну пам'ять, включаючи циклічний код CRC BEh DS18B20 передає майстру до 9 байт 2
Запис пам'яті Записує в оперативну пам'ять байти 2, 3 та 4
(TH, TL та регістр конфігурації)
4Eh Майстер передає 3 байти на DS18B20. 3
Копіювання пам'яті Копіює TH, TL, і регістр конфігурації з оперативної пам'яті EEPROM 48h 1
Перевантажує TH, TL, і регістр конфігурації EEPROM в оперативну пам'ять. B8h DS18B20 передає стан перезавантаження майстру
Читання режиму харчування Повідомляє майстра про режим живлення DS18B20. B4h DS18B20 передає майстру режим живлення

Примітки.

Інтерфейс 1-Wire

Для обміну даними DS18B20 використовує протокол 1-Wire інтерфейсу, що забезпечує контроль цілісності даних. Цей протокол визначає сигнали:

  • імпульс скидання,
  • імпульс присутності,
  • запис біта зі значенням 0,
  • запис біта зі значенням 1,
  • читання біта зі значенням 0,
  • Читання біта зі значенням 1.

Всі ці сигнали, крім імпульсу присутності, формує провідний пристрій.

Ініціалізація – імпульси скидання та присутності

Будь-які комунікаційні операції DS18B20 починаються з послідовності ініціалізації, яка складається з імпульсу скидання від провідного пристрою веденому, і імпульсу відповідності присутності з DS18B20. Цей процес показаний на малюнку 13. Термодатчик посилає імпульс присутності у відповідь на імпульс скидання, щоб повідомити провідний пристрій, що він підключений до шини і готовий до використання.

Під час послідовності ініціалізації провідний пристрій передає імпульс скидання (Tx), формуючи на шині сигнал низького рівня протягом не менше 480 мкс. Далі провідний пристрій звільняє шину і переходить в режим прийому (Rx). Коли шина звільняється, підтягується до високого логічного рівня резистором 5 кОм. Датчик виділяє позитивний фронт, чекає 15-60 мкс та передає імпульс присутності, утримуючи низький рівень лінії на час 60-240 мкс.

Тимчасові слоти читання та запису.

Обмін даними по шині 1-Wire відбувається тимчасовими слотами (тайм-слотами). Один часовий слот передає один біт інформації.

Тимчасові слоти запису.

Протокол визначає два типи тайм-слотів запису даних DS18B20: для запису значення 1 і запису значення 0. Тривалість слота запису - не менше 60 мкс з паузою на відновлення між слотами 1,0 мкс, як мінімум. Ініціюється будь-який слот запису негативним фронтом сигналу шини (рис. 14).

Для формування слота запису 1 після перекладу шини в низький стан, провідний пристрій повинен звільнити шину на час 15 мкс. Підтягуючий резистор 5 ком створить на шині напруга високого рівня.

Для формування слота запису 0, після переведення шини в низький стан, провідний пристрій повинен продовжувати утримувати шину в низькому стані протягом усього часу слота (як мінімум 60 мкс).

DS18B20 перевіряє стан сигналу у відрізку часу між 15 і 60 мкс, відраховуючи його від початку слота запису. Стан шини на цьому відрізку відповідає значенню біта для запису датчика.

Тимчасові слоти читання.

Тривалість слота читання, як і слота запису, повинна бути не менше 60 мкс з паузою відновлення між слотами 1 мкс, як мінімум. Ініціюється будь-який слот читання негативним фронтом сигналу шини (рисунок 14).

Після того, як провідний пристрій ініціалізував слот читання, DS18B20 передає біт даних. Для передачі 1 датчик залишає шину вільної (у високому стані), а передачі 0 – формує на шині низький рівень.

При передачі 0 DS18B20 повинен звільнити шину в кінці слота. Підтягуючий резистор сформує на ній високий рівень. Вихідні дані DS18B20 достовірні протягом 15 мкс від початку слота читання.

На рис. 15 показано, що Загальна суматимчасових інтервалів слота читання Tinit, TRC та TSAMPLE має бути не більше 15 мкс.

Мал. 16 показано, що для максимальної надійності прийому даних необхідно зменшити Tinit та TRC та читати стан шини в кінці відрізка 15 мкс.

Приклад 1 роботи з DS18B20.

РЕЖИМ МАЙСТРА

ДАНІ ШИНИ

ПОЯСНЕННЯ

TX Reset RX Presence TX 55h TX 64-біт ROM код TX 44h Майстер посилає команду конвертування температури. TX TX Reset Майстер формує імпульс скидання. RX Presence DS18B20 відповідають імпульсу присутності. TX 55h Майстер виконує команду відповідності ROM коду. TX 64-біт ROM код Майстер надсилає ROM код DS18B20. TX BEh RX 9 байтів даних

Приклад 2 роботи з DS18B20.

РЕЖИМ МАЙСТРА

ДАНІ ШИНИ

ПОЯСНЕННЯ

TX Reset Майстер формує імпульс скидання.
RX Presence
TX CCh
TX 4Eh Майстер виконує команду запису пам'яті.
TX 9 байти даних Майстер посилає три байти (TH, TL, і регістр конфігурації).
TX Reset Майстер формує імпульс скидання.
RX Presence DS18B20 відповідає імпульсу присутності.
TX CCh Майстер виконує команду пропустити ROM.
TX BEh Майстер надсилає команду читання пам'яті.
RX 9 байтів даних Майстер читає всю оперативну пам'ять, у тому числі циклічний код CRC. Потім обчислює CRC для перших восьми байтів та порівнює з прийнятим кодом. Якщо коди не дорівнюють, майстер повторює операцію читання.
TX Reset Майстер формує імпульс скидання.
RX Presence DS18B20 відповідає імпульсу присутності.
TX CCh Майстер виконує команду пропустити ROM.
TX 48h Майстер виконує команду копіювання пам'яті.
TX DQ лінія підключена до шини живлення Майстер підключає DQ до шини живлення під час перетворення.

Гранично-допустимі параметри DS18B20

Вказано граничні величини параметрів. Перевищення цих параметрів є неприпустимим. Експлуатація довгий часіз граничними значеннями параметрів може зменшити надійність пристрою.

Примітки:

Електричні характеристики EEPROM змінного струму (-55 ... + 125 ° C, V DD = 3,0 ... 5,5 В).

ПАРАМЕТРІВ ПОЗНАЧЕННЯ УМОВИ МІН. ТИП. МАКС. ОД. ІЗМ.
Час циклу запису t wr 2 10 мс
Число записів N EEWR -55°C - +55°C 50000 цикл
Час зберігання t EEDR -55°C - +55°C 10 років

Електричні характеристики змінного струму (-55 ... + 125 ° C, V DD = 3,0 ... 5,5 В).

ПАРАМЕТРІВ ПОЗНАЧЕННЯ УМОВИ МІН. ТИП. МАКС. ОД. ІЗМ. ПРИЙМА
ЧАННЯ
Час перетворення температури t CONV роздільна здатність 9 біт 93.75 мс 1
Дозвіл
10 біт
187.5 мс 1
Дозвіл
11 біт
375 мс 1
Дозвіл
12 біт
750 мс 1
Час підключення до потужного живлення t SPON Посилання команди конвертації температури 10 мкс
Час слоту t SLOT 60 120 мкс 1
Час відновлення t REC 1 мкс 1
Час запису 0 r LOW0 60 120 мкс 1
Час запису 1 t LOW1 1 15 мкс 1
Час читання даних t RDV 15 мкс 1
Час високого рівня скидання t RSTH 480 мкс 1
Час низького рівня скидання t RSTL 480 мкс 1,2
Час високого рівня присутності t PDHIGH 15 60 мкс 1
Час низького рівня присутності t PDLOW 60 240 мкс 1
Місткість C IN/OUT 25 пкФ

Примітки:

Малюнок 18. Тимчасові діаграми.

Опис вийшов великим. З датчиками працювати непросто. Вони вимагають досить складних програмних функцій, але з апаратної точки зору DS18B20 просто підключаються, вимірюють точно, не вимагають АЦП і т.д.

Як приклад використання термодатчиків DS18B20, можу навести мою розробку. Використовуються два термодатчики. Один вимірює температуру повітря, другий - температуру радіатора.

Рубрика: . Ви можете додати до закладок.

DS18B20 - це цифровий датчиктемператури. Датчик дуже простий у використанні.

По-перше, він цифровий, а по-друге - у нього лише один контакт, з якого ми отримуємо корисний сигнал. Тобто ви можете підключити до одного Arduino одночасно величезну кількість цих сенсорів. Пінов буде більш ніж достатньо. Мало того, ви навіть можете підключити кілька сенсорів до одного пін на Arduino! Але про все по порядку.

DS18B20 має різні форм-фактори. Отже, вибір, який саме використовувати, залишається за вами. Доступно три варіанти: 8-Pin SO (150 mils), 8-Pin µSOP, та 3-Pin TO-92. Серфінг eBay або Aliexpress показує, що китайці пропонують версію TO-92 у вологозахищеному корпусі. Тобто ви можете сміливо занурювати подібне диво у воду, використовувати під дощем і т.д. і т.п. Ці сенсори виготовляються з трьома вихідними контактами (чорний – GND, червоний – Vdd та білий – Data).

Різні форм-фактори датчиків DS18B20 наведені нижче.

Модель DS18B20 у вологозахищеному корпусі:


DS18B20 зручний у використанні. Запитати його можна через контакт data (у такому разі ви використовуєте всього два контакти з трьох для підключення!). Сенсор працює в діапазоні напруг від 3.0 до 5.5 і вимірює температуру в діапазоні від -55°C до +125°C (від -67°F до +257°F) з точністю ±0.5°C (від -10°C до +85°C).

Ще одна крута фіча: ви можете підключити паралельно до 127 датчиків! та зчитувати показання температури з кожного окремо. Не зовсім зрозуміло, в якому проекті подібне може знадобитися, але підключити два сенсори та контролювати температуру в холодильнику та морозильній камері можна. При цьому ви залишите вільними купу пінів на Arduino... Загалом фіча приємна.

Що вам знадобиться для контролю температури за допомогою Arduino та DS18B20

Програмне забезпечення

  • Звичайно, вам потрібна Arduino IDE;
  • Бібліотека OneWire library, яка значно полегшує роботу з Arduino та датчиком DS18B20;
  • Скетч...

Завантажуємо скетч на Arduino

Скетч, який представлений нижче, є у бібліотеці OneWire, у категорії examples. Перейдіть до "File" - "Examples" - "OneWire" і виберіть приклад "DS18x20_Temperature". Код програми наведено нижче.

Цей приклад використовує бібліотеку OneWire Library, щоб зібрати дані з усіх підключених датчиків температури DS28B20 (як підключити кілька сенсорів описано в кінці статті) і відобразити їх у вікні серійного монітора Arduino IDE.

У вікні серійного монітора ви побачите приблизно таке:

ROM = 28 88 84 82 5 0 0 6A

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Температура = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Температура = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

Переконайтеся, що ви вказали правильні піни!

У рядку 10, де вказано "OneWire ds(2);" встановлюється пін, якого підключений контакт data з сенсора.

У цьому прикладі використаний пін 2, але значення стандартного піна в прикладі OneWire стоїть на 10. Можна використовувати і його.

#include <OneWire.h>

// приклад використання бібліотеки OneWire DS18S20, DS18B20, DS1822

OneWire ds(2); // на піні 10 (потрібний резистор 4.7 кому)

void setup(void) (

Serial.begin(9600);

void loop (void) (

byte present = 0;

float celsius, fahrenheit;

if (!ds.search(addr)) (

Serial.println("No more addresses.");

Serial.println();

ds.reset_search();

Serial.print("ROM =");

Serial.write(" ");

Serial.print(addr[i], HEX);

if (OneWire::crc8(addr, 7) != addr) (

Serial.println("CRC is not valid!");

Serial.println();

// Перший байт визначає чіп

Serial.println(" Chip = DS18S20"); // або старіший DS1820

Serial.println(" Chip = DS18B20");

Serial.println(" Chip = DS1822");

Serial.println("Device is not a DS18x20 family device.");

ds.select(addr);

delay(1000); // 750 може бути достатньо, а може і не вистачить

// ми могли б використовувати тут ds.depower(), але reset подбає про це

present = ds.reset();

ds.select(addr);

Serial.print("Data=");

Serial.print(present, HEX);

Serial.print(" ");

data[i] = ds.read();

Serial.print(data[i], HEX);

Serial.print(" ");

Serial.print("CRC=");

Serial.print(OneWire::crc8(data, 8), HEX);

Serial.println();

// конвертуємо даний у фактичну температуру

// Оскільки результат є 16 бітним цілим, його треба зберігати в

// змінною з типом даних "int16_t", яка завжди дорівнює 16 біт,

// навіть якщо ми проводимо компіляцію на 32-бітному процесорі

int16_t raw = (data

if (data == 0x10) (

raw = (raw & 0xFFF0) + 12 - data;

byte cfg = (data & 0x60);

// при маленьких значеннях, малі біти не визначені, давайте їх обнулилим

if (cfg == 0x00) raw = raw & ~7; // Роздільна здатність 9 біт, 93.75 мс

else if (cfg == 0x20) raw = raw & ~3; // Роздільна здатність 10 біт, 187.5 мс

else if (cfg == 0x40) raw = raw & ~1; // Роздільна здатність 11 біт, 375 мс

//// Роздільна здатність за замовчуванням дорівнює 12 біт, час перетворення - 750 мс

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");

Як підключити декілька сенсорів DS18B20 до Arduino?

Можна підключити кілька цифрових датчиків температури DS18B20 паралельно. При цьому бібліотека OneWire library дозволить зчитувати дані з усіх датчиків одночасно.

Нижче описано два методи підключення сенсорів.

Для великої кількості сенсорів (більше 10), треба використовувати резистори з меншим опором (наприклад, 1.6 кім або навіть менше).

Крім того, якщо ви підключаєте паралельно більше 10 датчиків, можуть виникнути проблеми (похибки під час знімання показань). Тому рекомендується встановлювати додатковий резистор опором 100...120 Ом між контактом data на Arduino та data на кожному сенсорі!

Результат роботи попереднього скетчу з двома підключеними сенсорами може виглядати приблизно так:

ROM = 28 88 84 82 5 0 0 6A

Data = 1 51 1 4B 46 7F FF F 10 FE CRC = FE

Температура = 21.06 Celsius, 69.91 Fahrenheit

ROM = 28 DA CA 27 5 0 0 49

Data = 1 4E 1 4B 46 7F FF 2 10 D9 CRC=D9

Температура = 20.87 Celsius, 69.57 Fahrenheit

No more addresses.

Вибираємо правильний сенсор

Було б непогано знати, з якого сенсора ви отримуєте дані, коли ви використовуєте паралельно кілька датчиків. Як це зробити?

Серійний номер

Так як цифрові датчики, у кожного з них є індивідуальний серійний номер, який можна використовувати для розпізнавання того чи іншого сенсора. Начебто все просто. Але... адже нам треба попередньо визначити ці серійні номери, перш ніж використовувати їх для впізнавання сенсора, правильно?

Ви могли звернути на прикладах вище, що скетч видає нам дані у вигляді 64-бітового серійного номера – значення “ROM”. Наприклад:

28 88 84 82 5 0 0 6A або 28 DA CA 27 5 0 0 49 у прикладі вище.

Не забувайте, якщо ви використовуєте одночасно велику кількість датчиків (10 і більше), треба додати резистори 100...120 Ом між контактами data із сенсора DS18B20 та піном data на Arduino (для кожного датчика!).

Нижче показано схему паралельного підключеннякількох сенсорів із використанням трьох контактів.


Залишайте Ваші коментарі, питання та ділитесь особистим досвідомнижче. У дискусії часто народжуються нові ідеї та проекти!

Датчик температури в Arduino – один із найпоширеніших видів сенсорів. Розробнику проектів з термометрами на Arduino є безліч різних варіантів, що відрізняються за принципом дії, точності, конструктивному виконанню. Цифровий датчик DS18B20 є одним з найпопулярніших температурних датчиківчасто він використовується у водонепроникному корпусі для вимірювання температури води або інших рідин. У цій статті ви знайдете опис датчика ds18b20 російською, ми разом розглянемо особливості підключення до ардуїно, принцип роботи датчика, опис бібліотек та скетчів.

DS18B20 – це цифровий температурний датчик, що має безліч корисних функцій. По суті, DS18B20 – це цілий мікроконтролер, який може зберігати значення вимірювань, сигналізувати про вихід температури за встановлені межі (самі межі ми можемо встановлювати та змінювати), змінювати точність вимірювань, спосіб взаємодії з контролером та багато іншого. Все це у дуже невеликому корпусі, який, до того ж, доступний у водонепроникному виконанні.

Температурний датчик DS18B20 має різноманітні види корпусу. Можна вибрати один із трьох – 8-Pin SO (150 mils), 8-Pin µSOP, та 3-Pin TO-92. Останній є найпоширенішим і виготовляється у спеціальному вологозахисному корпусі, тому його сміливо можна використовувати під водою. Кожен датчик має 3 контакти. Для корпусу TO-92 потрібно дивитися на колір дротів: чорний – земля, червоний – живлення та білий/жовтий/синій – сигнал. В інтернет-магазинах можна придбати готовий модуль DS18B20.

Де купити датчик

Природно, що DS18B20 найдешевше купити на Аліекспресі, хоча він продається і в будь-яких спеціалізованих російських інтернет-магазинах з Ардуїно. Наведемо кілька посилань для прикладу:

Пам'ять датчика складається з двох видів: оперативної та енергонезалежної – SRAM та EEPROM. В останню записуються регістри конфігурації та регістри TH, TL, які можуть використовуватися як регістри загального призначення, якщо не використовуються для визначення діапазону допустимих значень температури.

Основним завданням DS18B20 є визначення температури та перетворення отриманого результату на цифровий вигляд. Ми можемо самостійно задати необхідне дозвіл, встановивши кількість біт точності - 9, 10, 11 і 12. У цих випадках роздільні здатності будуть відповідно дорівнюють 0,5С, 0,25С, 0,125С і 0,0625С.

Отримані температурні вимірювання зберігаються у SRAM датчика. 1 і 2 байти зберігають отримане значення температури, 3 і 4 зберігають межі вимірювання, 5 і 6 зарезервовані, 7 і 8 використовуються для високоточного визначення температури, останній 9 байт зберігає стійкий до перешкод CRC код.

Підключення DS18B20 до Arduino

DS18B20 є цифровим датчиком. Цифрові датчики передають значення вимірюваної температури у вигляді певного двійкового коду, що надходить на цифрові або аналогові піни ардуїно, а потім декодується. Коди можуть бути різними, ds18b20 працює за протоколом даних 1-Wire. Ми не будемо вдаватися до подробиць цього цифрового протоколу, зазначимо лише необхідний мінімум для розуміння принципів взаємодії.

Обмін інформацією в 1-Wire відбувається завдяки наступним операціям:

  • Ініціалізація – визначення послідовності сигналів, з яких починається вимір та інші операції. Провідний пристрій подає імпульс скидання, після цього датчик повинен подати імпульс присутності, повідомляє про готовність до виконання операції.
  • Запис даних – відбувається передача байта даних датчик.
  • Читання даних відбувається прийом байта з датчика.

Для роботи з датчиком нам знадобиться програмне забезпечення:

  • Arduino IDE;
  • Бібліотека OneWire, якщо використовується кілька датчиків на шині, можна використовувати бібліотеку DallasTemperature. Вона працюватиме поверх OneWire.

З обладнання знадобляться:

  • Один або декілька датчиків DS18B20;
  • Мікроконтролер Ардуїно;
  • Конектори;
  • Резистор на 4,7 ком (у разі підключення одного датчика піде резистор номіналом від 4 до 10K);
  • Монтажна плата;
  • USB-кабель для підключення до комп'ютера.

До плати Ардуїно датчик UNO підключається просто: GND з термодатчика приєднується до GND Ардуїно, Vdd підключається до 5V, Data - до будь-якого цифрового піну.

Найпростіша схема підключення цифрового датчика DS18B20 представлена ​​малюнку.

Алгоритм отримання інформації про температуру в скетчі складається з наступних етапів:

  • Визначення адреси датчика, перевірка його підключення.
  • На датчик подається команда з вимогою прочитати температуру та викласти виміряне значення у регістр. Процедура відбувається довше, на неї необхідно приблизно 750 мс.
  • Подається команда на читання інформації з регістру та відправлення отриманого значення в монітор порту,
  • Якщо потрібно, то здійснюється конвертація в градуси Цельсія/Фаренгейта.

Приклад простого скетчу для DS18B20

Найпростіший скетч для роботи з цифровим датчиком виглядає так. (У скетчі ми використовуємо бібліотеку OneWire, про яку поговоримо докладніше трохи пізніше).

#include /* * Опис взаємодії з цифровим датчиком ds18b20 * Підключення ds18b20 до ардуїно через пін 8 */ OneWire ds(8); // Створюємо об'єкт OneWire для шини 1-Wire, за допомогою якого буде здійснюватися робота з датчиком void setup()( Serial.begin(9600); ) void loop()( // Визначаємо температуру від датчика DS18b20 byte data; // Місце для значення температури ds.reset();// Починаємо взаємодію зі скидання всіх попередніх команд і параметрів ds.write(0xCC); // Даємо датчику DS18b20 команду виміряти температуру.Саме значення температури ми ще не отримуємо - датчик його покладе у внутрішню пам'ять delay (1000); // Мікросхема вимірює температуру, а ми чекаємо. ds.reset (); значення виміряної температури ds.write(0xCC);ds.write(0xBE);// Просимо передати нам значення регістрів зі значенням температури // Отримуємо та зчитуємо відповідь data = ds.read(); // Читаємо молодший байт значення температури data = ds.read(); // А тепер старший // Формуємо підсумкове значення ие: // - спершу "склейуємо" значення, // - потім множимо його на коефіцієнт, що відповідає роздільній здатності (для 12 біт за замовчуванням - це 0,0625) float temperature = ((data<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Скетч для роботи з датчиком ds18b20 без delay

Можна трохи ускладнити програму для ds18b20, щоб позбутися від , що гальмує виконання скетчу.

#include OneWire ds(8); // Об'єкт OneWire int temperature = 0; // Глобальна змінна для зберігання значення температури датчика DS18B20 long lastUpdateTime = 0; // Змінна для зберігання часу останнього зчитування датчика const int TEMP_UPDATE_TIME = 1000; // Визначаємо періодичність перевірок void setup()( Serial.begin(9600); ) void loop()( detectTemperature(); // Визначаємо температуру від датчика DS18b20 Serial.println(temperature); // Виводимо отримане значення температури // Т .к. змінна temperature має тип int, дробова частина буде просто відкидатися ) int detectTemperature()( byte data; ds.reset(); ds.write(0xCC); ds.write(0x44); if (millis() - lastUpdateTime > TEMP_UPDATE_TIME) ( lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data = ds.read(); data = ds.read(); // Формуємо значення temperature = (data<< 8) + data; temperature = temperature >> 4; } }

Бібліотека DallasTemperature та DS18b20

У своїх скетчах ми можемо використовувати бібліотеку DallasTemperature, яка спрощує деякі аспекти роботи з датчиком DS18B20 по 1-Wire. Приклад скетчу:

#include // Номер піна Arduino із підключеним датчиком #define PIN_DS18B20 8 // Створюємо об'єкт OneWire OneWire oneWire(PIN_DS18B20); // Створюємо об'єкт DallasTemperature до роботи з сенсорами, передаючи йому посилання на об'єкт до роботи з 1-Wire. DallasTemperature dallasSensors(&oneWire); // Спеціальний об'єкт зберігання адреси пристрою DeviceAddress sensorAddress; void loop(void)( // Запит на вимірювання датчиком температури Serial.print("Вимірюємо температуру..."); dallasSensors.requestTemperatures(); // Просимо ds18b20 зібрати дані Serial.println("Виконано"); // Запит на отримання збереженого значення температури printTemperature(sensorAddress);// Затримка для того, щоб можна було щось розібрати на екрані delay(1000); ) // Допоміжна функція друку значення температури для пристрою dallasSensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.println(tempC); ) // Допоміжна функція для відображення адреси датчика ds18b20 printAddress< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Бібліотека OneWire для роботи з DS18B20

DS18B20 використовує для обміну інформацією з Ардуін протокол 1-Wire, для якого вже написана відмінна бібліотека. Можна і потрібно використовувати її, щоб не реалізовувати всі функції вручну. . Для встановлення бібліотеки завантажте архів, розпакуйте в папку library вашого каталогу Arduino. Підключається бібліотека за допомогою команди #include

Всі датчики DS18B20 підключаються паралельно, для них достатньо одного резистора. За допомогою бібліотеки OneWire можна одночасно рахувати всі дані з усіх датчиків. Якщо кількість датчиків, що підключаються більше 10, потрібно підібрати резистор з опором не більше 1,6 кОм. Також для більш точного вимірювання температури потрібно поставити додатковий резистор на 100...120 Ом між виходом data на платі Ардуїно та data на кожному датчику. Дізнатися, з якого датчика отримано те чи інше значення, можна за допомогою унікального 64-бітного серійного коду, який буде виданий в результаті виконання програми.

Для підключення температурних датчиків у нормальному режимі необхідно використовувати схему, представлену малюнку.

Висновки

Мікросхема Dallas DS18B20 є дуже цікавим пристроєм. Датчики температури і термометри, створені на її основі, мають прийнятні для більшості завдань характеристики, розвинений функціонал, відносно не дорогі. Особливу популярність датчик DS18B20 здобув як вологозахищений пристрій для вимірювання температури рідин.

За додаткові можливостідоводиться платити відносною складністю роботи з датчиком. Для підключення DS18B20 нам обов'язково знадобиться резистор із номіналом близько 5К. Для роботи з датчиком у скетчах ардуїно потрібно встановити додаткову бібліотеку та отримати певні навички для роботи з нею – там не зовсім тривіально. Втім, можна купити вже готовий модуль, а для скетчу здебільшого вистачить простих прикладів, наведених у цій статті.

DS18B20- Цифровий датчик температури фірми Dallas. Надсилає дані про температуру, використовуючи лише один цифровий висновок та спеціальний протокол, званий 1-Wire. Можна підключити кілька датчиків до одного контакту. Датчик вимірює температуру градусів Цельсія.

Технічні характеристики DS18B20

  • Датчик можна живити напругою від 3 до 5,5В
  • Датчик може вимірювати температуру від -55 до 125 °C
  • Датчик має цифрову роздільну здатність від 9 до 12 біт.
  • Точність вимірювання +/- 0,5 °C у діапазоні від -10 до 85 °C
  • Точність вимірювання: +/- 2 °C для діапазону від -55 до 125 °C
  • Дрейф виміру +/- 0,2 °C

Схема підключення DS18B20

Що таке дозвіл?

У технічні характеристикиповідомляється, що датчик DS18B20 може вимірювати температуру з різною роздільною здатністю. Дозвіл — це як лінійка: міліметри між сантиметрами. Так само і з роздільною здатністю у DS18B20 - це крок між послідовними ступенями градусів Цельсія.

Роздільна здатність вибирається за допомогою кількості біт. Діапазон вибору від 9 до 12 біт. Вибір дозволу спричиняє певні наслідки. Чим вищий дозвіл, тим довше доведеться чекати на результат вимірювань.

Для 9 бітного дозволу є 2 кроки між послідовними рівнями:

  • 0,0 °C
  • 0,5 °C

Для 10 бітного дозволу є 4 кроки між послідовними рівнями:

  • 0,0 °C
  • 0,25 °C
  • 0,5 °C
  • 0,75 °C

У цьому випадку ми зчитуємо температуру з роздільною здатністю 0,25 °C. Час виміру для 10 бітного дозволу становить 187,5 мс, що дозволяє виконати 5,3 вимірів за секунду.

Для 11 бітного дозволу є 8 кроків між послідовними рівнями:

  • 0,0 °C
  • 0,125 °C
  • 0,25 °C
  • 0,375 °C
  • 0,5 °C
  • 0,625 °C
  • 0,75 °C
  • 0,875 °C

Тобто роздільна здатність становить 0,125 °C. Час виміру для 11 бітного дозволу становить 375 мс. Це дозволяє виконати 2,6 виміру в секунду.

Для 12 бітного дозволу є 16 кроків між послідовними рівнями:

  • 0,0 °C
  • 0,0625 °C
  • 0,125 °C
  • 0,1875 °C
  • 0,25 °C
  • 0,3125 °C
  • 0,375 °C
  • 0,4375 °C
  • 0,5 °C
  • 0,5625 °C
  • 0,625 °C
  • 0,6875 °C
  • 0,75 °C
  • 0,8125 °C
  • 0,875 °C
  • 0,9375 °C

Отже, роздільна здатність становить 0,0625 °C. Час виміру для 12 бітного дозволу в районі 750 мс. Тобто ви можете зробити 1,3 виміри на секунду.

Що таке точність виміру?

Ніщо у світі, і особливо в електроніці, не є досконалим. Можна тільки наближатися до досконалості, витрачаючи дедалі більше грошей та сил. Так само і з цим датчиком. Він має деякі неточності, про які ви повинні знати.

У технічних характеристиках сказано, що в діапазоні виміру від -10 до 85 °C датчик DS18B20 має точність на рівні +/- 0,5 °C. Це означає, що коли у кімнаті у нас температура 22,5 °C, то датчик може повернути нам результат вимірювання від 22 до 23 °C. Тобто може показати на 0,5 °C більше чи менше. Усе залежить від індивідуальної характеристики датчика.

У діапазоні від -55 до 125 °C похибка вимірювання може зрости до +/- 2 °C. Тобто, коли ви вимірюєте щось із температурою 100 °C, то датчик може показати температуру від 98 до 102 °C.

Всі ці відхилення можуть дещо відрізнятися для кожної температури, але при вимірі однієї і тієї ж температури відхилення завжди буде однаковим.

Що таке дрейф виміру?

Дрейф виміру - це найгірша форма неточності. Суть дрейфу виміру у тому, що з вимірі постійної температури — за одного вимірі датчик може показувати одну температуру, а за наступному іншу (на величину дрейфу).

Дрейф датчика температури DS18B20 +/- 0.2 °C. Наприклад, коли в кімнаті постійна температура становить 24 °C, датчик може видавати результат від 23,8 °C до 24,2 °C.

(379,0 Kb, завантажено: 913)

Вам необхідно виміряти температуру в несприятливому для мікросхем середовищі?

Датчик DS18B20 допоможе вам виміряти температуру води в акваріумі або чайнику. Можна використовувати його для вимірювання температури на вулиці і не боятися, що датчик заллє дощем. Дачники оцінять можливість вимірювати температуру ґрунту в теплиці та на ділянці.

У постійній пам'яті DS18B20 можна зберегти граничні значення температури, при виході з яких сенсор переходитиме в режим тривоги. На загальній шині з багатьох сенсорів мікроконтролер може відразу дізнатися, які з них перейшли в цей режим. Таким чином стає легко визначити проблемну ділянку в контрольованому середовищі.

Роздільна здатність показань налаштовується і може становити від 9 до 12 біт. Менш роздільна здатність - вища швидкість перетворення.

Підключення

Герметичний датчик на основі мікросхеми DS18B20 можна підключити двома способами:

За трьома проводами: живлення (червоний), земля (чорний) та сигнал (білий).

По двох дротах: земля та сигнал. У цьому випадку датчик зрідка може давати неправильні показання, які легко виключити з кінцевого результату фільтруванням.

Незалежно від способу підключення сигнальний провід необхідно з'єднати з живленням через резистор 4,7 кОм. При підключенні тільки одного датчика підійде і резистор на 10 ком.

Для підключення датчика до Arduino або до макетної плати зручно використовувати натискний клемник.

Для підключення 1-Wire пристроїв до Arduino є готова бібліотека, а для роботи саме з DS18B20 існує бібліотека-надбудова від Майлса Бертона.

Характеристики:
  • Напруга живлення: 3.0..5.5 В
  • Діапазон температур: -55°C..+125°C
  • Точність температури: 0.5 °С
  • Крок свідчень: 0.0625 °С
  • Інтерфейс: 1-Wire
  • Довжина дроту: 1 метр
  • Споживаний струм: 1мА