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

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

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

    geleos27 Гик

    А это софт к каким станциям?
     
  2. LessNICCKoff

    LessNICCKoff Гик

    Независимо от настроек ПИД примерно через 156-170 секунд врубает НИ на 100%
    Выглядит примерно так: НИ подогревает разбегом в 2-3 градуса и в момент очередной волны когда лампы тухнут вдруг резко включается 100%
     
    Последнее редактирование: 17 июл 2020
  3. geleos27

    geleos27 Гик

    полные настройки вашего профиля в студию.

    температура на термопарах ВИ, НИ при этом какая?

    Я знаю только 1 способ отлова глюков - вывести значения переменных в Ком порт, и смотреть что изменилось в момент когда начинает жарить на 100%.

    Собственно из скетча нас интересуют:

    Output2 - результат вычисления ПИД низа, ~ мощность на текущий момент.
    Input2 - какая температура на термопаре низа

    Но они вроде и так у вас выводятся в программу.

    можно вывести еще
    p2, integra2, d2 чтобы понять какая из компонент является причиной 100 мощности.

    1437 строку заменить на
    sprintf (buf, "OK%03d%03d%03d%03d%03d03d%03d%03d\r\n", int(Output1), int(Output2), tc1, tc2, currentProfile, (int)p2, (int)integra2, (int)d2); // вывод на комп через UART
     
    Последнее редактирование: 17 июл 2020
  4. LessNICCKoff

    LessNICCKoff Гик

    Сейчас в данный момент: P=5 I=1 D=0.01
    Интегральная составляющая влияет конечно :)
    пид.jpg


    Когда происходит сбой данные мощности НИ в программу не передаются!!! Иногда сразу при включении греет на все 100% так же в программу данные не отсылает.
     
    Последнее редактирование: 17 июл 2020
  5. Dmitrysh

    Dmitrysh Гуру

    а что нибудь вообще передаётся при сбое?
     
  6. LessNICCKoff

    LessNICCKoff Гик

    Передаётся температура и мощность ВИ.
     
  7. geleos27

    geleos27 Гик

    Так вроде низя) Целое число должно быть. Или у вас в интерфейсе 1 забита?

    Т.е. ардуина либо виснет, либо впадает в цикл. Полные настройки можно увидеть?э


    Собственно - попробуйте залить любой другой скетч, вбить туда параметры пид и прогнать его. Если зависнет - смотрите что у вас с питаниями ардуины.

    Нашел странную строку.

    //счётчик скорости роста температуры
    1269 -
    if (Setpoint22 >= setpointRamp) profile.Setpoint2 = setpointRamp;
     
    Последнее редактирование: 17 июл 2020
  8. Dmitrysh

    Dmitrysh Гуру

    не прокатит, никакой другой скетч так управлять не умеет.
    если бы висла, данных бы не было. То же и с циклом, тем более, со слов пользователя, ВИ работает.
    можно, если очень нужно
     
    SOLOway нравится это.
  9. Dmitrysh

    Dmitrysh Гуру

    Программа пишет log файл, можно на него глянуть?
     
  10. SOLOway

    SOLOway Гуру

    ;););)
    //Коэффициенты PID выводятся на дисплей так: Kp деленный на 10, Ki, Kd деленные на 100.
    Код (C++):
    //настройка "ПИД" верхнего нагревателя
        case REFLOW_STATE_MENU_TOP_P:
          if (updateScreen) {
            lcd.setCursor(0, 1);
            lcd.print("T.Heat: ");
            lcd.setCursor(8, 1);
            lcd.print("P=");
            out_float = profile.kp1 / 10.0;
            lcd.print(out_float);
            lcd.print("    ");
            updateScreen = false;
          }
          lcd.setCursor(10, 1);
          out_float = profile.kp1 / 10.0;
          lcd.print(out_float);
          lcd.print("    ");
    Теперь о своих болячках ...
    Пост #4537 - я забыл прикрепить код тестируемого скетча, а там есть подвох - в IDLE короткое нажатие CANCEL выключает охладитель платы, включаемый коротким нажатием RIGHT.
    Код (C++):
    if (cancelSwitchState == HIGH && ( millis() - ms_button) > 50)
          {
            ms_button =  millis();
            digitalWrite(Ext_Fan, LOW); //выключить охладитель платы
          }
          if (rightSwitchState == HIGH && ( millis() - ms_button) > 50)
          {
            ms_button =  millis();
            digitalWrite(Ext_Fan, HIGH); //включить охладитель платы
          }
    Я закомментировал этот код, и инит предустановленного профиля по longpress CANCEL в режиме IDLE стал работать корректно. Сначала не поверил, поменял платку ProMINI и убедился, то это так. Теперь надо будет решить, как вернуть ручное управление охладителем платы. Остальное расписал в теле скетча.
     

    Вложения:

    • 160720.zip
      Размер файла:
      14 КБ
      Просмотров:
      240
    Последнее редактирование: 18 июл 2020
    Sema нравится это.
  11. Dmitrysh

    Dmitrysh Гуру

    Передаются, просто мы их не видим, точнее контроллер не видит.
     
  12. Dmitrysh

    Dmitrysh Гуру

    попробуйте этот вариант
     

    Вложения:

  13. geleos27

    geleos27 Гик

    Про виснет - я затупил. Про цикл для низа - может и попадает.
     
  14. Dmitrysh

    Dmitrysh Гуру

    Нет, не цикл это. Там логическая ловушка. Подождём результатов последней редакции.
     
  15. geleos27

    geleos27 Гик

    Код (C++):

    struct pr {
     int temperature_step_bottom[10];
     byte kp1; //пропорциональный коэффициент ВИ
     byte ki1; //интегральный коэффициент ВИ
     byte kd1; //дифференциальный коэффициент ВИ
    структура профиля
    };
    int SizeProfile = sizeof(pr); // длинна поля данных
    pr profile; //структура для параметров


    void SaveProfile () { // сохранение текущего профиля в позицию currentProfile
    EEPROM.put((currentProfile - 1)*SizeProfile, profile);
    }

    void loadProfile()//this function loads whichever profile currentProfile variable is set to
    {
    EEPROM.get((currentProfile - 1)*SizeProfile, profile); // читаем профиль с EEPROM в память
    return;
    }
     
    Подсмотрел в чьем-то скетче. Пишет и читает структуру целиком меняйте как хотите. put пишет только изменения.
    После чтения используем так
    Код (C++):

    profile.temperature_step_bottom[3];
    profile.kp1;
     
     
    Последнее редактирование: 17 июл 2020
  16. Dmitrysh

    Dmitrysh Гуру

    Не совсем так, если меняете в структуре тип данных на больший по размеру, то портите уже сохранённые в EEPROM профили.
     
  17. geleos27

    geleos27 Гик

    Все верно. Но это только на этапе настройки \ экспериментов критично же. Зато не надо возиться при изменениях с функциями чтения \ записи.

    А при отправке профиля с компа, не критично совсем)
     
  18. LessNICCKoff

    LessNICCKoff Гик

    Вот лог. С цифрой 1 с самого начал отвалились показания.
    Правленный скетч ещё не пробовал.
     

    Вложения:

    • conection.zip
      Размер файла:
      907 байт
      Просмотров:
      212
    • conection1.zip
      Размер файла:
      629 байт
      Просмотров:
      219
  19. Beto

    Beto Нерд

    Не надо ничего добавлять. Просто дай возможность сетке при нагреве расширяться - не крепи её сильно жёстко, ослабь чутка винты.
    Это как с ламинатом на полу припуск по перриметру в сантиметр делают на расширение.
     
    hacjka нравится это.
  20. tssergej

    tssergej Нерд

    Я пробовал сетку для теста, просто сверху нагревателей ложить, просто лежала сверху без какого либо крепежа - вспучило почти на сантиметр по центру. Может от размера и формы ячейки зависит.
     
Статус темы:
Закрыта.