ИК паяльная станция на Arduino Mega 2560. Доработка скетча "ARS_v2_Lilium_JSN"

Тема в разделе "Arduino & Shields", создана пользователем vector99, 7 дек 2016.

  1. SOLOway

    SOLOway Гик

    Dmitrysh, приветствую!
    Чтоб не путаться, я обновления вношу в свой пост #1619
    Там более понятно, откуда ноги растут - ссылки есть на начальный вид версии для UNO + LCD2004, что Roniks59 пытал. Я каждую инкарнацию с правками от вас архивом туда цепляю, взамен устаревшего, и в посте этот факт фиксирую.
    Релиз существует сейчас в двух версиях: с простыми и с аналоговыми кнопками. А также каждая версия есть с выводом графиков в serial port plotter 1.2.0, а есть с выводом графиков в прогу heater из поста #627
    Я использую тот, что сейчас там прикрепил.
     
  2. CLON2

    CLON2 Нерд

    Не будет.... это не детектор 0... это опторазвязка сигнала о наличии переменного напряжения. На выходе логическая "1" TTL при наличии переменки 220В на входе. Если выпаять конденсатор как то дышать будет, но с пропуском полупериодов. Лучше тогда вообще без него а с прерыванием по программному таймеру.
     
    Последнее редактирование: 1 дек 2018
  3. Watashi

    Watashi Нерд

    Частично поддерживаю CLON2, у этой штуки не то предназначение, которое нужно в данном проекте. нравится только то что это хорошая основа для детектора нуля, есть входные-выходные клеммы, входная часть, выходная, нужно добавить несколько деталек и все получится )) схемка должна быть похожа на прилагаемую (схема взята, наверное, с этой же ветки). А вот про программный таймер все не так просто, детектор нуля нужен для уменьшения помех при открытии семисторов в твердотелке.
     

    Вложения:

  4. CLON2

    CLON2 Нерд

    У "нас" в твердотелке стоит оптопара типа МОС3063 (http://html.alldatasheet.com/html-pdf/5043/MOTOROLA/MOC3063/258/1/MOC3063.html) уже с определением 0 , и переключение осуществляется в 0 и программа использует алгоритм для работы с такой "твердотелкой". А помехи там где симистор коммутируется уже под напряжением (током) т.е. при фазовом регулировании, тогда нужна синхронизация от 0 и "твердотелка" без определения 0 с оптопарой типа МОС3023 (https://static.chipdip.ru/lib/222/DOC000222831.pdf). При использовании того модуля без конденсатора у нас получится что только в следующем полупериоде откроется симистор после прохождения через 0 напряжения. При соответствующей настройке ПИД-регулятора и большой инерционности нашего объекта управления выпадение одного полупериода особо не скажется на регулирование.
     
  5. SOLOway

    SOLOway Гик

    По-видимому схема там такая:
    AC TTL optoisolator.jpg
    Да, там и электролит и лед и зеннер лишние в смысле применения в качестве детектора ноля :) . Что-то я поленился сразу зарисовать схему, Зато сейчас собрал её без лишних элементов и для наглядности к осциллографу подключил (Второй канал через понижающий трансформатор).
    Почему? - там же 100Гц, а не 50Гц, потому, что после моста 100Гц, соответственно оптрон срабатывает как нам надо.
     

    Вложения:

    • AC TTL optoisolator.zip
      Размер файла:
      46,8 КБ
      Просмотров:
      15
    • test.jpg
      test.jpg
      Размер файла:
      591,6 КБ
      Просмотров:
      59
  6. CLON2

    CLON2 Нерд

    Я написал слово "полупериод" а не период.... Нам нужен короткий ТТЛ импульс в 0 или немного перед 0. Пока вот-тот широкий импульс (в виде "обрезанного" полупериода у Вас на осциллограмме) придет на прерывание контроллера и тот даст команду "твердотелке" на открывание симистора сетевое напряжение на симисторе и оптроне "твердотелки" будет не 0 и "твердотелка" имея в своем составе схему определения 0 не откроет симистор и будет ждать следующего полупериода, т.е. первый полупериод вывалится из общего времени регулирования. "Наша" программа все равно детектор 0 использует как генератор временных импульсов (считает количество полупериодов во время которых нужно держать симистор открытым и количество полупериодов во время которых его надо выключать) и если их 100 или 1000 то выпадение первого полупериода на процесс регулирования не скажется. С таким же успехом можно применять и прерывание по таймеру зная что величина частоты в сети более-менее постоянная (настраиваем таймер на 10мС и получаем тот же генератор временных импульсов), даже если управляющий импульс (при работе по прерыванию таймера) придется на середину полупериода то выпадет только один полупериод из 100 или 1000 в зависимости от того на сколько полупериодов открывает симистор ПИД регулятор.
     
  7. vector99

    vector99 Гик

    А можнопопросить сделать осцилограмму относительно сетевого напряжения и управляюшего сигнала на SSR рэле при 100% мощности!!!
    Думаю это расстивит все точки в дисскуссии или добавит новых головняков!
     
  8. SOLOway

    SOLOway Гик

    Всилу разброса параметров как самих покупных SSR,так и собранных "на коленке", да и примитивных схем детекторов (нам их никогда не синхронизировать IMHO), действительно, может добавиться головняков. А мнение Leonid0071 в его посте #1774
    и мы примем на вооружение. И детектор оставим для тех версий скетчей, где применяется фазовое управление с силовыми без встроенных ZCC.
    Кстати! Поскольку верх мало у кого более 500 Вт, может быть кто-то и переведёт канал ВИ на ШИМ-управление мощным полевиком или IGBT, как в станции 4uvak с сайта паяльник? (Читали, кстати, сколько замеров температуры в секунду контроллер 4uvak делает?! (но у него аналоговое измерение))
     
  9. Leonid0071

    Leonid0071 Нерд

    [QUOTE="SOLOway, post: А мнение Leonid0071 в его посте #1774
    и мы примем на вооружение.[/QUOTE]
    мое мнение (а правильнее мое ИМХО) можно сформулировать гораздо проще, сейчас поработав еще и с PC410 (в котором как известно есть контроль перехода через ноль и т.п. вещи) могу однозначно сказать, что 99.9% точности регулирования зависит исключительно от правильности настройки ПИД регулятора. т.е. я (скажу за себя и только за себя) на arduino без контроля 0ля могу получить точность "выхода и удержания" выше чем на PC410 с контролем нуля...
    далее, каждый решает для себя сам - важна ему 0.1% или нет ...

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

    Кстати, хочу подкинуть идею, реализации которой нет ни у меня, ни в проекте здесь представленном,
    во всех дорогих станциях (например в софте "головы" от ТЕРМО-ПРО, станци Achi HR15000 и т.п.) есть действительно очень полезная вещь - это подстройка работы станции (ПИД?) под параметры окружающей среды т.е. того места где эксплуатируется оборудование...
     
    Последнее редактирование: 2 дек 2018
    Yojiq нравится это.
  10. CLON2

    CLON2 Нерд

    К сожалению моя сила сейчас еще в разрухе... и сделана она не на твердотелке но смысл тот же.
    IMG_20181202_171955.jpg
    Пока могу констатировать что Fotek SSR-25DA-H при постоянном сигнале управления дает на нагрузке чистую синусоиду.
    Скриншот 2018-12-02 17.13.16.png
    У кого есть и сила и осциллограф (и развязывающий трансформатор) снимите картину...
     
  11. vector99

    vector99 Гик

    Да, видимо не то что я хотел. При использовании детектора нуля и алгоритма Брезенхема на каждый полупериод синусоиды (в теории при установленой мощности в 100%, при меньшей мощности, то с пропуском) должен поступать сигнал на открытие симистора. Хотел бы увидеть в какой момент прохода синуса этот сигнал проскакивает.
    К осцилограмме желательно приложить используемую схему детектора нуля.
    Можно сделать осцилограмму относительно детектора нуля и управляющего сигнала!
    Подозреваю что при одинаковых схемах у разных участников измерений показания бутут разные!
     
  12. Yojiq

    Yojiq Нерд

    В продолжение...
    У меня настольная термовоздушка Lukey-702 и когда я паяю феном начал замечать что лампа настольная дрожит светом, я ее заменил, но результата это не дало, а когда включаю ИК с тремя зонами нижнего лампы дрожат чуть ли не в пол синусоиды. Дискомфорт конечно есть от этого, но замеры я не делал, пока мирюсь ), скорее всего дело в проводке, есть подозрение.
     
  13. Krupikus

    Krupikus Нерд

    И снова Здравствуйте.
    На конец то я доделал станцию. И вроде как настроил PID на своей китайской керамике.
    Хотел бы посоветоваться с вами уважаемые гуру, данный термопрофиль (снизу прилагается график) имеет право на жизнь :)?
     

    Вложения:

    Нафаня нравится это.
  14. SOLOway

    SOLOway Гик

    Тесты с китайским REX-C100 показали этот же результат...
    Попытка настроить REX-C100 с термопарой на поверхности платформы утюга - с треском провалилась... У меня изначально термопара прижата снизу платформы, в углублении в центре - вот с ней на этом REX-C100 удалось картину получить приемлемую, хотя и далёкую от идеала.
     
    Последнее редактирование: 8 дек 2018 в 23:24
  15. SOLOway

    SOLOway Гик

    Dmitrysh, приветствую!
    Подскажите, пожалуйста, по коду ПИД.
    Значение коэффициентов "P" и "D" на дисплее можно задать 0-255. Но в скетче, в меню для них разрешено
    Код (C++):
    if (kp1 >= 500)
    {
    kp1 = 500;
    Код (C++):
     if (kd1 >= 500)
    {
    kd1 = 500;
    Код (C++):
     if (ki1 >= 500)
     {
     ki1 = 500;
    Хотя они все имеют тип byte
    Код (C++):
    byte kp1;
    byte ki1;
    byte kd1;
    Значение коэффициента "I" на дисплее можно установить от 0 до 25. А в скетче указано, что на дисплей выводится значение делённое на 10.
    Код (C++):
          lcd.print("I=");
       lcd.print(ki1 / 10);
    Так? Это означает, что минимально возможное значение "I" ПИД использует =10, а максимальное =250?
    А вот эти строки ограничивают минимальное и максимальное значение для "I" 0-100 почему?
    Код (C++):
    #define i_min 0.0//минимум И составляющей
    #define i_max 100.0//максимум И составляющей
     

    Вложения:

  16. Dmitrysh

    Dmitrysh Гик

    Это классический атавизм, пошло из первых релизов скетча. И было это ошибкой. Там переменные были типа int, но в eeprom записывались только по 1 байту.
    В принципе можно было задать значение и больше 255(до 500) но в eeprom записалось бы все равно не более 255, а заданное значение работало бы до переключения профиля или до выключения питания.
    Так что смело ограничивайте 255.
    Так
    Минимальное равно 0, а максимальное 255(хотя ограничено 500 - это не правильно). Просто мы не видим значения не кратные 10. Зачем это сделано, мне, если честно, не понятно. Там нужно выводить всё как есть, т.е
    Код (C++):
    lcd.print(ki1 );
    Не путайте I он же Ki c i_min или i_max.
    I он же Ki это коэффициент интегральной составляющей, а i_min или i_max (а в нашем скетче это integra) это сама интегральная составляющая.
    Интегральную составляющую принято ограничивать, чтобы не растить бесконечный интеграл и не замедлять реакцию системы. Как правило интеграл ограничивают максимальным выходным воздействием, в нашем случае это 100% или 100.
     
  17. Dmitrysh

    Dmitrysh Гик

    Попробовал реализовать режим фиксированной мощности.
    Получились следующие режимы.
    режим 1 (в скетче PID) - классический ПИД, все как и было изначально
    режим 2 (в скетче Manual) - ручной режим с заданием фиксированной мощности при включении верхнего нагревателя
    режим 3 (в скетче Auto) - автоматический режим с фиксацией мощности НИ после включения ВИ.
    В ручном режиме необходимо задать мощность которую будет держать НИ при включении ВИ
    С автоматическим режимом могут быть косяки, проверить мне не на чем, смотрел в Proteus с виду работает. Добавились 2 новые переменные, в скетче подробно описаны. Скетч для экспериментов использовал release_1.3.3. Компилировал под arduino nano в Arduino IDE 1.8.4
     

    Вложения: