В чем преимущество реализации PID, полученной из Z-преобразования?

29

Я видел много статей PID, таких как эта , использующая Z-преобразование общего уравнения PID, чтобы получить какое-то безумное разностное уравнение, которое затем может быть реализовано в программном обеспечении (или в данном случае FPGA). Мой вопрос: в чем преимущество такой реализации по сравнению с традиционным и гораздо более интуитивным, PID без PhDреализация типа? Второй, кажется, легче понять и реализовать. Член P - прямое умножение, интеграл использует текущую сумму, а производная оценивается путем вычитания предыдущей выборки из текущей выборки. Если вам нужно добавить такую ​​функцию, как интегральная защита Windup, это прямая алгебра. Попытка добавить встроенную защиту Windup или другие функции в алгоритм разностного типа, такой как приведенный выше, выглядит намного сложнее. Есть ли какая-либо причина использовать такую ​​реализацию, кроме права на хвастовство типа «Я плохая задница, который любит делать Z-преобразования для удовольствия»?

РЕДАКТИРОВАТЬ: PID без статьи PHD, которую я связал, является примером более простой реализации, которая использует промежуточную сумму для интегрального термина и разницу между последовательными выборками для производного термина. Он может быть реализован с помощью математики с фиксированной точкой детерминистическим образом и может включать в себя информацию о постоянной времени в реальном времени в расчете, если это необходимо. Я в основном ищу практическое преимущество для метода Z-преобразования. Я не вижу, как это может быть быстрее или использовать меньше ресурсов. Вместо того, чтобы хранить текущую сумму интеграла, метод Z, кажется, использует предыдущий вывод и вычитает предыдущие компоненты P и D (чтобы получить интегральную сумму вычислением). Поэтому, если кто-то не укажет на то, что мне не хватает, я приму комментарий AngryEE о том, что они по сути одинаковы.

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Спасибо за ответы. Я думаю, что я немного узнал о каждом из них, но в конце концов, думаю, что Angry прав, потому что это просто вопрос предпочтений. Две формы:

e(k-2)=e(k-1),

u(k)=u(k1)+Kp(e(k)e(k1)+KiTie(k)+KdTi(e(k)2e(k1)+e(k2))
u ( k - 1 ) = u ( k )
e(k2)=e(k1),e(k1)=e(k)
u(k1)=u(k)

или

u ( k ) = K p e ( k ) + K i T iсумма + K d

sum=sum+e(k)
e(k-1)=e(k)
u(k)=Kpe(k)+KiTisum+KdTi(e(k)e(k1))
e(k1)=e(k)

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

bt2
источник
Вы имели в виду «Дифференциальное уравнение»?
Кевин Вермеер
Я, должно быть, неправильно понял ваши комментарии, основываясь на этом отзыве, который я сделал по крайней мере. Я удалю свой комментарий!
Кортук
1
Пожалуйста, перейдите на dsp.stackexchange.com
Jason S

Ответы:

7

Вы озадачены всей фантазией Z-преобразования. Два подхода в основном одинаковы - у подхода PID без PHD просто меньше подписчиков. Они выполняют одну и ту же основную функцию и используют одну и ту же базовую математику.

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

Выглядит также, что исследование, в котором вы реализовали подход Z-преобразования, было разработано, чтобы быть очень детерминированным. Это объясняет их использование ПЛИС - расчеты всегда будут занимать одинаковое количество времени. PID без реализации PHD определенно не является детерминированным. Использование значений типа double в качестве переменных вместо реализации с фиксированной запятой наверняка приведет к недетерминированному поведению на любом микроконтроллере без модуля с плавающей запятой (и, вероятно, на uC с FPU). Тематическое исследование работает на совершенно ином уровне сложности по сравнению с подходом PID без PHD.

Таким образом, в основном математический и контрольный подходы одинаковы, но подход «тематическое исследование / Z-преобразование» является более строгим и теоретически обоснованным. Подход PID без PHD будет работать только для очень простых, не критичных ко времени систем, которые относительно стабильны.

AngryEE
источник
PID без статьи PHD является лишь примером более простой реализации, в которой для интеграла используется промежуточная сумма, а для производной - разность между последовательными выборками. В статье говорится, что время выборки должно быть согласованным. Время выборки может быть легко добавлено к вычислениям I и D, но в большинстве случаев это не делается в реальных вычислениях. Графический интерфейс контроллера (или другой интерфейс) представит пользователю термины I и D в секундах в зависимости от времени цикла.
bt2
@ bt2 это звучит так, как будто у вас очень специфический случай, когда PID без PhD - лучший подход. Большинство систем никак не отображают термины I и D. Это результат ПИД-регулятора, который имеет некоторые изменения в системе в целом, которые затем возвращаются на себя. Если вы просто показываете пользователю, то нет никаких причин беспокоиться о стабильности.
Kellenjb
«Подход PID без PHD будет работать только очень просто», - не согласен я. Вы можете определенно оптимизировать цифровые системы управления, используя анализ Z-преобразования, но, с другой стороны, вы можете погрузиться в моделирование вашей системы настолько точно, что вы пропустите лес за деревьями.
Джейсон С
10

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

Упомянутый «PID без PHD», вероятно, является самым простым подходом к реализации контроля PID в программном обеспечении, но он становится громоздким при более высокой частоте дискретизации.

Кроме того, Z-преобразование лучше подходит для проектирования в дискретной (цифровой) области. Традиционный (преобразование Лапласа) метод проектирования больше для непрерывного времени. Существует несколько способов преобразования между ними (Удержание нулевого порядка, Линейная интерполяция, Расположение полюсов, Билинейный / Тустин), каждый из которых имеет свои сильные и слабые стороны с точки зрения стабильности и отклика системы. Как правило, просто сделать весь дизайн в дискретной области.

Короче говоря, если вы используете относительно «медленную» систему (все основные варианты поведения происходят значительно при частоте 100 кГц или около того), то первый дизайн, вероятно, просто хорош. Вы можете реализовать его на микроконтроллере или ПК и покончить с этим. Поскольку системы работают быстрее, вам, возможно, придется использовать метод Z-transform, чтобы получить необходимые вам скорости (в статье упоминается 9,5 МГц, при условии, что у вас есть аналого-цифровой и ЦАП, которые могут работать).

mjcarroll
источник
1
Одинаковое количество математических операций, разное представление чисел. Двойные числа представляют собой гораздо более сложное представление чисел, чем метод с фиксированной запятой, использованный в тематическом исследовании. Менее сложный означает меньше операций (на кремнии).
AngryEE
2
@ bt2, я бы сказал, более эффективно в том смысле, что микросхемы DSP настроены на наборы команд SIMD (Single Instruction, Multiple Data). Несмотря на то, что это одно и то же число математических операций, Z-преобразование позволяет вам выполнить все умножения за один цикл инструкций, а затем суммировать все элементы результирующего вектора за один цикл (зависит от платформы). Таким образом, хотя математика та же, сложность времени значительно ниже, что приводит к более быстрому ускорению.
mjcarroll
1
@ bt2 z-форма пригодна для реализации в виде разностного уравнения, которое зависит только от прошлых выходных данных и текущего входного сигнала, не требуя промежуточной суммы, которая в какой-то момент будет переполнена (или опустится). DSP предназначены для эффективной реализации цифровых фильтров с помощью подхода на основе разностных уравнений. См. En.wikipedia.org/wiki/Digital_filter esp. прямые формы - это то, для чего оптимизированы DSP.
свободное пространство
1
Я думаю, что вы что-то упустили. Промежуточная сумма никогда не будет переполнена при нормальных обстоятельствах. БИХ-фильтры не всегда насыщают, и в случае ПИД-регулятора это обычно не происходит. Сказать, что это будет с одним алгоритмом, но не с другим, - неверно. Промежуточная сумма также основана на предыдущих результатах. Если один вызывает переполнение, они оба будут. Подумайте об этом таким образом, 2-я имплантация является первой, с некоторой математикой с учетом ... u (k-1) - kp (e (k-1) - kd / Ti (e (k-1) - e ( k-2) == (текущая сумма).
bt2
1
-1: Z-преобразования не дают вам более эффективной реализации. Фактически, если вы сравните 1-полюсный фильтр нижних частот, используя «наивный» цифровой метод, с 1-полюсным фильтром нижних частот, используя билинейное преобразование, вы получите немного менее эффективную реализацию с этим подходом. Независимо от вывода фильтра, одинаковое количество переменных состояния = примерно одинаковая эффективность реализации. По большей части это не зависит от того, как был разработан фильтр.
Джейсон С
5

Вот сделка, по моему опыту:

  • Z-преобразования помогают в некотором анализе: теория дискретно-временных систем лучше всего моделируется с помощью Z-преобразований.
  • Проектирование ПИД-контроллеров или фильтров нижних частот может быть выполнено как с помощью Z-преобразований, так и с помощью классического анализа, причем одно из нескольких приближений используется для преобразования производных / интегралов из непрерывного в дискретное время. Если ваши полюсы и нули находятся на низких частотах по сравнению с частотой дискретизации, это не имеет значения. Придерживайтесь любого подхода, в котором вы чувствуете себя наиболее уверенно.
  • Вывод фильтров и контроллеров с помощью Z-преобразования часто скрывает физический смысл параметров этих фильтров и контроллеров. Если у меня есть ПИД-регулятор с интегральным усилением, пропорциональным усилением и дифференциальным усилением, я знаю, что делает каждый из этих параметров напрямую. Если я использую Z-преобразования, это просто числа, которые мне нужно было как-то вывести.
  • Реализация фильтров и контроллеров может скрывать или не скрывать физический смысл параметров этих фильтров и контроллеров. Это качество в значительной степени не зависит от предыдущего пункта: если у меня есть дизайн, основанный на Z-преобразовании, я могу преобразовать его в классическую реализацию и наоборот. Ваш пример под FINAL EDIT хорош, потому что вторая реализация сохраняет интегратор (" sum") отдельно в своей собственной переменной состояния. Эта переменная состояния имеет значение. Первая реализация сохраняет переменную состояния как прошлую историю ошибки; это имеет значение, но, на мой взгляд, дает меньше понимания.

Наконец, существуют другие проблемы, связанные с нелинейностью или анализом, которые часто заставляют вас выбирать одну реализацию вместо другой (для меня это всегда классический подход для контроллеров, для FIR-фильтров это Z-преобразование, а для 1- или 2-полюсных IIR-фильтров это обычно классический подход):

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

  • По той же причине я также всегда вычисляю интегратор способом, ориентированным на вывод: например, sum += Ki*error; out = stuff + sumвместо sum += error; out = stuff + Ki*sum. При втором подходе, если вы измените коэффициент усиления Ki, это масштабирует влияние интегратора на выходной сигнал вверх и вниз, что, вероятно, не то, что вам нужно, и предел изменяется в зависимости от усиления. Если перед интеграцией вы умножаете ошибку на Ki, ваши единицы интегратора совпадают с единицами выходного сигнала контура управления, и это имеет более очевидный физический смысл.

(обновление: я написал запись в блоге на эту тему более подробно.)

Джейсон С
источник
4

Редактировать :

Использование Z-преобразования упрощает объединение и упрощение систем LTI для анализа . Например, каскадный ряд k систем LTI с передаточными функциями H1, H2, ..., Hk будет объединяться как простой продукт H = H1*H2*...*Hk. Кроме того, передаточная функция петли отрицательной обратной связи имеет вид T = G/(1 + G*H), где H находится на пути обратной связи. Когда у вас есть общая передаточная функция, вы можете анализировать стабильность (расположение полюсов) и производительность (переходные процессы, ошибки стационарного состояния), добавляя дополнительные фильтры и обратную связь для оптимизации дизайна.

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

секция биквад

Eryk Sun
источник
Ваш ответ звучит впечатляюще, но я почти не знаю, что вы сказали. Например, что такое стабильность квантования и как она лучше для одной формы уравнения, чем для другой?
bt2
1
Передаточная функция H (z) является рациональной функцией B (z) / A (z). Каждый многочлен от z является фактором N нулей для системы N-го порядка. Нули A (z), те, что в знаменателе, называются полюсами (это путь обратной связи). С постоянным коэффициентом масштабирования система инварианта линейного времени (LTI) описывается своими нулями и полюсами.
Eryk Sun
1
Система LTI с дискретным временем стабильна, если все ее полюсы находятся внутри единичного круга на плоскости z. Но квантование с конечной цифровой точностью вносит шум, который может привести к тому, что система будет незначительно стабильной, нестабильной или со временем станет нестабильной. Путем разложения H (z) на произведение биквадратиков (биквад), этот вид ошибки минимизируется.
Eryk Sun
2
Биквад является предпочтительным минимальным разбиением, поскольку нули многочлена с вещественными коэффициентами являются действительными или парами комплексных сопряженных. Биквада B (z) / A (z) имеет вид (b0 + b1z ^ -1 + b2z ^ -2) / (a0 + a1z ^ -1 + a2z ^ -2).
Eryk Sun
Я добавил, а затем удалил пример шума квантования, сравнивающего каскадный квадратик с прямым поли 4-го порядка. Но это было слишком много. Мне нужно немного поспать. Извини, тыблу.
Eryk Sun
3

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

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

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

Теперь, в качестве личного предпочтения, я всегда использую метод PID без PhD. Это просто потому, что я просто использую микроконтроллеры с системами, которые не сильно зависят от контроллера.

Kellenjb
источник
2

Есть несколько моментов, почему форма Z-преобразования имеет большую полезность.

Спросите любого, кто продвигает основанный на времени / простой / sans-PHD подход, для чего установлен их термин Kd. Они, скорее всего, ответят «ноль» и скажут, что D нестабильно (без фильтра нижних частот). До того, как я узнал, как все это складывается, я бы сказал и говорил такие вещи.

Настройка Kd затруднена во временной области. Когда вы видите передаточную функцию (Z-преобразование подсистемы PID), вы можете легко увидеть, насколько она стабильна. Вы также можете легко увидеть, как термин D влияет на контроллер по сравнению с другими параметрами. Если ваш параметр Kd добавляет 0,00001 к коэффициентам z-полинома, но ваш член Ki составляет 10,5, то ваш член D слишком мал, чтобы оказать реальное влияние на систему. Вы также можете увидеть баланс между терминами Kp & Ki.

DSP предназначены для расчета конечно-разностных уравнений (FDE). У них есть коды операций, которые будут умножать коэффициент, суммировать с накопителем и сдвигать значение в буфере за один цикл команд. Это использует параллельную природу FDE. Если у машины нет этого кода операции ... это не DSP. Встроенные PowerPC (MPC) имеют периферийное устройство, предназначенное для расчета FDE (они называют это блоком децимации). DSP предназначены для вычисления FDE, потому что преобразовать передаточную функцию в FDE тривиально. 16-битный динамический диапазон не вполне достаточен, чтобы легко квантовать коэффициенты. По этой причине многие ранние DSP фактически имели 24-битные слова (я считаю, что 32-битные слова сегодня распространены).

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

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

Если вы используете нормализованные значения, [-1 .. 1] или [0 ... 1], для заданного значения (задания), обратной связи и прямой связи, то вы можете реализовать один 2-полюсный 2-нулевой алгоритм в оптимизированная сборка DSP, и вы можете использовать ее для реализации любого фильтра 2-го порядка, который включает в себя PID и самый базовый фильтр нижних частот (или верхних частот). Вот почему у DSP есть коды операций, которые предполагают нормализованные значения, например, тот, который будет выводить оценку обратного квадратного корня для диапазона (0..1). Вы можете поместить два фильтра 2p2z в ряд и создать фильтр 4p4z, это позволяет чтобы вы могли использовать свой код DSP 2p2z, скажем, для реализации фильтра Баттерворта с 4 касаниями.

Большинство реализаций во временной области преобразуют термин dt в параметры PID (Kp / Ki / Kd). Большинство реализаций z-домена этого не делают. dt вводится в уравнения, которые принимают Kp, Ki и Kd и превращают их в коэффициенты [] и b [], так что ваша калибровка (настройка) ПИД-регулятора теперь не зависит от скорости управления. Вы можете заставить его работать в десять раз быстрее, используя математические вычисления a [] и b [], и ПИД-регулятор будет иметь стабильную производительность.

Естественным результатом использования FDE является то, что алгоритм неявно «без сбоев». Вы можете изменять усиления (Kp / Ki / Kd) на лету во время работы, и это хорошо ведет себя - в зависимости от реализации во временной области это может быть плохо.

Как правило, много усилий затрачивается на ПИД-контроллеры во временной области, чтобы предотвратить интегральный запуск. Есть простая хитрость с формой FDE, которая заставляет PID вести себя хорошо, вы можете зафиксировать его значение в буфере истории. Я не делал математики, чтобы увидеть, как это влияет на поведение фильтра (в отношении параметров Kp / Ki / Kd), но эмпирический результат заключается в том, что он «гладкий». Это эксплуатирует «безотказную» природу формы FDE. Модель прямой связи помогает предотвратить интегральное свертывание, а использование термина D помогает сбалансировать термин I. PID действительно не работает как задумано с усилением D. (Заданные значения поворота - еще одна ключевая функция, предотвращающая чрезмерное наматывание.)

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

Промышленный инструмент де-факто - Simulink (в нем отсутствует система компьютерной алгебры, CAS, поэтому вам нужен еще один инструмент для получения общих уравнений). MathCAD или wxMaxima - это решатели символов, которые вы можете использовать на ПК, и я узнал, как это сделать с помощью калькулятора TI-92. Я думаю, что TI-89 также имеет систему CAS.

Вы можете посмотреть уравнения z-области или области Лапласа в Википедии для PID и фильтров нижних частот. Здесь есть шаг, который я не придумываю, я полагаю, что вам нужна форма PID контроллера в дискретной временной области, а затем нужно выполнить его z-преобразование. Преобразование Лапласа должно быть очень похоже на z-преобразование и задано как PID {s} = Kp + Ki / s + Kd · s. Я думаю, что z-преобразование лучше учитывает Dt в следующих уравнениях. Dt - это delta-t [ime], я использую Dt, чтобы не путать эту константу с производной 'dt'.

b[0] = Kp + (Ki*Dt/2) + (Kd/Dt)
b[1] = (Ki*Dt/2) - Kp - (2*Kd/Dt)
b[2] = Kd/Dt

a[1] = -1
a[2] = 0

И это 2p2z FDE:

y[n] = b[0]·x[n] + b[1]·x[n-1] + b[2]·x[n-2] - a[1]·y[n-1] - a[2]·y[n-2]

DSP, как правило, имели только умножение и сложение (не умножение и вычитание), поэтому вы можете увидеть отрицание, свернутое в коэффициенты a []. Добавьте больше b для большего числа полюсов, добавьте больше a для большего числа нулей.

Шеннон Дж Барбер
источник
1

В целом, лучше использовать метод Z-преобразования, потому что таким образом вы сохраняете точное поведение эквивалентной аналоговой системы. Существуют хорошо известные методы настройки, такие как Циглера-Николса, которые работают в аналоговой области так же, как опубликовано. Если вы используете метод Z-преобразования, у вас будет математически строгое ожидание, что ваш результирующий контроллер будет делать то же самое для тех же значений коэффициентов усиления P, I и D, что он будет делать в аналоговой области с учетом этих коэффициентов усиления. Кроме того, вы можете нарисовать дискретный корневой локус для системы и прогнозировать стабильность для заданного набора коэффициентов усиления, что невозможно, если вы создаете специальный контроллер непосредственно в коде.

Фрэнк Рудольф
источник