Измерение температуры с помощью микроконтроллера AVR и датчика LM35

В данной статье мы рассмотрим схему для измерения температуры, построенную на основе микроконтроллера ATmega32 (семейство AVR) и датчика LM35. LM35 представляет собой датчик линейного напряжения. Как известно, температура обычно измеряется в градусах Цельсия или фаренгейтах. Выходная шкала сенсора LM35 отградуирована в градусах Цельсия.

Измерение температуры с помощью микроконтроллера AVR и сенсора LM35: внешний вид

Принцип работы датчика LM35

Подобно транзистору датчик LM35 имеет три контакта: VCC (Voltage constant current — напряжение постоянного тока), GND (земля) and OUTPUT (выход). Датчик обеспечивает переменное напряжение на выходе, зависящее от измеряемой температуры.

Выводы сенсора LM35

Как показано на представленном рисунке, на каждый дополнительный градус Цельсия датчик обеспечивает увеличение напряжения на 10 мВ на своем выходе. Таким образом, если температура составляет 0 градусов Цельсия, то на выходе датчика будет 0 В, для 10 градусов Цельсия на выходе датчика будет +100 мВ, если температура 25 градусов Цельсия, то на выходе датчика будет +250 мВ.

Теперь мы можем измерять значение температуры с помощью анализа напряжения на выходе датчика LM35. Сделать мы это сможем с помощью цифро-аналогового преобразователя микроконтроллера ATmega32A. Полученное после конверсии (преобразования из аналога в цифру) цифровое значение показывается на жидкокристаллическом (ЖК) дисплее 16×2 – это и будет значение температуры.

Необходимые компоненты

Аппаратное обеспечение

  1. Микроконтроллер ATmega32.
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. ЖК дисплей JHD_162ALCD (16×2, 16 символов, 2 строки).
  4. Датчик температуры LM35.
  5. Конденсатор 100 мкФ.
  6. Конденсатор 100 нФ.
  7. Источник питания с напряжением 5 Вольт.

Программное обеспечение

  1. Atmel Studio версии 6.1 (или выше).
  2. Progisp или flash magic (необязательно).

Работа схемы

Схема устройства приведена на следующем рисунке.

Схема измерения температуры с помощью микроконтроллера AVR и сенсора LM35В представленной схеме PORTB микроконтроллера ATmega32 соединен с портом данным жидкокристаллического (ЖК) дисплея. При этом следует помнить о том, что необходимо деактивировать JTAG интерфейс микроконтроллера на порту PORTC при помощи изменения фьюзов (fuse bytes) чтобы использовать PORTC как обычный порт ввода/вывода. В ЖК дисплее (если мы не хотим использовать черный цвет) можно задействовать только 14 его контактов: 8 контактов для передачи данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или gnd&+5v), 3-й контакт для управления контарстностью, 3 контакта для управления (RS&RW&E).

В представленной схеме мы использовали только 2 контакта управления ЖК дисплея для лучшего понимания работы схемы. Бит контраста и READ/WRITE используются нечасто, поэтому они могут быть замкнуты на землю. Это обеспечивает ЖК дисплею максимальную контрастность и переводит его в режим чтения. Теперь нам всего лишь нужно контролировать контакты ENABLE и RS чтобы передавать на ЖК дисплей символы и данные. Также на нашем сайте вы можете прочитать более подробную статью о подключении ЖК дисплея к микроконтроллеру AVR ATmega32.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS — земля
PIN2 или VDD или VCC — +5v питание
PIN3 или VEE — земля (обеспечивает максимальный контраст ЖК дисплею)
PIN4 или RS (Register Selection) – контакт PD6 микроконтроллера
PIN5 или RW (Read/Write) — земля (переводит ЖК дисплей в режим чтения что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) — контакт PD5 микроконтроллера
PIN7 или D0 — контакт PB0 микроконтроллера
PIN8 или D1 — контакт PB1 микроконтроллера
PIN9 или D2 — контакт PA2 микроконтроллера
PIN10 или D3 — контакт PB2 микроконтроллера
PIN11 или D4 — контакт PB4 микроконтроллера
PIN12 или D5 — контакт PB5 микроконтроллера
PIN13 или D6 — контакт PB6 микроконтроллера
PIN14 или D7 — контакт PB7 микроконтроллера

В схеме мы использовали 8-битную связь (D0-D7) ЖК дисплея с микроконтроллером, хотя можно было ограничиться и 4-битной – но в этом случае код программы стал бы немного сложнее. Таким образом, мы использовали 10 контактов ЖК дисплея, 8 из которых будут использоваться для передачи данных и 2 для управления.

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

Перед тем как пойти дальше остановимся немного на принципах работы аналого-цифрового преобразователя (АЦП) микроконтроллера ATmega32A. В данном микроконтроллере мы можем использовать АЦП на любом из восьми каналов PORTA, не важно какой мы выберем – разницы нет. В данной схеме мы использовали канал 0 (контакт PIN0) PORTA. В ATmega32A АЦП имеет разрешение (разрешающую способность) 10 бит, таким образом микроконтроллер способен реализовать чувствительность равную Vref/2^10, то есть если опорное напряжение (Vref) равно 5В мы получим цифровой инкремент на выходе 5/2^10 = 5мВ. Таким образом, на каждое приращение напряжения на 5мВ мы будем получать один дополнительный инкремент цифрового выхода АЦП.

Для обеспечения работы схемы мы должны установить значения регистров АЦП следующим образом:

  1. Сначала мы должны активировать АЦП микроконтроллера.
  2. Поскольку мы собираемся измерять только комнатные температуры нам не нужны нижние значения напряжения (ниже значения 1000 мВ на выходе сенсора LM35). Поэтому мы можем установить максимальное значение опорного напряжения АЦП равное 2.5В.
  3. АЦП микроконтроллера в нашей схеме будет начинать действовать при внешнем воздействии (не от действий пользователя), поэтому нам следует установить его в режим непрерывного преобразования (free running mode): в этом режиме запуск преобразований выполняется непрерывно через определенные интервалы времени.
  4. В любом АЦП частота преобразования аналогового значения в цифровое и точность цифрового выхода обратно пропорциональны. То есть для лучшей точности цифрового выхода мы должны выбрать меньшую частоту. Для этого мы должны установить коэффициент деления предделителя АЦП в максимальное значение (128). Поскольку мы используем внутреннюю частоту микроконтроллера 1 МГц, то значение частоты преобразования АЦП будет равно 1000000/128.

Теперь нам нужно установить правильные значения в регистрах АЦП.

Регистр ADMUX АЦП микроконтроллера AVR ATmega32

Регистр ADCSRA АЦП микроконтроллера AVR ATmega32

RED (красный, ADEN): этот бит устанавливается чтобы задействовать функции АЦП в ATmega32A.

BLUE (синий, REFS1, REFS0): эти два бита используются для установки опорного напряжения (максимального входного напряжения, которое мы собираемся обрабатывать). Поскольку мы будем использовать опорное напряжение равное 2.56V, биты REFS0 и REFS1 необходимо выставить в соответствии с приведенной таблицей.

Установка битов REFS1, REFS0 в регистре ADMUX АЦП

LIGHT GREEN (светло зеленый, ADATE): этот бит должен быть установлен чтобы АЦП работал непрерывно (в режиме непрерывного преобразования).

PINK (розовый, MUX0-MUX4): эти 5 бит используются чтобы задать входной канал. Поскольку мы будем использовать ADC0 (PIN0) то, как следует из ниже приведенной таблицы, нам нет необходимости устанавливать все эти биты.

Установка битов MUX0-MUX4 в регистре ADMUX АЦП

BROWN (коричневый, ADPS0-ADPS2): эти три бита используются для установки коэффициент деления предделителя АЦП. Поскольку мы используем коэффициент деления предделителя 128, мы должны установить все эти три бита.

Биты для установки коэффициента деления предделителя АЦП

DARK GREEN (темно-зеленый, ADSC): этот бит необходимо установить для того чтобы АЦП начал осуществлять преобразование. Далее в программе мы можем его сбросить (в 0) если нам нужно будет остановить процесс аналого-цифрового преобразования.

Объяснение работы программы

Рассмотрим текст программы на языке С (Си) с комментариями.

Текст программы без комментариев

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
962 просмотров

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *