# Настройка PID регуляторов
В этой статье описаны методы и основные технологии настройки каскадного ПИД-регулятора. Приведенные советы и методики подходят для любых видов рам (Квадрокоптеров, Гексакоптеров, Октокоптеров и т.д.).
Усредненные рекомендованные настройки для комплектов Клевер приведены в статье "Первоначальная настройка".
Эта статья только для продвинутых пользователей. Плохая или неполная настройка ПИД регуляторов может привести к сильным поломкам вашего дрона.
# Введение
В PX4 используются Пропорционально-Интегрально-Дифференцирующий (ПИД) регулятор, являющийся одним из самых распространенных методов управления.
Регулятор реализованный в PX4 является каскадным. Это подразумевает, что он состоит из нескольких элементов, которые по очереди (каскадно) передают свои значения элементам находящимся ниже. Соответственно регуляторы более высокого уровня передает свой результат регулятору более низкого уровня.
Регулятор самого низкого уровня, это регулятор угловых скоростей, далее регулятор положения и последние, регуляторы скорости и позиции. Настройка ПИД-регулятора должна выполняться в том же порядке, начиная с регулятора угловой скорости, поскольку это повлияет на все остальные уровни.
# Шаги настройки
В случае, если у вас нет опыта настройки ПИД регуляторов, придерживайтесь представленных ниже особенностей настройки.
- Все изменения значений регулятора должны быть постепенными, в противном случае могут появится сильные осцилляции и вы совершенно потеряете контроль над аппаратом. Увеличивайте значения регулятора не более чем на 25-30% от настоящего значения, уменьшайте на 5-10% до окончательной настройки.
- Сажайте аппарат перед следующей итерацией смены коэффициентов. Перед следующим взлетом очень медленно увеличивайте стик газа для проверки аппарата на сильные осцилляции.
# Регулятор угловых скоростей
Регулятор угловых скоростей является самым низкоуровневым в каскаде, он состоит из трех независимых ПИД-регуляторов, управляющих угловыми скоростями коптера по трем осям (крен, тангаж, рысканье).
- Регулятор угловых скоростей по крену ( MC_ROLLRATE_P , MC_ROLLRATE_I , MC_ROLLRATE_D )
- Регулятор угловых скоростей по тангажу ( MC_PITCHRATE_P , MC_PITCHRATE_I , MC_PITCHRATE_D )
- Регулятор угловых скоростей по рысканью ( MC_YAWRATE_P , MC_YAWRATE_I , MC_YAWRATE_D )
Хорошая настройка коэффициентов регулятора угловых скоростей очень важна и влияет на все режимы полета. В то время как плохая настройка регуляторов будет заметна во всех режимах полета, к примеру в режиме Position вы можете видеть подергивания во время зависания аппарата.
Регулятор угловых угловых скоростей можно настраивать как в режиме ACRO, так и в режиме STABILIZED.
Предпочтительнее настраивать регуляторы в режиме ACRO, поскольку вам будет легче визуально заметить произведенные изменения коэффициентов. Если вы собираетесь использовать этот режим отключите Expo-параметры и снизьте чувствительность стиков для облегчения управления.
- MC_ACRO_EXPO = 0, MC_ACRO_EXPO_Y = 0, MC_ACRO_SUPEXPO = 0, MC_ACRO_SUPEXPOY = 0
- MC_ACRO_P_MAX = 200, MC_ACRO_R_MAX = 200
- MC_ACRO_Y_MAX = 100
Режим STABILIZED легче для управления но также в нем вам будет сложнее заметить изменения поведения вашего аппарата при настройке коэффициентов.
Если ваш аппарат вообще не летает обратите внимание на две основные вещи:
- Если вы видите сильные осцилляции при попытке взлета, уменьшайте все коэффициенты P и D до тех пор, пока аппарат не поднимется в воздух.
- С другой стороны, если аппарат почти не реагирует на управление передаваемое с пульта, увеличивайте коэффициент P.
Концепция настройки регуляторов одинакова как в режиме STABILIZED, так и в режиме ACRO. Итеративно с указанным шагом настраиваете коэффициенты P и D для крена и тангажа, а затем изменяете I. Первоначально вы можете использовать одинаковые значения для крена, когда регуляторы настроены достаточно хорошо вы можете точно донастроить их по крену и тангажу отдельно (если ваш аппарат симметричен, можете оставить коэффициенты одинаковыми). Идея настройки регулятора рыскания идентична настройке крена и тангажа, за исключением того, что коэффициент D может оставаться нулевым.
# Настройка коэффициента P
Коэффициент P (пропорциональный) используется для минимизации ошибки отслеживания и отвечает за скорость отклика, по этому должен быть установлен как можно выше, но без осцилляций.
При настройке коэффициента P пользуйтесь двумя основными наблюдениями:
- Если P слишком большой: вы увидите высокочастотные осцилляции.
- Если P слишком маленький:
- Аппарат медленно реагирует на входящее управление
- В режиме ACRO аппарат будет постоянно дрейфовать и вам нужно будет его корректировать, чтобы сохранить его уровень.
# Настройка коэффициента D
Коэффициент D (дифференциальный) используется для демпфирования. Этот коэффициент должен быть как можно выше, но таким образом, что бы не было "перестрелов" по управлению.
При настройке коэффициента D пользуйтесь двумя основными наблюдениями:
- Если D слишком большой: моторы могут подергиваться и сильно нагреваться во время полета, поскольку коэффициент D увеличивает шумы управления.
- Если D слишком маленький: возникнут "перестрелы" по входящему управляющему сигналу.
# Настройка коэффициента I
Коэффициент I сохраняет "воспоминания" об ошибке. Это значит, что элемент I увеличивается в случае, если желаемая скорость не устанавливается в течении некоторого времени. Этот параметр важен для режима ACRO, а также оказывает достаточно сильное влияние на режимы POSITION и OFFBOARD.
- Если I слишком большой: вы можете увидеть медленные осцилляции
- Если I слишком маленький: можно заметить ошибку по выполнению управляющего воздействия. Также заниженный коэффициент I заметен на логах, это характеризуется тем, что на графиках желаемая скорость длительное время отличается от фактической.
# Процедура тестирования
После изменения коэффициентов регулятора, для того, чтобы протестировать новые значения, подайте на вход аппарата быстрый ступенчатый ввод. Для этого быстро наклоните стик радиоаппаратуры в сторону, при этом коптер точно должен выполнять переданное управление, без осцилляций и "перестреливания". Поскольку обычно стики радиоаппаратуры подпружинены, в случае если их отпустить, они начинают колебаться, хорошо настроенный аппарат будет колебаться вместе со стиком.
# Конфигурация логгера
Для получения более полной информации с графиков вы можете настроить логгер удобным вам образом. Для его настройки вы можете пользоваться параметрами:
- SDLOG_PROFILE — включение большого количества функций приводит к увеличению размера файла лога, а также к увеличению требований по скорости записи, перед начало работой убедитесь, что используете накопитель с достаточной пропускной способностью.
- default set — запись общих логов системы
- estimator replay (EKF2) — более подробное логирование при использовании EKF2
- thermal calibration — высокочастотные данные с IMU и барометра
- system identification — высокочастотные данные приводов и IMU
- high rate — высокочастотные данные радио, угловых скоростей и приводов
- debug — для записи пользовательских отладочных топиков
- sensor comparison — низкочастотные данные IMU, барометра и компаса, для сравнения показаний датчиков
- SDLOG_MODE
- when armed until disarm — лог записывается с момента арма коптера, до момента дизарма коптера
- from boot until disarm — лог записывается с момента запуска системы, до момента дизарма коптера
- from boot until shutdown — лог записывается с момента запуска системы, до момента выключения системы
# Анализ логов
Настройка параметров с использованием логов сильно сложнее чем визуальная настройка и при неправильных действиях вы можете ухудшить качество полета вашего коптера.
Просмотр логов сильно помогает в настройке и позволяет более точно оценивать качество произведенной настройки.
Среди представленных графиков, больше всего вам могут понадобиться:
- Roll/Pitch/Yaw Angular Rate — графики угловых скоростей
- Roll/Pitch/Yaw Angle — графики углов наклона
- Local Position X/Y/Z — позиция вашего коптера в пространстве
- Step Response for Roll/Pitch/Yaw Rate — отклик коптера на входящее управление
Ниже представлены графики угловых скоростей и углов при хороших настройках регулятора.
На графиках красной линией отмечено рассчитанное значение, а зеленой требуемое.
Качество настройки характеризуется тем, что рассчитанное значение должно быть максимально близким к требуемому. Если оба графика совпадают, это значит, что ваш коптер точно выполняет все переданные ему команды, если же графики сильно отличаются, во время полета вы заметите, что коптер неправильно выполняет ваши команды управления.
# Регулятор положения
Данный регулятор является вторым уровнем каскада и настраивается после регуляторов угловых скоростей. Он отвечает за угол наклона коптера и настраивается с помощью параметров:
- Регулятор угла по крену ( MC_ROLL_P ).
- Регулятор угла по тангажу ( MC_PITCH_P ).
- Регулятор угла по рысканью ( MC_YAW_P ).
В данном регуляторе настраиваемыми являются только пропорциональные значения и в большинстве случаев их стоит оставить со стандартными значениями.
Идея настройки данных параметров точно такая же, как и настройки P параметров регуляторов угловых скоростей. При высокочастотных осцилляциях уменьшите значение, пре медленном выполнение команды увеличьте его.
Настройка ПИД-регулятора
В данной статье приведены основные принципы и правила настройки коэффициентов ПИД-регулятора сточки зрения практического применения. Теоретические основы можно прочитать вот в этой статье .
Для простоты изложения рассмотрим настройку регулятора на примере. Допустим, необходимо поддерживать температуру в помещении с помощью обогревателя, управляемого регулятором. Для измерения текущей температуры используем термопару.
Задача настройки
Настройка регулятора производится с одной единственной целью: подобрать его коэффициенты для данной задачи таким образом, чтобы регулятор поддерживал величину физического параметра на заданном уровне. В нашем примере физическая величина — это температура.
Допустим текущая температура в помещении 10 °С, а мы хотим, чтобы было 25°С. Мы включаем регулятор и он начинает управлять мощностью обогревателя таким образом, чтобы температура достигла требуемого уровня. Посмотрим как это может выглядеть.
На данном рисунке красным цветом показана идеальная кривая изменения температуры в помещении при работе регулятора. Физическая величина плавно, без скачков, но в тоже время достаточно быстро подходит к заданному значению. Оптимальное время, за которое температура может достигнуть заданной отметки, определить довольно сложно. Оно зависит от многих параметров: размеров комнаты, мощности обогревателя и др. В теории это время можно рассчитать, но на практике чаще всего это определяется экспериментально.
Чёрным цветом показан график изменения температуры в том случае, если коэффициенты подобраны совсем плохо. Система теряет устойчивость. Регулятор при этом идёт «в разнос» и температура «уходит» от заданного значения.
Рассмотрим более благоприятные случаи.
На этом рисунке показаны графики, далёкие от идеального. В первом случае наблюдается сильное перерегулирование: температура слишком долго «скачет» относительно уставки, прежде чем достичь её. Во втором случае регулирование происходит плавно, но слишком медленно.
А вот и приемлемые кривые:
Данные кривые тоже не идеальны, но могут быть сочтены за удовлетворительные.
В процессе настройки регулятора, пользователю необходимо стремиться получить кривую, близкую к идеальной. Однако, в реальных условиях сделать это не так-то просто — приходится долго и мучительно подбирать коэффициенты. Поэтому зачастую останавливаются на «приемлемой» кривой регулирования. Например, в нашем примере нас могли бы устроить коэффициенты регулятора, при которых заданная температура достигалась бы за 15-20 минут с максимальным перерегулированием (максимальными «скачками» температуры) 2 °С. А вот время достижение уставки более часа и максимальные «скачки» температуры 5 °С — нас бы не устроили.
Далее поговорим о том, как подобрать коэффициенты для достижения оптимального регулирования. Рекомендуется настраивать коэффициенты в том же порядке, в котором это описано.
Настраиваем пропорциональный коэффициент
Выставляем дифференциальный и интегральный коэффициенты в ноль, тем самым убирая соответствующие составляющие. Пропорциональный коэффициент выставляем в 1.
Далее нужно задать значение уставки температуры отличное от текущей и посмотреть, как регулятор будет менять мощность обогревателя, чтобы достичь заданного значения. Характер изменения можно отследить «визуально», если у вас получится мысленно представить этот график. Либо можно регистрировать в таблицу измеренное значение температуры каждые 5-10 секунд и по полученным значением построить график. Затем нужно проанализировать полученную зависимость в соответствии с рисунком:
При большом перерегулировании, необходимо уменьшать пропорциональный коэффициент, а если регулятор долго достигает уставки — увеличивать. Так убавляя-прибавляя коэффициент необходимо получить график регулирования как можно ближе к идеальному. Поскольку достичь идеала удастся вряд ли, лучше оставить небольшое перерегулирование (его можно будет скорректировать другими коэффициентами), чем длительное нарастание графика.
Настраиваем дифференциальный коэффициент
Постепенно увеличивая дифференциальную составляющую, необходимо добиться уменьшения или полного исчезновения «скачков» графика (перерегулирования) перед выходом на уставку. При этом кривая должна стать еще больше похожа на идеальную. Если слишком сильно завысить дифференциальный коэффициент, температура при выходе на уставку будет расти не плавно, а скачками (как показано на рисунке).
При появлении таких скачков необходимо прекратить увеличение дифференциального коэффициента.
Настраиваем интегральный коэффициент
При настройке двух предыдущих коэффициентов можно получить практически идеальную кривую регулирования или близкую к ней кривую, удовлетворяющую условиям задачи. Однако, как правило возникает так называемая «статическая ошибка». При этом в нашем примере температура стабилизируется не на заданном значении 25 °С, а на несколько меньшем значении. Дело в том, что если температура станет равной уставке (то есть разность текущей и заданной температур станет равна 0), то пропорциональная и дифференциальная составляющая будут равны нулю ( см. функцию преобразования ПИД-регулятора ). При этом мощность регулятора тоже станет равна 0 и он начнёт остывать.
Для того чтобы исключить этот эффект, используют интегральную составляющую. Её необходимо постепенно увеличивать до исчезновение статической ошибки. Однако, чрезмерное её увеличение тоже может привести к возникновению скачков температуры.
Заключение
Настройка ПИД-регулятора довольно сложный и трудоёмкий процесс. На практике достаточно тяжело достичь оптимального регулирования и зачастую в этом нет необходимости. Чаще всего достаточно добиться такого вида переходного процесса, который устроит пользователя в условиях текущей задачи.
Методы настройки ПИД-регулятора
ПИД-регулятор – устройство автоматического регулирования с обратной связью. Управляющий сигнал формируется по пропорционально-интегрально-дифференциальному закону, то есть воздействие представляет собой сумму трех составляющих разности входного сигнала и сигнала обратной связи:
- Пропорциональной.
- Интегральной.
- Дифференциальной (производной).
Структурная схема устройства и формулы каждой составляющей указаны на рисунке.
ПИД-регуляторы относятся к устройствам непрерывного действия, они получили самое широкое распространение в системах автоматического управления. Такие устройства обладают значительным быстродействием, реагируют на тенденции изменения ошибки, а также устойчивы к воздействию шумов.
Настройка ПИД-регулятора сводится к подбору величин 3 коэффициентов, так чтобы устройство поддерживало заданный параметр на определенном уровне.
Рассмотрим настройку ПИД-регулятора температуры. Допустим ее величина на данный момент 10 °С, а требуемое значение должно составлять 25°С.
На графике указаны 2 различных переходных процесса, возникающих при увеличении температуры. Расходящаяся кривая, указанная черным цветом, иллюстрирует работу ненастроенного регулятора. Контролируемая величина не принимает заданного значения, функция «идет вразнос».
Красным цветом указана «идеальная кривая», характеристика достаточно крута, что указывает на небольшое время отклика, величина быстро достигает значения 25°С и удерживается на этом уровне.
Настройка пропорционального коэффициента
Для подбора оптимальной пропорциональной составляющей выставляют нулевые значения интегрального и дифференциального коэффициента. Затем задают величину температуры, отличную от текущей.
Далее через равные промежутки времени вносят полученные переходные величины в таблицу и строят график.
При высоком перерегулировании как на кривой, показанной синим цветом, уменьшают пропорциональную составляющую, при медленном достижении нужного значения температуры, коэффициент увеличивают. Задача – приблизить график к «идеальной кривой», изображенной в красном цвете.
Настройка дифференциального коэффициента
После отладки пропорциональной составляющей настраивают дифференциальный коэффициент. Необходимо достичь отсутствия перерегулирования, которое отображается в виде скачков температуры выше заданного значения. Для этого дифференциальную составляющую плавно повышают.
При наличии скачков в диапазоне ниже верхнего заданного значения контролируемого параметра, дифференциальную составляющую уменьшают. При этом также стоит задача приближения фактического графика к «идеальной кривой».
Настройка интегрального коэффициента
После отладки пропорциональной и дифференциальной составляющей удается получить кривую, очень близкую к идеальной. Однако, температура при этом не достигает заданной величины и поддерживается на более низком значении.
Такое расхождение называют статической ошибкой. Чтобы ее исключить, настраивают интегральную составляющую. Коэффициент плавно увеличивают до исчезновения статической ошибки. При выявлении скачков значений величины контролируемого параметра, интегральную составляющую также плавно снижают.
На практике редко удается достичь настроек близких к идеальным. Любая система подвержена возмущениям извне, что делает невозможным достижение «идеальной кривой». Обычно ограничиваются настройкой, удовлетворяющей условия технологического процесса.
Настройка ПИД-регулятора в преобразователях частоты
Частотные преобразователи – устройства для изменения момента и скорости вращения электродвигателей переменного тока различной конструкции. Современные ПЧ комплектуются функциями ПИ и ПИД-регуляторами. Устройства широко применяют в автоматизированных электроприводах промышленного оборудования различного назначения.
Рассмотрим настройку ПИД-регулятора на примере частотного преобразователя «Данфосс» серии VLT® AutomationDrive FC 360.
ПИД регулятор
ПИД регулятор – один из самых распространенных автоматических регуляторов. Он настолько универсален, что применяется практически везде, где нужно автоматическое управление. Например температурой: специальные печи, холодильники, инкубаторы, паяльники, сопло и стол 3D принтера, ИК паяльные станции и прочее. Поддержание частоты оборотов мотора, например для станков. Всевозможные балансирующие штуки, гироскутеры, сигвеи, левитирующие магнитные платформы, и конечно же квадрокоптеры и самолёты с автопилотом. Это всё ПИД регулятор. Почему именно ПИД? Существуют и другие регуляторы, превосходящие ПИД по адаптивности к управляемой системе и стабильности, например линейно квадратичный. Но, чтобы грамотно синтезировать такой регулятор, нужно быть гораздо больше чем “семи пядей” во лбу, а настройка ПИД регулятора дело хоть и неприятное, но фактически очень простое и под силу любому, а сам ПИД регулятор универсален для почти любого процесса.
Система управления
Прежде чем переходить непосредственно к пиду, очень важно понять и запомнить несколько базовых понятий, из которых состоит автоматическая система. В первую очередь это регулятор, который всем заправляет и находится в центре системы. Регулятор в данном понимании – математический алгоритм или часть программы, которая крутится на микроконтроллере. Регулятор, как алгоритм, работает с обычными числами. Объект управления – это девайс, которым мы управляем, например печка или мотор. Для этого у нас есть управляющее устройство, например диммируемый тен или драйвер мотора. Управляющее устройство получает от регулятора управляющий сигнал, то есть конкретное число. Это может быть заполнение шим сигнала, от 0 до 255, а может быть угол поворота сервомашинки от 0 до 180, потому что регулятору без разницы чем управлять. В объекте управления у нас стоит датчик, с которого регулятор получает управляемую величину, то есть текущий сигнал с датчика. Это – обратная связь, которая и даёт возможность системе ирчно поддержать заданное значение. В случае с печкой это температура, а с мотором – частота оборотов. Ну и наконец регулятор получает установку (уставку), то есть число, к которому он должен привести текущее значение с датчика. Установка может задаваться каким угодно образом: крутилкой, ползунком, энкодером, кнопками, да хоть смской или голосовым вводом. Регулятору это неважно, для него это просто цифра. Задача регулятора состоит в том, чтобы сравнивать текущее значение с установкой и выдавать управляющий сигнал на управляющее устройство. То есть в программе это будет выглядеть условно так: регулятор получил установку, регулятор получил значение с датчика, регулятор выполнил вычисления и выдал нам управляющий сигнал, опять же число. Если это шим – мы его подаём через функцию генерации шим. Есть ещё один момент – регулятор должен делать расчёты и применять управляющий сигнал через равные промежутки времени, то есть с равным периодом или частотой. Эта частота называется частотой дискретизации системы, а период обозначается как dt, прямо как период интегрирования.
Под капотом у ПИД регулятора
ПИД регулятор состоит из трёх составляющих: пропорциональной P, интегрирующей I и дифференциирующей D, формируется просто как сумма трёх значений, умноженных каждая на свой коэффициент. Эта сумма после вычислений становится управляющим сигналом, который подаётся на управляющее устройство, обозначим его как out.
kP, kI и kD это и есть те самые коэффициенты, которые нужно настроить для работы ПИДа. Значения тут могут быть самые разные, от 0.001 то десятков и тысяч, это зависит от конкретной системы. Тут есть ещё один момент: любой коэффициент может быть равен нулю, и в таком случае обнуляется вся его компонента. То есть регулятор можно превратить в П, ПИ, ПД, и прочие сочетания. Разные системы требуют разного подхода, именно поэтому ПИД регулятор такой универсальный. В дальнейшем будем пользоваться следующими названиями переменных:
- out – выход с регулятора (управляющий сигнал)
- setpoint – установка (заданное значение)
- input – вход (значение с датчика)
- err – ошибка регулирования
- dt – период вычисления и регулирования
P составляющая
Пропорциональная составляющая предоставляет собой разность текущего значения с датчика и установки.
Данная разность называется ошибкой регулирования, то есть насколько далеко находится система от заданного значения. Получается чем больше ошибка, тем больше будет управляющий сигнал и тем быстрее система будет приводить управляемую величину к заданному значению. Коэффициент kP тут влияет роль усиления ошибки и настраивается вручную. Но в то же время, если система пришла к заданной величине, ошибка станет равной нулю, и управляющий сигнал тоже! Другими словами, п регулятор никогда не сможет привести к заданному значению, всегда будет некая ошибка. П составляющая является основной в ПИД регуляторе и так сказать тянет самую большую лямку, регулятор может неплохо работать только лишь на ней одной. P составляющая исправляет ошибку в текущий момент времени.
I составляющая
Интегральная составляющая просто суммирует в саму себя ту же самую ошибку, разность текущего и заданного значения, умноженную на период дискретизации системы, то есть на время, прошедшее с предыдущего расчёта dt – фактически берёт интеграл от ошибки по времени.
В самом регуляторе это ещё умножается на коэффициент kI, которым настраивается резкость данной составляющей. В интегральной составляющей буквально копится ошибка, что позволяет регулятору с течением времени полностью её устранить, то есть привести систему ровно к заданному значению с максимальной точностью. I составляющая исправляет прошлые, накопившиеся ошибки.
D составляющая
Дифференциальная составляющая представляет собой разность текущей и предыдущей ошибки, поделенную на время между измерениями, то есть на ту же dt, которая общий период регулятора. Иными словами – это производная от ошибки по времени.
Фактически D составляющая реагирует на изменение сигнала с датчика, и чем сильнее происходит это изменение, тем большее значение прибавляется к общей сумме. Иными словами, D позволяет компенсировать резкие изменения в системе и при правильной настройке предотвратить сильное перерегулирование и уменьшить раскачку. Коэффициент д позволяет настроить вес, или резкость данной компенсации, как и остальные коэффициенты регулируют свои составляющие. D составляющая в первую очередь нужна для быстрых систем, то есть для систем с резкими изменениями, такие как квадрокоптер или шпиндель станка под переменной нагрузкой. D составляющая исправляет возможные будущие ошибки, анализируя скорость.
Настройка регулятора
Для настройки регулятора нужно варьировать коэффициенты:
- При увеличении kP увеличивается скорость выхода на установленное значение, увеличивается управляющий сигнал. Чисто математически система не может прийти ровно к заданному значению, так как при приближении к установке П составляющая пропорционально уменьшается. При дальнейшем увеличении kP реальная система теряет устойчивость и начинаются колебания.
- При увеличении kI растёт скорость компенсации накопившейся ошибки, что позволяет вывести систему точно к заданному значению с течением времени. Если система медленная, а kI слишком большой – интегральная сумма сильно вырастет и произойдёт перерегулирование, которое может иметь характер незатухающих колебаний с большим периодом. Поэтому интегральную сумму в алгоритме регулятора часто ограничивают, чтобы она не могла увеличиваться и уменьшаться до бесконечности.
- При увеличении kD растёт стабильность системы, она не даёт системе меняться слишком быстро. В то же время kD может стать причиной неадекватного поведения системы и постоянных скачков управляющего сигнала, если значение с датчика шумит. На каждое резкое изменение сигнала с датчика Д составляющая будет реагировать изменением управляющего сигнала, поэтому сигнал с датчика нужно фильтровать (читай урок по фильтрам).
Вот так выглядит процесс стабилизации при изменении коэффициентов: Настройка регулятора – дело не очень простое. Начальные коэффициенты для подбора можно получить по следующему алгоритму: сначала выставляем все коэффициенты в 0. Плавно увеличиваем kP до появления незатухающих колебаний. Значение kP, при котором они появились, запишем и обозначим как kP1. Далее замеряем период колебаний системы в секундах, обозначим как T. Итоговые коэффициенты получим так:
- kP = 0.6 * kP1
- kI = kP / T * 2 * dt
- kD = kP * T / 8 / dt
Например, незатухающие колебания появились при kP 20, период колебаний составил 3 секунды. Период dt в системе будет 50 мс (0.05 с). Считаем:
- kP: 0.6*20=12
- kI: 12/3*2*0.05=0.4
- kD: 12*2/8/0.05=60
На полученных коэффициентах должны более-менее работать большинство систем, но не все. Также можно воспользоваться автоматическим тюнером коэффициентов, например два разных алгоритма встроены в библиотеку GyverPID.
Реализация на C++
Соединяя все рассмотренные выше уравнения, получим:
Это готовая функция, которая принимает значение с датчика, установку, три коэффициента и время, а также ограничение выхода с регулятора. Как пользоваться этой функцией: функция должна вызываться с некоторым периодом, причем длительность этого периода нужно будет передать в функцию в секундах. Если попроще, можно использовать задержку. Но делать так не рекомендуется, лучше сделать таймер на миллис и работать с ним. Функция возвращает управляющий сигнал, то есть можно подать его например как ШИМ. Период dt имеет такой смысл: чем инерционнее у нас система, тем реже можно вычислять пид. Например для обогрева комнаты период можно поставить 1 секунду или больше, а для контроля за оборотами двигателя надо будет поставить пару десятков миллисекунд, то есть около сотни раз в секунду.