Паяльная станция на atmega8 и дисплее lph8731-3c

Паяльная станция своими руками — Community «Электронные Поделки» on DRIVE2

Загорелся идеей сделать себе паяльную станцию так как паяю SMD детали, а простым паяльником сложновато паять такую мелочь и постоянно приходиться зачищать жало.Порылся в интернете и нашел несколько решений.Проще всего можно сделать на ардуино подключив к ней семисегментный индикатор и пару кнопок для установки и слежение за температурой паяльника.Но мне хотелось чего-то большего.

Позже наткнулся на канал Oleg A. Там он выложил видео обзор паяльной станции которую разработал и сделал он сам.

Это уже была полноценная паяльная станция на микроконтроллере atmega328p и с LCD экраном.Также к ней помимо паяльника можно подсоединять фен.
Мне эта идея очень понравилась и я решил повторить

Zoom

Схема (на схеме есть ошибки, на печатке нету)

Заказал детали и пока они шли принялся за изготовление платы Также немного пришлось разобраться с подключением кнопок, паяльника и т. д.Как пришли детали начал всё это дело собирать.

Корпус использовал от компьютерного БП.

Прошивал мк через Usbasp. Фьюзы: Low = DE и High = D9.
При прошивке нужно подцепить на 9-10 ножки мк кварц. Без него не прошивается.

Станция запустилась сразу, но на экране были непонятные бегущие символы.Думал дело в прошивке, пару раз перепрошивал и ничего не изменилось. Но позже всё таки нашел причину.При пайке на печатке недоглядел еще один конденсатор и не припаял его. После установки конденсатора всё заработало.Так что нужно быть внимательней!

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

Для питания использовал небольшой трансформатор диодный мост на 4а и китайский DC-DC понижающий преобразователь на нем выставил 24вНо при таком питании когда идет нагрев паяльника происходит просадка напряжения с 24в до 17в из-за этого паяльниик нагревается немного дольше чем должен и не достигает максимальной температуры.

В дальнейшем поставлю импульсный блок питания 24в4а. А пока этого достаточно.

Zoom

Корпус потом покрашу в черный цвет

Список деталей:

Микроконтроллер: Atmega328pОУ: LM358Опторазвязка: MOC3063Мосфет: IRFZ44N ( 2 шт.)Симистор: BT138Стабилизатор: L7812CVСтабилизатор: L7805CVПотенциометр: 10К ( 3 шт. )Подстроечный резистор: 10К ( 3 шт. )Резистор: 22КСветодиод: 3 мм, 20мА ( 2 шт.

)Резонатор: 16 МгцSMD резистор: 220 ( 2 шт. )SMD резистор: 10К ( 4 шт. )SMD резистор: 220К ( 2 шт. )SMD конденсатор: 1 мкф ( 3 шт. )Переключатель: (3 шт.

)Гнездо: GX16-8Гнездо:GX16-5Блок питания: импульсный блок питания 24В, 4АПаяльник на 24В с термопарой

Фен с встроенным вентилятором с термопарой

Файлы для повторения: Перейти

Оригинальная статья: d-serviss.lv
Подробное видео по сборке и возникающих проблем можете посмотреть здесь

Источник: https://www.drive2.com/c/465130803018334722/

Паяльная станция на ATmega8 и дисплее LPH8731-3C

В данной статье пойдет речь о таком востребованном помощнике радиолюбителя, как паяльная станция. На момент написания этой статьи, мной было найдено очень большое количество различных схем паяльных станций – от самых простых, до сложных и навороченных “монстров”, аналогов которым и в магазине не найдешь.

Идеей собрать паяльную станцию я загорелся еще достаточно давно, но повторять чью-то конструкцию не было желания, а на разработку своей схемы – времени.

Но пару месяцев назад срочно понадобилась паяльная станция (закупил микроконтроллеры в корпусах TQFP, а обычный паяльник мало того что и имел толстое жало, но оно еще и нещадно перегревалось и обгорало).

Требования к устройству были следующими:

  •  Возможность запоминания температуры
  •  Управление энкодером от оптической мыши
  •  Использование МК ATmega8 (они были в наличии)
  •  Отображение информации на LCD

Изначально планировалось не изобретать велосипед, а просто собрать одну из схем, представленных в интернете. Но потом, прикинув все “за” и “против”,решил все же заняться составлением собственной схемы.

Результат работы представлен ниже:

** Я был очень удивлен, когда просматривал схемы паяльных станций в интернете. Практически у всех встреченных мной вариантах ОУ был включен просто по схеме неинвертирующего усилителя. В данной конструкции используется дифференциальное включение операционного усилителя (самый простой вариант, но тем не менее, работающий гораздо лучше, нежели “простое” включение).

В данной схеме есть еще одна особенность – для питания LCD пришлось использовать стабилизатор на 3.3В – LM1117-3.3. От него и питается МК вместе с LCD. Операционный усилитель же для питания используется 5В, которые снимаются от линейного стабилизатора LM7805, находящегося за пределами печатной платы, а потому не отображенном на схеме.

Для управления нагрузкой применен мощный полевой транзистор Q1 IRFZ24N, но так как потенциала в 3.3В явно недостаточно для его открытия, пришлось добавлять маломощный биполярный транзистор Q2 – КТ315.

Для отображения информации в устройстве применен LCD дисплей от мобильного телефона Siemens A65 (так же встречается в A60, A62 и т.д.).

ВНИМАНИЕ! Необходим дисплей с желтым текстолитом, имеющий надпись LPH8731-3C. Дисплеи с зеленой подложкой имеют другие контроллеры, не совместимые с данным.

Распиновка дисплея показана ниже:

На 6 вывод подается 3.3В от стабилизатора LM1117-3.3, а питание подсветки происходит от 5В через резисторы 100 Ом.

Печатная плата выполнена на двухстороннем фольгированном материале (текстолит или гетинакс), и имеет размеры 77х57 мм. Она рассчитана под микроконтроллер ATmega8 в корпусе TQFP32, и ввиду этого особой простотой похвастаться не может. Но метод ЛУТ позволит без проблем с ней справиться (я рисовал дорожки лаком).

Топология печатной платы показана ниже:

В итоге, устройство получило следующие возможности:

  • Установка начальной (стартовой) температуры
  • Возможность задавать три профиля (температуры), и быстро переключаться между ними
  • Регулировка значений происходит с помощью энкодера, что позволило избежать дополнительных кнопок
  • При достижении заданной температуры включается звуковой сигнал (можно отключить в меню)
  • Нажатия кнопок так же могут сопровождаться звуковыми сигналами (можно отключить в меню)
  • Границу звукового сигнала так же можно изменить
  • Для поддержания заданной температуры используется ШИМ
  • Возможно задать границу температуры, при достижении которой будет включаться ШИМ
  • Яркость подсветки регулируется
  • Присутствует режим ожидания
  • Температура режима ожидания регулируется
  • Время до включения режима ожидания регулируется
  • Четыре варианта отображения температуры на выбор (только установленная, только реальная, уст. + реал., уст. + реал. поочередно)

В данной схеме используется энкодер от оптической мыши, и достать его не составит труда.

Распиновка энкодера:

Микроконтроллер, увы, заменить нельзя даже на аналогичный без индекса “L”, так как питание схемы – 3.3В. По поводу дисплея уже упоминалось ранее. В схеме в основном применены smd резисторы типоразмера 0805, но присутствует и 4 обыкновенных МЛТ-0,125. Все конденсаторы, за исключением электролитических, так же типоразмера 0805. В качестве стабилизатора 3.

3В можно использовать любой, аналогичный LM1117-3.3, к примеру AMS1117-3.3. Вместо транзисторов BC547 и КТ315 можно использовать любые кремниевые маломощные структуры n-p-n, например, КТ312, КТ315, КТ3102 и т.д. Транзистор IRFZ24N можно заменить на IRFZ44N, либо аналогичный.Программа для микроконтроллера написана в WinAVR.

Я не буду описывать в статье код, так как это повлечет за собой большой объем текста.

Если у вас возникнут вопросы, задавайте их в комментариях, или в теме на форуме.

Все необходимые файлы для самостоятельной компиляции проекта есть в архиве, прикрепленном к статье.

При программировании микроконтроллера необходимо снять перемычку JP1, и подключить к верхнему (по схеме) контакту 5В с программатора, минуя стабилизатор 3.3В.

Так же перед программированием необходимо отключить LCD дисплей, так как он не предназначен для использования с питающим напряжением 5В (хотя у меня работал, но рисковать не стоит).

Прошивку в микроконтроллер я заливал с помощью программы Khazama AVR Programmer и программатора USBasp.

Скриншот установки fuse-битов представлен ниже:

Для точной настройки коэффициента усиления ОУ необходимо установить ручки подстроечных резисторов RV1 и RV2 так, что бы суммарное сопротивление RV1+R7 и RV2+R16 было ровно в 100 раз больше, нежели сопротивление R8 и R10.

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

Если показания значительно расходятся, необходимо подкорректировать их резисторами RV1 и RV2.

Для произвольного включения/отключения режима ожидания предусмотрена отдельная кнопка (SB3).

И напоследок фото и видео работы устройства:

ОбозначениеТипНоминалКоличествоПримечаниеМагазинМой блокнотU1U2U3LCD1Q2, Q3Q1R1 – R3, R13, R14, R17R8, R10, R15R11R6, R12R4, R5R7, R16RV1, RV2C1, C4 – C5C2, C3L1D2D1D3SB1 – SB6E1LS1J1-J13
МК AVR 8-бит ATmega8-16PU 1 Индекс “L” Поиск в магазине В блокнот
Операционный усилитель LM358N 1 Поиск в магазине В блокнот
Линейный регулятор LM1117-3.3 1 Поиск в магазине В блокнот
LCD-дисплей LPH8731-3C 1 Желтый текстолит Поиск в магазине В блокнот
Биполярный транзистор BC547 2 Поиск в магазине В блокнот
MOSFET-транзистор IRFZ24N 1 Поиск в магазине В блокнот
Резистор 100 Ом 6 R1 – R3, R17 (0805), R13 – R14 (МЛТ-0,125) Поиск в магазине В блокнот
Резистор 1 кОм 3 0805 Поиск в магазине В блокнот
Резистор 4.7 кОм 1 МЛТ-0,125 Поиск в магазине В блокнот
Резистор 10 кОм 2 0805 Поиск в магазине В блокнот
Резистор 47 кОм 2 0805 Поиск в магазине В блокнот
Резистор 91 кОм 2 0805 Поиск в магазине В блокнот
Подстроечный резистор 10 кОм 2 Поиск в магазине В блокнот
Конденсатор 100 нФ 3 0805 Поиск в магазине В блокнот
Электролитический конденсатор 100 мкФ х 50 В 2 Поиск в магазине В блокнот
Катушка индуктивности 100 мГн 1 Поиск в магазине В блокнот
Светодиод Красный 1 5мм Поиск в магазине В блокнот
Светодиод Желтый 1 5мм Поиск в магазине В блокнот
Светодиод Зеленый 1 5мм Поиск в магазине В блокнот
Датчик Тактовая кнопка 6 Поиск в магазине В блокнот
Датчик Энкодер 1 Поиск в магазине В блокнот
Излучатель Пъезоэлектрический излучатель 1 Поиск в магазине В блокнот
Разъем PLS-40 1 Поиск в магазине В блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

  • SolderStation_LPH8731-3C.rar (299 Кб)

Источник: http://cxem.gq/master/101.php

Паяльная станция своими руками Atmega48-88-168-328 — DRIVE2

Новая версия ПО ТУТ

Пару месяцев назад ко мне обратился человек с просьбой прошить МК Атмега328 прошивкой для паяльной станции, так я про неё и узнал. У меня паялка Lukey702 и я даже не планировал делать что-то подобное, НО устроился на работу где основной инструмент паяльник, а те паяльники что там имеются очень повидавшие жизнь.

И тут я вспомнил про самодельную паяльную станцию с её очень привлекательной стоимостью.
Паяльник я брал ТУТ по 2.7 доллара, взял сразу 2шт.
Фен ТУТ за 11 долларов.
БП 24В 2А брал ТУТ за 6,65.
В общем комплект в лимит таможни входит и это здорово. Атмеги были уже когда-то куплены и я приступил к сборке.

Плату брал ТУТ, для любителей смд недавно увидел такой вариант.
Схему и прошивку брал у автора паялки на сайте.После сборки паялка сразу заработала, но…БП при 24В выдает 1.7А, в принципе на нагрев сильно не влияет, но лучше брать на 3А.По паяльнику вопросов нет. Все работает как часы, а вот с феном вопросы есть.

Во первых обороты практически не регулируются и живут своей жизнью.

Во вторых фен после охлаждения завывает то остановиться, то задует опять и так около минуты.

Что касаемо дисплея и информации, на максимуме температуры 480 градусов, что на фене что на паяльнике вылазит Error и не понятно чего там происходит на самом деле. Светодиоды с семистора и полевика не выводил на панель, а все таки бывает полезным знать как ведет себя нагреватель, точнее его питание.

Решил написать свою прошивку, писал на mikropascale, хотел написать под Атмега8, но тогда нужно менять разводку на нескольких ногах. Но тут нашел в закромах Атмега48, и прошивка замечательно влезла. Так же можно прошить любой МК из серии Атмега 48, 88, 168, 328, они отличаются только количеством памяти.

Основные отличия в прошивке:

Вывод информации осуществлен без надписей, только температура, которая разнесена по сторонам фена и паяльника, воздух в центре экрана с меньшим количеством делений 1-10.

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

Температура программно не сглажена, что на термопаре, то и на дисплее, на фене прыгает +/- 10-15 гр. мне так нагляднее.

При выключении фена вентилятор переходит на полные обороты для скорейшего остывания нагревателя.
Вентилятор не завывает в граничной зоне остывания, а сразу выключается при 60 градусах.

В схему добавлен фильтр ШИМа на вентилятор, конденсатор и резистор, с ними обороты регулируются плавно и без всяких писков. Шкала вентилятора неравномерная, но на работу и удобство пользования особо не влияет.

Фъюзы представлены для Атмега 328, для других МК выставлять по аналогии, главное это внешнее тактирование кварцем больше 8МГц, кстати можно перекомпилировать под внутреннее тактирование 8МГц, у автора кварц нужен для работы ардуины, а в паялке он не обязателен.

Файлы проекта ТУТ.

Источник: https://www.drive2.ru/b/477557208557551830/

Самодельная цифровая паяльная станция DSS

Источник: http://vprl.ru/publ/cifrovaja_tekhnika/mikrokontrollery/pajalnaja_stancija/15-1-0-67

Самодельная паяльная станция на ATmega8

Что является одним из самых важных инструментов в наборе инженера, работа которого связана с электроникой. Это то, что вы, вероятно, любите и ненавидите, – паяльник. Вам необязательно быть инженером, чтобы он вам вдруг понадобился: достаточно быть просто умельцем, которые ремонтирует что-либо у себя дома.

Для базовых применений хорошо справляется и обычный паяльник, который вы включаете в розетку; но для более деликатной работы, такой как ремонт и сборка электронных схем, вам понадобится паяльная станция.

Регулирование температуры имеет решающее значение, так как не сжигает компоненты, особенно микросхемы.

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

В данной статье мы рассмотрим, как можно собрать собственную паяльную станцию.

Разработка

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

  • переносимость – это достигается за счет использования импульсного источника питания, вместо обычного трансформатора и выпрямительного моста;
  • простой дизайн – мне не нужны LCD дисплеи, лишние светодиоды и кнопки. Мне нужен был просто светодиодный семисегментный индикатор, чтобы показывать установленную и текущую температуру. Мне также нужна была простая ручка для выбора температуры (потенциометр) без потенциометра для точной подстройки, так как это легко сделать с помощью программного обеспечения;
  • универсальность – я использовал стандартную 5-контактную штепсельную вилку (какой-то тип DIN), чтобы она была совместима с паяльниками Hakko и их аналогами.

Как это работает

Прежде всего, давайте поговорим о ПИД (пропорционально-интегрально-дифференцирующих, PID) регуляторах. Чтобы прояснить всё сразу, давайте рассмотрим наш частный случай с паяльной станцией.

Система постоянно отслеживает ошибку, которая является разницей между заданной точкой (в нашем случае, необходимой нам температурой) и нашей текущей температурой.

Он подстраивает выход микроконтроллера, который управляет нагревателем с помощью ШИМ, исходя из следующей формулы:

[u(t)=K_p e(t) + K_i int_0^t e( au)d au + K_d {de(t) over dt}]

Как можно увидеть, есть три параметра Kp, Ki и Kd. Параметр Kp пропорционален ошибке в настоящее время. Параметр Ki учитывает ошибки, которые накопились с течением времени. Параметр Kd является предсказанием будущей ошибки.

В нашем случае мы для адаптивной настройки мы используем PID библиотеку Бретта Борегарда (Brett Beauregard), которая имеет два набора параметров: агрессивный и консервативный.

Когда текущая температура далека от заданного значения, контроллер использует агрессивные параметры; в противном случае, он использует консервативные параметры. Это позволяет нам получить малое время нагрева, сохраняя при этом точность.

Ниже приведена принципиальная схема. Станция использует 8-битный микроконтроллер ATmega8 в DIP корпусе (вы можете использовать ATmega168-328, если они есть у вас под рукой), который очень распространен, а вариант 328 содержится в Arduino Uno. Я выбрал его, потому что его легко прошить, используя Arduino IDE, в котором также есть готовые к использованию библиотеки.

Температура считывается с помощью термопары, встроенной в паяльник. Мы усиливаем напряжение, создаваемое термопарой, примерно в 120 раз с помощью операционного усилителя. Выход операционного усилителя подключается к выводу ADC0 микроконтроллера, который превращает напряжение в значения от 0 до 1023.

Заданное значение устанавливается с помощью потенциометра, который используется в качестве делителя напряжения. Он подключен к выводу ADC1 контроллера ATmega8. Диапазон 0–5 вольт (выход потенциометра) преобразуется в значения 0–1023 с помощью АЦП, а затем в значения 0–350 градусов Цельсия с помощью функции “map”.

Список комплектующих

ОбозначениеНоминалКоличество
 

Евгений Князев

Привет ВСЕМ! Пополняем свою лабораторию самодельным инструментом – на этот раз это будет самодельная цифровая паяльная станция DSS. До этого у меня ничего подобного не было, поэтому и не понимал, в чем ее плюсы. Пошарив по интернету, на форуме «Радиокота» нашел схему, в которой использовался паяльник от паяльной станции Solomon или Lukey.

До этого все время паял таким паяльником, с понижающим блоком, без регулятора и естественно без встроенного термо-датчика:

    Для будущей своей паяльной станции, прикупил уже современный паяльник  со встроенным термо-датчиком (термопарой) BAKU907 24V 50W. В принципе подойдёт любой паяльник, какой Вам нравится, с термо-датчиком и напряжением питания 24 вольта.

И пошла потихоньку работа. Распечатал печатку для ЛУТ на глянцевой бумаге, перенёс на плату, протравил.

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

Плату делал размером 145х50 мм, под покупной пластиковый корпус, который уже был приобретён ранее. Впаял пока детали, какие были на тот момент в наличии.

 

Список элементов

R1 = 10 кОм R2 = 1,0 МОм R3 = 10 кОм R4 = 1,5 кОм (подбирается) R5 = 47 кОм потенциометр R6 =120 кОм R7 = 680 Ом R8 = 390 Ом R9 = 390 Ом R10 = 470 Ом R11 = 39 Ом R12 =1 кОм R13 = 300 Ом (подбирается) C1 = 100нФ полиэстр C2 = 4,7 нф керамика, полиэстр C3 = 10 нФ полиэстр C4 = 22 пф керамика C5 = 22 пф керамика C6 = 100нФ полиэстр C7 = 100uF/25V электролитический C8 = 100uF/16V электролитический C9 = 100нФ полиэстр С10 = 100нФ полиэстр С11 = 100нФ полиэстр С12 = 100нФ полиэстр Т1 = симистор ВТ139-600 IC1 = ATMega8L IC2 = отпрон МОС3060 IC3 =  стабилизатор на 5 v 7805 IC4 = LM358P опер. усилитель Cr1 = кварц 4 мГц BUZER = сигнализатор МСМ-1206А D1 = светодиод красный D2 = светодиод зелёный

Br1 = мост на 1 А.

 

Для компактности плату сделал так, что Mega8 и LM358 будут располагаться за дисплеем (во многих своих поделках использую такой метод – удобно).

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

Или это будет корпус БП от компьютера, если трансформатор не влезет в пластиковый корпус, или если влезет, то готовый пластиковый покупной. По этому поводу заказал через интернет трансформатор ТОР 50Вт 24В 2А (они мотают на заказ).

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

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

Переднюю панель для паяльной станции, как и в других своих поделках, сделал из акрила (оргстекла) 2мм. По оригинальной заглушке сделал свою. Пленку до окончания работы не снимаю, чтоб лишний раз не поцарапать.

Контроллер прошил, плату собрал. Пробные подключения готовой платы (пока без паяльника) прошли успешно.

Собираю все составные части паяльной станции в одно целое. Для паяльника поставил  «Соломоновский» разъём (гнездо).

Подошло время для подключения самого паяльника  и тут облом – разъём. Изначально в паяльнике был установлен такой разъём.

Пошёл в магазин за разъёмом. В магазинах у нас в городе ответной части не нашел. Поэтому в станции гнездо оставил, какое  было, а на паяльнике разъём перепаял на наш советский от магнитофонов (СГ-5 вроде, или СР-5). Идеально подходит.

Теперь упаковываем всё в корпус, крепим окончательно трансформатор, переднюю панель, делаем все соединения.

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

Как работает станция, можно посмотреть это видео, которое я скинул на Ютюб.

Если будут какие нибудь вопросы по сборке, наладке – задавайте их  ЗДЕСЬ, по возможности постараюсь ответить. P.S.

По наладке:

1.    Определить где у паяльника нагреватель, а где термопара. Померить омметром сопротивление на выводах, там где сопротивление меньше, там и будет термопара (нагреватель обычно имеет сопротивление выше термопары, у термопары сопротивление единицы Ом). У термопары соблюсти полярность при подключении. 2.

    Если сопротивление у измеренных выводов практически не отличается (мощный керамический нагреватель), то определить термопару и её полярность ,можно следующим способом;  – нагреть паяльник, отключить его и цифровым мультиметром на самом малом диапазоне (200 милливольт) замерить напряжение на выводах паяльника.

На выводах термопары будет напряжение несколько милливольт, полярность подключения будет видна  на мультиметре. 3.    Если на всех выводах паяльника измеренное сопротивление (попарно) больше 5-10-ти Ом (и более) на двух парных выводах (нагреватель и искомая термопара), то возможно у паяльника вместо термопары стоит терморезистор.

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

Ниже на рисунке показана распиновка разъёма “Соломоновского” паяльника

4.    Подобрать значение R4.

В прикреплённом архиве находятся все необходимые файлы.

Архив для статьи

 

IC1 ATMEGA8-P 1
U1 LM358 1
Q1 IRF540N 1
R4 120 кОм 1
R6, R3 1 кОм 2
R5, R1 10 кОм 2
C3, C4, C7 100 нФ 3
Y1 16 МГц 1
C1, C2 22 пФ 2
R2 100 Ом 1
U2 LM7805 1
C5, C6 100 мкФ (можно и меньше) 2
R7, R8, R9, R10, R11, R12, R13, R14 150 Ом 8

Это список компонентов, экспортированный из KiCad. Кроме того, вам понадобятся:

  • клон паяльника Hakko, самого популярного в китайских онлайн магазинах (с термопарой, а не с термистором);
  • источник питания 24 В, 2 А (я рекомендую использовать импульсный, но вы можете использовать трансформатор с выпрямительным мостом);
  • потенциометр 10 кОм;
  • электрическая штепсельная вилка авиационного типа с 5 контактами;
  • электрический разъем, устанавливаемый на заднюю панель для подачи питания 220 В;
  • печатная плата;
  • выключатель питания;
  • штырьковые разъемы 2,54 мм;
  • много проводов;
  • разъемы Dupont;
  • корпус (я напечатал его на 3D принтере);
  • один тройной семисегментный светодиодный индикатор;
  • программатор AVR ISP (для этого вы можете использовать Arduino).

Конечно, вы можете легко заменить светодиодный индикатор LCD дисплеем или использовать кнопки, вместо потенциометра, ведь это ваша паяльная станция. Я изложил свой вариант дизайна, но вы можете по-своему.

Инструкции по сборке

Схема блока управления паяльной станцией

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

Кроме того, печатная плата у меня удлинена, потому что я хотел, чтобы она совпадала по размеру с источником питания, и я мог бы установить ее на него. Не стесняйтесь изменять плату, вы можете скачать файлы проекта и отредактировать их с помощью KiCad.

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

Обязательно установите выключатель между источником питания и разъемом питания. Используйте относительно толстые провода для соединений источника питания с печатной платой и выходного разъема со стоком MOSFET транзистора (точка H на плате) и земли на печатной плате.

Для подключения потенциометра подключите 1-ый контакт к линии +5В, 2-ой – к точке POT, и 3-ий – к земле. Обратите внимание, что я использую светодиодный индикатор с общим анодом, что может отличаться от того, что у вас. Вам придется немного изменить код, но все инструкции в коде программы прокомментированы.

Подключите выводы E1–E3 к общим анодам/катодам, а выводы a–dp к соответствующим выводам вашего индикатора. Для более подробной информации смотрите техническое описание на него. И наконец, установите выходной разъем паяльной станции и припаяйте к нему все соединения.

Вам должна помочь картинка, приведенная выше, со схемой и цоколевкой разъема.

Теперь начинается интересное, загрузка кода. Для этого вам понадобится PID библиотека (ссылка на GitHub).

#include // Этот массив содержит сегменты, которые необходимо зажечь для отображения на индикаторе цифр 0-9 byte const digits[] = { B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00000111, B01111111, B01101111 }; int digit_common_pins[] = {A3, A4, A5}; // Общие выводы для тройного 7-сегментного светодиодного индикатора int max_digits = 3; int current_digit = max_digits – 1; unsigned long updaterate = 500; // Изменяет, как часто обновляется индикатор. Не ниже 500 unsigned long lastupdate; int temperature = 0; // Определяет переменные, к которым мы подключаемся double Setpoint, Input, Output; // Определяет агрессивные и консервативные параметры настройки double aggKp = 4, aggKi = 0.2, aggKd = 1; double consKp = 1, consKi = 0.05, consKd = 0.25; // Задать ссылки и начальные параметры настройки PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT); void setup() { DDRD = B11111111; // установить выводы Arduino с 0 по 7 как выходы for (int y = 0; y < max_digits; y++) { pinMode(digit_common_pins[y], OUTPUT); } // Мы не хотим разогревать паяльник на 100%, т.к. это может сжечь его, поэтому устанавливаем максимум на 85% (220/255) myPID.SetOutputLimits(0, 220); myPID.SetMode(AUTOMATIC); lastupdate = millis(); Setpoint = 0; } void loop() { // Прочитать температуру Input = analogRead(0); // Преобразовать 10-битное число в градусы Цельсия Input = map(Input, 0, 450, 25, 350); // Отобразить температуру if (millis() - lastupdate > updaterate) { lastupdate = millis(); temperature = Input; } // Прочитать установленное значение и преобразовать его в градусы Цельсия (минимум 150, максимум 350) double newSetpoint = analogRead(1); newSetpoint = map(newSetpoint, 0, 1023, 150, 350); // Отобразить установленное значение if (abs(newSetpoint – Setpoint) > 3) { Setpoint = newSetpoint; temperature = newSetpoint; lastupdate = millis(); } double gap = abs(Setpoint – Input); // Расстояние от установленного значения if (gap < 10) { // мы близко к установленному значению, используем консервативные параметры настройки myPID.SetTunings(consKp, consKi, consKd); } else { // мы далеко от установленного значения, используем агрессивные параметры настройки myPID.SetTunings(aggKp, aggKi, aggKd); } myPID.Compute(); // Управлять выходом analogWrite(11, Output); // Отобразить температуру show(temperature); } void show(int value) { int digits_array[] = {}; boolean empty_most_significant = true; for (int z = max_digits - 1; z >= 0; z–) // Цикл по всем цифрам { digits_array[z] = value / pow(10, z); // Теперь берем каждую цифру из числа if (digits_array[z] != 0 ) empty_most_significant = false; // Не отображать впереди стоящие нули value = value – digits_array[z] * pow(10, z); if (z == current_digit) { if (!empty_most_significant || z == 0) // Проверить, что это у нас не ведущий ноль, и отобразить текущую цифру { PORTD = ~digits[digits_array[z]]; // Удалить ~ для общего катода } else { PORTD = B11111111; } digitalWrite(digit_common_pins[z], HIGH);// Изменить на LOW для общего катода } else { digitalWrite(digit_common_pins[z], LOW); // Изменить на HIGH для общего катода } } current_digit–; if (current_digit < 0) { current_digit = max_digits; // Начать сначала } }

Если у вас есть программатор AVR ISP, вы знаете, что нужно делать. Подключите контакты +5V, GND, MISO, MOSI, SCK и RESET, скачайте скетч Arduino, откройте его (вам понадобится установленная на компьютере Arduino IDE) и нажмите «Загрузить».

Если у вас нет программатора, то можете использовать Arduino. Подключите свою плату Arduino (Uno/Nano) к компьютеру, перейдите в меню Файл → Примеры → ArduioISP и загрузите его. Затем перейдите в Инструменты → Программатор → Arduino as ISP. Подключите свою плату к плате Arduino, скачайте скетч, а затем выберите Скетч → Загрузить через программатор.

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

Калибровка

А нет, еще не всё. Теперь нам нужно откалибровать ее. Так как нагреватели и термопары в паяльниках могут различаться, особенно если вы используете неоригинальный паяльник Hakko, нам нужно откалибровать паяльную станцию.

Во-первых, нам нужен цифровой мультиметр с термопарой для измерения температуры жала паяльника. После того, как вы измерили температуру, вам необходимо изменить значение по умолчанию “510” в строке кода map(Input, 0, 510, 25, 350), используя следующую формулу:

[newValue = { {TempSet cdot ValueSet} over TempRead }]

где TempRead – это температура, которая отображается на вашем цифровом термометре, а TempSet – это температура, которую вы установили на паяльной станции. Это всего лишь приблизительная настройка, но ее должно хватить, ведь вам не нужна при пайке предельная точность. Я использовал градусы Цельсия, но вы можете изменить их в коде на Фаренгейты.

Печать корпуса на 3D принтере (необязательно)

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

Если у вас есть подходящий источник, и вы хотите напечатать корпус, или если вы хотите изменить его под свои требования, то можете скачать приложенные файлы. Я печатал с заполнением 20% и толщиной слоя 0,3.

Вы можете использовать более высокий уровень заполнения и меньшую высоту слоя, если у вас есть время и терпение.

Заключение

Вот и всё! Надеюсь статья оказалась полезной. Ниже приведены все необходимые материалы.

Оригинал статьи:

  • Cezar Chirila. Do-It-Yourself Soldering Station with an ATmega8

Источник: https://radioprog.ru/post/193

Мини цифровая паяльная станция с поддержкой термопарных и терморезисторных паяльников

Как то на первом курсе стал я счастливым обладателем паяльника ЭПСН25/24 (с питанием ~24В). И ничего мне для счастья больше не надо было. Через лет пять я успешно сжег трансформаторный блок питания (коснулся жалом к включенному самодельному ионизатору – прострелила искра и пошел дым…) в связи с чем трансформаторный БП был заменен на импульсный.

Но вот прошло 16 лет, наткнулся я на статью [1], и захотелось мне приобрести паяльник с вечным жалом и керамическим нагревателем.

Но вот беда: к родному ЭПСН было уже много самодельных насадок – выбросить жалко, да и все найденные конструкции в интернете были слишком уж громоздкие, не хотелось такой гроб на стол ставить (работать приходится по ночам на столе в спальне – жена явно будет против такой обновки…). Ну и некоторые сомнения были по поводу удобства необгораемых жал.

Поэтому решено было сделать паяльную станцию, да такую, что бы поместилась в существующий корпус блока питания паяльника 80х55х65мм(без штырей вилки), да еще что бы можно было подключить к ней и старенький ЭПСН.

Сказано – сделано. Приобрел я паяльник Lukey-REZISTRONIK (21$) с нагревателем HAKKO 1321 (24V 48Wt датчик резистивный – при 25С ~50Ом) и дополнительным жалом Xytronic 44-510604/JP ( 6$ клиновидное 1.6мм).

А в старенький ЭПСН была встроена термопара от китайского мультиметра. Поэтому схема разрабатывалась с учетом поддержки как термопарного датчика так и резистивного. И вот что получилось…

Принципиальная схема паяльной станции

Для увеличения кликните на схему

Размер платы контроллера (без БП) при применении SMD элементов составил всего 43х33мм.

Общий алгоритм работы

При включении контроллер запускает АЦП и считывает уровень напряжения на входах PC0, PC1. Если на обоих напряжение близкое к напряжению питания – паяльников нет, на дисплее высвечивается «Err» – ошибка.

Если на одном из входов напряжение становится менее 4,5В выбирается соответствующий тип паяльника: для входа РС0 – термопарный, для РС1 – резистивный; и начинается набор температуры до значения уставки. Для каждого паяльника хранится своя уставка температуры.

При нажатии клавиши «больше» или «меньше» значение уставки текущего паяльника высвечивается на экране в мигающем режиме и далее увеличивается/уменьшается на 5С. В процессе набора температуры мигает точка последнего индикатора.

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

Мощность паяльника регулируется с помощью ШИМ модуляции с помощью ключа VT1. При включении паяльника мощность первоначально набирается плавно – для сохранения нагревателя паяльника.

При проверке паяльника Lukey-REZISTRONIK выяснилось, что при напряжении 24В он светится в темноте – мне его стало жалко, и заполнение ШИМ для резистивного паяльника было ограничено до 70%. Для термопарного заполнение ШИМ 100%.

Тем не менее паяльник Lukey нагревается от 25°С до 250°С за 60сек.

Алгоритм регулирования мощности следующий: при приближении к заданной температуре менее чем на 10С мощность подводимая к паяльнику уменьшается на 10% на каждый град.С.

Для того, что бы точно выйти на заданную температуру в программе вводится температура смещения Tsm, которая принудительно смещает уставку до +–10°С. Первоначально смещение равно +2°С. Если температура паяльника находится в диапазоне (Задан.темпер+Tsm)>=Тек.темпер. >= ( Задан.

темпер +Tsm − 10°С), тогда происходит постепенная коррекция смещения Tsm: если Задан.темпер.>Тек.темпер., то смещение Tsm увеличивается на 0,1°С, если Задан.темпер.

Тек.темпер., то смещение Tsm уменьшается на 0,1°С. Таким образом температура достаточно точно выходит на заданную, и колебания не превышают +–1°С. Это фактически аналог пропорционально-интегрального регулятора.

Усилитель сигнала термопары собран на специализированной микросхеме AD8551 по классической схеме. Когда паяльник с термопарой отсутствует, резистор R36 подтягивает не инвертирующий вход к «+» питания, в связи с чем, на ее выходе появляется +5В. – контроллер определяет отсутствие датчика.

К сожалению, на плате не хватило места для включения AD8551 по стандартной схеме из даташита – с компенсацией температуры холодного спая, поэтому температура холодного спая задана жестко – 23°С и в программе не учитывается ее изменение. Желающие увеличить точность измерения могут включить DA3 по рекомендуемой схеме.

Измерение температуры резистивного датчика производится с помощью делителя образованного резистором R26 и терморезистором паяльника.

Детали и монтаж

Все примененные детали, кроме DA2 и VT1 – SMD. При проверке индикатора HL1 KOOHI E30361LC8W (с общим катодом) оказалось, что даже при токе 2 мА на сегмент, яркость свечения была достаточно интенсивной.

Это позволило обойтись без дополнительных транзисторов, подключив катоды непосредственно к портам контроллера, так как суммарный ток не превышал разрешенные даташитом 40мА на порт. При недостаточной интенсивности свечения возможно уменьшение гасящих резисторов до 560Ом.

Индикатор HL1 подпаян к плате тонкими проводами МГТФ, после чего закреплен с обратной стороны к ней же термоклеем.

L1,C3,C5 служат для дополнительной фильтрации питания контроллера, их значения некритичны. С9, С3 – танталовые. VT1 – любой аналогичный с допустимым током не менее 5А и порогом открывания не более 2В.

На DA2 необходимо установить небольшой радиатор, для VT1 радиатор не требуется. R33, С10, С11, С12 – служат для фильтрации помех в измерительных цепях: их значения некритичны.

SA1, SA2 – микрокнопки без фиксации, запаяны с обратной стороны платы (со стороны индикатора).

Если у кого-то не предвидится паяльник с термопарой – можно смело удалить из схемы C10, R36, R33,C11, R31, R32, R34, R35, DA3, однако вход PC0 нужно будет подтянуть к +5В резистором 10кОм.

Прошивка микроконтроллера производилась с помощью обычного LPT программатора, состоящего из 4-х резисторов (в интернете находится без особого труда).

Запрограммированные фьюзы: CKSEL3=CKSEL2=CKSEL0=SUT0=0 – галочки.

Разъем на паяльнике заменен на металлический микрофонный 6-и полюсный – родной PS/2 не внушал доверия. К выводам 1-2 разъема подпаян нагреватель паяльника, а к выводам 3-4 и 5-4 термодатчики (соответственно для терморезистора и термопары). Плата, с предварительно закрепленным на ней индикатором, закреплена в корпусе с помощью термоклея.

Схема обратноходового импульсного блока питания была взята из какого-то журнала, и была собрана на основе 561ЛА7 в качестве задающего генератора с регулируемой скважностью импульсов через цепь обратной связи.

Однако, к сожалению, с годами схема была утеряна, и найти ее пока не удалось. Рекомендую собрать БП на специализированных микросхемах серии TopSwitch или Viper, например, по схеме [4].

Неоднократно собирал БП с этими микросхемами и ни разу не было проблем – запускались сразу.

На передней панели корпуса были сделаны отверстия под кнопки и дисплей. Рисунок панели был распечатан на прозрачной пленке для лазерных принтеров в зеркальном отображении, после чего на рисунок был наклеен двухсторонний белый скотч (белый!! иначе рисунка видно не будет) со стороны тонера – кроме окна под индикатор.

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

Проще всего если кнопки приклеить к передней панели термоклеем – тогда не нужно точно фиксировать плату с кнопками.

Настройка паяльной станции

Калибровку измерения температуры можно произвести в «железе», а можно программно. Для калибровки в «железе» канала измерения температуры термопары необходимо подогнать коэффициент усиления AD8551 подбором резисторов R34, R35. Для калибровки канала измерения температуры резистивного датчика необходимо подобрать R26.

Для программной калибровки нужно подобрать коэффициенты в строках 80..83: Для резистивного датчика: const_rt0 – значение полученное АЦП контроллера при температуре датчика 0гр.С(т.е. смещение характеристики); const_drt – приращение количества шагов АЦП при изменении температуры в 100град.С (т.е. наклон характеристики).

Для термопары: const_THA0 – температура умноженная на 10 холодного спая термопары; const_THA – приращение количества шагов АЦП при изменении температуры в 100град.С. Hex-коды прошивки контроллера, исходный проект на Си (для CodeVisionAVR V2.04.4a), схема и разводка платы (PCAD2006) прилагаются к статье.

Скачать прошивку, проект в CodeVisionAVR, печатные платы в P-CAD

Литература

1.DI HALT. Трактат о паяльниках http://www.radiokot.ru/circuit/power/supply/07/2.Д. Мальцев. Термостабилизатор паяльника на микроконтроллере. Радио №2/20103.Pavel V. Цифровая паяльная станция своими руками. http://www.radiokot.ru/lab/controller/10/ И4..Анисимов. Импульсный БП 60Вт на TOP246Y. http://www.radiokot.ru/circuit/power/supply/07/

5.Доработка паяльника от паяльных станций Lukey. http://www.mirmasterov.com/dorabotka-payalnika-payalki-lukey-702.html

Источник: http://shemu.ru/cifrovueshemu/271

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}