Термометр на датчике SE97B и AVR-микроконтроллере

Думаю, многие могут могут найти у себя в закромах отголоски щедрости компании NXP semiconductors в виде бесплатных образцов электронных компонентов. Раздавали они и красиво оформленные наборы I2C микросхем для различных классов приложений. В одном из таких наборов (computer applications) имелись датчики температуры под маркировкой SE97BTP. Помимо датчика температуры эта микросхема выполняет функции EEPROM памяти. Так вот, если есть такая микросхема, то почему бы не попробовать ее использовать где-либо в своих разработках? Мельчайший корпус датчика HWSON8 позволит без труда встроить термометр в любое устройство, ну или почти в любое.

Размер корпуса HWSON8 термодатчика SE97B составляет 2 на 3 миллиметра.

Рассмотрим эту микросхему и ее характеристики. Как указывалось выше, это не лишь датчик температуры, но и память EEPROM. Последнее нас не очень то и волнует. SE97B позиционируется производителем как температурный сенсор для DDR модулей памяти. Объем EEPROM памяти составляет 256 байт. Вся эта память разделена на 2 части — 128 байт имеют защиту от записи, остальные 128 байт не имеют защиты. Интерфейс передачи данных используется I2C. При этом микросхема имеет три адреса — один для обращения к регистрам термометра, остальные два для обращения к памяти EEPROM с защитой от записи и без нее. При этом адрес микросхемы в общем учитывает состояние выводов A0, A1, A2 — подключены к земле или к питанию и в зависимости от этого в адрес ставятся единички или нолики в соответствующие места.

 Максимальное разрешение информации о температуры составляет 0,125 градусов Цельсия или 11 бит. Период обновления регистров хранения информации о температуре 0,125 секунды или 8 Гц. Также аналогично температурному датчику LM75 того же производителя имеется вывод EVENT. Сигнал на этом выводе появляется при условии превышения заданной температуры. В карте регистров имеется верхний и нижний предел срабатывания, отдельно задается гистерезис для этого ввода — 6, 3 или 1,5 градуса Цельсия. Также может задаваться активный уровень для этого вывода — высокий или низкий уровень.

Характеристики микросхемы температурного датчика SE97B:

  • напряжение питания от -0,5 до 4,3 вольт
  • допустимое напряжение на выводах SCL, SDA, A1, A2, EVENT от -0,5 до 4,3 вольт
  • допустимое напряжение на выводе A0 от -0,5 до 12,5 вольт
  • ​допустимый ток на выводах SDA, EVENT 10 мА
  • точность измерения температуры в диапазоне от 75 до 95 градусов — ±0,5%
  • точность измерения температуры в диапазоне от 40 до 125 градусов — ±1%
  • точность измерения температуры в диапазоне от -40 до +125 градусов — ±2%
  • потребляемый ток 250 мкА
  • частота работы протокола I2C от 0 Гц до 400 кГц
  • 100000 периодов перезаписи памяти EEPROM или 10 лет службы
  • защита от записи памяти EEPROM

По характеристикам четко просматривается заданная область применения датчика температуры — компьютерные приложения, а именно модeли памяти DDR. дело в том, что максимальная точность измерения температуры находится как раз в рабочей области температур компьютерной техники (от 75 до 95 градусов — критический предел рабочей области, который необходимо максимально точно контролировать).

Спустимся с небес высокой технологии компьютерной техники и перейдем к более насущным проблемам — контроля температуры в домашних условиях. К слову LM75 в диапазоне от -40 до +125 градусов имеет такую же точность, даже чуть хуже — до ±3%, но чуть больший диапазон отрицательных температур. Так что если бы стоял выбор между LM75 и SE97B, скорее всего бы я выбрал второй датчик, хоть и специфический, но более точный, да и корпус много более мелкий. 

​Таким образом, схема термометра выглядит следующим образом:

Микроконтроллер был выбран Atmega8 за свою широкую распространенность и небольшую цену, а также весь необходимый функционал для построения данной схемы. Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в SMD исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей. Марка дисплея 2004А — 4 строки по 20 символов. Большой размер дисплея был использован для построения пользовательского шрифта высотой в 4 строки дисплея. При использовании такого шрифта на экран помещается всего 5 символов, зато больших. Этот шрифт можно найти в исходном коде прошивки микроконтроллера, прилагающемся ниже. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод «А» и «К» на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Но пренебрегать этим резистором не стоит во избежание порчи подсветки. Для питания схемы используется микросхема линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой — AMS1117 в исполнении, дающей на выходе 3,3 вольта. Применение второго стабилизатора обусловлено максимальным рабочим напряжением датчика температуры.

Схема была собрана и отлажена на макетной печатной плате для микроконтроллера Atmega8:

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

Логика работы устройства не сложная — извлечение данных по I2C интерфейсу из температурного датчика и вывод их на LCD дисплей с использованием большого шрифта. Для того, что бы получить данные от датчика необходимо передать условие старта при помощи I2C, далее передать адрес устройства (температурный сенсор) с битом записи, далее передать адрес регистра хранения данных о температуре. Потом, чтобы считать данные из этого регистра, нужно либо передать условие остановки и следом условие старта, либо просто рестарт. Далее передаем адрес устройства с битом чтения, ну и наконец считываем старший и младший байт данных. В конце передаем условие остановки. Информация в 2-х байтах располагается следующим образом:

Биты 15 — 13 использовать не будем. Биты с 12 по 1 содержат информацию о температуре — целую и дробную часть. Бит 0 зарезервирован и не используется, всегда равен нулю.

Программно все это выглядит на языке Си так:

void Read_temper (void) {

i2c_start_cond(); // запуск i2c
i2c_send_byte(adr_write); // передача адреса устройства, режим записи
i2c_send_byte(0x05); // передача адреса памяти
i2c_stop_cond(); // остановка i2c

i2c_start_cond(); // запуск i2c
i2c_send_byte(adr_read); // передача адреса устройства, режим чтения
t1 = i2c_get_byte(0); // чтение MSB температуры
t2 = i2c_get_byte(1); // чтение LSB температуры
i2c_stop_cond(); // остановка i2c

buf1=t1;
buf2=t2;
temp1=(buf1*16)+(buf2/16);
buf2=t2;
temp2=buf2*16;
temp2=temp2/128;
temp2=temp2*5;

}

Далее в бесконечном цикле эта функция вызывается и полученная информация выводится на дисплей. Период обновления данных на экране составляет 7,5 секунд. Информация о текущей температуре выводится на экран с разрешением в 0,5 градуса. Учитывается лишь один бит дробной части.

Для программирования микроконтроллера Atmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio):

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


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

IC1
МК AVR 8-битATmega81
IC2
Датчик температурыSE97BTP1
VR1
Линейный регуляторL7805AB1
VR2
Линейный регуляторAMS1117-3.31
C1
Электролитический конденсатор470 мкФ1
C2, C3, C5, C6, C9
Конденсатор100 нФ5
C7, C8
Электролитический конденсатор10 мкФ2
C4
Электролитический конденсатор220 мкФ1
R1
Резистор22 Ом1
R2
Подстроечный резистор10 кОм1
R3-R6
Резистор10 кОм4
HG1
LCD-дисплей2004A1
S1
Тактовая кнопкаTC-A1091
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.