ПИД регулятор

Вопросы и ответы

Система управления

Прежде чем перейти непосредственно к pid, очень важно понять и запомнить несколько основных понятий, из которых состоит автоматическая система. Во-первых, есть регулятор, который управляет всем и находится в середине системы. Регулятор в этом смысле представляет собой математический алгоритм или часть программы, работающей на микроконтроллере.

Регулятор, как алгоритм, работает с обычными числами. Объект управления — это блок, которым мы управляем, например печка или мотор. Для этого у нас есть блок управления, например диммируемый обогреватель или драйвер двигателя. Блок управления получает управляющий сигнал от регулятора, т.е конкретный номер.

Это может быть заполнение сигнала ШИМ, от 0 до 255, или это может быть угол поворота сервопривода от 0 до 180, потому что контроллеру все равно, чем он должен управлять. В объекте управления у нас есть датчик, от которого контроллер получает контролируемую величину, т.е текущий сигнал от датчика. Это обратная связь, которая позволяет системе поддерживать установленное значение ирчно.

В случае с печью это температура, а с двигателем скорость. И, наконец, регулятор получает настройку (setpoint), то есть число, до которого он должен привести текущее значение с датчика. Настройка может быть установлена ​​любым количеством способов: с помощью ручки, ползунка, кодера, кнопок или даже текстового сообщения или голосового ввода.

Для регулятора это не имеет значения, для него это просто цифра. Задача регулятора – сравнить текущее значение с уставкой и подать управляющий сигнал на блок управления. То есть в программе это будет выглядеть условно так: контроллер получил настройку, контроллер получил значение с датчика, контроллер выполнил расчеты и выдал нам управляющий сигнал, опять число.

Если это ШИМ, мы подаем его через функцию генерации ШИМ. Есть еще один момент — регулятор должен производить расчеты и использовать управляющий сигнал через равные промежутки времени, то есть с равным периодом или частотой. Эта частота называется частотой дискретизации системы, а период обозначается dt, как и период интегрирования.

Как работают значения PID, их изменение

Как правило, изменение значений PID (усиления) влияет на поведение квадрокоптера:

Усиление P

P определяет, насколько контроллер полета исправляет ошибки для достижения желаемой траектории полета. Этот параметр управляет чувствительностью и реакцией на изменения положения штифта. Чем выше число, тем выше чувствительность и отклик.

Более высокое значение P означает более четкое управление, а более низкое значение P означает более плавное и плавное управление. Однако, если это значение слишком велико, дрон станет слишком чувствительным и начнет самокорректироваться, а также будут колебаться значения положения стиков.

Вы можете уменьшить P, чтобы уменьшить колебание, но дрон не будет хорошо выполнять ваши команды, поэтому вам придется играть с I и D, чтобы компенсировать это.

Усиление I

Значение I определяет, насколько квадрокоптер выдержит воздействие внешних факторов, таких как ветер и смещение центра тяжести.

Это настройка жесткости при повороте вертолета.

Обычно настройки по умолчанию работают с этим достаточно хорошо, но если вы заметили дрейф дрона без вашей команды, немного увеличьте значение I. Если значение слишком низкое, вам часто придется корректировать траекторию полета дрона, особенно если вы часто меняйте уровень дроссельной заслонки.

Если значение I слишком велико, квадрокоптер будет вести себя на «тройку», он будет плохо реагировать на ваши изменения положения стика на пульте дистанционного управления.

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

Так что я привык решать эти маленькие проблемы.

Усиление D

D действует как аттенюатор (глушитель, аттенюатор) и уменьшает перекоррекцию и контроль усиления P. Увеличение значения D смягчает действие Р, как бы добавляя «пружины», а также минимизирует вибрацию винта.

Если D слишком мало, самолет будет «отскакивать» назад в конце флипов и кренов, и будет сильная вибрация, вызванная вертикальным снижением.

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

Еще одним побочным эффектом D является то, что квадрокоптер становится «мягким», т.е реакция на команды слишком медленная.

Пример схемы регулирования температуры

Часто в регулировании температуры используются ПИД-регуляторы, давайте рассмотрим этот автоматический процесс на простом примере нагрева воды в баке.

В емкость наливается жидкость, которую необходимо нагреть до нужной температуры и поддерживать на определенном уровне. Датчик измерения температуры устанавливается внутри бака — термопара или термометр сопротивления и подключается непосредственно к ПИД-регулятору.

Чтобы нагреть жидкость, мы добавим пар, как показано на рисунке ниже, с автоматическим регулирующим клапаном. Сам клапан получает сигнал от регулятора. Оператор вводит заданное значение температуры в ПИД-регулятор, которое бак должен поддерживать.

При неправильной настройке коэффициентов регулятора будут скачки температуры воды, при этом клапан будет то полностью открываться, то полностью закрываться. В этом случае необходимо рассчитать коэффициенты ПИД-регулятора и ввести их повторно.

Если все сделано правильно, через короткое время система выровняет процесс и температура в баке будет поддерживаться на заданном уровне, а степень открытия регулирующего клапана будет в среднем положении.

Три коэффициента ПИД регулятора и принцип работы

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

Возьмем в качестве объекта регулирования емкость с водой, в которой необходимо поддерживать температуру на заданном уровне, регулируя степень открытия вентиля с паром.

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

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

Поскольку на управляемые устройства всегда влияет несколько факторов, данные уже меняются, когда поступают данные пропорционального расчета. И чем сильнее внешнее воздействие, тем сильнее колебания показателя. Это скачок напряжения.

Интегрированный компонент пытается вернуть значение на основе предыдущих значений температуры, если оно изменилось. Более подробно процесс описан в видео ниже.

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

Интеграл используется для устранения ошибок путем вычисления статической ошибки. Самое главное в этом процессе – правильно подобрать коэффициент, иначе ошибка (несовпадение) отразится и на интегрируемом компоненте.

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

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

Не все проблемы из-за плохих настроек PID

Прежде чем менять PID, следует посмотреть и другие данные:

Вибрация

Не все вибрации вызваны высоким значением P. Перед настройкой ФИД устраните как можно больше источников вибрации на самолете. Например, балансировка двигателя и стоек, жесткость рамы и т д

Центр тяжести (CG)

Центр тяжести должен находиться ровно посередине между всеми 4 двигателями. Плохая регулировка приведет к тому, что некоторые двигатели будут работать тяжелее, чем другие, что приведет к перегреву двигателя и ухудшению стабильности полета.

Например, батарея находится сзади, а не посередине, поэтому задние двигатели будут работать на 100%, а передние — на 80%. Вся масса дрона должна быть сосредоточена и равномерно распределена. По этой причине Х-образные оправы пользуются наибольшей популярностью.

Под капотом у ПИД регулятора

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

После вычислений эта сумма становится управляющим сигналом, подаваемым на блок управления, обозначим его как out.

выход = P*kP + I*kI + D*kD

kP, kI и kD — это те же самые коэффициенты, которые необходимо настроить для работы ПИД-регулятора. Значения здесь могут быть самые разные, от 0,001 до десятков и тысяч, это зависит от конкретной системы. Здесь есть еще один момент: любой коэффициент может быть равен нулю, в этом случае вся составляющая обнуляется.

Это означает, что регулятор может быть преобразован в P, PI, PD и другие комбинации. Разные системы требуют разных подходов, поэтому ПИД-регулятор так универсален. В дальнейшем мы будем использовать следующие имена переменных:

  • out — выход с регулятора (управляющий сигнал)
  • set point — установка (уставка)
  • input — вход (значение с датчика)
  • ошибка — ошибка регулирования
  • dt — период расчета и регулирования

Читайте также: Холодильник на газу: Как работает, плюсы, минусы, как выбрать

P составляющая

Пропорциональная составляющая представляет собой разницу между текущим значением от датчика и установки.

P = уставка — вход

Эта разница называется ошибкой регулирования, то есть тем, насколько далеко система находится от заданного значения. Получается, что чем больше ошибка, тем больше будет управляющий сигнал и тем быстрее система доведет контролируемую величину до заданной. Коэффициент kP здесь играет роль усиления ошибки и настраивается вручную.

Но при этом, если система достигла установленного значения, ошибка будет равна нулю, и управляющий сигнал тоже! Другими словами, регулятор никогда не сможет привести к заданному значению, всегда будет какая-то ошибка.

П-составляющая самая важная в ПИД-регуляторе и так сказать тянет самую большую лямку, регулятор может хорошо работать только на ней одной. Компонент P исправляет ошибку в текущий момент времени.

I составляющая

Интегральная составляющая просто суммирует ту же самую погрешность, разницу между текущим и заданным значением, умноженную на период выборки системы, то есть на время, прошедшее с момента последнего вычисления dt — по сути, она принимает интеграл от ошибка со временем.

I = I + (уставка — вход) * dt

В самом регуляторе это также умножается на коэффициент kI, который регулирует остроту этой составляющей. Ошибка буквально накапливается в интегрированном компоненте, что позволяет контроллеру со временем полностью устранить ее, то есть с максимальной точностью довести систему точно до заданного значения. Компонент I исправляет предыдущие, накопленные ошибки.

D составляющая

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

err = уставка — вход D = (err — prevErr) / dt prevErr = ошибка

Фактически компонент D реагирует на изменение сигнала от датчика, и чем сильнее происходит это изменение, тем большее значение прибавляется к общей величине. Другими словами, Д позволяет компенсировать внезапные изменения в системе и при правильных настройках предотвратить сильное перерегулирование и уменьшить нарастание.

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

Настройка регулятора

Для настройки регулятора нужно варьировать коэффициенты:

  • По мере увеличения kP скорость увеличивается до заданного значения, управляющий сигнал увеличивается. Математически система не может достичь точно заданного значения, поскольку по мере приближения к настройке P компонент пропорционально уменьшается. При дальнейшем увеличении kP реальная система теряет устойчивость и начинаются колебания.
  • С увеличением kI увеличивается скорость компенсации накопленной ошибки, что позволяет с течением времени точно доводить систему до заданного значения. Если система медленная и kI слишком велико, интегральная сумма будет сильно расти и возникнет выброс, который может иметь характер незатухающих колебаний с большим периодом. Поэтому интегральная сумма в алгоритме регулятора часто ограничена, так что она не может увеличиваться и уменьшаться бесконечно.
  • С увеличением kD повышается устойчивость системы, она не позволяет системе изменяться слишком быстро. В то же время kD может вызывать неадекватное поведение системы и постоянные скачки управляющего сигнала, если значение с датчика зашумлено. На каждое резкое изменение сигнала с датчика D компонент будет реагировать изменением управляющего сигнала, поэтому сигнал с датчика необходимо фильтровать (читайте урок про фильтры).

Вот так выглядит процесс стабилизации при изменении коэффициентов: Настройка регулятора — дело не очень простое. Исходные коэффициенты для отбора можно получить по следующему алгоритму: Сначала установить все коэффициенты равными 0. Постепенно увеличивать kP до появления незатухающих колебаний.

Значение kP, где они появились, будет записано и обозначено как kP1. Затем измеряем период колебаний системы в секундах, обозначаемый Т. Окончательные коэффициенты будут получены следующим образом:

  • кП = 0,6 * кП1
  • kI = kP / T * 2 * dt
  • kD = kP * T / 8 / dt

Например, незатухающие колебания появлялись при кП 20, период колебаний составлял 3 секунды. Период dt в системе составит 50 мс (0,05 с). Мы считаем:

  • кП: 0,6*20=12
  • кИ: 12/3*2*0,05=0,4
  • кД: 12*2/8/0,05=60

Большинство систем должно более-менее работать на полученных коэффициентах, но не все. Также можно использовать автоматический тюнер коэффициентов, например, в библиотеку GyverPID встроены два разных алгоритма.

Реализация на C++

Это готовая функция, принимающая значение датчика, уставку, три фактора и время, а также ограничивающая выход от регулятора. Как использовать эту функцию: функция должна быть вызвана с определенным периодом, и продолжительность этого периода должна быть передана в функцию в секундах. Если это проще, вы можете использовать задержку.

Но делать этого не рекомендуется, лучше сделать миллиметр и работать с ним. Функция возвращает управляющий сигнал, то есть его можно использовать например как ШИМ. Период dt имеет следующий смысл: чем более инерционна наша система, тем реже мы можем вычислять pid.

Для обогрева помещения, например, период можно установить в 1 секунду и более, а для управления скоростью двигателя нужно выставить пару десятков миллисекунд, то есть примерно сто раз в секунду.

Оцените статью
Блог об электричестве
Adblock
detector