Предисловие
Для оплавления SMD компонетов существуют специальные машины, по сути инфракрасные печки с PID регулированием, позволяющие выдержать правильный профиль нагрева и охлаждения. Стоят уже недорого.
Но когда-то это было в 5 раз дороже. Поэтому моя первая версия для пайки smd была сделана из мини-печки (маленькая духовка). Для получения 250 градусов нужна мощная модель на 2 кВт и выше, а они не маленькие и соответсвенно дорогие. Купил бракованную по дешёвке, подключил термометр из тестера и вручную отслеживал рост температуры. В итоге плата перегревалась хоть печка и имела вентилятор, но при комбинированном нагреве воздух плюс инфракрасное излучение слишком большая инертность — много энергии уходит на нагрев воздуха. Да и размеры такие, что на столе ей не место. Поэтому прямой нагрев предпочтительнее.
Был вариант сделать стол из старого утюга. Но там большая мощность. Маленький плоский без дырок старый утюг еще поискать. Реле для него дороговато. Основание желательно из аллюминия. Тут на помощь снова пришла Азия.
Появились маленькие 12*7 см маломощные 300 Вт аллюминивые греющие пластины. Позиционируются для разбрки LED лампочек. То что нужно.
Устройство паяльного стола
Пройдемся по списку компонентов. Итак, в основе аллюминиева пластина со встроенным ТЭН. Для управления подойдет любое маломощное реле, т.к. 300 Вт это не больше 1.5 А. Циклов вкл/выкл при PID регулировании много, нагрузка резестиваная, поэтому твердотельному преимущество. Температуру будем измерять простым термистором NTC, которые благодаря 3Д принтерам сейчас есть в нужном нам диапазоне до 300 градусов — 100к 3950. Раньше предел был 150-200 градусов и приходилось переходить на К термопару с усилителем. Резистор R2 должен быть по возможности с минимальным ТКС (для точности 1% на 100 гр нужно TCR<100ppm/K). Хорошо бы показывать что намерили на простеньком двухстрочном LCD 1602. Для экономии подключим его напрямую без I2C драйвера. Даже контрастностью и LED подсветкой будем управлять через ШИМ напрямую от контроллера благо потребление мало. На всякий случай поставим резистор R4 на LED так чтобы ток не превышал 15 мА, а напряжение 3.5 В (в LCD уже есть один резистор на 100 Ом, в крайнем случае вместо R2 можно и перемычку запаять но не превышать PWM более 100). Для оповещения о выходе на номинальную температуру и об окончании процесса используем пассивную пищалку с малым током потребления. Громкость подберем при помощи R3. Для питания схемы любой понижающий изолирующий блок питания на 5В. Предпочитаю моноблок из-за большей безопасности. Ну и кнопочки чтобы выбирать режимы.
Режимов работы предполагается два:
- Автоматическая кривая оплавления
- Предварительный нагрев на выставленную температуру
Реализовывать логику будем на классической ATMEGA328/168/88 в зависимости от того что есть в наличии и размера будущей прошивки. Преимущество ATMEGA — высокий максимальный ток выходов до 40 мА, поэтому можно напрямую управлять реле, пищалкой и LED подсветкой без использования промежуточных транзисторов.
Выводы ATMEGA выбирались таким образом, чтобы можно было вместо разводки своей собственной платы реализовать то же самое на arduino mini навесным монтажом. На своей плате кварцевый резонатор исключил, т.к. схемка простая и вполне достаточно внутреннего 8 МГц, а значит программировать будем через AVR ISP. Но на всякий случай добавил на гребенку TX, RX, DTR и схему сброса R5, C5 чтобы иметь возможность безопасно прошивать через UART предварительно записав загрузчик на 8 МГц.
Разводка платы
Целью было разместить все компоненты на одной двухсторонней плате чтобы было проще крепить это внутри самодельного корпуса. Часть 220 В отделена от низковольтной части прорезью и дополнитально будет закрываться пластиковой накладкой с лицевой стороны. Органы оповещения и управления в том числе выключатель питания на одной стороне, логика на другой. R2 выведен на переднюю сторону подальше от высокой температуры чтобы снизить требование к ТКС. Также вперед выведен разъем AVR IPS чтобы вносить изменения без разборки всего корпуса.
После заказа решил сделать укороченную версию, т.к. всё что длинее 10см стоит уже не дешево. Эта версия нравится мне гораздо меньше. Крепление не удобное, выключатель придется выносить, разъем ISP на задней стенке и 220 ближе к кнопкам, но схема таже. Обе версии выложил.
Корпус
Хотелось бы иметь железный корпус под этот проект из-за наличия силовой части. Мы контактируем непосредственно с металлической пластиной куда подведено 220 В. С точки зрения безопасности пластина должна быть заземлена, как и весь корпус. Поэтому делать его буду из металлического направляющего профиля ПН 50х40 мм под гипсокартон. Доступно, дёшево, практично. Нужны лишь ножницы по металлу чтобы сформировать короб. В верхний проем встанет нагревательный элемент, а нижний можно закрыть декоративной планкой. Напечатаю её на 3Д принтере вместе с ножками. В боковой части делаем прорезь под плату и винтами прикручиваем её. На плате есть специальное металлизированное отверстие рядом с PE проводником. Через него и заземляем корпус. В случае попадания фазы на корпус сработает автомат, а в случае утечки сработает УЗО. Оно же у нас есть в щитке?
Из обнаруженных недостатков отмечу неудобство установки платы внутрь такого корпуса. По сути нужно собирать его после выреза всех отверстий и установки платы. Вырезать ровные окна под экран, выключатель и кнопки было муторно. Нужно было как и планировал изначально просто вырезать одно большое отвестие и закрыть всё распечатанной платиковой накладной. Но в целом высокая температура и большая надежность такого корпуса стоит мучений. На правом скрине 4 ножки, 4 кнопки и планка-держатель кнопок. Можно обойтись и без 3д принтера. Кнопки есть с длинными толкателями. Под них просто высверлить отверстия. В качестве ножек прикрутить крышки от платиковых бутылок.
Офтоп. Кстати, именно при тестировании этого корпуса обнаружил что в одной из старых розеток заземляющий провод был кинут на фазу. Прожил целых 2 года в постоянных сомнениях откуда на корпусе компьютера ощущается потенциал. Оказалось что в старую двухпроводную систему поставили новую евророзетку, а в розетке кинули перемычку не на ноль, а на фазу. Хорошо, что перед включением прибора решил снять все сомения. Теперь всё хорошо.
Сборка
Пришло всё кроме нагревательного элемента, который по ошибке доставили в другой город. Плату запаял. Почти всё идеально встало кроме пищалки. У меня в наличии был 12 мм, а разводка под 9, поэтому припаял с обратной стороны.
Есть два варианта установки микропроцессора (МК).
Первый. Выпаять из старой ардуинки. Перед этим не забыть её перепрошить на внутренний 8 МГц, т.к. фьюзы не дадут ей запуститься без внешнего кварца. Этот вариан позволяет обойтись без программатора, только UART.
Второй. Если МК покупной, то нужен программатор — паяем и шьем на плате по AVR ISP 10 pin. Самый простой и дешевый программатор USBasp тоже есть в конце перечня.
Программа
Базовая прошивка делается на Arduino Framework в PlatformIO. Обращаю внимание на различные варианты в файле platform.ini где основной — на внутреннем кварце 8 МГц. Есть варианты прошивки и для Arduino для варианта, если всё собрать навесным монтажом. Ссылка на репозиторий в общем перечне. На начало марта 22 года готова болванка 7,5 кБ умеющая читать и отображать температуру с датчика и при помощи PID управлять реле для достижения уставки. Кнопки меняют уставку, запускают и останавливают нагрев. Меню и автоматический режим добавлю после тестирования основной функциональности.
Из внешних библиотек только LiquidCrystal и то мне не нравится, что для неё нужно подключать еще и wire, хоть управление экраном идет напрямую без i2c. Зато контрастность и яркость управляется через PWM и это нестандартное но рабочее решение.
PID самый простой. Пробовал разные библиотеки — не понравилось. Куча лишнего и работает непонятно как и настроить проблема. Сделал по класике. Вывел каналы на терминал и в симуляторе быстро настроил. Раскачка пропала при следующих коэффициентах Kp = 0.1, Ki = 0.1, Kd = 0.01. Также важна установка лимитов. С ними стабилизация происходит значительно быстрее, но в библиотеках что я встречал их либо нет, либо непонятно как их рассчитывать. В конечном итоге, из-за очень большого инерции темодатчика и на порядок разной скорости нагрева и охраждения, ПИД используется как лишь как вспомогательная система.
Основная логика поддержания температуры. Включаем нагрев. Температура начинает очень быстро расти, но датчик запаздывает. Поэтому отключаем нагрев задолго до достижения уставки. Именно этой величиной и управляет ПИД. Значение ПИД снижается при достижении уставки. Поэтому в непосредственной близости от уставки эффективно работает задержка на включение нагрева. Цикл охлаждения в 12 раз длинее длительности цикла нагрева. За счет этого компенсируется энертность датчика температуры. Плюс используется преимущество твердотельного реле в частых переключениях.
Тестирование
Пока жду комплектующие подключил экран, пищалку и тестовое сопротивление к arduino mini и погонял настройки экрана. Упраление контрастностью и подсветкой экрана через PWM работает отлично. Температура выводится 26 +-3 градусов на сопротивлении 100 кОм. На резисторе 200 Ом показывает 280 +- 10 гр. Добавил в прошивку сглаживание, стало +-3 гр. Пищалка пищит. Кнопки работают. PID бодро щелкает реле. Сначала медленно вкл/выкл, потом доходит до постоянно вкл, а при достижении уставки снова переходит в режим вкл/выкл. Чтобы не раскачивался пришлось отказаться от библиотеки и реализовать свой классический PID, который легко настроить на симуляторе. NTC преобразование тоже сделал своей по формуле.
Пришли основные комплектующие. Собрал. Железо заработало, т.е. плата спроектирована без серьёзных ошибок. Прошивается как по ISP, так и по UART, схема сброса работает. Реле срабатывает. Термистор отрабатывает достаточно быстро. Для лучшей точности и быстродействия перешел на кусочно-линейную интерполяцию по 60 точкам с усреднением по 64 измерениям. Теперь можно будет сделать точечный тюнинг кривой для учета тепловых потерь и места крепления датчика. Для этого понадобится внешним эталонным термометром измерить температуру на поверхности и пересчитать таблицу. Исходную таблицу можно получить из онлайн калькулятора (ссылка в дополнительном списке).
Наконец приехал нагревательный элемент и собрал всё в корпусе. Первый пуск показал следующее.
Во-первых, нагрев идет очень быстро, а остывание на порядок медленнее. Во-вторых, система обладает большой инерцией. При уставке в 100 градусов отключение нагрева по ПИД происходило при 105, а температура по инерции датчика улетала после этого до 160 после чего очень долго опускалась обратно до 100 чтобы снова улететь к 140. После изменения настроек ПИД Kp = 0.4, Ki = 0.7, Kd = 0.1 откючаться стал при 100, но всё равно улетал высоко. Применять ПИД в качестве источника управляющего сигнала напрямую оказалось плохой идеей. Пришлось вводить превентивное отключение до достижения уставки и в целом разную логику на включение и выключение реле.
В третьих, оказалось, что точности в 1 градус моей функции расчета температуры недостаточно, т.к. из-за инерции нагрев на 1 градус требует несколько секунд и система успевает разограться. Изменил функцию так чтобы она выдавала дециградусы. Сразу стало лучше — отклонения не превышают пары градусов.
В четвертых, управлять нагревом такого маленького, но мощного элемента при помощи обычного реле нереально. Так что не зря поставил твердотельное. Тиристор без проблем включется у меня всего лишь на 100 мс.
В пятых, остывание реально медленное. Поэтому изначально конструкция корпуса предполагала возможность сдвинуть нагретую плату на расположенный рядом через воздушный зазор широкий метеллический борт. Но возможно, стоит добавить вентилятор.
В шестых, установка датчика в нишу, куда подходят провода нагревательного элемента обеспечивает быструю реакцию, да и все провода в одном месте, а внешний инфракрасный датчик показывает тоже самое, т.е. точка оптимальна.
Настройка
Для выдерживания профиля нагрева необходимо придерживаться требуемой скорости нагрева. Настроить существующий код у меня не получилось. Поэтому пойдем от эксперимента. Включил реле и нарисовал график роста температуры — синим. Из него рассчитал скорость — оранжевым. Во-первых, видна задержка около 6 сек от момента включения реле до начала роста температуры. Во-вторых, Скорость нагрева падает примерно от 6 до 1 градуса в сек. Значит на вход ПИД нужно подавать температуру, которая ожидается через 5 сек нагрева. Зная скорость мы можем её рассчитать. T1 = T0+v(T0)*5, где скорость получим линейной интерполяцией v(T0) = 6 — 0,02*T0. Итого T1 = 0.9T0 + 30.
После долгих мытарств рабочая схема предполагает подачу на вход PID регулятора не измеренной, а предполагаемой температуры. Эта температура рассчитывается отдельно для включенного и выключенного реле. При включенном увеличивается, при выключенном уменьшается. Чем точнее расчет, тем лучше регулирование.
Кривая оплавления
Добавил в прошивку функцию, которая меняет уставку так, чтобы достичь заданной температуры за заданное время. После этого достаточно скормить этой функции последовательные значения температуры и времени, соответствующие следующим состояниям: старт, преднагрев, смачивание, пайка, удержание, охлаждение. Первая и моя основная кривая для Sn63Pb37 описывается так.
Зона Свинец (Sn63 Pb37)
Разогреть до 150 °C за 60 с
Замочить от 150 °C до 165 °C за 120 с
Паять Пиковая температура от 225 °C до 235 °C, удержание в течение 20 с.
Охлаждение -4 °C/с или естественное охлаждение
Есть еще вторя кривая SAC305
Зона Без свинца (SAC305)
Разогреть до 150 °C за 60 с
Замочить от 150 °C до 180 °C за 120 с
Паять Пиковая температура от 245 °C до 255 °C, удержание в течение 15 с.
Охлаждение -4 °C/с или естественное охлаждение
На графике выше первый пробный нагрев. Видно что скорости не хватает чтобы достичь температуры пайки за 10 сек. У меня паяльный стол открытый — охлаждение эффективное. Планирую использовать крышку-колпак наподобие тех, что используются для подачи еды, опять же скорее всего из обрезков профиля для гипсокартона. Ну а пока просто увеличу время нагрева на последнем этапе.
Последнее обновление 13.04.2022 в 13:56