Контроллер печи

Вначале была печка – просто промышленная печь, управляющаяся одной большой кнопкой "Вкл./выкл.". Непорядок! Было решено создать маленькую "коробочку", которая позволит задавать температуру, которую печка должна поддерживать, и устанавливать время, в течение которого печь будет работать. 
На практике оказалось, что создать такое устройство не так уж просто – если до этого у меня в задачах были простенькие программки, сочетающие в себе максимум пару действий – например, считывание температуры с ds1820 и вывод результата на экран – то тут количество задач, которые должны быть выполнены практически одновременно, было весьма значительным. Но обо всём по порядку.
Сначала определим, из каких частей вообще будет состоять наш контроллер:

  • естественно, нам нужна микросхема, с помощью которой мы и будем всё делать – изначально это была ATmega8, но потом, в ходе работы, программа просто перестала туда влезать, поэтому в конечном итоге была использована ATmega168;
  • дальше нам обязательно нужна обратная связь контроллера с пользователем – тут мы использовали шесть семисегментных индикаторов в качестве дисплея;
  • для управления есть одна "основная" кнопка, которую будут использовать обычные пользователи, и одна "скрытая" кнопка, с помощью которой можно будет зайти в настройки, меню калибровки, сделать сброс. Эта кнопка будет использоваться "админами" и должна быть убрана куда подальше от шаловливых ручек юзеров;
  • также для управления нужна "крутилка" - энкодер. С помощью него можно будет легко настраивать и желаемую температуру, и значение таймера;
  • термопара – для получения информации о внешнем мире, то бишь текущей температуре в печке;
  • часовой кварц – понадобится нам для реализации таймера; в принципе, можно обойтись и без него, но было интересно подключить и разобраться, как же работать в асинхронном режиме

Собственно, из "внешних" частей это всё.
Мощностью печки мы будем управлять с помощью какой-нибудь ножки, считывать значение текущей температуры от термопары – через АЦП.
Вот схема контроллера:


Рисунок 1. Принципиальная схема контроллера печи.

Если же пробовать симулировать устройство в Протеусе, то схема будет немного иной - нужно добавить подтяжку к земле на "адресных" выводах семисегментных индикаторов:


Рисунок 2. Схема контроллера печи для симуляции в Протеусе.

Вот архив с основной схемой и схемой для симуляции в Протеусе.

Вот файл "энергонезависимой памяти", проект и прошивка.

Теперь о том, что получилось. Мы реализовали всё, что планировали, хотя не обошлось без недочётов.
Результат – контроллер печи, который позволяет пользователю задавать желаемую температуру и время работы. Нагрев при этом контролируется ПИД-регулятором, что позволяет плавно нагревать печь. Интерфейс интуитивно понятен – включается-выключается устройство длительным нажатием на кнопку, режимы отображения (текущая температура и таймер) переключаются коротким нажатием. Для выбора температуры или значения таймера используется энкодер. Возвращение из режима настройки происходит, опять же, по краткому нажатию на кнопку или автоматически через некоторое время бездействия.

Существенным недочётом является, например, отсутствие компенсации холодного спая у термопары - нам просто не хватило ножек; впрочем, желающие могут заменить обычный операционный усилитель на операционный усилитель с компенсацией холодного спая, и проблема будет решена.

Вот модель работы базового интерфейса:


Рисунок 3. Модель базового интерфейса с точки зрения пользователя.

Для пользователя-администратора, имеющего доступ к «администраторской» кнопке, предоставлены дополнительные настройки и калибровка.
Для того, чтобы перейти в режим калибровки, достаточно коротко нажать «администраторскую» кнопку в любом из активных режимов «базового» интерфейса (активным считается любой режим, кроме выключенного, см. рисунок выше).
Так выглядит модель калибровки с точки зрения пользователя:


Рисунок 4. Модель калибровки с точки зрения пользователя.

Теперь о дополнительных настройках. Они включают в себя определение минимальной и максимальной задаваемой температуры, шаг изменения температуры при выборе задаваемой температуры (в обычном режиме), а также значения коэффициентов ПИД-регулятора. В режим настроек можно зайти по короткому нажатию на «администраторскую» кнопку, но в выключенном режиме. Ниже представлена модель настройки:


Рисунок 5. Модель системы глобальных настроек с точки зрения пользователя.

При этом настройка ПИД-коэффициентов происходит следующим образом:


Рисунок 6. Модель настройки коэффициентов ПИД-регулятора с точки зрения пользователя.

 

Теперь рассмотрим процесс создания контроллера.
Самый первый шаг, который нужно сделать при создании любой "умной железки" - это продумать его в голове.
Далее мы подключили семисегментный дисплей, чтобы получить обратную связь контроллера с пользователем и иметь возможность отлаживаться в процессе дальнейшей работы.
Следующий шаг - научиться общаться с пользователем: научиться определять короткое и длительное нажатие на кнопки и отличать поворот энкодера в одну и в другую сторону. Мы начали с защиты от дребезга, а потом научились работать скнопками и энкодером.
После того, как "базовые" машины для взаимодействия с пользователем были готовы, мы перешли к реализации пользовательского интерфейса, который смоделировали ранее. Для этого был создан таймер для печки (или по-другому, кухонный таймер), а затем разработана библиотека для получения значения текущей температуры через АЦП.
Следующий этап – работа с нагревательным элементом. Сюда относится и создание ПИД-регулятора для управления нагревом.
После реализации всех вышеперечисленных машин был создан базовый интерфейс для обычного пользователя. Далее мы перешли к созданию «расширенного» интерфейса для администратора: сначала научились калибровать устройство, а потом и создали интерфейс «глобальных настроек».
Последнее, что необходимо было сделать, - научиться сохранять все необходимые настройки (значение минимально и максимально возможной задаваемой температуры, значение шага изменения настраиваемой температуры, коэффициенты ПИД-регулятора и точки калибровки) в энергонезависимой памяти.

Наверх

Автор - Moriam  =ˆˆ=

Обсудить на форуме