ДВУХКАНАЛЬНЫЙ СТАБИЛИЗИРОВАННЫЙ ДИММЕР
Дата последнего обновления — 30 ноября 2014 года (история изменений)
1.3. Технические характеристики
2.2. Регулировка и запоминание яркости
2.4. Имитация присутствия хозяев
3.2.1. Источник опорного напряжения
3.2.3. Фильтрующий конденсатор
3.5.2. Резисторы в цепи затвора транзисторов.
3.6.1. Защита от короткого замыкания нагрузки и превышения её мощности
3.6.2. Защита от превышения сетевого напряжения
3.7. Расчёт потребляемой мощности и эффективности
4.2.2. Описание отдельных процедур
5. ОСОБЕННОСТИ СТАБИЛИЗАЦИИ ЯРКОСТИ
6.1. Подбор максимальной яркости
6.2. Подбор минимальной яркости
6.3. Выбор константы cADCSamplesCount
8.1. Возможные неисправности и способы их устранения
8.3. Что следовало бы сделать иначе
8.4. Дальнейшие усовершенствования
8.5. Перечень измерительных приборов и оборудования
8.6. Сведения об авторе и условия распространения
Несмотря на бурное развитие сверхярких светодиодов, в широкой продаже пока не появились светодиодные лампы, способные заменить бытовые лампы накаливания. Получившие довольно широкое распространение энергосберегающие люминесцентные лампы, при всех своих достоинствах, обладают, во-первых, высокой стоимостью, во-вторых, требуют сложную схему управления яркостью [1]. Отечественные и зарубежные регуляторы ламп накаливания имеют ряд недостатков:
- управление только одним каналом;
- отсутствие стабилизации яркости;
- наличие помех радиоприёму, звон нитей накала (спиралей) ламп, жужжание встроенного фильтра.
Эти же недостатки (либо все сразу, либо по отдельности) присущи схемам, опубликованным в радиолюбительской литературе, периодической печати и в Интернете.
Автору проекта потребовалось создать регулятор яркости ламп накаливания (за рубежом называемый dimmer — диммер), свободный от указанных недостатков, и предназначенный для установки в двухканальный светильник промышленного производства (Рис. 1).
Рис. 1 — Внешний вид светильника
Разработка устройства велась с учётом следующих требований (все с одинаковым приоритетом):
• Простота схемы (минимальное количество компонентов);
• Функциональная насыщенность, многообразие регулируемых параметров;
• Устойчивость к броскам сетевого напряжения, долговечность;
• Отсутствие либо минимальный нагрев компонентов (пожаробезопасность);
• Низкое энергопотребление.
При проектировании устройства не ставилась задача минимизировать его стоимость, а также выполнить работу в сжатые сроки.
Несколько слов о том, откуда и почему взялись эти требования.
Малое число используемых деталей — ограничение, накладываемое небольшими размерами корпуса светильника.
Расширенный список функций и обилие регулируемых параметров — не что иное, как желание дать возможность любому пользователю настроить и использовать устройство в соответствии со своими потребностями и желаниями, а не ограничиваться тем, как правило, скупым набором возможностей, который обычно закладывают производители в свои изделия.
Защита от повышения напряжения в сети — насущная необходимость, связанная с невысоким качеством российского электроснабжения.
Долговечность — желание оставить устройство в пользование потомкам.
Небольшой нагрев компонентов — во-первых, из-за плотного примыкания к обоям на стенах (учитывается круглосуточный режим работы, в том числе без присмотра), во-вторых, для снижения потребляемой мощности (нагрев — это лишние потери), в-третьих, для упрощения расчётов (везде подразумевалась температура окружающей среды 25 °C).
Низкое энергопотребление — в первую очередь забота об окружающей среде.
1.3. Технические характеристики
Созданный в соответствии с перечисленными требованиями регулятор обладает следующими техническими характеристиками:
Количество каналов |
2 |
Мощность ламп |
60 Вт на канал (можно увеличить) |
Номинальное напряжение сети |
220 В±10 % [4] |
Частота сетевого напряжения |
50 Гц±0,4 Гц [4] |
Потребляемая мощность |
не более 0,92 Вт (при напряжении сети 220 В) |
Эффективность |
до 99,6 % |
Диапазон регулировки напряжения |
12…88 % (может быть расширен до 1,4…99,6 %) |
Изменение выходного напряжения при изменении входного от 198 до 242 В |
1 В (на максимальной яркости), качество стабилизации 98 % |
Помимо традиционных для данного класса устройств возможностей, таких, например, как плавное включение/выключение ламп и запоминание яркости, в регуляторе реализованы дополнительные функции, перечисленные далее наряду с другими преимуществами:
+ Два независимых режима работы каждого канала;
+ Возможность отключения запоминания яркости (для любого режима любого канала);
+ Автоматическое включение при возобновлении подачи электроэнергии (отключаемое);
+ Автоотключение по прошествии заданного интервала времени (два способа);
+ Имитация присутствия хозяев (возможен случайный выбор яркости и интервалов времени);
+ Хорошая повторяемость, не требуется налаживание схемы;
+ Отсутствие дефицитных компонентов (свободно приобретены в московской розничной сети).
Дистанционное управление в список не входит, так как устройство предназначено для использования на расстоянии вытянутой руки.
Основные расчёты, выделенные в описании жирным шрифтом, сведены в прилагаемый файл Microsoft Excel. Небольшое расхождение между результатами в файле и результатами в описании связано с погрешностями округления. Чтобы обеспечить хорошую повторяемость и долговечность устройства, в расчётах учитывается отклонение параметров от номинала, старение компонентов и другие нюансы.
Работа устройства описана максимально подробно. Автор исходил из принципа "лучше избыток информации, чем её недостаток". Это даёт немало плюсов:
+ При повторении устройства или желании что-то в нём изменить возникает меньше вопросов;
+ Удобно когда информация собрана в одном месте, а не разбросана по разным источникам;
+ Для одних людей некоторые сведения могут оказаться новыми, для других — подзабытыми;
+ Если лет через 5…10 (когда к примеру сменится элементная база) устройство потребуется отремонтировать, то сделать это при наличии подробного описания будет гораздо легче, особенно если ремонтом будет заниматься не сам автор.
Вместе с тем, некоторые очевидные моменты в описании пропускаются, в расчёте на то, что читатель имеет опыт работы с электронными схемами и микроконтроллерами. Для получения дополнительных сведений или пояснений многие понятия снабжены ссылками на Википедию (преимущественно русскоязычные статьи).
Несмотря на большой объём описания, рекомендуется прочитать проект от начала до конца, так как он содержит интересные оригинальные решения, а также ссылки на опыт зарубежных авторов, не публиковавшийся ранее на русском языке. Расшифровка используемых сокращений приводится в основном единожды, по ходу изложения материала, тоже подразумевая последовательное ознакомление с текстом проекта.
Основу устройства, принципиальная схема которого изображена на Рис. 2, составляет микроконтроллер (МК) ATmega16L семейства AVR корпорации Atmel. Обоснование выбора МК приведено в разделе Программная часть. Управление устройством осуществляется двумя не фиксируемыми в нажатом положении кнопками, по одной на каждый канал.
Рис. 2 — Принципиальная схема устройства
Регулировка мощности основана на реверсивном принципе управления фазой. Нагрузка, то есть лампа, включается в каждом полупериоде сети в момент перехода сетевого напряжения через нуль и выключается через определённый интервал времени в зависимости от требуемого уровня яркости. Коммутация нагрузки осуществляется мощными MOSFET транзисторами. Такое решение имеет целый ряд преимуществ по сравнению с классической схемой прямого фазового регулирования на основе тиристора или симистора:
+ "Мягкое" управление транзистором позволяет снизить уровень помех и звон нити накала лампы — не нужен громоздкий сетевой фильтр, снижающий эффективность и зачастую являющийся источником неприятного жужжания;
+ Благодаря плавному нарастанию напряжения с нуля и малому звону спирали, лампы служат намного дольше;
+ Для управления MOSFET транзистором требуется гораздо меньший ток;
+ Более низкое падение напряжения на транзисторе сокращает тепловыделение;
+ Отсутствие понятия "ток удержания" позволяет плавно регулировать малую яркость.
Стабилизация мощности (то есть яркости) основана на использовании формулы P = U² ∕ R. Если принять, что сопротивление нити накала постоянно [2] то, измеряя и корректируя в каждом полупериоде среднее напряжение на лампе, можно добиться стабилизации её яркости. Изменение сопротивления нити при включении не учитывается, так как при этом, равно как и при регулировке яркости, стабилизация не нужна. Строго говоря, сопротивление нити накала зависит от температуры, а также изменяется в некоторых пределах в течение каждого полупериода [3]. Однако практическая проверка показала, что эти факторы можно не принимать во внимание — на качестве стабилизации они не отражаются.
Максимальное напряжение, которое можно подать на лампу, несколько снижено, чтобы было за счёт чего осуществлять стабилизацию при уменьшении напряжения сети.
Напряжение меряется не на самой лампе, а на выходе диодного моста, к которому она подключена. Это вполне допустимо, поскольку падение напряжения на канале сток–исток транзистора мало́ и им можно пренебречь.
В принципе, вместо напряжения можно измерять ток через лампу, по формуле P = I² · R. Но это требует дополнительного компонента (шунта), а выигрыша ни в чём не даёт.
Диодный мост выполняет три функции:
• Выпрямляет сетевое напряжение для питания схемы;
• Создаёт пульсирующее однополярное напряжение для питания нагрузки;
• Обеспечивает сетевое напряжение удвоенной частоты (100 Гц), используемое МК для определения момента перехода фазы сети через нуль.
Детектирование перехода сетевого напряжения через нуль осуществляется тем же делителем напряжения и тем же каналом встроенного в МК аналого–цифрового преобразователя (АЦП), которые предназначены для измерения напряжения на лампах. Это позволяет отказаться от встроенного в МК компаратора, уменьшив тем самым потребляемый ток. Фильтрация сетевых помех реализуется программно.
Блок питания выполнен по бестрансформаторной схеме с гасящим резистором (балластом). Использовать в качестве балласта конденсатор в данной схеме не получится, так как для этого нужны два диодных моста (один для блока питания, другой для ламп) с объединёнными выводами общего провода, что невозможно по причине короткого замыкания (КЗ). Строить блок питания по трансформаторной схеме тоже не получится, так как не существует сетевых трансформаторов, которые подходили бы по габаритам (максимально допустимая высота 13 мм).
В качестве компонента, регулирующего напряжение +5 В, применён прецизионный микромощный источник опорного напряжения (ИОН) параллельного типа. По сравнению с обычным стабилитроном, выбранный ИОН имеет два важных преимущества. Во-первых, одновременно со стабилизацией напряжения питания МК получается стабильный опорный уровень для АЦП [3]. Во-вторых, на порядок уменьшается потребляемый регулирующим компонентом ток (примерно с 1 мА до 0,1 мА).
Устройство имеет защиту от короткого замыкания, превышения мощности нагрузки и повышения сетевого напряжения сверх максимально допустимого уровня. Для работы устройства не требуется определять фазный провод сети.
Использованные в описании проекта термины имеют следующие значения:
Функция (feature) — та или иная возможность, предоставляемая пользователю. Пример функции — имитация присутствия хозяев. Функция может иметь несколько режимов.
Режим (mode) — это выбираемый пользователем способ поведения функции. Например, функция имитации присутствия хозяев может работать в режиме постоянных значений яркости, длительности включенного и выключенного состояний, либо в режиме, когда эти значения выбираются случайно.
Состояние (state) — это составная часть каждого режима. Примеры: канал может находиться во включенном или выключенном состоянии (в любом режиме); при включении/выключении канала он находится в состоянии плавного увеличения/уменьшения яркости; при включенном канале и удерживаемой кнопке канал находится в состоянии изменения яркости.
Нажать кнопку (ClickButton) — означает нажать её и не позже чем через 1 секунду отпустить.
Удерживать кнопку (HoldButton) — значит нажать её и удерживать в нажатом положении не менее 1 секунды.
Процедура — фрагмент программного кода, который начинается с одноимённой ассемблерной метки, и продолжается, как правило, до следующей метки. Например, процедура PhaseDetect — это участок кода программы от метки 'PhaseDetect:' до метки 'ADCSampling:'.
Основная программа — участок кода в блоке Main.asm от первой команды процедуры ADCExit до первой команды процедуры PhaseDetect.
Каждый из двух каналов диммера имеет два режима работы. Каналы и их режимы работают одинаково, но независимо друг от друга, каждый со своими настройками (за исключением функции имитации присутствия хозяев). Поэтому далее рассматривается работа на примере одного канала или одного режима. Названия ячеек энергонезависимой памяти (EEPROM), в которых хранятся настройки, даны в общем виде. Номер канала или режима либо не указывается совсем, либо обозначается буквой "X" или "x".
Допустимый диапазон настроек, их размерность, а также значения по умолчанию указаны в описании соответствующих ячеек EEPROM в файле Dimmer.asm. Порядок изменения значений некоторых из них приведён в разделе Настройка. Для сброса всех настроек на значения по умолчанию следует перепрограммировать МК заново файлом dimmer.eep.
Существует несколько общих правил, которые относятся к любым функциям и режимам работы диммера:
• Если не указано иное, длительность нарастания и спада яркости при включении и выключении определяется значениями ячеек eTurnOnSpeedModeXChX;
• Во время включения и выключения канала он не реагирует на манипуляции с кнопкой;
• Точность выдерживаемых интервалов времени зависит от стабильности частоты питающей сети и составляет, как правило, не хуже ±10 секунд в сутки.
Обработка состояния кнопок построена таким образом, что так называемое вторичное действие не поддерживается. Пример: в выключенном состоянии удерживание кнопки приводит к включению канала во втором режиме. Если продолжать удерживать кнопку, то после того как канал включился, его яркость не начнёт изменяться, как это обычно происходит при удерживании кнопки и включенном канале. Яркость можно будет изменить только после отпускания кнопки и повторного её удерживания. Такой подход более эргономичен, к тому же он позволяет исключить ошибки, связанные с определением нажатия и удерживания кнопок в зависимости от функции, режима, и текущего состояния.
Диммер готов к работе через 4 секунды после подачи сетевого напряжения. В случае кратковременного (около 1 секунды) пропадания напряжения диммер возобновляет свою работу сразу, без задержки.
Режим, в котором включится канал, определяется способом управления кнопкой. При нажатии кнопки включается первый режим, при её удерживании — второй.
Яркость нарастает плавно, что в значительной степени продлевает срок службы лампы. Кроме того, это более благоприятно сказывается на восприятии. Яркость увеличивается пока не достигнет той, которая была при последнем использовании данного режима. Уровень яркости сохраняется в ячейке eLastBright. Эта же ячейка определяет величину яркости при первом включении диммера в сеть, а также, если запоминание яркости было отключено.
Благодаря раздельным настройкам каналов и их режимов, появляется возможность задать четыре разных уровня освещения для различных ситуаций. Например: просмотр телепередач, чтение, ночное освещение, дежурный свет в комнате.
Длительность нарастания яркости, то есть время за которое включится канал, определяется значением ячейки eTurnOnSpeedMode1 или eTurnOnSpeedMode2, в зависимости от выбранного режима. Это позволяет настроить разную скорость изменения яркости с учётом различного уровня внешней освещённости. Например, можно выбрать максимальную скорость для первого режима, чтобы обеспечить быстрое включение канала при наличии освещения в комнате от других источников, и минимальную скорость для второго режима, чтобы глазам было легче адаптироваться при включении лампы в темноте.
Выключается канал нажатием на кнопку. Скорость спада яркости определяется значением ячейки eTurnOffSpeedMode1 или eTurnOffSpeedMode2, в зависимости от текущего режима. Это позволяет настроить наиболее комфортное изменение яркости с точки зрения восприятия или в зависимости от ситуации. Например, минимальная скорость будет полезна, чтобы при выключении канала выйти из комнаты не в полной темноте или чтобы плавным гашением воссоздать атмосферу кинозала.
Если бит ebTurnPrevState установлен, то при возобновлении подачи электропитания после сбоя канал включится автоматически (через 4 секунды). При этом будет восстановлен тот режим и та яркость, которые существовали на момент сбоя. Если же отключение электроэнергии произойдёт во время включения или выключения канала, то после её возобновления канал не включится.
2.2. Регулировка и запоминание яркости
Регулировка яркости осуществляется удерживанием кнопки.
Скорость изменения яркости определяется значением ячейки eBrightChangeSpeed.
Диапазон регулировки яркости задаётся ячейками eBrightnessMin и eBrightnessMax, в том числе, когда уровень яркости, запомненный в ячейке eLastBrightX_X, лежит за пределами этого диапазона (о назначении ячейки eLastBrightX_X см. ниже в этом разделе).
Направление изменения яркости при удерживании кнопки зависит от настройки бита ebBrightDirMode. Если бит равен 0, направление изменения яркости не меняется, то есть остаётся таким же каким было во время предыдущей регулировки. Если бит равен 1, направление изменяется на противоположное. Первая регулировка после включения канала всегда направлена в сторону увеличения яркости (если, конечно, её текущий уровень ниже максимального).
По достижении крайних значений изменение яркости на короткое время приостанавливается, чтобы иметь возможность зафиксировать её на минимальном или максимальном уровне. Длительность этой задержки определяется значениями ячеек eMinBrightDelay и eMaxBrightDelay.
Через 2,5 секунды после окончания регулировки установленная яркость сохраняется в энергонезависимой памяти, её уровень записывается в ячейку eLastBrightX_X.
Имеется возможность отключить запоминание. Это может оказаться полезно, если, например, требуется, чтобы тот или иной режим того или иного канала всегда включался на максимальную яркость, но при этом сохранялась возможность регулировки.
Возможен также и другой сценарий. Предположим, что первый режим используется для чтения (яркость выше средней), а второй — для просмотра телепередач (яркость ниже средней). Иногда требуется, к примеру, что-то зашить. Для этого нужно включить максимальную яркость. Если запоминание яркости не отключать, то при следующем включении, например, первого режима яркость будет максимальной, а надо, чтобы она была, как и раньше, выше средней, так как чтение используется чаще шитья.
Отключить запоминание яркости можно сбросом бита ebSaveBrightMхChх. В этом случае уровень яркости будет определяться значением той же самой ячейки eLastBrightХ_Х с тем лишь отличием, что её содержимое не будет перезаписываться. При этом пределы регулировки яркости остаются в диапазоне, определяемом ячейками eBrightnessMin и eBrightnessMax.
Если требуется чтобы яркость, задаваемая в ячейке eLastBrightХ_Х, была стабилизирована, следует выбирать её значение с учётом рекомендаций по подбору максимальной яркости (см. раздел Настройка).
Если канал не был выключен вручную в течение количества часов, заданных в ячейке eOffTimeoutHours (1…24 ч), он выключается автоматически. Отсчёт времени начинается сразу после отпускания кнопки при включении канала.
Возможны два способа автоотключения, выбираемые с помощью бита ebAutoOffMode.
Первый способ (ebAutoOffMode = 0). Яркость постепенно уменьшается до полного выключения канала. Время, за которое это происходит, определяется значением ячейки eOffTimeMode1. Естественно, время выключения также зависит от исходного уровня яркости.
Второй способ (ebAutoOffMode = 1). Сначала яркость уменьшается на фиксированное значение, задаваемое в процентах от исходной яркости в ячейке eBrightDecrPercent (10…90 %). Если после этого в течение количества минут, указанных в ячейке eOffTimeMode2 (1…240 мин), автоотключение не будет отменено, канал выключается.
Чтобы отменить автоотключение, следует удерживать кнопку. При этом яркость восстановится до исходного уровня, и начнется новый отсчёт времени. Нажатие кнопки вместо её удерживания приведёт к немедленному выключению канала.
Если во время автоотключения произойдёт пропадание напряжения сети, то после его возобновления канал не включится. Если же напряжение пропадёт в момент отмены автоотключения, то канал включится (при условии что это разрешено битом ebTurnPrevState).
Стоит отметить, что помимо предоставляемого удобства и обеспечения безопасности, функция автоотключения соответствует требованию европейской директивы 1275/2008/ЕС от 17.12.2008, согласно которой все новые устройства, производимые с 2012 года, должны автоматически переключаться в режим пониженного энергопотребления.
2.4. Имитация присутствия хозяев
Функция Имитация Присутствия Хозяев (ИПХ) предназначена для автоматического включения и выключения светильника через заданные промежутки времени. Эта функция — единственное исключение из общего правила, согласно которому оба канала работают независимо друг от друга. В данном случае они управляются одновременно, при этом используется единый набор настроек. Ручная регулировка яркости (путём удерживания кнопок) недоступна. Это сделано специально, для того чтобы отличать функцию ИПХ от других функций и режимов работы устройства. Стабилизация яркости при работе функции ИПХ не гарантируется, так как её уровень может принимать любое значение, вплоть до максимального (в условных единицах 255), то есть превышать значение, заданное в ячейке eBrightnessMax. Однако, по большому счёту, стабилизация яркости в данном случае не нужна, так как функция используется, когда никого нет дома.
Включается функция ИПХ удерживанием двух кнопок, когда оба канала выключены. При этом и первый, и второй канал включается на одну и ту же яркость, определяемую значением ячейки eOwnersAtHomeBright.
Продолжительность работы во включенном состоянии определяется значением ячейки eOwnersAtHomeOnPeriod (1…240 мин). Отсчёт времени начинается с начала включения каналов. По истечении заданного времени оба канала выключаются.
Продолжительность выключенного состояния определяется значением ячейки eOwnersAtHomeOffPeriod (1…240 мин). Отсчёт времени начинается с начала выключения каналов. Как только это время истечёт, оба канала снова включатся.
Цикл будет повторяться до тех пор, пока функция не будет отключена вручную.
Отключается функция ИПХ нажатием любой кнопки. Если в этот момент каналы были включены, они выключаются. Если же каналы были выключены, то тот канал, которому соответствует нажатая кнопка, включается как обычно, в первом режиме. При выключенных каналах функцию можно также отключить удерживанием кнопки. В этом случае соответствующий канал включится как обычно, во втором режиме.
Можно сделать так чтобы уровень яркости и время работы во включенном и выключенном состоянии изменялись каждый раз по случайному закону. Для этого нужно установить бит ebRandomOAH (по умолчанию он установлен). Такая возможность повышает эффективность функции, поскольку со стороны затруднительно отследить какую-либо закономерность — каждый цикл включения/выключения не похож на предыдущий.
Независимо от того, включен режим случайного выбора или нет, минимальная яркость составляет примерно 25 % от максимально возможной. В данном случае под максимально возможной понимается яркость лампы, подсоединённой к сети напрямую, поскольку в функции ИПХ яркость может принимать значения вплоть до максимального уровня 255. Такое ограничение минимальной яркости позволяет убедиться в работе функции при ярком внешнем освещении. Кроме того, если яркость сделать меньшей, её будет недостаточно для заметного освещения окна комнаты в тёмное время суток.
Длительность нарастания и спада яркости при включении и выключении функции ИПХ, а также во время её работы зависит от того, в каком режиме последний раз использовались каналы. Например, если первый канал был задействован в первом режиме, а второй канал во втором, то длительность нарастания и спада яркости первого канала будет определяться значениями ячеек eTurnOnSpeedMode1Ch1 и eTurnOffSpeedMode1Ch1, а второго канала — значениями ячеек eTurnOnSpeedMode2Ch2 и eTurnOffSpeedMode2Ch2.
Отключение электроэнергии не влияет на работу функции. Если питание пропадёт при включенных каналах, то после его возобновления каналы включатся, начнётся отсчёт времени включенного состояния. При задействованном режиме случайного выбора яркость будет установлена случайным образом и может не совпасть с предыдущей. Если питание пропадёт при выключенных каналах, то после его возобновления каналы не включатся, начнётся отсчёт времени выключенного состояния.
Аналогично этому, если питание пропадёт в момент включения каналов (во время нарастания яркости), то после его возобновления каналы включатся, а если в момент выключения — то нет.
Если питание пропадёт в момент включения само́й функции, то после его возобновления каналы включатся. Так что если функцию потребовалось включить, например, перед отъездом в отпуск, и в этот момент пропало напряжение в сети, ждать пока оно появится не нужно — функция самостоятельно возобновит свою работу, как только восстановится сетевое напряжение. Соответственно, если питание пропадёт в момент выключения функции (независимо от того, в каком состоянии находились каналы), то после возобновления питания функция окажется отключенной.
Во всех случаях отсчёт времени работы во включенном и выключенном состоянии после возобновления подачи электроэнергии начинается заново.
ВНИМАНИЕ! Устройство не имеет гальванической развязки от сети. Компоненты схемы находятся под сетевым напряжением! Следует соблюдать соответствующие меры предосторожности. Программировать установленный на плату устройства МК можно программатором только с полной гальванической развязкой.
Немного устрашающей статистики. За время разработки и тестирования устройства (начиная с первой версии) было выведено из строя: три микроконтроллера, внутрисхемный программатор Atmel AVRISP, пара стабилитронов, диодный мост, около пяти транзисторов, с десяток предохранителей.
Устройство предназначено для управления только стандартными лампами накаливания. Подключение другой нагрузки, например энергосберегающей лампы или электродвигателя, может вывести устройство и (или) нагрузку из строя.
Перечень использованных в устройстве компонентов (спецификация с указанием их стоимости и места приобретения) прилагается. Также прилагаются описания (datasheet) активных компонентов.
Применение диодного моста VD2, рассчитанного на ток 6 А, для работы с небольшим током нагрузки (максимум 0,55 А) объясняется тем, что лампы иногда перегорают во время работы. Возникающий при этом импульс тока амплитудой более 10...20 А способен повредить маломощные одноамперные мосты. Согласно описанию моста задействованного в схеме, при длительности импульса 8,3 мс он способен выдержать пиковый ток до 125 А.
Ещё одна причина большого запаса по току — это гораздо меньшая степень нагрева моста. Впрочем, полностью устранять нагрев не имеет смысла, так как корпус устройства всё равно немного нагревается от ламп, особенно когда они работают на полной яркости.
По причине, указанной в разделе Защита от превышения сетевого напряжения, диодный мост должен быть рассчитан на обратное напряжение не менее 600 В. Использование моста на 1000 В вызвано отсутствием в продаже экземпляров с меньшими напряжениями на момент сборки устройства.
3.2.1. Источник опорного напряжения
Особенностью схемы является использование для питания МК не обычного стабилитрона, а интегрального источника опорного напряжения (ИОН) параллельного типа DA1. Как уже отмечалось, это позволяет отказаться от отдельного ИОН и снизить потребляемый ток. Помимо этого, если напряжение на выходе параллельного ИОН повысится по каким-либо причинам, возникшим со стороны шины питания схемы, это не приведёт к нарушению стабилизации, а лишь увеличит ток через ИОН. Это общая особенность параллельных стабилизаторов напряжения [3]. В последовательных стабилизаторах для достижения такого же эффекта требуется установка дополнительного диода между входом и выходом стабилизатора.
Нерегулируемый двухвыводной (а не трёхвыводной регулируемый) ИОН выбран специально — нет необходимости подбирать и устанавливать два дополнительных высокоточных резистора.
Для стабильной работы данного ИОН не требуется конденсатор с низким эквивалентным последовательным сопротивлением (ESR), что тоже является плюсом.
ИОН серии LM4040 компании National Semiconductor (с 2011 года принадлежит Texas Instruments) выпускаются с различным классом точности и, соответственно, стоимости. Для данного применения достаточно точности 1 % (класс D).
В качестве замены можно порекомендовать более дорогой прибор LT1634 компании Linear Technology, хотя на практике его работа не проверялась.
Для гашения избытка сетевого напряжения, поступающего на вход ИОН, используется балластное сопротивление, образованное резисторами R1 и R2. Принцип действия ИОН параллельного типа совпадает с обычным стабилитроном, поэтому для расчёта балластного резистора можно применить классическую формулу:
Rб = (Uвх − Uст) ∕ (Iн + Iст),
где Uвх — входное (ограничиваемое) напряжение, снимаемое с выхода диодного моста;
Uст — напряжение стабилизации стабилитрона;
Iн — ток нагрузки;
Iст — ток стабилитрона.
Изменим формулу с учётом падения напряжения Uд на двух диодах диодного моста: Rб = (Uвх − 2·Uд − Uст) ∕ (Iн + Iст). Падение напряжения на предохранителе не учитываем, так как по результатам измерений оно составило всего 0,2 В при максимальной нагрузке.
Добавив коэффициент Kr, учитывающий разброс сопротивления резистора, получаем конечную формулу:
Rб = [(Uвх − 2·Uд − Uст) ∕ (Iн + Iст)] · Kr
Сопротивление гасящего резистора должно быть, с одной стороны, достаточно низким, чтобы обеспечить минимальный ток стабилитрона при максимальном токе нагрузки и минимальном напряжении сети, но, с другой стороны, достаточно высоким, чтобы при максимальном напряжении сети и минимальном токе нагрузки не превысить максимально допустимый ток стабилитрона.
Начнём с выяснения максимального сопротивления резистора, обеспечивающего минимальный ток стабилитрона при наихудших условиях.
Минимальное среднее значение выпрямленного напряжения Uвх при 10-процентном допуске на номинальное напряжение сети составит 198 В. Но здесь следует также учесть снижение напряжения под воздействием мощной нагрузки. В расчёте максимальной яркости лампы указано снижение на 4 В. Значит Uвх = 198 − 4 = 194 В.
Наибольшее падение напряжения на диодном мосту Uд будет при максимальной нагрузке. Согласно графику вольт–амперной характеристики (ВАХ) в описании моста, при токе нагрузки 0,55 А, когда обе лампы включены на максимальную яркость, прямое напряжение для одного диода составляет около Uд = 0,73 В.
Отклонение стабилизированного напряжения равно 1 % (по описанию ИОН для класса точности D). Значит Uст = 5 + 0,05 = 5,05 В.
Измеренный мультиметром ток потребления схемы при напряжении 5,0 В составил 2,2 мА . Практическая проверка показала, что установка различных экземпляров МК ATmega16 и ATmega16L на ток потребления практически не влияет (использовались МК, имеющие модификацию (revision) J, и выпущенные в 2006—2007 годах). Небольшим влиянием (десятки микроампер), которые вызваны разбросом тактовой частоты внутреннего генератора, можно пренебречь. Потребляемый ток также почти не зависит от того, включены ли каналы, и если включены, то в каком количестве и на какой яркости. В силу малых величин обратные токи защитного диода, диодного моста, транзисторов, а также токи утечки конденсаторов не учитываются. В значительной степени на ток потребления влияет нажатие кнопок. В этом случае ток протекает от плюса источника питания через внутренний подтягивающий (pull–up) резистор МК и замкнутую кнопку на общий провод. Указанное в описании МК минимальное сопротивление внутреннего резистора составляет 20 кОм. Если нажаты обе кнопки, ток составит 2 · (5 ∕ 20·10³) = 0,5 мА. Таким образом, суммарный максимальный ток потребления по цепи питания (при напряжении ровно 5,0 В) равен 2,2 + 0,5 = 2,7 мА (напомним, что это без учёта тока стабилитрона). Значит, в худшем случае, то есть при напряжении 5,05 В, потребляемый ток составит Iн = 5,05 · 2,7 ∕ 5 = 2,73 мА. Если бы в схеме использовался однополупериодный выпрямитель, этот ток нужно было бы удвоить.
Минимальный ток, требуемый для работы стабилитрона, в соответствии с его описанием, составляет Iст = 0,1 мА (округлённое значение).
Поскольку в схеме используются два резистора, каждый из которых имеет допуск 5 %, принимаем Kr = 0,9. Старение резисторов (увеличение сопротивления со временем) не учитываем, так как они не будут подвергаться ни максимально допустимому напряжению, ни высокой температуре.
Подставим полученные данные в исходную формулу:
Rб = [(194 − 2·0,73 − 5,05) ∕ (0,00273 + 0,0001)] · 0,9 = [187,49 ∕ 0,00283] · 0,9 = 66251 · 0,9 = 59626 Ом
Таким образом, балластный (гасящий) резистор должен иметь сопротивление не более 60 кОм. Его можно получить, соединив последовательно два резистора по 30 кОм. О том, почему нельзя обойтись одним резистором, речь пойдёт чуть позже. То, что сопротивление 60 кОм немного больше расчётного, допускается. По теории вероятности, вряд ли возможна ситуация, когда сопротивление обоих резисторов окажется на 5 % меньше, и вместе с этим напряжение ИОН будет на 1 % больше.
Теперь для найденного сопротивления балластного резистора рассчитаем, не выйдет ли из строя стабилитрон, если сетевое напряжение увеличится до уровня ограничения защитного диода VD1, а также при воздействии других неблагоприятных факторов. Преобразуем ранее использованную формулу к следующему виду:
Iст = [(Uвх − 2·Uд − Uст) ∕ (Rб · Kr)] − Iн
Для расчёта принимаем следующие численные значения.
Максимальное напряжение ограничения защитного диода Uвх = 548 В.
При отсутствии нагрузки падение напряжения на одном диоде диодного моста составит Uд = 0,65 В.
Минимальное напряжение стабилизации стабилитрона Uст = 5 − 0,05 = 4,95 В.
Так как балластное сопротивление получено из двух резисторов, Rб = 30000 + 30000 Ом.
Коэффициент сопротивления Kr принимаем равным 0,95, так как при этом ток стабилитрона будет больше.
Минимальный ток нагрузки будет при не нажатых кнопках. Для номинального напряжения питания 5,0 В этот ток равен 2,2 мА. Значит при минимальном напряжении 4,95 В ток будет равен Iн = 4,95 · 2,2 ∕ 5 = 2,18 мА.
Подставляем численные значения в формулу:
Iст = [(548 − 2·0,65 − 4,95) ∕ ((30000 + 30000) · 0,95)] − 0,00218 = [541,75 ∕ 57000] − 0,00218 = 7,3 мА
Полученное значение меньше, чем 12 мА — величины максимального тока ИОН, рекомендованного в его описании. Мощность ИОН, рассеиваемая при таком токе, составит 5 · 0,007 = 35 мВт. Это более чем на порядок меньше его максимальной мощности 500 мВт. Следовательно, выбранное сопротивление балластного резистора нам подходит.
Переходим к расчёту мощности. На первый взгляд, резистора мощностью 0,5 Вт будет вполне достаточно, ведь он выдерживает напряжение до 350 В. На самом деле это не совсем так. В [5] сказано, что мощность резистора, указываемая в его описании, действительна лишь в том случае, если сопротивление резистора выше так называемого критического. Критическое сопротивление вычисляется по формуле Rк = Uпасп² ∕ Pпасп, где Uпасп — паспортное рабочее напряжение резистора, Pпасп — его паспортная мощность. Для резистора серии С2–23 с паспортной мощностью 0,5 Вт критическое сопротивление равно 350² ∕ 0,5 = 245 кОм. Если сопротивление резистора, как в нашем случае, меньше критического, расчёт его мощности следует производить по формуле P = U² ∕ R. Учитывая максимальное напряжение сети Uвх, минимальное падение напряжения на диодном мосту Uд, и минимальное напряжение стабилизации Uст, мощность резистора будет равна:
P = (Uвх − 2·Uд − Uст)² ∕ Rб
P = (242 − 2·0,65 − 4,95)² ∕ 60·10³ = 0,93 Вт
Однако выяснилось, что мощности резистора 1 Вт тоже недостаточно. Экспериментальная проверка показала, что даже резистор 2 Вт (отечественный, серии МЛТ–2) сопротивлением 56 кОм сильно нагревается. В соответствии с одним из требований проекта, это недопустимо. Нагрев балластного резистора является единственной причиной нагрева корпуса светильника в ждущем режиме. Поэтому так важно этот нагрев устранить.
Попытка использования импортного резистора серии SQP мощностью 5 Вт и сопротивлением 50 кОм проблему не решила — он нагревался почти до той же температуры, что и МЛТ–2.
В результате было решено использовать два резистора, мощностью по 2 Вт каждый, соединив их последовательно. Помимо снижения температуры, это повышает надёжность устройства, так как в случае пробоя одного из резисторов, второй предотвратит выход ИОН из строя. Чтобы обеспечить равномерный нагрев, номиналы резисторов должны быть одинаковыми.
Предпочтительны отечественные 2 Вт резисторы серии МЛТ–2. Их габариты несколько больше импортных аналогов серии С2–23, зато они меньше нагреваются. Однако на момент сборки устройства найти в продаже резисторы МЛТ–2 номиналом 30 кОм не удалось, хотя отечественной радиоэлектронной промышленностью они вроде бы выпускаются.
Численные значения температуры нагрева корпусов различных резисторов не приводятся в связи с большой погрешностью измерений. Показания менялись от случая к случаю, причём независимо от типа измерительного прибора: термопара, подключенная к цифровому мультиметру, или цифровой термометр. Поэтому выводы о степени нагрева делались субъективно — сколько секунд можно удерживать палец на корпусе резистора до появления болевых ощущений.
3.2.3. Фильтрующий конденсатор
Конденсатор С1 сглаживает пульсации выпрямленного напряжения. Для расчёта его ёмкости можно было воспользоваться методикой из [6, глава 1.27, "Фильтрация в источниках питания"]. Однако конденсатор подбирался опытным путём. Это связано со следующим обстоятельством.
Через несколько секунд после окончания регулировки яркости её значение записывается в EEPROM. Согласно описанию МК, ток программирования EEPROM составляет 6 мА (при напряжении питания 5 В, и температуре окружающей среды 25 °C). Отсюда следует, что по сравнению с током потребления в обычном режиме ток при записи возрастает почти в четыре раза: (2,2 мА + 6 мА) ∕ 2,2 мА = 3,7. Цикл записи, согласно описанию МК, длится 8,5 мс, то есть почти целый полупериод сетевого напряжения (10 мс). При таких условиях накопленный заряд конденсатора быстро истощается, что приводит к уменьшению напряжения питания МК и опорного уровня АЦП. Визуально это отображается в виде кратковременного однократного моргания лампы через несколько секунд после окончания регулировки яркости (эффект заметен при яркости выше средней). Код программы построен таким образом, что циклы записи в EEPROM следуют друг за другом через каждые 10 мс. Если регулировка яркости прекращается одновременно для двух каналов, запись в память будет длиться на 8,5 мс больше. За оставшиеся (10 мс − 8,5 мс) = 1,5 мс конденсатор не успеет полностью зарядиться, соответственно, напряжение на нём опустится ещё ниже, и моргание лампы будет ещё заметнее, особенно при пониженном напряжении сети. Поскольку заранее неизвестно, при какой амплитуде пульсаций моргание становится заметно (а именно к амплитуде пульсаций привязана формула в [6, глава 1.27]), пришлось находить ёмкость конденсатора опытным путём.
Конденсатор подбирался при минимальном напряжении сети и окончании регулировки яркости по достижении её максимального значения на обоих каналах. Номинал 1000 мкФ позволил устранить моргание после окончания регулировки яркости одного канала, и сделать моргание почти не заметным после одновременного окончания регулировки яркости обоих каналов. Дальнейшему повышению ёмкости конденсатора препятствуют малые габариты корпуса светильника.
Конечно, можно было организовать задержку между последовательными записями в EEPROM. Однако увеличение времени выполнения основной программы в данном случае не оправдано. Во-первых, мала вероятность того, что обе кнопки будут отпущены одновременно, причём на уровне яркости выше средней для обоих каналов. Во-вторых, невелика вероятность того, что напряжение в сети упадёт до 198 В. Наконец, в-третьих, эффект моргания слишком мало заметен чтобы тратить ресурсы на устранение этого недостатка.
На функционировании ИОН большая величина ёмкости не отражается, так как в его описании сказано, что допустима емкостная нагрузка любого номинала.
После подключения устройства к сети, чтобы к началу основной программы напряжение питания МК успело стабилизироваться на номинальном уровне, требуется организовать задержку старта. Если этого не сделать, то вследствие заниженного опорного уровня АЦП нарушится плавность нарастания яркости при автоматическом включении каналов.
Время задержки старта определялось экспериментально (хотя правильнее было бы найти подходящую для расчёта формулу). Согласно показаниям мультиметра, напряжение питания МК достигало 5 В примерно через 3 секунды после подключения устройства к сети с минимальным напряжением 198 В. Учитывая прямую зависимость частоты внутреннего RC–генератора МК от напряжения питания, а также погрешность измерений, была выбрана задержка с запасом, равная 4-м секундам. Часть этой задержки обеспечивается внутренними узлами МК: Power–on Reset (POR — сброс при включении питания), и Brown–out Detector (BOD, супервизор питания). Оставшаяся часть задержки реализуется программно.
Теперь о выборе номинального напряжения конденсатора. Этот параметр в значительной степени определяет срок его службы. В [8] рекомендуется, чтобы рабочее напряжение на конденсаторе составляло 80…100 % от номинального. С другой стороны, в [9] рекомендуется, чтобы рабочее напряжение было в два раза меньше номинального. Поскольку конденсатор, рассчитанный на 10 В, всё равно не подходит по габаритам (если устанавливать его как положено вертикально), выбор остановился на конденсаторе с номинальным напряжением 6,3 В.
Здесь стоит обратить внимание на следующий факт. В описаниях электролитических конденсаторов Jamicon указано, что, начиная с рабочего напряжения 25 В, их ёмкость изменяется со временем на 20 %. Для меньших же напряжений это значение равно 25 %.
Верхний предел температурного диапазона, на который рассчитан выбранный конденсатор, составляет 105 °C. Это ещё один параметр, в значительной степени влияющий на срок его службы. Выбор расширенного температурного диапазона обусловлен также тем, что корпус устройства немного нагревается от ламп, диодного моста и балластного резистора.
Уменьшение ёмкости конденсатора, связанное с разбросом номинала или старением, не нарушит работоспособность устройства. Возможно лишь чуть более заметное однократное моргание ламп в момент запоминания яркости.
Несмотря на то что напряжение питания схемы составляет 5 В, используемый МК U1 имеет индекс L, означающий возможность работы при напряжении от 2,7 до 5 В. Применение такого МК связано с большой ёмкостью фильтрующего конденсатора, то есть с плавным нарастанием напряжения питания при подключении устройства к сети.
Порог встроенного в МК супервизора питания выставлен на 2,7 В. Если же этот порог сделать равным 4,0 В, или использовать обычный МК (без индекса L) с порогом 4,0 В, или вообще отказаться от встроенного супервизора, то некоторые экземпляры МК могут не запуститься, особенно при минимальном напряжении сети. Использовать же обычный МК с порогом 2,7 В нельзя, так как это может привести, в частности, к искажению данных EEPROM, если во время сохранения информации произойдёт отключение питания.
Тактируется МК внутренним RC–генератором на частоте 1 МГц. Такой частоты достаточно чтобы получить среднее время выполнения основной программы около 0,5 мс. Здесь важно помнить о том, что повышение тактовой частоты ведёт к увеличению энергопотребления. Стабилизировать частоту кварцевым или керамическим резонатором не требуется, так как в данном применении высокая точность не нужна. Также не требуется калибровка внутреннего RC–генератора.
Производитель МК рекомендует предпринять следующие меры при работе с АЦП:
• установить между выводом REF (Reference — опорный уровень) и общим проводом фильтрующий конденсатор;
• соединить вывод AGND (Analog Ground — аналоговая земля) с общим проводом только аналоговой, а не цифровой части схемы;
• использовать LC–фильтр в цепи AVCC (питание АЦП);
• при измерении не переключать выводы порта АЦП, если они настроены как цифровые выходы.
Поскольку высокая достоверность результата измерения не требуется, то с целью упрощения схемы, вышеуказанные меры не соблюдаются. Также не требуется калибровка АЦП, в том числе потому, что используется обычный канал, а не дифференциальный [12, глава 2.3, "The need for calibration"].
Несмотря на принятые упрощения, повторяемость схемы от этого не ухудшается. Благодаря внешнему источнику опорного напряжения, используемому также в роли стабилизатора напряжения питания МК, результаты измерений АЦП всегда остаются стабильными вплоть до младшего значащего разряда, даже если использовать 10–битное разрешение АЦП.
По рекомендации Atmel, для обеспечения надёжной работы МК, в непосредственной близости от его выводов питания установлены блокировочные конденсаторы С2 (керамический) и С3 (электролитический танталовый). В данной схеме это особенно актуально, так как при коммутации транзисторов, затворы которых обладают довольно высокой ёмкостью, возникают значительные импульсные токи.
Вывод Reset соединён с плюсом источника питания через внутренний резистор, сопротивление которого, согласно описанию МК, составляет 30…60 кОм.
Не показанные на принципиальной схеме выводы МК никуда не подключены.
Для программирования МК предусмотрен разъём JS4 "ISP" (In–System Programming — внутрисхемное программирование). При программировании нужно использовать два файла: dimmer.hex (прошивка, то есть код программы) и dimmer.eep (настройки устройства в EEPROM).
Также как и при программировании EEPROM само́й программой во время работы, во время внутрисхемного программирования ток МК, согласно его описанию, составляет 6 мА (при напряжении питания 5 В и температуре окружающей среды 25 °C). По результатам измерений мультиметром максимальный потребляемый ток находился в интервале от 4,3 до 5,8 мА. Из-за малой мощности блока питания напряжение во время программирования снижалось примерно до 3,3 В. Однако многократный опыт перепрограммирования МК показал что это безвредно. Более того, в Интернете встречаются сообщения, что МК нормально программируется при напряжении даже 3 В.
В случае программирования МК в составе устройства важно обратить внимание на следующие моменты:
- требуется полная гальваническая развязка программатора (и по шине питания, и по шине данных), поскольку схема находится под потенциалом электросети;
- может потребоваться внешний блок питания (тоже гальванически развязанный), если программатору будет недостаточно тока, который вырабатывает блок питания схемы;
- желательна установка высокоомных резисторов (порядка 100 кОм) между затвором и истоком транзисторов чтобы не допустить их возможного перегрева, а также выхода из строя из-за самопроизвольного открывания и увеличения сопротивления канала (это вызвано тем, что во время программирования выводы МК находятся в высокоимпедансном состоянии).
Суммируя изложенные моменты, лучшим вариантом, возможно, окажется запрограммировать МК до установки в устройство.
Состояние фьюзов МК соответствует заводским значениям по умолчанию, за исключением запрограммированного фьюза (fuse) BODEN (Brown–out Detection Enable), разрешающего использование встроенного супервизора питания (Рис. 3):
Рис. 3 — Программирование фьюзов микроконтроллера
Ранее отмечалось, что МК с незадействованным супервизором питания может не запуститься. Чтобы обойти это ограничение и иметь возможность запрограммировать фьюз, следует после появления напряжения питания кратковременно соединить вывод Reset микроконтроллера с общим проводом.
Несмотря на то, что изображение Рис. 3 получено из программатора PonyProg2000, пользоваться этим программатором автор не рекомендует. Данная программа до сих пор находится в статусе бета–версии, не обновляется, а также нестабильно работает, особенно если компьютер одновременно занят выполнением других задач. Бывали случаи вывода МК из строя. В качестве альтернативы автор рекомендует воспользоваться другим свободно распространяемым программатором — AVRDUDE. В частности, он входит в состав бесплатной среды разработки WinAVR.
Заменить МК можно на ATmega16 (без индекса L). Но тогда потребуется установить внешний супервизор питания (при этом встроенный супервизор следует отключить). Дополнительные сведения о замене МК приведены в описании программной части.
Резисторы R3 и R4 образуют делитель, необходимый МК для измерения напряжения на лампах и определения момента перехода фазы сети через нуль. Обычно резистор между выходом высоковольтного диодного моста и входом МК рекомендуется составлять из двух резисторов, включенных последовательно (на случай пробоя одного из них), но поскольку перед диодным мостом установлен защитный диод, эта рекомендация не выполняется.
Делитель должен быть рассчитан таким образом, чтобы при максимальном входном напряжении Uвх выходное напряжение Uвых не превышало напряжение питания МК. Иначе синусоидальный сигнал будет ограничен по амплитуде внутренним диодом МК, что исказит измерения. В действительности ограничение наступает когда входное напряжение превышает напряжение питания МК на 0,5 В или более. Эта величина определяется прямым напряжением внутреннего диода. В данной схеме важно чтобы входной сигнал не превышал минимальное напряжение питания МК потому, что это напряжение является опорным для АЦП. В противном случае результатом преобразования будут коды, соответствующие опорному уровню напряжения, а не истинному значению входного сигнала.
Согласно описанию МК, АЦП рассчитан на обработку низкоомных сигналов (10 кОм и менее). Поэтому для нижнего плеча делителя выбираем номинал равный 9,1 кОм, предусматривая 5-процентный допуск сопротивления.
Для вычисления минимального сопротивления верхнего плеча делителя воспользуемся стандартной формулой: Uвых = (Uвх · R2) ∕ (R1 + R2). Отсюда: R1 = ((Uвх − Uвых) · R2) ∕ Uвых.
Введём коэффициент Квх, определяющий максимальное отклонение сетевого напряжения: R1 = ((Uвх·Квх − Uвых) · R2) ∕ Uвых.
Поскольку нас интересует полный размах сетевого напряжения, перепишем формулу с учётом его амплитудного значения: R1 = ((Uвх·Квх·1,41 − Uвых) · R2) ∕ Uвых.
Учтём падение напряжения Uд на двух диодах диодного моста: R1 = ((Uвх·Квх·1,41 − 2·Uд − Uвых) · R2) ∕ Uвых.
Падение напряжения на предохранителе не учитываем. Как уже отмечалось, оно ничтожно мало́.
Осталось добавить коэффициенты Кr1 и Кr2, определяющие отклонение сопротивлений от номинала:
R1 = ((Uвх·Квх·1,41 − 2·Uд − Uвых) · R2 · Кr2) · Кr1 ∕ Uвых
Переходим к подстановке числовых значений.
Входное напряжение Uвх = 220 В, его отклонение Квх = 10 %.
В качестве значения Uд берём минимальное падение напряжения, так как в этом случае сопротивление резистора R1 будет больше. Минимальное падение напряжения на диодах моста будет при минимальном токе, то есть при отключенной нагрузке. Судя по графику ВАХ из описания диодного моста, падение напряжения на одном элементе при токе нагрузки 10 мА равно примерно Uд = 0,65 В.
Благодаря использованию фильтрующего конденсатора большой ёмкости, пульсациями блока питания можно пренебречь. Поэтому минимальное напряжение питания МК определяется минимальным напряжением стабилизации источника опорного напряжения, которое, согласно описанию ИОН, равно Uвых = 5 В − 1 % = 4,95 В.
Допуск на отклонение сопротивления резисторов равен Kr1 = Kr2 = 5 %. Нужно предусмотреть ситуацию, когда сопротивление R2 (R3 на принципиальной схеме) будет больше, так как при этом Uвых тоже увеличится. Это, как отмечалось ранее, может привести к неверному результату измерения. Поэтому принимаем Кr2 = 0,95. С сопротивлением R1 (R4 на принципиальной схеме) ситуация противоположная — важно учесть уменьшение сопротивления. Поэтому Кr1 = 1,05.
Подставляя числовые значения в формулу, получаем:
R1 = ((220·1,1·1,41 − 2·0,65 − 4,95) · 9,1·10³ · 0,95) · 1,05 ∕ 4,95 = (334,97 · 8,65·10³) · 1,05 ∕ 4,95 = 3042,37·10³ ∕ 4,95 = 614,6·10³ Ом
Ближайшим сопротивлением из стандартного ряда E24 (для резисторов с точностью ±5 %), превышающим полученное значение, является номинал 620 кОм.
Поскольку падение напряжения на резисторе верхнего плеча делителя может достигать 242 · 1,41 = 341 В, резистор должен иметь мощность 0,5 Вт. Как было показано при расчёте балластного резистора, на паспортную мощность можно ориентироваться только тогда, когда сопротивление резистора больше критического. Для резистора серии С2–23 мощностью 0,5 Вт критическое сопротивление Rк = 350² ∕ 0,5 = 245 кОм, что почти в три раза меньше рассчитанного. Значит, паспортная мощность резистора 0,5 Вт в данном случае выбрана правильно.
Нагрузка коммутируется мощными N–канальными MOSFET транзисторами VT1 и VT2. Особенностью схемы является отсутствие драйвера, что в соответствии с одним из требований проекта уменьшает количество используемых компонентов. Транзисторы управляются выходами МК.
Как выяснилось, при напряжении на затворе 5 В и мощности нагрузки 60 Вт канал транзистора почти полностью открывается, даже несмотря на довольно высокое сопротивление резистора в цепи затвора. Так происходит благодаря тому, что ток нагрузки (около 0,25 А) составляет величину примерно в 20 раз меньшую максимально допустимого тока стока транзистора. При таких условиях падение напряжения на переходе сток–исток транзистора составляет менее 1 В, что не приводит к заметному на глаз снижению максимальной яркости лампы.
Тока выхода МК оказывается достаточно для перезарядки ёмкости затвора благодаря невысокой частоте переключения (100 Гц). Это примерно на два порядка меньше частоты, на которой работают MOSFET транзисторы в традиционных переключательных схемах, например в импульсных источниках питания.
Отсутствие драйвера может привести к самопроизвольному включению транзистора в случае резкого всплеска напряжения на стоке. Этот эффект, известный под названием C·dV∕dt turn–on, вызван наличием ёмкости между затвором и стоком (так называемая ёмкость Миллера). Иногда вернуть транзистор в нормальный режим работы удаётся лишь после отключения схемы от сети на несколько минут (на время остывания транзистора).
Одним из лучших способов предотвратить случайное включение является выбор транзистора, у которого соотношение Qgd ∕ Qgs1 составляет величину менее 1,4 [7]. Здесь Qgd — величина заряда затвор–сток, Qgs1 — величина заряда, когда напряжение на затворе достигает порогового значения (определяется в описании транзистора по графику Total Gate Charge — суммарный заряд затвора). К сожалению, транзисторы, удовлетворяющие данному правилу, встречаются крайне редко. С другой стороны, случаи резких всплесков напряжения на стоке тоже крайне редки.
В отличие от резкого всплеска напряжения, при его резком спаде и отсутствии драйвера ёмкость Миллера не приводит к самопроизвольному включению транзистора, однако на затворе может возникнуть отрицательный потенциал, превышающий допустимое напряжение затвор–исток [10, глава 3, "Beware of unexpected Gate-to-Source voltage spikes"]. Это может стать причиной выхода транзистора из строя. Поэтому одним из критериев при выборе транзистора стало наличие встроенного ограничителя напряжения на затворе. Такое решение позволило отказаться от дополнительных внешних компонентов. Кроме этого, встроенный ограничитель предохраняет затвор от воздействия статического электричества, к которому MOSFET транзисторы как класс приборов имеют высокую чувствительность.
При напряжении срабатывания встроенного в транзистор ограничителя около 30 В и сопротивлении резистора в цепи затвора 10 кОм ток через выход МК, в соответствии с законом Ома, составит примерно 3 мА, что в три раза превышает допустимый. Поэтому для повышения надёжности схемы между затвором и истоком транзистора можно поставить дополнительный ограничитель с напряжением срабатывания 6…10 В. При таком напряжении ток через внутренние защитные диоды МК будет находиться на безопасном уровне (≤ 1 мА). Впрочем, вряд ли в бытовой электросети встретятся ситуации, вызывающие резкий спад напряжения на стоке транзистора.
Также для повышения надёжности можно поставить высокоомный резистор (порядка 100 кОм) между затвором и истоком. Это предотвратит включение транзистора, когда выходы МК находятся в высокоимпедансном состоянии, например при срабатывании супервизора питания или сторожевого таймера. Поскольку такие ситуации кратковременны и маловероятны, резисторы затвор–исток не используются, поэтому на схеме не показаны.
Для того чтобы транзистор был пригоден для использования в данном устройстве, он должен обладать следующими характеристиками:
• Ток стока — не менее 6 А;
• Типовое сопротивление канала — не более 1 Ом;
• Напряжение сток–исток — не менее 600 В;
• Двусторонний ограничитель напряжения на затворе — есть;
• Максимальное пороговое напряжение затвор–исток — менее 5 В;
• График зависимости тока стока от напряжения на затворе — нормирован для напряжения затвора 5 В или меньше. То же для графика зависимости тока стока от напряжения сток–исток.
Кроме этого, в соответствии с требованиями к проекту транзистор не должен сильно нагреваться, в идеале — он не должен нагреваться вообще. Величина нагрева Tja определяется формулой:
Tja = P · Rth + 25 °C = R · I² · Rth + 25 °C,
где R — сопротивление канала сток–исток;
I — ток нагрузки;
Rth — тепловое сопротивление транзистора "корпус–окружающая среда";
25 °C — температура окружающей среды.
Так как частота переключения транзистора не превышает 100 Гц, его динамические потери малы, на нагрев не влияют, поэтому формулой не учитываются.
Из формулы следует, что транзистор должен иметь как можно меньшее значение теплового сопротивления. Выбранный транзистор имеет корпус практически идентичный стандартному корпусу TO–220, и обладает относительно небольшим тепловым сопротивлением (62,5 °C). Длительная эксплуатация выбранного транзистора в составе устройства показала полное отсутствие нагрева при любом уровне яркости лампы.
По причине, указанной далее в разделе Защита от превышения сетевого напряжения, транзистор должен быть рассчитан на напряжение сток–исток не менее 600 В. Помимо этого, в случае обрыва защитного диода транзистор не выйдет из строя при аварийном повышении напряжения сети вплоть до 380 В±10 %.
По результатам изучения продукции основных производителей MOSFET транзисторов (Infineon, International Rectifier (с 2014 года принадлежит Infineon), Ixys, Fairchild, NEC (с 2010 года принадлежит Renesas), NXP, ON Semiconductor, Renesas, Toshiba, Vishay) выяснилось, что встроенный ограничитель напряжения на затворе имеется только у транзисторов Toshiba (исследование рынка проводилось в 2007 году).
Далее перечислены транзисторы этой компании, подходящие по остальным параметрам и рекомендуемые в качестве замены: 2SK2544, 2SK2777, 2SK3130, 2SK3947, 2SK4013, 2SK4014, 2SK3799, 2SK2843, 2SK2866, 2SK2889, 2SK2996, 2SK3265, 2SK3797. Следует отметить, что данная рекомендация основана только на изучении описаний транзисторов. На практике их работа не проверялась. В частности, может потребоваться подбор резистора в цепи затвора.
К сожалению, так называемые logic level MOSFET транзисторы, управляемые цифровыми уровнями сигналов и подходящие по остальным параметрам, в частности, рассчитанные на напряжение 600 В, не существуют (во всяком случае на момент написания статьи).
Теоретически вместо MOSFET можно применить IGBT транзисторы. Однако найти такие экземпляры, которые удовлетворяли бы всем ранее указанным требованиям, не удалось. Кроме того, MOSFET транзисторы, как правило, дешевле.
3.5.2. Резисторы в цепи затвора транзисторов
Сопротивление резисторов R5 и R6 оказывает влияние на следующие факторы:
• защиту выхода МК от броска тока при перезарядке входной ёмкости транзистора (чем больше сопротивление, тем меньше ток);
• защиту выхода МК от превышения напряжения на затворе, которое возникает под действием ёмкости Миллера (чем больше сопротивление, тем лучше защита);
• степень нагрева транзистора (чем меньше сопротивление, тем меньше нагрев);
• уровень помех радиоприёму, приёму в инфракрасном диапазоне, а также в электросети (чем больше сопротивление, тем меньше помех);
• силу звона спиралей ламп (чем больше сопротивление, тем меньше звон).
Влияние сопротивления на ток потребления, а также на падение напряжения на переходе сток–исток транзистора в силу малых величин не учитывается.
Анализируя перечисленные факторы, приходим к очевидному выводу, что, в целом, чем больше сопротивление, тем лучше. Однако слишком сильно его увеличивать тоже нельзя — это приведёт к нагреву транзистора.
Для начала выясним минимально допустимое сопротивление резистора в цепи затвора. Оно определяется безопасным уровнем тока выхода МК во время перезарядка ёмкости затвора. В этот момент выход МК оказывается кратковременно замкнут на общий провод. Учитывая максимальный ток выхода 20 мА (по описанию МК) и напряжение питания 5 В, по закону Ома получаем минимально допустимое сопротивление 250 Ом.
Теперь попробуем определить номинальное сопротивление резистора с точки зрения ограничения напряжения на выводе МК. В описании последнего сказано, что уровень безопасного тока, протекающего через внутренние диоды, составляет 1 мА. Максимально допустимое напряжение на затворе транзистора, указанное в его описании, составляет ±30 В. Встроенный в транзистор двусторонний ограничитель не позволяет напряжению превысить эту величину. Следовательно, чтобы обеспечить безопасный ток через внутренние диоды МК, потребуется сопротивление R = 30 ∕ 0,001 = 30 кОм. При таком высоком сопротивлении в цепи затвора сильно увеличится сопротивление канала сток–исток. Это приведёт к уменьшению яркости лампы и нагреву транзистора. Следовательно, выбирать сопротивление по данному критерию нельзя. Кроме того, как было отмечено ранее, вряд ли в бытовой электросети встретятся ситуации, вызывающие значительное повышение напряжения на затворе (как следствие действия ёмкости Миллера).
Остаётся выбирать сопротивление, ориентируясь на степень нагрева транзистора, уровень помех и силу звона спирали лампы. Два последних фактора требуют высокого сопротивления резистора, а первый — низкого. Получается, что сопротивление надо выбирать как компромисс. Поскольку готовых формул, учитывающих все три фактора, не существует, сопротивление подбиралось экспериментальным путём.
Подбор сопротивления по степени нагрева транзистора более затратный по времени, поэтому резистор подбирался по отсутствию слышимых помех. Для этого использовался встроенный в портативный плеер радиоприёмник AM диапазона. Спектр излучаемых помех достаточно широк, поэтому частота настройки радиоприёмника значения не имеет, она может лежать в диапазоне 520…1710 кГц. Яркость лампы во время подбора сопротивления может быть любая, кроме максимальной, так как в этом случае помехи исчезают даже при нулевом сопротивлении в цепи затвора. Сопротивление резистора увеличивалось, начиная с нуля, до тех пор, пока в расположенном на расстоянии 5 см от устройства радиоприёмнике не перестал слышаться низкочастотный фон, причём при любой ориентации плоскости радиоприёмника относительно плоскости платы устройства. После этого яркость лампы устанавливалась на уровень примерно 75 % (это точка наибольшего нагрева транзистора), и через 15 минут контролировалась температура корпуса транзистора. Если она превышала температуру окружающей среды более чем на 1 °C, сопротивление резистора уменьшалось. В завершение устройство располагалось так, чтобы лампа оказывалась на расстоянии примерно 5 см от уха. Если во время изменения яркости от минимума до максимума и обратно был слышен звон нити накала, сопротивление резистора увеличивалось. Эта последняя настройка производилась со штатной лампой светильника и штатной проводкой. Иначе результат подбора сопротивления искажался из-за отличающегося типа лампы и иной индуктивности проводников, соединяющих лампу с платой.
Следует отметить, что помимо неприятного жужжания, звон спирали лампы резко сокращает её ресурс. Тестирование ламп различных производителей на минимальный уровень звона позволило расположить их в следующем порядке предпочтений: Osram, Philips, General Electric. В результате выбор остановился на матовых лампах Osram Classic B FR 60 230V E14/SES, 660lm, Energy index E. Выбор матовых ламп обусловлен тем, что они не оставляют световые пятна на стенах.
Предохранитель F1 и защитный (ограничительный) диод VD1, также называемый супрессор (supressor), образуют цепь защиты, которая предохраняет устройство от выхода из строя при коротком замыкании нагрузки, превышения её мощности, а также при бросках напряжения в сети, включая аварийное повышение сетевого напряжения до 380 В.
Предохранитель рассчитывается, исходя из максимальной нагрузки, по стандартной формуле I = P ∕ U. Отсюда I = 2 · 60 ∕ 220 = 0,55 А. Ток потребления схемы, разумеется, не учитывается, так как по сравнению с током нагрузки он пренебрежимо мал. Вполне допустимо выбрать предохранитель на 0,5 А. Эксплуатация устройства подтвердила, что такой номинал выдерживает долговременную (не менее 24 часов) максимальную яркость обеих ламп при максимально допустимом напряжении сети.
Чтобы защитить чувствительные полупроводниковые приборы, используется быстродействующий предохранитель. Для отечественного предохранителя серии ВП2Б–1В время срабатывания при превышении номинального тока в 2,75 раза равно 1-й секунде. Предохранители с замедленным временем срабатывания (в керамическом или стеклянном корпусе) при выходе из строя издают резкий и громкий звук, оставляя на плате {или на стене :-)} чёрное пятно {проверено на практике :-(}. Выбор сделан в пользу керамического корпуса, так как стеклянные корпуса при срабатывании иногда рассыпаются (тоже проверено на практике).
Следует помнить о том, что предохранители подвержены фактору старения. Поэтому не стоит удивляться, если после нескольких лет эксплуатации устройства предохранитель сработает без явных причин.
Использовать современные полимерные самовосстанавливающиеся предохранители в данной схеме не представляется возможным из-за их сильного нагрева и невысокой скорости срабатывания. Например, для предохранителя LB600LV время срабатывания при токе нагрузки 3 А составляет 36 секунд.
3.6.1. Защита от короткого замыкания нагрузки и превышения её мощности
Возможны два варианта короткого замыкания нагрузки: когда она выключена, и когда она включена.
В первом случае ток возрастает медленно, так как нагрузка всегда включается при почти нулевом напряжении в сети, и яркость лампы всегда увеличивается плавно. Поскольку в устройстве применён быстродействующий предохранитель, он успевает перегореть, защищая другие компоненты схемы.
Во втором случае ток мгновенно возрастает настолько, что предохранитель не успевает защитить чувствительный к перегрузкам транзистор. В результате транзистор выходит из строя первым. Теоретически это говорит о том, что транзистор может не выдержать, если лампа перегорит во время работы, так как ток при этом достигает несколько десятков ампер. С другой стороны, согласно графику Safe Operating Area (область безопасной работы) из описания транзистора, ток стока при единичном импульсе длительностью менее 100 мкс и напряжении 300 В может достигать 24 А. Надо полагать, при меньшей длительности импульса транзистор сможет выдержать больший ток. На практике с перегоранием нити накала встречаться не приходилось, поскольку срок службы ламп в устройстве намного превышает стандартный.
В первой версии устройства, где транзисторы управлялись драйвером IR4427, был случай перегорания лампы. При этом все компоненты остались невредимыми. Впрочем, нет полной уверенности в том, что перегорание тогда произошло при включенном состоянии канала.
Короткое замыкание в цепи питания +5 В устройству не страшны, так как в этом случае роль ограничителя тока играет балластный резистор.
При повышенной мощности нагрузки устройство ведёт себя так же как в случае короткого замыкания при выключенной нагрузке. Это было подтверждено подключением к одному каналу двух ламп общей мощностью 200 + 60 = 260 Вт.
Экспериментально установлено, что при выходе из строя транзистора все его выводы оказываются замкнутыми между собой. Поскольку на затворе в этом случае будет потенциал общего провода, предпринимать дополнительные меры по защите выходов МК не требуется.
3.6.2. Защита от превышения сетевого напряжения
Для защиты от высоковольтных помех, возникающих в электрической сети, например при грозовых разрядах, применяется двусторонний полупроводниковый ограничитель напряжения — защитный диод VD1 1.5KE400CA компании STMicroelectronics. По сравнению с другим типом ограничителей — варисторами — защитные диоды обладают более высоким быстродействием, что позволяет использовать их для предохранения высокочувствительных полупроводниковых приборов, к которым, в частности, относятся транзисторы и микроконтроллеры. Кроме того, в отличие от варисторов характеристики защитных диодов не ухудшаются со временем [11].
Справедливости ради следует отметить, что среди примеров использования (application notes) защитных диодов таких производителей, как ON Semiconductor и STMicroelectronics, не нашлось схем, в которых на защитный диод подавалось бы сетевое напряжение.
Защитный диод устанавливается параллельно входу устройства непосредственно за предохранителем. Выводы защитного диода, имеющие диаметр 1 мм, служат теплоотводом. Длина каждого вывода должна составлять 10 мм (согласно описанию защитного диода).
Если в течение некоторого времени ток через защитный диод будет превышать ток срабатывания предохранителя, последний перегорает, защищая устройство. Чем больше превышение тока, тем быстрее сработает предохранитель. Как уже отмечалось, применённый в схеме быстродействующий предохранитель имеет время срабатывания 1 с при превышении номинального тока в 2,75 раза.
Если мощность высоковольтного импульса окажется больше мощности защитного диода (например, при аварийном повышении сетевого напряжения до 380 В), защитный диод может выйти из строя (на практике такой эксперимент не ставился). При этом выводы защитного диода будут замкнуты накоротко, что приведёт к перегоранию предохранителя. Остальные компоненты схемы останутся неповреждёнными. В данном случае для восстановления работоспособности устройства потребуется заменить и предохранитель, и защитный диод (сто́ит недорого).
При воздействии высоковольтного импульса напряжение на входе диодного моста не превысит максимальное напряжение ограничения защитного диода. Это подтвердилось в ходе экспериментов с низковольтным аналогом на примере защитного диода Р6КЕ6.8А.
Напряжение ограничения защитного диода зависит от длительности импульса. Для указанного на схеме типа оно составляет 548 В при длительности 1000 мкс и 706 В при длительности 20 мкс (даны амплитудные значения из описания защитного диода). В большинстве случаев, рассмотренных в [11], при выборе защитного диода следует руководствоваться напряжением, которое соответствует длительности импульса 1000 мкс. Поэтому будем считать, что благодаря защитному диоду напряжение на входе диодного моста, ни при каких обстоятельствах не превысит порог 548 В.
Теперь проанализируем, выдержат ли компоненты схемы напряжение ограничения 548 В.
Лампы и предохранитель не учитываем, так как их выход из строя не является фатальной неисправностью и легко устраняется заменой.
Также можно не учитывать балластный резистор и резистор верхнего плеча делителя напряжения, поскольку и высоковольтные (в смысле мощные) и углеродистые (film) резисторы хорошо переносят кратковременные (до 5 секунд) перегрузки, превышающие номинальное напряжение в 1,5 и 2,5 раза соответственно [5]. Долговременной перегрузки в данном случае не будет — сработает предохранитель.
Диодный мост и транзисторы изначально поддерживают работу при напряжении 600 В.
Как было показано при расчёте балластного резистора, при напряжении 548 В ток через источник опорного напряжения не превысит 7 мА, что на 5 мА меньше его максимального рабочего тока (12 мА).
Ток внутренних диодов МК при сопротивлении верхнего плеча делителя напряжения 620 кОм не превысит I = 548 ∕ 620·10³ = 0,88 мА, что укладывается в допустимый предел 1 мА.
Таким образом, повышение сетевого напряжения до уровня ограничения защитного диода (548 В) не приведёт к выходу из строя компонентов схемы.
Заменять защитный диод, например на 1.5КЕ350СА нежелательно. Во-первых, номинальное рабочее напряжение последнего составляет 300 В, что меньше номинального напряжения питания устройства (220 · 1,41 = 310 В). Во-вторых, минимальное напряжение, при котором 1.5КЕ350СА начинает пропускать ток, равно 332 ∕ 1,41 = 236 В. Это меньше максимально допустимого напряжения питания устройства (220 · 1,1 = 242 В). Обе причины могут привести к возрастанию тока и нагреву защитного диода (подтверждено экспериментально), что противоречит требованиям проекта. Также нежелательно использовать Р6КЕ400СА, из-за его меньшей в 2,5 раза мощности. В качестве замены можно порекомендовать 1.5КЕ400С, 1.5КЕ440СА, 1.5КЕ440С. Но тогда все компоненты схемы должны быть рассчитаны на амплитудное напряжение 572 В, 600 В и 630 В соответственно.
3.7. Расчёт потребляемой мощности и эффективности
Как следует из анализа принципиальной схемы, ток, потребляемый устройством в ждущем режиме, складывается из следующих составляющих: ток делителя напряжения Iд, ток стабилитрона Iст, ток нагрузки блока питания Iн. В силу малых величин, обратные токи защитного диода, выпрямительного моста, транзисторов, а также токи утечки конденсаторов не учитываются. Итак, потребляемая мощность P = Uвх · (Iд + Iст + Iн).
Ток делителя напряжения определим по закону Ома с учётом падения напряжения Uд на диодах выпрямительного моста: P = Uвх· (((Uвх − Uд) ∕ Rд) + Iст +Iн).
Для расчёта тока стабилитрона и тока нагрузки преобразуем формулу, использованную при расчёте балластного резистора, к виду: Iст + Iн = (Uвх − 2·Uд − Uст) ∕ Rб.
С учётом коэффициента отклонения сопротивления резисторов Kr, конечная формула будет иметь вид:
P = Uвх · [((Uвх − 2·Uд) ∕ Rд·Kr) + ((Uвх − 2·Uд − Uст) ∕ Rб·Kr)]
Рассчитаем максимальную мощность, потребляемую устройством в ждущем режиме при номинальном напряжении сети Uвх = 220 В и минимальном напряжении стабилизации Uст = 4,95 В.
Падение напряжения на диоде выпрямительного моста Uд = 0,65 В.
Общее сопротивление делителя напряжения определяется суммой последовательно включенных сопротивлений: Rд = 620000 + 9100 = 629100 Ом.
Аналогично для балластного сопротивления: Rб = 30000 + 30000 = 60000 Ом.
Отклонение номиналов резисторов равно 5 %, значит Kr = 0,95.
Подставляем данные в формулу:
P = 220 · [((220 − 2·0,65) ∕ 629100·0,95) + ((220 − 2·0,65 − 4,95) ∕ 60000·0,95)] = 220 · [0,00037 + 0,0038] = 0,92 ВА
По данным практических измерений ток, потребляемый устройством от сети в ждущем режиме при номинальном сетевом напряжении, составил 4,0 мА. Отсюда P = 220 · 0,004 = 0,88 ВА, что близко к величине, рассчитанной по формуле.
Поскольку в ждущем режиме устройство представляет собой чисто активную нагрузку, активная мощность в данном случае эквивалентна полной мощности: P = 0,92 ВА = 0,92 Вт.
Интересно отметить: при увеличении яркости лампы от минимума до максимума измеренный коэффициент мощности (power factor) возрастает с 0,22 до 0,98.
Потребляемая устройством мощность соответствует европейской директиве 1275/2008/ЕС от 17.12.2008, согласно которой уровень энергопотребления в ждущем режиме устройств, выпускаемых с 2010 года, не должен превышать 1 Вт. К слову, с 2013 года этот уровень огранивается ещё больше — до 0,5 Вт.
Теперь об эффективности. Как показано в разделе Выбор константы cADCSamplesCount, максимальное напряжение на лампе меньше номинального напряжения сети примерно на 1 В. Исходя из этого, эффективность диммера равна (219 · 100) ∕ 220 = 99,6 %. Если замкнуть выводы сток–исток транзистора, можно убедиться, что разница в яркости лампы при уменьшенном на 1 В сетевом напряжении практически незаметна.
Программа составлена и отлажена в бесплатной интегрированной среде разработки (Integrated Development Environment — IDE) VMLab версии 3.14 (в окне 'About Visual Micro Lab' эта версия обозначена как 3.12). Дистрибутив прилагается.
Код программы написан на языке ассемблера, содержит более 1500 строк, занимает в памяти программ МК менее чем 4 килобайта (КБ). Задействованы все регистры общего назначения, 51 байт оперативной памяти (ОЗУ — оперативное запоминающее устройство, SRAM — Static Random Access Memory), 45 байт энергонезависимой памяти (EEPROM — Electrically Erasable Programmable Read-Only Memory).
На первый взгляд, возможности МК ATmega16, имеющего 16 КБ программной памяти, 1 КБ SRAM, 512 байт EEPROM, и богатый набор периферийных блоков, кажутся избыточными. На самом деле, выбор МК "с запасом" сделан умышленно, чтобы иметь возможность совершенствовать устройство и наращивать его функциональные возможности в будущем (см. раздел Дальнейшие усовершенствования).
При необходимости код программы может быть портирован (перенесён) на другие МК семейства ATmega. Однако при этом не следует ориентироваться лишь на объём памяти программ. Следует учесть также и другие факторы, такие как отличающийся ток потребления, иная версия супервизора питания и прочие. Портировать код на семейство ATtiny не рекомендуется, поскольку там отсутствует аппаратный умножитель. Программная реализация умножения нежелательна, так как при этом потеряется скорость реакции на изменение входного напряжения, а значит, ухудшится качество стабилизации яркости.
Структура программы показана на Рис. 4. Каждый блок начинается с названия файла, в котором размещён соответствующий исходный код. Подпрограммы обозначены блоком меньшего горизонтального размера. Среди них есть функции, то есть подпрограммы, возвращающие значения. Для упрощения, функции тоже называются подпрограммами. Отличие подпрограмм, расположенных в файле ProceduresINT.asm, от подпрограмм в файле ProceduresEXT.asm заключается в том, что первые предназначаются только для данного проекта, а вторые являются универсальными и могут найти применение в других проектах. Блок Startup.asm тоже использует некоторые подпрограммы, но для упрощения восприятия соответствующие связи на блок–схеме не показаны.
Файл определений m16def.inc (на блок–схеме не показан) модифицирован с учётом используемых в проекте ресурсов МК. В этом файле закомментированы ресурсы, которые определяются проектом и используются под другими названиями. Модифицированный файл применяется потому, что поставляемый в составе VMLab файл определений устарел (датирован 2001-м годом), не содержит определения некоторых регистров, битов, и областей памяти. Применять новый файл определений из состава последней версии среды разработки Atmel AVR Studio нельзя, так как в нём есть команды, не поддерживаемые ассемблером VMLab (также устаревшим). Вариант использования нового ассемблера из AVR Studio тоже не проходит — VMLab выдаёт ошибку несовместимости.
Рис. 4 — Блок–схема алгоритма программы
Далее кратко рассмотрены ключевые моменты программной части проекта. Дополнительная информация содержится в комментариях, которыми снабжена практически каждая строчка исходного кода.
Алгоритм работы второго канала полностью аналогичен алгоритму работы первого, поэтому комментарии приводятся только для первого канала. По этой же причине в названиях регистров, процедур и в других местах номер канала либо не указывается совсем, либо обозначается буквой "X" или "x".
Команды, начинающиеся с символа комментария (;) в начале строки, предназначены для облегчения процесса разработки. Они могут быть использованы для ускорения хода выполнения программы на этапе отладки. Закомментированные команды, перед которыми есть несколько знаков пробела, не используются в данном проекте, но оставлены в качестве шаблона для применения того же кода в других проектах.
Для обеспечения совместимости с различными текстовыми редакторами символы табуляции заменены знаками пробела.
Программа оптимизирована по быстродействию, поскольку, чем меньше времени потребуется для выполнения кода, тем большей максимальной яркости можно достигнуть (эта взаимосвязь подробно рассмотрена далее). Особое значение имеет время выполнения процедуры ADCSampling. От этого зависит качество стабилизации яркости ламп, то есть насколько быстро устройство может реагировать на колебания сетевого напряжения. В текущей реализации процедура ADCSampling выполняется за 21 мкс (без учёта времени преобразования АЦП, которое составляет 27 мкс).
Адресное пространство EEPROM разделено на три области. В первой хранятся настраиваемые пользователем параметры устройства, во второй — системные переменные, в третьей — результаты диагностики. Первая область отделена от второй несколькими пустыми ячейками, значения которых равны $FF. Третья область находится в конце адресного пространства. Так сделано для удобства восприятия данных в окне симулятора VMLab, а также для упрощения ориентации в файле EEPROM dimmer.eep, когда требуется определить параметры настройки устройства.
Первые 16 ячеек EEPROM не используются. Помимо удобства восприятия, это предохраняет содержимое первой (то есть нулевой) ячейки от случайного изменения, когда регистр адреса EEPROM равен нулю. Нулевое значение присваивается этому регистру во время инициализации (блок Reset.asm). По той же самой причине не используется и последняя ячейка EEPROM, чтобы исключить изменение её содержимого, когда регистр адреса равен максимальному значению $01FF.
Принимая во внимание ограниченное количество гарантированных циклов перезаписи EEPROM (100 000 согласно описанию МК), во время работы в этой памяти сохраняются только самые необходимые данные, а именно уровень установленной пользователем яркости и текущее состояние устройства.
Программный код, расположенный в основном блоке Main.asm, выполняется в бесконечном цикле. Прерывания не задействованы. Тем самым удаётся повысить быстродействие за счёт отказа от команды RETI (Return from Interrupt — возврат из прерывания), а также от команд работы со стеком (stack). Тем не менее, в целях диагностики неисправностей, срабатывание любого прерывания фиксируется и запоминается в EEPROM (подпрограмма WrongINT.asm). Также в целях диагностики запоминается причина, вызвавшая сброс МК (блок ResetCause.asm). Ячейки диагностики, как уже отмечалось, находятся в конце области EEPROM. Если значение хотя бы одной из них отлично от нуля, это говорит о наличии неисправности.
Сторожевой таймер (Watchdog Timer — WDT) настроен на максимальный период срабатывания (2 секунды). Чем больше интервал, тем легче заметить срабатывание таймера. Особенно это помогает на этапе отладки.
Супервизор питания запрограммирован на минимальный порог 2,7 В. За счёт этого обеспечивается надёжный запуск МК с учётом большой ёмкости фильтрующего конденсатора. Супервизор гарантирует стабильный запуск МК независимо от того, на какое время пропадёт напряжение в сети.
Энергосберегающие режимы не используются. Это связано с тем, что в течение примерно 9,5 мс каждого полупериода ведётся непрерывное измерение сетевого напряжения, а в оставшиеся 0,5 мс выполняется основная программа. Переводить МК в спящий режим на столь малый срок не имеет смысла. К тому же, возврат МК из любого спящего режима требует дополнительных затрат времени, что сказывается на быстродействии.
Выключение АЦП на время выполнения основной программы тоже не имеет смысла. В ходе измерений было установлено, что потребляемый МК ток снижается при этом всего на 10 мкА.
В целях снижения энергопотребления диагностический интерфейс JTAG и компаратор отключаются во время инициализации МК.
АЦП, имеющий разрешение 10 бит, используется в режиме 8–битного преобразования, поскольку высокая точность измерений не требуется. Это позволяет ему работать на максимальной частоте (500 кГц), что обеспечивает высокое быстродействие. Согласно [12, глава 2.8, "Temperature, frequency and supply voltage dependencies"], допускается работа АЦП на частотах до 1 МГц. Уменьшенное до 8 бит разрешение является также дополнительной защитой от помех. Для сокращения количества команд управления, АЦП работает в режиме автозапуска, сигналом к которому служит окончание предыдущего цикла преобразования. Первое преобразование запускается при инициализации МК.
Таймеры не используются. Как выяснилось, они создают помехи работе АЦП. Для исключения этого явления в МК существует специальный энергосберегающий режим ADC Noise Reduction (сокращение помех аналого-цифровому преобразователю). Но поскольку режимы энергосбережения не используются, временны́е задержки реализуются на основе регистров или ячеек ОЗУ.
По окончании инициализации периферийных устройств МК всем регистрам и ячейкам ОЗУ присваивается нулевое значение (блок SRAMInit.asm). Это избавляет от необходимости помнить о том, чтобы все переменные были проинициализированы, то есть не содержали бы случайных значений. Такой подход значительно сокращает количество ошибок типа "то работает, то не работает", "работает то так, то эдак". Как следствие, намного облегчается отладка и диагностика.
После инициализации регистров и ОЗУ продолжение программы приостанавливается на несколько секунд (осуществляется программная задержка). За это время напряжение питания МК и опорный уровень АЦП успевают достигнуть номинальной величины.
Для повышения быстродействия задействованные ячейки EEPROM копируются перед началом работы либо в регистры, либо в ОЗУ (блок Startup.asm). В большинстве случаев для этой цели используется специальный макрос EEPROMtoSRAM, находящийся в файле Macros.asm (на блок–схеме алгоритма макрос не показан).
При таком подходе появляется возможность проверки "на лету" считанных из EEPROM данных. Если введённый пользователем параметр настройки является недопустимым, он преобразуется к ближайшему допустимому значению (меньшему или большему). Это действие, условно называемое нормализация (или по-русски "защита от дурака"), выполняется не для всех ячеек, а только для тех, допустимые значения которых однозначны, а также для тех, недопустимые значения которых могут привести к явным ошибкам в работе устройства.
Допустимые значения ячеек EEPROM, а также значения по умолчанию указаны при описании ячеек в комментариях программы (блок Dimmer.asm). Значения некоторых ячеек умышленно ограничены диапазоном, удобным для восприятия и запоминания. Например, продолжительность включенного состояния функции имитации присутствия хозяев, задаваемая ячейкой eOwnersAtHomeOnPeriod, ограничена значением 240 минут, хотя функция могла бы исправно работать и при eOwnersAtHomeOnPeriod = 255. Однако значение 240 минут (4 часа) более привычно для запоминания и использования, нежели 255 минут (4,25 часа).
Одной из задач инициализации является однократное измерение сетевого напряжения (блок Startup.asm). Поскольку заранее невозможно предсказать, в какой момент времени светильник будет подключен к сети, результатом этого измерения является случайное число, принимаемое далее в подпрограмме генератора псевдослучайных чисел за точку отсчёта — seed (блок Procedures.EXT.asm).
Перед тем как передать управление основному блоку (Main.asm) программа определяет, в каком состоянии находилось устройство перед отключением питания. В зависимости от результата устанавливаются те или иные флаги (биты), сообщающие основной программе какие действия необходимо предпринять. Например, если в момент пропадания сетевого напряжения был включен первый канал, то после восстановления электроснабжения он должен включиться автоматически (если это было предварительно разрешено в настройках).
Как уже отмечалось, код основного блока Main.asm выполняется в бесконечном цикле. Так как детектирование перехода сетевого напряжения через нуль осуществляется в каждом полупериоде, цикл Main.asm повторяется каждые 10 мс.
Первая команда основного блока — сброс сторожевого таймера. Следует отметить, что это единственное место во всей основной программе, где осуществляется сброс таймера.
4.2.2. Описание отдельных процедур
Ввиду разветвлённости алгоритма основной программы его наглядное изображение в графическом виде полностью не приводится, так как будет затруднительно для восприятия. Отдельные процедуры основной программы описаны далее. Облегчить понимание логики работы призваны подробные комментарии исходного кода, а также раздел Управление.
Первоначально для детектирования момента перехода сетевого напряжения через нуль использовался следующий алгоритм. АЦП циклически производил считывание входного напряжения и сравнивал результат преобразования с заданной константой. Как только происходило совпадение, подавалась команда на включение каналов, и цикл завершался. Из-за отсутствия кварцевой стабилизации тактовой частоты, для точного обнаружения момента перехода фазы сети через нуль требовался подбор константы под конкретный экземпляр МК. Был альтернативный вариант — вместо подбора константы осуществлять калибровку внутреннего RC–генератора. И то и другое отрицательно сказывалось на повторяемости устройства. Но основная причина, побудившая изменить алгоритм, заключалась в невысокой помехоустойчивости. Действительно, если помеха (всплеск сетевого напряжения) возникала близко к моменту перехода фазы сети через нуль, МК продолжал измерять входное напряжение, ожидая его совпадения с константой. Поскольку после прекращения помехи входное напряжение оказывалось больше заданного константой, МК был вынужден оставаться в цикле измерений до следующего перехода фазы. Так как во время измерения напряжения каналы находятся в выключенном состоянии, визуально такой "простой" выглядел как моргание ламп(ы), так как в течение как минимум 10 мс напряжение на нагрузке отсутствовало.
Изменённый алгоритм основан на сравнении не с константой, а с предыдущим результатом измерения. Команда на включение каналов подаётся только тогда, когда текущий результат измерения становится больше предыдущего. В рассмотренном только что примере МК будет детектировать помеху как напряжение, превышающее предыдущее. Это приведёт к моментальному выходу из цикла, что визуально будет практически не заметно. При отсутствии помех МК осуществит выход из цикла как только сетевое напряжение сменит направление с убывающего на возрастающее, то есть сразу после перехода сетевого напряжения через нуль. Таким образом, отпадает необходимость в кварцевом резонаторе, калибровке внутреннего генератора МК и АЦП. Также не требуется дополнительная константа и настройка устройства под конкретный экземпляр МК.
Погрешность нового алгоритма нетрудно подсчитать. Для определения момента, когда сетевое напряжение начало возрастать, достаточно двух измерений. Время одного преобразования АЦП составляет 27 мкс (см. раздел Выбор константы cADCSamplesCount). Время на обработку полученного результата (первые 5 команд процедуры PhaseDetect) составит в худшем случае 8 мкс. Значит, максимальная погрешность равна 27 + 27 + 8 = 62 мкс. Согласно формуле U = A · sin(2·pi · f · t), при такой задержке мгновенное напряжение в сети будет находиться на уровне U = 310 · sin(2·3,14 · 100 · 62·10−6) = 12 В (относительно номинального сетевого напряжения). Это совпадает с данными, полученными на осциллографе. Причём результат оставался стабильным независимо от экземпляра МК. Включение лампы мощностью 60 Вт с сопротивлением спирали 230² ∕ 60 = 882 Ом при напряжении 12 В создаст ток всего 12 ∕ 882 = 14 мА. Такой малый ток не способен заметно повлиять на сокращение срока службы лампы или создать помехи.
Дребезг контактов кнопок SB1 и SB2 устраняется благодаря тому, что основная программа опрашивает их состояние с интервалом 10 мс (каждый полупериод сетевого напряжения). Устранению дребезга также способствует наличие внутреннего триггера Шмитта и линии задержки на входах МК.
Реализация обработчика кнопок основана на анализе значения регистра rButtonХHoldTime, в котором хранится длительность удерживания кнопки в нажатом положении, а также на сравнении этого значения с константой cButtonOnHoldSense, определяющей временной порог, начиная с которого нажатие на кнопку распознаётся как удерживание. В текущей версии этот порог, равный одной секунде, жёстко задан в коде программы и не предназначен для изменения пользователем. Регистр rButtonХHoldTime может иметь четыре значения:
1) rButtonХHoldTime = 0 (кнопка не нажата);
2) 0 < rButtonХHoldTime < cButtonOnHoldSense (кнопка нажата);
3) rButtonХHoldTime = cButtonOnHoldSense (кнопка удерживается);
4) rButtonХHoldTime = 255 (кнопка остаётся в нажатом положении после удерживания).
Последнее значение сигнализирует о том, что надо дождаться отпускания кнопки. Пока этот момент не наступит, никакие действия, связанные с обработкой состояния кнопки, не производятся.
Выходы МК переключаются одновременно. Это необходимо для того, чтобы оба канала имели равные временны́е задержки и работали одинаково. С этой целью в программу введён специальный буферный регистр rOutChannels. Изменение состояния выходов осуществляется только командой 'OUT pMainOut, rOutChannels'. После старта МК буферный регистр содержит копию состояния порта pMainOut, большинство выводов которого, по аналогии с другими неиспользуемыми выводами, настроены как входы с внутренними подтягивающими резисторами. Поэтому никакие биты регистра rOutChannels (кроме двух старших) не должны модифицироваться программой. Также не должно изменятся состояние порта A напрямую, так как любое изменение будет перезаписано содержимым буферного регистра.
Функция ИПХ использует в качестве счётчика времени во включенном и выключенном состоянии отдельную процедуру. Имеющуюся процедуру TurnOffTimeoutCh1 использовать нельзя. Тому есть три причины. Во-первых, она строго индивидуальна для каждого канала. Во-вторых, её модификация потребовала бы слишком больших усилий (понадобилось бы большое число условных переходов). В-третьих, если продолжительность включенного или выключенного состояния нечётно (скажем, 3 минуты), то пришлось бы делить время поровну между двумя процедурами и иметь дело с дробными числами. Вариант, когда процедура выполняется только в одном из каналов, тоже не подходит, так как принято, что программный код обоих каналов одинаков (для удобства модификации кода и подсчёта времени выполнения программы).
В функции ИПХ практически везде опрашивается бит лишь одного (первого) канала. Это допустимо благодаря идентичности работы каналов, а также благодаря тому, что в данном режиме каналы управляются синхронно.
В момент включения функции ИПХ устанавливаются биты ebPowerState. Это сделано на случай пропадания сетевого напряжения в момент включения данной функции. Таким образом, при восстановлении напряжения работа функции будет продолжена.
В функции автоотключения процентное значение, на которое уменьшается яркость, умышленно ограничено интервалом 10…90 %. Такой диапазон хорошо подходит для визуального восприятия. Кроме того, уменьшение яркости менее чем на 10 % недостаточно заметно.
Для определения значения регистра rSoftOffBrightChХ, хранящего величину уменьшенной яркости с учётом заданного пользователем процента, используется табличный метод (таблица PercentageTable в файле Tables.asm). Это в значительной мере ускоряет программу. Для каждого заданного пользователем значения процента Y, в таблице находится округлённое число Х, заранее вычисленное по формуле X = ((100 − Y) ∕ 100) · 256. Таблица состоит из (90 − 10) + 1 = 81 ячейки. Когда истекает время непрерывной работы канала, происходит обращение к таблице, затем текущее значение яркости умножается на полученное из таблицы число. Поскольку это число предварительно было умножено на 256, результат делится на 256 путём простого отбрасывания старшего байта, после чего результат округляется.
Пример: предположим, что текущая яркость, то есть число в регистре rBrightnessChХ, равно 200, а заданный пользователем процент снижения яркости равен 25. По истечении времени непрерывной работы канала программа обратится к таблице, в которой смещению 25 соответствует число 192. Программа произведёт умножение (200 · 192 = 38400), разделит результат на 256 (38400 ∕ 256 = 150), округлит его (в данном примере в этом нет необходимости) и запишет итог в регистр rSoftOffBrightChХ. Действительно, число 200, уменьшенное на 25 %, равно 150.
Несмотря на кажущееся сходство битов bIsChannelOn и ebPowerState, объединять их воедино нельзя. Вместе они предотвращают включение канала, если во время его выключения по истечении времени непрерывной работы был сбой в электросети.
Подпрограммы чтения и записи EEPROM работают только с первыми 256 байтами. Это упрощает адресацию, так как старший регистр адреса всегда равен нулю и потому не задействуется.
Если в момент обращения к EEPROM идёт обработка предыдущего запроса, подпрограмма чтения дожидается его окончания. Подпрограмма записи в такой ситуации немедленно прекращается, откладывая запись на более поздний срок. Это вполне допустимо, поскольку задержка записи даже в несколько десятков миллисекунд не нарушает работу основной программы, и не заметна для пользователя.
Как уже отмечалось, гарантированное число циклов перезаписи EEPROM является конечным числом, и составляет 100 000. По этой причине запись в одну и ту же ячейку памяти осуществляется лишь в том случае, если записываемый байт отличается от записанного.
В основе подпрограммы генерации псевдослучайного числа RandomNumber8bit лежит алгоритм, описанный в [6, глава 9.33, "Последовательности, генерируемые регистрами сдвига с обратными связями"]. Используется программно реализованный 8–разрядный регистр сдвига с отводами от 7-го, 5-го, 4-го и 3-го разряда, над которыми производится логическая операция исключающее или (XOR, в МК соответствует команде языка ассемблера EOR).
Входными данными подпрограммы является так называемый seed — число, определяющее начало псевдослучайной последовательности. Это число должно быть отлично от нуля. В противном случае оно заменяется числом 113. Почему именно 113? Потому что это первое число от начала списка, удачно располагающееся с точки зрения возвращаемого результата, умноженного на два (для пояснения см. замечание о недостатке в последнем абзаце данного раздела). Первоначально seed генерируется путём измерения сетевого напряжения в момент подключения устройства к сети, что гарантирует случайный характер seed.
Подпрограмма RandomNumber8bit возвращает псевдослучайное число в диапазоне от 1 до 255. Период повторения чисел равен (28 − 1) = 255.
Для повышения скорости выполнения подпрограммы и сокращения количества кода содержимое регистра SREG (Status Register — регистр статуса) не сохраняется, хотя подпрограмма изменяет состояние некоторых флагов этого регистра.
Практическая проверка алгоритма показала, что распределение случайных чисел получается достаточно равномерным во всём диапазоне. Таблицу всех значений псевдослучайной последовательности можно посмотреть в прилагаемом файле. В таблице перечислены числа, возвращаемые при каждом вызове подпрограммы, начиная с seed = 1.
Теперь о недостатке. Если внимательно проанализировать последовательность чисел, то можно заметить — возвращаемое значение зачастую равно (или примерно равно) предыдущему значению, умноженному на два. Всего насчитывается 61 такая комбинация. При этом количество последовательных повторений (то есть когда такой результат получается при каждом последующем вызове функции) варьируется от 1 до 7. Статистика повторов распределяется следующим образом:
Количество последовательных повторений |
Число комбинаций |
1 |
30 |
2 |
15 |
3 |
8 |
4 |
4 |
5 |
2 |
6 |
1 |
7 |
1 |
Восприятие уровня яркости человеческим глазом имеет нелинейную зависимость. График этой зависимости приведён на Рис. 5. Он взят из документа [13] компании Lutron Electronics — известного с 1961 года производителя регуляторов освещения. По горизонтальной оси графика отложены значения яркости, воспринимаемые человеческим глазом, а по вертикальной — её реальные значения, измеренные прибором. Будем считать, что значения по вертикальной оси соответствуют напряжению на лампе. Экспериментальная проверка подтвердила, что это правомерно.
Рис. 5 — Зависимость воспринимаемой яркости от измеренной
Используя указанные на графике соотношения, требуется составить таблицу яркости BrightnessTable, то есть перейти от значений в процентах к числам из диапазона 1…255, пригодным для дальнейшей обработки в МК.
Как видно из размещённой на Рис. 5 формулы, а также из её графического представления, функцией является часть параболы. Она описывается полиномом второй степени (квадратным уравнением):
y(x) = k1·x² + k2·x + k3,
где k1, k2, k3 — неизвестные коэффициенты.
Для нахождения этих коэффициентов воспользуемся средствами программы Mathcad [14, глава 16, "Обработка данных"]. Файл с описываемым далее расчётом в формате Mathcad прилагается. Взяв за основу значения трёх точек, указанных на графике, задаём векторы экспериментальных данных, дополнив их минимальными и максимальными значениями. В точке x = 0, значение y равно 1, а не 0, так как понятия "нулевая яркость" не существует:
data_x := (0 255·22.4 % 255·50 % 255·77.5 % 255)T
data_y := (1 255·5 % 255·25 % 255·60 % 255)T
Далее рассчитываем полиномиальную регрессию с помощью встроенной функции Mathcad, указывая при этом степень полинома:
k := regress(data_x, data_y, 2)
Функция возвращает вектор из пяти элементов, последние три из которых являются искомыми коэффициентами (k1, k2, и k3 соответственно):
k5 = 3,961·10−3 k4 = −0,013 k3 = 0,87
Подставив найденные коэффициенты в формулу, получаем уравнение, описывающее исходный график:
y(x) = 3,961·10−3·x2 − 0,013·x + 0,87
Теперь построим график данной функции, и нанесём на него для сравнения экспериментальные точки с помощью прерывистой линии:
Как видим, приближение к исходным данным получилось достаточно точным. Кроме того, внешний вид графика совпадает с тем, который был взят за основу. На данном графике по горизонтальной оси отложены значения регистра rBrightnessChХ, обозначающие текущую яркость и задающие смещение при обращении к таблице BrightnessTable, а по вертикальной — ответные значения таблицы, записываемые в регистр rChХOffTime, определяющие величину напряжения на лампе.
Осталось получить табличные значения функции. Задаём диапазон, для которого нужно рассчитать значения, и получаем ответ в виде таблицы:
В соответствии с графиком функции первые 12 значений равны 1. Пользуясь линейкой прокрутки таблицы, можно просмотреть все 256 её значений. Поскольку дробная часть полученных данных нас не интересует, опции 'Number of decimal places' присвоено значение 0. При этом происходит автоматическое округление. Данная опция доступна в Mathcad на вкладке 'Number Format', попасть на которую можно, дважды кликнув на таблице. Для отображения номеров строк, в свойствах таблицы на вкладке 'Display' установлена опция 'Show column\row labels'.
Записывать полученные табличные данные в память программ МК напрямую нельзя, так как для этого они должны быть представлены в специальном формате:
.db число 1, число 2
…
.db число 254, число 255
Для преобразования к такому формату можно воспользоваться средствами программы Microsoft Excel. Файл, осуществляющий это конвертирование, прилагается. Данные из таблицы Mathcad следует скопировать в столбец 'ДАННЫЕ MATHCAD' листа 'Конвертер Mathcad to AVR', после чего три столбца 'ТАБЛИЦА МК' будут содержать те же данные, но уже в формате, пригодном для записи в МК.
Следует иметь в виду, что поскольку минимальная и максимальная яркость являются величинами переменными, которые задаются пользователем в ячейках eBrightnessMin и eBrightnessMax соответственно, результирующий график яркости будет отличаться от приведённого выше. Чтобы увидеть отличия, воспользуемся тем же файлом конвертера. Скопируем содержимое столбца 'ДАННЫЕ MATHCAD' из листа 'Конвертер Mathcad to AVR' в одноимённый столбец листа 'Graph'. Примем в качестве исходных данных eBrightnessMin = 35 и eBrightnessMax = 200. Выясним, какому значению соответствует ячейка 35, и заполним этим значением (в данном случае числом 5) все ячейки диапазона 0…35. По аналогии заполним все ячейки диапазона 200…255 значением 156. В результате, график яркости будет выглядеть, как показано на Рис. 6.
Рис. 6 — График яркости с учётом её минимума и максимума
Таким образом, при регулировке яркости используется только часть первоначального графика. Неиспользуемая часть замещается горизонтальными участками. Эти участки есть постоянные значения минимальной и максимальной яркости, продолжительность которых определяется значениями ячеек eBrightMinTimeout и eBrightMaxTimeout соответственно. О том, почему потребовалось ограничивать яркость сверху и снизу рассказывается в следующем разделе.
5. ОСОБЕННОСТИ СТАБИЛИЗАЦИИ ЯРКОСТИ
Исследование выявило две причины непостоянной яркости освещения в наших домах: изменение формы сетевого напряжения и включение мощной нагрузки. Первая причина заметна тем больше, чем меньше яркость. Вторая причина заметна при любой яркости. Применённый в устройстве алгоритм устраняет последствия обеих причин. При этом обеспечивается одинаково хорошее качество стабилизации яркости для любого её уровня.
По ходу разработки выяснилось, что наибольшее влияние на колебание яркости оказывает включение мощной нагрузки при максимальном напряжении на лампе. Это позволило сделать вывод о том, что если обеспечить стабилизацию яркости в данном случае, то во всех других случаях она будет обеспечена автоматически.
Чтобы максимальная яркость оставалась неизменной при включении мощной нагрузки, напряжение на лампе должно быть изначально ограничено. За счёт образовавшейся разницы напряжений как раз и осуществляется стабилизация при уменьшении напряжения в сети. Отсюда следует, что выбирать уровень максимального напряжения на лампе нужно как компромисс между максимальной яркостью и степенью её стабилизации.
Удачным решением послужила наиболее часто встречающаяся бытовая ситуация — включение электрочайника. Путём измерений было установлено, что при включении на кухне чайника мощностью 2 кВт, напряжение в комнатной розетке, предназначенной для подключения светильника, падает с 233 до 228 В. Значит в худшем случае, то есть при напряжении сети 198 В, напряжение упадёт до (198 · 228) ∕ 233 = 193,75 В. Следовательно, для обеспечения стабилизации максимальное напряжение на лампе должно быть ограничено уровнем 194 В. Разумеется, такое напряжение должен поддерживать и блок питания, что было учтено при его расчёте.
Практическая проверка использованного алгоритма, выбранного компромиссного решения и методики подбора максимального напряжения показала, что при изменении напряжения сети в диапазоне от 198 до 242 В напряжение на лампе изменяется всего лишь на 1 В, что совершенно не заметно для глаза. Более того, при включении пылесоса мощностью 1,5 кВт, подсоединённого к тому же электрическому удлинителю, что и светильник, практически не заметно моргание лампы, работающей на полной яркости.
На основании полученных данных нетрудно оценить качество стабилизации количественно. Разница между максимальным и минимальным входным напряжением составляет 242 − 198 = 44 В. Если бы при изменении входного напряжения выходное оставалось неизменным, качество стабилизации составило бы 100 %, то есть было бы идеальным. Однако выходное напряжение изменяется на 1 В, отсюда 44 − 1 = 43 В. Для перевода этой разности в проценты, составим пропорцию: (43 · 100) ∕ 44 = 97,73 %. Округлив результат, получаем качество стабилизации на уровне 98 %.
По отношению к номинальному напряжению сети максимальное напряжение на лампе оказывается уменьшенным на (220 − 194) · 100 ∕ 220 = 12 %. Здесь полезно вспомнить, что снижение напряжения всего на 10 % увеличивает срок службы лампы приблизительно в два раза, на 25 % — в четыре раза [15]. И наоборот, повышение напряжения всего на несколько вольт сверх того, что указано на цоколе лампы, значительно сокращает её ресурс [17].
Чтобы выяснить насколько оказалась уменьшена мощность лампы, необходимо узнать сопротивление её нити накала. Воспользуемся формулой R = U² ∕ P. Поскольку мощность лампы нормируется при напряжении 230 В (и это подтверждено экспериментально), сопротивление нити R = 230² ∕ 60 = 882 Ом. Тогда при напряжении 194 В мощность будет равна P = 194² ∕ 882 = 43 Вт, что ощутимо меньше исходных 60 Вт. По этой причине увеличивать допуск сетевого напряжения свыше ±10 % нежелательно, так как в этом случае придётся ещё больше ограничить максимальное напряжение на лампе, что приведёт к ещё большему снижению её мощности.
С точки зрения стабилизации минимальная яркость не имеет ограничивающих факторов, так как промежуток времени, в течение которого лампа находится во включенном состоянии, невелик. За счёт получаемого в данном случае большого запаса по напряжению, для любого значения минимальной яркости обеспечивается отличная стабилизация во всём диапазоне напряжения сети. Поэтому выбор минимальной яркости — исключительно дело вкуса.
С порядком перевода максимального и минимального напряжения на лампе в соответствующие значения ячеек eBrightnessMax и eBrightnessMin можно ознакомиться в разделе Настройка.
По умолчанию первый канал (eBrightnessMaxCh1) настроен на максимальное выходное напряжение 194 В, в соответствии с вышеприведённым расчётом. Второй канал (eBrightnessMaxCh2) настроен на 215 В, в расчёте на то, что номинальное напряжение сети не опустится ниже 220 В. Правильный подбор значений этих ячеек, при котором максимальное выходное напряжение ограничено уровнем 230 В или менее, гарантирует продление срока жизни ламп, так как благодаря стабилизации на лампы не попадут всплески напряжения, периодически возникающие в бытовой электросети.
Значение ячейки eBrightnessMinCh1 обеспечивает минимальное напряжение на лампе 33 В, ячейки eBrightnessMinCh2 — 35 В.
Интересно отметить, что для едва заметного в полной темноте свечения лампы требуется напряжение 27 В, то есть 12 % от номинального напряжения сети. Это говорит о том, что использовать несколько первых значений таблицы яркости (которые меньше 3…5) не имеет смысла — напряжения на лампе будет явно недостаточно для получения видимого света.
Следует иметь в виду, что на уровень яркости (как минимальный, так и максимальный) оказывает влияние разброс номинала резисторов делителя напряжения. Поэтому после сборки устройства выходные напряжения могут немного отличаться от указанных значений по умолчанию. Если требуется точное соответствие, следует подобрать значения ячеек eBrightnessMax и eBrightnessMin, руководствуясь методикой, приведённой в разделе Настройка.
Остаётся добавить, что выходные напряжения не зависят от конкретного экземпляра МК.
Устройство не нуждается в настройке. Собранное безошибочно и из исправных деталей оно начинает работать сразу. При желании можно отрегулировать параметры, задаваемые пользователем, например, установить величину максимальной яркости.
6.1. Подбор максимальной яркости
Предположим, требуется обеспечить стабилизацию яркости при воздействии мощной нагрузки, когда минимально допустимое напряжение сети (198 В) снижается до 194 В. Первым делом убеждаемся, что запоминание яркости для данного режима данного канала активировано (соответствующий бит ebSaveBright равен 1). После этого программируем ячейку eBrightnessMax значением $FF. Затем подключаем устройство к лабораторному автотрансформатору, на котором выставляем напряжение 198 В. Далее подсоединяем параллельно лампе TrueRMS AC+DC вольтметр. Регулируя яркость лампы удерживанием кнопки, добиваемся показания вольтметром 194 В. После паузы, необходимой для запоминания текущей яркости (не менее 2,5 секунд), считываем с помощью программатора содержимое ячейки eLastBright. Полученное значение записываем в ячейку eBrightnessMax. При необходимости осуществляем конвертацию между шестнадцатеричным и десятичным представлением. Для удобства можно на время подбора уменьшить скорость регулирования яркости, присвоив ячейке eBrightChangeSpeed максимальное значение (оно равно 5).
Необходимо помнить, что блок питания рассчитан на минимальное сетевое напряжение 194 В. Поэтому воздействие мощной нагрузки не должно вызывать уменьшение напряжения сети ниже этого значения. В противном случае стабилизация яркости будет нарушена вследствие снижения опорного уровня АЦП.
6.2. Подбор минимальной яркости
По аналогии с подбором максимальной яркости, первым делом убеждаемся, что запоминание яркости для данного режима данного канала активировано (соответствующий бит ebSaveBright равен 1). После этого программируем ячейку eBrightnessMin значением $00. Затем, регулируя яркость лампы удерживанием кнопки, выбираем желаемую минимальную яркость. После паузы, необходимой для запоминания текущей яркости (не менее 2,5 секунд), считываем содержимое ячейки eLastBright и записываем его в ячейку eBrightnessMin, осуществляя при необходимости конвертацию между шестнадцатеричным и десятичным представлением.
6.3. Выбор константы cADCSamplesCount
В случае модификации кода основной программы необходимо заново рассчитать значение константы сADCSamplesCount. Данная константа определяет количество проходов процедуры ADCSampling, то есть продолжительность измерения сетевого напряжения, в том числе при выключенных каналах, когда значения rChХOffTime равны 0. В целом, чем больше значение константы, тем лучше, так как лампа будет дольше находиться во включенном состоянии, что позволит достичь большей максимальной яркости. Однако суммарная длительность процедуры ADCSampling, определяемая константой сADCSamplesCount, ограничена длительностью выполнения основной программы. Например, если основная программа выполняется в течение Tоп = 500 мкс, то суммарная длительность процедуры ADCSampling не может быть больше 9500 мкс, так как один полный цикл выполнения всего кода программы при частоте сети 100 Гц занимает Т = 10 мс = 10000 мкс. Если же процедура ADCSampling будет выполняться дольше, возникнут сбои, проявляющиеся в виде моргания ламп.
Чтобы определить значение константы сADCSamplesCount, требуется знать время Tпр (время преобразования), затрачиваемое на однократное выполнение процедуры ADCSampling. Таким образом, первоначально формула для вычисления константы имеет вид: сADCSamplesCount = (Т − Tоп) ∕ Tпр.
Помимо времени выполнения основной программы, формула должна также учитывать время, затрачиваемое на процедуру PhaseDetect. Поскольку эта процедура основана на сравнении двух чисел, последовательно получаемых с АЦП, минимальное время её выполнения равно удвоенному времени преобразования АЦП Тацп, плюс время То, необходимое для обработки результата: cADCSamplesCount = (Т − (Tоп + 2·Tацп + Tо)) ∕ Tпр.
Ещё один участок кода, который должен быть учтён в формуле, это команды, находящиеся между процедурами PhaseDetect и ADCSampling. С учётом времени их выполнения Tд: cADCSamplesCount = (Т − (Tоп + 2·Tацп + Tо + Tд)) ∕ Tпр.
Коэффициент Кч учитывает отклонение частоты сети от номинальной: сADCSamplesCount = (Т·Кч − (Tоп + 2·Tацп + Tо + Tд)) ∕ Tпр.
Полученная формула пригодна для расчёта, если время выполнения одной команды составляет ровно 1 мкс. Но поскольку тактовая частота МК не стабилизирована кварцевым резонатором, для обеспечения хорошей повторяемости устройства требуется ввести поправочный коэффициент Кrc, учитывающий погрешность внутреннего RC–генератора:
cADCSamplesCount = (Т·Кч − (Tоп·Кrc + 2·Tацп·Кrc + Tо·Кrc + Tд·Кrc)) ∕ (Tпр·Кrc)
Теперь можно перейти к подстановке числовых значений. Расчёт следует вести, исходя из минимального значения константы cADCSamplesCount, так как только в этом случае можно быть уверенным, что перечисленные выше обстоятельства не приведут к морганию ламп.
Под временем выполнения основной программы Топ подразумевается максимальное время её выполнения за один проход. В силу разветвлённости алгоритма и отсутствия пригодного профайлера, определить аналитически, в каком именно случае программа выполняется дольше всего, чрезвычайно сложно. Поэтому был применён эмпирический метод. Было установлено, что максимальное время выполнения основной программы соответствует режиму, когда яркость обоих каналов регулируется одновременно. Конкретное численное значение времени можно определить при симуляции этого режима в среде разработки VMLab. Измерение следует повторить не менее (eBrightChangeSpeedCh1 + eBrightChangeSpeedCh2 + 1) раз подряд. Значения eLastBright и eBrightnessMax при этом могут быть любыми. Из полученных результатов нужно выбрать наибольший. В текущем варианте программы измеренное время принимало значения от 311 до 351 мкс. Поэтому Топ = 351 мкс. Ниже для справки приведено максимальное время выполнения основной программы в различных режимах (без учёта команды 'LDI Temp, 255', расположенной перед процедурой PhaseDetect, и выполняемой за 1 мкс):
• при выключенных каналах — 223 мкс;
• при включении одного канала — 254 мкс;
• при включенном одном канале — 257 мкс;
• при включенных обоих каналах — 291 мкс;
• при одновременной регулировке яркости обоих каналов до начала её изменения — 335 мкс;
• при одновременной регулировке яркости обоих каналов во время её изменения — 351 мкс.
При допуске на частоту сети 0,4 Гц её максимальное значение на входе АЦП составит 50,4 + 50,4 = 100,8 Гц. Значит, период будет равен Т = 1 ∕ 100,8 = 9920 мкс. Отсюда Кч = 0,992).
Согласно описанию МК, допуск на отклонение частоты внутреннего RC–генератора составляет ±3 %. Добавим ещё 1 %, чтобы учесть влияние температуры, а также допуск на отклонение напряжения питания МК. Одного процента вполне достаточно, так как нагревание компонентов устройства и его корпуса невелико, равно как невелико и отклонение напряжения питания, благодаря использованию прецизионного источника опорного напряжения. Графики зависимостей частоты МК от различных факторов показывают, что влияние температуры и напряжения питания не слишком значительно. Поэтому принимаем Кrc = 1,04, чтобы учесть максимальное время выполнения команд.
Предделитель частоты АЦП запрограммирован на деление входной частоты в два раза. Входной частотой является тактовая частота МК (1 МГц). Значит, на выходе предделителя будут импульсы с периодом следования 2 мкс. Длительность одного преобразования АЦП в режиме Free Running Mode составляет 13,5 тактов предделителя. Отсюда время преобразования Tацп = 13,5 · 2 = 27 мкс.
В процедуре PhaseDetect время обработки результата преобразования АЦП То определяется для худшего случая, когда результат второго преобразования становится доступен на следующей команде после чтения АЦП. Поэтому To = 7 мкс.
Между процедурами PhaseDetect и ADCSampling находятся всего две команды. Значит Tд = 2 мкс.
Время Tпр, затрачиваемое на однократное выполнение процедуры ADCSampling, нетрудно подсчитать вручную или с помощью симулятора VMLab. Задача облегчается тем, что, несмотря на наличие команд условного перехода, эта процедура всегда выполняется в течение одного и того же времени, что достигнуто за счёт применения выравнивающих команд NOP (No Operation — нет операции). Время выполнения процедуры ADCSampling составляет Tпр = 21 мкс.
Подставляя полученные данные в формулу, получаем:
cADCSamplesCount = (10000·0,992 − (351·1,04 + 2·27·1,04 + 7·1,04 + 2·1,04)) ∕ (21·1,04) = 434,49
Для надёжности значение этой константы следует округлить в меньшую сторону, вопреки правилам математики.
После изменения константы cADCSamplesCount подстройка значений ячеек eBrightnessMin и eBrightnessMax не требуется.
Интересно заметить, что при значении константы сADCSamplesCount = 434, то есть когда длительность включенного состояния канала составляет примерно 434 · 21 = 9114 мкс, и при eBrightnessMax = 255, то есть когда эта длительность не ограничена, максимальное напряжение на лампе меньше номинального напряжения сети всего приблизительно на 1 В. Также интересно отметить, что при тех же условиях уменьшение константы cADCSamplesCount на 7 единиц почти не уменьшает напряжение на лампе.
Учитывая малое количество деталей, а также многообразие выпускаемых промышленностью светильников, печатная плата не разрабатывалась. Устройство собрано на односторонней макетной плате Velleman ECS2, выпиленной лобзиком по габаритным размерам корпуса (Рис. 7).
Рис. 7 — Вид светильника со стороны деталей
Соединения компонентов схемы выполнены навесным монтажом, с помощью термостойкого провода марки МГТФ, а также путём наплавления припоя между соседними дорожками макетной платы.
Для исключения короткого замыкания, между платой и корпусом проложен термоустойчивый диэлектрический материал. Автор использовал для этой цели кондитерскую бумагу для запекания.
Провода сетевого шнура заведены в клеммник, но перед этим они проходят сквозь отверстия в макетной плате. Такая мера повышает защиту сетевого шнура от обрыва.
Для удобства монтажа применяются компоненты в выводном исполнении. Единственное исключение — SMD конденсатор С3 (Surface Mounted Device — прибор, монтируемый на поверхность). Он припаян непосредственно к соответствующим выводам панельки МК.
МК установлен в цанговую панельку. Конденсатор С2 расположен внутри неё. Благодаря малым габаритам, конденсатор не мешает корпусу МК.
Транзисторы закреплены в винтовых клеммниках серии 308–031. Это удобно, так как при необходимости замены транзистора не придётся извлекать плату из корпуса светильника и прибегать к пайке — достаточно будет открутить три винта клеммной колодки.
Верхняя часть макетной платы зарезервирована для дальнейшего расширения возможностей устройства, например для установки модуля ZigBee.
Со стороны пайки макетная плата покрыта акриловым изоляционным лаком "Plastik 70" фирмы CRC Industries. Это обеспечивает защиту устройства от воздействия окружающей среды, например от последствий работы увлажнителя воздуха. Тем самым повышается надежность устройства в долгосрочной перспективе.
Отдельный выключатель питания не требуется, поскольку ток утечки канала сток–исток транзистора, согласно его описанию, не превышает 100 мкА. По факту, измеренный мультиметром ток через лампу в дежурном режиме составил 11 мкА. Однако может случиться так, что лампа будет включена на минимальной яркости, незаметной при дневном освещении. Поэтому в целях безопасности на время замены ламп светильник всё же следует отключать от сети. Тест на "горячую" замену лампы не проводился, так как маловероятно, что у кого-то возникнет желание обжечься (колба лампы горячая независимо от уровня яркости).
Желательно чтобы конструкция светильника, в особенности его плафонов, не препятствовала отводу тепла, рассеиваемого лампами, так как высокая температура сокращает срок их службы [16]. В этом отношении вариант, выбранный автором, следует признать не слишком удачным.
Поскольку светильники, как правило, оформлены в металлических корпусах, следует принять меры по защите устройства от воздействия статического электричества [18].
Мощность нагрузки можно увеличить. Для этого необходимо изменить номинал предохранителя, а также найти подходящие по току и другим параметрам диодный мост и транзисторы (см. соответствующие разделы). Можно попробовать увеличить мощность нагрузки и без замены указанных на схеме полупроводниковых компонентов, контролируя при этом степень их нагрева. Как вариант, можно поставить теплоотводы.
Устройство можно использовать для управления одним каналом, вместо двух. В этом случае компоненты SB2, R6, VT2, JS3, HL2 не устанавливаются. Однако функция имитации присутствия хозяев будет недоступна, так как для её включения требуются две кнопки.
Чтобы в будущем не столкнуться с ситуацией, когда используемые в схеме компоненты окажутся снятыми с производства, рекомендуется приобрести их с запасом, включая лампы и предохранители.
8.1. Возможные неисправности и способы их устранения
Симптом: если при включенном канале сетевое напряжение пропадает более чем на секунду, то после его возобновления лампа загорается не сразу, а через 4 секунды.
Причина: идёт зарядка фильтрующего конденсатора до номинального напряжения питания схемы. Также требуется время на инициализацию внутренних узлов МК.
Решение: это схемотехническая особенность, неисправностью не является.
Симптом: при записи данных в EEPROM (например через 2,5 секунды после окончания регулировки яркости) сильно заметно моргание ламп(ы).
Причина: уменьшилась (высохла) ёмкость электролитического конденсатора фильтра питания.
Решение: заменить конденсатор C1 исправным того же номинала.
Симптом: после модификации кода программы, при одновременной регулировке яркости обоих каналов наблюдаются срывы синхронизации в виде моргания ламп.
Причина: на выполнение основной программы отведено недостаточное количество времени.
Решение: уменьшить значение константы cADCSamplesCount.
В дежурном режиме (режиме ожидания) корпус устройства слегка нагревается от тепла, которое рассеивает балластное сопротивление.
Включение лампы происходит при напряжении в сети на 12 В выше нуля.
Большая ёмкость конденсатора фильтра, и как следствие, задержка старта устройства при подключении к сети (около 4 секунд).
Нет полной уверенности в том, что транзистор не выйдет из строя в случае перегорания лампы во включенном состоянии (это обсуждалось в разделе, посвящённом защите от короткого замыкания).
Небольшой нагрев диодного моста при включенной нагрузке недостатком можно не считать. Несмотря на то, что степень его нагрева зависит от количества включенных каналов и величины их яркости, корпус светильника в любом случае нагревается больше, когда рассеивает тепло, создаваемое включенными лампами. Однако недостаток состоит в том, что этот нагрев, пусть и небольшой, практически не учитывается в расчётах. Тем не менее, все компоненты устройства имеют паспортные допуски температуры, превышающие максимально возможную температуру корпуса светильника.
Недостаток описания проекта — HTML код сайта и математические формулы не приведены в полностью надлежащий вид. Код сайта получен конвертацией оригинала статьи из формата 'Word Document (*.docx)' в формат 'Web Page, Filtered (*.htm, *.html)' посредством встроенного в Microsoft Office Word 2007 конвертера. Устранить возможную несовместимость с разными браузерами — одна из целей размещения проекта на различных тематических сайтах в Интернете.
Выбор Microsoft Word в качестве основного текстового редактора обусловлен стремлением обеспечить единый источник информации (single source), одинаково пригодный для: описания проекта в процессе его создания, формирования законченной статьи, её последующей распечатки, хранения в электронном виде, а также для публикации проекта в журналах и размещения на Интернет-сайтах.
Согласно федеральному закону РФ от 23.11.2009 № 261-ФЗ "Об энергосбережении и о повышении энергетической эффективности", с 2014 года возможно введение запрета на оборот ламп накаливания мощностью 25 Вт и более. Поэтому, проект представляет интерес скорее в образовательно–методическом, чем в перспективном плане (точка зрения автора).
8.3. Что следовало бы сделать иначе
В списке рекомендаций производителя МК по работе с АЦП имеется такой пункт: выводы АЦП, сконфигурированные как цифровые выходы, не должны переключаться во время процесса измерения. В данном устройстве рекомендация не соблюдается. Это связано с исторически сложившейся неправильной по сути, но удобной с точки зрения разводки макетной платы, конфигурацией выводов МК, изначально выбранной автором. Впрочем, на качестве стабилизации это не отражается.
Функция автоотключения использует ту же таблицу яркости, которая используется в других режимах. Поскольку таблица содержит участки с одинаковыми значениями, визуально на малых уровнях яркости автоотключение как бы затормаживается. Чтобы этого не происходило, требуется либо отдельная таблица яркости, либо исключение одинаковых значений, полученных из имеющейся таблицы.
Функция имитации присутствия хозяев не учитывает повторяющиеся последовательности чисел, возвращаемые подпрограммой RandomNumber8bit (об этом шла речь в конце раздела Описание отдельных процедур). Кроме этого, в текущей реализации случайные значения времени работы во включенном и выключенном состояниях, а также значение уровня яркости вычисляются на основе одной и той же последовательности. Лучшим решением было бы использование отдельных последовательностей для каждого из этих трёх параметров.
8.4. Дальнейшие усовершенствования
1. Заменить кнопки энкодерами. С точки зрения эргономики они предпочтительнее.
2. Добавить датчик освещённости, например на основе обычного светодиода. Попутно светодиод можно использовать как индикатор наличия напряжения питания. Если применить двух- или трёхцветный светодиод, можно отображать различные режимы работы устройства. Также светодиод можно использовать для подсветки органов управления. Наличие датчика освещённости позволит функции имитации присутствия хозяев работать только в тёмное время суток. Тем самым устранится напрасный расход электроэнергии в дневное время. Ещё одно применение светодиода в качестве фотодатчика — функция поддержки освещённости помещения на заданном уровне.
3. Реализовать плавное автоматическое включение в течение 30 минут через заданный интервал времени после выключения (имитация рассвета). Например, пользователь выключает светильник кнопкой в 23:00. На следующее утро в 07:30, когда зимой за окном ещё темно, светильник автоматически включается на минимальную яркость, а к 08:00 достигает полной яркости. Такая условная имитация "восхода солнца" позволит организму легче адаптироваться к моменту просыпания, в том числе снизить или даже полностью исключить неприятную резь в глазах, вызванную ярким освещением при включении обычной лампы в полной темноте. Как пример, данная идея реализована в световых будильниках Philips HF3475 и Medisana WL–450.
4. Внедрить беспроводной интерфейс, например на основе модуля ZigBee, для оперативного изменения параметров настройки и обновления прошивки (firmware) МК.
5. Уменьшить энергопотребление путём снижения напряжения питания схемы, скажем до 3,3 В. При этом также уменьшится нагрев балластного резистора. Кроме того, можно перейти на более экономичные МК, такие как ATmega164PA, имеющие к тому же меньшее время записи EEPROM (правда, ток записи у них больше). Это позволит сократить время готовности устройства к работе после подключения к сети за счёт меньшей ёмкости фильтрующего конденсатора.
6. Устранить нагрев диодного моста, изменив схемотехнику выходного каскада. Вместо диодного моста применить схему из пары транзисторов с объединёнными истоками (на каждый канал).
8.5. Перечень измерительных приборов и оборудования
При разработке и тестировании устройства использовался следующий инструментарий:
• Мультиметр — Uni–Trend UT71E TrueRMS AC+DC. Высокая точность этого прибора позволила не учитывать в расчётах погрешность измерений. В частности, при измерении постоянного тока отклонение показаний не превышает 0,15 % (по паспорту мультиметра);
• Осциллограф — С1–94;
• Автотрансформатор лабораторный (ЛАТР) — TDGC2–1A;
• Термометр цифровой — Velleman DTP3;
• Программатор — самодельный, с полной гальванической развязкой сигнальных цепей и шины питания. За основу был взят программатор из http://algrom.net/pgm.pdf.
8.6. Сведения об авторе и условия распространения
Автор проекта: Михаил Юрьевич Милославский, г. Москва. Адрес электронной почты:
Проект предоставляется на условиях "как есть". Автор не несет какой-либо ответственности за любые последствия, прямо или косвенно связанные с данным проектом.
Полная и обновляемая версия проекта размещена на домашней странице по адресу: http://mmiloslavsky.narod.ru.
Проект распространяется свободно для применения в некоммерческих целях. Исходный код может быть модифицирован без ограничений. При полном или частичном использовании материалов проекта ссылка на его домашнюю страницу обязательна. Коммерческое использование проекта допускается только после письменного согласования с автором.
Автор благодарит всех, кто помогал в работе над проектом: Н. В. Васильчикова, Е. В. Веселовацкая, И. Б. Екимов, С. В. Корнюхин, В. Ю. Милославский. Отдельная благодарность Леониду Ивановичу Ридико за ценные замечания по технической части проекта.
Поблагодарить автора можно с помощью формы, расположенной в нижней части домашней страницы (есть поддержка пластиковых карт). Номер счёта в платёжной системе Яндекс.Деньги 41001483658159.
Кликнув левой либо правой кнопкой мыши на заголовок статьи (или выбрав заголовок на сенсорном экране), можно открыть статью в новом окне или скачать её в виде сохранённой копии. Так сделано на тот случай, если со временем ссылка на оригинал окажется неработоспособной. Формат сохранённого файла и его размер сообщаются всплывающей подсказкой, которая появляется при наведении курсора мыши на обозначенный гиперссылкой заголовок статьи.
1. Dimmable Fluorescent Ballast // Atmel Corporation: ATAVRFBKIT / EVLB001 User Guide. 2007. URL: http://www.atmel.com/dyn/resources/prod_documents/doc7597.pdf.
2. Евсеев А. Стабилизированный регулятор мощности // Радио. 2002. № 4. С. 36.
3. Марков М. АЦП с интерфейсом RS–232 // Радио. 2005. № 2. С. 26. Файл ADC675.zip.
4. ГОСТ 13109–97. Нормы качества электрической энергии в системах электроснабжения общего назначения. М., 1998. 31 с. (Электрическая энергия. Совместимость технических средств электромагнитная). URL: http://www.elec.ru/viewer?url=/files/2013/08/20/gost-13109-97.doc (дата обращения: 30.11.2014).
5. Howell G. Five questions about resistors // EDN Network. 2006. 28 сент. Дата обновления: 24.11.2014. URL: http://www.edn.com/design/components-and-packaging/4321070/Five-questions-about-resistors.
6. Хоровиц П., Хилл У. Искусство схемотехники. Изд. 6-е. М.: Мир, 2003. 704 с.
7. Israelsohn J. Miller on edge: The role of Miller capacitance in nonlinear circuits // EDN Network. 2007. 29 мар. Дата обновления: 24.11.2014. URL: http://www.edn.com/electronics-blogs/other/4315997/Miller-on-edge-The-role-of-Miller-capacitance-in-nonlinear-circuits.
8. Hillman C. Common mistakes in electronic design // EDN Network. 2007. 14 дек. Дата обновления: 24.11.2014. URL: http://www.edn.com/design/components-and-packaging/4327843/Common-mistakes-in-electronic-design.
9. Колпаков А. Особенности применения электролитических конденсаторов // Схемотехника. 2000. № 2. С. 30.
10. The Do's and Don'ts of Using MOS–Gated Transistors // International Rectifier: Application Note AN–936. URL: http://www.irf.com/technical-info/appnotes/an-936.pdf.
11. TVS/Zener Theory and Design Considerations // On Semiconductor: Handbook. 2005. URL: http://www.onsemi.com/pub/Collateral/HBD854-D.PDF.
12. Characterization and Calibration of the ADC on an AVR // Atmel Corporation: Application Note AVR120. 2006. URL: http://www.atmel.com/dyn/resources/prod_documents/doc2559.pdf.
13. The Eye’s Response to Light // Lutron Electronics. 1997. URL: http://www.lutron.com/product_technical/pdf/360-408.pdf.
14. Гурский Д. А., Турбина Е. С. Вычисления в Mathcad 12. СПб.: Питер, 2006. 544 с. URL: http://storage.piter.com/upload/new_folder/978546900639/gurskij_turbina_vychislenija_v_mathcad_pdf.zip (дата обращения: 24.11.2014).
15. Four Great Reasons to Dim // Lutron Electronics: Why Dim? 2001. URL: http://www.lutron.com/dim.htm.
16. Frequently asked questions about dimmers // Lutron Electronics: Frequently Asked Questions. URL: http://www.lutron.com/product_technical/faq.asp.
17. Schweber B. LEDs move from indication to illumination // EDN Network. 2001. 2 авг. Дата обновления: 24.11.2014. URL: http://www.edn.com/electronics-products/other/4341928/LEDs-move-from-indication-to-illumination.
18. Кечиев Л. Н., Пожидаев Е. Д. Защита электронных средств от воздействия статического электричества. М.: Издательский Дом "Технологии", 2005. 352 с.
Ссылки по теме:
Lights And Electronics — http://www.epanorama.net/links/lights.html.
Light Dimmer Сircuits — http://www.epanorama.net/documents/lights/lightdimmer.html.
The Great Internet Light Bulb Book, Part I — http://members.misty.com/don/bulb1.html.
Lamp Experimental Data — http://alumni.imsa.edu/~ejohnson/light/.
30.11.2014, версия программы 2.14.05.
Добавлено: сведения о том, как восстановить значения настроек по умолчанию.
Добавлено: информация о том, что по умолчанию бит ebRandomOAH установлен.
Добавлено: заметка о том, что программировать МК нужно двумя файлами.
Добавлено: ссылки на рисунки высокого качества для печати.
Добавлено: многочисленные ссылки на Википедию и другие источники информации.
Добавлено: расшифровка использованных сокращений и аббревиатур.
Добавлено: обоснование выбора Microsoft Word в качестве основного текстового редактора.
Добавлено: ссылка на ГОСТ 13109–97 в редактируемом формате Microsoft Word.
Добавлено: архив предыдущей версии описания проекта от 30.12.2009.
Добавлено: значок сайта (favicon — Favorites Icon), взят из ресурса http://www.woweb.ru. Значок может не отображаться в некоторых браузерах.
Улучшено: форматирование текста, поддержка последних версий браузеров Google Chrome и Mozilla Firefox.
Улучшено: просмотр с мобильных устройств.
Улучшено: стилистика, пунктуация, и тому подобное (множественные, не меняющие суть правки текста, согласно информации, изложенной в Википедии).
Улучшено: вид математических формул и переменных.
Улучшено: в 1,7 раза сокращён объём данных, передаваемых браузеру при загрузке описания проекта.
Изменено: раздел Описание программы поделён на два подраздела.
Изменено: фон страниц (background) стал 5-процентный серый, для меньшей утомляемости глаз.
Изменено: кодировка сайта стала UTF–8, была Cyrillic(Windows).
Изменено: список литературы оформлен в соответствии с ГОСТ Р 7.0.5–2008.
Изменено: раздел История изменений преобразован из таблицы в текст.
Исправлено: некоторые рисунки перестали отображаться после поглощения сервисом uCoz хостинга сайтов Яндекс.Народ.
Исправлено: единица измерения в расчёте 434 · 21 = 9114 мкс (вместо мс).
Исправлено: названия столбцов и листов файла Mathcad_to_MCU_converter.xls в описании проекта.
Исправлено: ссылка на сохранённую копию статьи "Вычисления в Mathcad 12" в списке литературы.
Исправлено: большинство устаревших ссылок на внешние ресурсы.
Удалено: неиспользуемые ссылки внутри текста.
Справочно: при ежедневном использовании в среднем по 10 минут в сутки, диммер продолжает исправно работать без единого сбоя уже более 5,5 лет (не считая однократной замены лампы 3 года назад).
30.12.2009, версия программы 2.14.05.
Улучшено: описание проекта в соответствии с полученными отзывами после его публикации на различных сайтах в Интернете.
Добавлено: архив с описанием первой версии диммера.
Добавлено: дистрибутив среды разработки VMLab (см. раздел Файлы для скачивания).
Справочно: находясь в ежедневном использовании, диммер работает без сбоев более 1,5 лет.
12.10.2009, версия программы 2.14.05.
Изменено: описание проекта (дополнения, уточнения, корректировка).
Добавлено: листинг программы (файл dimmer.lis в архиве Dimmer2.zip).
Улучшено: знаки табуляции в коде программы заменены пробелами.
Исправлено: орфографические ошибки в комментариях программы.
16.10.2008, версия программы 2.14.04.
Удалено: неиспользуемый файл WrongReset.asm из архива с исходными кодами Dimmer2.zip.
09.05.2008, версия программы 2.14.04.
Незначительные доработки. Окончательный ввод диммера в эксплуатацию.
26.04.2008, версия программы 2.14.01.
Улучшено: за счёт оптимизации подпрограмм время выполнения основной программы уменьшено на 125 мкс.
26.04.2008, версия программы 2.13.03.
Исправлено: при включенном канале и активной функции ИПХ нажатие кнопки вызывало лишнюю запись в EEPROM.
26.04.2008, версия программы 2.13.02.
Исправлено: низкая скорость изменения яркости, если ее запомненное значение больше максимального (eLastBright > eBrightnessMax).
20.04.2008, версия программы 2.12.05.
Исправлено: скачкообразное изменение яркости во время регулировки, если её запомненный уровень равен eLastBright = 255.
19.04.2008, версия программы 2.12.03.
Изменено: минимальная яркость функции ИПХ установлена на 25 %.
17.04.2008, версия программы 2.12.02.
Исправлено: отсутствие паузы по достижении заданной яркости во втором режиме.
16.04.2008, версия программы 2.12.01.
Добавлено: отключение запоминания яркости.
14.04.2008, версия программы 2.11.01.
Добавлено: регулировка скорости изменения яркости при включении и выключении каналов.
08.04.2008, версия программы 2.10.05.
Исправлено: слишком быстрое нарастание яркости при первом включении после подачи электропитания. Введена задержка старта.
04.04.2008, версия программы 2.10.04.
Исправлено: некорректная инициализация порта А увеличивала ток потребления на 0,6 мА.
20.01.2008, версия программы 2.10.03.
Начало использования второй версии диммера.
07.2006.
Начало разработки второй версии диммера.
01.2006, версия программы 1.0.
Начало использования первой версии диммера.
08.2005.
Начало разработки первой версии диммера (без стабилизации яркости и многих других функций).
Основные:
Принципиальная схема (формат sPlan 5.0, размер 25 КБ; формат GIF 300 dpi, размер 46 КБ).
Спецификация (формат Microsoft Excel 2002, размер 26 КБ).
Исходные коды программы, прошивка МК, конфигурация среды VMLab (формат ZIP, размер 85 КБ).
Расчет балластного резистора, делителя напряжения, потребляемой мощности (формат Microsoft Excel 2002, размер 24 КБ).
Таблица значений псевдослучайной последовательности (формат Microsoft Excel 2002, размер 27 КБ).
Вычисление табличных значений яркости (формат Mathcad 13, размер 56 КБ).
Конвертер таблицы яркости из формата Mathcad в формат МК (формат Microsoft Excel 2002, размер 55 КБ).
Описания активных компонентов (формат PDF):
Защитный диод 1.5KE400CA (размер 205 КБ).
Диодный мост KBPC610 (размер 409 КБ).
Источник опорного напряжения LM4040 (размер 584 КБ).
Микроконтроллер ATmega16 (размер 5501 КБ, revision 2466P–08/07).
Транзистор 2SK2545 (размер 714 КБ).
Среда разработки:
Visual Micro Lab 3.14 (формат ZIP, размер 4218 КБ).