Ик паяльная станция на arduino mega 2560. доработка скетча "ars_v2_lilium_jsn" | ч. 2

Тема в разделе "Глядите, что я сделал", создана пользователем NikitOS, 20 сен 2020.

  1. Dianochka

    Dianochka Нерд

    Нет, блин, не знала, на картинку схемы смотрела и по ней делала... Эх...:confused:
    Да ладно, откатить всегда можно, предыдущие файлы же остались. Зато баг нашла. :)
    Или попробовать переделать, чтоб единичка указывала постоянное подключение первого нагревателя, а остальные далее по повышающей? Нуля же там нет, хотя его и включать научилась...
     
    Последнее редактирование: 6 мар 2023
  2. Elfis

    Elfis Нерд

    Здравствуйте!!! всем хочу пожелать удачных проектов посмотрите у меня какие можно использовать стойки и какие плиты мои конструктивные решения подтвердились и не были напрасны . Большое спасибо!!! Watashi за интерфейс и программное обеспечение


    График почти соответствует профилю.
     
    Последнее редактирование модератором: 7 мар 2023
    DJINO, Vladimir71, Hobby Electronics и 3 другим нравится это.
  3. Dianochka

    Dianochka Нерд

    Можно вопросик? Я не ремонтница, опыта работы с нижним подогревом особо не много (для серийного монтажа есть печка, если изловчиться можно в ней снять), от кварцевых ламп глаза как себя чувствуют? И, чем вызвано желание совместить лабораторник с паяльной станцией? Я наоборот думаю вынести узел управления за теплозащиту,, а тут в весьма горячей зоне то, чему совсем там не место?...
     
    Последнее редактирование модератором: 7 мар 2023
  4. Elfis

    Elfis Нерд

    Кварцевые лампы, особенно те, что с алиэкспресс, с красной колбой, - то что доктор прописал. Вы имеете в виду, наверное, галогенные, они да - дают яркое свечение (но включаются, как правило, группами по 3-4 последовательно и 3-4 такие группы параллельно, кроме того, они практически никогда не работают в полный накал, камера этого не передаёт и на видео яркость кажется избыточной). Кварцевые лампы дороговато, у меня на канале первая станция - там кварц. У меня просто был на тороидальном сердечнике трансформатор с шестью обмотками, намотанный на станке ещё в 90е годы. Применять его в усилителе сейчас - кощунство, так и совместил :) . Там есть обдув снизу, и термодатчики. Если делать рефлектор (отражатель) отдельно, из зеркальной нержавейки, независимо от корпуса с лампами, тогда корпус не нагревается сильно, и обдув даже не нужен. Я не сторонник конструкции станции из нескольких блоков, я за мобильность и многофункциональность. Пускай лучше блок управления будет внутри в отдельном экранированном корпусе, так сказать матрешка в матрешке, лишние провода соединения - это не мой выбор. Под этот прибор хорошо использовать тумбу на колесиках, сделанную из профиля - подкатил, когда нужно - и место не занимает! Или под столом - нужно выкатил, ведь главное, это удобство в работе.
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      624,8 КБ
      Просмотров:
      488
    • 2.jpg
      2.jpg
      Размер файла:
      300 КБ
      Просмотров:
      471
    • 3.jpg
      3.jpg
      Размер файла:
      249,8 КБ
      Просмотров:
      449
    Последнее редактирование модератором: 6 май 2023
    DJINO, Vladimir71 и SOLOway нравится это.
  5. vikrep

    vikrep Нерд

    Здравствуйте, станция собрана на основе Watashi 10.2 , низ инерционный на керамике 2400Вт.
    Измерение температуры непосредственно с плиты нагревания.
    Проблема в настройке ПИДа НИЗа, так как он привязан к параметру роста температуры град/сек. Этот же керамический нагреватель с контроллером REX-C100 отрабатывает точно после калибровки.
    Суть вопроса:
    - если рост 0,5град\сек и ПИД 6, 2, 50 - после предварительного нагрева до 40 град. профиль стартует и не догревает до эталонного графика (провал графика вниз), но к концу профиля догоняет до 120 градусов и по инерции греет до 150град. (мощность начинает падать близко у 110град).
    -если рост 0,3град\сек и ПИД 10, 2,150 - после предварительного нагрева до 40 град. профиль стартует, через минуту рост температуры опережает эталонный график (подьем графика вверх), при этом мощность падает примерно с 90 градусов и до 120 градусов рост идет только по инерции до 135 градусов при практически нулевой мощности.
    Чем выше температура предварительного нагрева, тем проще ПИДу выйти на уставку температуры - я сделал такой вывод после многих экспериментов. REX-C100 - при тех же исходных условиях греет плиту без перелетов и с нормальным ростом температуры.

    Как бы отключить в программе учет роста температуры НИЗа (rampRateBOTTOM)?

    Благодарю
     
  6. vikrep

    vikrep Нерд

    Мысли вслух:
    Исходные данные: керамический нагреватель (слюдяной плоский нагреватель если быть точным) с алюминиевой плитой 2400Вт размер 23х35см. Термопара на алюминиевой плите. Почему так? Равномерность нагрева поверхности и возможность установки оборудования для сушки с контролем температуры плиты (чипы, топ кейсы клавиатуры)
    - график предварительно рассчитывается по точкам температуры и скорости роста температуры. При работе (нагреве) программа пытается с помощью ПИДа подогнать реальный график нагрева к построенному раньше (идеальному). В системе с низкой инерцией и хорошим запасом мощности (Вт/см.кв) это получается хорошо. В системе с высокой инерцией это не будет работать.
    - Простой регулятор REX-C100 имеет автокалибровку, которая учитывает инерционность системы. Нагрев на полной мощности с измерением скорости роста температуры, измерение перелета уставки и скорость остывания системы. В результате - выход на уставку в 120град с точностью в 1-2 градуса. Скорость нагрева при этом до 1 град в сек.
    - поэтому и был вопрос, есть ли возможность построить график, но не учитывать его при работе ПИДа НИЗа для системы с высокой инерцией. Иначе все настройки ПИДа при этом до лампочки. Получается, что ПИД пытается удержать график в рамках расчетного, но не учитывается инерция системы, хотя сама идея ПИДа как раз в том, чтобы учитывать эту инерцию.
    Благодарю.
    В любом случае Watashi, Ваш проект подкупает красотой и удобством.
     

    Вложения:

    Последнее редактирование: 9 мар 2023
    Elfis нравится это.
  7. Elfis

    Elfis Нерд

    Задержка выставляется по инерционности только для верха вроде для низа тоже есть преднагрев то есть line ползущая впереди с учетом нагрева код такой же на низ нужен с опережением Watashi объясняет

     
    Последнее редактирование модератором: 21 мар 2023
  8. Прошивка 10_2_fix, собрал стенд, на двух 60w лампах примотаны датчики каптоновым скотчем, все работает. Не могу понять, почему после подачи питания, не обновляются часы в реальные значения текущего времени. DS3231 данные в сом порт приходят, значит часы опрашиваются. На другом устройстве с другой библиотекой после сброса питания все работает. А тут время останавливается и после включения выводит такое-же время как до выключения. Есть какие идеи?
     
  9. Dianochka

    Dianochka Нерд

    У меня все обновляется. Либо прошивку задел либо модулю полярный лисец.
    Посмотрите тут.
     
    Последнее редактирование модератором: 21 мар 2023
    RUSLAN4IG и sergeykoshkin77 нравится это.
  10. Dianochka

    Dianochka Нерд

    :(:(

    Подозреваю модернизация чья то, у меня на работе куча папок lib9 lib10.2 и тд, так вот сейчашнюю могла так же обозвать lib10fin или еще как чтоб не запутаться.... Изменения там есть относительно работы платы реле, не знаю успешные или нет...
    Кстати, не пробовали дописать в прошивку возможность применения RTC DS3234? Это реально хитро или просто ненуна никому? Я не специалистка, а мнения людей разделились от "скребнуться можно" до "переписать пару пинов" кому верить - вопрос...:(
     
    Последнее редактирование модератором: 21 мар 2023
  11. Dianochka

    Dianochka Нерд

    Подозреваю, подключен напрямую, минуя плату реле, к твердотелке. Но не уверена, еще не получила плату реле, а самой делать её лениво.
     
    Последнее редактирование модератором: 1 апр 2023
  12. SOLOway

    SOLOway Гуру

    Реальную схему с вашими изменениями, пожалуйста, приведите. Так все вопросы отпадут, а если не отпадут, я постараюсь прокомментировать, или соратники.. @Watashi зря не пишет :) .
    Пролистайте тему, я её регулярно прореживаю :). Убедитесь, что тут разработчиков, ну, вы увидели :( ... Если и повторяют наши проекты, то, часто забывают указать источник, т.е. ссылку на наши темы, что напрямую нарушает правила этого ресурса, прописанные, в т.ч. внизу каждой страницы...
    @Dianochka Сейчас @Watashi работает над проектом на другой платформе, 32-битной. Так что, вероятнее всего, весь материал, выложенный им в наших темах, теперь должен будет дорабатываться, если в этом появится когда-нибудь необходимость, силами энтузиастов :) .
     
  13. geleos27

    geleos27 Гик

    В результате некоторых модификаций и помощи минимум 4 умных человек скетч ув. @Dmitrysh был модифицирован, а заодно с ним и порт плоттер. Если найдутся желающие повторить и проверить как оно работает на вашем железе - буду рад.
    Пока это в формате MVP.

    Определенные сложности может вызвать первичная настройка.
    Чуть позже всё будет приведено в более удобный формат + написана адекватная инструкция.
    Пока шаги следующие:
    1. Собрать железо.
    2. Отстроить коэффициенты ПИД при помощи сайта Pidtuner и данных тестовых прогонов.
    3. Отстроить профили под свои нагреватели.

    Используются MEGA2560 + 3*MAX6675 + ZCC + PC.
    Управление только с компьютера через интерфейс программы.
    (экран, кнопки, бузер, если они у вас есть - пока никак не задействованы)

    Читайте комментарии в скетче, инструкцию по настройке и "?" в самом плоттере

    [​IMG]

    profile_run.png

    Гитхаб где периодически скидываю обновления - в подписи. Текущая версия в комплекте со скетчем 0.58 по ссылке
     

    Вложения:

    • Plotter 1.PNG
      Plotter 1.PNG
      Размер файла:
      50 КБ
      Просмотров:
      271
    Последнее редактирование: 2 апр 2023
    demon689, DJINO, Dianochka и 2 другим нравится это.
  14. Sashok289

    Sashok289 Нуб

    изображение_viber_2023-04-08_15-22-46-847.jpg Нашел скетч Svs_09_1 от @Watashi из поста #4724 , с возможностью задать уставку для низа до 450°С, но он зависает при пайке на этапе нагрева верха, останавливаются температуры. Кнопкой можно остановить профиль, и после остановки температуру снова показывает корректно...

    ред. модератор: Остальное к этой теме не имеет отношения, перенёс в соответствующую - общие вопросы.
     
    Последнее редактирование: 8 апр 2023
  15. skazitel

    skazitel Нуб

    Здравствуйте пытаюсь записать скетч Watashi svs_10_2, качал тут с библиотеками под видео

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

    In file included from G:\Svs_V10_21\Svs_V10_2\Svs_V10_2.ino:27:0:
    G:\Svs_V10_21\Svs_V10_2\Encoder.h:7:54: error: no matching function for call to 'RotaryEncoder::RotaryEncoder(const uint8_t&, const uint8_t&, int, int)'
    RotaryEncoder encoder(Enc_Clk, Enc_DT, Rotate, I_Type); // пины подключения энкодера
    ^
    In file included from G:\Svs_V10_21\Svs_V10_2\Svs_V10_2.ino:6:0:
    c:\Users\������������\Documents\Arduino\libraries\RotaryEncoder\src/RotaryEncoder.h:39:3: note: candidate: RotaryEncoder::RotaryEncoder(int, int, RotaryEncoder::LatchMode)
    RotaryEncoder(int pin1, int pin2, LatchMode mode = LatchMode::FOUR0);
    ^~~~~~~~~~~~~
    c:\Users\������������\Documents\Arduino\libraries\RotaryEncoder\src/RotaryEncoder.h:39:3: note: candidate expects 3 arguments, 4 provided
    c:\Users\������������\Documents\Arduino\libraries\RotaryEncoder\src/RotaryEncoder.h:23:7: note: candidate: constexpr RotaryEncoder::RotaryEncoder(const RotaryEncoder&)
    class RotaryEncoder
    ^~~~~~~~~~~~~
    c:\Users\������������\Documents\Arduino\libraries\RotaryEncoder\src/RotaryEncoder.h:23:7: note: candidate expects 1 argument, 4 provided
    c:\Users\������������\Documents\Arduino\libraries\RotaryEncoder\src/RotaryEncoder.h:23:7: note: candidate: constexpr RotaryEncoder::RotaryEncoder(RotaryEncoder&&)
    c:\Users\������������\Documents\Arduino\libraries\RotaryEncoder\src/RotaryEncoder.h:23:7: note: candidate expects 1 argument, 4 provided

    exit status 1

    Compilation error: no matching function for call to 'RotaryEncoder::RotaryEncoder(const uint8_t&, const uint8_t&, int, int)'
    Решил, не внимательно переустанавливал библиотеки
     
    Последнее редактирование: 12 апр 2023
    SOLOway нравится это.
  16. Gor

    Gor Нерд

    Здравствуйте. Начал собирать станцию по проекту Watashi, дисплей заказывал здесьhttps://aliexpress.ru/item/1005003752743978.html?sku_id=12000028323893645, там же оставил скрины со своими настройками.
    Переворот лечится в файле "initlcd.h", 82 строка, меняем на "C" или "D".
    Хотелось бы дополнить Ваш метод лечения пропадающих букв.
    Проблема заключается в том, что количество знаков в надписи не соответствует количеству выделенных под надпись знакомест. Если знаков больше, то последние знаки начинают переноситься в середину строки, в нашем случае первое знакоместо занято номером шага операции, остается 29 знакомест и лишний пробел с конца строки съел букву.
    Если знаком будет меньше, то при смене текста последние буквы предыдущей надписи могут остаться на экране.
    Я отредактировал строки так:
    const char text_6[] PROGMEM = "ПРЕДВАРИТЕЛЬНЫЙ НАГРЕВ НИЗА ";
    const char text_7[] PROGMEM = " НИЖНИЙ НАГРЕВАТЕЛЬ ВКЛЮЧЕН ";
    const char text_8[] PROGMEM = " ПРЕДВАРИТЕЛЬНЫЙ НАГРЕВ ВЕРХА";
    const char text_9[] PROGMEM = " ВЕРХНИЙ НАГРЕВАТЕЛЬ ВКЛЮЧЕН";
    const char text_10[] PROGMEM = " АВАРИЯ!!! СТОП ПРОФИЛЯ ";
    const char text_11[] PROGMEM = " СТОП ПРОФИЛЯ ";
    и все стало нормально отображаться.
    P.S. К сожалению здесь не правильно отображаются пробелы.
     
    Dianochka и SOLOway нравится это.
  17. Gor

    Gor Нерд

    Всем доброго дня.
    Столкнулся с проблемой, о которой уже писали в данной теме, а именно - большая погрешность измерений разными термопарами.
    Получил из Китая три дешевых термопары, показания комнатной температуры, температуры тела и кипящей воды они показывали с отклонением в градус, что очень порадовало.
    Но, когда начал мерять температуру жала паяльника и на сопле фена показания на одном были около 220 при реальных 240, на втором и вовсе 90, при этом показания сильно прыгали.
    Проблема кроется в скрученных проводах, китайцам их так удобнее сваривать. Аккуратно выпрямил провода и чудо - показания всех термопар, максов и мультиметра стали абсолютно одинаковыми, быстрыми и точными.
    На фото слева направо - термопара от мультиметра, дешевая термопара с алиэкспресс из коробки, такая же термопара исправленная.
    [​IMG] termo.jpg termo.jpg
    IMG_20230415_171559.jpg IMG_20230415_173120.jpg IMG_20230415_173448.jpg IMG_20230415_174057.jpg IMG_20230415_175656.jpg
    БП 24Х5 и огрызок карандаша.
     
    Последнее редактирование: 15 апр 2023
    RUSLAN4IG, Dianochka и SOLOway нравится это.
  18. vikrep

    vikrep Нерд

    @Watashi , @Dmitrysh , @geleos27 , Доброго времени суток
    Итак, вопросов опять больше чем ответов...
    Проект @Watashi 10.2
    1. Есть стандартные формулы ПИД контроллера, в которых интегральная и дифференциальная составляющие учитывают время между измерениями температуры. В процедуре ПИД время дельта Т не учитывается, хотя между вызовами измерений температуры 0.25 сек. Почему время не учитывается?
    2. Целочисленные коэффициенты П, И, Д - это красиво, но иногда для других систем нужны дробные числа. Почему только интегральный коэффициент рассчитывается с делением на 1000?
    3. Самое главное, в процедуре ПИД температура установки берется из рассчитанного заранее графика по шагам при каждой итерации -
    bottomTemp, а не конечная точка установки температуры - u.Profili.temperatureBOTTOM. Получается, что итерация ПИД происходит кусочно-линейно по рассчитанному графику. Реакция ПИД рассчитывается каждые 250мс в пределах изменения на 1 градус. Это и приводит к тому, что инерционные нагреватели ведут себя странно и никакими способами нельзя настроить такой ПИД. Для нагревателя с малой инерцией это не проблема, но теряется универсальность ПИДа.
    4. Дифференциальная составляющая вообще считается с ошибкой. Строка 509 static float ed = 0 работает всегда обнуляя ed, хотя, ed должен запоминать предыдущую ошибку. Судя по формуле, дифференциальная составляющая должна быть при нагреве отрицательной или равна 0. Просто сделайте принт в порт компьютера и проверьте.
    Вывод: данная реализация ПИД контроллера подходит только для стола с галогенными лампами, с малой инерцией.

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

    Я не программист на Си, но с Гуглом в помощь поправил процедуры, что позволило настроить ПИД и, главное - изменения коэффициентов теперь ведут к предсказуемому результату.
    Чуть позже сделаю видео отчет.
    Благодарю за ответы.
     
    Последнее редактирование модератором: 4 май 2023
    RUSLAN4IG, geleos27 и SOLOway нравится это.
  19. geleos27

    geleos27 Гик

    Отрадно видеть что кто-ты пытается разобраться в проекте прежде чем задавать вопросы. Попробую ответить по порядку, т.к. некоторое время назад тоже сидел и разбирался со всем этим...

    1. Специфика написания скетчей изначально затачивалась по максимуму под целочисленную арифметику, чтобы на медленной NANO все работало быстро, отсюда и такой формат параметров. Время всего-лишь делитель для I и множитель для D. Этот "множитель" у вас "включен" в сохраненном значении параметра. Т.е. если вы попробуете внести коэффициенты напрямую из подобранных по методу Choen-Coon либо Ziegler-Nichols, либо через сайт pidtuner.com, то вам придется разделить I на 4, и умножить P на 4 при внесении их в настройки. Это ожидаемо, и это где-то в описании скетчей проскакивало. Но поскольку большинство подбирает коэффициенты методом последовательных тестов - то проблемой это не было.

    2. Исторически так сложилось, что только для I требовался делитель. Но если вы загляните в другие скетчи, а также в опросник, то обнаружите там не только коэффициенты PID, но и делители, если таковые применялись. Вы вольны задать их любыми, если считаете что точность недостаточна. (а для кирпичей бывает даже P=1 много)

    3. Это вроде как называется "рампа" и используется для того, чтобы было возможно поддерживать заданную скорость нагрева на определенном участке. Тут 2 причины проблемы невозможности настроить пид:
    - если ваш нагреватель не успевает за рампой, то в процессе набегает I + большая инерционность нагревателя - в итоге получаем перелёт при выходе на уставку.
    - если у вас очень большой цикл обратной связи - 25-40 секунд инерция кирпича + 25-40 секунд инерция платы - то ожидать точного и быстрого управления весьма наивно. Либо применять другой метод управления (с термопарой на нагревателе для максимального сокращения цикла обратной связи). Либо мириться с медленной скоростью выхода на уставку (но без перелета).

    Если смотреть в рамках настроек скетча - то задайте длительность рампы 1 секунду, и длительность полки 200. Тогда вероятно будет отрабатывать как вы ожидаете.

    4. Если я правильно вижу в скетче, D по изменению ошибки,
    "d1 = kd * (e1 - ed);" //Д составляющая.

    Если задана рампа 0,5°\сек и плата у вас греется 0,5°\сек, то вклад D будет 0.
    Если на прошлом шаге вычисления пид ошибка (ed) была 4 градуса, а сейчас стала 3,5 (е1) то получим вклад d1 = kd *(3,5-4) = kd*-0.5
    т.е. коэффициент D будет уменьшать мощность, если ошибка уменьшается, и увеличивать, если ошибка увеличивается, что является ожидаемым поведением. НО у термопар достаточно большой шум, и нужно произвести некоторые аппаратные модификации чтобы они начали корректно отдавать значения. В противном случае корректно подобранное Д (для кирпичей оно в районе 200-400) из-за шума на термопаре вносит много шума в управление и вместо ровного графика получается гребенка.

    По поводу "static float": https://forum.arduino.cc/t/difference-between-static-int-and-int/166631


    PS: с нетерпением ждем видеоотчет
     
    Последнее редактирование модератором: 5 май 2023
    SOLOway нравится это.
  20. Dmitrysh

    Dmitrysh Гуру

    geleos27 все предметно расписал и правильно. Остался один момент.
    Дифференциальная составляющая считается правильно. Не знаю, из какого скетча вы взяли 509 строку, но запись static float ed = 0 означает, если по-простому, однократное обнуление ed при входе в процедуру, а далее, до конца работы скетча, обнуления не будет. Можно было сделать ed глобальной переменной, эффект был бы тот же, но для удобства чтения кода написано было так.
    Время между измерениями у нас константа, зачем тратить ресурсы процессора на бесполезные вычисления? Всё заложено в коэффициентах.
     
    Последнее редактирование модератором: 5 май 2023
    SOLOway нравится это.