|
Теги статьи: |
SPI модуль для управления мощностью сетевой нагрузки
Автор: axillent
Опубликовано 18.09.2013
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2013!"
Преамбула
Пару лет назад когда я после долгого перерыва решил возродить увлечение радиоэлектроникой наверно как и многим новичкам хотелось сделать все и сразу. В тот момент хотелось начать со сложного - изменить автоматизацию приточной вентиляции. Одна из первых проблем которая тогда озадачила - управление мощностью в нагрузке (в случае приточки это управление вентилятором и калорифером для нагрева воздуха). Честно скажу - тогда я эту задачу не осилил, но задел в части понимания был заложен.
Задача все еще актуальна, но подумалось мне, что будет полезным и для меня и для других сделать независимый, простой с точки зрения применения модуль управления нагрузкой, который можно внедрить в любую конструкцию не погружаясь в премудрости фазового регулирования и "ловли" перехода в ноль.
Таким образом родилась идея предлагаемого устройства. Основано устройство на одном из самым простых и распространенных контроллеров - Attiny13A. В требования к устройству были заложены следующие вещи:
Схема и логика работы
Из требований родилась простая конструкция, схема которой приведена ниже:
Получив "задание" на управление мощностью от управляющего МК tiny13 отслеживает по прерываниям переход сетевого напряжения через ноль и далее отсчитав по встроенному таймеру нужное количество тиков подает управляющее напряжение на открытие симистора. Количество отсчитываемых тиков зависит от заданной мощности. Таким образом реализована простая конструкция фазового регулирования в диапазоне управляющего числа 8 бит - от 0 до 255. При значении 0 нагрузка полностью обесточивается, при значении 255 включена постоянно (смена состояния гарантировано обеспечивается при переходе через ноль). При тестировании фактическое действующее напряжение управлялось от десятых долей вольта до полного напряжения сети.
В качестве интерфейса взаимодействия с управляющим МК был выбран трех/четырех проводный SPI (3 провода при одностороннем обмене). С одной стороны SPI требует аж 3 или 4 провода, а с другой во многих конструкциях SPI уже использован другой периферией и добавление модуля реально потребует всего один провод для SS (slave select ). Взаимодействие простое - переданный на модуль байт информации это установка уровня мощности управляемой модулем нагрузки в диапазоне от 0 до 255. В качестве бонуса возможна настройка отправки обратно на управляющий МК статуса - это один байт у которого нулевой бит будет выставлен в 1 в случае отсутствия переменного напряжения в течении более 1 сек (обрыв провода питания). По сути это статус ошибки. В конструкции и в программе все для этого предусмотрено, но для 4-го вывода SPI на tiny13 использован PB5, который одновременно является входом RESET и чтобы отправка статуса заработала необходимо запрограммировать RSTDISBL во фьюзах МК.
В архиве есть пример программы для atmega8 которая общается с модулем выставляя нужный уровень в зависимости от положения аналогового потенциометра на входе PC0 atmega8. Для наглядности в примере текущее значение мощности отображается на дисплее 1602, там же отображается статус возвращенный модулем. При не активном RSTDISBL статус всегда будет возвращаться как 255. В примере в передачу по SPI вставлена программная задержка для снижения скорости передачи. Программный SPI на tiny13 сделан полностью на прерываниях, но тем не менее на полной скорости работы той же atmega8 с железным SPI tiny может не успевать отрабатывать, поэтому лучше использовать для отправки пример из тестовой программы. На экстремальные значения по скорости работа не тестировалась, но в коде есть простая управляемая задержка объявленная как SPI_DELAY, значение 1-10мкс должны работать успешно в большинстве случаев. Код универсальный и будет работать как минимум на любом AVR. После отправки значения это значение мощности будет сохраняться в нагрузке до потери питания модулем. При восстановлении питания нагрузка будет оставаться в выключенном состоянии до получения новой команды.
Печатная плата и сборка
Модуль собран на плате размером порядка 46мм х 26мм с односторонней разводкой. В качестве симистора возможно применение практически любого симистора подходящего под управляемую нагрузку по току и с достаточным запасом по напряжению. Опто-симисторная сборка применена MOC3023 - может быть тоже практически любая, но обязательно без детектора перехода нуля (в даташитах обозначается как none zero-cross или просто отсутствует надпись zero-cross).
Никакой особой наладки модуль не требует. На разведенной печатной плате отсутствует стандартный разъем для программирования, МК в корпусе SOIC можно запрограммировать перед пайкой либо программировать через интерфейсный разъем где присутствуют все необходимые входы МК. Фьюзы по умолчанию кроме двух изменений - частота это внутренний RC генератор 9,6Мгц и отключен CLKDIV8:
Как уже было сказано ранее - при необходимости использования отправки статуса необходимо также запрограммировать RSTDISBL, но если у вас нет высоковольтного программатора - откатить эту операцию вы уже не сможете.
На модуле установлены три разъема. Низковольтный 6-ти контактный разъем предназначен для подачи питания и для подключения к шине SPI. Питание модуля можно осуществлять от того же источника питания, что и управляющий МК - tiny13a на частоте 9.6Мгц требует питание в диапазоне 2.7-5.5В.
Два других разъема высоковольтные - один для подключения сети 220в, второй для подключения сетевой управляемой нагрузки. Обратите внимания, что в конструкции модуля отсутствует предохранитель, предполагается, что предохранитель есть в цепи питания самого головного устройства.
Рисунок платы для ЛУТа здесь для иллюстрации, в приложении для печати:
Резисторы применены как SMD для низковольтной части так и выводные для высоковольтной части. Ниже показан модуль в сборе:
На видео демонстрируется работа модуля, в левом верхнем углу LCD показывается текущее число которое mega8 отправляет на модуль. При демонстрации значение сначала поднимается с нуля до 255, а потом откатывается назад до малых значений. Для наглядности показано еще действующее значение напряжения на нагрузке - оно меняется от буквально десятых значений вольта до полного напряжения сети. Нагрузка комбинированная (импровизированный стенд вентиляционной установки) - вентилятор + галогеновая лампа на 300вт. При такой нагрузке BT139 практически не греется и не требует радиатора.
На втором видео показано на осциллографе как работает регулирование. Один канал желтым цветом показывает пики снимаемые с низковольтного выхода транзисторного оптрона (PC817) - пик соответствует переходу через ноль. Второй канал синим цветом показывает напряжение на выходе МК подключенного к светодиоду оптосимистора (MOC3023). Положительное значение соответствует открытому силовому симистору. Вольтметр отображает действующее значение переменного напряжения на силовой нагрузке.
Файлы:
прошивка+тест+pdf
Все вопросы в Форум.