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

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

  1. bamik

    bamik Нерд

    Правильная работа ПИД основана на расчетах через равные промежутки времени. Точнее, это касается только Д составляющей. Она ответственна в предсказаниях будущего. ПИ же на время начхать. Если делать ПИ регулятор, то можно асинхронно вычисления делать. И регулятор будет работать правильно. Но если делать ПИД, то требуется строгое соблюдение таймингов, иначе предсказания будут неверны.
     
  2. alfataks

    alfataks Нерд

    А какие у Вас коэффициенты установлены для верха?
    ПИД регулятору очень трудно справляться с керамикой, особенно когда датчик температуры устанавливается на плате. Для нормальной работы на керамике, надо датчик устанавливать на сам нагреватель, как сделано у ТермоПро. Поэтому я и отказался от керамики для верха.
     
  3. alfataks

    alfataks Нерд

    Для людей использующих керамику в верхнем нагревателе, необходимо переделывать скетч и устанавливать еще один датчик температуры на сам нагреватель и завязывать его на ПИД регулятор, а датчик на плате использовать для выполнения профиля. Китайцы в свое время поняли это и стали термопары устанавливать в свои нагреватели.
     
    SOLOway нравится это.
  4. Dmitrysh

    Dmitrysh Гик

    Последний раз ставил 32 05 16. Ну а вообще разные пробовал, эффект примерно тот же - вылет около 5-8 градусов.
    А поподробнее, может алгоритм есть?
     
  5. alfataks

    alfataks Нерд

    Алгоритма нет, так как сделал проще, поменял керамику на кварц. А вообще была задумка привязать температуру на нагревателе к установленной температуре по некой таблице.
    К примеру: установленная 120 градусов соответствует температуре 350 градусов на нагревателе, но это все надо вычислять опытным путем и есть один минус, расстояние от нагревателя до платы должно быть всегда одинаковым. Подобный алгоритм используется в контроллерах ТермоПро. Мне когда то очень понравилась работа контроллера ТермоПро и я искал информацию о его работе, нашел мало информации. Но накаком то форуме читал, что датчик на плате используется только для выполнения профиля, а за стабильность температуры и скорость ее роста отвечает датчик на нагревателе. Другими словами, сам контроллер привязан к датчику на нагревателе, а сам датчик на плате больше взаимодействует с программой на компе.
     
    Последнее редактирование: 14 май 2018
  6. alfataks

    alfataks Нерд

    У меня была когда то возможность поиграться со столом ТермоПро, но не было их стоек на плату, использовал бронзовые гильзы с корпусов. Так вот, расстояние до платы у меня было больше, чем на оригинальных стойках и температурана плате поднялась только до 143 градусов, а время нагрева увеличилось почти в 2 раза. Расстояние от нагревателя до платы-вот и весь алгоритм, просто и надежно и ПИД не дуреет.
     
    SOLOway нравится это.
  7. SOLOway

    SOLOway Гик

    Дда-а-а-а-а!:)

    А помните, был такой проект, станция-автомат от IgorM...
    Собрал его посты, можно почитать.
     

    Вложения:

  8. SNMar4enko

    SNMar4enko Нерд

    Я уже собираю вторую - не хватает немного то материала, то денег на комплектующие..... (первая была без встроенных нагревателей). С пайкой чуть сложнее - пока только тренируюсь.
    То что ПИД коэффициенты можно подобрать один раз не спорю. Но в том и проблема что подбираем в основном эксперементально. И то есть сомнения что правильно выставил ведь обычно из подбираешь меньшими и потом ограничением мощности помогаешь избежать перелетов.
    Температуру мы меряем 2 раза в секунду и плюс фильтруем значение от колебаний. С учетом инерционности нагревателей это самое то. Откуда вы взяли что если чаще мерять температуру то ПИД дуреет. Сейчас ПИД фактически опрашиваем 10 раз в секунду, измеренная температура стоит стабильно на 5 циклов опроса ПИД. от чего тут Дуреть?
    Да и вообще что делает ПИД - он ошибку считает, и выходную мощность регулирует. С некоторым эффектом предсказания.....Сам ошибку вносить может при завышенных коэффициентах ПИД. И то эта ошибка к примеру для нижнего нагревателя будет проявляться как небольшое колебание температуры на фоне установишейся, причем чем больше инерционность нагревателя, тем не заметней эти колебания. Я эти колебания высматриваю по светодиоду включенному последовательно с диодом MOC3023, иногда помогает.
    не совсем так - нижний нагреватель греет плату до максимально возможной температуры, от которой еще не плавится припой и пластмассы ...... для того чтобы нагрев одного места сверху не повел плату (искривил) и верхний нагреватель потратил меньше сил на запайку чипа и т д - соответвенно более точно выдал температуру плавления. Платы все действительно разные по толщине, материалу - мы можем удлинить или сократить длительность предварительного нагрева низа.
    Вы вероянтей всего забыли про то что если время опроса ПИД меняется в несколько раз то и Кi и Kd автоматом перечитывается в те же разы внутри ПИД. Откорректируйте коефиициенты в нужную сторону (Кi и Kd в разные - один умножаем, другой делим) в зависимости от убыстрения или замедления ПИД расчетов. Горбы из за задирания Кi. Про изменение Kp нужно думать исходя из из того что мы должны получить ту же регулировку на выходе ПИД
    - а интегральную составляющую забыли - она внутри ПИД остается и ее тоже нада ограничивать иначе как получим инерционность самого ПИД.
    - Это не так. Там прерывание, там какая-то задержка, там Бипер пикнул, там опрос датчика температуры задержался ..... равными они не когда не будут

    Я уже не однократно повторял и еще повторяю: Мы рассматриваем нашу паяльную станцию как систему. Даже 2 - для двух нагревателей. Что необходимо - с точностью до 1 градуса регулировать температуру.Так как мы паяем про профилю который растет поградусно. Логично было бы выбрать какое то быстродействие системы. Мы его выбрали - 0.5 секунды. Что это значит - наш ПИД сформирует установившееся значение на выходе за это время и в идеале нагреватель тоже догрет до этой температуры. Что для этого нужно (установившееся значение) ? Нормально работающий ПИД обычно изменяет свое значение на 1 за один опрос. Если у нас выходных значений ПИД 100, то в самом хужем случае нам нужно опросить ПИД те 100 раз. Уменьшение или увеличение выходной шкалы ПИД также приводит к увеличениию или уменшению необходимых Циклов опроса ПИД и соответсвенно уменьшение или увеличения периода опроса ПИД. Я повторюсь что расчет ведется для самого хужего случая - обогреватель был выключен, и чтобы нагреть нужно включить 100% мощности. В реальности к примеру нижний нагреватель нагрет до 134 градусов а необходимо нагреть до 135. Мощность на необходимый 1% ПИД добавит за 1 цикл. Вот таких моментов в работе станции очень много и они нас сбивают - потому как кажется что быстродействия ПИД хватает. А что оно у нас для таких случаев 5ти- кратное. Далее еще есть момент для 100 кратной шкалы ПИД период получается период ПИД равный 5милисекундам - так вот чтобы нормально отрабатывал регулятор мощности необходимо его рулить ШИМ с периодом как минимум те же 5 микросекунд. У нас привязка к частоте сети - полупериод 10милисекнд (100 гц). Получается что для фазовой модуляции сетевого напряжения симимистором управляемой MOS без детекции нуля в необходимо выбрать шкалу 50. Напоминаю что для одинаковых значений на выходе ПИД при уменьшении шкалы ПИД необходимо пропорционально уменьшать все коэффициенты ПИД. И так как в библитеке ПИДа внутри пересчитываются Ki и Kd при более частом или редком опросе ПИД - а мы учащая опрос ПИД приводим к пересчету этих коэффициентов - то прошу не забывать менять и их.
     
    Последнее редактирование: 14 май 2018
    Dmitrysh нравится это.
  9. SOLOway

    SOLOway Гик

    Термопрошники на своих столах а) ограничили конструктивно макс t*C, до которой включенный напрямую в розетку он сможет разогреться, б) опять же конструктивно, обеспечили невозможность мгновенного всплеска t*C стола и даже просто опасно высокой скорости прироста t*C (2 комплекта штатных стоек по 10мм и по 15мм высотой). Их термостолы не знают текущую температуру платы! Профиль преднагревателя выполняется своим контроллером и датчики интересуются только самими своими нагревателями.
     
    Dmitrysh нравится это.
  10. Dmitrysh

    Dmitrysh Гик

    Я уже писал, что дифференциальная составляющая при втором и далее расчёте после получения температуры равна нулю и Kd никак не влияет на выходной параметр.
    Вообще-то по нижнему нагревателю у меня Ki=1 меньше только 0.
    Правильно организованное прерывание не вносит ощутимой задержки. Да и у вас в скетче все в прерывании нормально, оно по времени копеечное. bamik все таки прав, должны быть равные промежутки времени при расчётах, там все же интеграл и производная.
     
  11. Dmitrysh

    Dmitrysh Гик

    Это не так, ПИД выдает столько сколько он насчитал в зависимости от ошибки. Ну смотрите задаем температуру 120градусов, текущая 20, ошибка 100, даже при Kp=1 имеем на выходе 100 плюс интеграл и дифференциал. И чем больше ошибка тем больше выходное воздействие. В теории оно бесконечное, но мы его ограничиваем до 100%, потому нам так удобнее.
     
  12. Dmitrysh

    Dmitrysh Гик

    Не делайте так, пусть ПИД сам решает вопрос температуры.
    А это следствие предыдущего заблуждения.
     
  13. SNMar4enko

    SNMar4enko Нерд

    Посмотри мои скетчи 2.0.7 и 2.0.8 на http://radioservice.at.ua/forum/23-27-9 там по умолчанию для керамики - они немного занижены и ограничением мощности подбирал велеты. Коеффициенты там 10 и 100 кратные - обрати внимание. Самое удивительное что когда цепляешь лампочку вместо нагревателя - система ведет себя как большой тормоз - сплошное отставание от заданной температуры - даже 10-15 градусов. Для лампочки необходимы пропорциональный раза в 3 больше, интегральный в 7 раз больше, диффиринциальный лишь на 2 процентов больше. . Вот как придают проблем неправильные коэффициенты. Да и они у меня возможно чуть занижены. Вообще правильно выставить коэффициенты ПИД возможно но нужно мерять или снимать график, рисовать касательную .... считать ее наклон, учитывать общее время нагрева. Общим сложно.

    Может мерять осциллографом ШИМ на нагреватель через диффиринцирующую цепочку? но какие номиналы резистора и кондера? не исказят ли измеренные показания ?
     
  14. Dmitrysh

    Dmitrysh Гик

    А можно поподробнее, а то у меня есть возможность получить график.
     
  15. SNMar4enko

    SNMar4enko Нерд

    Во первых у вас коэффициенты завышены:
    Для нормальной системы как рекомендуют писатели библиотеки 1 2.5 0.4 - но это для опроса 10 раз в секунду и 100 значений выход. Если у нас 100 раз в секунду то чтобы ПИД выдал то же установленное значение на выходе коэффициенты должны быть в 10 раз меньше то есть 0.1 0.25 и 0.04. Теперь проанализируем установившееся значение: при нем температурная ошибка стремится к нулю (а не 8 градусному перелету) - мы должны вести систему ориентируясь на то что ошибка у нас прыгает от 0 до 1 градуса - посмотрите на скетч - пайка по профилю - мы ведем температуру скачками на 1 градус - не на это ли надо ориентироваться с учетом того что остается только Интегральная составляющая а не пропорциональная как вы приводили пример.
     
  16. SNMar4enko

    SNMar4enko Нерд

    общим в том проекте станция на UNO и TFT дисплее как у нас одна с веток:
    используют ПИД:

    U = K * ( Err + (1/Ti)*Int + Td*dErr )

    • U — мощность, которую следует выдать;
    • K — пропорциональный коэффициент (обратите внимание — вынесен за скобки, почему — чуть ниже опишу);
    • Ti — постоянная времени интегрирования. Обратите внимание — в расчетах используется обратная величина;
    • Td — постоянная времени дифференцирования
    • Err — текущее рассогласование (разница между уставкой и измеренной температурой
    • dErr — производная рассогласования (разница между текущей и прошлой ошибкой)
    • Int — накопленный интеграл рассогласования (сумма всех Err'ов, кои мы видели)
    Общим я видел только видео - задают определенную мощность в процентах - включают нагреватель и рисуют график температуры от времени. Далее до нарисованного графика графика лепять касательную. Выбирают обычно место в начале графика где самая большая скорость роста температуры. И если я правильно понял то К это размер отрезка касательной по оси температур, а Ti и Td - это размер того же отрезка по оси времени. - сам отрезок пропорционален ограничению мощности. Да и время брать как и измерено в секундах или мили или микро. Да и температуру в градусах напрямую в коэффициент?
    общим для нашего ПИДа Kp=K, Ki=K/Ti, Kd=K*Td - больше не могу добавить.

    Еще есть метод по измерению колебаний выхода (Периода, амплитуды ...) при завышенном Kp.
     
    Dmitrysh нравится это.
  17. alfataks

    alfataks Нерд

    К сожалению теоретики меня не услышали. О какой быстроте реакции ПИД Вы говорите, если датчик температуры установлен на плате, в 3-5 см. от нагревателя, плюс воздушная прослойка между ними, не самый лучший проводник тепла и какую информацию об изменении температуры этот датчик предоставит за 0,5 сек. для рассчетов и с какой нагреватель способен изменить температуру за 0,5 сек., что бы датчик температуры это почувствовал? У Вас что, термоядерный реактор в качестве нагревателя, или может термопара с точностью хотя бы до тысячных, нет конечно, максимум термопара китайская с погрешностью процентов 10 и скорость реакции на изменение температуры у нее хорошо если 1,5-2 секунды, плюс вышеперечисленные условия нагрева, вот от этого ПИД и дуреет.
     
    CLON2 и Dmitrysh нравится это.
  18. Dmitrysh

    Dmitrysh Гик

    Про такой читал и пробовал, что-то не срастается. Пробовал библиотеку автотюна подключать - не работает. Пробовал автотюн из 3д принтера - тоже какая-то ересь.
    Не буду спорить, надо смотреть.
    У меня пока так и есть 10/100.
    Дак перелёт для классического пида это правило. Просто перелёт 8 градусов а потом возвращается к уставке. Мне так не нравиться, хотелось бы точность в 1 градус хотя бы.
    Интегральная ошибка это как раз источник перелёта температуры. Дело в том, что когда у нас ошибка равна нулю, то пропорциональная составляющая равна нулю а ПИД выдает ненулевое воздействие за счёт накопленного интеграла. Этому препятствует дифференциальная составляющая как бы аннигилируя интеграл. А у вас диф составляющая равна нулю, при 2, 3, и тд расчётах. Чем убрать интеграл? А он убирается отрицательной ошибкой(перерегулирование). Вот как то так.
     
  19. alfataks

    alfataks Нерд

    Теперь по разогреву платы.
    Задача нижнего стола подогреть плату до определенной температуры, но в разных участках платы все ровно будет разная температура и отличия могут быть существенны. Если датчик низа установить подальше от зоны пайки, то разность в показаниях между датчиком низа и верха будет 10-20 градусов.
     
    Dmitrysh нравится это.
  20. Dmitrysh

    Dmitrysh Гик

    Услышали и я с вами согласен.