Что такое pid – что это такое, регулирование температуры ПИД регулятором

что это такое, регулирование температуры ПИД регулятором

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

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

Что такое ПИД регулятор?

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

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

Что такое ПИД регулятор для чайников?

Что такое ПИД регулятор для чайников?

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

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

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

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

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

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

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

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

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

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

Настройка ПИД-регулятора осуществляется 2 методами:

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

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

Современные автоматизированные процессы реализуются как специализированные модули под управлением программ для настройки коэффициентов регулятора.

Назначение ПИД регулятора

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

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

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

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

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

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

Что такое ПИД регулятор для чайников?

Что такое ПИД регулятор для чайников?

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

odinelectric.ru

Что такое PID, на что влияет и как настроить — Все о квадрокоптерах

Многие прошивки для квадрокоптеров, такие как Betaflight и KISS, позволяют пилотам настраивать значения PID для повышения эффективности полета. В этой статье я расскажу, что такое PID, как это влияет на стабильность и обработку полёта. Также расскажу о некоторых простых методах настройки PID квадрокоптера.

Читайте также новую статью: PID — что это такое, как работает и принципы настройки

Источник: oscarliang.com

Что такое PID в квадрокоптерах

К сожалению, в этом мире не все идеально, поэтому были придуманы PID (далее по тексту ПИД), чтобы приблизиться к идеалам.

PID — это функция в полетном контроллере. Эта функция считывает данные с датчиков и передает двигателям, как быстро им нужно вращаться. В конечном итоге, именно так достигается стабильность и идеальность полета квадрокоптера.

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

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

Работает это так: в квадрокоптере PID получает данные с датчиков и сравнивает их с поступившими данными. Разница между этими данные называется «ошибка» или «error» по-английски и старается уменьшить в последующем эту ошибку. Посмотрите на схему, чтобы понять, как PID стабилизирует квадрокоптер:

Схема работы PID

В ПИД-регуляторе есть три функции: P, I и D. Эти значения могут быть интерпретированы с точки зрения времени:

  • P обрабатывает ошибку, которая происходит в данный момент — чем дальше она от заданного значения, тем сильнее она корректируется
  • D — корректирует будущие ошибки, смотря на то, как быстро вы приближаетесь к заданной точке и насколько происходит противодействие P при приближении к заданной точке
  • I — Анализирует прошлые ошибки, которые происходят в течение какого-то времени (например, если ось постоянно смещается от заданного значения из-за ветра) и противодействует этой силе увеличивая скорость нужных двигателей.

 Если вы сейчас ничего не поняли, то это нормально! :) Вам не обязательно понимать теорию работы PID и уметь отлично настраивать PID квадрокоптера. Можете сразу перейти к главе «Простая настройка PID значений», а если все же хотите узнать подробнее о ПИДах, то читайте дальше :)

Чтобы был какой-либо контроль над квадрокоптером:

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

 

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

Эти параметры представляют собой числа, с которыми можно «играть», это коэффициенты 3 алгоритмов, о которых я писал выше. Коэффициенты изменяют влияние каждого алгоритма на выход данных. Сейчас мы рассмотрим, какие эффекты получаются при изменении коэффициентов PID.

Квадрокоптер может перемещаться по 3 осям и для каждой оси есть свое PID-значение. Это означает, что у нас будет отдельный набор коэффициентов ПИД для каждой оси (Pitch, Roll и Yaw), всего 9 значений, которые мы можем настроить.

Алгоритм работы PIDАлгоритм работы PID

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

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

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

Усиление P

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

Более высокий коэффициент Р, означает более четкое управление, в то время как низкий Р — более мягкое и плавное управление. Но если это значение слишком большое, дрон станет слишком чувствительным и начнет сам себя корректировать, а также начнутся колебания значений положения стиков.

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

Усиление I

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

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

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

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

Таким образом, I используется для исправления таких мелких проблем.

Усиление D

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

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

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

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

PID формулы

Нужно ли настраивать PID?

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

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

Настройка PID квадрокоптера

Перед настройкой:

  • Всегда настраивайте свой квадрокоптер в режиме АКРО (ACRO)!
  • Убедитесь, что центр тяжести находится прямо посередине, так как центр тяжести оказывает значительное влияние на то, как хорошо будет летать ваш дрон.

Нет правильного или неправильного способа настройки PID, все, что хорошо работает для вас — и есть правильная настройка. PID настраиваются индивидуально под каждого пилота.

Обычно я всегда начинаю летать на стандартных настройках, а настройки в прошивках Betaflight и KISS хорошо работают для большинства квадрокоптеров.

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

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

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

Yaw (рыскание) и PID

Самая сложная часть для понимания при настройке ПИДов — ось рыскания. Но это также самая легкая часть, потому что вы можете оставить ее по умолчанию в Betaflight, и ваш квадрокоптер будет летать просто отлично.

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

Одним из симптомов плохого рыскания: вы делаете быстрое рыскание и в этот момент даете резкий газ, а дрон по оси (yaw) рыскания не остается на этом же уровне.

Хорошая работа по этой оси также зависит от качества оборудования: двигателей, пропеллеров и регуляторов оборотов. Ими определяется, на сколько быстро дрон сможет перемещаться по оси рыскания (yaw).

Чтобы улучшить рыскание, вы можете попробовать следующее:

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

P на Roll (крен)

С хорошими настройками P квадрокоптер будет очень точно реагировать по крену на положение стика.

Попытайтесь сделать резкий поворот, если Р слишком маленький, то дрон накренится в одну сторону, если слишком большой, вы получите сильную вибрацию и дёрганье. Если Р настроен правильно, то при совершении резких кренов — никаких вибраций и дёрганья не будет.

P на Pitch (высотa)

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

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

TPA

ТРА — это настройка для снижения эффективности усиления P при увеличении дросселя (газа). Сделайте резкий газ и посмотрите, есть ли какие-либо колебания и вибрация, если да, то увеличьте ТРА. Хорошо настроенный ТРА даст вам очень гладкий газ. Лично я не использую ТРА выше 0,4.

D на Roll и Pitch (на крен и высоту)

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

I на Roll (на крен)

Наклоните (в полете, естественно) свой дрон вправо и влево и посмотрите, держит ли он этот наклон после того, как вы отпустили стик (напомню, все манипуляции в АКРО режиме), если он не держит угол наклона, то увеличьте значение I на Roll.

Сделайте тоже самое для наклона вперед и назад. Это также будет зависеть и от силы ветра.

Anti Gravity Gain

Летите по прямой и дайте пару раз (быстро) газа и посмотрите, сохраняет ли дрон положение. Если он опускается, то увеличьте это значение. Для меня идеальное значение было 3.

Yaw P (Рыскание Р)

Yaw PID необходимо настроить отдельно. Значения по умолчанию обычно хорошо работают на всех дронах.

Выполните резкое и быстрое рыскание, если после остановки квадрокоптер дрожит или вибрирует — уменьшите значение Р, если он опустится на одну сторону — увеличьте Р.

Когда Р по рысканию слишком высок, то при рыскании квадрокоптер будет набирать высоту, в таком случае, Р следует уменьшить.

Yaw I (Рыскание I)

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

D-Term Set Point Weight

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

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

Перед настройкой PID, вы должны изучить и другие данные:

Вибрация

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

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

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

Вопрос: «Какие у тебя ПИДы?» — неправильный вопрос!

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

Когда нужно перенастраивать PID?

Почти все компоненты квадрокоптера влияют на PID, поэтому когда вы меняете какой-нибудь компонент, проведите и настройку PID. Если в Betaflight и Cleanflight вы меняли Looptime, то тоже нужно будет подкорректировать PID.

Статья как настроить Setpoint Weight и Setpoint Transition: https://profpv.ru/betaflight-nastroyka-pid-setpoint-weight-i-setpoint-transition/

Читайте также новую статью: PID — что это такое, как работает и принципы настройки

Если вы нашли ошибку или ссылку, которая не работает, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

profpv.ru

ПИД-регулятор своими руками / Habr

; PID управление
CalcMainEnd:
	; Вычисления, Go-Go.
CalcPid:
	;	1. Eo = E				 | 16bit
Pid1:
	MOV Err0H, ErrH
	MOV Err0L, ErrL
	;	2. E = Y-X				 | 16bit
Pid2:
	CLR C
	MOV A, SettingL
	SUBB A, ThermoL
	MOV ErrL, A
	MOV A, SettingH
	SUBB A, ThermoH
	MOV ErrH, A
	JNB  OV, Pid2Ov
	JB	ACC.7, Pid2Max
Pid2Min:
	MOV ErrL, #LOW(-500*32)
	MOV ErrH, #HIGH(-500*32)
	SJMP Pid2End
Pid2Max:
	MOV ErrL, #LOW(500*32)
	MOV ErrH, #HIGH(500*32)
	SJMP Pid2End
Pid2Ov:
	JNB ACC.7, Pid2OvP
Pid2OvN: ; Проверим на ограничение вниз
	CLR C
	MOV A, ErrL
	SUBB A, #LOW(-500*32)
	MOV A, ErrH
	SUBB A, #HIGH(-500*32)
	JNC Pid2End ; Если > -500 => всё ок
	SJMP Pid2Min
Pid2OvP:
	CLR C
	MOV A, ErrL
	SUBB A, #LOW(500*32)
	MOV A, ErrH
	SUBB A, #HIGH(500*32)
	JNC Pid2Max ; Если < 500 => всё ок
Pid2End:

	;	3. Int = Int + (E+Eo)/2  | 32bit+16bit
Pid3:
	JNB PowerReady, Pid3End ; Если нет сети -- интегральную часть не копим
	MOV A, ErrL
	ADD A, Err0L
	MOV R0, A ; временно
	MOV A, ErrH
	ADDC A, Err0H
	MOV C, ACC.7 ; Полусумма всегда влезает в 16 бит, поэтому при сдвиге надо сохранить знак
	RRC A	; Поделим без потери знака
	XCH A, R0 ; A= младшая часть, R0 - старшая часть полусуммы
	RRC A	; Доделили
	JNB  IntS, Pid3IntPos
	; Int отрицательный, изменим знак для R0:A, тем самым можно будет просто сложить с Int
	CLR C
	CPL A
	ADD A, #1
	XCH A, R0
	CPL A
	ADDC A, #0
	XCH A, R0
Pid3IntPos:
	; У Int и R0:A сейчас согласованы знаки, поэтому складываем обычным образом
	ADD A, IntLL
	MOV IntLL, A
	MOV A, IntLH
	ADDC A, R0
	MOV IntLH, A
	MOV A, R0
	JB	ACC.7, Pid3Neg ; Прибавляли отрицательную разность?
	; Если разность положительная, просто распространим перенос
	JNC jPid3End  ; Если прибавили слово и переноса небыло -- делать нам ничего не требуется.
	INC IntHL ; Распространяем перенос выше
	MOV A, IntHL
	JNZ Pid3End  ; Если перенос не ушел в 4й байт -- всё нормально
	INC IntHH ; Распространяем перенос на САМЫЙ старший байт
	MOV A, IntHH
	JNZ Pid3End  ; Если перенос не ушел еще выше -- всё нормально
	MOV IntHH, #0FFh ; Если перенс был выше -- ограничиваем интеграл потолком
	MOV IntHL, #0FFh
	MOV IntLH, #0FFh
	MOV IntLL, #0FFh
jPid3End:
	SJMP Pid3End
Pid3Neg: ; Если разность отрицательная, то надо продолжать добавлять оба раза, но FFh
	MOV A, IntHL
	ADDC A, #0FFh
	MOV IntHL, A
	MOV A, IntHH
	ADDC A, #0FFh
	MOV IntHH, A
	JC	Pid3End  ; Если тут был перенос, значит знак интеграла не изменился
	CPL IntS ; Если переноса небыло, значит у интеграла изменился знак
	CPL C		 ; Обратим знак получившегося числа
	MOV A, #0
	SUBB A, IntLL
	MOV IntLL, A
	MOV A, #0
	SUBB A, IntLH
	MOV IntLH, A
	MOV A, #0
	SUBB A, IntHL
	MOV IntHL, A
	MOV A, #0
	SUBB A, IntHH
	MOV IntHH, A
	; так как оно стало отрицательным -- то перенос тут будет всегда
Pid3End:

	;	5. cI = Int*(1/Ti)		 | 32*32=>32bit
Pid5: ; R3:R2:R1:R0 = Int*(1/Ti)
	JB Ti_sh2, Pid5Calc ; если Ti_sh2=0, то 1/Ti=1 или Ti=0. и ничего делать не надо
	MOV A, Ti_mLL
	ORL A, Ti_mLH
	ORL A, Ti_mHL
	ORL A, Ti_mHH
	JZ	Pid5Zero
	MOV R0, IntLL
	MOV R1, IntLH
	MOV R2, IntHL
	MOV R3, IntHH
	AJMP Pid5End
Pid5Zero:
	MOV A, #0
	MOV R0, A
	MOV R1, A
	MOV R2, A
	MOV R3, A
	MOV IntLL, A
	MOV IntLH, A
	MOV IntHL, A
	MOV IntHH, A
	AJMP Pid5End
Pid5Calc:
	; R7:R6:R5:R4[:R3] = MULUH(Int*Ti_m) // R3 считаем как часть для округления
	MOV R2, #0
	;; R7:R6 = IntHH*Ti_mHH
	MOV A, IntHH
	MOV B, Ti_mHH
	MUL AB
	MOV R7, B
	MOV R6, A
	; R6:R5 += IntHL*Ti_mHH
	MOV A, IntHL
	MOV B, Ti_mHH
	MUL AB
	MOV R5, A
	MOV A, R6
	ADD A, B
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	; R5:R4 += IntLH*Ti_mHH
	MOV A, IntLH
	MOV B, Ti_mHH
	MUL AB
	MOV R4, A
	MOV A, R5
	ADD A, B
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	; R4:R3 += IntLL*Ti_mHH
	MOV A, IntLL
	MOV B, Ti_mHH
	MUL AB
	MOV R3, A
	MOV A, R4
	ADD A, B
	MOV R4, A
	MOV A, R2 ; A=0
	ADDC A, R5
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	;; R6:R5 += IntHH*Ti_mHL
	MOV A, IntHH
	MOV B, Ti_mHL
	MUL AB
	ADD A, R5
	MOV R5, A
	MOV A, R6
	ADDC A, B
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	; R5:R4 += IntHL*Ti_mHL
	MOV A, IntHL
	MOV B, Ti_mHL
	MUL AB
	ADD A, R4
	MOV R4, A
	MOV A, R5
	ADDC A, B
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	; R4:R3 += IntLH*Ti_mHL
	MOV A, IntLH
	MOV B, Ti_mHL
	MUL AB
	MOV A, R3
	MOV R3, A
	MOV A, R4
	ADDC A, B
	MOV R4, A
	MOV A, R2 ; A=0
	ADDC A, R5
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	;; R5:R4 += IntHH*Ti_mLH
	MOV A, IntHH
	MOV B, Ti_mLH
	MUL AB
	ADD A, R4
	MOV R4, A
	MOV A, R5
	ADDC A, B
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	; R4:R3 += IntHL*Ti_mLH
	MOV A, IntHL
	MOV B, Ti_mLH
	MUL AB
	ADD A, R3
	MOV R3, A
	MOV A, R4
	ADDC A, B
	MOV R4, A
	MOV A, R2 ; A=0
	ADDC A, R5
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	;; R4:R3 += IntHH*Ti_mLL
	MOV A, IntHH
	MOV B, Ti_mLL
	MUL AB
	ADD A, R3
	MOV R3, A
	MOV A, R4
	ADDC A, B
	MOV R4, A
	MOV A, R2 ; A=0
	ADDC A, R5
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	;;; Если R3 > 7F --
	MOV A, R3
	JNB ACC.7, Pid5Shift ; Если R3<80 -- округление не надо
	ANL A, #7Fh
	JZ	Pid5Round ; Если = 80 -- округляем до нечетного
	MOV A, #1
	ADD A, R4
	MOV R4, A
	MOV A, R2 ; A=0
	ADDC A, R5
	MOV R5, A
	MOV A, R2 ; A=0
	ADDC A, R6
	MOV R6, A
	MOV A, R2 ; A=0
	ADDC A, R7
	MOV R7, A
	SJMP Pid5Shift
Pid5Round:
	MOV A, R4
	ORL A, #01h
	MOV R4, A
	;JMP Pid5Shift

Pid5Shift:
	; R3:R2:R1:R0 = (Int-R7:R6:R5:R4) >> 1
	CLR C
	MOV A, IntLL
	SUBB A, R4
	MOV R0, A
	MOV A, IntLH
	SUBB A, R5
	MOV R1, A
	MOV A, IntHL
	SUBB A, R6
	MOV R2, A
	MOV A, IntHH
	SUBB A, R7
	RRC A ; >>1 без потери переноса
	MOV R3, A
	MOV A, R2
	RRC A
	MOV R2, A
	MOV A, R1
	RRC A
	MOV R1, A
	MOV A, R0
	RRC A
	;MOV R0, A
	; R3:R2:R1:R0 += R7:R6:R5:R4
	;MOV A, R0
	ADD A, R4
	MOV R0, A
	MOV A, R1
	ADDC A, R5
	MOV R1, A
	MOV A, R2
	ADDC A, R6
	MOV R2, A
	MOV A, R3
	ADDC A, R7
	MOV R7, A
	; Теперь сдвинуть вправо на sh3.
	; sh3 может быть до 16 (так как у нас Ti 16разрядный; проверим необходимость сдвига на 16 бит)
	MOV A, Ti_sh3
	JNB ACC.4, Pid5ShiftUnder16
	; Надо сдвинуть >=16 -- 2 байта сдвинем mov'ами
	MOV R0, 18h+2; R2, bank 3
	MOV R1, 18h+3; R3, bank 3
	MOV R2, #0
	MOV R3, #0
Pid5ShiftUnder16:
	JNB ACC.3, Pid5ShiftUnder8
	; Надо сдвинуть на >=8 -- 1 байт сдвигаем mov'ами
	MOV R0, 18h+1; R1, bank 3
	MOV R1, 18h+2; R2, bank 3
	MOV R2, 18h+3; R3, bank 3
	MOV R3, #0
Pid5ShiftUnder8:
	ANL A, #07h
	JZ Pid5End ; Если внутри байта двигать не надо -- всё
	MOV R4, A
	SJMP Pid5ShiftRight
Pid5NextShift:
	CLR C
	; К этому моменту C у нас еще возможнозначимый старший бит!
Pid5ShiftRight:
	MOV A, R3
	RRC A
	MOV R3, A
	MOV A, R2
	RRC A
	MOV R2, A
	MOV A, R1
	RRC A
	MOV R1, A
	MOV A, R0
	RRC A
	MOV R0, A
	DJNZ R4, Pid5NextShift
	; Всё, после всех сдвигов получили результат
	; Не забываем, что у вычисленного в R3:R2:R1:R0
	; сейчас число положительное, а знак его в IntS
Pid5End:

	;	4. PID += [ cD = Td * (E-Eo) ]		| 16*16=>32bit
Pid4: ; cD = R7:R6:R5:R4; ErrD = E-Eo
	CLR C
	MOV A, ErrL
	SUBB A, Err0L
	MOV DiffL, A
	MOV A, ErrH
	SUBB A, Err0H
	MOV DiffH, A
	MOV C, ACC.7 ; Берём знак результата
	MOV DiffS, C ; Сохраним знак E-Eo
	JNC Pid4Mul
	; Diff -- орицательный, обратим знак
	MOV A, DiffL
	CPL A
	ADD A, #1
	MOV DiffL, A
	MOV A, DiffH
	CPL A
	ADDC A, #0
	MOV DiffH, A
Pid4Mul:
	; R7:R6 = DiffH*TdH
	; MOV A, DiffH = в любом случае A=DiffH
	MOV B, TdH
	MUL AB
	MOV R6, A
	MOV R7, B
	; R5:R4 = DiffL*TdL
	MOV A, DiffL
	MOV B, TdL
	MUL AB
	MOV R4, A
	MOV R5, B
	; R6:R5 += DiffH*TdL
	MOV A, DiffH
	MOV B, TdL
	MUL AB
	ADD A, R5
	MOV R5, A
	MOV A, R6
	ADD A, B
	MOV R6, A
	MOV A, R7
	ADDC A, #0
	MOV R7, A
	; R6:R5 += DiffL*TdH
	MOV A, DiffL
	MOV B, TdH
	MUL AB
	ADD A, R5
	MOV R5, A
	MOV A, R6
	ADD A, B
	MOV R6, A
	MOV A, R7
	ADDC A, #0
	MOV R7, A

	;	6. PID = E + cI + cD	 | 32bit
Pid6:	; R3:R2:R1:R0 равно cI, знак в IntS;
	; R7:R6:R5:R4 = cD; знак в DiffS
	; E в обратном дополнительном коде

	JB IntS, ChkDiffN
	JNB DiffS, Pid6Add ; Int>0, Diff>0 => Add
	SJMP Pid6Sub ; Int>0, Diff<0 => Sub
ChkDiffN:
	JNB DiffS, Pid6Sub ; Int<0, Diff>0 => Sub
	; Int<0, Diff<0 => Add
Pid6Add:
	; Одинаковый знак => складываем их с проверкой на переполнение
	MOV A, R0
	ADD A, R4
	MOV R0, A
	MOV A, R1
	ADDC A, R5
	MOV R1, A
	MOV A, R2
	ADDC A, R6
	MOV R2, A
	MOV A, R3
	ADDC A, R7
	MOV R3, A
	JNC Pid6Err ; Если нет переноса - в результате сложения переполнения небыло
	MOV R3, #0FFh
	MOV R2, #0FFh
	MOV R1, #0FFh
	MOV R0, #0FFh
	SJMP Pid6Err
Pid6Sub:
	; Знаки разные -- вычтем одно из другого и проверим знак результата
	CLR C
	MOV A, R4
	SUBB A, R0
	MOV R0, A
	MOV A, R5
	SUBB A, R1
	MOV R1, A
	MOV A, R6
	SUBB A, R2
	MOV R2, A
	MOV A, R7
	SUBB A, R3
	MOV R3, A
	JNC Pid6Err ; Если нет заимствования -- знак результата равен знаку DiffS
	CPL DiffS ; Если заимствование было, у DiffS и результата надо обратить знак
	MOV R6, #0 ; R6=0
	MOV A, R0
	CPL A
	ADDC A, R6 ; R6=0, C=1 => действие +1
	MOV R0, A
	MOV A, R1
	CPL A
	ADDC A, R6 ; +перенос
	MOV R1, A
	MOV A, R2
	CPL A
	ADDC A, R6
	MOV R2, A
	MOV A, R3
	CPL A
	ADDC A, R6
	MOV R3, A

Pid6Err:
	MOV R6, #0 ; R6=0
	; В R3:R2:R1:R0 -- лежит cI+cD; знак суммы в DiffS
	; надо прибавить/отнять Err, записанное в обратном коде
	; Приведём знак Err к DiffS
	MOV R4, ErrL
	MOV A, ErrH
	JB ACC.7, Pid6ChkDiffS
	JNB DiffS, Pid6SumErrNoInv ; Err>0, Diff>0 => NoInv
	SJMP Pid6SumErrInv
Pid6ChkDiffS:
	JNB DiffS, Pid6SumErrNoInv ; Err<0, Diff>0 => NoInv
Pid6SumErrInv:
	; У Err знак отличается от DiffS -- инвертируем
	SETB C ; Не уверен в состоянии C
	MOV A, ErrL
	CPL A
	ADDC A, R6 ; A+=R6+C, R6=0	C=1 => A+=1
	MOV R4, A ; R4=ErrL
	MOV A, ErrH
	CPL A
	ADDC A, R6
Pid6SumErrNoInv:
	MOV R5, A ; ErrH
Pid6SumErr:
	; Итак, в R5:R4 лежит Err, знак которого согласован с DiffS; но в обратно-дополнительном коде
	MOV A, R0
	ADD A, R4
	MOV R0, A
	MOV A, R5
	CLR F0
	JNB ACC.7, Pid6SubErrPos
	SETB F0
	MOV R6, #0FFh ; Добавляем отрицательное => дополняем FFами
Pid6SubErrPos:
	ADDC A, R1
	MOV R1, A
	MOV A, R2
	ADDC A, R6 ; +расширение
	MOV R2, A
	MOV A, R3
	ADDC A, R6 ; +расширение
	MOV R3, A
	MOV R6, #0
	; Надо проверить нет ли смены знака итоговой суммы
	JNC Pid6ChkF0
	JB F0, Pid7 ; Err<0, был перенос => Знак не сменился, переполнения нет
	SJMP Pid6SumOv ; Err>0, был перенос => переполнение
Pid6ChkF0:
	JNB F0, Pid7 ; Err>0, небыло переноса => нет переполнения
	;SJMP Pid6SumUf ; Err<0, небыло переноса => сменился знак
Pid6SumUf:
	; Если Err<0 и небыло переноса => сменился знак
	CPL DiffS
	MOV A, R0
	CPL A
	ADD A, #1 ; C=?, поэтому прибавляем 1 обычным методом
	MOV R0, A
	MOV A, R1
	CPL A
	ADDC A, R6
	MOV R1, A
	MOV A, R2
	CPL A
	ADDC A, R6
	MOV R2, A
	MOV A, R3
	CPL A
	ADDC A, R6
	MOV R3, A
	SJMP Pid7 ; Знак у результата и DiffS приведены в норму
Pid6SumOv:
	; Было переполнение => округляем до максимума
	MOV R0, #0FFh
	MOV R1, #0FFh
	MOV R2, #0FFh
	MOV R3, #0FFh

	;	7. U = K*PID/256		 | 32bit*16bit/8bit => 40bit,
	;					 | которые усекаются до 10bit
	;					 | при вычислениях
Pid7: ; В R3:R2:R1:R0 лежит результат PID, в DiffS его знак
	  ; Нужно вычислить K*PID/256, ограничив результат до 10бит
	  ; K всегда положительно, поэтому если PID < 0 => минимум
	JB DiffS, Pid7Umin
	; поскольку мы можем жестко ограничить сверху 16ю битами,
	; то если R3 != 0 => ставим максимум в любом случае
	MOV A, R3
	JNZ Pid7Umax
	; [R2:R1:R0 * KH:HL] = [R7:R6:R5:R4:R3]
	; вычисляем, учитывая что должно получиться R7=0 R6=0,
	; иначе переполнение, поэтому R7 и R6 вообще не трогаем
	; но проверяем результат
	; R7:R6 = R2*KH
	MOV A, R2
	JZ Pid7S1
	MOV A, KH
	JNZ Pid7Umax ; Если R2!=0 и KH!=0 => R7:R6>0 => переполнение
Pid7S1:
	; R6:R5 = R2*KL
	MOV A, R2
	MOV B, KL
	MUL AB
	MOV R5, A
	MOV A, B
	JNZ Pid7Umax ; Если R6 > 0 => переполнение
	; R6:R5 = R1*KH
	MOV A, R1
	MOV B, KH
	MUL AB
	ADD A, R5
	JC	Pid7Umax ; Если R6 > 0 => переполнение
	MOV R5, A
	MOV A, B
	JNZ Pid7Umax ; Если R6 > 0 => переполнение
	; R5:R4 = R0*KH
	MOV A, R0
	MOV B, KH
	MUL AB
	MOV R4, A
	MOV A, R5
	ADD A, B
	JC	Pid7Umax ; Если R6 > 0 => переполнение
	MOV R5, A
	; R5:R4 = R1*KL
	MOV A, R1
	MOV B, KL
	MUL AB
	ADD A, R4
	MOV R4, A
	MOV A, R5
	ADDC A, B
	JC	Pid7Umax ; Если R6 > 0 => переполнение
	MOV R5, A
	; R4:R3 = R0*KL
	MOV A, R0
	MOV B, KL
	MUL AB
	RLC A ; C = R3>=0x80, Z=R3>0x80
	MOV R3, #0FFh ; R3<>0x80 => ничего
	JNZ Pid7S2
	MOV R3, #0FEh ; R3==0x80 => округление до четного
Pid7S2:
	MOV A, R4
	ADDC A, B ; Складываем умножение, регистр, и перенос-округление
	ANL A, R3 ; А так же если округление до четного -- отбрасываем после младший бит
	MOV R4, A
	MOV A, R5
	ADDC A, R6 ; R6=0 у нас с давних пор, хоть мы туда и не складывали ничего во время перемножения
	JC	Pid7Umax ; Если R6 > 0 => переполнение
	MOV R5, A
	; R5:R4 => ограниченный в 16 бит результат
	; Теперь надо ограничить R5:R4 до Umax/Umin
	MOV A, UmaxL
	SUBB A, R4 ; C=0 на текущий момент
	MOV A, UmaxH
	SUBB A, R5
	JC Pid7Umax ; Если R5:R4>Umax => R5:R4 = Umax
	MOV A, UminL
	SUBB A, R4 ; C=0 на текущий момент
	MOV A, UminH
	SUBB A, R5
	JNC Pid7Umin ; Если R5:R4<Umin => R5:R4 = Umin
	; Мощность вычислена
	MOV UH, R5
	MOV UL, R4
	SETB UReady
	AJMP CalcExit
Pid7Umax: ; Установить максимальную мощность
	MOV UH, UmaxH
	MOV UL, UmaxL
	SETB UReady
	AJMP CalcExit
Pid7Umin: ; Установить минимальную мощность
	MOV UH, UminH
	MOV UL, UminL
	SETB UReady
	AJMP CalcExit

habr.com

регулятор — это… Что такое ПИД-регулятор?

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

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

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

Общие сведения

Пропорциональная составляющая

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

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

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

Интегральная составляющая

Интегральная составляющая пропорциональна интегралу от отклонения регулируемой величины. Её используют для устранения статической ошибки. Она позволяет регулятору со временем учесть статическую ошибку.

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

Дифференциальная составляющая

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

Теория

Назначение ПИД-регулятора — в поддержании заданного значения x0 некоторой величины x с помощью изменения другой величины u. Значение x0 называется заданным значением, а разность e = (x0 − x) — невязкой, рассогласованием или отклонением величины от заданной.

Выходной сигнал регулятора u определяется тремя слагаемыми:

,

где Кp, Кi, Кd — коэффициенты усиления пропорциональной, интегральной и дифференциальной составляющих регулятора, соответственно.

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

В дискретной реализации метода расчета выходного сигнала уравнение принимает следующую форму:

,

где  — время дискретизации. Используя замену можно записать:

В программной реализации для оптимизации расчетов переходят к рекуррентной формуле:

Система управления с обратной связью с участием ПИД-регулятора. Система управляет величиной y(t), т.е. выводит величину y(t) на заданное извне значение u(t). На вход ПИД-регулятора подаётся ошибка e(t), выход ПИД-регулятора является управляющим воздействием для некоторого процесса (для объекта управления), управляющего величиной y(t).

Часто в качестве параметров ПИД-регулятора используются:

  • относительный диапазон
  • постоянные интегрирования и дифференцирования, имеющие размерность времени

Следует учитывать, что термины используются по-разному в различных источниках и разными производителями регуляторов.

Ссылки

dic.academic.ru

Принцип работы ПИД-регуляторов

Принцип работы

Регуляторы процесса

Регуляторы процесса (Process Controllers) – это параметрируемые цифровые контроллеры со встроенным
набором стандартных функций для регулирования технологических переменных (температуры, давления и т.п.).

В качестве сигналов задания (Reference) могут использоваться как фиксированные уставки (Fixed Setpoints),
так и внешние (External).

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

Дискретные входы используются для задания фиксированных уставок и переключения между режимами.

Дискретные выходы используются для сигнализации: готовности, аварий, состояния.

Релейные выходы используются для дискретного управления, а аналоговые выходы – для непрерывного управления.

Дискретное управление
  • 2-х позиционный регулятор использует только 2 состояния:
    • включено (открыто)
    • выключено (закрыто)
    • Пример: управление нагреванием или охлаждением.

  • 3-х позиционный регулятор использует 3 состояния:
    • выключено
    • вращение по часовой стрелке
    • вращение против часовой стрелки (реверс)
    • Пример: управление реверсивным электродвигателем.

  • 5-и позиционный регулятор использует 5 состояний:
    • выключено
    • вращение на первой скорости по часовой стрелке
    • вращение на второй скорости по часовой стрелке
    • вращение на первой скорости против часовой стрелки
    • вращение на второй скорости против часовой стрелки
    • Пример: управление 2-скоростным реверсивным двигателем.

Непрерывное управление

Для непрерывного управления используются ПИД-регуляторы.
Возможна реализация каскадного (подчинённого) управления.

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

Переходный процесс

Переходный процесс – это реакция системы на внешнее воздействие (задание, возмущение).

Неустойчивый (расходящийся) переходный процесс
Устойчивый (сходящийся) переходный процесс
Колебательный Апериодический Монотонный

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

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

Хзад – заданное (желаемое) значение выходной переменной
Xmax – верхний допустимый предел выходной переменной
Xmin – нижний допустимый предел выходной переменной
Т – период колебаний
Тн – время нарастания
Тр – время переходного процесса (последняя точка пересечения кривой с Xmin или Xmax)
А1 – первое перерегулирование
А2 – второе перерегулирование
d=А1/A2 — степень (декремент) затухания переходного процесса (отношение первого перерегулирования ко второму)

Рассогласование, перерегулирование, время нарастания, время переходного процесса, степень
затухания характеризуют качество регулирования.

Пример

ПИД-регулятор открывает и закрывает регулирующий вентиль на горячей трубе так, чтобы из крана текла
вода с температурой +40°С с погрешностью плюс-минус 2 градуса.
Регулятор вычисляет рассогласование (ошибку) — отклонение реальной температуры (например, +20°С) от
заданного значения (+40°С) и решает – когда и насколько необходимо приоткрыть горячий вентиль,
чтобы температура повысилась на 20С.
Реальную (фактическую) температуру регулятор узнаёт с помощью датчика температуры (обратная связь),
а заданную температуру (уставку) ему сообщает оператор, например, набирая число «40» на своём ПК.

Чтобы настроить ПИД-регулятор, необходимо подобрать правильную комбинацию трёх коэффициентов:

  • Пропорционального – Kp
  • Интегрального – Ki
  • Дифференциального – Kd

Могут использоваться и более простые — П и ПИ-регуляторы.

Формула ПИД-регулятора

где e(t) — ошибка (рассогласование), u(t) — выходной сигнал регулятора (управляющее воздействие).

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

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

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

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

Настройка ПИД-регулятора по методу Циглера-Николса

Циглер и Николс предложили свой вариант быстрой настройки ПИД-регулятора для периодического переходного процесса,
в котором затухание примерно равно 4.

  • Обнуляем Ki и Kd
  • Постепенно увеличиваем Kp до критического значения Kc, при котором возникают автоколебания
  • Измеряем период автоколебаний Т
  • Вычисляем значения Kp, Ki и Kd по разным формулам для разных регуляторов:
    • для П-регулятора: Kp=0,50*Kc
    • для ПИ-регулятора: Kp=0,45*Kc, Ki=1,2*Kp/T
    • для ПИД-регулятора: Kp=0,60*Kc, Ki=2,0*Kp/T,
      Kd=Kp*T/8

Каскадный регулятор (подчинённое управление)

Продолжение примера

Теперь нам захотелось добавить комфорта и сделать так, чтобы уставка задания температуры воды менялась
в зависимости от температуры воздуха на улице (на улице мороз – вода горячая, на улице жара – вода прохладная).
Можно установить ещё один регулятор комфортной температуры, который по показаниям термометра узнаёт
фактическую температура наружного воздуха и решает, что комфортная температура воды должна быть, например, +40°С,
поэтому он выдаёт задание регулятору температуры воды – поддерживать температуру на уровне +40С (см. пример выше).
Здесь мы имеем каскадное регулирование: контур регулирования температуры воды подчинён контуру регулирования
комфортной температуры воды.

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

Упреждающее регулирование (Feedforward Control)

Не всегда простой ПИД-регулятор в системе с обратной связью может обеспечить требуемое быстродействие
из-за возникновения нежелательных колебаний или недопустимо большого перерегулирования.
Для улучшения характеристик регулирования применяют комбинированное управление – с обратной связью
(closed-loop) и без обратной связи (open-loop). К управляющему воздействию (выходу регулятора)
добавляется сигнал упреждающего воздействия, который не зависит от рассогласования, а значит,
не может вызвать автоколебания в системе.

Продолжение примера

Если мы доверяем прогнозу погоды, то вместо каскадного управления мы можем реализовать упреждающее
регулирование без измерения уличной температуры: читаем прогноз на завтра, задаём уставку +40°С по таймеру времени
на завтра на 7 утра.

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

www.maxplant.ru

ПИД для квадрокоптеров (перевод) | RCDetails Blog

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

Про настройку ПИД простыми словами

Как я раньше и объяснял, ПИД контроллер или регулятор (Пропорционально-интегрально-дифференцирующий регулятор) это управляющий цикл с обратной связью, который очень часто используется во всевозможных управляющих системах. ПИД регулятор вычисляет значение «ошибки» как разницу между измеренным значением переменной и ее желаемым значением. Он пытается минимизировать ошибку воздействуя на управляемые входы. Серьезно, это определение полностью бесполезно для нас – не ученых :-p

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

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

ПИД еще более простыми словами

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

Что такое P?

P – это основное значение о котором нужно побеспокоиться, это число определяет стабильность. Почему я так говорю? Потому что Вы можете оставить I и D равными 0 и ваш самолет все еще будет удерживать горизонтальное положение. И вот поэтому вы всегда должны настраивать значение P до значений I и D.

Чем больше значение P, тем резче оно пытается стабилизировать коптер. Но если P слишком большое, то коптер становится слишком чувствительным и слишком резко пытается корректировать свое положение, проскакивая требуемое положение (чрезмерно резкая и быстрая реакция), в этом случае вы получите колебания с большой частотой.

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

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

Что такое I?

Отлично, вы настроили P, оставив I и D значением по умолчанию (прим. переводчика, по идее они должны быть равными 0). Теперь во время полетов вы можете заметить, что должны удерживать стики рола и питча (крен и тангаж) чтобы коптер двигался, как только перестанете двигать стики – коптер сразу останавливается и выравнивается. Эта резкость управления даже может вызвать несколько колебаний или раскачиваний если вы дерните стик быстро.

Все это происходит потому, что P делает свою работу, пытаясь стабилизировать коптер. Посмотрите на значение I как на штуку которая следует позади, за стиком управления, увеличив значение I вы увидите, что полет становится более плавным. Но побочный эффект этого – когда вы бросите стики – коптер продолжить двигаться в этом же направлении. Это эффект от I – удержание предыдущей (во времени) позиции стика.

Чтобы понять это подумайте о том, что коптер пытается уменьшить ошибку в положении, но ошибка не уменьшается, она будет только пытаться уменьшиться. Это эффект от параметра I. Технически говоря это интеграл ошибки по времени, чем дольше ошибка присутствует, тем большая сила должна быть приложена. Когда I не равно 0, очень маленькая ошибка присутствует постоянно (это не обязательно плохо в реальном полете!).

Некоторые пилоты используют I чтобы полет был более плавным, в то время как другие – любят вариант поведения «следовать за стиком немедленно». Однако со слишком большим значением I, ваш коптер начнет колебаться с низкой частотой если дать газу. Когда I имеет слишком маленькое значение ваш коптер будет раскачиваться во время снижения.

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

Что такое D?

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

D – это противоположность P. Если P это рука которая продолжает толкать машину в сторону стабильного положения, тогда D – это пружина между рукой и машиной, которая сглаживает резкие удары. Увеличивая D вы как бы смягчаете движения, как бы добавляете пружину в этот процесс управления. Однако слишком большое D – не очень хорошо, потому что может вызвать колебания. А еще коптер будет вялым.

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

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

ПИД для вертикальной оси (рысканье)

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

Заключение

Здесь статья как я настраиваю свой Naze32.

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

 

Оригинал: Understanding PID for Quadcopter RC – Flight behaviour

blog.rcdetails.info

ПИД-регулятор для автоматизации процессов | LAZY SMART



Что же такое ПИД-регулятор? Прежде всего это алгоритм, который может быть реализован как программно, так и аппаратно. Сегодня мы рассмотрим ПИД-регулятор как законченное устройство, которое может быть использовано для построения систем управления и автоматики. В качестве примера возьмём устройство компании «ОВЕН»  ТРМ210. Но для начала немного теории…

Что такое ПИД-регулятор?

ПИД-регулятор относится к регуляторам непрерывного типа. Аббревиатура «ПИД» расшифровывается как «пропорционально-интегрально-дифференциальный» (регулятор) — эти три слова полностью описывают принцип его действия. Общая структурная схема управления выглядит так:

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

Функция преобразования ПИД-регулятора выглядит следующим образом:

,где E — ошибка регулирования (разница между заданным значением регулируемой величины и фактическим)

В этой формуле, как вы уже догадались, есь три составляющие: интегральная пропорциональная и дифференциальная. Каждая из них имеет соответствующий коэффициент (Кп, Ки, Кд). Чем больше коэффициент, тем больший вклад данная составляющая вносит в работу регулятора. Теперь разберёмся за что отвечает каждая из них.

Пропорциональная:  «Чем больше — тем больше, чем меньше  — тем меньше»

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

Интегральная:  «Учтём предыдущий опыт»

Интегральная составляющая необходима, чтобы учитывать предыдущий опыт работы регулятора и делать управление всё точнее и точнее со временем. Как известно, интеграл — это сумма. Регулятор суммирует все предыдущие значения ошибки регулирования и делает на них поправку. Как только система выйдет на заданный режим (например, достигнет заданной температуры) ошибка регулирования будет близка к нулю и интегральная часть со временем будет всё меньше влиять на работу регулятора. Говоря простым языком, интегральная составляющая стремиться исправить ошибки регулирования за предыдущий период.

Дифферинциальная:  «Учтём скорость изменения»

Эта составляющая берёт производную от измеряемой величины. Физический смысл производной- это скорость изменения физической величины. Например, чем быстрее растёт (или падает) температура в системе, тем больше будет соответствующая производная. Дифферинциальная составляющая позволяет регулятору по-разному реагировать на резкие и плавные изменения регулируемой величины в системе, тем самым избегая «раскачивания» этой величины.

ТРМ210: Функциональная схема прибора

Краткий экскурс в теорию закончен, вернёмся к практике и рассмотрим прибор ТРМ210, реализующий данный алгоритм.

Вот его функциональная схема:

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

Значение измеренной величины отображается на дисплее прибора.

Управляющее воздействие регулятора может быть импульсным или аналоговым. В первом случае управляющее воздействие регулятора заключается в изменении ширины генерируемых на выходе импульсов. Во втором случае регулятор выдаёт сигнал унифицированного напряжения в диапазоне 0…10 В или тока в диапазоне 4…20 мА. С помощью этих сигналов можно управлять практически любым устройством.

В ТРМ210 предусмотрен блок сигнализации, который сообщает о выходе физической величины за заданные пределы, замыкая дискретный выход, который, например, может «зажигать» лампу «Авария».

Также в приборе имеется блок регистратора, который может передавать измеренное значение физической величины любому другому прибору или устройству с помощью токового сигнала 4…20 мА.

В дополнение ко всему выше перечисленному регулятор имеет «на борту» интерфейс RS-485, который позволяет читать с прибора значения измеряемой величины, выходной мощности регулятора и любых конфигурируемых параметров. Это может пригодиться, если нужно передавать информацию о работе прибора в диспетчерский пункт.

Пример использования

Допустим, необходимо реализовать проветривание помещения следующим образом: чем больше температура внутри, тем больше нужно открыть окно. Для этого установим на окно привод, который будет плавно поворачиваться на заданный угол, а управляться будет сигналом тока 4…20 мА (такой управляющий сигнал поддерживают практически все подобные приводы). То есть, если подать на привод сигнал 4 мА — он полностью закроет окно, а 20 мА — полностью его откроет.

Для измерения температуры можно взять любой из поддерживаемых ТРМ210 — это практически любые термопары и любые датчики имеющие унифицированные выходы 0…10 В и 4…20 мА.

Настройка ПИД-регулятора

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

До свидания! Читайте LAZY SMART.




lazysmart.ru

Оставить комментарий

avatar
  Подписаться  
Уведомление о