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

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

  1. Dmitrysh

    Dmitrysh Гик

    А как вы это себе представляете? На сколько я понял, если мах6675 впал в ошибку, то он там до снятия питания будет сидеть. Даташит ничего об этом не говорит, но практика показывает, что это так.
     
    SOLOway нравится это.
  2. Dmitrysh

    Dmitrysh Гик

    Я предлагаю посмотреть на мах31855. Я купил себе парочку, очень много брака. Буду переделывать и проводить испытания.
     
  3. Нафаня

    Нафаня Нерд

    Может кому бует интересно,поповоду отвала термопары заметил проблему которая повторялась пару раз(если плата имеет прямой контакт с корпусом станции,термопара отпаает.если изолировать плату от корпуса всё ок)
     
    SOLOway и Dmitrysh нравится это.
  4. Dmitrysh

    Dmitrysh Гик

    Очень правильное замечание, корпус - сборщик помех.
     
  5. SOLOway

    SOLOway Гик

    Небольшая подборка постов в архиве про наводки:
     

    Вложения:

  6. CLON2

    CLON2 Нерд

    Возвращаемся на пост #1749 и будет Вам счастье... :)
     
  7. SOLOway

    SOLOway Гик

  8. SOLOway

    SOLOway Гик

    А вот
    Krupikus
    делает и делает видосики, жалуется, что всё в теме разбросано, а никак не хочет поучаствовать в систематизации материала...
    И скетч недоделанный использует... Э-эх, одним словом :) . Хорошо, хоть либу PID поправленную revolover к скетчу на сервере своём приложил :)
     
    Последнее редактирование: 2 май 2019
  9. SOLOway

    SOLOway Гик

    Собрал на макетке редакцию Yurik-o v1m5, которую помогали мне xake и Aleksander1997 подправлять.
    Чуть причесал еще скетч, согласно замечаниям Dmitrysh, и подцепил вывод графиков на ПК в прогу Heater.
    Вот что заметил: 1. В режиме пайки ПИДы работают нестабильно, при неизменной температуре светодиод НИ иногда психует через неравные промежутки времени. 2. В режиме пайки вспыхивает нерегулярно светодиод ВИ, хотя до его включения - как нам до коммунизма... 3. В idle выводятся оба графика и откликаются на воздействия на датчики, однако в режиме пайки график НИ куда-то исчезает :( .
    Полный архив прилагаю. Вдруг, кому будет интересно! Специально именно этой версией я не занимаюсь, просто под руку попалась, и решил немного порядка в теме добавить...
    UPD: Упс... Теперь действительно поправлена работа с EEPROM. Перезалил.
     

    Вложения:

    Последнее редактирование: 25 янв 2019
  10. Dmitrysh

    Dmitrysh Гик

    Время пересчёта ПИД согласно коду
    Код (C++):
    myPID1.SetSampleTime(50); //задает частоту расчета выходного сигнала в милисекундах
      myPID2.SetSampleTime(50);
    составляет 50мс. Если честно, то я очень сильно сомневаюсь что с TFT экраном скетч попадает в критическую секцию 20 раз в секунду. Поэтому расчёт ПИД осуществляется не по времени, а "как получится". Хорошего качества регулирования с этим не достичь. Есть ещё кое что, я опишу в вопросе 3.
    Это связано с таким кодом
    Код (C++):
     myPID1.Compute();
        myPID2.Compute();
        attachInterrupt(0, Dimming, FALLING);
        // настроить порт прерывания(ISR0 - pin D2 or ISR1 - D3)
        if (!TopStart) Output1=0;
    Т.е сначала считаем ПИД, потом прерывание с включением нагревателей(и верхнего тоже), а потом сброс верхнего нагревателя если не TopStart. Поэтому и подмигивает верхний.
    Здесь вообще прикольно. Посмотрите внимательно на этот код
    Код (C++):
    Input1 = max6675_read_temp (thermoCLK, thermoCStop, thermoSO);
          Input2 = max6675_read_temp (thermoCLK, thermoCStop, thermoSO);
    Я думаю он говорит сам за себя.(чтобы не было вопросов скажу что этот код читает температуру из одного и того же МАХ6675 - верхнего два раза подряд. Это косяк великий, ибо помимо всего, время между чтениями должно быть не менее 220мс). Я даже представить не могу, как такая конструкция может вообще работать.

    От себя.
    Вот это
    Код (C++):
    myPID1.SetTunings(kp1, ki1, kd1);
        myPID2.SetTunings(kp2, ki2, kd2);
        myPID1.SetOutputLimits(0, pwr_TOP);//установка минимального и максимального значения (от 0 до 100)
        myPID2.SetOutputLimits(0, pwr_BOTTOM);//которое будет передано на управление диммером
    в критической секции быть не должно. Это нужно перенести в loadProfile().
    Вот эта часть
    Код (C++):
     attachInterrupt(0, Dimming, FALLING);
    должна быть в setup();
    Вот это
    Код (C++):
    myPID1.SetOutputLimits(0, 100);//myPID1 = top heater PID loop
      myPID2.SetOutputLimits(0, 100);
    лишнее.
    Время расчёта ПИД требует корректировки(по теории должно соответствовать времени между измерениями температуры). Время измерения температуры можно уменьшить до 250мс. (сейчас 500мс)
    Желательно вернуть фильтрацию, хотя бы как я советовал несколько постов назад.
     
    buivol135 и SOLOway нравится это.
  11. Watashi

    Watashi Гик

    Задавшись вопросом, "Зачем какая-то подпрограмма 50 раз в секунду грузит контроллер, когда нужно обрабатывать кнопки и она не нужна? ", я предлагаю поместить ее в самое начало процесса пайки, где включается НИЗ, туда же можно и настройки ПИД(необязательно, можно и в loadProfile()), а по завершении пайки вставить detachInterrupt()
     
  12. SOLOway

    SOLOway Гик

    Мой косяк :( . Аж ещё с поста #1544 Исправил.
    Для myPID1 и myPID2 задал SetSampleTime(100) как в старых скетчах.
    Перенес attachInterrupt(0, Dimming, FALLING); в сетап.
    Скомпилировал, вгрузил. Так не работает :( . Вернул назад. Буду сегодня ещё пытать.
    Dmitrysh, от меня признательность вам и благодарность!
     
    Последнее редактирование: 26 янв 2019
  13. SOLOway

    SOLOway Гик

    Это тянется еще из скетча от vector99 в посте #149
    Показалось, что в режиме пайки, в момент обновления дисплея с графиками (когда график уперся в правую стенку дисплея) останавливается считывание температуры - буззер на TX0 замолкает...
    День закончился. Бросаю это дело пока :) .
    Поправил только косяк с обращением к MAX6675 top.
     

    Вложения:

    • 1vm5_250119.zip
      Размер файла:
      1,8 МБ
      Просмотров:
      74
    Последнее редактирование: 26 янв 2019
  14. Dmitrysh

    Dmitrysh Гик

    А зачем описывать прерывание при каждом старте пайки, а по завершении удалять? Один раз в setup описали и все, пусть работает. А настройки ПИД? Зачем их прописывать каждую пайку? Один раз при старте станции или при смене профиля и всё. Уже давно это обсуждалось и в большинстве скетчей реализовано.
     
  15. Dmitrysh

    Dmitrysh Гик

    Там по скетчу какая-то процедура хитрая очистки графика, работа с TFT медленная, возможно затык из-за этого.
     
  16. Dmitrysh

    Dmitrysh Гик

    Не совсем так. Параметр SENSOR_SAMPLING_TIME отвечает за скорость чтения температуры в режиме IDLE как не странно. На режим пайки этот параметр влияния не оказывает. В режиме пайки "рулит" параметр GRAPHICS_SAMPLING_TIME, что, в общем-то, странно и нелогично.
     
    SOLOway нравится это.
  17. Dmitrysh

    Dmitrysh Гик

    А вообще, если мы хотим получить информативный TFT с подстройкой ПИД кнопочками и выводом параметров на компьютер и при этом не мешать работе критической секции, необходимо регулировие переносить в прерывание. Для этого у нас всё в принципе есть - быстрый ПИД, быстрое чтение из МАХ6675, быстрый фильтр и быстрый диммер.
     
  18. SOLOway

    SOLOway Гик

    Нихрена не получилось корректно графики выводить на ПК с этим скетчем ( #2014 ) - в логе heater видно, что rx/tx регулярно чем-то заняты, и что прорвалось в ПК в свободный момент, то и отобразилось. Не хочу им заниматься - у меня еще пост #1618 не допилен.
     
    Последнее редактирование: 2 май 2019
    Probe2005klm нравится это.
  19. SOLOway

    SOLOway Гик

    Наводил порядок в скетче v.1.3.3 из поста #1619 . Добавил управление охлаждением силовой и контроллера, а также блоком охладителей платы. Ограничил коэффициенты "P", "D" коридором 0-250, а "I" только 0-100.
    Не уверен, правда, что правильно поступил, в отношении "I" особенно. Перед обновлением скетчей в посте #1619 выкладываю новый v.1.3.3 здесь. Изменения, по традиции, отразил в файле ПРАВКИ. Прошу прокомментировать.
    Обратите внимание, в файле ПРАВКИ про D2 как сейчас в скетче:
    Код (C++):
      //attachInterrupt(0, Dimming, RISING); //настроить порт прерывания(0 или 1) 2й или 3й цифровой пин
      attachInterrupt(0, Dimming, FALLING); //настроить порт прерывания(0 или 1) 2й или 3й цифровой пин
      /* -------------------------------------------------------------------------------
        LOW вызывает прерывание, когда на порту LOW
        CHANGE прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот
        RISING прерывание вызывается только при смене значения на порту с LOW на HIGH
        FALLING прерывание вызывается только при смене значения на порту с HIGH на LOW
        ------------------------------------------------------------------------------- */
    Не понимаю, как избавиться от лишнего нолика в меню установки "I". фото:
    kI_лишний ноль справа.jpg
     

    Вложения:

    • 250119.zip
      Размер файла:
      296,4 КБ
      Просмотров:
      53
    Последнее редактирование: 27 янв 2019
  20. Dmitrysh

    Dmitrysh Гик

    Попробуйте вот в этой части кода на примере ki1
    Код (C++):
         lcd.print("I=");
          lcd.print(ki1);
          lcd.print(" ");
    в третьей строчке поставить в кавычках 2 пробела вместо одного. Для ki2 действия аналогичные.
     
    SOLOway нравится это.