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

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

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

    StDV Нерд

    Преднагрев вроде как есть.
    А проблем с запуском и ошибками не обнаружил.
    Единственное мой 3.95" дисплей отсюда, заработал только с объявлением
    UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
    и библой от Dmitrish
     
    Последнее редактирование: 27 апр 2020
  2. geleos27

    geleos27 Гик

    Посыпаю голову пеплом. все сказанное выше - анализ скетча SoloWay из поста №3745
    который в свою очередь основан на старом скетче от Dmitrysh.

    Оставлю только актуальное, пошел анализировать последний скетч от Dmitrysh

    Экрана и кнопок еще даже не заказывал, т.к. как правильно заметил Watashi

    Редактирование таких профилей на станции превращается в боль.
    Поэтому на этапе настройки - компьютер в качестве интерфейса ввода. Как только всё будет отстроено, профили можно сохранить в памяти.

    Соответственно вопрос. Вывод на какой из дисплеев требует меньше всего ресурсов?

    Третий ПИД будет рулить значением коррекции ошибки нагрева платы. На входе температура с термопары на Мат.Плате, на выходе значение, которое домножается на коэфициент и прибавляется(убавляется) к заданию температуры (уставки на текущую секунду) для ПИД ВИ и НИ.
    Да коэфициенты P I D придется подбирать, Возможно P корректировать на основании отставания платы от графика пока она греется от 20 до 100

    Либо из всего пид оставить только P-составляющую, как и планировалось изначально.

    В REFLOW_STATE_STEP_RAMP уже реализован сам механизм, надо только добавить значение коррекции.

    Код (C++):
            //счётчик скорости роста температуры
            if ((currentMillis - previousMillis) > 1000 / (rampRateStep[currentStep - 1] * 0.1)) //скорость роста температуры 0.7 от 0.1с. до 3с.

            {
              previousMillis = currentMillis;
              counter = counter + 1;
    ТУТ ----> setpointRamp = counter + startTemp + (ЗНАЧЕНИЕ ОТ ПИД №3 * К );[/B]
              lcd.setCursor(8, 2);
              lcd.print("   ");
              lcd.setCursor(8, 2);
              lcd.print(setpointRamp);
              lcd.print("  ");
              Setpoint1 = setpointRamp;
            }
          }
    Согласен, передавать каждый раз на пк не надо. В ЛОГ писать надо.

    Имелось ввиду доделать передачу из программы и обработку в ардуине под новое количество значений в профиле.

    Понял, значит только экспериментально смогу понять подойдут ли.

    Надо прикинуть, 210 байт примерно. (если выделять по 2 байта на каждое значение температуры) (возможно я налажал с подтсчетом в зависимости от того как в памяти хранится значение)

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

    По идее можно использовать такойже формат в котором сейчас задан профиль для верха:
    Температура + время шага, Таких должно хватить 20 для ВИ и НИ + 10 для профиля платы., тогда уместимся в 190 байт. Но придется добавить рассчетов в самой ардуине.
     
    Последнее редактирование: 27 апр 2020
  3. Watashi

    Watashi Гуру

    Ваш дисплей должен работать с другим обьявлением, посмотрите ТУТ
     
  4. Aquacomp

    Aquacomp Нуб

    Здравствуйте. Вы говорите, что должны быть цифры 9 или 10. У меня 49-50. Это нормально, или детектор глючный?
     

    Вложения:

  5. hacjka

    hacjka Гик

    Здраствуйте
    не могу разобраться в проблеме
    есть Arduino mega
    3.5 Uno module ILI9486 Touch sku:MAR3501
    закинул из папки библиотеки в папку документы (не с первоготраза конечно разобрался....)
    при открытии скетча Svs_V08

    как можно вообще отключить временно енкодер? и залить скетч для проверки и настройки?
     

    Вложения:

  6. Watashi

    Watashi Гуру

    Этот дисплей работать со станцией не будет (((
    он 8 битный, а надо 16, и очень медленный.
    в файле Setting есть настройка и там можно отключить
    надо закомментить строку
    #define SetEncoder // Если используется encoder
     
    Последнее редактирование: 27 апр 2020
    SOLOway и hacjka нравится это.
  7. hacjka

    hacjka Гик

    какой дисплей заказывать?
    столько всего написано...а если что надо найти-нету.
    это мое первое знакомство с ардуинкой....пробовал раскоментировать ...но что то не нашел где
    //define SetEncoder // Если используется encoder вроде оно?
     
  8. Watashi

    Watashi Гуру

    пост #3801 дисплей 3,95" подойдет
     
    hacjka нравится это.
  9. cwetok

    cwetok Нуб

    у меня установлена аналоговая клавиатура. При старте появляется картинка где вместо температуры надпись ERROR и не работают кнопки.Нажимаю сброс и после перезагрузки работает нормально. Причём обратил внимание, что это проявляется после долгого перерыва в работе на холодную, пока на термопарах стабилизируются показания. Дисплей 3.2 дюйма без тача
     
  10. StDV

    StDV Нерд

    После "долгого" перерыва, попробуйте прогреть бутерброд женским феном и включить. Как себя поведет?
     
  11. Crow22

    Crow22 Нуб

    Привет Всем! Скажите а как переделать скетч на три датчика температуры: "1"- низ в самом нагревателе; "2"-место пайки на термопаре возле чипа; "3"- верх в самом нагревателе?! Хочу попробовать как в Квадрат-М! Может есть уже готовый или ткните как переписать логику! Принцип ,я так понял, у Квадрат-М таков: Греем низ пока на датчике среднем в месте пайки не достигнет температура для низа установленная в профиле. Когда достигла - тогда держим ее за счет датчика "1" низа и Включаем верх и греем его по настройкам верха снимая показатели опять же с "2" датчика места пайки и уже "сравнивая?" с датчиком верха "3" в нагревателе и по достижению заданной температуры в месте нагрева удерживаем заданую температуру за счет датчика "2" и "3". Что типа этого!
     
  12. SOLOway

    SOLOway Гуру

    Попкорн в СВЧ-печке :) Плата не может мгновенно поглотить передаваемое ей тепло - она не алюминиевая фольга. Платы разные, к моменту достижения на плате t° уставки низа, сам низ по инерции еще продолжит передавать тепло плате, даже если ему полностью отрубить питание. Тут контроль t° низа должен быть тогда уж не от датчика в нижних тэнах, а по датчику у чипа. Если и есть логика в применении встроенных в излучатели датчиков, то, на мой взгляд, она должна заключаться в недопущении разогрева контролируемых этими встроенными датчиками излучателей выше 400-450°С.
     
  13. Watashi

    Watashi Гуру

    Мне кажется проблема с Мегой, с ресетом, неправильно проходит инициализация, причем не дисплея, а максов и аналоговых портов.
    Питание проверить на пульсации.
     
  14. Crow22

    Crow22 Нуб

    Квадрат-М как-то работают, причем вроде были и на керамике в свое время и низ не на всю плату , только немного больше 80х80 нагреватель снизу и сейчас у них низ в какой то версии кварцевый и верх тоже кварцевый менее инерционный! Что нельзя запомнить эту температуру датчиком в нижнем нагревателе, когда на датчике в месте пайки достигнет температуры термопрофиля и потом ее держать путем отключением нагревателя или уменьшения мощности нижнего нагревателя за счет ранее запомненной температуры датчика нижнего нагревателя и так циклично пока весь процесс пайки не завершится???
     
  15. geleos27

    geleos27 Гик

    Обьявлена неделя адептов 3й термопары. Количество сообщений на эту тему увеличелось вдвое. :D

    @Crow22 почитайте мои сообщения на последних 5 страницах. Там вероятно много бреда, но может чтото полезное почерпнете.
    Делать придется самому т.к. переписывать половину логики.

    Вопрос к @Dmitrysh скетч из сообщения 3009 это последняя ваша версия?
    Ничего свежее вроде не нашел. Не хочу по новой в лужу сесть с анализом)
     
    Последнее редактирование: 27 апр 2020
    SOLOway нравится это.
  16. cwetok

    cwetok Нуб

    Скорее всего. Но я обратил внимание что в новой версии кнопки не реагировали на нажатие, как будто они не подключены. В предыдущей версии ошибка снималась если зайти в меню просмотра графиков и выйти на стартовое меню.
     
  17. SOLOway

    SOLOway Гуру

    Тут недавно @dth выкладывал полную схему для моих любимых :) версий. Спасибо ему Большое Человеческое! Надеюсь, у него всё заколосилось! Я немного отредактировал под release_1.3.6 (1.3.3 & 1.3.4).
    В личке человек попросил такую схему. Найдёте нестыковки - крикните на меня - поправлю!
    Ещё цитата maxlabt:
    Ссылка на полезный ресурс:
    Интересное обсуждение их:
    Год спустя:

    ещё прошло полгода:

    Конечно же это не истина в последней инстанции, и даже не статистика, но пусть эта информация тоже тут будет :)
    А еще можно подивиться всяко-разному из этого поста:
     

    Вложения:

    • 1.3.6.zip
      Размер файла:
      230,8 КБ
      Просмотров:
      233
    Последнее редактирование: 27 апр 2020
    Vitaliy и Dmitrysh нравится это.
  18. Dmitrysh

    Dmitrysh Гуру

    Давайте внесём ясность. Я никогда не основывал ни одного скетча ни из этой темы не с других. Я скетчи только дорабатываю, перерабатываю, переписываю, нахожу ошибки и оптимизирую код, переписываю математику. Это всё и не более того. Я не имею морального права называть скетч своим, даже если я его полностью переписал. Нельзя отнимать у основателей скетчей их заслуги, эти люди дали основу развития полученного продукта, нельзя забывать с чего и с кого всё началось.
    последняя на форуме.
    Если интересно моё мнение, то этот вариант скорее всего тупиковый, не обессудьте. А теперь давайте смотреть, как вы выразились:
    Начнём
    Я бы с этого начал. Если хотите много ресурсов для математики то дисплей символьный, клавиатура кнопочная(не резистивная). Если дисплей графический, то писать через ж..., но правильно.
    И всё-таки я считаю, что для профиля хватит 3-4 шагов, остальное должен считать контроллер.
    выше ответил.
    Вот здесь кроется основная проблема. Во-первых на входе ПИД не может быть один параметр, во-вторых на выходе не может быть некоторое(неизвестное) значение, которое потом домножается и возводится в степень некоторого домноженного на коэффициент и прибавленного к заданию температуры третьего ПИДа для корректировки к заданию температуры для ПИДов НИ и ВИ.
    Попробуйте вникнуть в суть происходящего, а я поясню. У вас, по-определению, на входе третьего ПИД неизвестный параметр температура на Мат.Плате и ещё один неизвестный параметр(пусть даже он и известный), а на выходе - тоже неизвестный результат(потому как вы не знаете диапазон коррекции). В итоге мы получаем одно уравнение с 2-мя или 3-мя неизвестными. Из курса математики мы знаем, что такое уравнение решить нельзя. Подумайте!
    Это будет уже не ПИД, а П-регулятор, который описывается простейшей функцией y=k*x, где х - разность температур задания и истинного значения.
    Там где вы хотите подставить коррекцию адекватно работать не будет, потому как вы пытаетесь разогнать автомобиль не нажав на "газ", а открутив тормоз, если так можно сказать.
    Ардуине хватит памяти и на 600 точек, надо ли? Заставьте контроллер всё считать.
     
  19. Dmitrysh

    Dmitrysh Гуру

    А где в квадрат-м третья термопара?
     
  20. geleos27

    geleos27 Гик

    Cейчас есть время попробовать реализовать чтонибудь новое.
    Спасибо за придание ускорения в правильном направлении!


    Спасибо за развернутый ответ!

    Мне кажется я кардинально неправильно использую терминологию, поэтому не могу донести до вас принцип работы.

    1. Много шагов, чтобы было проще отстроить профиль. Вы правы и хватит меньшего количества шагов. Но я обращаю ваше внимание что здесь температура ВИ и НИ используется иначе чем в вашем алгоритме. Т.к. грубо говоря для верха и низа у нас профиль мощности, спроецированный на температуру нагревателя.
    Положение-Термопар2.png

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

    Мы жестко привязываем график температуры ко времени для каждого из 3х участвующих в системе элементов ВИ, НИ, Плате.
    И соответсвенно знаем сколько и где должно быть на каждм из 3х элементов в каждую секунду от старта. На основании отклонений - можем вносить коррективы в мощность.

    2. На входе ПИД Платы ровно 2 переменных известных параметра:
    • Сколько на плате должно было быть градусов по графику в текущую секунду.
    • Сколько на ней фактически градусов, замером по термопаре. (Температура на Мат.Плате)
    + 3 постоянных коэфициента для P I D. (Их Подбираем уже после того, как точно подобраны коэфициенты PID для ВИ и НИ.)

    На выходе ПИД Платы - число от -100 до +100. (минус, если перегрев, плюс если недогрев)
    Этот пид обсчитывается Первым.
    (если это слишком сложно, можно заменить ПИД на ошибку регулирования: (Т платы по графику - Т платы по термопаре)*10 (10 число из головы, это и есть тот самый K) )

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

    Повторяем в следующую секунду с начала.

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

    Итого нам надо подобрать.
    1й этап: коэфициенты PID для ВИ и НИ
    2й этап: коэфициенты PID для платы (их не планируется перезамерять вручную для разных по теплоемкости плат)
    3й этап: подбираем коэфициент K чтобы PID платы вносил максимальную коррекцию в мощность нагревателей в пределах 5-10%


    Я знаю, выглядит весьма странно и сложнее реализации в Вашем скетче.
     
    Последнее редактирование: 28 апр 2020
Статус темы:
Закрыта.