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

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

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

    xake Нерд

    Так любой скетч можно легко переделать на 1 термопару в 2 строки
    if (Input1 < 150) Input2 = Input1;
    else Input2 = 150;
     
    Sema нравится это.
  2. Dmitrysh

    Dmitrysh Гуру

    стрёмный вариант, ПИД низа будет на И составляющей работать, которая, кстати может быть и нулевой. Плата скорее всего будет остывать и верх будет напрягаться.
    Если уже извращаться по-полной, то можно сделать всё на одном ПИДе
    Код (C++):
    if (Input1<Setpoint2) Output2 = Pid1(Input1, Setpoint2, kp2, ki2, kd2);
    else Output1 = Pid1(Input1, Setpoint1, kp1, ki1, kd1);
     
  3. SOLOway

    SOLOway Гуру

    Вы не увидели главную "фишку" - мною предложенная версия умещается в Mega168p и при этом имеет плюшки "взрослых" реализаций.
    Напомню, версия под Mega168p собиралась из соображений минимальных вложений в создание простой ИК паяльной станции для тех, у кого уже есть автономный термостол. Дисплей изначально был без i2c, самый дешевый 1602, arduino Pro MINI 168p, модуль MAX6675, да USB-датакабель от старого мобильника (кнопки, щепотка радиодеталей - из того, что есть под рукою). При пайке чипа-бутерброда на такой конфигурации станции есть полезная фишка - можно немного добавить мощности НИ непосредственно перед критической фазой профиля (у "взрослых" реализаций для этого организовали рампу для НИ).
     
    Последнее редактирование: 22 апр 2020
  4. MegaN

    MegaN Нерд

    Здравствуйте, подскажите пожалуйста. На своей паялке использовал сначала скетч Dmitrysh, в котором используется предварительный нагрев верха на несколько секунд, стали гореть лампы в любом из каналов, при старте профиля была вспышка, но не всегда. Перешел на скетч от Watashi, стал мучить свою станцию на этом скетче. В последних обновлениях от Watashi была добавлена тоже функция предварительного прогрева и у меня снова стали гореть лампы. Может кто-нибудь может подсказать с чем это связано. Или если можно как убрать данную функцию. Спасибо
     
  5. SOLOway

    SOLOway Гуру

    Спасибо. Переписал. Добавил возможность переключения классических кнопок на аналоговую клавиатуру. Классических кнопок теперь 5, т.к. задействована кнопка ВПРАВО. Вывод графиков теперь по умолчанию в вашу программу irsp.exe, а также описано, как перевести контроллер на работу с Serial Port Plotter. Поправил несколько собственных косяков, в конец скетча добавил 2 мелодии, для коллекции :). Насколько смог - оставил комментарии к строкам кода. Новое имя получила эта версия: v1.3.6. Все изменения отражены в файле ПРАВКИ, и в теле скетча. Работа с режимом АВТО для фиксации мощности НИ при старте ВИ не проверялась.
     

    Вложения:

    Vitaliy нравится это.
  6. Sema

    Sema Нерд

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

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

    РЕЖИМ PID тоже не работает!
    уставка 150 п 3 д 100
    должен тормозить заранее!
    А у меня мощьность 100% до уставки! а после уставки почемуто 3%?

    авто проверять не буду)

    Вот так должен был отработать пид!<<<<но это неточно>>>>
    100%уст150п3д100.png
     
    Последнее редактирование: 23 апр 2020
  7. SOLOway

    SOLOway Гуру

    Вы считаете компанию Intel идиотами? :

    Это все знают и просто вносят поправку на усреднённое значение. Ничем это не мешает пайке, когда станция правильно настроена. Можете в скетче прописать старт ВИ или по его датчику, или по датчику НИ.
    Есть понятие "процессорное время". Часть времени контроллер выполняет одни задачи, другую часть времени - другие задачи, и т.д.. Контроллеры AtMega 8-bit серии довольно мощные штуки, @Dmitrysh , @Watashi , @revolover много сил положили на оптимизацию кода, поэтому у плат arduino под управлением развиваемых ими веток темы еще есть свободное процессорное время. Зачем городить "виноградную гроздь" из контроллеров, каждый из которых в одиночку, не напрягаясь, может эти задачи отработать?
    Не настроены параметры ПИД.
    И, да, - на таком как у вас нагревателе я не могу проверить. Для примера: на REX-C100 для алюминиевой чернёной подошвы от советского утюга на 1000Вт с датчиком, жёстко прижатым пластиной в центре подковы-ТЭНа, параметры такие - П=50, И=240, Д=30. Правда неизвестно, как там считают ПИД и в каких размерностях выводят на индикатор :)
    Размер излучающей поверхности НИ должен быть больше размера самой большой из часто планируемых к пайке плат! Настраивают же станцию на плате средних размеров, со средним же количеством теплоемких компонентов на оной. Знакомый лет 5 назад сделал термостол станции на керамике, применив 2 ТЭНа в центре по 450W и 2 по 600W по краям. Нормально настроил с контроллером от LDZ и датчиками на плате. Так что не всё от железа зависит :)
    Возможно, алгоритм ПИД, предложенный @Dmitrysh в посте #3009 вам не очень подходит. Переписал на предыдущий. Обратите внимание на изменения в описании!
     

    Вложения:

    Последнее редактирование: 23 апр 2020
  8. 31Region

    31Region Нуб

    Всем привет. Кто сможет проверить печатку на обнаружения нуля в сети 220В? Сильно не пинайте только всему учусь и набираю опыта) Правильно стоит оптопара pc817c smd...
     

    Вложения:

    • Ноль.zip
      Размер файла:
      20,9 КБ
      Просмотров:
      248
  9. ShVV

    ShVV Гик

    А не проще вот так. IMG_20200203_141908.jpg IMG_20200203_141914.jpg
     
    SOLOway нравится это.
  10. StDV

    StDV Нерд

    Правильно, если это под утюг.
     
  11. SOLOway

    SOLOway Гуру

    Важное замечание - под "пузом" оптрона контактные площадки надо удалять.
    Три одинаковые по схеме из поста #1619
    4009684.jpg 5240142.jpg
    P.S.: Разместил ссылку на эту тему на форуме сайта EEVblog.com, попытался их пригласить к нам, или обсудить на их площадке тоже.
    Назревает надобность редактировать первое сообщение темы :)
    @Dmitrysh , я правильно понимаю, что скетч в посте #3662 это обновление ревизии из поста #3009 ? И обновленная ревизия вашей программы irsp.exe поселилась в посте #3607 ?
     
    Последнее редактирование: 24 апр 2020
    zveros нравится это.
  12. Aquacomp

    Aquacomp Нуб

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

    Вложения:

  13. geleos27

    geleos27 Гик

    В общем пока жду комплектующие для станции решил заняться адаптацией скетча под 3 термопары.

    Возникло пару технических вопросов:

    Разрешение температуры у Max6675 - 0.25 градуса.
    Есть ли смысл заморачиваться с фильтрацией шумов от Макса, или точности в 1 градус для алгоритма ПИД достаточно?

    Код (C++):
    double ReadCelsius(int CLK, int iCS, int DO) {
      int d = 0;
      digitalWrite(iCS, LOW);  //delay(100);
      asm volatile (" nop"  "\n\t" );
      for (int8_t i=15; i >= 0; i--) {
        digitalWrite(CLK, HIGH);    //delay(1);
        asm volatile ( " nop"  "\n\t" );//    d = (d << 1) | digitalRead(iDO);
        if ( digitalRead(DO))   d |= (1 << i);
        digitalWrite(CLK, LOW);
        asm volatile ( " nop"  "\n\t" );    //delay(1);
        }
      digitalWrite(iCS, HIGH);
      if (d & 0x4) return(-100);     //return -100;
        else  return ((d >> 3) * 2.5); // [B]домножил коэфициент на 10 (было 0.25) [/B]в итоге можем считать дополнительный разряд, т.к. readcelsius возвращает только целое, но итоговая температура умножена на 10 соответственно
    Добавил простейшее условие фильтрации, если изменение температуры менее 1.0 градуса, то прирост температуры 20%, если больше - то 70. т.е. когда температура реально меняется, реакция термопары будет быстрее

    Код (C++):

    void TempRead() {  //  чтение температуры
      if (Input1 == 0) {Input1 = ReadCelsius(thermoCLK1, thermoCS_T, thermoDO1);}
      else { Input11 = ReadCelsius(thermoCLK1, thermoCS_T, thermoDO1) + Corect_T; // Input11 - промежуточная переменная для сравнения с предыдущим шагом
      if (abs(Input1 - Input11) < 10 ) {Input1 = Input1 * 0.8 + 0.2 * Input11;} //Если изменение температуры по модулю менее порогового значения за измерение, то прирост 20% за шаг
      else {Input1 = Input1 * 0.3 + 0.7 * Input11;}  //Если изменение температуры больше порогового значения, то прирост 70% за шаг
      }
     
    После этих 2х усложнений точность в пределах 0.5 градуса что вроде как предел для измерений Макса. Есть ли в этом смысл?
    Снимок6.PNG
     
    Последнее редактирование: 24 апр 2020
  14. Watashi

    Watashi Гуру

    Никакого.
    Обьясняю: В операторе Input1 = Input1 * 0.8 + 0.2 * Input11; заложена формула очень сильно приближенная к вычислению Simple Moving Average "простая скользящая средняя", применяемой чаще на Форексе для анализа ценовых графиков.
    Формула для расчета простой скользящей средней имеет следующий вид:

    SMA=(P1+P2+…+Pn)/n, где

    P1…Pn – значения цены в периоде n;
    n – Количество значений цены в периоде n.

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

    geleos27 Гик

    Это я понимаю. В посте 1977 Dmitrysh принцип был описан. Я добавил условие, что если изменение температуры меньше 1 градуса - период 5 (сглаживаем шум измерений термопары), если больше одного градуса - то период 0.4. Т.е. должна быть быть меньше задержка при стабильных измененииях температуры.

    Собственно это и пытался победить. Надо освоить SerialPortPlotter... По графикам в IRSP стабильно на 1 секунду реакция на изменение температуры быстрее у варианта c проверкой.
     
    Последнее редактирование: 24 апр 2020
  16. Dmitrysh

    Dmitrysh Гуру

    Фильтровать значения температуры от мах6675 нужно обязательно. И надо помнить, что хоть разрешение у МАХа и 0,25 градусов, но ошибка +/-2 градуса, да ещё и ошибка термопары, поэтому я бы не про точность в 1 градус сильно бы задумался.
    А вот это
    и это
    я вообще не понимаю, да и зачем переписывать код, который хорошо работает.
    а это лишнее, потому как ПИДу не очень нравятся плохо фильтрованные значения, особенно Д-составляющей.
     
  17. Dmitrysh

    Dmitrysh Гуру

    А кто-нибудь задержку вообще считал? Почему вы решили, что она там ощутимая?
     
    SOLOway нравится это.
  18. geleos27

    geleos27 Гик

    Я попробую пояснить. ReadCelsius возвращает целое значение.
    Но считываются значения кратные 0.25, т.е. чисто технически мы можем получить от этой функции и первый знак после запятой.
    Поэтому я умножаю результат перед тем, как функция вернет значение на 10, тогда первый знак после запятой не обрезается.

    Т.е. если считывалось с MAX - 45.5, ReadCelsius вернет 45, а если домножить на 10, то вернет 455, дальше в расчетах придется снова делить, но мы получили более точную информацию. (Тоже самое что Вы делали со значением "// 3 - скорость нагрева низа (увелчена в 10 раз)")
    Был не прав.

    Если для ПИД эта точность критична, то это имеет смысл.

    Пока самую большую погрешность вносит изменение температуры чипа самого макса.
    Вот в режиме график термопары.

    Снимок6.PNG


    На глаз к сожалению. Но всегда это стабильно.
    Проходит 1 такт (1 секунда) прежде чем график начинают изменяться.
    Красный - алгоритм рассчета из ваших скетчей, желтый - с доработками.

    Это график по разному обработанных данных с одной термопары.
    (одно считывание, записываю в переменную, дальше использую её)

    Первые 2 подъема - нагрев от того, что брал термопару в руки, вторые два - грел феном на 110 градусов.

    Разница температур.PNG

    Видно что по второму алгоритму изменение температуры отрабатывается быстрее.

    Надо проверить на реальных нагревателях и скоростях прироста температуры профиля, но я смогу это сделать только после того как SSR доедут.

    Вероятно это в большей степени будет актуально для малоинерционных нагревателей.
    Т.к. разница показаний при нагреве до 2гр\сек меньше или равно 1 градусу.
     
    Последнее редактирование: 24 апр 2020
  19. Watashi

    Watashi Гуру

    Что такое double?
     
  20. geleos27

    geleos27 Гик

    Жестко затупил. вещественное число с плавающей точкой, в алгоритме ПИД используется как Double, а в integer оно преобразуется исключиетельно для передачи через SerialPort.
     
Статус темы:
Закрыта.