Термометр-термостат с датчиками DS18B20

Термостат  может связываться с 15 датчиками DS18B20 (Рис.1).

                                                  

Температура измеряется от -55 до 125 ° С с разрешением 0,1 ° С. Каждый датчик имеет свои настраиваемые верхний и нижний пределы, ограничивающие область гистерезиса. Два выхода термостата позволяют управлять системой отопления или охлаждения. Третий выход сигнализирует о неисправности датчика.
Дисплей на трехзначном дисплее имеет некоторые ограничения, температура ниже -9,9 и выше 99,9 ° С отображается без десятых долей. Пределы также отображаются (Рис.2).

                                                

Для управления термостатом достаточно 3 кнопок, слева "S", "= a, t".
Здесь используется модуль PIC3DT с трехзначным дисплеем и тремя кнопками не только для термостата DS, но и для других конструкций . Хотя схема выглядит несколько хаотично, она основана на дизайне печатной платы.
Микроконтроллер, в данном случае PIC16F1847, использует свой внутренний тактовый генератор, установленный на 4 МГц. Резисторы R1-R8 определяют яркость дисплея. Они ограничивают ток каждого сегмента до 15 мА. Если вы используете дисплей с низким энергопотреблением, например BA56-12SRW4A, вы должны также заменить ограничивающие резисторы, вместо 330 Ом используйте 1 кОм.
 Перед программированием микроконтроллера через ICSP отключите  разъем CON1.

               Связь по 1-проводной шине

При наличии большего количества (двух или более) датчиков DS на однопроводной шине связь с определенным датчиком должна начинаться с отправления своего идентификационного кода; это деактивирует все остальные датчика.
Идентификационный код состоит из трех частей (Рис.3).

                                                     

Первые 8 битов являются Family кодом. Этот Family код идентифицирует тип  DS. DS18B20 имеет Family код 28h.
Следующие 48 бит относятся к серийному номеру. Каждый датчик DS получает свой уникальный, неповторимый серийный номер в производстве, который позволяет идентифицировать его по однопроводной шине.
Последние 8 бит идентификационного кода являются контрольной суммой CRC, проверяющей полученные данные.
Стандартный алгоритм просмотра однопроводной шины находит и хранит все полные идентификационные коды подключенных  DS.
Таким образом, все 64 бита (8 байтов) умножаются на количество датчиков.
Но это много данных, которые нужно где-то хранить, а потом работать с ними. Кроме того, алгоритм очень сложен и занимает значительный объем программной памяти. Вот почему был разработан свой собственный, гораздо более простой алгоритм поиска. Разница в том, что он ищет только первые 8 бит серийного номера.
Разумеется, он имеет один недостаток, м\схемы DS не должны иметь одинаковые 8 бит. Мы можем минимизировать этот недостаток, найдя один и тот же байт идентификационного кода среди множества тестируемых датчиков DS. Одинаковые 16 бит из того же множества тестируемых датчиков маловероятны. Однако для простых и небольших приложений требуется всего 8 бит. Из всех датчиков, которые  когда-либо подключались к этой схеме, только два имели одинаковый серийный номер в первом байте.

                 Процедура поиска  первых 8 бит серийного номера

Команда SEARCH ROM(ПОИСК ПЗУ) устанавливает все  DS для поиска.
В этом режиме каждый бит идентификационного кода читается дважды. Датчик DS сначала отправляет фактическое значение, затем отмененную опцию (1-0 или 0-1). Микроконтроллер должен ответить на эту пару битом подтверждения, фактическим значением (в соответствии с первым битом принятой пары). Все цепи, которые получают неправильный бит подтверждения, переходят в режим ожидания, «отключаются» и ждут сигнала RESET/PRESENCE.
 Поиск начинается в Family коде с его бита LSB (рис. 3). Мы знаем код семейства, поэтому нам не нужно оценивать бит чтения и его надстройку, мы просто отправляем бит подтверждения в соответствии с Family кодом.
  Аналогичным образом работаем с первым байтом серийного номера. Однако биты подтверждения соответствуют текущему пробному коду, который постепенно изменяется (с 00000000b до 11111111b).Любой неверный бит подтверждения деактивирует схему DS, поэтому после отправки этих 16 битов есть 3 варианта: несколько активных датчиков остаются на шине, или они не остаются или только один датчик. Это делается путем чтения бита TEST, то есть еще одного бита плюс его дополнения, и проверки пары.
 Оценка бита TEST:

 0-0 несколько  DS (2 или более) остаются подключенными. Серийный номер (первые 8 бит) одинаков.
Однако на шине может остаться только один датчик , остальные должны быть отброшены и поиск повторен.

-1 датчик не подключен

1 или 1-0 только один датчик остается подключенным. Его серийный номер соответствует тестовому коду, поэтому мы его сохраняем.

Если остается один DS или его нет, продолжить поиск с новым тестовым кодом (с увеличением
на 1). Перебирая датчики по одному от 0 до 255, поиск заканчивается.
Мы можем остановить поиск еще раньше, если у нас есть определенное количество датчиков, и все они уже найдены.  DS с первым байтом серийного номера на фиг.3 была найдена с четырнадцатой попытки.

                            Используемые регистры:

IDS - индекс, код заказа.

NKOD- - новый тестовый код (от 00 до
FFh).

KOD (IDS) - регистры для извлеченных
коды, IDS служит индексом.

T RDS - регистр для передачи данных из/в  DS. Используются только 2 бита для чтения и 1 бит для записи на шине  для поиска.

В начале необходимо сбросить IDS и NKOD. Команда RESET/PRESENCE и SEARCH ROM подготовит все датчики DS к поиску.

Таким образом, мы можем отправить family  NKOD. Отдельные биты отправляются, как описано выше, считываются 2 бита и отправляется бит подтверждения.

Затем прочитайте бит TEST. Фактический и отрицательный бит считывается в T RDS. Если оба бита равны нулю, это несколько  DS с одинаковым кодом на шине.
И наоборот, если оба бита едины, м\схема DS не была найдена.
Все, что остается, - это то, что оба бита различны, тогда м\схема DS была найдена.
Первый байт серийного номера совпадает с тестовым кодом, поэтому мы сохраняем NKOD и увеличиваем порядок кодов IDS.
 Следующее условие, проверяющее последнюю  DS, будет использоваться только тогда, когда мы знаем их точное число, в данном случае 15.
На следующем шаге мы увеличиваем NKOD (+1), чтобы следующий поиск был с этим новым тестовым кодом.
Наконец, мы проверим, все ли варианты кода теста выполнены.Вы можете подумать, что только 8 битов недостаточно для адресации конкретной схемы DS, потому что команда MATCH ROM, используемая для этих целей, требует полного идентификационного кода, то есть всех 64 бит.
Однако есть другой способ достичь выбранного датчика таким же образом, как и при поиске.
Используйте команды RESET / PRESENCE и SEARCH ROM, чтобы настроить каналы DS для поиска. Прочитайте и подтвердите 8 бит кода семейства и 8 бит серийного номера.
Это где 8 битов, найденных в поиске. После этих 16 битов только целевая схема DS остается активной, но все еще находится в режиме поиска. Итак, поиск завершен. Постепенно прочитайте и подтвердите оставшиеся 48 бит. Биты подтверждения снова будут соответствовать первому из считанной пары.
 Только после завершения этой последовательности у нас есть только одна схема DS на 1-проводной шине, готовая к приему функциональной команды, например, READ SCRATCHPAD, WRITE SCRATCHPAD, CONVERT и т.д.

                                      анимация

Каждый раз, когда включается термостат, запускается режим анимации, температура чередуется одна за другой. Количество значении соответствует количеству датчиков (при поиске). Перед каждой температурой сначала показывается номер датчика (правый, средний, левый), это длится около 15 секунд, затем температура отображается в течение 5 с.
Если вы подключите только один датчик, анимация не будет отображаться, на дисплее будет отображаться только температура.

                                 Ручной режим просмотра

Нажмите любую кнопку, чтобы войти в ручной режим просмотра.
Каждый датчик имеет 3 пункта меню: температуру, верхний и нижний пределы. Используйте кнопки «+» и «-» для прокрутки вперед или назад. 

                                          

Пока кнопка удерживается, отображается заголовок пунктов «° Сх.», «Hi.x», «Lo.x», и только после отпускания кнопки отображается соответствующая информация (x = номер датчика).

                               Настройка

Для установки предела нажмите кнопку «S». Когда значение начнет мигать, кнопка «+» увеличит его, «-» уменьшит его.

                                           

Удержание кнопки вызывает более быстрое изменение, кнопки имеют повторяющийся эффект, такой как быстрое  нажатие. Все данные хранятся в памяти EEPROM, где они сохраняются даже при выключенном питании.

                   Возврат к анимации

Прокрутите вниз до любой температуры и удерживайте (S). Это покажет номер датчика, название, и если вы дольше удерживаете кнопку, анимация начнется снова.

                                           Сбой датчика

Даже при нормальной работе связь с датчиком может быть нарушена. В случае единственной ошибки ничего не происходит, считывается последнее значение температуры .
   НесколькО последовательных ошибок приводят к появлению надписи «Er.x.» и выход A3 переключается в лог1(журнал.1) и загорается светодиод ERS.

                                             

Поиск датчиков температуры

Если у нас есть новые датчики, или мы удалили или заменили один из них, мы должны запустить поиск. Нажмите кнопку «S» и кнопку «+».
На дисплее отобразится количество обнаруженных датчиков.

                                                 

Если датчик не обнаружен, на дисплее отображается «E.00», и поиск повторяется.

                                                   

Если найдено несколько (2 или более) датчиков с одинаковым серийным номером (в первом байте), отображается ошибка «E.02». Поиск повторяется до устранения ошибки.

                                                  

Термостат управления

Мощность системы отопления:
Выход B4 = 1, когда хотя бы один из датчиков имеет температуру ниже (или равна) своего нижнего предела.
Выход B4 = 0, когда температура всех датчиков выше (или одинакова), чем их верхние пределы.
Выход для системы охлаждения:
Выход A1 = 1, когда хотя бы один датчик имеет температуру выше (или равную) своего верхнего предела.
Выход A1 = 0, когда температура всех датчиков ниже (или одинакова), чем их нижний предел.
Обратите внимание, что выходы не защищены, они могут быть нагружены  максимальным током 25 мА.

 Расположение элементов показано на рис.4, а печатная плата в формате Sprint-Layout 6.0 находится в архиве. 

                                                      

                                                  Подключение датчиков

Датчики могут получать внешнее или паразитное питание, см. Схему на рис. 1. Оба варианта также можно комбинировать(Рис.5). Датчики с паразитным питанием измеряют температуру только до +100 ° C.

                                                 

                           Список компонентов

R1-R8   330 Oм SMD 0805
R9-R11  1kOo, SMD 0805
PULLUP  4,7 КОм
C1      100 nF,керамич.
C2      1-10 uF/6,3V, тантал.SMD 0805
TS1, TS2 BZW06-5V8-стабилитроны , однонаправленный переход 5,8 В (или двунаправленный)
I01 Р1С16Е1847/16F88 и 16F628A (см. цоколевку)
DIS1 BA56-12EWA (3-значный светодиодный дисплей, общий анод)
TL1 - TL3  микро-кнопка (12В/50 мА, 6х6х12 мм)
CON1,  ICSP, шаг 2,54 мм, 20-контактный
Датчики температуры DS18B20 (DS18B20 +)

Программа для микроконтроллера находится в архиве.Существуют версии  для PIC16F1847, 16F88 и 16F628A.                         

Материал взят из журнала A Radio.Prakticka Elektronika за 2015.1

 

                                                 
 

[ Скачать файлы (23.7 Kb) ]
 
Просмотров: 1482 | Добавил: viktorovich57 | 26.11.2019
Теги: DS18xx
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
авторизация