Цифровой датчик температуры STLM75 представляет собой вариант популярной микросхемы LM75 от STMicroelectronics. Наличие интерфейса I2C позволяет легко интегрировать данный датчик в микроконтроллерные проекты. Предельная простота организации обмена с микросхемой и низкая стоимость делают ее весьма привлекательной для использования.
Обозначения выводов микросхемы | |
SDA | Линия данных шины I2C |
SCL | Линия тактирования шины I2C |
OS/Int | Выход термостатирования |
A0-A2 | Линии задания младших битов адреса на шине I2С |
По заявлениям производителя, STLM75 оснащена высокоточным температурным сенсором и сигма-дельта АЦП, позволяющим оцифровывать сигнал с разрешением 0.5°C. Точность измерений датчика при этом составляет не хуже чем ±3°C в диапазоне температур от –55°C до 125°C, и ±2°C в диапазоне от –25°C до +100°C. При этом стандартная точность заявлена на уровне разрешения - 0.5°C. Микросхема работоспособна в диапазоне напряжений от 2.7 до 5.5В и выпускается в корпусах TSSOP8 и SO8. Для работы STLM75 не требуется подключение никаких дополнительных компонентов, кроме подтягивающих резисторов I2C.
В отличие от DS1621 и других сходных вариантов, данная микросхема сразу же после подачи питания начинает измерять температуру в циклическом режиме. При этом доступ к измеренному значению возможен в любое время, без организации каких-либо задержек и дополнительных команд. В простейшем случае (без режима термостата и «спящего» режима) достаточно просто прочитать регистр температуры.
Температурный датчик использует стандартный протокол обмена по шине I2C, с поддержкой высокоскоростного режима. 3 аппаратных адресных линии позволяют подключать к одной шине до 8 независимых датчиков. Адрес микросхемы на шине выглядит как:
Разряды | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Значение | 1 | 0 | 0 | 1 | A2 | A1 | A0 | R/W |
Термометр STLM75 имеет дополнительный сигнальный выход, работающий в одном из двух режимов: компаратора или прерывания. Данный выход предназначен для построения термостатов. В режиме компаратора он активируется при превышении температурой значения, записанного в регистре Tos, и деактивируется, если температура становится менее значения регистра Thys. В режиме прерывания, в любом из вышеописанных случаев, формируется короткий импульс.
Температурный датчик STLM75 содержит пять регистров, используемых для хранения информации и обмена с внешним устройством. В случае отсутствия необходимости работы термостата и перевода датчика в спящий режим, обращение к регистрам не требуется. Получение температуры производится с помощью команды чтения данных с шины I2C в произвольный момент времени.
Состав регистров STLM75:
- регистр команд/адреса
- регистр конфигурации (CONF)
- регистр температуры (TEMP)
- регистр верхнего предела (TOS)
- регистр нижнего предела (гистерезис) (THYS)
Данный 8-ми разрядный регистр используется для задания адреса ячейки памяти температурного датчика, с которой будет осуществляться обмен по шине I2C. Используются только два младших бита, все остальные должны иметь значение «0». Адрес в регистре может принимать следующие значения:
00000000 – чтение 16-ти разрядного регистра температуры (TEMP)
00000001 – доступ к регистру конфигурации (CONF)
00000010 – доступ к регистру гистерезиса (THYS)
00000011 – доступ к регистру превышения температуры (TOS)
Регистр конфигурации – 8-ми разрядный регистр, используемый для задания режима работы микросхемы. После включения питания, значение всех битов регистра равно 0.
SD – бит режима «сна»
M – бит режима работы выхода термостата (1 – режим прерывания, 0 – режим компаратора)
POL – бит полярности выхода термостата (Активный уровень – 0)
FT0 – бит защиты от ложных срабатываний
FT1 – бит защиты от ложных срабатываний
«Спящий режим» предназначен для уменьшения потребляемой мощности. Его активация выполняется путем установки в 1 бита SD. В этом режиме отключаются все внутренние элементы микросхемы, за исключением цепей, ответственных за обмен по шине I2С. Измерения температуры не производится. Вывод из «спящего режима» производится обнулением бита SD.
Биты защиты от ложных срабатываний позволяют избавиться от переключений выхода термостата, в случае наличия шумов сигнала. Значения этих битов позволяют задать количество измерений температуры, необходимых для изменения состояния выхода. Возможны следующие комбинации:
00 – 1 измерение
01 – 2 измерения
10 – 4 измерения
11 – 6 измерений
Регистр температуры служит для хранения последнего измеренного значения температуры. Несмотря на то, что его разрядность равна 16 битам, используются только старшие 9. При этом, возможно использование одного старшего байта, если устраивает целочисленный результат. Формат записи температуры аналогичен другим 9-ти разрядным термометрам. Старший бит старшего байта является знаковым, позволяющим реализовывать измерение отрицательных температур по шкале Цельсия. В младшем байте используется только старший бит, фактически являющийся признаком наличия дробной части измеренного значения температуры. Вес этого бита равен 0.5°C. Все остальные биты младшего байта читаются как 0.
Режимы термостататирования в STLM75 |
Данный 16-разрядный регистр используется для установки верхнего значения температуры, используемого при переключении выхода термостата. Формат регистра аналогичен формату регистра температуры. Начальное значение равно 80°C.
16-разрядный регистр, используемый для задания зоны нечувствительности, необходимой в режиме компаратора. Формат регистра аналогичен формату регистра температуры. Значение после подачи питания 75°C.
Еще по теме:
Полупроводниковые датчики температуры
Преобразование кода цифровых датчиков температуры
You have no rights to post comments
Цифровые датчики температуры формируют выходную информацию в виде многоразрядного двоичного кода. В его состав, как правило, входят целая и дробная части, а также знак. Данная статья посвящена преобразованию подобного кода в удобочитаемое цифровое значение, пригодное для дальнейшей обработки, либо вывода на дисплей.
Значение температуры в современных полупроводниковых датчиках, как правило, представлено в обычном двоичном коде, длина которого может достигать 16 бит. Старшие 8 бит отводятся под целое значение в диапазоне от –55°C до 125°C. При этом самый старший бит старшего байта отвечает за знак температуры. Младший байт содержит дробную часть измеренного значения. В зависимости от разрешения термометра в младшем байте могут использоваться от 1 до 8 бит. В некоторых высокоточных моделях с расширенным диапазоном измерения, например ADT7410, под целое значение отводится не 8 а 9 бит кода. Данный факт необходимо учитывать при реализации преобразования. Ниже будет рассматриваться только распространенный вариант с 8-ми битным целым значением.
Наиболее простые и дешевые датчики, такие как DS1621 или LM75 реализуют 9-битовый цифровой код. В этом случае используется только старший бит младшего байта, обеспечивая разрешение 0.5°C. Популярный датчик DS18B20 может иметь 12-битовый код, что позволяет отображать температуру с разрешением до 0.0625°C. Для ADT7410, такое же разрешение будет реализовано 13-битным кодом. Незначащие биты температуры, как правило, заполняются нулями.
Задачей преобразования двоичного кода температуры является получение цифрового значения для дальнейшей обработки или индикации. В первом случае необходимый результат должен быть представлен в виде числа с плавающей точкой, во втором - в виде набора десятичных цифр или BCD-кода.
Двоичный код | Значение температуры |
01111101 00000000 | 125,0°C |
01011111 11110000 | 95,9375°C |
01000101 10010000 | 69,5625°C |
00111111 10000000 | 63,5°C |
00101010 10100000 | 42,625°C |
00100001 01100000 | 33,375°C |
00011011 01110000 | 27,4375°C |
00011001 00000000 | 25,0°C |
00000001 00010000 | 1,0625°C |
00000000 00000000 | 0°C |
11111111 10000000 | -0,5°C |
11110110 11100000 | -9,125°C |
11101000 11110000 | -23,0625°C |
11011111 00000000 | -33,0°C |
11010011 00010000 | -44,9375°C |
Наиболее простым случаем преобразования, будет вариант, при котором достаточно только целого значения градусов. В этом случае младший байт можно отбросить. Далее необходимо определить знак числа, с помощью считывания старшего бита. Если этот бит равен 0, то температура положительна, и значение двоичного кода равно искомому числу. Если старший бит равен 1 – температура по шкале Цельсия отрицательна, и необходимо найти двоичное дополнение числа до 1. Для этого код побитно инвертируется и к полученному значению добавляется 1. Ниже будет показано, как свести данную операцию к вычитанию. Для дальнейшего использования следует учесть, что найденное значение должно сопровождаться знаком «минус».
Пример преобразования 8-ми разрядного кода8-ми разрядный код температуры равен 1110011b. Старший бит равен 1, следовательно, температура отрицательна. Находим дополнение до 1.
not(11100111b)+1 = 00011000b + 1 = 00011001b
Полученное число в десятичной системе равно: 00011001b = 25d
С учетом знака результат равен: t°C= - 25°C
Более сложное преобразование потребуется для учета дробной части. Опять же здесь следует обратить внимание на разрядность полученного кода (или уменьшить ее до нужного значения). Так, для 9-ти разрядного кода, достаточно к вышеописанному примеру добавить 0.5°C. Если используется код большей разрядности, то наиболее естественным преобразованием будет умножение числа на цену младшего разряда. Для 12-ти разрядного варианта формулы преобразования будут иметь следующий вид:
Для положительной температуры t°C=(ADC Code)* 0.0625
Для отрицательной температуры t°C=(not(ADC Code)+1)* 0.0625
С целью нахождения температуры необходимо выполнить следующую последовательность:
- проверить знак числа
- если «минус», то найти двоичное дополнение путем побитовой инверсии и прибавления 1.
- избавиться от незначащих разрядов, путем сдвига вправо на число незначащих бит
- умножить на разрешение кода.
Пример преобразования 12-ти разрядного кода12-ти разрядный код температуры равен 11100110 11110000b. По старшему биту сразу видно, что температура отрицательна. Необходимо найти дополнение, которое будет равно:
not(11100110 11110000b)+1 = 00011001 00001111b + 1 = 00011001 00010000b
Следующим действием будет сдвиг вправо на 4 бита, результат которого равен:
0001 10010001b = 401d
Умножив полученное значение на разрешение датчика, равное в данном случае 0.0625°C, можно получить искомую температуру в виде числа с плавающей точкой.
t°C =401d * 0.0625d = 25.0625°C
Описанный вариант преобразования требует использования операций с плавающей запятой. Между тем существуют варианты, сводящиеся к простым арифметическим операциям. При их использовании двоичное дополнение находится вычитанием максимально-возможного числа используемой разрядности. Необходимо учесть что незначащие биты должны быть удалены.
Положительная температура t°C = ADC Code / 16
Отрицательная температура (знаковый бит присутствует) t°C = (ADC Code −4096)/16
Отрицательная температура (знаковый бит удален) t°C = (ADC Code – 2048)/16
Положительная температура t°C = ADC Code/2
Отрицательная температура (знаковый бит присутствует) t°C = (ADC Code– 512)/2
Отрицательная температура (знаковый бит удален) t°C = (ADC Code – 256)/2
Положительная температура = ADC Code
Отрицательная температура (знаковый бит присутствует) t°C = ADC Code – 256
Отрицательная температура (знаковый бит удален) t°C = ADC Code – 128
Пример упрощенного преобразованияДля вышеприведенного примера 12-ти разрядного кода температуры равного 11100110 11110000b, потребуются следующие действия::
- удаляются незначащие биты: 11100110 11110000b ~ 11100110 1111b = 3695d
- выполняются вычисления по формуле t°C = (ADC Code −4096)/16:
t°C = (ADC Code −4096)/16 = (3695d – 4096d)/16d = (-401)/16 = -25.0625°C
Результат t°C = -25.0625°C аналогичен первому варианту преобразования.
Результат большинства формул опять же представлен в виде дробного числа. Если преобразования требуются только для отображения измеренного значения температуры, и необходимо отображать дробную часть, то можно полностью обойтись без чисел с плавающей запятой. Результат будет представлен в виде целого числа, а разработчик, в этом случае, должен принять меры по установке десятичного разделителя на экране. Положение разделителя между предпоследним и последним знаком, что соответствует разрешению 0.1°C. Выводить температуру с точностью выше 0.1°C, при использовании большинства дешевых датчиков, особого смысла не имеет.
Ниже приведены формулы преобразования для 9-ти и 12-ти разрядного кода. Следует учесть, что незначащие разряды младшего байта должны быть удалены, а результат будет представлять собой двоичное значение температуры умноженное на 10. Последнее необходимо перевести в BCD-код, для отображения на экране с предустановленной запятой.
Положительная температура t°C = ADC Code*5
Отрицательная температура (знаковый бит присутствует) t°C = -(ADC Code– 512)*5
Отрицательная температура (знаковый бит удален) t°C = -(ADC Code – 256)*5
Заключительную операцию умножения можно представить в виде циклического сложения, результатом которого будет 16-ти разрядное число.
Положительная температура t°C = (ADC Code /2) + (ADC Code /8)
Отрицательная температура (знаковый бит присутствует) t°C = -((ADC Code −4096)/2)+ ((ADC Code −4096)/8))
Отрицательная температура (знаковый бит удален) t°C = -((ADC Code −2048)/2)+ ((ADC Code −2048)/8))
Операция деления в данном случае может быть заменена сдвиг на количество разрядов степени двойки. Так при делении на два, сдвиг производится на один разряд, при делении на 8 – на три.
Пример преобразования без использования операций с плавающей точкойПусть исходный код АЦП равен: 00100110 11100000b, что соответствует значению 38,875d
- сокращаем исходный код до 12 разрядов: 001001101110b
- сдвигаем полученное число вправо на один разряд: 001001101110b >> 1 = 000100110111b
- сдвигаем полученное число вправо на три разряда: 001001101110b >> 3d = 000001001101b
- складываем результаты сдвигов: 000100110111b + 000001001101b = 110000100b
- переводим результат в десятичный формат: 110000100b = 388d
Если установить запятую между последним и предпоследним разрядом, получим t°C = 38,8°C. Некоторые проблемы с округлением, но в остальном результат соответствует реальному.
You have no rights to post comments
DS18B20 — цифровой датчик температуры фирмы Dallas. Отправляет данные о температуре, используя только один цифровой вывод и специальный протокол, называемый 1-Wire. Вы можете подключить несколько датчиков к одному контакту. Датчик измеряет температуру в градусах Цельсия.
В технических характеристиках сообщается, что датчик DS18B20 может измерять температуру с различным разрешением. Разрешение — это как у линейки: миллиметры между сантиметрами. Так же и c разрешением у DS18B20 — это шаг между последовательными ступенями градусов Цельсия.
Разрешение выбирается с помощью количества бит. Диапазон выбора от 9 до 12 бит. Выбор разрешения влечет за собой определенные последствия. Чем выше разрешение, тем дольше придется ждать результат измерений.
Для 9 битного разрешения есть 2 шага между последовательными уровнями:
То есть, вы можете прочитать температуру с разрешением 0,5 °C. Для 9 битного разрешения время измерения составляет 93,75 мс. То есть, вы можете выполнять 10,6 измерений в секунду.
Для 10 битного разрешения есть 4 шага между последовательными уровнями:
В этом случае мы считываем температуру с разрешением 0,25 °C. Время измерения для 10 битного разрешения составляет 187,5 мс, что позволяет выполнить 5,3 измерений в секунду.
Для 11 битного разрешения есть 8 шагов между последовательными уровнями:
То есть разрешение составляет 0,125 °C. Время измерения для 11 битного разрешения составляет 375 мс. Это позволяет выполнить 2,6 измерения в секунду.
Для 12 битного разрешения есть 16 шагов между последовательными уровнями:
Следовательно, разрешение составляет 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.
Скачать datasheet DS18B20 (379,0 Kb, скачано: 582)
Выпускаемая фирмой Maxim микросхема DS18B20 представляет собой прямой преобразователь температуры в цифровой код с однопроводным интерфейсом 1-Wire. Для подключения микросхемы необходим лишь один вывод контроллера и один подтягивающий резистор, в отличие от аналоговых датчиков, которые, в общем случае, нуждаются в операционных усилителях и нескольких резисторах.
Программный интерфейс цифровых датчиков с интерфейсом 1-Wire также несложен. Если для аналоговых датчиков необходим АЦП с источником опорного напряжения и, возможно, операционный усилитель, для прямого преобразователя температуры с однопроводным интерфейсом Dallas требуется только точное соблюдение временной последовательности сигналов. В принципе, программа должна быть достаточно простой. Все что она делает – считывает информацию из датчика DS18B20 и отображает ее на 4-разрядном 7-сегментном дисплее. Но когда дело доходит до программирования, обнаруживается, что все несколько сложнее, чем кажется на первый взгляд. Вы сами почувствуете это, взглянув на файл .ASM. Сначала программа инициализирует микроконтроллер PIC16F628A: конфигурирует входы и выходы, обнуляет нулевой банк ОЗУ, устанавливает в исходное состояние бит выбора столбца дисплея и конфигурирует TIMER 2. TIMER 2 используется для прерывания бесконечного цикла программы и обновления информации на светодиодном дисплее. После включения питания микроконтроллер начинает опрос датчика температуры DS18B20. Вся процедура занимает чуть меньше половины общего объема программной памяти. Считав значение температуры и записав его в ОЗУ, микроконтроллер преобразует 12-битное целое в десятичное число и записывает его в четыре регистра общего назначения, расположенные в пространстве ОЗУ. К примеру, посмотрим, как будет представлена в регистрах температура «95.8»: HUNS register = 0 [регистр сотен] TENS register = 9 [регистр десятков] ONES register = 5 [регистр единиц] TENTHS register = 8 [регистр десятых] Содержимое этих регистров будет использоваться подпрограммой обработки прерываний для обращения к таблице кодировок. Программа работает в бесконечном цикле, производя считывание температуры чуть чаще, чем 1 раз в секунду. Основные характеристики датчика температуры: Скорость выборки более одного значения в секунду Дисплей регенерируется по прерываниям от TIMER 2 В программе предусмотрена возможность увеличения количества датчиков, подключаемых к общей шине 1-Wire
Диапазон измеряемых температур –55.0…127.9 °С
Перечень компонентов
Обозначение на схеме | Тип | Количество | Описание |
U1 | 1 | Микроконтроллер. (Возможна замена на PIC16F627A или PIC16F648A) | |
U2 | DS18B20 | 1 | Цифровой датчик температуры |
D1 … D4 | 4 | 7-сегментные светодиодные индикаторы с общим катодом | |
Q1 … Q4 | 4 | NPN транзисторы | |
R1 … R4 | 10 кОм | 4 | Резисторы |
R5 … R11 | 470 Ом | 7 | Резисторы |
R12 | 330 Ом | 1 | Резистор |
R13 | 4.7 кОм | 1 | Резистор |
C1, C2 | 0.1 мкФ | 2 | Многослойные керамические конденсаторы |
Источник материала
Поделиться в социальных сетях
"Питер - АТ"
ИНН 780703320484
ОГРНИП 313784720500453