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

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

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

    revolover Гик

    Единственное, что могу предположить в защиту кода (скоро это проверю), что если MAX не подключен - значение температуры дикоотрицательное, и интеграл так быстро набирает, а я на дисплее вижу температуру 000

    Но если верно первое, то такой ПИД отстроить не возможно, нужно ковырять код.
     
  2. SOLOway

    SOLOway Гуру

    revolover , а использовав старую версию библиотеки PID вы поправили код обратно?
    С новой версией (1.2.0) либы так:
    Код (C++):
    double Setpoint1, Input1, Output1;
    //Specify the links and initial tuning parameters
    PID myPID1(&Input1, &Output1, &Setpoint1, kp1, ki1, kd1,P_ON_M, DIRECT);
    unsigned long windowStartTime;
    //PID stuff
    double Setpoint2, Input2, Output2;
    //Specify the links and initial tuning parameters
    PID myPID2(&Input2, &Output2, &Setpoint2, kp2, ki2, kd2,P_ON_M, DIRECT);
     
    Со старой:
    Код (C++):
    double Setpoint1, Input1, Output1;
    //Specify the links and initial tuning parameters
    PID myPID1(&Input1, &Output1, &Setpoint1, kp1, ki1, kd1, DIRECT);
    unsigned long windowStartTime;
    //PID stuff
    double Setpoint2, Input2, Output2;
    //Specify the links and initial tuning parameters
    PID myPID2(&Input2, &Output2, &Setpoint2, kp2, ki2, kd2, DIRECT);
     
    Хотя, вряд ли это вызывает рост "I"...
    А, пардон, не так понял вас! Вы значения P-I-D в скетче установили как 1-1-0 :). Но пусть тут писанина моя останется, память освежить, в чем отличия версий библиотеки.
     
    Последнее редактирование: 19 авг 2018
  3. revolover

    revolover Гик

    Не в скетче а в настройке профиля.
    Возможно задал единицу в пид библиотеку и пошла единица, а может на самом деле ей нужна одна сотая? А мы такое значение и задать то не можем.
    Буду чуть позже вникать, откуда ноги растут....
    Хотя я ничего не правил... библиотеку ставил, что в папке со скетчем, думаю, что и так все верно)
     
  4. SOLOway

    SOLOway Гуру

    snmar4enko много экспериментировал с представлением переменных PID. Я пока не представляю себе, как возможно отстроить ПИД в нашем скетче. Правильно ведь было-бы так: Выключаем полностью влияние I & D и настраиваем P так, чтоб немного не догревало до уставки. А уже после этого настраиваем выключенные переменные. После настройки НИ такое проделываем с ВИ. Все настройки проводим на "средней" плате с не темным текстолитом.
    P.S.: Если библиотека из той папки, то править ничего не надо :)
     
    Последнее редактирование: 26 июн 2018
  5. alsh_0907

    alsh_0907 Нерд

    Я недавно экспериментировал с кодом простого ПИД-регулятора, уже даже не помню на каком ресурсе нашел его, в основе его лежит самая первая формула с Википедии. Единственное что от себя добавил, это ограничение интегральной составляющей и выходной величины, по аналогии с библиотекой ПИДа, с которой вы работаете, и ещё чтобы в любой момент можно запросить текущие значения П И Д составляющих. На тестовой макетке (заряд конденсатора до определенного напряжения с ШИМ выхода контроллера) работает очень хорошо. График напряжения и значение ШИМа выводил на ардуиновский сериал-плоттер, получается красиво и наглядно. Но пока что в реальных условиях для ИК станции я его не применял.
     

    Вложения:

    • simple_pid.h
      Размер файла:
      1,3 КБ
      Просмотров:
      374
    Dmitrysh нравится это.
  6. Dmitrysh

    Dmitrysh Гуру

    Не за 2 секунды, а за одно обращение к ПИД. И это не странно. У вас ошибка 100 градусов, значит от пропорциональной составляющей получаем err*Kp = 100*1=100, и ещё плюс интегральная составляющая, но это уже не важно ибо у вас наверняка димер и 100 единиц выхода это 100% мощности. Классика жанра для ПИД.
    Ещё как должно, все по теории.
    Настраивать надо - это факт.
    Интегральная составляющая только дотягивает температуру до заданной, перелёты напрямую не из-за неё, но при неправильной настройке и с ней проблемы будут.
    При правильной настройке мощность вблизи уставки не будет 100%. Чем ближе к уставке, тем меньше пропорциональная составляющая и в конце-концов на уставке она равна нулю. Там уже работает интегральная и дифференциальная часть.
     
  7. Dmitrysh

    Dmitrysh Гуру

    Тот же код, по сути, что и у нас. Можете наш брать - ничего не поменяется. Все правильно, все по теории.
     
  8. Dmitrysh

    Dmitrysh Гуру

    Задать можем, но представьте реакцию ПИД около уставки - практически полное отсутствие пропорциональной составляющей. На интеграле далеко не уедем, скорее до уставки даже не дотянем.
    Если вам 100% мощности не нужно, просто ограничьте её, у нас такой параметр есть и проблем не будет.
     
  9. alsh_0907

    alsh_0907 Нерд

    Даже больше скажу, в конце концов и дифференциальная составляющая тоже равна нулю, если нет внешних возмущений. Рассогласование же равно нулю, значит и разница между ними за два последних измерения тоже равна нулю. Я когда с этим ПИДом игрался, выводил все составляющие на монитор сериал порта.
    У меня возникла мысль касаемо термопрофиля, которую надо будет опробовать на практике. Возможно уже кто то в этой теме озвучивал её. Чтобы предотвратить влияние верхнего нагревателя на термопару нижнего подогрева, по достижению "полочки" и после некоторой выдержки времени, перед включением верхнего нагревателя отключаем ПИД нижнего нагревателя, сохраняем последнее значение которое нам ПИД выдал, и нижний подогрев переводим в режим фиксированной мощности.
     
    Последнее редактирование: 27 июн 2018
    SOLOway нравится это.
  10. revolover

    revolover Гик

    Тогда со старта должно отдавать 100%. На одной лишь P
    Не за один расчет ПИД а в течение двух секунд с некоторого значения разгорается светодиод.
    Завтра всё попробую проверить.
    Собственно про ПИД информацией владею сполна. Мои устройства с регуляторами выходили точно в цель, с мизерными перелетами или малым дотягиванием при помощи I
    Как уже говорил ранее очень важно при настройке выводить ПИД составляющие, и вопросов о косяках не будет.
    А вот представьте, что при наборе температуры возле уставки И составляющая = условно 100% мощности.
    (велик коэффициент)
    П = 0
    Давно бы пора остановиться, а мы жарим на полную...
    П подобрать не сложно, и она в перелетах редко учавствует, и даже быстренько тянет в обратку в случае перелета. А вот и при перелете, будет долго еще уменьшаться и продолжать греть.
    Ограничивать мощность может и не буду, нагреватель под стеклом.
    Не хочу пустых слов, завтра буду смотреть.
    А потом на практике станет ясно что там с коэффициентами, может еще десятые добавлю.
    Нужно будет в коде разобраться и пид библиотеку прошерстить, или вообще ее переписать на свой лад.
     
  11. SOLOway

    SOLOway Гуру

    Коэффициенты на экран выводит Yurik-o: вот его скетч
    Нам так сложно сделать - всё меню перелопатить придется...
    Немного смутила строка у него:
    Код (C++):
    pinMode(2, INPUT_PULLUP);//ZCC
     
  12. Dmitrysh

    Dmitrysh Гуру

    Должно за один расчет, при классическом ПИД. А какой у вас скетч?
    Зачем переписывать, вот она переписанная для верхнего нагревателя есть, изменяйте под себя
    Код (C++):
    float integra;
    #define i_min -200.0//минимум И составляющей
    #define i_max 200.0//максимум И составляющей

    byte Pid1(double temp, byte ust, double kP, double kI, double kd)
    {
            byte out = 0;
            static float ed = 0;
            float e, p;
            float d;
    if (millis() > nextReadPID1)
    {       nextReadPID1+=pidSampleTime;
            e = (ust - temp); //ошибка регулирования
            p =  (kP * e); //П составляющая
            integra = (integra < i_min) ? i_min : (integra > i_max) ? i_max : integra + (kI * e)/100; //И составляющая
            d = kd * (e - ed); //Д составляющая
            ed = e;
            out = (p + integra + d < min_pwr_TOPStep[currentStep - 1]) ? min_pwr_TOPStep[currentStep - 1] : (p + integra + d > max_pwr_TOPStep[currentStep - 1]*2) ? max_pwr_TOPStep[currentStep - 1]*2 : p + integra + d;
        return out;}
        }
     
    SOLOway нравится это.
  13. Dmitrysh

    Dmitrysh Гуру

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

    SOLOway Гуру

    Понятно - сэкономили на резисторе в коллекторе оптрона ZCC.
    У меня "затык" случился при попытке компиляции скетча Yurik-o. Библиотеку кнопок он выложил, методом перебора, я установил версию Adafruit_ILI9341 на которурю не ругается IDE с этим скетчем, а вот что делать с файлом disp.h, который в том посте со скетчем и картинкой дисплея Yurik-o выложил - не понимаю...
    IDE кричит при попытке компиляции, что:
    "fatal error: disp.h: No such file or directory
    #include "disp.h"
    "
    А среди библиотек я такой не нашел...

    P.S.: У кого-нибудь есть схема китайского модуля AD7705?
     

    Вложения:

    Последнее редактирование: 27 июн 2018
  15. Dmitrysh

    Dmitrysh Гуру

    Положите файл disp.h в папку со скетчем.
    У меня скомпилировалось под UNO, под NANO пишет что не хватает памяти, хотя процессоры одинаковые. IDE 1.8.4
     
    Последнее редактирование: 27 июн 2018
    SOLOway нравится это.
  16. SOLOway

    SOLOway Гуру

    Dmitrysh, спасибо! Скомпилировалось!
    Вероятно жалуется на нехватку памяти из-за того, что в NANO и в Pro Mini китайцы шьют древний загрузчик, аж в 2Кб, да ещё и сторожевой таймер с ним не фурычит. А в UNO уже новый в 500байт.
    NANO и Pro Mini:
    Скетч использует 29058 байт (94%) памяти устройства. Всего доступно 30720 байт.
    UNO:
    Скетч использует 29058 байт (90%) памяти устройства. Всего доступно 32256 байт.
    Можно отвоевать 1,5кб, зашив в NANO и в Pro Mini Optiboot. Только не понимаю, какие платы тогда выбирать в IDE Где-то слышал "звон", что в NANO шили загрузчик от UNO, только не ясно, как с портами там быть - у NANO же их больше...
    P.S.: Еще картинку нашел со схемой ZCC :)
    ZERO CROSS DETECTOR.jpg
     
    Последнее редактирование: 27 июн 2018
  17. Dmitrysh

    Dmitrysh Гуру

    больше только за счет аналоговых портов которых в TQFP корпусе больше на 2 чем в DIP
     
  18. revolover

    revolover Гик

    Совершенно не внушает доверия)))

    Стал код изучать... чувство такое, что заново проще делать.
    Как по мне, так реализация настройки, хранения и воспроизведения профилей жутковата(
    Я когда-то профили циклом в многомерном массиве, записывал в eeprom, считывал.
    А количество циклов - под завязку eeprom.
    Было просто, работало отлично.
     
  19. revolover

    revolover Гик

    У всех кнопочки с задержкой работают?
    Я так понимаю, то ли это от дребезга так защищали, то ли от того, что ардуина loop() долго пробегает...
    В идеале все кнопки через диоды на прерывание, а там уже работать с ними.
     
  20. SOLOway

    SOLOway Гуру

    Задержку специально для кнопок ввели большую, с маленькой и без оной по меню невозможно было ходить...
     
Статус темы:
Закрыта.