Описание устройства
Однажды в моём распоряжении оказался корпус от "паяльной станции" советских времён. Долгое время он валялся без дела, пока мне не понадобился регулируемый источник питания для 12/42/220-вольтовых паяльников. На передней панели корпуса находятся:
- стрелочный индикатор температуры жала паяльника;
- термопара, которой касаются жалом паяльника для определения температуры;
- розетка для подключения паяльника;
- ручка переменного резистора регулятора температуры;
- светодиод;
- тумблер питания;
- клемма заземления паяльника.
Порывшись в закромах, нашёл подходящий трансформатор (ТПП 289-220-50) и оптосимистор (S202S02). Чтобы не переделывать переднюю панель, имеющийся переменный резистор на 4,7 кОм должен выполнять своё прямое назначение - регулировать температуру. После некоторых раздумий было решено отказаться от схемы на жёсткой логике, и уж тем более, от транзисторной рассыпухи. Для управления симистором используется микроконтроллер ATtiny13. Он имеет в своём составе АЦП, который и будет "следить" за положением движка переменного резистора.
Принципиальная схема регулятора проста и не содержит каких-либо хитростей:
Транзистор VT1 служит для формирования синхроимпульсов, необходимых для корректного управления симистором. На базу транзистора подаётся выпрямленное пульсирующее напряжение частотой 100 гц (верхняя эпюра на графике), на коллекторе транзистора и выводе 6 микроконтроллера DD1 формируются импульсы положительной полярности с периодом 10 мс (нижняя эпюра на графике):
Используемый симистор S202S02 не позволяет реализовать фазоимпульсное регулирование напряжения (его нельзя открыть в произвольный момент времени), поэтому единственный выход - "выкусывать" часть полупериодов напряжения на нагрузке.
Строго говоря, выкусывать нужно таким образом, чтобы всегда получалось чётное число полупериодов. В противном случае неизбежно образование в потребляемом токе постоянной составляющей, способной вызвать нежелательное подмагничивание магнитопроводов трансформаторов и двигателей, подключённых к той же сети.
Но это теория, на практике же, паяльник мощностью 40 ватт (или лампочка в подъёзде, включённая через диод) трансформаторную будку вместе с силовым трансформатором сильно не намагнитят. Поэтому в текущей версии программы микроконтроллера разрешено появление нечётного количества полуволн.
Для примера зададимся числом полупериодов = 100. Тогда удалив один полупериод, мы понизим мощность паяльника на 1%, удалив 50 полупериодов - понизим мощность на 50%. Но 50% можно получить и по другому, выкусывая каждый второй полупериод! Также можно найти кратные значения и для других комбинаций полупериодов. Чтобы не считать каждый раз всю таблицу вручную, на языке VBA (Visual Basic for Application) из состава Microsoft Excel была написана вспомогательная программа, в которой можно задаться количеством полупериодов, шагом "выкусывания", а также разрешить или запретить нечётное количество полуволн:
В текущей версии программы микроконтроллера используется таблица из 100 полупериодов с шагом 2. Нечётное количество полупериодов - разрешено. При этом получается 51 градация мощности, что вполне удобно. Большее количество не имеет смысла, т.к. невозможно уверенно выбрать ту или иную ступень при помощи переменного резистора.
Соответствие синхроимпульсов на выводе 6 микроконтроллера (верхняя эпюра) и импульсов управления симистором на выводе 3 микроконтроллера (нижняя эпюра) показано на рисунке (горизонтальный масштаб - 5 мс на деление; уровень мощности - 50%):
Как видно из графика, длительность импульсов управления равна 5 мс. Этого вполне достаточно не только для уверенного открывания симистора, но и для свечения светодиода HL1, расположенного на передней панели устройства. Напряжение на нагрузке в случае уровня мощности 50% имеет вид однополупериодного выпрямления:
Программная часть
Программа для микроконтроллера ATtiny13 написана на языке Си в среде разработки CodeVisionAVR 1.25.5. Бесплатная версия компилятора имеет ограничение по размеру компилируемого кода (hex), в 2 кБ. Поскольку объём памяти применяемого микроконтроллера равен 1 кБ, то бесплатность компилятора является большим плюсом. Для редактирования исходника необходимо запустить (открыть) файл проекта "copper.prj".
Вся программа состоит из четырёх функций:
- void main(void);
- interrupt [EXT_INT0] void ext_int0_isr(void);
- unsigned char read_adc(unsigned char adc_input);
- void open_simistor (void).
Рассмотрим назначение каждой функции подробнее.
- void main(void) - основная функция в любой программе на языке Си. После включения микроконтроллера первой начинает выполняться именно эта функция. Поэтому в её начале находится инициализация всех необходимых составляющих микроконтроллера (таймеры, АЦП, порты и т.д.), а также чтение сохранённых в EEPROM данных.
- interrupt [EXT_INT0] void ext_int0_isr(void) - функция обработки прерывания. Отправной точкой работы программы являются прерывания, инициируемые нарастающим фронтом импульсов на выводе 6 микроконтроллера. После наступления прерывания, микроконтроллер прекращает все текущие действия и переходит к выполнению кода, размещённого в данной функции. Условно, функция состоит из трёх частей:
1) определение положения движка резистора R3 (функция unsigned char read_adc(unsigned char adc_input));
2) проверка условий открытого/закрытого состояния симистора;
3) управление симистором (функция void open_simistor (void)).
- unsigned char read_adc(unsigned char adc_input) - функция выполняет запуск преобразования и чтение результатов преобразования АЦП, т.е. фактически здесь определяется положение движка переменного резистора R3. Поскольку в данной задаче не требуется большого разрешения, то используются только старшие 8 бит 10-битного результата. Частота тактирования АЦП, напротив, выбрана большой - 600 кГц. Результат преобразования АЦП используется для выбора нужной ячейки двумерного массива flash unsigned char cycles[52][2], в котором находится таблица скважностей всего диапазона регулировки мощности.
- void open_simistor (void) - функция управления симистором. Определяет задержку и длительность импульса открывания симистора. Единственное, что нужно прокомментировать в этой функции - строку " if (mode == 0) delay_us(2000); ".
Дело в том, что во время первичных испытаний, когда вся конструкция была собрана на "соплях", и провода были длинными, наблюдалось нестабильное открывание симистора. Это происходило только при работе симистора под нагрузкой и только при напряжении питания 15 вольт (ступень для 12-ти вольтового паяльника). Нормальная работа обеспечивалась задержкой импульса открывания симистора (нижняя эпюра) относительно синхроимпульса (горизонтальный масштаб - 2 мс на деление; уровень мощности - 100%):
Включение и выключение задержки реализовано через положение движка переменного резистораR3. Если ПРИ ВКЛЮЧЕНИИ питания движок находится в крайнем левом положении (нижнем по схеме), то в EEPROM микроконтроллера записывается флаг признака включения задержки. Если движок резистора в момент включения находился в крайнем правом положении (верхнем по схеме), то в EEPROM микроконтроллера пишется флаг признака выключения задержки. Когда движок резистора находится в любом другом промежуточном положении (а так оно, чаще всего, и бывает), то данные из EEPROM просто переписываются в ОЗУ микроконтроллера. Таким образом, выполнено запоминание необходимого режима работы.
Однако после окончательного монтажа устройства сбои в работе симистора исчезли. На всех ступенях напряжения задержка импульса открывания симистора не требуется. Тем не менее, возможность включения задержки было решено оставить.
Программирование микроконтроллера
Автор программировал микроконтроллер из среды разработки CodeVisionAVR 1.25.5. Выполнив пункт меню "Settings/Programmer" выбирают тип программатора Kanda Systems STK200+/300:
Для разового программирования достаточно спаять простейший переходник на LPT порт компьютера:
Длина соединительных проводов не должна превышать 100 мм. Удобнее всего, собрать программатор в вилке DB-25, просверлив в корпусе отверстия под выводы панельки. Саму панельку вставляют выводами в отверстия и приклеивают к корпусу. Из вилки выводят шнур питания микроконтроллера. Получается удобная и законченная конструкция. Питание микроконтроллера можно взять от блока питания компьютера (красный провод в любом разъёме).
Для запуска программатора открывают файл проекта "copper.prj" из папки "COPPER", затем выполняют пункт меню "Tools/Chip Programmer":
Все необходимые настройки программатора импортируются из файла проекта автоматически. Остаётся только включить питание микроконтроллера и нажать кнопку "Program All".
В случае использования другого программатора необходимо воспользоваться файлом "copper.hex" из папки "COPPER" и установить необходимые "перемычки" (Fuse Bits) в соответствии с рисунком.
Также следует обратить внимание на фьюз SPIEN, который обязательно должен быть установлен = 0. В противном случае, запись программ через SPI станет невозможна!
Конструкция и детали
Абсолютно формальный раздел, т.к. всё зависит от имеющихся в распоряжении деталей и средств. Микросхему стабилизатора К142ЕН5А можно заменить на 78L05, вместо оптосимистора S202S02 вполне подойдёт какой-нибудь BT-138 + твердотельное оптореле типа PVT412. Если не предполагается использовать низковольтные паяльники, то трансформатор Т1 можно взять маломощный, с напряжением вторичной обмотки 7 - 12 вольт. Кстати, распайка трансформатора Т1 для получения необходимых напряжений:
Печатная плата не разрабатывалась. Вся схема смонтирована на куске монтажной платы:
Вид на монтаж блока слева:
Вид на монтаж блока справа:
Вид на монтаж сверху:
Общий вид устройства:
АРХИВ:Скачать