Прежде чем начать
Прежде чем читать эту статью, рекомендуем вам ознакомится со следующей теорией:
Что такое паяльная станция
Паяльная станция — специальное оборудование предназначенное для осуществления пайки. В нашем случае - это устройство, которое обеспечивает стабилизацию температуры паяльника, термофена или любого другого нагревательного прибора, работающего от сети 220В.
Максимальная температура паяльника без терморегулирования составляет около 400 градусов. Для пайки SMD компонент это слишком много. Есть риск перегреть компоненты. Рекомендуемая температура составляет 250-300 градусов. Снизить температуру паяльника можно с помощью регулятора мощности — обычного диммера на 220В. Но при этом, вы снизите максимальную температуру паяльника, а в момент пайки, паяльник начнёт остывать и температура может упасть ниже 200 градусов. Олово перестанет плавиться, и пайка станет некачественной.
Более правильный метод — автоматическая регулировка температуры жала паяльника. Для работы такой схемы необходима обратная связь. Обычно используется термопара К типа для снятия температуры жала. Конец термодатчика должен быть зафиксирован на самом жале, максимально близко к кончику жала. Это несложно сделать на медном жале, просверлив отверстие и зажав конец термопары. Далее прибор должен считывать температуру термопары и регулировать мощность нагревателя. При этом, если жало начнёт остывать, то на паяльник будет подана большая мощность, а если наоборот, то меньшая и он начнёт остывать. Такой прибор и будет описан в этой статье.
По-большому счёту, прибор может управлять не только паяльником, а также термофеном, со встроенным вентилятором. Купить такой можно на aliexpress.
Он уже содержит внутри термопару К типа, а также вентилятор. Перейдём к требованиям к прибору.
{product id=40}
Постановка задачи и требования к паяльной станции
Основные требования к прибору.
Компактный размер
Встроенный блок питания на 220В
Возможность определения типа нагревателя (2 прибора, паяльник и фен)
Цифровая регулировка мощности нагревателя на основе PID регулятора
Возможность управления паяльником постоянного напряжения до 24В
Возможность управления вентилятором термофена (4 скорости)
Управление нагрузкой целыми полуволнами, с учётом перехода через ноль (меньше помех)
Программная защита от перегрева нагревателя
Индикатор температуры и скорости вентилятора
Управление тактовыми кнопками
Защита от ложных срабатываний управляющего симистора
Максимальный ток нагрузки 3 А, что составляет 600 вт
Подбор компонентов для изготовления прибора своими руками
Компоненты для управления нагрузкой 220В
В статье Как МК может управлять приборами 220В вы можете подробно прочитать какие компоненты подходят для нашей задачи. Так как паяльник, фен и другой нагревательный прибор является очень инерционной нагрузкой, то будем управлять им методом полных полупериодов.
Подберём симистор для управления нагрузкой. Максимальная средняя мощность нагрузки составляет для паяльника около 100Вт, а для паяльного фена на 500 градусах около 400Вт (максимальная мощность около 700Вт, при этом фен достигает 800 градусов). Выберем обычный симистор (не логический), так как он более защищён от самопроизвольного открытия. BT139-800 — выбранный ключ. Из datasheet видно, что он может без радиатора управлять нагрузкой до 400Вт.
Так как мы выбрали не логический симистор, то для управления будем использовать оптосимистор со схемой перехода через ноль - MOC3041. Схему будем использовать из datasheet. Также установим снаббер согласно datasheet. Итоговая схема управления.
Отметим,
что на всякий случай, следует не включать
в одну розетку электродвигатель и
паяльную станцию! Симистор может
самопроизвольно открыться. Паяльнику
в этом случае ничего не будет. А вот фен
паяльный может сгореть.
Блок питания микроконтроллера
Паяльная станция будет управлять приборами 220В и логично было бы сделать сразу встроенный блок питания. Вся электроника управления, микроконтроллер, индикатор, оптосимистор суммарно будут потреблять меньше 100 мА. Такой маломощный, компактный блок питания несложно найти.
Отлично подходят готовые блоки питания светодиодных лент на 12В. На выходе они выдают стабилизированное напряжение 12В. Возьмем B2M003ESB мощностью 3Вт (до 250мА) от компании Ecola. Без защитного кожуха его размер составляет всего 18х25х38 мм.
Разместим
такой блок питания прямо в корпусе
паяльной станции. В итоге получим
компактный прибор без лишних модулей.
Индикатор
Возьмем самый простой индикатор, знакомый по прибору кухонный таймер — светодиодный трёхразрядный индикатор. Он ярко светится в комнатных условиях и им достаточно просто управлять.
Цепь измерения температуры с помощью термопары
Для измерения температуры с помощью термопары используем схему аналогичную прибору измеритель уф индекса и температуры. В основе очень точный внешний ADC mcp3421. В дополнение к нему датчик измерения температуры воздуха NCT75 (можно обойтись и без него, в комнате в основном всегда 22-25 градусов, но стоит он недорого, пусть будет).
Управление этими датчиками идёт по шине I2C.
Микроконтроллер
Подойдёт самый простой и дешёвый микроконтроллер — STM8S003F3. Шина I2C — есть, остальные выводы стандартные.
Регулятор питания микроконтроллера
Питание микроконтроллера и датчиков составляет до 5В. Поэтому нужен понижающий регулятор питания с 12В (а лучше с 24В до 5В). Падение напряжение здесь большое, но ток маленький, поэтому отлично подойдёт регулятор серии L78M05. Корпус лучше взять DPAK для лучшего рассеивания тепла.
Максимальное входное напряжение у него составляет до 35В. Но при это значении на нем будет теряться (35В — 5В) * 100 мА = 3Вт тепла. Что конечно очень много. Надо или снижать потребляемый ток или снижать напряжение. Снизим напряжение до 24В — для случая питания всей схемы от блока питания паяльника постоянного тока. 2Вт он выдержит при большой медной площади на плате. Но лучше ещё побороться за потребляемый ток (за счёт динамической индикации).
Силовые разъёмы
Так как мы работаем с 220В, то будем использовать мощные разъёмы серии minifit. Рабочее напряжение до 600В.
Эти разъёмы очень удобны — их нельзя неправильно соединить, перепутать полярность, что очень важно при работе с высоким напряжением.
Корпус
Подберём готовый компактный корпус. Компания Sanhe делает отличные корпуса на защёлках, у них доступно все внутреннее пространство. Подойдёт корпус 20-11. В нем сможет поместиться и блок питания и плата управления. Внешний размер составляет всего 100x60x25мм.
Составляем схему паяльной станции
Все основные компоненты определены. Можно составлять схему прибора. Как во всех цифровых приборах, делать это совсем не сложно. По сути соединяем модули согласно datasheet на каждую микросхему.
Индикатор
подключаем также как в приборе кухонный
таймер. Чтобы он поярче светился, поставим
резисторы 300 Ом. Таким образом, максимальный
ток при одном светящемся сегменте в
цифре составит около 15мА при 5В питании.
На три цифры 45мА. Средний ток можно
сильно снизить за счёт программного
снижения яркости.
Датчики подключаем, как обычно, к питанию и к шине I2C. Шина I2C подтянута к питанию через резисторы 10кОм. На цепях питания, как можно ближе к выводам микросхем, керамические конденсаторы.
Выводов
у МК не хватает, поэтому кнопки «повесим»
на вход ADC. Тогда все кнопки можно
обслужить одним выводом. 4-х кнопок
хватит. Резисторы в 10 кОм подойдут.
Управление
220В идёт через оптосимистор, по схеме
согласно datasheet. С точки зрения МК это
обычный светодиод, ток необходимый для
надёжного открытия составляем 15мА,
подойдёт резистор 220 Ом.
Регулятор питания на 5В подключаем по типовой схеме.
Чуть
более хитро поступаем со схемой управления
вентилятором паяльного фена. Так как
прибор будет управлять только одним
устройством — паяльником или феном, а
вентилятор нужен только в случае фена.
Поэтому мосфет управления вентилятором
можно использовать и для управления
паяльником постоянного тока.
Паяльный фен может иметь обычный мотор постоянного тока в качестве надува воздуха, а может иметь маломощный моторчик (как в выбранном варианте) на 12В, который управляется низкочастотным ШИМ ом (до 100Гц). В случае обычного мотора дополнительно нужен диод D2. Для выбранного варианта фена он не нужен.
Так
как прибор работает с напряжением 220В,
то необходим предохранитель. Прибор
может питаться от сети 220в, от встроенного
блока питания, а также от внешнего БП
постоянного тока паяльника постоянного
тока напряжением до 24В. Поэтому необходим
диод D1, чтобы в случае питания от БП
паяльника ток не уходил в цепи внутреннего
блока питания.
На
внешний разъем, дополнительно выведем
два вывода которые позволят МК определить,
что подключено — фен или паяльник. Если
выводы mark1 и mark2 замкнуты, то на выводе
mark при включённой внутренней подтяжке
будет 0, иначе 1. На разъем также выведем
питание вентилятора (или паяльника
постоянного тока), термопару, и ten1 ten2 —
управление 220В.
На
отдельный маленький разъем выведем
внешнее питание — или 220В или 24В от БП
паяльника.
Ну
и сам МК. С ним все просто. Цепи питания,
резистор 10 кОм на цепь сброса для большей
надёжности, для определения типа
оборудования будем использовать вывод
программирования SWIM. Кнопки выведены
на ADC — вывод PC4. ШИМ сигнал и управление
симистором на выводы таймеров TIM2 TIM1.
Особенности трассировки печатной платы
Трассировка платы проходит без особенностей, за исключением части 220В.
При
трассировке необходимо помнить про
расстояния между проводниками. На
печатной плате оно должно быть больше
1мм. Рассчитывается оно по пиковому
напряжению в сети - 220 * 1,4 = 310В, по следующей
таблице:
Также
следует отметить, что общая цифровая
земля не должна быть над частью 220В.
Датчик температуры воздуха должен быть
как можно ближе к разъёму термопары.
Программа для микроконтроллера
Структура файлов проекта
Программа написана в среде ST Visual develop IDE. Полный проект вы можете скачать с github данного прибора, папка solderstation. В статье мы разберём ключевые моменты работы программы.
Проект создан на основе библиотеки SPL для STM8 от ST. Подробное описание как развернуть проект вы найдёте в этой статье. Вся программа содержится в файле main.c. Остальные файлы остались без изменений.
Общее описание программы
Алгоритм работы программы.
При включении производится настройка всей периферии. На индикаторе отображается подключённое оборудование FFF(фен) или PPP (паяльник), и система переходит в рабочий режим.
Основной цикл. Обработка кнопок
Двойное нажатие на любую кнопку выключает нагрев, заданная температура равна нулю
Нижний ряд кнопок - регулировка скорости фена
Верхний ряд кнопок — короткое нажатие +\- 10 градусов, долгое нажатие +\- 100 градусов
После изменения режима отображаем 2 сек выбранный режим (заданную температуру или скорость фена от 1 до 4)
Основной цикл. Каждые 300мс. Получаем данные температуры. Вызываем функцию ПИ регулятора и он рассчитывает мощность нагревателя.
Прерывание миллисекундного таймера 4. Управляем нагревателем.
Прерывание таймера 2. Управление индикатором.
Прерывание таймера 1. Управление ШИМ вентилятора.
Инициализация
Как обычно, настраиваем нужную периферию, рабочую частоту микроконтроллера, все выводы.
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);//2mghэнергосбережение //индикатор GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_SLOW); GPIO_Init(GPIOA,GPIO_PIN_1|GPIO_PIN_2,GPIO_MODE_OUT_PP_HIGH_SLOW); GPIO_Init(GPIOC,GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_OUT_PP_HIGH_SLOW); GPIO_WriteHigh(GPIOC,GPIO_PIN_1); GPIO_WriteLow(GPIOA,GPIO_PIN_2); GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST);//PWM FAN GPIO_Init(GPIOA,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST);//Spiral
Кнопки опрашиваются с помощью ADC. Настроим его работу. Вывод как обычный вход. Конвертация в ручном режиме по команде.
GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_IN_FL_NO_IT);//кнопка! ADC1_DeInit(); ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_2,ADC1_PRESSEL_FCPU_D2, \ ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL2,\ DISABLE); ADC1_Cmd(ENABLE);
Таймер 4 — миллисекундный.
TIM4_TimeBaseInit(TIM4_PRESCALER_8, 249); TIM4_ClearFlag(TIM4_FLAG_UPDATE); TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); TIM4->IER |= (uint8_t)TIM4_IT_UPDATE;
Таймер 2 тоже миллисекундный для управления индикатором.
TIM2_TimeBaseInit(TIM2_PRESCALER_8, 249); TIM2_ClearFlag(TIM2_FLAG_UPDATE); TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2->IER |= (uint8_t)TIM2_IT_UPDATE;
Таймер 1 — для ШИМ сигнала управления вентилятором. Для управления вентилятором нужен ШИМ низкой частоты. 55Гц вполне подойдет.
TIM1_DeInit(); TIM1_TimeBaseInit(36000, TIM1_COUNTERMODE_UP, MAXPWM, 0); TIM1_CCPreloadControl(DISABLE); TIM1_BDTRConfig(TIM1_OSSISTATE_DISABLE, TIM1_LOCKLEVEL_OFF, 0, TIM1_BREAK_DISABLE, TIM1_BREAKPOLARITY_LOW,TIM1_AUTOMATICOUTPUT_DISABLE); TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_DISABLE,TIM1_OUTPUTNSTATE_DISABLE, 0, TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,TIM1_OCNIDLESTATE_RESET); /* TIM1 counter enable */ TIM1_CtrlPWMOutputs(DISABLE); //выводы будемпереключать в прерывании TIM1_Cmd(ENABLE); TIM1_ITConfig(TIM1_IT_UPDATE|TIM1_IT_CC1, ENABLE);
Стандартная настройка для I2C.
I2C_Cmd( ENABLE); I2C_Init(I2C_MAX_STANDARD_FREQ, (uint8_t)0xA0, I2C_DUTYCYCLE_2,I2C_ACK_CURR, I2C_ADDMODE_7BIT, 7);
Инициализируем датчики температуры.
mcpinit(); nctinit();
Внешний ADC для термопары настраиваем на максимально точный режим 18 бит 3.75 измерения в секунду и усиление в 8 раз.
buff[0] = (uint8_t) 0b00011111; if( ! I2C_writenbyte((uint8_t)MCPaddr, buff, 2,0) )
Если подключён фен паяльный — то выводим на индикатор FFF иначе выводим PPP
if (fan==0) { ind[0] = 10;//P ind[1] = 10;//P ind[2] = 10;//P } else { ind[0] = 11;//F ind[1] = 11;//F ind[2] = 11;//F }
На этом инициализация заканчивается.
ПИ регулятор
Температура паяльника (или фена) регулируется ПИ регулятором. Более подробно о том, что это такое можно прочитать в этой статье. Здесь разберём конкретную реализацию для этого прибора.
Для паяльной станции вполне достаточно ПИ регулятора, Д компонент не нужен, потому что нагреватель имеет линейный коэффициент нагрева и остывания. Вот конечная реализация. В функцию передаём заданную температуру и текущую в целых градусах и она вычисляет нужную мощность.
s16 PI_Regulator(s16 hReference, s16 hPresentFeedback) { s32 wError, wProportional_Term,wIntegral_Term, houtput_32; s32 wIntegral_sum_temp; // error computation wError= (s32)(hReference - hPresentFeedback); // Proportional term computation wProportional_Term = hKp_Gain * wError; // Integral term compuztation if (hKi_Gain == 0) { wIntegral = 0; } else { wIntegral_Term = hKi_Gain * wError; wIntegral_sum_temp = wIntegral + wIntegral_Term; if (wIntegral_sum_temp > 0) { if (wIntegral < 0) { if (wIntegral_Term < 0) { wIntegral_sum_temp = S32_MIN; } } } else { if (wIntegral > 0) { if (wIntegral_Term > 0) { wIntegral_sum_temp = S32_MAX; } } } if (wIntegral_sum_temp > wUpper_Limit_Integral) { wIntegral = wUpper_Limit_Integral; } else if (wIntegral_sum_temp < wLower_Limit_Integral) { wIntegral = wLower_Limit_Integral; } else { wIntegral = wIntegral_sum_temp; } } houtput_32 =(wProportional_Term/hKp_Divisor+wIntegral/hKi_Divisor); if (houtput_32 > hUpper_Limit_Output) { houtput_32 = hUpper_Limit_Output; } else if (houtput_32 < hLower_Limit_Output) { houtput_32 = hLower_Limit_Output; } return((s16)(houtput_32)); }
В результате опытной настройки регулятора для паяльного фена мощностью 700Вт получились следующие коэффициенты:
#define hKp_Divisor 512 #define hKi_Divisor 2000 s16 hKp_Gain=230; s16 hKi_Gain=20; #define hUpper_Limit_Output (s32)70 #define hLower_Limit_Output (s32)0
Регулятор возвращает мощность в интервале от 0 до 70. При максимальной мощности фен паяльный нагревается до 700 градусов (установлено опытным путём). Все эти коэффициенты вы обязательно должны настроить под свой управляемый прибор. Начинать нужно с нулевого iGain и небольшого pGain. Предварительно установив небольшую максимальную мощность.
Управление индикатором
В этой статье не будем разбирать динамическое управление светодиодным индикатором, оно полностью идентично, используемому в приборе Кухонный таймер.
Часто, бывает удобно после смены режима, что-то показать на индикаторе длительное время. В этом приборе как раз используется такой режим. Разберём как он работает.
if ((kn[3] == KNONE) || (kn[3] == KNLONG)) { kn[3]=0; speedfan++; if (speedfan>4) speedfan=4; //hKi_Gain +=1; timeshownext=2; showinfo(0); }
При нажатии третьей кнопки увеличиваем скорость вентилятора, устанавливаем время показа информации 2 секунды (переменная timeshownext) и вызываем функцию, которая отображает нужную информацию showinfo().
По прошествию этого времени переводим индикатор в обычный режим — отображение текущей температуры нагревателя каждую секунду.
if (timeshownext==0) { timeshownext= 1; showinfo(10); }
Идентификация вида нагревателя — паяльник или паяльный фен
Как проводится идентификация вида нагревателя? На силовом разъёме, которым подключается управляемый прибор, есть два вывода, которые можно замкнуть на стороне паяльника в кабеле (mark1 mark2) и таким образом сообщить прибору, что подключено устройство другого типа.
На микроконтроллере для идентификации используется вывод SWIM, через который осуществляется программирование микроконтроллера (к сожалению свободных выводов не осталось). Такой варианту усложняет отладку. Поэтому, пока вы не закончите отладку, этот вывод задействовать не нужно и нужный типа устройства нужно жёстко задать в прошивке. Когда отладка будет закончена, можно включить автоматический вариант.
Вывод SWIM по умолчанию имеет подтяжку к HIGH (к линии питании) по datasheet через встроенный резистор номиналом около 40кОм. Поэтому для идентификации используется резистор 10кОм. Есть два варианта:
подтяжка — будет 1 на этом выводе
замыкание вывода на землю через резистор 10 кОм (когда mark1 и mark2 замкнуты), будет гарантированный 0 на выводе.
Таким образом, прочитав состояние данного вывода, можно определить, что мы подключили — паяльный фен или паяльник. Зачем это нужно? Каждое устройство имеет различную мощность и отсюда будет иметь различные коэффициенты ПИ регулятора. Вот их и надо менять при выборе прибора.
Управление мощностью нагревателя
Прибор управляет очень инерционным устройством — нагревателем. Управление осуществляется с помощью полных полуциклов. Минимальный интервал регулирования — 50мс. ПИ регулятор на выходе выдаёт дискретную мощность, и чем большее количество различных значений будет доступно, тем более плавная и точная регулировка температуры будет получена. Опытным путём установлено, что для паяльного фена необходимо минимум 20 градаций мощности. При меньшем количестве регулирование получается дёрганым. Одна градация будет соответствовать 100 мс работы нагревателя. Получается, что при максимальной мощности нагреватель должен работать 2 сек. Получается какое-то несоответствие: ПИ регулятор вызывается каждые 300мс (когда мы получаем новое измерение температуры), мощность нагревателя мы регулируем интервалами по 100 мс и аж до 2 сек. Как же это все работает? Разберём часть программы ответственную за управление мощностью нагревателя.
Управление нагревателем осуществляется в прерывании основного миллисекундного таймера.
if (spiralpower==0) { //выключаем спираль или паяльник GPIOA->ODR &= (uint8_t)(~GPIO_PIN_3); spiraltime=0; spiralon=0;
Если вдруг мощность спирали стала равна нулю, то выключим нагреватель.
} else { u16 timeon; u16 timeoff; spiraltime++;
Переменная spiraltime отражает количество миллисекунд, которое нагреватель был включён или выключен. Поэтому каждое прерывание увеличиваем её на единицу.
timeon = 2000 * spiralpower/100; timeoff = 2000 - timeon;
Далее, по заданной мощности, которая хранится в переменной spiralpower, вычисляем время включённого состояния нагревателя и время выключенного в интервале 2 секунды. Чем больше мощность, тем больше время включённого нагревателя в течение 2 секунд. На полной мощность прибор будет включён все время.
if (spiralon) { //ждем выключения! и если насталовремя выключаем! if (spiraltime > timeon) { spiraltime = 0; GPIOA->ODR &= (uint8_t)(~GPIO_PIN_3); spiralon = 0; }
Введём специальную переменную spiralon, в которой будем хранить признак того, что нагреватель включён. Если в данное время нагреватель включён, то проверяем сколько времени он включён и если больше чем рассчитанное, то выключаем его и переводим в состояние — выключен. При этом время работы нагревателя в указанном состоянии обнуляем.
} else if (spiraltime > timeoff) { spiraltime = 0; GPIOA->ODR |= GPIO_PIN_3; spiralon = 1; }
Если же, нагреватель выключен, то проверяем, что время выключения вышло, и когда это произойдёт, то включим нагреватель.
Теперь получается, что в любой момент времени можно менять нужную мощность нагревателя, а программа будет выходить на заданную, за счёт рассчитанного времени в нужном режиме.
Как же ПИ регулятор, который вызывается раз в 300 мс, может задать такое малое значение включение нагревателя в 100мс? Очень просто, прямой связи между частотой вызова регулятора и частотой управления нагревателем нет! Но эти параметры влияют на скорость реакции регулятора. Конечно, если у нас есть задача получить быстро реагирующий регулятор, то необходимо, чтобы частота управления мощностью была равна или больше частоты самого регулятора. Здесь же в паяльнике или фене в этом нет необходимости. Реакции в рамках двух секунд вполне достаточно.
Из этого примера следует, что в таком же режиме можно управлять и более инертными приборами. Регулятор отлично справится, например с калорифером в комнате, который будет иметь регулировку мощности в виде окна включения в диапазоне 30 минут! Ведь задача регулятора подобрать ту мощность, которая будет поддерживать заданную температуру без изменения внешних условий. Понятно, что если в комнате открыть окно, появится внешнее воздействие, и в короткой перспективе в комнате станет холодно. Но через 30 минут, если окно оставить открытым, то регулятор найдёт нужную мощность для компенсации открытого окна!
Опрос 4-х кнопок по одному выводу с помощью ADC
Так как в этом приборе все выводы микроконтроллера заняты, а одной кнопки явно мало, то используется приём опроса кнопок с помощью ADC (вольтметра). Кнопки подключены через резисторный делитель и в зависимости от того, какая кнопка нажата на выводе МК будет различное напряжение. Это напряжение будем считывать модулем ADC и сверять с фиксированными значениями.
В этом приборе используется та же самая процедура обработки нажатия кнопок как в приборе Кухонный таймер. Она позволяет отследить однокаратные, двухкратные и долгие нажатия кнопок. Вся обработка проводится в миллисекундном основном таймере каждые 50 мс.
if (kndtime==0) { u8 knall=0; //u16 adcval; //опрос кнопок редко для избежаниядребезга kndtime = KNDTIME; //кнопки на ADC - прочитаем и выяснимкакая кнопка нажата ADC1_StartConversion(); while( ADC1_GetFlagStatus(ADC1_FLAG_EOC) == RESET); adcval = ADC1_GetConversionValue();
Когда пришло время опросить кнопки, стартуем измерение ADC и ждём пока оно будет завершено. Одно измерение занимает около 5 мкс, так что не влияет на таймер.
if (adcval < 10 ) {knall |= GPIO_PIN_0;} else if (adcval < 550 ) {knall |= GPIO_PIN_1;} else if (adcval < 700 ) {knall |= GPIO_PIN_2;} else if (adcval < 800 ) {knall |= GPIO_PIN_3;} knall = ~knall; knint(0, knall, GPIO_PIN_0); knint(1, knall, GPIO_PIN_1); knint(2, knall, GPIO_PIN_2); knint(3, knall, GPIO_PIN_3);
После измерения проверяем какая кнопка нажата и устанавливаем нужный бит в переменной knall (аналог регистра GPIO). И это значение отдаём в процедуру расчёта нажатий кнопок. В итоге опрос ADC сведён к анализу состояния обычного порта.
Сами значения в лесенке измерения проще устанавливать через отладчик. Подключаем, нажимаем кнопку и смотрим чего вышло. Добавляем 5-10 единиц на погрешность и фиксируем в коде.
Как сделать цифровую паяльную станцию своими руками
Делаем плату и все запаиваем
Подготовить или приобрести необходимые инструменты: все для пайки, ST-LINK (будет нужен для программирования и отладки МК)
Внимательно прочитать статьи из раздела Обязательная теория.
Скачать необходимые файлы по данному прибору с github.
Изготовить плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).
Приобрести все необходимые комплектующие.
Запаять все компоненты на плату, смотри наше видео.
Плата готова!
Для программирования лучше припаять (на специальную площадку PRG) провод с разъёмом пин терминал, запаянный в термоусадочную трубку — получится удобный разъем для программирования.
Отладка и настройка прибора
После сборки прибора можно перейти к программированию. Лучше сразу припаять отдельный отладочный кабель, а после полной проверки и настройки прибора просто отпаять его и уже пользоваться прибором.
На этапе настройки и тестирования лучше не работать с питанием 220В, а все проверить при питании от ST-Link напрямую. Что можно протестировать в этом режиме:
работу измерителя термопары
работу индикатора
работу кнопок
работу управляющего оптосимистора — наличие нужного напряжения на управляющих выводах
работу аварийного режима — сброс управления в случае превышения температуры
Только после того как низковольтная часть будет протестирована, и замечаний к её работе не будет можно переходить к части 220В.
220В — ОПАСНОЕ ДЛЯ ЖИЗНИ НАПРЯЖЕНИЕ!
ВСЕ РАБОТЫ ПРОВОДИТЬ ПОД ПРИСМОТРОМ ВЗРОСЛЫХ!
Для начала необходимо проверить вольтметром работу блока питания — он должен выдавать 12В постоянного напряжения. Только после проверки его работоспособности можно припаивать его к плате и устанавливать в корпус!
Далее можно переходить к проверке схемы управления нагревателем. На первом этапе следует подключить вместо нагревателя лампочку. Термопару можно оставить в свободном состоянии — она будет показывать около 25 градусов. При таком режиме работы любая заданная температура больше 30 градусов вызовет работу лампочки на полную мощность, а ниже 20 градусов — её выключение. Если в таком режиме все работает. То можно переходить к управлению нагревателем.
Лучше всего проверять работу прибора на паяльнике! Потому что, даже при постоянном подключении к сети 220В он не достигнет опасной температуры, а также его мощность относительно мала для повреждения симистора. На нем можно отладить все режиме ПИ регулятора и работы паяльной станции.
Только после этих тестов можно переходить к управлению паяльным феном. Имейте в виду, что постоянно включенный фен потребляет около 700 Вт энергии. Это очень много. Температура очень быстро достигнет 800 градусов и ручка может расплавиться. Все это приведёт к выходу из строя прибора и может привести к пожару!
Настройка работы с паяльным феном нужно начинать с управления вентилятором — он должен всегда работать. Включать паяльный фен без работающего вентилятора нельзя! После работы вентилятора необходимо в программе поставить ограничение максимальной мощности и проверить что фен не перегревается в этом режиме. После этого можно уже более точно настраивать ПИ регулятор с помощью кнопок (дописав программу) или в отладчике.
Если у вас есть желание управлять более мощной нагрузкой — обязательно использовать радиатор на симисторе!
Установка в корпус
В крышке корпуса необходимо выпилить отверстие под индикатор. С обратной стороны его можно заклеить прозрачным оргстеклом.
Рядом
просверлить 4 отверстия под кнопки. Так
как сами кнопки находятся ниже крышки
корпуса, то необходимо их удлинить. Это
не сложно сделать с помощью пластмассовых
прутиков. Соединить их с кнопками можно
с помощью изоленты или термоусадки.
Дополнительно можно посадить на
суперклей. Если будете это делать, то
обязательно кнопку переворачивайте
ножками вверх, чтобы клей не затёк в
механизм кнопки!
Вот примерная компоновка платы в корпусе. Справа размещается блок питания. Чтобы он поместился нужно удалить часть корпуса, оставить оставшуюся как изоляцию. В боковой части корпуса нужно выпилить отверстие под силовые разъёмы.
Прибор готов. На нашем канале вы можете посмотреть его в работе. Удачной пайки!
Приобретённые навыки
Пайка: пайка корпуса TTSOP, пайка корпуса SOT-23-5, пайка выводных компонент, пайка силовых разъёмов minifit.
Схемотехника: светодиодный индикатор, подключение нескольких кнопок одним проводом, управление приборами 220В, измерение температуры термопары.
Программирование: считывание состояния нескольких кнопок с помощью ADC, миллисекундный таймер, ПИД регулятор
Самостоятельная работа
Вы можете самостоятельно доработать функции паяльной станции. Идеи для доработки:
Дописать работу прибор с двумя нагревателями — феном и паяльником (в прилагаемых исходных файлах реализовано только управление паяльным феном)
Дописать работу прибора в случае управления паяльником постоянного тока 24В с помощью ШИМ модуляции.