Практическая реализация многоканального фазового регулятора на Attiny2313

В данной статье приводится пример практической реализации алгоритма многоканального фазового регулятора, представленного в статье [1], продолжением которой она и является.
Назначение устройства — переключатель ёлочных гирлянд на лампах накаливания. Надо заметить, что статья планировалась к выходу ещё перед Новым годом, однако, работы над ней удалось завершить только сейчас. Устройство реализовано по упрощённой схеме без гальванической развязки с бестрансформаторным блоком питания и минимумом органов управления по идее [2]. Однако, схему с общим проводом +5В пришлось заменить на «общий» GND так, чтобы МК и 1-й терминал симисторов (AAG) были на одном проводе. По той же причине используется однополупериодное выпрямление.

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

Недостатки:
— отсутствие гальванической развязки, что, впрочем, на надёжности работы не сказывается. Однако, требует особых мер предосторожности при работе с МК;
— минималистский интерфейс с одной кнопкой, несколько перегруженной функциями;
— ограниченный объём памяти EEPROM данного МК для хранения программ. Но, как правило, выбор останавливается на одной программе, которая в дальнейшем и используется;
— израсходование объёма flash Attiny2313, вследствие чего совершенствование программного кода без урезания функциональных возможностей и/или смены компилятора невозможно;
— низкий КПД бестрансформаторной схемы питания [3], что ограничивает возможности его применения и создаёт ограничения по току.

Заранее нужно оговориться, что приведённая здесь схема устройства заведомо избыточна, т.к. содержит 2 типа снабберов, I и II, из которых реализуется только один. Целью их установки было предотвратить влияние симисторов друг на друга при их параллельной работе (что не удалось, т.к. «помехи» себя никак не проявили, в отличие от схем, где использовались triac driver’ы MOC3052 и КР1182ПМ1Р, [5]). Снабберы можно не ставить вовсе, если при работе нескольких каналов одновременно не возникает самопроизвольных включений-выключений нагрузки. Если LC-фильтр (II) не ставится, вместо L1-4 ставятся перемычки. При установке L1-4 следует учитывать максимальный ток нагрузки, на который они должны быть рассчитаны.
Бестрансформаторный блок питания представлен гасителем напряжения C1R1 и R18+R4 (по 1Вт), рабочий ток которого составляет ~70мА, стабилитроном D2, выпрямительным диодом D1 и сглаживающим конденсатором C4. D2 и D1 подобраны таким образом, чтобы напряжение на выходе составляло 5,2В. В данном случае, D1 — диод Шоттки, из-за меньшего падения напряжения. В общем случае, подойдёт любой выпрямительный диод. Схема обеспечивает ток до 30мА без заметного падения напряжения. При этом, теоретический максимальный ток потребления составляет 4×10мА (управление симисторами) + 7,5А (МК) + ~5мА (LED) = 52,5мА. Однако, благодаря тому, что ток управления симисторами включается на достаточно непродолжительное время, менее миллисекунды за полупериод сетевого напряжения на 1 канал управления, питания в целом достаточно и устройство работает стабильно на разных режимах, в т.ч. благодаря высокой ёмкости сглаживающего конденсатора C4.
Поскольку радиаторы для симисторов не предусмотрены, рассеиваемая мощность симисторов ограничена их корпусами TO220, что примерно соответствует 200Вт нагрузки.
Детектор «нуля» выполнен на резистивном делителе R2+R3, R5, обеспечивающем напряжение ноколо 5В на входе INT0 МК. Детектирование начала полупериода осуществляется по нарастающему фронту, начало второго полупериода отсчитывается по таймеру (10486 тактов счётчика Timer1 для 8МГц тактовой частоты).

Схему можно упростить, если не использовать снабберы. Ток потребления можно снизить, применив симисторы с номинальным током управления 5мА, например, BTA12-600TWRG, которые также не нуждаются в снабберах. При этом, R10-13 можно увеличить до 1кОм, а C1 уменьшить до 680нФ. Предохранитель F1 убрать вообще, оставив общий предохранитель на корпусе (на схеме не показан) или, разведя предохранитель на плате как общий для всей схемы, включая нагрузку. Составной резистор R18+R4 можно заменить одним, учитывая мощность рассеивания. Разъём для программатора тоже можно исключить, если не подразумевается отладка программ в EEPROM.

Готовое устройство:

При реализации был выбран компромиссный вариант: на два канала установлены снабберы типа I, на два других — Г-образные LC-фильтры (II), как в [2].

Индикация режима работы представлена одним двухцветным светодиодом D3, подключенным общим катодом и одним из анодов к МК таким образом, что при выполнении основной программы горит зелёный, свидетельствуя о том, что питание +5В подаётся и МК работает. В режиме «останов» включается жёлтый цвет. Переключением цветов в зависимости от состояния ножки PD5 МК управляет PNP-транзистор Q1, работающий в роли элемента ~НЕ. Выключение светодиода осуществляется переводом PD4 в режим Hi-Z.
Резистор R9 — дополнительный, для выравнивания яркости жёлтого канала LED. R7 и R9 подбираются к выбранному LED.

Переключение режимов работы осуществляется кнопкой Sw2. Различаются 3 типа нажатия:
1. Короткое — первое вызывает останов выполнения программы. При этом, LED мигает жёлтым с частотой 1Гц.
Второе вызывает включение всех каналов с установленными для них ранее скоростями, LED непрерывно горит жёлтым. Наконец, третье вызывает возобновление выполнения программы с того момента, когда оно было остановлено.
2. Длинное, более 2с. По отпускании кнопки, происходит переключение программы на следующую, если их в EEPROM было найдено более одной, или, по достижении последней — переход к первой. Смена программы подтверждается кратковременным, на 1/2с., переходом цвета LED из зелёного в жёлтый.
3. Очень длинное. По достижении нажатия длительностью свыше 4с., LED кратковременно сменит цвет на жёлтый. Это означает, что текущая программа задана по умолчанию. Её номер сохранён в первом байте EEPROM.
Переключение режимов показано в демо-ролике. Если запустить устройство, прошив flash МК, но не прошив EEPROM, также запустится демо-режим.

Структура программы в EEPROM. Алгоритм работы интерпретатора.
Первый байт — номер программы, хранимой в EEPROM. Если там 0 или значение, превышающее количество хранимых программ, включается режим демо (на видео). Второй байт — значение скорости по умолчанию. Должно быть в диапазоне [0-6]. Программа начинается с третьего байта.
В начале работы производится сканирование EEPROM на наличие программ, подсчитывается их количество и определяются адреса начала, после чего запускается выполнение программы по умолчанию, которое происходит циклически.

1. Значения:
— от 0 до 179 — время (задержка) в секундах;
— от 180 до 189 — номер канала, 0-9, соотв. (к-во каналов ограничено в программе. В данном случае, 4-мя;
— 190-196 — скорость, [0-6];
— 200-251 — уровень яркости, 0-51 (0-max., 51-min.);
— 255 — разделитель: 1 значение — между программами, более 1 — окончание блока программ.
2. Структура.
Блок данных выглядит как перечисление номеров каналов, за которым следует задаваемый им уровень яркости и/или скорость. Данное значение (яркости или скорости) будет применено к этим каналам. 
Далее может следовать другая группа, соотв., яркость или скорость для неё будут применены только к ней, но не к предыдущим значениям. Для изменения яркости в составе группы, значения яркости
следует задавать в начале блока. В конце блока задаётся время (интервал)  в сек., что служит для интерпретатора сигналом применить полученные значения.
Примеры программ приведены в прилагаемых файлах .eep. В программах задействованы три канала из 4-х. На видео показана работа программы с сокращёнными временными интервалами.

Меры предосторожности.
В схеме везде присутствует сетевое напряжение. Разъём для подключения программатора можно использовать ТОЛЬКО при отключении устройства от сети, питание МК осуществляется от программатора.

Особенности и недостатки реализации.

Устройство продемонстрировало надёжную работу в течение почти двух недель с тех пор, как было собрано и запущено. Резисторы гасителя напряжения греют воздух внутри корпуса, но это неизбежно, если не снижать его мощности. Несмотря на принятые меры (позиционирование EEAR в конец EEPROM), отмечены отдельные самопроизвольные изменения байт. Оказалось, что fuses были выставлены без Brown-out Detection, что и было исправлено.

Оказался довольно тяжёл доступ к устройству, подключенному к потребителям, для отладки программ в EEPROM даже при наличии ноутбука. Решением здесь может быть применение дополнительной SPI-eeprom, например, AT25040A, на отдельной плате, подключаемой к разъёму программатора, на который нужно будет вывести ещё 1 канал для линии ChipSelect. Эту плату можно будет снимать и программировать с помощью, например, USBASP посредством утилиты AsProgrammer с прошивкой из его поставки [4]. Кроме того, на этой плате можно будет установить перемычку WriteProtect для защиты от случайных изменений. Однако, для этого потребуется ещё некоторое пространство пусть и для небольшой, но функции чтения данных по SPI через сдвиговый регистр интерфейса USI, т.к. SPI в чистом вмде в Attiny2313 нет. Такой проект (чтения/записи данных в AT25040A по SPI over USI) есть и он опробован, но реализовать это в данном проекте можно будет либо с урезанием функциональных возможностей, либо применением более эффективного компилятора, чем gcc.

1. https://cxem.net/mc/mc476.php
2. https://radiokot.ru/articles/40/
3. https://cxem.net/ckfinder/userfiles/comments/61414_Kondensator_netzteil.pdf
4. https://www.goprawn.com/forum/action-cam-control-software/8588-asprogrammer-with-ch341a-support
5. https://cxem.net/house/1-485.php

Fuses: H:9b, L:e4

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит ATtiny2313-20PU 1
C1 Конденсатор 1 мкФ 1 400В, лучше 630В
C2,4 Конденсатор 100 нФ 2
C3 Конденсатор 1200 мкФ 1
C5 Конденсатор 100 нФ 1 0805
C6-9 Конденсатор 10 нФ 4 1кВ
C10-13 Конденсатор 33 нФ 4 400В
D1 Диод BAT43 1 1N4148 etc.
D2 Стабилитрон BZX55C5v6 1
D3 Светодиод 2-цветный 1 общий катод
D4-7 Симистор BT139-800E 4 или др. с Ig не более 10мА
F1 Предохранитель 250В 0.2А 1
L1-4 Катушка индуктивности 50мкГн 4
Q1 Биполярный транзистор BC558 1
R1 Резистор 470 кОм 1 0,5Вт
R2,3 Резистор 510 кОм 2
R4,18 Резистор 180 2 1Вт
R5 Резистор 47 кОм 1
R6 Резистор 10 кОм 1 0805
R7 Резистор 680 1 1/6-1/8Вт
R8 Резистор 10 кОм 1 1/6-1/8Вт
R9 Резистор 1 кОм 1 1/6-1/8Вт
R10-12 Резистор 470 3
R13 Резистор 470 1 0805
R14-18 Резистор 39 1 0,5Вт
RV1-4 Варистор 10D471 4
SW1,2 Переключатель Кнопка угловая 2 на плату
J2 Гнездо IDC10 1
J3,4 клеммник 1 на плату