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

Тема в разделе "Глядите, что я сделал", создана пользователем Jalnin, 2 ноя 2012.

Статус темы:
Закрыта.
  1. Sema

    Sema Нерд

    При п5 и Д0 будет как при П 100)
    Отключится только после выхода на уставку
    Эксперименты с станцыей смогу после обеда продолжить, на дачу еду.

    Как приеду, поставлю уст120 гр мощьность 100%
    П4 и0 Д75 и выложу график
     
    Последнее редактирование: 23 май 2020
  2. SOLOway

    SOLOway Гуру

    Мы друг друга не понимаем, вероятно... При P=5 наберёт с комнатной 120°С за 4,5-5мин и при P=100 наберёт с комнатной 120°С за 4,5-5мин.?
    Я рассказывал про керамику в посте #2415 , мы эту схему немного изменили, теперь вместо переключателя кнопка без фиксации и добавился диод между выходом на НИ с ардуино и коммутатором входов НИ силовой платы. Когда включена станция и установлены плата и датчики, жмем и удерживаем кнопку (S5 на схеме) пока по датчику НИ плата не нагреется на 5-10°С, затем кнопку отпускаем и жмем старт профиля.
     

    Вложения:

    • 1.3.4_cxema.zip
      Размер файла:
      33 КБ
      Просмотров:
      278
  3. geleos27

    geleos27 Гик

    Очень сильно помогает в отстройке график мощности.
    Термопара установлена на нагревателе, либо максимально рядом + закрыта от сквозняков
    01-Успешно-снял-1.PNG

    Какие эксперименты вас интересовали? Пока есть время - могу выполнить пару заданий.


    ------ Дальше о своем ---------
    Настраивал вчера ПИД, вроде получилось.
    Самое важное - нижняя темно зеленая линия: это отклонение температуры платы от её термопрофиля.( -50 = 0 отклонения)
    (не превышает 10 градусов на протяжении всего профиля)
    Перелет в конце на 5 градусов - тормознул с поднятием верха.

    Стабильное превышение температур ВИ и НИ над их графиками - результат работы корректировки ПИД Платы.
    Если поставить еще более теплоемкую плату, будет догревать сильнее, естественно с учетом ограничения макс температур ВИ и НИ.

    22_Наложенный.PNG

    Верх - Elstain HTS/4 250вт
    Низ - спирали под стеклом как вот в этом видео
    По одной термопаре расположено на нагревателях + 1 на плате возле чипа

    // PID верха,
    3, 4, 5,
    // PID низа,
    1, 3, 5,
    // PID Платы,
    8, 5, 10,

    Термопрофиль градус в градус передран от ик 360
     
    Последнее редактирование: 23 май 2020
  4. Wzor

    Wzor Нерд

    SOLOway скажите, а ATMEGA328P Pro Mini подойдет для версии 1.3.4?
     
  5. SOLOway

    SOLOway Гуру

    Они есть на 3,3в/8МГц и на 5в/16МГц. Последняя подходит, для связи с ПК можно применить USB-UART модуль из китая, или использовать USB дата-кабель от старинных мобильников, например такой: https://www.liveinternet.ru/users/a1addin/post223674362
    1.3.4_ProMINI.jpg
     
    Последнее редактирование: 23 май 2020
    Wzor и hacjka нравится это.
  6. Wzor

    Wzor Нерд

    Именно есть на +5В. Есть мега также но нет дисплея под нее. Хотя компилил 1.3.4 под мегу и норм с компилилась. А дисплей за 1к как то не комильфо.
    Самое то атмега328 с 2004 экраном))) Бюджетно и практично)
    СПС за разъяснения!
     
  7. geleos27

    geleos27 Гик

    Ох не быстро это дело будет там прилично надо дописать)

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

    Это дает лучшее понимание как ПИД рулит нагревателями. Удобно на этапе настройки в основном.


    Чувствую я таки займусь переделкой Port Plotter в программу для управления паялкой...
     
    SOLOway и hacjka нравится это.
  8. SOLOway

    SOLOway Гуру

    Это, как раз, я осознаю. Вы не полностью цитируете, а основной смысл вопроса во второй части :)
    И благодарю, за разъяснение про Y-STEP - я дооолго тупил с пониманием её :)
     
  9. Sema

    Sema Нерд

    до ошибся маленько про п5ип100 п 5 после 100градусов пид начинает убавлять мощьность!
    и на 100% хреновато использовать ни(воняет малость))

    по поводу костыля с кнопкой,
    можно это добавить в ардуино?
    тоесть, в меню обозвать как преднагрев низа, функция время подтяжки пина на +5 низа.
    в меню обозвать преднагрев верха подтяжка пина к+5 и перед каждым шагом если полка буде 10сек то ви остынет,,,,не могу одекватно сформулировать))))
     
  10. geleos27

    geleos27 Гик

    Пардон, тогда попробую ответить на вторую часть:

    Да, нужно сохранять Логи \ графики, я пока обхожусь скриншотами всех своих прогонов + записью в текстовом файле что изменил (параметры пид, логику алгоритма и т.д). + на отдельные в фотошопе накладываю график, для анализа.
    Если всё это будет в программе делаться автоматом - настройка превратися в сказку))

    Один раз задается ограничение мощности или несколько - не принципипльно.

    Если график ПИД упирается в Максимум (видим абсолютно плоскую линию), и при этом плату не догревает? вероятно надо увеличить Mаксимум. Аналогично при MIN и перегреве.

    Если резкие скачки мощности - уменьшить D, если горбики в процессе быстрого нагрева, уменьшить I.
    Фиолетовый - график температуры НИ, зеленый - график его мощности
    11.png

    Для высокоинерционных нагревателей такое не критично
    13.png

    Но важный момент. У меня термопары на нагревателях. Поэтому реакцию на скачки можности видно сразу. Если делать 2 термопары я хз как правильно отстраивать пид Верха чтобы не было жестких перелетов температуры нагревателя) Если есть контроль температуры верха отстроить можно нагреватель с любой инерционностью. (т.к. Ограничение мощности можно реализовать не абсолютным значением от 0 до 100, а точной температурой)

    PS: могу немного путать терминологию: график мощности = график выхода ПИД, мощность = результат вычисления ПИД.
     
    Последнее редактирование: 23 май 2020
    SOLOway нравится это.
  11. SOLOway

    SOLOway Гуру

    Вы не поняли смысл полки. Полка это удержание уставки шага ВИ нужное вам время. Полка нужна для избавления от механических напряжений в материале платы и для более полной передачи тепла нагреваемому объекту, например, чипу. В центре под чипом температура выше, чем по его краям, чтобы тепло хорошо распределилось по всем шарикам, надо некоторое время подержать температуру на одном уровне. Т.е. если мы достигли конечной температуры по термопрофилю, а чип не поплыл, можно либо выдержать полочку на этой конечной заданной в меню температуре профиля (это правильно), а можно в профиле указывать конечную температуру немного выше, но во втором случае центральные шары могут вырваться наружу, и еще разные беды с чипом могут приключиться ... Преднагрев ВИ не всем, наверное, нужен - ВИ меньше размера НИ, а плотность мощности (Вт/см.кв.) у него - значительно больше, чем у НИ, к тому же до его включения он подогревается теплом от НИ и платы. Можно преднагрев НИ через digitalwrite и в прошивке реализовать, а так ли необходимо? Кнопка и диод всего у меня, а гибкость лучше, чем через меню, т.к. в мастерской может быть и холодрыга. Вот что я добавил бы на термостол, так это термостат механический, платы сушить после промывки, но на большую мощность, скорее всего термостаты только электронные...
     
    Последнее редактирование: 13 авг 2020
  12. Sema

    Sema Нерд

    Как эту функцию вкорячить между стартом и пид ни и ви, можно без вывода на дисплей, тоесть в теле скетча настроить ее.
    При старте ви( он холодный) уставка убегает градусов на 10 от показаний термопары!
    И ви пытается его догнать, вконце жаря бедный чип!
    Низ на 100% мощьности нагревается до красна за 70 сек, на плате это градусов 60 гдето!

    Добавил график в пост и папку с графиками на ядиск.
    Запустил с 100% п3 и0 Д30
    И затупил конкретно!
    Низ поидее должен был до 100 градусов уменьшить мощьность, но в место этого он продолжил жарить, и иногда убавлять мощьность! После уставки 120гр также, подкидывал дровишки.
    Сейчас остынет плата, запущю п4 и0 Д75

    Пид отличается от 1.3.4 из шапки?
    заход с spploter
    120г100%п4и0д5spp.png

    ЗАХОД 2 с SPPLOTER
    и изменениями в пид2 от geleos27
    п3и0д20 spploter.png

    Заход 3
    П1И1Д40 120гр
    120гр100%п1и1д40spploter.png
     
    Последнее редактирование: 24 май 2020
  13. geleos27

    geleos27 Гик

    Вопрос по ПИД, поправьте где ошибся:


    П - коррекция мощности в % при недогреве на 1 градус = 1 градус * P мощности
    (т.е. если P=5, при отклонении на 10 градусов прибавит 50% мощности)

    И - коррекция мощности в % при недогреве продолжительное время = отклонение * I мощности каждую секунду отклонения от уставки (накапливается, начинает убывать только при перелёте через уставку)
    (если I = 5 (/1000 в скетче) при недогреве на 10 градусов в течении 40 секунд добавит 2% мощности (плавно повышая каждую секунду)) Но эти 2% будут продолжать увеличиваться, пока температура фактическая не пересечет уставку.

    Д - коррекция мощности в % при изменениях температуры.
    (ecли D = 25, при росте температуры платы на 1 градус в секунду получим коррекцию мощности 25%
    (но у нас термопары шумят ппц как, и время измерения температуры 0.25 секунды) поэтому большие значения вносят хаос.


    Соответственно стоит ли попробовать:
    1. увеличить время рассчета D составляющей хотя бы до 1 секунды (т.е. смотреть на 1 секунду назад) Алгоритм ровно тотже что использует Watashi для отслеживания отвала термопары. Сохраняем последние 4 значения температуры, и сравниваем не с предыдущим, а с тем что было 4 измерения назад.
     
  14. Dmitrysh

    Dmitrysh Гуру

    Это скорость реакции системы на ошибку.
    расчёт верный
    накопленная интегральная ошибка. Суть её в том, что при достижении уставки(ошибка равна нулю или очень маленькая) составляющие P и D становятся равными нулю или к нему стремятся, соответственно и выходная мощность стремится к нулю а соответственно может случится ситуация, при которой при подходе к уставке нагревателю не хватает мощности за счёт составляющих Р и D. Таким образом мы имеем ситуацию невозможности достижения уставки. Вот с этим вопросом нам и помогает интегральная составляющая, добавляя необходимую мощность.
    В правильно настроенном ПИДе она практически не убывает и не нарастает вблизи уставки.
    топорно можно и так посчитать, но там физический смысл другой и ошибка никогда не бывает постоянной, система всегда движется, всё намного сложнее.
    а вот это скорость реакции системы на изменение температуры или, по-другому, предугадывание температуры на следующем замере. Физически это производная температуры по времени. Этот параметр позволяет избавится от скачков мощности за счёт резкой реакции в пропорциональном звене. Если в системе появляются колебания этой составляющей их можно подавить. Но эта составляющая очень чувствительна к колебаниям(резким) от термопары, поэтому мы используем фильтр.
    Я бы так не сказал. У нас есть фильтр, он достаточно неплохо справляется. Большие значения D просто необходимы для высокоинерционных нагревателей, потому как их реакция очень медленная и мы должны реагировать на малые изменения температуры, чтобы не было перелётов.
    Нельзя увеличивать время пересчёта только для одной составляющей, необходимо делать для всех одновременно. И да, для высокоинерционных нагревателей можно реже считать ПИД, допустим 1 раз в секунду, но при этом следует примирится с падением точности поддержания температуры, которая напрямую зависит от скорости получения температур и пересчёта ПИД.
     
  15. Dmitrysh

    Dmitrysh Гуру

    попробуйте вот так
     

    Вложения:

    • irsp.zip
      Размер файла:
      303,3 КБ
      Просмотров:
      746
    StDV и SOLOway нравится это.
  16. geleos27

    geleos27 Гик

    Считать с такой-же скоростью, как и все остальные, просто текущее значение сравнивается не со значением в предыдущем рассчете, а на 8 шагов назад (т.е. считаем изменения на интервале в 2 секунды (а не 0.25 т.к. там очень много шума и маленькое изменение при росте температуры 1 градус в секунду) (dT брать не за 1 интервал, а за 8. )


    Добавить гденибудь сверху к переменным
    Код (C++):
    byte edcount = 0;
    byte edcountprev = 7;

    Добавить снизу к функциям
    Код (C++):
    byte Pid2TEST(double temp, int ust, byte kP, byte kI, byte kd)
    {
      byte out = 0;
      static float ed[8]; // массив значений предыдущих измерений инициализируем значением начальной температуры (виден только внутри функции пид)
      e2 = (ust - temp); //ошибка регулирования
      p2 =  (kP * e2); //П составляющая
      integra2 = (integra2 < i_min) ? i_min : (integra2 > i_max) ? i_max : integra2 + (kI * e2)/1000.0; //И составляющая
      d2 = kd * (e2 - ed[edcountprev]); //Д составляющая // сравниваем со значением 8 шагов назад
      ed[edcount] = e2;
      edcount = (edcount < 7) ? edcount+1 : 0;
      edcountprev = (edcountprev < 7) ? edcountprev+1 : 0;
      out = (p2 + integra2 + d2 > 100 ) ? 100 : (p2 + integra2 + d2 <= 0 ) ? 0 : p2 + integra2 + d2;  // Ограничиваем выходные значения  100
      Serial.println(p2);  // шлем данные через КОМ для анализа
      Serial.println(integra2);
      Serial.println(d2);
      return out;
    }
    Заменить Pid2 на Pid2TEST вот в этой строке
    Код (C++):
     Output2=Pid2(Input2,bottomTemp,profile.kp2,profile.ki2,profile.kd2);
    Поделить текущее значение для D на 8

    Код дополнительно гадит в COM, показывая значения P I D. в порт плоттере надо включить Filter Incoming Data
     
  17. Dmitrysh

    Dmitrysh Гуру

    Это будет уже не D.
     
  18. geleos27

    geleos27 Гик

    Прошу прощения, но в скетче из поста 3971 похоже ошибка закралась...

    Код (C++):

      d2 = kd * (temp - ed) * 10; //Д составляющая
      ed = e;
      out = (p + integra + d< 0) ? 0 : (p + integra + d > pwr_TOP) ? pwr_TOP : p + integra + d;
      return out;
    А судя по ответу Dmitrysh в посте 3834 , должно быть - d
     
    Последнее редактирование: 24 май 2020
    SOLOway нравится это.
  19. LessNICCKoff

    LessNICCKoff Гик

    Пришли max6675. Схема запахала "релиз v2.1.2 доработан Dmitrysh. " Я так понимаю имеется 15 программ по 9 шагов? Где можно почитать описание параметров.
     
  20. Dmitrysh

    Dmitrysh Гуру

    в ПИД по "измерению" -d, да ошибка, только меня смущает код который вы привели, он явно не из версии 1.3.4. В том коде что вы привели должно быть +d
     
    Последнее редактирование: 24 май 2020
Статус темы:
Закрыта.