Часть 1 – Схема
Исходный код программы микроконтроллера и файл прошивки можно скачать в секции загрузок ниже. В самом начале программного кода объявляются определения некоторых портов микроконтроллера, подключение ЖК индикатора, кнопок и адреса в EEPROM. Далее определяются глобальные переменные и прототипы функций.
Рассмотрим задачи выполняемые функциями. Первая с именем 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-файл прошивки - скачать