Проект tinyAVR 9. Термометр

January 16, 2015 by admin Комментировать »

Аппаратная часть проекта аналогична предыдущему. Но вместо цепи внешнего делителя напряжения в этой схеме используется датчик температуры. Он преобразует температуру в напряжение, которое измеряется АЦП микроконтроллера и переводится в градусы Цельсия или Фаренгейта, отображаемые на дисплее. Существует много различных датчиков температуры. Самые распространенные: термистор, термопара, кремниевый датчик температуры. Термистор (термосопротивление) дешев и доступен. Простая схема преобразования температуры в напряжение приведена на рис. 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 с.: ил. — (Электроника)

Оставить комментарий

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