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

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

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

    Dmitrysh Гуру

    И у меня по-началу были.
    Не факт.
    Не может она не правильные данные давать. Она либо даёт, либо не даёт(в ошибке).
    Сейчас будем искать.
    Не оригинальные почти 100%, отбраковка маловероятно ибо дешёвая.

    Теперь я расскажу свою версию проблем с мах6675.
    1. Плохое питание. Для стабильной работы мах6675 питание для неё тоже должно быть стабильное, без помех, наводок и т.д. В микросхеме есть чувствительный усилитель и АЦП, поэтому чем стабильнее питание микросхемы, тем меньше вероятность сбоев. Надо по питанию вешать электролит и шунтировать его керамикой плюс ферритовое колечко будет не лишним.
    2. Для тех, кто использует стандартную библиотеку мах6675 могу сказать что там есть ошибка. А именно, согласно даташиту чтение из микросхемы необходимо производить при спадающем сигнале clk(т.е при переходе 1->0), а в библиотеке наоборот. Вот этот код
    Код (C++):
    digitalWrite(sclk, LOW);
        _delay_ms(1);
        if (digitalRead(miso)) {
          //set the bit to 0 no matter what
          d |= (1 << i);
        }

        digitalWrite(sclk, HIGH);
    Может быть из-за такой реализации, кстати, Proteus не хочет правильно моделировать мах6675, ибо мою реализацию он "переваривает" нормально.
    3. Плохие термопары. Не секрет, что китайцы не особо заморачиваются с дешёвыми термопарами, и спай делают абы-как. Бывает, что в спае каверны или флюс и если спай переделать, то термопара очень даже хорошо работает. Бывают случаи и "неправильных" термопар, т.е не тип К, а какой нибудь другой. Бывает плохой контакт термопары в колодочке(желтенькая такая) или в зажиме. Паять термопару не рекомендуется - только обжимка или под болтик.
    4. Проблемы со скетчем. Зачастую бывает, что в скетче(по разным причинам) чтение из мах6675 происходит чаще, чем рекомендует даташит(быстрее чем раз в 220мс). Тогда возникают проблемы с преобразованием в микросхеме и она впадает в ошибку. Эта ошибка часто связана с работой со временем функцией millis(). Я описывал несколько случаев таких ошибок, будьте внимательными.

    От себя могу дополнить, что проблемы с отвалом термопары уже давно не встречаю. За последние пол-года ни разу ничего не отвалилось.
     
    Yojiq и SOLOway нравится это.
  2. Dmitrysh

    Dmitrysh Гуру

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

    Dmitrysh Гуру

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

    Нафаня Нерд

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

    Dmitrysh Гуру

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

    SOLOway Гуру

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

    Вложения:

  7. CLON2

    CLON2 Нерд

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

    SOLOway Гуру

  9. SOLOway

    SOLOway Гуру

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

    SOLOway Гуру

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

    Вложения:

    Последнее редактирование: 6 окт 2019
  11. 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мс)
    Желательно вернуть фильтрацию, хотя бы как я советовал несколько постов назад.
     
    Yurik-o, buivol135 и SOLOway нравится это.
  12. Watashi

    Watashi Гуру

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

    SOLOway Гуру

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

    SOLOway Гуру

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

    Вложения:

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

    Dmitrysh Гуру

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

    Dmitrysh Гуру

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

    Dmitrysh Гуру

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

    Dmitrysh Гуру

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

    SOLOway Гуру

    Нихрена не получилось корректно графики выводить на ПК с этим скетчем ( #2014 ) - в логе heater видно, что rx/tx регулярно чем-то заняты, и что прорвалось в ПК в свободный момент, то и отобразилось. Не хочу им заниматься - у меня еще пост #1619 не допилен.
     
    Последнее редактирование: 6 окт 2019
    Probe2005klm нравится это.
  20. 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 КБ
      Просмотров:
      309
    Последнее редактирование: 27 янв 2019
Статус темы:
Закрыта.