Почему MPC лучше, чем PID для 3D-принтеров, и почему он более полезен для «мощных нагревателей»?

marlin temperature pid mriscoc mpc

Видео YouTube 'PID vs MPC' от Mark Misin Engineering Ltd прекрасно демонстрирует, что управление температурой с прогнозированием по модели (MPC) более эффективно, чем пропорционально-интегрально-дифференциальное (PID). Marlin реализовал MPC, как описано в документации Marlin по MPC. Версия прошивки на основе Marlin, которую я использую, также описывает MPC в документации mriscoc по MPC и выглядит следующим образом:

В последних выпусках MPC включен во все версии. MPC оказался лучшим алгоритмом для поддержания стабильной температуры сопла, а также очень полезен для мощных нагревателей.
Источник: репозиторий GitHub mriscoc для Ender 3 V2/S1

Поскольку 3D-принтеры, особенно нагреваемые части (стол и сопло), относительно просты, с простым управлением и показаниями датчиков, почему именно MPC является лучшим выбором, чем PID? И почему он более полезен для «мощных нагревателей»?

, 👍2


1 ответ


Лучший ответ:

2

Короткий ответ

PID реагирует только после регистрации датчиком изменений температуры. MPC вместо этого вычисляет ожидаемую потерю тепла до фактического изменения температуры, а затем применяет тепло для предотвращения этих изменений.

Вот график, сравнивающий PID и MPC, созданный пользователем Reddit yelleck:

<img src="https://i.stack.imgur.com/lFpq2.png" alt="График, показывающий сравнение регулирования температуры между ПИД и MPC" title="График, показывающий сравнение регулирования температуры между ПИД и MPC">

Слегка уничижительный ответ

ПИД и его модификации1 — это решение проблемы регулирования температуры горячего конца с помощью клейкой ленты2, а MPC — это инженерно-кандидатское решение.

Ответ немного длиннее

MPC — это прогностическая модель, которая компенсирует до того, как температура действительно изменится. Она вычисляет физическую тепловую модель (фактически Цепь теплового сопротивления). Используя это, он вычисляет, сколько тепловой энергии (в Джоулях) покинет хотэнд за заданное время — посредством излучения, конвекции и экструдированного расплавленного пластика — и, таким образом, он точно знает, сколько тепловой энергии (опять же в Джоулях, или «Ваттах, умноженных на Секунды») ему нужно вложить, чтобы сохранить температуру прежней или перейти на новую температуру. Свойства этой физической модели (теплоемкость, излучательная способность и т. д.) можно получить автоматически с достаточно хорошей точностью или посмотреть в таблице (теплоемкость нити накала на мм).

С другой стороны, ПИД — это реактивная модель, которая может работать только после того, как температура уже изменилась. Она больше похожа на бдительного оператора, который смотрит только на измеренную разницу между фактической и желаемой температурой. Если эта разница температур изменится всего на немного или на большой шаг, она немедленно попытается противодействовать этой ошибке, применяя свои три правила: P, I и D.

Три коэффициента ПИД также можно настроить автоматически, но результаты... ну, предположим, есть причина, по которой существуют десятки, если не сотни руководств по настройке ПИД и вопросов на форумах. Коэффициенты не связаны с какими-либо определенными физическими свойствами вашего хотэнда: геометрия, вентилятор, мощность нагревателя, силиконовый носок и нить накала — все это смешано в три абстрактных числа. До сих пор я несколько раз пытался получить глубокое, интуитивное понимание поведения и настройки ПИД, но каждый раз терпел неудачу, и, честно говоря, я больше не считаю это стоящим своего времени. MPC просто имеет гораздо больше смысла.

ПИД-регулятор не знает и не заботится о том, почему изменилась разница температур. Это может быть связано, например, с более высокой скоростью экструзии, включением вентилятора или изменением заданного значения температуры (M104). ПИД-регулятор должен реагировать на любые изменения, используя ту же жесткую систему из трех правил1, хотя на практике эти три ситуации потребуют разных реакций. Модель MPC, с другой стороны, может точно определить, насколько каждое из этих изменений повлияет на температуру и как она должна реагировать, чтобы предотвратить это.

Таким образом, в системе на основе ПИД температура всегда будет немного колебаться по замыслу. Ей нужны эти изменения температуры, чтобы знать, как реагировать (если только вы не предполагаете полностью статическую ситуацию), потому что это единственное измерение, которое у нее есть. Следовательно, шумное измерение температуры, которое выглядит как множество крошечных, очень быстрых изменений, заставит ПИД-регулятор реагировать на них, что приведет к еще более заметным колебаниям, потому что система реагирует на изменение, которого на самом деле нет, поскольку это просто шум. В качестве альтернативы вы можете заставить ее реагировать медленнее, чтобы игнорировать эти быстрые шумовые колебания, но это сделает ее... ну... медленнее.

И почему это более полезно для «мощных нагревателей»?

Как объяснялось выше, ПИД-регулятор должен реагировать на шум. С нагревателем высокой мощности даже небольшая корректировка ШИМ может привести к значительному повышению температуры. Поэтому контроллер должен реагировать медленнее и осторожнее, чтобы не перегреться или не колебаться. Но, двигаясь медленнее, вы теряете главное преимущество вашего нагревателя высокой мощности, а именно: более быстрый нагрев. Поскольку MPC в значительной степени игнорирует шум, он не будет колебаться. И поскольку он знает мощность вашего нагревателя в ваттах и точное количество необходимой энергии в джоулях, он может просто включить «полный газ», когда требуется более высокая температура3, останавливаясь как раз вовремя, чтобы избежать перегрева. С нагревателем меньшей мощности эта проблема не так очевидна, потому что он может работать только медленно в любом случае.


1 Да, в Marlin есть PID_FUNCTIONAL_RANGE, PID_EXTRUSION_SCALING и PID_FAN_SCALING для решения этих проблем. Это хакерские, специальные решения, которые пытаются сделать то же самое, что и MPC, но без правильной и полной физической модели под ними. Это скорее похоже на добавление еще больше клейкой ленты к проблеме вместо того, чтобы отступить назад, понять ситуацию и разработать правильное решение. Кроме того, каждая из этих функций имеет свои собственные параметры конфигурации, которые требуют отдельной настройки, в то время как автонастройка в MPC может позаботиться обо всех из них вместе (за исключением теплоемкости нити накала, которую вы можете найти или рассчитать с помощью физики). Так что если вы рассматриваете возможность использования этих дополнительных функций PID, вы по сути используете MPC, но без прочной теоретической основы, так что вы можете пойти до конца и просто использовать MPC вместо этого.

2 Не поймите меня неправильно: ПИД-регулирование — это гибкий и хорошо зарекомендовавший себя инструмент, который подходит для множества различных задач везде и всюду. Как изолента. Но это не лучший инструмент для каждой работы. Хорошо настроенный ПИД-регулирование может контролировать температуру хотэнда в пределах нескольких градусов с небольшим превышением. Он просто не был специально разработан для этого случая, и поэтому уступает инструментам, которые были.

3 Marlin PID пытается сделать то же самое с PID_FUNCTIONAL_RANGE: он выходит на полную мощность, когда разница температур больше, чем это настроенное значение. Но с мощным нагревателем это дополнительное значение, которое вам нужно настроить. И после того, как ПИД включится, ему нужно некоторое время, чтобы «раскрутиться», что является еще одним временем, в течение которого нагреватель не использует весь свой потенциал. Кроме того, коэффициенты ПИД должны быть настроены для разных, частично противоречивых целей: быстрого нагрева, избежания перерегулирования и избежания колебаний. Опять же, все это свалено в три абстрактных числа, не имеющих физического смысла.


,