Рефераты. Разработка устройства автоматического регулирования света на микроконтроллере

Включение с интервалом 10 мс лампы мощностью 60 Вт с сопротивлением нити 882 Ом при напряжении 12 В создаст ток всего 12 / 882 = 14 мА. Такой малый ток не способен заметно повлиять на сокращение срока службы лампы, создать помехи, и т.п.

Ввиду разветвлённости алгоритма основной программы его наглядное изображение в графическом виде не приводится, т.к. будет затруднительно для восприятия. Отдельные процедуры основной программы описаны далее. Облегчить понимание логики работы призваны комментарии к программному коду.

Функция ИПХ (Имитация Присутствия Хозяев) использует в качестве счётчика времени во включенном и выключенном состоянии отдельную процедуру. Имеющуюся процедуру TurnOffTimeoutCh1 использовать нельзя. Тому есть три причины. Во-первых, она строго индивидуальна для каждого канала. Во-вторых, её модификация потребовала бы слишком больших усилий (понадобилось бы большое количество условных переходов). В-третьих, если продолжительность включенного или выключенного состояния составляет нечётное число, скажем, 3 минуты, то пришлось бы делить его поровну между двумя процедурами и иметь дело с дробными числами. Вариант, когда процедура выполняется только в одном из каналов, тоже не подходит, т.к. принято, что программный код обоих каналов одинаков (для удобства модификации и подсчёта времени выполнения программы).

В функции ИПХ практически везде опрашивается бит лишь одного (первого) канала. Это допустимо благодаря идентичности каналов, а также благодаря тому, что в данном режиме каналы управляются синхронно.

В момент включения функции ИПХ устанавливаются биты ebPowerState. Это сделано на случай пропадания сетевого напряжения в момент включения. Таким образом, при восстановлении напряжения работа функции будет продолжена.

В функции автоотключения процентное значение, на которое уменьшается яркость, умышленно ограничено интервалом от 10 до 90%. Такой диапазон хорошо подходит для визуального восприятия. Кроме того, уменьшение яркости менее чем на 10% незаметно.

Для определения значения регистра rSoftOffBrightChХ, хранящего величину уменьшенной яркости с учётом заданного пользователем процента, в целях ускорения программы используется табличный метод (таблица PercentageTable). Для каждого заданного пользователем значения процента 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, объединять их воедино нельзя. Вместе они предотвращают включение канала, если во время его выключения по истечении времени непрерывной работы был сбой в электросети.

Дребезг контактов кнопок SB1 и SB2 устраняется благодаря тому, что основная программа опрашивает их состояние каждый полупериод, т.е. каждые 10 мс. Устранению дребезга также способствует наличие внутреннего триггера Шмитта и линии задержки на входах МК.

Обработка состояния кнопок построена таким образом, что так называемое вторичное действие не поддерживается. Пример: в выключенном состоянии удерживание кнопки приводит к включению канала во втором режиме. Если продолжать удерживать кнопку, то после того как канал включился, его яркость не начнёт изменяться, как это обычно происходит при удерживании кнопки и включенном канале. Яркость можно будет изменить только после отпускания кнопки и повторного её удерживания. Такой подход более эргономичен, к тому же он позволяет исключить ошибки, связанные с детектированием нажатия и удерживания кнопок в зависимости от функции, режима, и текущего состояния устройства.

Реализация обработчика кнопок основана на анализе значения регистра rButtonХHoldTime, в котором хранится длительность удерживания кнопки в нажатом положении, а также на сравнении его значения с константой cButtonOnHoldSense, определяющей временной порог, начиная с которого нажатие на кнопку распознаётся как удерживание. Этот порог равен 1 секунде. В текущей версии он определён в коде программы, т.е. не может быть изменён конечным пользователем.

Регистр rButtonХHoldTime может иметь четыре значения:

1) rButtonХHoldTime = 0 (кнопка не нажата);

2) 0 < rButtonХHoldTime < cButtonOnHoldSense (кнопка нажата);

3) rButtonХHoldTime = cButtonOnHoldSense (кнопка удерживается);

4) rButtonХHoldTime = 255 (кнопка остаётся в нажатом положении после удерживания).

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

Подпрограммы чтения и записи EEPROM работают только с первыми 256 байтами. Это упрощает адресацию, т.к. старший регистр адреса всегда равен нулю и не используется.

Если в момент обращения к EEPROM идёт обработка предыдущего запроса, то подпрограмма чтения дожидается его окончания. Подпрограмма записи в аналогичной ситуации немедленно прекращается. Это вполне допустимо, поскольку задержка записи даже в несколько десятков миллисекунд не нарушает работу основной программы, и не заметна для пользователя.

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

В основе подпрограммы генерации псевдослучайного числа RandomNumber8bit лежит алгоритм [6, раздел 9.33 "Последовательности, генерируемые регистрами сдвига с обратными связями"]. Используется программно реализованный 8-ми разрядный регистр сдвига с отводами от 7-го, 5-го, 4-го и 3-го разряда, над которыми производится логическая операция исключающее или (XOR, в МК соответствует команде EOR).

Входными данными подпрограммы является seed – число, определяющее начало псевдослучайной последовательности. Это число должно быть

отлично от нуля. В противном случае оно заменяется числом 113. Почему именно 113? Потому что это первое число от начала списка, удачно располагающееся с точки зрения возвращаемого результата, умноженного на два. Первоначально seed генерируется путём измерения сетевого напряжения в момент подключения устройства к сети, что гарантирует действительно случайный характер seed.

Для повышения скорости выполнения подпрограммы и сокращения количества кода содержимое регистра SREG не сохраняется, хотя подпрограмма изменяет состояние некоторых его флагов.


2.6 Выбор, описание и расчеты элементной базы


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

Полный перечень использованных компонентов (спецификация) прилагается (Приложение В). Также прилагаются описания активных компонентов, задействованных в схеме (Приложение Г).

а) Диодный мост

Применение диодного моста VD2, рассчитанного на ток 6 А, для работы с небольшим током нагрузки (максимум 0,55 А) объясняется тем, что лампы иногда перегорают во время работы. Возникающий при этом импульс тока амплитудой более 10...20 А способен повредить одноамперные мосты, такие как КЦ402 или КЦ405.

Ещё одна причина большого запаса по току – это гораздо меньшая степень нагрева моста. Впрочем, полностью устранять нагрев не имеет смысла, т.к. корпус устройства всё равно немного нагревается от ламп, особенно когда они включены на максимальную яркость.

По причине, указанной в разделе Защита от превышения сетевого напряжения, диодный мост должен быть рассчитан на обратное напряжение не менее 600 В.

б) Блок питания

Источник опорного напряжения

Особенностью схемы является использование для питания МК не обычного стабилитрона, а интегрального источника опорного напряжения DA1 параллельного типа. Как уже отмечалось, это позволяет отказаться от отдельного ИОН и снизить потребляемый ток. Помимо этого, если напряжение на выходе параллельного ИОН повысится по каким-либо причинам, возникшим со стороны шины питания схемы, это не приведёт к нарушению стабилизации, а лишь увеличит ток через ИОН. Это общая особенность параллельных стабилизаторов напряжения [3].

Нерегулируемый двухвыводной ИОН выбран специально – нет необходимости подбирать и устанавливать два дополнительных высокоточных резистора. Для стабильной работы данного ИОН не требуется конденсатор с низким эквивалентным последовательным сопротивлением (ESR), что тоже является плюсом.

Выбираем ИОН серии LM4040 с классом точности 1%.

в) Балластный резистор

Для гашения избытка сетевого напряжения, поступающего на вход ИОН, используется балластное сопротивление, образованное резисторами R1 и R2. Принцип действия ИОН параллельного типа совпадает с обычным стабилитроном, поэтому для расчёта гасящего резистора можно применить классическую формулу:


R = (Uвх – Uст) / (Iн + Iст),                                                            (2.1)


где    Uвх – входное (ограничиваемое) напряжение, снимаемое с выхода диодного моста;

Uст – напряжение стабилизации стабилитрона;

Iн – ток нагрузки;

Iст – ток стабилитрона.

Изменим формулу с учётом падения напряжения на двух диодах диодного моста:


R = (Uвх – 2•Uд – Uст) / (Iн + Iст).                                                         (2.2)


Падение напряжения на предохранителе не учитываем, т.к. оно составляет всего 0,2 В при максимальной нагрузке. Добавив коэффициент, учитывающий разброс сопротивления резистора, получаем конечную формулу:


R = [(Uвх – 2•Uд – Uст) / (Iн + Iст)] • Кr (2.3)

Сопротивление резистора должно быть, с одной стороны, достаточно низким, чтобы обеспечить минимальный ток стабилитрона при максимальном токе нагрузки и минимальном напряжении сети, но, с другой стороны, достаточно высоким, чтобы при максимальном напряжении сети и минимальном токе нагрузки не превысить максимально допустимый ток стабилитрона.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.