Я видел много статей 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 ) = K p e ( k ) + K i T i ⋅ сумма + K d
будет оценивать по существу то же самое. Некоторые упоминают, что первое может быть реализовано в DSP или FPGA быстрее, но я этого не покупаю. Либо можно векторизовать. Первая требует двух почтовых операций, вторая требует одной предварительной и одной почтовой операций, поэтому, похоже, она выровнена. Первый также требует еще 1 умножения в реальном расчете.
Ответы:
Вы озадачены всей фантазией Z-преобразования. Два подхода в основном одинаковы - у подхода PID без PHD просто меньше подписчиков. Они выполняют одну и ту же основную функцию и используют одну и ту же базовую математику.
Единственное существенное различие между ними, которое я вижу, состоит в том, что PID без PHD не учитывает время выборки. Для выполнения всего, что может быть нестабильным, время выборки является очень важным фактором. Преимущество подхода Z-преобразования в этом случае состоит в том, что вы не можете использовать его, не принимая во внимание время выборки - он заставляет вас демонстрировать свою работу и помогает вам разработать более стабильную систему.
Выглядит также, что исследование, в котором вы реализовали подход Z-преобразования, было разработано, чтобы быть очень детерминированным. Это объясняет их использование ПЛИС - расчеты всегда будут занимать одинаковое количество времени. PID без реализации PHD определенно не является детерминированным. Использование значений типа double в качестве переменных вместо реализации с фиксированной запятой наверняка приведет к недетерминированному поведению на любом микроконтроллере без модуля с плавающей запятой (и, вероятно, на uC с FPU). Тематическое исследование работает на совершенно ином уровне сложности по сравнению с подходом PID без PHD.
Таким образом, в основном математический и контрольный подходы одинаковы, но подход «тематическое исследование / Z-преобразование» является более строгим и теоретически обоснованным. Подход PID без PHD будет работать только для очень простых, не критичных ко времени систем, которые относительно стабильны.
источник
Метод Z-преобразования при разработке ПИД-регулятора в конечном итоге даст гораздо более эффективную реализацию. Это очень важно, если вы разрабатываете самый маленький FPGA / DSP / микроконтроллер для своего приложения.
Упомянутый «PID без PHD», вероятно, является самым простым подходом к реализации контроля PID в программном обеспечении, но он становится громоздким при более высокой частоте дискретизации.
Кроме того, Z-преобразование лучше подходит для проектирования в дискретной (цифровой) области. Традиционный (преобразование Лапласа) метод проектирования больше для непрерывного времени. Существует несколько способов преобразования между ними (Удержание нулевого порядка, Линейная интерполяция, Расположение полюсов, Билинейный / Тустин), каждый из которых имеет свои сильные и слабые стороны с точки зрения стабильности и отклика системы. Как правило, просто сделать весь дизайн в дискретной области.
Короче говоря, если вы используете относительно «медленную» систему (все основные варианты поведения происходят значительно при частоте 100 кГц или около того), то первый дизайн, вероятно, просто хорош. Вы можете реализовать его на микроконтроллере или ПК и покончить с этим. Поскольку системы работают быстрее, вам, возможно, придется использовать метод Z-transform, чтобы получить необходимые вам скорости (в статье упоминается 9,5 МГц, при условии, что у вас есть аналого-цифровой и ЦАП, которые могут работать).
источник
Вот сделка, по моему опыту:
sum
") отдельно в своей собственной переменной состояния. Эта переменная состояния имеет значение. Первая реализация сохраняет переменную состояния как прошлую историю ошибки; это имеет значение, но, на мой взгляд, дает меньше понимания.Наконец, существуют другие проблемы, связанные с нелинейностью или анализом, которые часто заставляют вас выбирать одну реализацию вместо другой (для меня это всегда классический подход для контроллеров, для FIR-фильтров это Z-преобразование, а для 1- или 2-полюсных IIR-фильтров это обычно классический подход):
Для контроллеров я всегда сохраняю интегратор как переменную состояния, а не прошлые примеры ошибок. Причина заключается в том, что для реальных систем часто требуется антипробег, где необходимо зафиксировать интеграл от слишком положительного или слишком отрицательного значения. (И если вы реализуете в режиме с фиксированной запятой, вам все равно придется это делать, потому что условие обтекания при попадании в переполнение приведет к плохим вещам для поведения вашего цикла управления)
По той же причине я также всегда вычисляю интегратор способом, ориентированным на вывод: например,
sum += Ki*error; out = stuff + sum
вместоsum += error; out = stuff + Ki*sum
. При втором подходе, если вы измените коэффициент усиления Ki, это масштабирует влияние интегратора на выходной сигнал вверх и вниз, что, вероятно, не то, что вам нужно, и предел изменяется в зависимости от усиления. Если перед интеграцией вы умножаете ошибку на Ki, ваши единицы интегратора совпадают с единицами выходного сигнала контура управления, и это имеет более очевидный физический смысл.(обновление: я написал запись в блоге на эту тему более подробно.)
источник
Редактировать :
Использование Z-преобразования упрощает объединение и упрощение систем LTI для анализа . Например, каскадный ряд k систем LTI с передаточными функциями H1, H2, ..., Hk будет объединяться как простой продукт
H = H1*H2*...*Hk
. Кроме того, передаточная функция петли отрицательной обратной связи имеет видT = G/(1 + G*H)
, где H находится на пути обратной связи. Когда у вас есть общая передаточная функция, вы можете анализировать стабильность (расположение полюсов) и производительность (переходные процессы, ошибки стационарного состояния), добавляя дополнительные фильтры и обратную связь для оптимизации дизайна.Для подсистем более высокого порядка вы можете разделить системную функцию и реализовать ее как серию каскадных биквад (т.е. с помощью пар нулей и полюсов, таких как комплексные сопряженные или повторяющиеся корни), что уменьшает нестабильность, вызванную квантованием. Биквад канонической формы:
источник
Сложность в контроллере PID - это не сам код. Проблемы на самом деле приходят при попытке оптимизировать контроллер. Конечно, вы можете использовать метод проб и ошибок и получить довольно приличный контроллер, но некоторые системы слишком сложны для метода проб и ошибок, чтобы их было легко выполнять. Эти же системы, как правило, нуждаются в очень хорошем контроллере, а не просто в приличном. В этом случае Z-преобразование гораздо проще анализировать.
Еще одна вещь, о которой стоит задуматься, это стабильность системы. Вы можете иметь дело с системой, в которой довольно сложно стать нестабильной, или даже если она это делает, это ничего не повредит. Но есть много систем, которые могут привести к катастрофическим результатам, если контроллер заставит его работать нестабильно. Z-преобразование - другое место, где намного легче идентифицировать, будут ли какие-либо проблемы.
И 1 последняя заметка. При анализе системы в целом вы должны получить уравнения для всех компонентов вашей системы. Конечно, вы можете получить его из PID без PhD, но если вы уже работали с ним в методе Z-преобразования, то гораздо меньше работы, которую вы должны выполнить.
Теперь, в качестве личного предпочтения, я всегда использую метод PID без PhD. Это просто потому, что я просто использую микроконтроллеры с системами, которые не сильно зависят от контроллера.
источник
Есть несколько моментов, почему форма 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'.
И это 2p2z FDE:
DSP, как правило, имели только умножение и сложение (не умножение и вычитание), поэтому вы можете увидеть отрицание, свернутое в коэффициенты a []. Добавьте больше b для большего числа полюсов, добавьте больше a для большего числа нулей.
источник
В целом, лучше использовать метод Z-преобразования, потому что таким образом вы сохраняете точное поведение эквивалентной аналоговой системы. Существуют хорошо известные методы настройки, такие как Циглера-Николса, которые работают в аналоговой области так же, как опубликовано. Если вы используете метод Z-преобразования, у вас будет математически строгое ожидание, что ваш результирующий контроллер будет делать то же самое для тех же значений коэффициентов усиления P, I и D, что он будет делать в аналоговой области с учетом этих коэффициентов усиления. Кроме того, вы можете нарисовать дискретный корневой локус для системы и прогнозировать стабильность для заданного набора коэффициентов усиления, что невозможно, если вы создаете специальный контроллер непосредственно в коде.
источник