Аппаратная часть проекта аналогична предыдущему. Но вместо цепи внешнего делителя напряжения в этой схеме используется датчик температуры. Он преобразует температуру в напряжение, которое измеряется АЦП микроконтроллера и переводится в градусы Цельсия или Фаренгейта, отображаемые на дисплее. Существует много различных датчиков температуры. Самые распространенные: термистор, термопара, кремниевый датчик температуры. Термистор (термосопротивление) дешев и доступен. Простая схема преобразования температуры в напряжение приведена на рис. 3.37. Однако изменение сопротивления термистора не является линейной функцией от температуры. Для точного измерения температуры требуется сложное математическое уравнение Стейнхарт-Харта (Steinhart-Hart).
Рис. 3.37. Преобразование температуры в напряжение
Термопара хорошо подходит для измерения больших значений (порядка сотен градусов Цельсия). Термопара (подобно термистору) — также нелинейный датчик температуры. Хотя напряжение термопары зависит от температуры, но чтобы преобразовать выходное напряжение термопары в отсчет температуры, нужна аппроксимация полиномами. Кремниевый датчик температуры использовать проще всего. Он выдает напряжение (или ток), прямо пропорциональное температуре. В этом проекте мы выбрали датчик LM35 компании National Semiconductors, который совместим с датчиком ТМР36 компании Analog Devices. Датчик LM35 выдает 10 мВ на один градус Цельсия. Микроконтроллер имеет 10-разрядный АЦП с опорным напряжением 2,56 В, который обеспечивает хорошую точность измерения температуры (доли градуса Цельсия).
Спецификация проекта
Цель проекта— измерить напряжение от датчика температуры и отобразить температуру в градусах Цельсия или Фаренгейта на семисегментном дисплее в две с половиной цифры. Источник питания на принципиальной схеме не показан, подойдет любой стабилизированный источник питания (линейный стабилизатор или адаптер постоянного тока). Рекомендуемое напряжение источника— 5 В. Можно также соединить последовательно четыре щелочные батареи по 1,5 В или даже четыре никель-металлогидридных аккумулятора по 1,2 В.
Описание устройства
Схема аналогична проекту 8, но входной сигнал поступает с температурного датчика LM35, который выдает 10 мВ напряжения на каждый градус Цельсия. Далее напряжение подается на вход АЦП, а результат отображается на дисплее (после автоматического выбора предела измерения).
Программа помимо отображения температуры выполняет также и преобразование из градусов Цельсия в градусы Фаренгейта. Режим отображения температуры (градусы Цельсия/градусы Фаренгейта) переключается каждые 5 секунд. Горизонтальная черточка включается для режима "Фаренгейт" и выключается для режима "Цельсий".
Откомпилированный исходный код (вместе с файлом MAKEFILE) можно скачать по ссылке: www.avrgenius.com/tinyavrl.
Тактовая частота равна 8 МГц. Функцию сброса контакта РВ5 необходимо отключить (установив fuse-бит RSTDISBL). Рассмотрим самые важные фрагменты кода.
While(1)
{
temperature = read_adc();
//Здесь температура в 100 раз больше реальной if (temperature<=199)
{
point = 1;
}
else if (temperature<1995)
{
if (temperature%10>=5)
{
temperature = temperature +10;
}
temperature = temperature/10; point = 2;
}
else
{
if(temperature%100>=50)
{
temperature = temperature+100;
}
temperature = temperature/100; point = 3;
}
c=temperature/100; temperature = temperature%100; d= temperature/10; temperature = temperature%10; e = temperature; display(c,d,e,point,mode==FAH); _delay_ms (100) ;
}
Листинг 3.6 — это главный бесконечный цикл программы. Он сначала читает отсчет АЦП (при помощи функции adc_read, которая выдает значение, в 100 раз превосходящее реальную температуру). Температура отображается либо в градусах Цельсия, либо Фаренгейта (в зависимости от режима). АЦП работает в 10- разрядном режиме; в качестве опорного выбрано внутреннее напряжение в 1,1 В (для повышения точности).
После получения отсчета АЦП выполняются вычисления: сначала выбирается место десятичной точки, а затем результат округляется до трех цифр. После этого цифры передаются в функцию отображения, которая устанавливает соответствие с массивом statusonoff. Назначение этого массива то же, что и в проектах 7 и 8. Таймер TimerO помимо управления мультиплексированием по методу Чарли отсчитывает также и пять секунд для переключения режима отображения между шкалами Цельсия и Фаренгейта.
Работа устройства
Устройство постоянно показывает текущую температуру, причем каждые пять секунд режим отображения переключается. Шкалу Фаренгейта обозначает горизонтальная черточка (как объяснялось ранее).
Источник: Гадре, Д., Занимательные проекты на базе микроконтроллеров tinyAVR / Дхананья Гадре, Нигул Мэлхотра: Пер. с англ. — СПб.: БХВ-Петербург, 2012. — 352 с.: ил. — (Электроника)
- Предыдущая запись: Второй вариант лупы с подсветкой tinyAVR
- Следующая запись: Универсальные осциллографы группы С1 Часть 4
- Чем отличается ток от напряжения? (2)
- Связь тока и напряжения (0)
- ЗАРЯДНОЕ УСТРОЙСТВО ДЛЯ ЛИТИЙ-НОННОГО ЭЛЕМЕНТА КОНТРОЛЛЕР ЗАРЯДНОГО УСТРОЙСТВА (0)
- ИНДИКАТОР НАПРЯЖЕНИЯ АККУМУЛЯТОРНОЙ БАТАРЕИ ПРОСТАЯ СХЕМА (0)
- ИНТЕРФЕЙС RS-232 C ПИТАНИЕМ OT КОМПЬЮТЕРА (0)
- ПРЕОБРАЗОВАТЕЛЬ СИНХРОННЫХ СИГНАЛОВ B АСИНХРОННЫЕ (0)
- ИСТОЧНИК ПИТАНИЯ УСИЛИТЕЛЯ (0)