На склад поступили жидко-кристаллические индикаторы и дисплеи от KSE

Интеллектуальная система контроля температуры на базе микроконтроллера AVR. Часть 2 - Описание задач, выполняемых функциями в программе микроконтроллера, настройка и работа с системой.

Часть 1 – Схема

Исходный код программы микроконтроллера и файл прошивки можно скачать в секции загрузок ниже. В самом начале программного кода объявляются определения некоторых портов микроконтроллера, подключение ЖК индикатора, кнопок и адреса в EEPROM. Далее определяются глобальные переменные и прототипы функций.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Рассмотрим задачи выполняемые функциями. Первая с именем setup_mcu() конфигурирует линии ввода/вывода микроконтроллера для общих задач, для управления ЖК индикатором и звуковым излучателем. Также в этой функции во флаги «c» и «h» записывается значение 0. Эти флаги устанавливаются каждый раз, когда система определяет ошибку или неисправность. Флаг «h» – неисправность узла нагревателя, «c» – неисправность узла охлаждения. Следующей после функции конфигурирования микроконтроллера следует функция scan_keys(), которая считывает состояние кнопок, генерирует специфический тональный сигнал для нажатой кнопки и возвращает код кнопки. Таким образом, отслеживание нажатия кнопок, устранение дребезга контактов, генерация звуковых тональных сигналов при нажатии кнопок сделаны универсальными во всей программе.

Функция adc_avg() предназначена для работы с 64 выборками значений АЦП с канала, она вычисляет среднее значение, чтобы исключить шумы и повысить точность измерений. Возвращаемое функцией значение имеет тип беззнакового целого, т.к. АЦП работает с 10-битным разрешением. За ней следует функция temp_display(), отвечающая за вывод текущего значения температуры на экран ЖК индикатора.

Функция Settings() является наиболее важной частью программы микроконтроллера. Она выполняет две задачи, точнее предоставляет для пользователя два меню: первое реализует запрос на сброс ошибок системы, второе позволяет пользователю установить верхнее и нижнее значения температуры, а также количество системных проходов, которое будет разрешено для установленной температуры, пока она не достигнет номинального значения. Каждый раз при превышении этих значений система будет сигнализировать об этом, и соответствующий узел управления нагревом или охлаждением будет активироваться. Таким образом, установка правильных значений гарантирует надежную работу системы и исключает ложные срабатывания.

Функция inc_dec используется при работе пользователя в настройках системы, когда он изменяет значения температуры и количество системных проходов. Функция Display_common используется в общих целях управления индикатором и, по мере необходимости, в функции inc_dec. Следующая функция compare_temp() сравнивает значение текущей температуры с установленными значениями и отображает на ЖК индикаторе сообщение о том, что температура находится в установленных пределах или превысила их.

Еще одной немаловажной подпрограммой является функция с именем controller_state. Именно здесь контроллер включает или выключает устройства управления температурой, а также генерирует сигнал тревоги в случае возникновения ошибки. В связке с этой функцией работает подпрограмма check_fault, где проверяются условия возникновения ошибок.

Встроенная EEPROM микроконтроллера используется для хранения установленных значений температуры и других конфигурационных параметров, работа с ней организуется в функции read_memory. Последние три функции в программном коде: fault_messages()  указывает тип ошибки, включает соответствующий для ошибки светодиод и генерирует тревожный тональный сигал; settings_demanded() вызывает меню настройки; all_tasks() – совокупность всех функций, выполняемых в основном цикле программы.

Работа с системой

После запуска система настраивает периферию микроконтроллера и считывает сохраненные данные из EEPROM. Если в EEPROM содержатся некорректные данные (мусор), то устанавливаются параметры и значения по умолчанию. После чтения EEPROM система переходит в режим слежения за температурой и ожидает событий, связанных с превышением установленных пределов. На данном этапе на индикаторе отображается текущая температура и статус системы.

Если пользователь хочет настроить параметры, то необходимо нажать кнопку «Setup» для входа в меню настроек. Настройка параметров проходит в три этапа: установка верхнего значения температуры (Рисунок 1), установка нижнего значения (Рисунок 2) и установка количества системных проходов до вывода сообщения об ошибке. Если, например, установить верхнее значение 40°С, нижнее 20°С, число системных проходов 45, а текущая температура постепенно растет от 30°С до 41°C, то система выдаст сообщение о выходе температуры за установленные пределы и активирует узел управления охлаждением. На экране ЖК индикатора появится сообщение о высокой температуре (Рисунок 3). Теперь, если температура начнет снижаться и достигнет значения между (40°С – (40°С – 20°С)/2)=30°С и 20°С за время 45 системных проходов узел охлаждения отключится и сообщение о высокой температуре исчезнет. Система вернется в нормальное состояние.

Если же температура не уменьшится до значения в указанном выше диапазоне, то предполагается, что неисправен модуль охлаждения или же по другим причинам регистрируется перегрев или выделение слишком большого количества тепла, с которым не может справится охлаждение. В связи с этим выдается сообщение о неисправности узла охлаждения, и он отключается до тех пор, пока не будет сброшено сообщение об ошибке. По такому же сценарию система проходит при регистрации сигнала низкой температуры. Если фиксируется одновременная ошибка и нагревателя и охлаждения, то система переходит в состояние полной остановки, вывод из которого возможен по сбросу системы.

Настройка интеллектуального контроллера температуры: установка верхнего значения температуры
Рисунок 1. Настройка интеллектального контроллера температуры: установка верхнего значения температуры.
Настройка интеллектуального контроллера температуры: установка нижнего значения температуры
Рисунок 2. Настройка интеллектального контроллера температуры: установка нижнего значения температуры.
Интеллектуальный контроллер температуры: сообщение на ЖК индикаторе о превышении  установленного значения температуры.
Рисунок 3. Интеллектуальный контроллер температуры: сообщение на ЖК индикаторе о превышении  установленного значения температуры.

Загрузки

Исходный код и HEX-файл прошивки - скачать

embedded-lab.com

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Intelligent temperature monitoring and control system using AVR microcontroller. Part 2 - Firmware

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя