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

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

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

    Watashi Гуру

    Кстати, в скетче есть инструмент для замера времени:
    // Pr_WinTime(); // на экран засеченное время в мсек
    // WinStartTime = micros();
    Сначала вставляете вторую строчку в место начала измерения, а потом первую в конец и смотрите в мониторе.
     
  2. Dmitrysh

    Dmitrysh Гуру

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

    Dmitrysh Гуру

    в диапазоне 0-85 градусов(температура чипа мах6675) ошибка максимум 1.5 градуса, это и не много по сравнению со всем остальным.
    Загоните данные в serialPort plotter и увидите за счёт чего там скорость-то увеличилась. И поверьте мне между 0,7-0,3 и 0,8-0,2 принципиальной разницы не много.
     
  4. Watashi

    Watashi Гуру

    Скорее всего, не буду спорить, но результат будет не сильно отличаться.
     
  5. Dmitrysh

    Dmitrysh Гуру

    Как сказать, посмотрите на скетч проверки zcc, а там ведь 10мс всего, а ошибка уже 10%. Измерение температуры это десятки микросекунд, там ошибка значительно больше будет.
     
    Последнее редактирование: 24 апр 2020
  6. geleos27

    geleos27 Гик

    0,3-0,7 и 0,8-0,2

    Скорость выполнения функции считывания температуры скорее всего даже упала.
    Я в эксельке накидал рассчет графиков, примерно совпадает все с тем, что я намерил.
    Фактически эта функция вносит стабильную ошибку измерений температуры, равную 0.8 dT( изменения температуры за секунду) (ну или сколько мы коэфициент поставим)
    Excell.PNG

    Т.е. получается отставание на 1 секунду - это не задержка в измерениях, просто полученное значение температуры отличается от предыдущего менее чем на 1 градус, что на графике воспринимается как задержка.
    Разница температур.PNG
     
    Последнее редактирование: 25 апр 2020
  7. Dmitrysh

    Dmitrysh Гуру

    Это задержка, просто вы её не так смотрите. Скользящее среднее ну или любой фильтр всегда даёт задержку.
    В таком варианте, да, отличия будут. Но вариант 0,3-0,7 не рекомендую, слишком много шума и на больших значениях Д ПИД будет сходить с ума.
    не вносит ошибку - избавляет от возможной ошибки.
     
  8. geleos27

    geleos27 Гик

    Если я правильно всё понимаю, когда у нас происходят большие изменения температуры (dT), шум от термопары на фоне этих изменений теряется. Тогда на время этих изменений шум можно игнорировать.
    (шум термодатчика 0.5-1 градус, при этом ошибка вносимая фильтром при значениях 0,8-0,2 получается 0.8-4 градуса при dT от 1 до 5 градусов в сек)

    Эти значения используются не всегда, а только кога dT более 1 градуса в секунду

    Когда изменения маленькие (маленький прирост температуры \ рампа) (шум термопары 0.5-1 градус, ошибка вносимая фильтром 0-1 градус) - фильтруем шум активнее. (используем коэфициенты 0,8-0,2)
     
  9. Watashi

    Watashi Гуру

    Как я писал ранее
    для лучшего понимания как это работает привожу график:
    Screenshot_1.jpg
    где зеленый - это изменение цены или можно говорить температуры (в общем случае),
    красный - это Moving Average(MA) с периодом 4
    оранжевый - это МА с периодом 7
    голубой - это МА с периодом 50

    Выбор между 0,7-0,3 и 0,8-0,2 равносилен выбору периода между 4 и 5 (приблизительно)
    Стоит ли ломать копья?
     
  10. geleos27

    geleos27 Гик

    Спасибо за пояснение! Единственное 0,3-0,7 а не 0,7-0,3 и 0,8-0,2, т.е. использование периода 1.4 либо 5 в зависимости от динамики изменений.
     
  11. Watashi

    Watashi Гуру

    Немного экспериментов с бесконтактным ИК датчиком MLX90614

     
    geleos27, Dmitrysh и xake нравится это.
  12. StDV

    StDV Нерд

    Решил попробовать крайний скетч с преднагревом и 16а. симисторы. Не проканало!!! Все симисторы а помойку, а найти другие сейчас нет возможности. Печаль.:(
    В такой реализации, преднагрев ни чего не дает (визуально симисторы погибли сразу по включении профиля) ИМХО.
    Кто какие симисторы использует, так для информации?
     
    Последнее редактирование: 26 апр 2020
  13. Watashi

    Watashi Гуру

    SSR-40 китайский
     
  14. Dmitrysh

    Dmitrysh Гуру

    BTA139-800E по одному на каждую из трёх секций низа и один на верхний нагреватель
     
  15. StDV

    StDV Нерд

    У меня стояли BT139-800E, вроде как не плохие NXP. Группа - 3 последовательно включенные лампы по 1500вт., 10ом холодная спираль.
    На последнем симисторе включил 6 ламп последовательно - всё робит. Фантастика;)
     
  16. geleos27

    geleos27 Гик

    Можете попробовать вместо белой термопасты использовать флюс либо направлять датчик в область где пасты и смд компонентов нету?
    Паста случаем не влияет на % отражения ИК?
     
    Последнее редактирование: 26 апр 2020
  17. Watashi

    Watashi Гуру

    Сначала и был направлен в сантиметре от термопасты и разница температур была меньше, я только потом сообразил что именно термопаста так повлияла. Надо еще по тестировать.
     
    SOLOway нравится это.
  18. SOLOway

    SOLOway Гуру

    Позволю себе привести некоторые цитаты уважаемого мною мастера maxlabt:
     
    hacjka и xake нравится это.
  19. geleos27

    geleos27 Гик

    Обдумываю, каким образом модифицировать скетчи под управление по 3м термопарам, пока получилось следующее ТЗ:
    Arduino Mega2560 + 2 max6675 + 1 max31865 (либо если 31865+PT100 будет медленный, то 3 х 6675), управление мощностью на SSR.

    За основу беру скетч v1.3.6 от Dmitrysh.

    Доделать в скетче:
    + Считывание показателей 3ей термопары
    Внедрить библиотеку для MAX31865

    Переделать формат хранения термопрофиля: добавть больше шагов (30 всего) + третий канал.
    Длинна каждого шага фиксирована: 20 секунд. (т.к. длинна профиля - обычно до 600 секунд)
    Структура:
    Код (C++):

      1,  // 1 - 1пар - номер профиля, от 1 до 10
      3,  // 2 - 1пар - размер низа
      20,  // 3 - 1пар - Время каждого шага
      40,  300,  // 4 - 2пар - Максимальное отклонение от профиля и макс температура НИ,
      60,  430,  // 5 - 2пар - Максимальное отклонение от профиля и макс температура ВИ,
      5,  240,  // 6 - 2пар - Максимальное отклонение от профиля и макс температура Платы
      20,  70,  120, 160, ...  // 7 - 30пар - температура низа по шагам, 3 знака.
      0,  0, 40, 80, ...  // 8 - 30пар - температура верха по шагам, 3 знака. 0 = выключен
      20,  40,  60,  80, ...  // 9 - 30пар - температура платы по шагам, 3 знака. 0 = не участвует в коррекции
      10,  5,  145,  // 10 - 3пар - коэф ПИД 1 верха
      15,  9,  170,  // 11 - 3пар - коэф ПИД 2 низа
      15,  9,  170,  // 12 - 3пар - коэф ПИД 3 платы
      50,  // 13 - 1пар - коэф участия низа \ верха при отклонении температуры платы(K) (1-99)
      5,  // 14 - 1пар - длительность паузы в секундах
     

    Добавить поградусный учет для термопары Платы

    Добавить поградусную выдачу задания на НИ
    Добавить коррекцию задания для ПИД верха\низа с учетом ошибки на термопаре платы.
    Логика:
    • В ПИД ВИ и НИ каджую секунду выдается задание
    • Рассчитывается ПИД для платы, и умноженный на K добавляется к заданию ВИ и НИ
    Добавить функцию Паузы
    Логика:
    • Перестает отсчитываться время профиля и выдаваться новые задания для ПИД.
    • Управление НИ и ВИ в режим удержания температуры НИ и ВИ (режим удержания мощности)

    Все это добавляется в районе этого кода:
    Код (C++):
    //счётчик скорости роста температуры
      if ((currentMillis - previousMillis) > 1000 / (rampRateStep[currentStep - 1] * 0.1)) //скорость роста температуры 0.7 от 0.1с. до 3с.
      {
      previousMillis = currentMillis;
      counter = counter + 1;
      setpointRamp = counter + startTemp + (РЕЗУЛЬТАТ ПИД ПЛАТЫ * K); // Коррекция на отклонение темп платы
      ...
      Setpoint1 = setpointRamp;
      }
      }

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

    Добавить отображение выполнения профиля в программу на ПК + логгирование:
    Структура:
    1. время от начала,
    2. температура низа, темп по гр, %мощности низ,
    3. температура верха, темп по гр, %мощности верх,
    4. температура платы, темп по гр, %коррекции,
    5. была ли включена ПАУЗА

    Вопросы которые у меня возникли:
    Есть ли сейчас запас процессорного времени на доплонительный просчет:
    +1 пид
    +1 пошаговой выдачи заданий на нагреватель (НИ)
    +1 считывание медленного MAX31865

    Есть ли возможность у @Dmitrysh поделиться наработками по разгону считывания MAX31865? Упоминалось в посте #2938

    Где-то тут могут быть некоторые нестыковки, все это еще в процессе обдумывания.
     
    Последнее редактирование: 26 апр 2020
  20. Watashi

    Watashi Гуру

    Надеюсь учтете что байт < 255
     
Статус темы:
Закрыта.