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

Тема в разделе "Arduino & Shields", создана пользователем vector99, 7 дек 2016.

  1. Watashi

    Watashi Гик

    Всем привет. Сегодня доделал верх и снял первый чип. Пятаки не оторвал)) все прошло как то очень быстро. так хотелось побыстрее испытать, что забыл прогу на компе запустить. )))
     
  2. Yojiq

    Yojiq Гик

    Примите мои поздравления, теперь опыт + опыт, терпенье и труд !
     
  3. StDV

    StDV Нерд

    Благодарю.
     
  4. Watashi

    Watashi Гик

    Спасибо. Буду изучать это дело )
     
  5. Foxweld

    Foxweld Нуб

    Хотел спросить у Dmitrysh можете в вашей программе irsp кнопку старт пайки сделать, что бы станцию с компьютера запускать если получается можно и кнопку стоп пайки сделать?
     
  6. Dmitrysh

    Dmitrysh Гик

    Можно сделать, но нужно и в скетче обработчик кнопки дописать.
    И это можно, но работать медленно будет, да и обработка команд с ком порта в критической секции не очень хорошая идея.
     
  7. Dmitrysh

    Dmitrysh Гик

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

    Вложения:

    Ptisa, Foxweld, Watashi и ещё 1-му нравится это.
  8. Foxweld

    Foxweld Нуб

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

    Вложения:

    • график.JPG
      график.JPG
      Размер файла:
      120,8 КБ
      Просмотров:
      189
    Последнее редактирование: 8 апр 2019
  9. Watashi

    Watashi Гик

    Dmitrysh, Вы подошли к вопросу с нижней рампой очень основательно и правильно! Образ мыслей по построению почти совпадает )) мой вариант такой:
    Код (C++):
          if (TopStart == false)  {
            //Serial.print("- ");    
            if ((currentMillis - previousMillis) > 1000 / (rampRateDown * 0.1))  {  //скорость роста температуры от 0.1с. до 3с.  
              previousMillis = currentMillis;
              counter = counter + 1;
              setpointRamp2 = counter + startTemp;
              if (setpointRamp2 >= Setpoint2) setpointRamp2 = Setpoint2;
              myGLCD.setFont(BigFont);
              myGLCD.setColor(250, 180, 000);
              myGLCD.printNumI(setpointRamp2,65, 300,3,'0');
              // myGLCD.printNumI(setpointRamp,100, 115,3,'0');
              //Serial.println(setpointRamp2);
              //Setpoint2 = setpointRamp;
              }      
            }
          if (tc1 >= SP2-2 && !TopStart) {  //если температура низа вышла на уставку включаем верхний нагреватель
            TopStart = true;
         
            myGLCD.setFont(BigFontRus);
            myGLCD.setColor(VGA_GREEN);
            myGLCD.textRus(F("ШАГ "),5, 300);
            myGLCD.textRus(F("П- "),90, 300);
            counter = 0;  
            }
     
    Это сегодняшние пробы )) Я код воткнул сразу в верхнюю рампу.
     

    Вложения:

    • 1_08_04.jpg
      1_08_04.jpg
      Размер файла:
      192,1 КБ
      Просмотров:
      127
  10. Dmitrysh

    Dmitrysh Гик

    Что-то с настройкой ПИД, не хватает интегральной составляющей или большое ограничение мощности сверху, потому как не выходит на заданную температуру. Вариантов много, пробуйте понемногу подстраивать.
     
  11. Foxweld

    Foxweld Нуб

    А нельзя в настройках перехода верха на следующий шаг, сделать условие равно уставке или минус пару градусов что бы начинало переходить на следующий шаг если пид не дотягивает пару градусов? может это все реализовано в скейче я не нашёл.
     
    Последнее редактирование: 10 апр 2019
  12. SOLOway

    SOLOway Гик

    Как когда-то LDZ выразился - "есть или ручной режим, или автомат". В последнем нужно точно настроить параметры и код отлично всё отработает.
    Покопался я в старой версии для UNO & TFT SPI 2.4" от Yurik-o.
    Тут теперь есть и 14 профилей, и графики на ПК, и управление вентиляторами, и самые важные правки от Dmitrysh, и даже мелодичка приветственная на выбор.
    Осталось разобраться со странной переменной OLD_TEMP только, но и сейчас она особо не мешается.
    Использованные библиотеки в архиве, и почитать-посмотреть тексты-картинки рекомендую, чтоб меньше вопросов осталось. Может, кто дополнит чем, поправит что-нибудь :) .
     

    Вложения:

  13. Dmitrysh

    Dmitrysh Гик

    Вы наверное имели ввиду переменные вот эти
    Код (C++):
    int tc1_old;
    int tc2_old;
    Эти переменные планировалось использовать для вывода температуры, если она изменилась, но код не дописан.
    Варианты решения: убрать переменные либо дописать код.
    Если убираем переменные то часть кода
    Код (C++):
    if ( tc1 != tc1_old )
            {
              tft.setCursor(16 * 16 + 5, 2 * 48 + 48); //lcd.setCursor(16, 2);
              tft.print("   ");
              tft.setCursor(16 * 16 + 5, 2 * 48 + 48);
              tft.print(tc1);
            }
            if ( tc2 != tc2_old )
            {
              tft.setCursor(16 * 16 + 5, 3 * 48 + 48); //lcd.setCursor(16, 3);
              tft.print("   ");
              tft.setCursor(16 * 16 + 5, 3 * 48 + 48);
              tft.print(tc2);
            }
    переписываем так
    Код (C++):
              tft.setCursor(16 * 16 + 5, 2 * 48 + 48); //lcd.setCursor(16, 2);
              tft.print("   ");
              tft.setCursor(16 * 16 + 5, 2 * 48 + 48);
              tft.print(tc1);
           
              tft.setCursor(16 * 16 + 5, 3 * 48 + 48); //lcd.setCursor(16, 3);
              tft.print("   ");
              tft.setCursor(16 * 16 + 5, 3 * 48 + 48);
              tft.print(tc2);
           
    если дописываем, то меняем вот на это
    Код (C++):
    if ( tc1 != tc1_old )
            {
              tft.setCursor(16 * 16 + 5, 2 * 48 + 48); //lcd.setCursor(16, 2);
              tft.print("   ");
              tft.setCursor(16 * 16 + 5, 2 * 48 + 48);
              tft.print(tc1);
            }
            tc1_old = tc1;
            if ( tc2 != tc2_old )
            {
              tft.setCursor(16 * 16 + 5, 3 * 48 + 48); //lcd.setCursor(16, 3);
              tft.print("   ");
              tft.setCursor(16 * 16 + 5, 3 * 48 + 48);
              tft.print(tc2);
            }
            tc2_old = tc2;
     
    SOLOway нравится это.
  14. Watashi

    Watashi Гик

    Dmitrysh проделал большую работу переделав скетч и программку работы с РС, пост #2367. Лайк!
    В свою очередь и я в своем варианте сделал соответствующие правки.
    В нижней рампе сделал плавный запуск нагрева нижнего нагревателя. Это больше актуально для лампового низа, как мне кажется. И немного оптимизировал код.
    Проведя тесты и поигравшись с настройками ПИДа получилась такая картинка.
     

    Вложения:

    Скряга и Foxweld нравится это.
  15. SOLOway

    SOLOway Гик

    Похвально!
    На страницах этой темы я поднимал этот вопрос и Dmitrysh меня поддержал тогда, но никто не развивал дальше сей вопрос, т.к. хватало тогда недочетов во всех скетчах на то время.
    А ведь мягкий старт нагревателей с ярко выраженным https://ru.wikipedia.org/wiki/Бареттер бареттерным эффектом позволяет не только использовать более дешевые силовые элементы управления, но и позволяет оптимизировать общее потребление паяльной станции, что важно при слабой проводке, а ещё софт-старт положительно сказывается на некоторых иных аспектах устройств и процессов связанных с работой с корпусами BGA.
     
  16. Watashi

    Watashi Гик

    Мне кажется у нас не тот случай, лампы включаются на полную мощность на полный полупериод сетевого напряжения. Широтно-импульсная модуляция, охватывающая несколько периодов сети. Принцип работы мягкого старта в скетче основан на ограничении мощности выдаваемой ПИДом от минимума до максимума в начале нагрева низа. В первые секунд 30 мощность линейно растет, до тех пор пока ПИД начнет ее сам ограничивать, чтобы поддерживать заданную скорость роста температуры.
     
  17. SOLOway

    SOLOway Гик

    Подредактировал. Сделал два варианта - с ними и без низ. Правда не понял, в каких случаях их применение требуется...
     

    Вложения:

    Dmitrysh нравится это.
  18. SOLOway

    SOLOway Гик

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

    Dmitrysh Гик

    Это немного ускоряет работу скетча. Если температура не изменилась, то и не выводим на lcd. А т.к работа с экраном медленная, то и скорость работы несколько возрастает.
     
    SOLOway нравится это.
  20. Dmitrysh

    Dmitrysh Гик

    Я думаю, все таки, плавный пуск актуальней для высокоинерционных нагревателей. Лампы они малоинерционные и с рампой ПИД не сильно-то их разгоняет, по крайней мере по тестовым прогонам у меня больше 61% мощности(и то это при увеличении задания рывок небольшой) ПИД не выдавал. А старт вообще с 10-13% происходит без рывка.
    А вот для инерционных нагревателей получается, что мощность мы подвели, а роста температуры нет, ещё добавили - роста температуры нет, дали максимум - температура растёт медленно, но с каждой секундой всё быстрее и быстрее. Сбросили мощность, а температура по инерции растёт, дошли до нуля мощности - растёт, через некоторое время начинает замедляться рост и останавливается, а дальше по кругу - больше, больше, максимум, ноль и т.д.
    Так вот чтобы мы не попадали на такие колебания, как мне кажется, плавный запуск должен помочь. Но надо пробовать.
    Я вообще планировал преднагрев делать, допустим 3-5сек на мощности 2-5%, а потом цикл пайки. Дело в том, что когда стартуешь с холодными лампами, первый импульс на лампы вызывает некое низкочастотное гудение, как трансформатор сварочный, а потом всё как по маслу - тихо и спокойно. Я так понимаю это из-за низкого сопротивления ламп во время старта и я думаю для симисторов это не очень хорошо.
     
    SOLOway нравится это.