8-900-374-94-44
[email protected]
Slide Image
Меню

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

Содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

odinelectric.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

принцип работы, теория и практика

Содержание:

  1. Общие сведения о ПИД-регуляторе
  2. Три составляющих рабочего процесса ПИД-регулятора
  3. Теория и практика использования ПИД-устройств
  4. Видео: О PID регуляторе простым языком

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


Общие сведения о ПИД-регуляторе

Аббревиатура ПИД происходит от английского понятия PID, и расшифровывается как Proportional, Integral, Derivative. На русском языке это сокращение включает в себя три компонента или составляющие: пропорциональную, интегрирующую, дифференцирующую.

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

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

  • Первый – с сигналом рассогласования.
  • Второй – с интегралом сигнала рассогласования.
  • Третий – с производной сигнала рассогласования.

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

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

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

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


Три составляющих рабочего процесса ПИД-регулятора

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

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

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

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

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


Теория и практика использования ПИД-устройств

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

1.

2.

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

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

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

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


electric-220.ru

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

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


Итак, что у нас имеется?

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

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

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

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

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

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

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

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

А с ней нам поможет справиться интегральная составляющая. Как нам в программе получить интеграл? А легко – просто суммированием (накоплением) значений невязки, на то он и интеграл ) Возвращаемся к нашему примеру. Температура ниже значения уставки, начинаем подогревать. Пока мы нагреваем, значение невязки положительное и накапливается в интегральной составляющей. Когда температура “дошла” до нужного нам значения, пропорциональная и дифференциальная составляющая стали равны нулю, а интегральная перестала изменяться, но ее значение не стало равным нулю. Таким образом, благодаря накопленному интегралу мы продолжаем выдавать мощность и нагреватель поддерживает нужную нам температуру, не давая объекту охлаждаться. Вот так вот просто и эффективно =)

В итоге мы получаем следующую формулу ПИД-регулятора:

Тут  u(t) – искомое выходное воздействие, а e(t) – значение невязки.

Частенько формулу преображают к следующему виду, но суть от этого не меняется:

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

microtechnics.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

Практические советы по настройке ПИД-регулятора

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

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

Задача настройки

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

Допустим текущая температура в помещении 10 °С, а мы хотим, чтобы было 25°С. Мы включаем регулятор и он начинает управлять мощностью обогревателя таким образом, чтобы температура достигла требуемого уровня. Посмотрим как это может выглядеть.

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

Чёрным цветом показан график изменения температуры в том случае, если коэффициенты подобраны совсем плохо. Система теряет устойчивость. Регулятор при этом идёт «в разнос» и температура «уходит» от заданного значения.

Рассмотрим более благоприятные случаи.

На этом рисунке показаны графики, далёкие от идеального. В первом случае наблюдается сильное перерегулирование:  температура слишком долго «скачет» относительно уставки, прежде чем достичь её. Во втором случае регулирование происходит плавно, но слишком медленно.

А вот и приемлемые кривые:

Данные кривые тоже не идеальны, но могут быть сочтены за удовлетворительные.

В процессе настройки регулятора, пользователю необходимо стремиться получить кривую, близкую к идеальной. Однако, в реальных условиях сделать это не так-то просто — приходится долго и мучительно подбирать коэффициенты. Поэтому зачастую останавливаются на «приемлемой» кривой регулирования. Например, в нашем примере нас могли бы устроить коэффициенты регулятора, при которых заданная температура достигалась бы за 15-20 минут с максимальным перерегулированием (максимальными «скачками» температуры) 2 °С. А вот время достижение уставки более часа и максимальные «скачки» температуры 5 °С — нас бы не устроили.

Далее поговорим о том, как подобрать коэффициенты для достижения оптимального регулирования. Рекомендуется настраивать коэффициенты в том же порядке, в котором это описано.

Настраиваем пропорциональный коэффициент

Выставляем дифференциальный и интегральный коэффициенты в ноль, тем самым убирая соответствующие составляющие. Пропорциональный коэффициент выставляем в 1.

Далее нужно задать значение уставки температуры отличное от текущей и посмотреть, как регулятор будет менять мощность обогревателя, чтобы достичь заданного значения. Характер изменения можно отследить «визуально», если у вас получится мысленно представить этот график. Либо можно регистрировать в таблицу измеренное значение температуры каждые 5-10 секунд и по полученным значением построить график. Затем нужно проанализировать полученную зависимость в соответствии с рисунком:

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

Настраиваем дифференциальный коэффициент

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

При появлении таких скачков необходимо прекратить увеличение дифференциального коэффициента.

Настраиваем интегральный коэффициент

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

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

Заключение

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


lazysmart.ru

ПИД-регулятор- полное описание, применение

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

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

Рис. 1

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

Рис. 2

 

Пропорциональное управление рассчитывается как произведение постоянного коэффициента Кpна текущую ошибку отклонения. Если включить в обратную связь нагревателя термосистемы только пропорциональное управление, требуемую температуру вообще невозможно достичь (Рис. 2). Это связано с инерционностью системы, так как управление нагревателем должно осуществляется с учетом динамики повышения температуры объекта.

Интегральное регулирование реализуется умножениясуммы ошибок температурдо текущего момента временина интегральный коэффициент KI. Для термосистем интегрирующее управление вполне может поддерживать заданную температуру(Рис. 3). Такое управление компенсирует запаздывание нагревание объекта и позволяет приблизиться к требуемому значению с большей или меньшей точностью. Для систем с меньшей инерционностью применения только интегрального управления неприменимо, так как запаздывание процесса накопления ошибки приведет к «вылетанию» регулируемого параметра и появлению колебаний.

Рис. 3

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

Рис. 4

В сумме, три компоненты ПИД регулятора обеспечивает получение эффективного результата в коротком промежутке времени (Рис. 4).

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

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

elektronchic.ru

Добавить комментарий

Ваш адрес email не будет опубликован.