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

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

  1. Запустите встроенный пример к этой библиотеке через Файл -> Образцы кода. Не будут выскакивать ошибки?
     
  2. Watashi

    Watashi Гик

    Ошибки нужно все скопировать и здесь выкладывать как код.
     
  3. Crow22

    Crow22 Нуб

    Спасибо! Этой библы у меня небыло включено и в ваших файлах библиотек ее не было! Я теперь понял что вы забыли включить! Буду пробывать!
     
  4. Crow22

    Crow22 Нуб

    Спасибо! Установил вашу библу часов и Заработало! А раньше ставил с инета другие и подгонял включение ее библиотеки!
     
  5. SOLOway

    SOLOway Гик

    @Dmitrysh Приветствую!
    В скетче из вашего поста #3009 обнаружил интересность - в основном цикле на старте пайки принудительно переменные ПИД установлены в ноль:
    Код (C++):
    //включаем пайку, кнопка сработает после отпускания "ОК"    
          if (okSwitchState == LOW && button_state && ( millis() - ms_button)>100)
          {    
    START: ms_button =  millis();
            button_state = false;
            tone(buzzerPin, 1045, 500);  //звуковой сигнал при старте профиля
            #ifndef no_pc
            sprintf (buf, "SYNC\r\n");
            Serial.print(buf);
            #endif
            bottomTemp=0;
            integra=0;
            integra2=0;
            p1=0;
            p2=0;
            d1=0;
            d2=0;
            updateScreen = true;
            Xgr=2;
            XTgr=2;
            reflowStatus = REFLOW_STATUS_ON;
            reflowState = REFLOW_STATE_TABLE_SIZE;
          }

          break;
    Как это отразилось на работе?

    И еще вопросик. - Скетч в посте #2876
    Вами подмечен сюрприз его: при длительности последнего шага 0 сек. профиль отказывается завершаться #2877 , #2917 , #2918
    Пролистывая ваши релизы в постах #2867 и #3009 не могу найти как этот момент исключен :(
     
    Последнее редактирование: 24 окт 2019
  6. Dmitrysh

    Dmitrysh Гик

    Для корректной рабаты ПИД-регулятора необходимо каждый раз перед новым запуском его переинициализировать, т.е привести в первоначальное состояние, потому как при работе ПИДа у нас накапливаются некоторые значения ПИД составляющих, которые, если их не сбросить будут влиять на процесс расчётов выходной величины. Это, по-большей части, касается интегральной составляющей. Остальные составляющие, в принципе, не накапливаются, но на всякий случай я и их обнуляю.
    Здесь всё просто, подвох кроется вот на этом участке кода
    Код (C++):
     case REFLOW_STATE_STEP_DWELL:
          if (currentMillis - previousMillis > 1000)
           {      
            previousMillis = currentMillis;
            counter = counter + 1;
            myGLCD.setFont(BigFont);
            myGLCD.setColor(250, 180, 000);
            myGLCD.printNumI(counter,120, 300,2,'0');
           }
           if (counter == profile.dwellTimerStep[currentStep - 1]) //если счётчик равен установленному времени
           {
            myGLCD.setFont(BigFont);
            myGLCD.setColor(VGA_RED);
            myGLCD.printNumI(counter,120, 300,2,'0');
            tone(buzzerPin, 1045, 500);  //звуковой сигнал
            counter = 0;
            setpointRamp = 0;
     
    а именно в условии
    Код (C++):
    if (counter == profile.dwellTimerStep[currentStep - 1]) //если счётчик равен установленному времени
    к этому условию мы в любом случае подходим со значением counter больше нуля и, если у нас dwellTimerStep(время перехода) равно нулю, то условие никогда не станет истинным и мы никогда не закончим шаг. Таким образом если установить любой шаг равным нулю, то он станет бесконечным. Это обстоятельство не всегда есть хорошо и обходится вот так
    Код (C++):
    if (counter >= profile.dwellTimerStep[currentStep - 1]) //если счётчик равен установленному времени
    есть и другие варианты, но они не заслуживают внимания
     
    Последнее редактирование: 24 окт 2019
    SOLOway нравится это.
  7. Crow22

    Crow22 Нуб

    Обнаружил "вероятно" ошибку в коде в самом начале:
    //-----------------------------------------------------------------------------------------------------
    // Секция АЛЬТЕРНАТИВНАЯ кнопок, пинов подключеня ---------------------------
    #else
    #define RelayPin1 7 //назначаем пин "ВЕРХНЕГО" нагревателя
    #define RelayPin2 6 //назначаем пин "НИЖНЕГО" нагревателя
    #define P1_PIN 9 //назначаем пин реле 1
    #define P2_PIN 10 //назначаем пин реле 2
    #define P3_PIN 11 //назначаем пин реле 3
    #define P4_PIN 12 //назначаем пин реле 4
    #define buzzerPin 8 // пин для буззера
    #define Knopki A5 // пин подключения аналоговой клавиатуры
    //назначаем пины усилителя термопары MAX6675 "ВЕРХНЕГО" нагревателя clk=sck cs=cs do=so
    #define thermoCLK 14 //=sck
    #define thermoCS 15 //=cs
    #define thermoDO 16 //=so
    //назначаем пины усилителя термопары MAX6675 "НИЖНЕГО" нагревателя clk=sck cs=cs do=so
    #define thermoCLK2 14 //=sck // Ошибка: Номер пина повторяется как для верхнего нагревателя
    #define thermoCS2 17 //=cs
    #define thermoDO2 16 //=so // Ошибка: Номер пина повторяется как для верхнего нагревателя
    #endif
    //----------------------------------------------------------------------------------------------------------------

    А по правильному наверно должно быть так:
    //-----------------------------------------------------------------------------------------------------
    // Секция АЛЬТЕРНАТИВНАЯ кнопок, пинов подключеня ---------------------------
    #else
    #define RelayPin1 7 //назначаем пин "ВЕРХНЕГО" нагревателя
    #define RelayPin2 6 //назначаем пин "НИЖНЕГО" нагревателя
    #define P1_PIN 9 //назначаем пин реле 1
    #define P2_PIN 10 //назначаем пин реле 2
    #define P3_PIN 11 //назначаем пин реле 3
    #define P4_PIN 12 //назначаем пин реле 4
    #define buzzerPin 8 // пин для буззера
    #define Knopki A5 // пин подключения аналоговой клавиатуры
    //назначаем пины усилителя термопары MAX6675 "ВЕРХНЕГО" нагревателя clk=sck cs=cs do=so
    #define thermoCLK 17 //=sck // Выставте ваше номер пина
    #define thermoCS 18 //=cs // Выставте ваше номер пина
    #define thermoDO 19 //=so // Выставте ваше номер пина
    //назначаем пины усилителя термопары MAX6675 "НИЖНЕГО" нагревателя clk=sck cs=cs do=so
    #define thermoCLK2 14 //=sck // Выставте ваше номер пина
    #define thermoCS2 15 //=cs // Выставте ваше номер пина
    #define thermoDO2 16 //=so // Выставте ваше номер пина
    #endif
    //----------------------------------------------------------------------------------------------------------------

    Ну и в начале надо закоментировать: #define SetAltPin
     
  8. Watashi

    Watashi Гик

    Вообще то это не ошибка:
    1 Альтернативная настройка пинов задумана была для того чтобы каждый мог установить свои настройки, при этом общепринятые (по умолчанию они используются в других версиях паяльной станции, могут и здесь тоже) остаются.
    2 Есть два варианта подключения МАХ6675, по принципу
    а. один пин - один контакт МАХа (sck, sc, so),
    b. у МАХов обьеденяются sck, so
    3. Если закоментировать #define SetAltPin , то неважно что написано в альтернативных настройках, они не будут спользоваться.

    у меня в альтернативных настройках второй вариант.
     
    SOLOway нравится это.
  9. Crow22

    Crow22 Нуб

    Тогда извините! За такой тип подключения MAX6675 я не знал!
     
  10. Crow22

    Crow22 Нуб

    Скажите а что делать с + и - на MAX6675, кнопках, часах и энкодере? В вашей схеме не указано что они запитуются!
     
  11. Watashi

    Watashi Гик

    Это питание +5в, - земля.
     
    SOLOway нравится это.
  12. SOLOway

    SOLOway Гик

    #2636 :)
     
  13. cwetok

    cwetok Нуб

    @Watashi не могу настроить управление верхом, низ отрабатывает нормально. На первом шаге верха включается предварительный подогрев с выставленным в первом шаге минимальным значением и не переходит на следующий шаг. Ставил разные значения, идёт нагрев верхом с выбранным значением мощности. Если мощность недостаточная идёт поддержание низом температуры уставки низа. Если мощность достаточная от 30% то идёт линейный нагрев верхом, но профиль не отключается при достижении верхней температуры. В чём может быть причина. Скетч не менял, подставил свои значения клавиатуры и настройки ПИД по скетчу Dmitrysh.
     
  14. Watashi

    Watashi Гик

    Напишите какие у вас настройки низа и верха по шагам.
     
  15. cwetok

    cwetok Нуб

    низ: ск-ть нагрева-0,5; т-ра-120;время задержки-10;мощность мин-1 макс-100
    верх:
    1 шаг-- ск-ть нагрева-0,8; т-ра-140;время перехода-20;мощность мин-33 макс-100
    2 шаг-- ск-ть нагрева-0,8; т-ра-160;время перехода-10;мощность мин-1 макс-100
    3 шаг-- ск-ть нагрева-0,8; т-ра-180;время перехода-10;мощность мин-1 макс-100
    4 шаг-- ск-ть нагрева-0,8; т-ра-200;время перехода-20;мощность мин-1 макс-100
    верх: П-40 И-26 Д-15
    низ: П-7 И-13 Д-20
     
  16. Watashi

    Watashi Гик

    Исправил этот дефект и еще несколько накопившихся мелких. Перезалил на основной страничке проекта тут
    Дефект проявлялся на 4х шагах, на 3х и меньше нет.
     
    Последнее редактирование: 27 окт 2019
    cwetok, Probe2005klm и xake нравится это.
  17. vit1

    vit1 Нуб

    Добрый день . Почему бы вам не сделать тест станции по которым будут определяться параметры для ПИД и по окончанию теста сделать запись автоматически ?
    Вот на моём контролере есть тест но параметры полученные Kc Ti Td приходится вводить в настройки ПИД руками .
    https://drive.google.com/open?id=10SkbDe-T7tPE9yFSXeaBs5j-RURwLABV
    и после ввода данных ПИД есть возможность их проверить и проконтролировать визуально работу ПИД вверху мощность а внизу температура на втором видео видно что установлена Т100 гр сначала остывала потом пошла в нагрев получился прогиб вот как то так .
    https://drive.google.com/open?id=1j9sPzHblwgU1RFNgEL7EkmJOfyzQ93eK
     
    Последнее редактирование: 27 окт 2019
  18. Watashi

    Watashi Гик

    Мне неизвестен алгоритм по которому вычисляются коэффициенты ПИДа.
    Может кто знает?
     
  19. vit1

    vit1 Нуб

    Последнее редактирование: 27 окт 2019
  20. Watashi

    Watashi Гик

    И где там вычисляются коэффициенты ПИДа? Там расписана как вычисляется управляющая функция с помощью коэффициентов. Нужна обратная задача .