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

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

  1. SOLOway

    SOLOway Гик

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

    Dmitrysh Гик

    Я видел этот проект. ПИД как у нас, та же библиотека. Выход релейный - нам не подходит, ну может на SSR прицепить можно. Там есть библиотека автонастройки, я её пробовал, у меня не пошла, я её неделю разбирал и пробовал, короче без толку, замануха какая-то. Код написан достаточно сложно и специфически, симуляцию зацепили зачем-то. Софт вроде как на яве писаный, по идее кроссплатформенный, можно типа на планшет зацепить, только зачем. Из полезного есть библиотека под аналоговые кнопки.
     
  3. Dmitrysh

    Dmitrysh Гик

    Обнаружил немного кривую конструкцию в наших скетчах. Есть такой кусок кода
    Код (C++):
          if (millis() > nextRead1)
          {
            nextRead1 += SENSOR_SAMPLING_TIME;
    Это для чтения температуры, а есть похожее и для ПИД, если библиотека переписана.
    Так вот, пока эта конструкция выполняется периодически проблем не возникает, только в момент начальной инициализации есть затык. А вот когда мы, например, заходим в настройки, то происходит следующее. Таймер millis убегает достаточно далеко, а переменная nextRead1 остаётся на месте. После выхода из настройки получаем очень долго правдивое условие (millis() > nextRead1). Т.о получается постоянное, непрерывное чтение термопары, а не с периодом SENSOR_SAMPLING_TIME. А это чревато начиная мусором при чтении и заканчивая торможением при выполнении профиля. Я предлагаю такую конструкцию:
    Код (C++):
    if (millis() > nextRead1)
          {
            nextRead1 =millis()+ SENSOR_SAMPLING_TIME;
     
  4. revolover

    revolover Гик

    Может быть лучше в настройки засунуть дополнительно:
    if (millis() > nextRead1)
    {
    nextRead1 += SENSOR_SAMPLING_TIME;
    [/code]
     
  5. revolover

    revolover Гик

    По автонастройке ПИД, это реально, но вручную можно настроить точнее. Прикручивать к проекту незачем, можно сделать отдельный скетч и получить параметры.
    http://playground.arduino.cc/Code/PIDAutotuneLibrary
    Как работает http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library/
    берем библиотеку ПИД, автотюн, прикручиваем свой код вывода мощности, термопары, пишем результат в порт - вуаля!
     
  6. revolover

    revolover Гик

    Вот только скетч что я использую, в таком виде как он был - никаким автотюном не настроить! Его просто невозможно было бы настроить и всё тут. Если у вас так же в коде - рекомендую привести его в порядок для начала. Потом можно улучшать, а потом уже настраивать.
     
  7. revolover

    revolover Гик

    А разве эта конструкция не в loop() ?
    Я совокупность всего имел ввиду.
    Как по мне, так медленный не экран, а его библиотека для ардуины тяжела.
    И странно, что столь долгое выполнение, напихал в вывод на экран кучу все еще и субъективно разницы не заметил...
    И для диммера, если ПИД выполняется значительно быстрее 10мс, то можно пихать в прерывание.
    А вообще, раз в секунду - две ПИД считать, и пусть экран тормозит ничего страшного. нам не фильмы на нем смотреть)))
     
  8. Dmitrysh

    Dmitrysh Гик

    А смысл в настройках читать сенсор, если он не выводится там?
    Вот и у меня не получилось.
    Эта библиотека не работает.
     
  9. revolover

    revolover Гик

    Не сенсор, а только переменную времени обновлять, чтоб не отставала.
    Работает, речь о том, что в скетче ПИД используется неправильно, из-за этого он не настроится ни автоматом, ни вручную.
     
  10. revolover

    revolover Гик

    Кстати прикрутил serial port plotter, (дел на 1 минуту) полет нормальный, удобен, но нужно доработать, особенно значения по умолччнию, и можно даже их настройку убрать...
     
  11. Dmitrysh

    Dmitrysh Гик

    И да и нет. В loop у нас всё, но не всё выполняется одновременно. У нас машина состояний и выполняется только то состояние которое активно плюс критическая секция, если включен режим пайки.
    Так это только 2 цифры выводятся. Если выводить больше, то ещё дольше будет.
    Ну мой ПИД быстрее 10мс, а смысл его в прерывании считать, если мы температуру получаем 1 раз в 220(это по даташиту мах6675) милисекунд?
    На это я очень сильно надеюсь. Наш ПИД может легко считаться 4 раза в секунду, при этом получая реальную температуру с мах6675 и ещё немного времени(около 100мс) останется на ещё что нибудь.
     
  12. revolover

    revolover Гик

    У меня сейчас дополнительно выводятся три составляющие пид (дробные), десятые и сотые доли градуса, мощность (дробная) и строится график мощности. Всё это и для верха и для низа одновременно. Субъективно медленнее не стало.
    Нам его не нужно 100 раз в секунду выполнять, ставим в прерывание счетчик от 1 до 100, условие выполнить пид при 100 и сброс счетчика, вот выполнение раз в секунду, зато гарантированно одинаковый период, зависящий только от стабильности синусоиды в сети, а не от экранов и датчиков.
     
  13. revolover

    revolover Гик

    [​IMG]
     
    tssergej, SOLOway и Dmitrysh нравится это.
  14. revolover

    revolover Гик

    Может проблема в SevenSegNumFont ?
     
  15. revolover

    revolover Гик

    Сейчас еще добавил в процессе пайки подстройку I составляющей кнопками UP и DOWN, кнопкой OK выполняется переключение между корректировкой верха и низа и подсвечивается соответствующий символ "I"
     
  16. revolover

    revolover Гик

    Если я всех "устал" скажите - не буду вас тревожить и тыкать в косяки, буду молча сам себе делать...
     
  17. Yojiq

    Yojiq Нерд

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

    revolover Гик

    СПС! Но я справляюсь, пишу не для себя, а для вас. Если не нужны мои советы, которые идут вразрез с мнением большинства, то не буду зря клаву топтать)))
     
  19. Yojiq

    Yojiq Нерд

    я премного благодарен за ваш труд !
    Научиться можно всему и программированию также, к сожалению нет возможности, время сильно быстротечно.
     
  20. Dmitrysh

    Dmitrysh Гик

    Это потому у вас опрос ПИД 1сек.
    Выложите хотя-бы часть кода, где это все выводится, что-бы люди не делали лишнюю работу.
    Хорошая идея, надо попробовать.
    Посмотрю.
    Мы только и ждем хороших вестей с фронта, так что все нормально.
    Если бы у вех было одно мнение, нихрена бы мы не написали. А большенство может и ошибаться, поэтому не стесняйтесь и высказывайтесь.