ARDUINO и цифров сензор DS18B20. Цифрови температурни сензори от Dallas Semicoductor датчик 18 20

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

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

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

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

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

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

Основната задача на 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 ("екзекутира". ); // Заявка за получаване на запаметена печатна температура (SensorAddress); // Забавяне, така че да можете да разглобите нещо на екрана за закъснение (1000);) // Спомагателни печатни стойности на температурата за deviceaddress deviceaddress (Fload Tempc \u003d 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-телената интерфейсна подсистема и Scratchpad Memory, която от своя страна има достъп до регистри. температурен сензор, Регистриране на горните и долните прагове на алармата, регистъра на конфигурацията и 8-битов регистър на генератора на контрол, за да защитите системата от неправилни данни.

Когато захранването е включено по подразбиране, сензорът има решение за превръщане на 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, но само пример, написан в един час, способен да предоставя на новодошлите на общото представяне на работата със сензора.
Устройството е предназначено за използване в помещението, затова не предвижда измерването на отрицателните температури.

Изтеглете изходния код I. пХБ. Поставете можете по-долу

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

В двете предишни статии погледнахме и. В тази статия разглеждаме схемата за свързване на един или повече сензори към микроконтролера и програмиране на работата на МК със сензора (сензори) над 1-проводната гума с външно захранване

Типична схема на връзката DS18B20 към микроконтролера:


Както може да се види от схемата, сензорът DS18B20 (или сензорите) е свързан към микроконтролера, ако имат обща мощност, три проводника:
- заключение номер 1 - общ проводник (маса, земя)
- Изходен номер 2 - това е DQ , за коя комуникация между MK и DS18B20 се свързва с всяко заключение на всяко порт на МК. DQ изходът трябва да бъде "издърпан" през резистора към Power Plus
- Изходен номер 3 - Силата на сензора - +5 волта
Ако в устройството се използват няколко температурни сензора, те могат да бъдат свързани към различни заключения на MK порта, но след това програмата ще се увеличи. Сензорите са по-добре да се свързват, както е показано на диаграмата - паралелно, до един изход на пристанището на MK.
Позволете ми да ви напомня за величината на затягащия резистор:
"Съпротивлението на резистора трябва да бъде избрано от компромиса между съпротивлението на използвания кабел и външна интерференция. Съпротивлението на резистор може да бъде от 5,1 до 1 com. За кабели с висока устойчивост е необходимо да се използва по-висока устойчивост. И където присъстват промишлени смущения - изберете по-ниска устойчивост и използвайте кабел с по-голямо напречно сечение. За телефонна юфка (4 вени) за 100 метра, се изисква резистор 3.3 COM. Ако приложите "усукана двойка" дори 2 категории дължината може да бъде увеличена да 300 метра "

Програмиране на работата на микроконтролера с DS18B20 сензор

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

Последователност на комуникационните операции
Много е важно да се следва установената последователност (която се състои от три точки) всеки път, когато достъпът до DS18B20:
1. Инициализация
2. ROM командване
3. функционална команда DS18B20
Само два отбора се извършват в две стъпки: Търсене на ROM. и Търсене на инцидент.

Инициализация DS18B20.

Последователността на инициализацията се състои от две части:
- пулсов разряд - което образува микроконтролер
- Наличие на импулс - Кои форми на DS18B20
Първоначалното състояние на DQ шината, според което се срещат MK и сензорът - логически 1, тъй като DQ шината е "затегнат" през резистора към захранването.
В автобуса DQ можете да определите дали сензорът е свързан с микроконтролера:
- ако логическият 1 шина е свързан с датчик
- Ако не е логично 1 означава, че сензорът не е свързан (или забрави да се свърже или да прекъсне DQ линията)
Следователно, последователността на инициализация може да бъде добавена друг елемент - проверка на връзката с сензора. Но имайте предвид, че тази проверка може да се извърши само с един сензор.

Проверете връзката DS18B20 връзка:

Където:
- Ini_DS18B20. - Програма инициализация
- DQ_pin. - Името, което зададох категорията на порта, към която е свързан сензорът (ако погледнете в съответствие с схемата, това е PB0 порта в)
- DQ_PIN \u003d 1 - Проверка на връзката на сензора - ако на изхода dq_pin логически единица, след това преминете през стрелката, ако не, тогава:
- 1-\u003e term_errorкъдето терминът е променлива, в която кодът за грешка се записва в този случай "1"
- Show_term_Error. - отидете на дисплея на изходна подпрограма за грешка
Например, когато използвате три-битов седемсегмент, можете да изведете такава линия:
- ER1.Какви средства - възникна грешка, код за грешка-1 (не е свързан)

Сега погледнете сензорите на сензора и вижте графика на процедурата за инициализация:


Прехвърляне на графика на думи:
1. Първоначалното ниво на DQ шината е логическа единица (поради резистор за затягане)
2. Микроконтролерът генерира нулиране импулс:
- МК превежда DQ шината в състояние на логическа нула за известно време най-малко 480 микросекунди
- MK пуска гума (превеждаме изхода към режима на приемане), докато автобусът DQ отново влиза в състояние на логическа единица
3. DS18B20, след като е намерил нивото на автобуса (от логична нула до логическа единица) след 15-60 микросекунда предава пулса на присъствието - превежда DQ шината до състояние на логическа нула до продължителността на 60-240 микросекунди
4. При завършване на пулса за наличие, DS18B20 връща DQ шината до нивото на логическа единица (съдейки по графиката - след 480 микросекунди, от края на импулса на нулиране, гумата трябва да бъде върната да се върне към логиката ниво на единица)

Сега ще го преведем в програмния език. Но трябва да се отбележи, че по време на процеса на инициализация могат да възникнат още две грешки:
- DS18B20 не е издал импулс на присъствие
- След наличието импулс от DS18B20, автобусът DQ не се връща в състояние на логическа единица.


Графиката показва минималните времеви характеристики, така че в програмата те са донякъде надценяват или се вземат максимално (от минималните) стойности:
- Импулсно нулиране от MK - не 480 а 500 микросекунди
- Пауза от края на пулса на освобождаването до импулса на присъствието - 60 микросекунди
- връщането на гумата в състояние на логическа единица след пулса на присъствие след 420 микросекунди
Надявам се с първия въпрос - инициализация, разбрахме
Преминете към следващата стъпка от задължителната последователност - "ROM команда"

Ром екип

Следващата стъпка от нашата комуникация с DS18B20. Трябва да го представим необходимото команда на ROM
Напомням ви, че ROM команди са само пет:
1. Търсене на ROM. - може да се използва (и може да не се прилага, например, в повечето случаи не го използвам) в случай на използване на множество сензори или други устройства, които комуникират с MK на 1-тел шина
2. Четене на ROM. - използва се с един свързан сензор за четене на 64-битов код
3. Съвпадение на ROM. - използва се в случай, че сензорите са повече от един, който да се обърне към конкретен сензор
4. Skip Rom. - Командата се използва незабавно на всички сензори (устройства), свързани с MK. Той е почти използван за подаване на функционална команда за конвертиране на температура (определение на температурата) от всички свързани сензори едновременно
5. Търсене на аларми - Ако зададем горна и по-ниска температура на DS18B20, която трябва да контролираме. В този случай ще отговорим само на измерените температурни сензори, които съответстват на посочените граници.

Всяка команда ROM има шестнадесет цифров код (както и функционални команди), така че за удобство в програмата можете да идентифицирате константи, които имат ясни имена на отбора, например:


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

Два примера за алгоритъма на работа с DS18B20:
1. Когато използвате един сензор:
- извършване на инициализация

- Нанесете екипа на функцията на сензора - "Конвертиране на температура" (за измерване на температурата)
В процеса на преобразуване контролирайте работата на сензора - ако на нула шината, преобразуването не е свършено, ако логическото устройство е завършено на гумата.
Сега можете да помислите за температурата от сензора:
- извършване на инициализация
- Нека дадем командата на сензора rom - "skip rom"
- Нанесете командата на функцията на сензора - "Четене на паметта"
Според командата "Четене на памет" сензорът започва да предава данни от паметта си - всички девет байта. Но ние се нуждаем само от първите два байта - текущата температура, измерена от сензора, се записва в тях. Затова четем само първите два байта и излизаме от подпрограмата.

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

Спецификации DS18B20.
ПараметърСтойност
IC изход типДигитален.
Обхват на чувство на точност.± 0.5 ° C
Обхват на чувство на температура.-55 ° C до + 125 ° C
Доставка на ток1mA.
Обхват на захранващия напрежение.3V до 5.5V.
Резолюция (бита)9...12
Стил на сензора.До 92.
Не. На щифтове.3
Базов номер18
Работна температура Макс85 ° С.
Работна температура мин.-10 ° C.
Диапазон на работната температура.-10 ° C до + 85 ° C
Изходен ток4mA.
Изходен типДигитален.
Пакет / случай.До 92.
Резолюция9...12
Тип сензор / преобразувателТемпература.
Захранващо напрежение Макс5.5V.
Захранващо напрежение мин.3V.
Тип прекратяванеПрез дупката.
Работна температура, ° C0...+55
Относителна влажност на работата,%...55
ПроизводствоДалас / Максим
Гаранционен период на работа12 месеца от датата на покупката
Тегло, G.10

DS1820, DS18S20, DS18B20 - Популярни Dallas-Maxim цифрови топлинни сензори с едножилен 1-жичен интерфейс. Благодарение на неяснотата на маркиране и изобилието на вериги за данни на цифрови топлинни сензори, които се появяват в любителска литература, ние считаме за необходимо да се даде някои обяснения.
Чип DS1820 отстранен от производството И за неговата замяна се препоръчва микроциркуит DS18S20.. Въпреки това трябва да се плати на факта, че чипове DS18S20 в случая до 92 са маркирани с надпис "DS1820" (без буквата S). Нов микроцир DS18S20 Софтуерът е съвместим със стария DS1820 И според производителя, в повечето случаи може да бъде пряко заменен от стария DS1820. Може би маркирането без буквата на производителя искаше да уточни тази съвместимост. Съвместимостта на програмата на новия DS18S20 със стария DS1820 е гарантирана, ако програмата се прилага от алгоритъма за данни.
Както може да се види от таблицата, новият Microcircuit DS18S20 е направен в стандартния до-92 случай, а старото DS1820 е имало удължен корпус. На тази основа можете да се уверите, че продавачите не "стискат" остарял чип.
Микросирката на същия DS18B20 винаги има подходящ етикет "DS18B20" и не може да бъде заменен от DS1820 / DS18S20 и обратно, без да променя програмния код.

Спецификации на цифрови максима температурни сензори
Тип на сензораDS1820. DS18S20.DS18B20.
МаркиранеDS1820. DS1820.DS18B20.
ЖилищеPR-35.
(Udlen. До 92)
До 92.До 92.
Byigness.9-битов 9-битов9 ... 12bit
Време за преобразуване200ms (тип.)
500ns (макс)
750ns (макс)750ns (макс)
Точност на измерване ± 0.5%
в температурния диапазон
0 ... + 70 ° С -10 ... + 85 ° С-10 ... + 85 ° С
Захранващо напрежение
за точност на измерване ± 0.5%
4.3-5.5V. 3.0-5.5V.3.0-5.5V.
Описание

DS18B20. - Dalc Dallas цифров сензор за температура. Изпраща данни за температура, като се използва само един цифров изход и специален протокол, наречен 1-тел. Можете да свържете няколко сензора към един контакт. Сензорът измерва температурата в градуси по Целзий.

Спецификации DS18B20.

  • Сензорът може да се използва с напрежение от 3 до 5.5V
  • Сензорът може да измерва температурата от -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 ° С.
  • 0.5 ° С.

За 10 битови разрешения има 4 стъпки между последователни нива:

  • 0.0 ° С.
  • 0.25 ° С.
  • 0.5 ° С.
  • 0.75 ° С.

В този случай четем температурата с резолюция от 0.25 ° C. Времето за измерване на 10-битова резолюция е 187.5 ms, което ви позволява да извършвате 5.3 измервания в секунда.

За 11 битова разрешение има 8 стъпки между последователни нива:

  • 0.0 ° С.
  • 0.125 ° С.
  • 0.25 ° С.
  • 0.375 ° С.
  • 0.5 ° С.
  • 0.625 ° C.
  • 0.75 ° С.
  • 0.875 ° С.

Това означава, че резолюцията е 0.125 ° C. Времето за измерване на 11-битови разрешения е 375 ms. Това ви позволява да извършвате 2.6 измервания в секунда.

За 12-битова разрешение има 16 стъпки между последователни нива:

  • 0.0 ° С.
  • 0.0625 ° С.
  • 0.125 ° С.
  • 0.1875 ° С.
  • 0.25 ° С.
  • 0.3125 ° С.
  • 0.375 ° С.
  • 0.4375 ° С.
  • 0.5 ° С.
  • 0.5625 ° С.
  • 0.625 ° C.
  • 0,6875 ° C.
  • 0.75 ° С.
  • 0.8125 ° С.
  • 0.875 ° С.
  • 0.9375 ° С.

Следователно, резолюцията е 0.0625 ° C. Време за измерване за 12-битово разрешение в областта от 750 ms. Това е, можете да направите 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 ° С.

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

Какво е дрейф за измерване?

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

DRAF DS18B20 +/- 0.2 ° C. Например, когато постоянна температура е 24 ° C в помещението, сензорът може да произведе резултата в диапазона от 23.8 ° С до 24.2 ° С.

(379.0 KB, Изтеглено: 913)