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

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

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

    bamik Нерд

    UNO R3, LCD2004
     
  2. SOLOway

    SOLOway Гуру

    bamik. Понятно. Я в выходные соберу то же самое и залью скетч от Roniks59.
    Надо попробовать...
    актуально может оказаться для мелких ардуинок - snmar4enko, кстати подметил, что без неё код меньше занимает. Только проблема с нехваткой выводов на платках...
    Может, кому полезным покажется, как настройку ПИД-коэффициентов на примере контроллера от LDZ (старые прошивки) расписАл vladimers:
    LDZ_vladimers_ired.ucoz.ru.jpg
     
    Последнее редактирование: 22 май 2018
  3. tssergej

    tssergej Нерд

    Убедили - действительно грустно, но так хочется чтобы было нетолько функционально, но и информативно и красиво.
    Кстати по поводу этого
    Я загружал ваш код на свою железку, но оно у меня не заработало, так как , а у вас как выяснилось позже псевдокнопки.
     
  4. bamik

    bamik Нерд

    Почитал я по max6675. Можно сказать, что существует одна библиотека для работы с ней. И этот множитель 0.25 появляется только для того, чтобы показать нам температуру в градусах в том виде, к которому мы привыкли. Если немного подправить библиотеку для наших нужд, то получим целочисленное значение, которое в 4 раза больше значения температуры. Библиотека маленькая. Можно просто ее код в наш перенести.
     
  5. Dmitrysh

    Dmitrysh Гуру

    У меня обычные кнопки, Скетч sketch_TFT-320x480_dimer_V3-2 от
    vector99. Под себя немного доработал.
     
  6. Dmitrysh

    Dmitrysh Гуру

    Я пробовал такой подход, получается ошибка округления 0,25-0,5 градуса. Как оказалось эти "копеечки" позволяют более точно регулировать температуру. Время выполнения кода на получение температуры(по результатам моделирования) 403микросекунды для плавающей точки против 396микросекунд для целочисленного.
    Ну если кому надо то перепишите так
    Код (C++):
    return ((temp>>5));
     
  7. Dmitrysh

    Dmitrysh Гуру

    Я так и сделал, код есть выше.
     
  8. bamik

    bamik Нерд

    Можно просто на 0.25 не умножать. А использовать целочисленное значение. Только при выводе на экран преобразовывать.
     
  9. SOLOway

    SOLOway Гуру

    А мы можем ПИД в наших контролерах подстроить по методике из файла? У нас ПИД-регулятора два, да еще в их работу вмешиваемся установкой различных длительностей шагов и скоростей роста температуры...
    Если максимальные мощности ВИ и НИ привязаны только к используемому железу (грелкам) и после настройки станции мы их уже не трогаем (до перехода на другие грелки), то kP. kI. kD как? Как скорость нарастания температуры мы объясняем ПИД-у, задача которого в достижении уставки и точном её удержании невзирая ни на какое время? Я запутался :(
     

    Вложения:

  10. Нафаня

    Нафаня Нерд

  11. SOLOway

    SOLOway Гуру

    Это я видел. Тоже и в моем посте. Вопрос как раз в том, что у нас есть выбор скорости роста температуры, а как ЭТО связать с работой ПИД?
     
  12. Dmitrysh

    Dmitrysh Гуру

    По сути самое главное чтобы верх отрабатывал точно, а от низа надо плавный разогрев(это мы ограничением мощности добиваемся если мощность нагревателя "крутая") и отсутствие "болтанки" температуры.
    Эти коэффициенты тоже привязаны к железу и тоже настраиваются один раз.
    А вот эта задача самая сложная. Её нужно решать используя два подхода: ограничение мощности нагревателя и ступенчатая подача задания.
     
  13. Dmitrysh

    Dmitrysh Гуру

    Что то мне подсказывает что выигрыша не будет.
     
  14. bamik

    bamik Нерд

    Ну, если опрашивается 10 раз в секунду, не реже, а выводить на экран достаточно 1 раз в секунду, то уже прирост есть. Теоретически и вывод на экран можно организовать целочисленным. Достаточно старшие разряды выводить отдельно от младших 2х, и ставить между ними точку принудительно. А с другой стороны, что нам даст на экране точность в 0,25 градуса? Ничего. Потому можно выводить только целую старшую часть.
     
  15. Dmitrysh

    Dmitrysh Гуру

    Дак оно сейчас так и есть.
    Ничего не даст, нам достаточно температуры в целых числах, а вот в ПИД надо полностью загонять, практика показала, что очень сильно он дробную часть "любит".
    А в скетче это сделано так
    Код (C++):
    int tc1 = double Input1
    и выводим на экран tc1. И как бы делать ничего не надо.
     
  16. bamik

    bamik Нерд

    Я как бы плавно подвожу к целочисленному ПИДу… ПИД будет получать температуру с максимальной точностью.
     
  17. Dmitrysh

    Dmitrysh Гуру

    У нас ещё фильтр Калмана остался, который не целочисленный.
     
    SOLOway нравится это.
  18. SOLOway

    SOLOway Гуру

    Ну, да, неверно составил фразу в спешке :)
    А, вот, как мог-бы выглядеть алгоритм, описываемый следующим образом: "...время T1 - время прогрева платы, т.е. температура 120* будет достигнута за 6 минут, программа автоматически перед началом пайки высчитывает скорость нарастания х*С/мин. и тем самым обеспечивает плавный прогрев..."? (Там еще и полки задаются и контроллер на паузу может становиться, если нагреватели не успевают выполнять профиль... Но сейчас мне важнее ответ на вопрос выше) Это не очень смахивает на ПИД...
     
  19. Dmitrysh

    Dmitrysh Гуру

    Я бы сделал так. Составляются таблицы прогона нагревателя на тестовой плате через 10% мощности. Получаем зависимость роста температуры от мощности. Эти таблицы будут нелинейными функциями,поэтому мы возьмем из них только начальные значения роста температуры допустим градусов до 50. Получим примерное соответствие мощности и роста температуры.
    Когда мы ставим плату на разогрев мы выбираем соответствующую мощность нагревателя и по мере разогрева платы контролируем скорость роста температуры через интервал допустим 10 измерений температуры. Если скорость роста температуры отстает добавляем мощность, если опережает - убавляем. При приближении к уставке до, допустим, 10 градусов включаем ПИД и он заканчивает работу сам.
     
  20. Dmitrysh

    Dmitrysh Гуру

    Можно и без таблиц, но тогда нужно в начале вычислить мощность соответствующую скорости нагрева. На это уйдет некоторое время. На инерционных нагревателях значительное. Это классический ПИД с ограничением по мощности с предварительным расчетом начальной точки.
     
    Последнее редактирование: 23 май 2018
Статус темы:
Закрыта.