...

понедельник, 13 июля 2015 г.

[Из песочницы] Автоматический регулятор температуры газовой колонки

Хочу рассказать о создании несложного устройства, которое сильно облегчило жизнь домашним обитателям — автоматический регулятор температуры газовой колонки. Подобные устройства уже создавались и описывались здесь на хабре, хотелось сделать чуть более продвинутый девайс и подробно описать весь процесс создания от задумки и измерения до реализации, без использования готовых модулей типа Arduino. Устройство будет собрано на макетной плате, язык программирования — C. Это моя первая разработка законченного (и работающего!) устройства.

1. Исходные данные


Мы живем на съёмной квартире, которая обладает одним очень неприятным свойством: в доме нет горячей воды, холодная вода нагревается на месте при помощи нагревателя (Водонагреватель Проточный Газовый — ВПГ), который расположен на кухне. Во время принятия душа если происходит очередной скачок давления — приходится голышом шлепать до колонки или звать кого-нибудь. Интегрировать полноценный «умный дом» возможности нет, поэтому решено было внедрить автоматическое регулирование нагревателя. К слову, довольно быстро нашел несколько похожих решений, например здесь, а значит проблема моя известна и решена в своем виде.

Требования к решению


  • Простота
  • ПИД-регулятор или его подобие
  • Возможность выбора поддерживаемой температуры
  • Отображение текущих параметров
  • Решение вопросов безопасности устройства

Архитектура системы


После некоторых размышлений архитектура устройства была набросана следующим образом:
  • Сервопривод (непосредственно в теле ВПГ)
  • Термодатчик штатный ВПГ
  • Блок усиления сигнала термодатчика и стабилизатор питания сервопривода (непосредственно в теле ВПГ)
  • Блок управления (внешний)

Далее опишу процесс разработки в хронологическом порядке.

2. Сервопривод


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

Разобрав колонку и осмотревшись — нашёл места для установки сервомашинки TowerPro MG995, как-то давно заказанной «на сдачу» на aliexpress.

Для устранения люфта привода тяг сделал одну тягу подпружиненной. Люфт был полностью устранен, но выяснилась другая проблема — сервомашинка с моментом > 10 кг*см оказалась слишком дерзкой для ВПГ. При включении переходные процессы в электронике машинки вызывают рывок в рандомное положение и через пару холостых включений тяга оказалась погнутой! Силумин колонки точно не выдержит такого обращения. Так же вызывала нарекания геометрия качалки, которая была не на оси регулятора — что приводило к нелинейности регулировки. Финальный вид узла привода дросселя:

Узел переделан — использованы пружины от ВАЗ (от карбюратора — куплены в магазине автозапчастей) и качалка теперь на геометрической оси вала. Такая конструкция имеет небольшой люфт, но зато линейна в регулировке и может демпфировать бешенство рулевой машинки. Углы выставлены на оптимальные значения для регулировки в наиболее востребованных положениях регулятора.

3. Блок датчиков ВПГ


Терморезистор ВПГ меняет своё сопротивление в пределах 20..50 КОм, использовать напрямую в качестве делителя проблематично — получим низкую точность измерения. Но как оказалась на практике — при повышении питающего напряжения до 12В можно без проблем получить приемлемый диапазон выходного сигнала — только использовать ОУ в режиме повторителя (при необходимости можно поменять коэффициент усиления) для изоляции делителя от нагрузки. Схема блока внутри ВПГ:

Делитель R2 и термодатчик колонки формирует сигнал с напряжением 1.4..4.96 В в полном диапазоне измерений (на практике — 20..60 градусов цельсия). Изначально разработал мостовую схему — которая может компенсировать уход источника питания, но была отброшена из-за того что источник питания влиял слабо, а первый пункт «ТЗ» был — «простота». Операционный усилитель обеспечивает развязку делителя и нагрузки. Стабилитрон D1 ограничивает выходное напряжение на уровне 5.1 В для случаев отсоединения датчика (в противном случае на выходе было бы 12В — что смертельно опасно для контроллера) — что схемой контроллера будет считаться безусловной ошибкой. Интегральный стабилизатор 7805 питает сервомашинку — решение неудачное, при стопоре машинки он ужасно нагревается и думаю может выйти из строя при клине привода (если не сработает встроенная защита). Более на этом блоке не буду заострять внимание.

4. Контроллер


Контроллер собран на базе ИМС Atmega8 в dip-корпусе.

Тактирование — внутренний осцилятор на 8 МГц. Питание — ещё один 7805 на плате. Индикация через стандартный LCD1602 дисплей. Схема блока:

Управление питанием блока осуществляется от колонки через транзистор — используя малогабаритное реле. Сигнал термодатчика (Контакт №4 разьема) имеет подтяжку на землю и при отсоединении датчика во время работы покажет очень высокую температуру — что приведет к уменьшению регулятора и не вызовет опасных ситуаций. Собранный блок:

4. Испытания и регулировка


Для отработки ПИД-регулятора была написана модель ВПГ на Qt. На ней были отработаны основные моменты и ситуации работы нагревателя — старт холодный/горячий, перепады давления. Для снятия характеристик был добавлен UART-разьем на плату контроллера, куда раз в секунду отправлялись данные о показателях — текущая температура, положение дросселя и т.д.

При испытаниях выявилось следующее:

  • Очень большая инерция ВПГ от начала воздействия до реакции на термодатчике — порядка 30 секунд
  • Округление до градуса в микропрограмме контроллера — плохая идея, алгоритм может работать более точно

Результаты измерения и калибровки термодатчика, Зависимость можно считать условно-линейной:

Первые прогоны в программе отрисовки телеметрии от колонки:

(забыл на графики добавить легенду. Здесь и далее — красный — температура датчика, зеленый пунктирный — положение дросселя, синий — желаемая юзером температура)


Почти удачная регулировка


Удачные варианты коэффициентов


Неплохой вариант старта

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

В процессе подбора интегральый коэффициент пришлось полностью отключить, думаю что это из-за большой инерции системы. Итоговые коэффициенты:

float Pk = 0.2;
float Ik = 0.0;
float Dk = 0.2;

5. Корпусирование


Устройство собрано в пластмассовом корпусе распределительной коробки.

И в таком виде работает.

6. Безопасность использования


Важный вопрос, которым задавался с самого начала.Пройдемся по основным пунктам.

Гальваническая развязка цепей колонки и регулятора


Что будет если блок питания 12В закоротит и на цепи датчика окажется 220 вольт? Не вызовет это подачу газа в колонку. Как оказалось — не вызовет — в колонке имеется два уровня подачи газа — электромагнитный клапан контроллера и механический клапан воды. Открыть только соленоид мало — газ не поступит без тока воды.

Отключение или отрыв датчика внутри ВПГ


При отключении терморезистора от блока внутри ВПГ на выходе будет генерироваться сигнал 0xFF (5.1В) что проверяется программой как ошибка, контроллер останавлиает выполнение программы, сервопривод выставляется на минимум.

Отключение или отрыв датчика от контроллера


В этом случае генерируется большая температура (подтяжка линии датчика к земле) что приведет к выводу привода в минимальное значение, что так же безопасно для юзера.

Электронно-механическая защита ВПГ


Цени защиты ВПГ остаются функционировать в штатном режиме, в случае кипения/перегрева/датчика тяги колонки штатные системы должны отключить её.

7. Файлы


Полный архив проекта доступен на github. В директориях проекта доступны результаты измерений, прошивка контроллера и можели бойлера на Qt.

Спасибо за внимание!

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

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