Печать

Изучаем DS1820/DS18B20

Автор: AntonChip Опубликовано . Опубликовано в Программирование на Си

Рейтинг:   / 22
ПлохоОтлично 

Датчики температуры с однопроводным интерфейсом 1-WIRE были разработаны фирмой DALLAS SEMICONDUKTOR для использования совместно с микроконтроллерами. Впоследствие эти датчики стали выпускаться фирмой MAXIM. Каждый датчик температуры имеет 56-разрядный индивидуальный идентификационный код, поэтому по одному проводу может быть опрошено практически неограниченное число датчиков. Перед установкой таких датчиков в одну линию необходимо считать 64 разрядный код ROM (в него входит 56-битный номер датчика и 8 бит регистра контроля четности) для каждого датчика и учитывать его при программировании микроконтроллера. Передача 64 разрядов занимает много времени, поэтому в устройствах, использующих небольшое число датчиков, можно обойтись выделением отдельного выхода микроконтроллера для каждого датчика.

Термодатчики DS1820 (DS18S20, DS1821, DS18B20)имеют следующие технические характеристики:
- индивидуальный 64-битный идентификационный номер;
- напряжение питания от +3 до +5,5 В;
- измеряемая температура от -55 до + 125°С;
- погрешность измерения температуры в диапазоне -10...+85°С не более 0,5°С;
- в остальном диапазоне температур погрешность измерения не превышает 2°С;
- информация о температуре выдается 9-битным кодом;
- установка пороговых значений температуры по максимуму и минимуму,
- максимальное время преобразования температуры в код 750 мс;
- возможность питания от высокого уровня шины данных;
- термодатчики не требуют индивидуальной настройки при замене.

Принцип измерения температуры основан на сравнении частоты двух генераторов. Частота одного генератора не зависит от температуры, а частота второго изменяется с изменением температуры. Разность частот двух генераторов определяет значение температуры. Восьмиразрядный код температуры побитно, начиная с младшего бита, выводится в линию связи. Девятый бит определяет знак измеренной температуры. Если девятый бит единичный, то температура имеет знак минус, и наоборот. Передача каждого бита данных длится 60 мкс. Если длительность низкого уровня в линии от 1 до 15 мкс, то импульс идентифицируется как лог. 1. Лог. 0 идентифицируется при длительности низкого уровня в линии от 15 до 60 мкс.

Для начала работы с термодатчиком управляющий микроконтроллер должен инициализировать его посылом необходимых команд. Рассмотрим назначение команд, управляющих работой термодатчика.

Поиск ROM (Search ROM) [0xF0]

Команда выдается управляющим микроконтроллером для определения числа и типа термодатчиков, подключенных к одной линии.

Чтение ROM (Read ROM) [0x33]

Данная команда инициализирует термодатчик для генерации в линию идентификационного номера. Эту команду нельзя посылать, если к одной линии связи подключено несколько термодатчиков. Прежде чем подключить несколько датчиков на одну линию, необходимо для каждого датчика определить его личный номер с использованием данной команды.

Идентификация ROM (Match ROM) [0x55]

Команда выдается перед 64-битным идентификационным номером и подтверждает обращение именно к этому термодатчику. Все последующие команды будут восприниматься только одним датчиком до команды обнуления линии.

Пропуск ROM (Skip ROM) [0xCC]

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

Поиск аварии (Alarm Search) [0xEC]

Действие команды аналогично команде «Поиск ROM», но отвечает на нее термодатчик, если измеренная температура выходит за пределы предварительных установок по максимуму и минимуму.

Начало преобразования температуры (Convert Т) [0x44]

Команда разрешает преобразование температуры и запись результата в блокнот.
От подачи этой команды до считывания необходимо выдержать паузу, необходимую для преобразования с установленной точностью.

Чтение блокнота (Read Scratchpad) [0xBE]

В блокноте содержится 8 байт информации (рис. 1). Если нужна информация только о температуре, то считывается 9 бит. Термодатчик будет выдавать информацию до тех пор, пока управляющий микроконтроллер не выдаст в линию нулевой импульс.

Карта памяти датчика DS1820

Рисунок 1. Карта памяти датчика DS1820

Запись в блокнот (Write Scratchpad) [0x4E]

После этой команды управляющий микроконтроллер должен послать два байта для записи в блокнот максимальной ТН и минимальной TL температуры ограничения по максимуму и минимуму. Все 16 бит необходимо передавать непрерывно без обнуления линии.

Копирование блокнота (Copy Scratchpad) [0x48]

После этой команды минимальная (TL) и максимальная (ТН) установленные значения температур переписываются в энергонезависимую память (EEPROM). После отключения напряжения питания записанные значения сохранятся в памяти.

Восстановление (Recall Е2) [0xB8]

Эта команда необходима для копирования значений температуры из EEPROM в рабочую зону блокнота. При выполнении восстановления термодатчик выдает в линию низкий уровень, а после окончания записи — высокий.

Питание от линии (Read Power Supply) [0xB4]

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

Передача данных по однопроводной шине выполняется импульсами нулевого уровня, но различной длительности лог. 0 и лог. 1. Импульс воспринимается как лог. 1, если его длительность не превышает 15 мкс (рис. 2). Если длительность импульса больше 15 мкс, то он воспринимается как лог. 0. Длительность одного бита информации принята равной 60 мкс. Отсюда и разброс возможных длительностей импульсов: лог. 0 — 1...15 мкс, лог. 1 — 15...60 мкс.

Временные диаграммы импульсов однопроводной шины

Рисунок 2. Временные диаграммы импульсов однопроводной шины

Для того чтобы термодатчик подготовить к приему информации, управляющий микроконтроллер должен послать в линию импульс обнуления (Reset) (рис. 54). Импульс обнуления должен иметь длительность 480...960 мкс. В ответ на обнуление линии термодатчик посылает импульс присутствия (Presence). Если в устройстве не предусмотрено отключение датчика, то импульс присутствия для упрощения программы можно не проверять, а заполнить это время (около 100 мкс) паузой. Длительность импульса Presence может быть в пределах 60...240 мкс.

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

Обмен данными и командами начинается с младшего бита. Формат регистров термодатчика показан на рис. 3. Младший регистр температуры (LS) несет информацию о температуре. В нулевой бит записана информация о десятых долях температуры. Если нулевой бит единичный, то десятые доли равны 0,5°С. Старший регистр температуры (MS) содержит информацию о знаке температуры. Если значения регистра нулевые, то знак температуры положительный, и наоборот. Поскольку все биты регистра MS одинаковы, то достаточно считать только младший бит.

Форматы регистров термодатчика DS1820

Рисунок 3. Форматы регистров термодатчика DS1820

Регистры установки ограничения температуры Тh, Tl несут информацию только о целых значениях температуры. В седьмом бите записывают информацию о знаке температуры. При отрицательной температуре в седьмой бит необходимо записать единицу.

В табл. 1 приведен пример принимаемых кодов при различных температурах. Для того чтобы получить значение температуры при минусовых температурах, необходимо принятую информацию перевести в дополнительный код. Для перевода в дополнительный код необходимо принятый код инвертировать и прибавить единицу. Например, для значения 1111 1111 получим 0000 0001, т.е. 0,5°С, но со знаком минус.

Таблица 1.

Подключение термодатчика к микроконтроллеру показано на рис. 4. Шина данных должна быть подключена к плюсу питания через резистор номиналом 4,7 кОм, поскольку выходной транзистор датчика имеет открытый сток. При питании датчика от шины данных вывод 3 остается свободным.

Схема подключения термодатчика к микроконтроллеру AVR

Рисунок 4. Схема подключения термодатчика к микроконтроллеру AVR

В режиме питания от шины данных перед приемом информации требуется максимальная пауза длительностью 750 мс, хотя у меня датчик работал и при длительности паузы, равной 500 мс. В каждом конкретном случае необходима экспериментальная проверка выбранной длительности паузы.

Если необходима повышенная точность измерения температуры, а быстродействие системы не имеет значения, то ее можно рассчитать по формуле:

Т = Тu - 0,25 + (CUNT_PER - COUNT_REMAIN)/COUNT_PER,

где Тu - измеренная температура в °С; COUNT REMAIN, COUNT_PER - 6 и 7 байты блокнота (рис. 53). В документации на термодатчик не указана точность значений вычисленных температур, поэтому радиолюбителям советую провести экспериментальную проверку.

Вообще, если необходима точность измерения температуры 0,5°С за пределами диапазона -10...+85°С, то необходимо делать поправку на точность измерения температуры для каждого датчика. Для этого экспериментально сравнивают показания температуры вашей системы с показаниями образцового термометра. Полученную относительную погрешность программно прибавляют со своим знаком к измеренному значению.

Микроконтроллерные термодатчики DS18B20, как упоминалось выше, отличаются повышенной точностью измерения температуры. Формат регистров термодатчика показан на рис. 5. Младший полубайт регистра LS предназначен для передачи данных температуры с максимальной точностью, т. е. 0,0625°С. Если точность измерения температуры будет в два раза меньше, то все данные сдвинутся на разряд вправо, а в нулевом бите будет информация 2(в минус третей степени). Если будет установлена точность измерения температуры, равная 0,5°С, то формат регистров температуры ничем не будет отличаться от формата регистров термодатчика DS1820.

В табл. 2 показан пример данных при различных температурах, измеренных с максимальной точностью измерения.

Таблица 2.

Точность измерения температуры термодатчиком DS18B20 задается при его инициализации установкой пятого и шестого бита регистра конфигурации (рис. 5). В табл. 3 показаны устанавливаемые значения битов регистра конфигурации при различной точности измерения и максимальном времени преобразования температуры. Реально это время может быть значительно меньшим.

Рисунок 5. Формат регистров термодатчика DS18B20

Таблица 3

При подаче управляющим микроконтроллером команды 0x4E (запись в блокнот) подряд передаются 3 байта. Первым передается байт установки ограничения температуры по максимуму (Тh), вторым — по минимуму (Tl), а третьим — байт конфигурации. Назначение других команд ничем не отличается от назначения команд термодатчика DS1820.

Последовательность действий управляющего микроконтроллера при считывании температуры с одного термодатчика DS1820:
1) послать сигнал обнуления линии (480...960 мкc);
2) принять импульс присутствия или заполнить время паузой (60...240 мкc);
3) послать команду пропуска идентификации 0xCC;
4) послать команду начала преобразования 0x44;
5) пауза не менее 500 мкc для завершения процесса преобразования;
6) обнулить линию;
7) послать команду пропуска идентификации 0xCC;
8) послать команду считывания блокнота 0xBE;
9) принять 9 байт;
10) выделить и проанализировать бит десятых долей градуса;
11) проанализировать бит знака;
12) если знак отрицательный, то перевести значение температуры в дополнительный код.

Последовательность действий управляющего микроконтроллера для датчика DS18B20 отличается посылом байта конфигурации с любыми значениями температур ограничения. Кроме того, необходимо вводить вычисления долей градуса с установленным весом (точностью).

Во второй части пример практического применения датчиков DS18B20.

Теоретический материал был взят из книги Н. И. Заеца "Радиолюбительские конструкции на PIC микроконтроллерах"

Комментарии  

-1 #1 Alex__ 19.10.2014 03:21
"Питание от линии (Read Power Supply) [0xB4]

После этой команды термодатчик переходит к питанию от линии."

Бред - сверьтесь с PDF
Сообщить модератору
+2 #2 AntonChip 19.10.2014 07:12
Цитирую Alex__:
"Питание от линии (Read Power Supply) [0xB4]

После этой команды термодатчик переходит к питанию от линии."

Бред - сверьтесь с PDF

А по Вашему что это за команда
Сообщить модератору

Рекомендуем посмотреть