Qual é a vantagem de uma implementação PID derivada da transformação Z?


29

Eu já vi muitos artigos do PID, como esse , usar uma transformação Z da equação genérica do PID para derivar alguma equação de diferença maluca que pode ser implementada no software (ou, neste caso, no FPGA). Minha pergunta é: qual é a vantagem de tal implementação em relação ao PID tradicional e muito mais intuitivo sem um doutoradotipo de implementação? O segundo parece mais fácil de entender e implementar. O termo P é multiplicação direta, a integral usa uma soma contínua e a derivada é estimada subtraindo a amostra anterior da amostra atual. Se você precisar adicionar um recurso, como a proteção Integral Windup, é uma álgebra direta. Tentar adicionar proteção Integral Windup ou outros recursos a um algoritmo de tipo de diferença, como o link acima, parece que seria muito mais complicado. Existe alguma razão para usar essa implementação, além dos direitos de se gabar do tipo "eu sou um idiota que gosta de fazer transformações em Z por diversão"?

EDIT: O PID sem um artigo PHD que eu vinculei é um exemplo da implementação mais simples que usa uma soma contínua para o termo integral e a diferença entre amostras consecutivas para o termo derivado. Pode ser implementado com matemática de ponto fixo de maneira determinística e pode incluir informações constantes em tempo real no cálculo, se desejado. Basicamente, estou procurando uma vantagem prática para o método de transformação Z. Não consigo ver como isso poderia ser mais rápido ou usar menos recursos. Em vez de manter uma soma contínua da integral, o método Z parece usar a saída anterior e subtrair os componentes P e D anteriores (para chegar à soma integral pelo cálculo). Portanto, a menos que alguém possa apontar algo que está faltando, aceitarei o comentário do AngryEE de que eles são essencialmente os mesmos.

EDIÇÃO FINAL: Obrigado pelas respostas. Acho que aprendi um pouco sobre cada um, mas, no final, acho que o Angry está correto, pois é apenas uma questão de preferência. As duas formas:

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

você(k)=você(k-1)+Kp(e(k)-e(k-1)+KEuTEue(k)+KdTEu(e(k)-2e(k-1)+e(k-2))
u ( k - 1 ) = u ( k )
e(k-2)=e(k-1),e(k-1)=e(k)
você(k-1)=você(k)

ou

u ( k ) = K p e ( k ) + K i T isoma + K d

soma=soma+e(k)
e(k-1)=e(k)
você(k)=Kpe(k)+KEuTEusoma+KdTEu(e(k)-e(k-1))
e(k-1)=e(k)

avaliará essencialmente a mesma coisa. Alguns mencionam que o primeiro pode ser implementado em um DSP ou FPGA mais rapidamente, mas eu não acredito nisso. Qualquer um pode ser vetorizado. O primeiro requer duas operações pós, o segundo requer uma pré e uma pós operação, portanto parece estar nivelado. O primeiro também requer mais 1 multiplicação no cálculo real.


Você quis dizer "equação diferencial"?
Kevin Vermeer

Devo ter entendido mal seus comentários, com base nesse feedback que fiz pelo menos. Vou remover o meu comentário!
Kortuk

1
Por favor, vá para dsp.stackexchange.com
Jason S

Respostas:


7

Você está ficando confuso com toda a fantasia da transformação Z. As duas abordagens são basicamente as mesmas - a abordagem PID sem PHD tem apenas menos subscritos. Eles executam a mesma função básica e usam a mesma matemática básica.

A única grande diferença entre as duas que eu vejo é que o PID sem PHD não leva em consideração o tempo de amostragem. Para fazer qualquer coisa que possa ser instável, o tempo de amostragem é uma consideração muito importante. O benefício da abordagem de transformação Z nesse caso é que você não pode usá-la sem levar em consideração o tempo de amostragem - obriga você a mostrar seu trabalho e ajuda a projetar um sistema mais estável.

Também parece que o estudo de caso que você encontrou ao implementar a abordagem de transformação Z foi projetado para ser altamente determinístico. Isso explica o uso de FPGAs - os cálculos sempre levarão a mesma quantidade de tempo. O PID sem implementação de PHD não é decididamente determinístico. O uso de dobros como variáveis, em vez de uma implementação de ponto fixo, certamente causará um comportamento não determinístico em qualquer microcontrolador sem uma unidade de ponto flutuante (e provavelmente em uCs com uma FPU). O estudo de caso está trabalhando em um nível totalmente diferente de complexidade em comparação com a abordagem PID sem PHD.

Portanto, fundamentalmente, a abordagem matemática e controle é a mesma, mas a abordagem de estudo de caso / transformação Z é mais rigorosa e teoricamente fundamentada. A abordagem PID sem PHD funcionará apenas para sistemas muito simples e pouco críticos de tempo, relativamente estáveis.


O artigo PID sem um PHD é apenas um exemplo de implementação mais simples, que usa uma soma contínua para a integral e a diferença entre amostras consecutivas para a derivada. O artigo afirma que o tempo da amostra deve ser consistente. O tempo de amostragem pode ser facilmente adicionado aos cálculos de I e D, mas na maioria dos casos isso não é feito no cálculo real. A GUI do controlador (ou outra interface) apresentará os termos I e D ao usuário em termos de segundos com base no tempo do loop.
222

@ BT2, parece que você tem um caso muito específico em que o PID sem o PhD é a melhor abordagem. A maioria dos sistemas não exibe os termos I e D de forma alguma. É o resultado do controlador PID que tem alguma alteração no sistema como um todo e depois volta a si próprio. Se você está apenas exibindo para um usuário, não há realmente nenhum motivo para se preocupar com a estabilidade.
precisa saber é o seguinte

"A abordagem PID sem PHD funcionará apenas para muito simples" - discordo. Definitivamente, você pode otimizar os sistemas de controle digital usando a análise de transformação Z, mas o outro lado é que você pode modelar seu sistema de forma tão precisa que perde a floresta para as árvores.
Jason S

10

O método de transformação Z de projetar o controlador PID resultará em uma implementação muito mais eficiente. Isso é crítico se você estiver projetando para o menor FPGA / DSP / Microcontrolador para sua aplicação.

O "PID sem PHD" mencionado é provavelmente a abordagem mais fácil para implementar um controle PID em software, mas se torna complicado com taxas de amostragem mais altas.

Além disso, a transformação Z se presta melhor ao design em um domínio discreto (digital). O método tradicional de design (transformada de Laplace) é mais para o tempo contínuo. Existem várias maneiras de converter entre as duas (Retenção de ordem zero, Interpolação linear, Posicionamento de pólos, Bilinear / Tustin), cada uma delas traz suas vantagens e desvantagens em termos de estabilidade e resposta do sistema. Geralmente, é mais fácil executar todo o design no domínio discreto.

Para encurtar a história, se você estiver usando um sistema relativamente "lento" (todos os principais comportamentos ocorrem significativamente abaixo de 100kHz), então o primeiro design provavelmente está bem. Você pode implementá-lo em um microcontrolador ou PC e pronto. À medida que os sistemas ficam mais rápidos, pode ser necessário usar o método de transformação Z para obter as velocidades necessárias (o artigo menciona 9,5MHz, supondo que você tenha A / D e DACs que possam acompanhar).


1
Mesmo número de operações matemáticas, representação diferente de números. Duplos são uma representação de números muito mais complexa do que o método de ponto fixo usado no estudo de caso. Menos complexo significa menos operações (no silício).
precisa saber é o seguinte

2
@ BT2, eu diria que é mais eficiente no sentido de que os chips DSP estão configurados para conjuntos de instruções SIMD (Instrução Única, Vários Dados). Embora seja o mesmo número de operações matemáticas, a transformação Z permite fazer todas as multiplicações em um ciclo de instrução e somar todos os elementos do vetor resultante em um ciclo (dependente da plataforma). Portanto, embora a matemática seja a mesma, a complexidade do tempo é significativamente menor, resultando em acelerações mais altas.
mjcarroll

1
@ bt2 a forma z se presta à implementação como uma equação de diferença, que depende apenas das saídas passadas e da entrada atual, sem a necessidade de uma soma contínua que em algum momento transbordará (ou subexplorará). Os DSPs são projetados para permitir a implementação eficiente de filtros digitais através da abordagem da equação das diferenças. Veja en.wikipedia.org/wiki/Digital_filter esp. formulários diretos - é para isso que os DSPs são otimizados.
freespace 23/01

1
Eu acho que você está perdendo alguma coisa. A soma corrente nunca excederá em circunstâncias normais. Os filtros IIR nem sempre são saturados e, no caso de um controle PID, isso normalmente não será o caso. Dizer que sim com um algoritmo, mas não com outro é falso. A soma corrente também é baseada em resultados anteriores. Se alguém causa excesso, os dois causam. Pense dessa maneira: a 2ª implantação É a primeira, com algumas matemáticas fatoradas ... u (k-1) - kp (e (k-1) - kd / Ti (e (k-1) - e ( k-2) == (soma de execução).
bt2 23/01

1
-1: as transformações Z não oferecem uma implementação mais eficiente. De fato, se você comparar um filtro passa-baixo de 1 pólo usando o método digital "ingênuo" a um filtro passa-baixo de 1 pólo usando a transformação bilinear, obterá uma implementação um pouco menos eficiente com essa abordagem. Independentemente da derivação do filtro, o mesmo número de variáveis ​​de estado = aproximadamente a mesma eficiência da implementação. Em grande parte, é uma quantidade independente da maneira como o filtro foi projetado.
Jason S

5

Aqui está o acordo, na minha experiência:

  • As transformações Z ajudam a algumas análises: a teoria dos sistemas com amostragem no tempo discreto é melhor modelada através das transformações Z.
  • O projeto de controladores PID ou filtros passa-baixo pode ser feito tanto por transformações Z quanto por análises clássicas, com uma das várias aproximações usadas para transformar derivadas / integrais de tempo contínuo em tempo discreto. Se seus pólos e zeros estão em baixas frequências em comparação com a taxa de amostragem, isso não importa. Continue com qualquer abordagem com a qual você se sinta mais confiante.
  • A derivação da transformação Z de filtros e controladores geralmente obscurece o significado físico dos parâmetros desses filtros e controladores. Se eu tenho um loop PID com um ganho integral, um ganho proporcional e um ganho diferencial, sei o que cada um desses parâmetros faz diretamente. Se eu usar transformações Z, são apenas números que eu tive que derivar de alguma forma.
  • A implementação de filtros e controladores pode ou não obscurecer o significado físico dos parâmetros desses filtros e controladores. Essa qualidade é em grande parte independente do ponto anterior: se eu tiver um design baseado em transformação Z, posso convertê-lo em uma implementação de aparência clássica e vice-versa. Seu exemplo em FINAL EDIT é bom porque a segunda implementação mantém o integrador (" sum") separado em sua própria variável de estado. Essa variável de estado tem significado. A primeira implementação mantém a variável de estado como histórico passado do erro; isso tem significado, mas fornece menos insights na minha opinião.

Finalmente, existem outros problemas envolvendo não linearidade ou análise que geralmente fazem você escolher uma implementação em detrimento de outra (para mim é sempre a abordagem clássica para controladores, para filtros FIR é a transformação Z e para filtros IIR de 1 ou 2 pólos geralmente é o abordagem clássica):

  • Para controladores, eu sempre mantenho um integrador como uma variável de estado, em vez de exemplos de erros anteriores. A razão é que os sistemas reais geralmente exigem anti-corda, onde é necessário impedir que a integral seja positiva ou negativa demais. (E se você estiver implementando em ponto fixo, precisará fazer isso de qualquer maneira, porque a condição envolvente quando você exceder o limite fará coisas ruins ao comportamento do seu loop de controle)

  • Pelo mesmo motivo, também sempre calculo o integrador de uma maneira referente à saída: por exemplo, em sum += Ki*error; out = stuff + sumvez de sum += error; out = stuff + Ki*sum. Com a segunda abordagem, se você alterar o ganho Ki, isso dimensiona o efeito do integrador na saída para cima e para baixo, o que provavelmente não é o que você deseja, e o limite muda dependendo do ganho. Se você multiplicar o erro por Ki antes da integração, suas unidades do integrador serão as mesmas da saída do loop de controle e terão um significado físico mais óbvio.

(atualização: escrevi uma entrada de blog sobre este tópico em mais detalhes.)


4

Editar :

O uso da transformação Z facilita a combinação e a simplificação dos sistemas LTI para análise . Por exemplo, uma série em cascata de sistemas k LTI com funções de transferência H1, H2, ..., Hk será combinada como um produto simples H = H1*H2*...*Hk. Além disso, a função de transferência de um loop de feedback negativo é T = G/(1 + G*H), onde H está no caminho de feedback. Depois de ter uma função geral de transferência, é possível analisar a estabilidade (localização dos polos) e o desempenho (transitórios, erro em estado estacionário), adicionando filtros e feedback adicionais para otimizar o design.

Para subsistemas de ordem superior, é possível particionar a função do sistema e implementá-la como uma série de biquads em cascata (ou seja, por pares de zeros e pólos, como conjugados complexos ou raízes repetidas), o que diminui a instabilidade causada pela quantização. Um biquad de forma canônica:

seção biquad


Sua resposta parece impressionante, mas não faço ideia do que você disse. O que é estabilidade de quantização, por exemplo, e como é superior para uma forma da equação que a outra?
BT2

1
A função de transferência H (z) é uma função racional B (z) / A (z). Cada polinômio em z é um fator de N zeros para um sistema de enésima ordem. Os zeros de A (z), os do denominador, são chamados de pólos (este é o caminho de feedback). Para um fator de escala constante, um sistema Linear Time Invariant (LTI) é descrito por seus zeros e pólos.
Eryk Sun

1
Um sistema LTI em tempo discreto é estável se todos os seus polos estiverem dentro do círculo da unidade no plano z. Mas a quantização com precisão digital finita introduz ruídos que podem fazer com que um sistema seja marginalmente estável, instável ou instale a instabilidade ao longo do tempo. Ao fatorar H (z) em um biquadratics de produto (biquads), esse tipo de erro é minimizado.
Eryk Sun

2
Um biquad é a partição mínima preferida, já que os zeros de um polinômio com coeficientes reais são reais ou em pares de conjugados complexos. O biquad B (z) / A (z) é (b0 + b1z ^ -1 + b2z ^ -2) / (a0 + a1z ^ -1 + a2z ^ -2).
Eryk Sun

Eu adicionei e removi um exemplo para o ruído de quantização comparando um quadrático em cascata com um poli direto de 4ª ordem. Mas foi demais. Eu preciso dormir um pouco. Desculpe, tyblu.
Eryk Sun

3

A parte difícil de um controlador PID não é o código em si. Os problemas realmente surgem ao tentar otimizar o controlador. Claro que você pode tentar e obter um controlador decente, mas alguns sistemas são complexos demais para que um método de tentativa e erro seja fácil de executar. Esses mesmos sistemas tendem a ser os que precisam de um controlador muito bom, em vez de apenas um decente. Nesse caso, a transformação Z é muito mais fácil de analisar.

Outra coisa a se pensar é a estabilidade de um sistema. Você pode estar lidando com um sistema que é bastante difícil de se tornar instável ou, mesmo que isso aconteça, não prejudica nada. Mas existem muitos sistemas que podem ter resultados catastróficos se o controlador causar instabilidade. A transformação Z é outro local onde é muito mais fácil identificar se haverá algum problema.

E uma nota final. Ao analisar um sistema como um todo, você terá que obter equações para todos os componentes em seu sistema. Certamente, você pode obtê-lo no PID sem um doutorado, mas se você já estiver trabalhando com ele no método de transformação Z, há muito menos trabalho para a frente e para trás.

Agora, como preferência pessoal, eu sempre uso o PID sem o método de doutorado. Isso ocorre apenas porque estou usando microcontroladores com sistemas que não dependem muito do controlador.


2

Existem vários pontos pelos quais a forma de transformação Z tem maior utilidade.

Pergunte a qualquer pessoa que promova a abordagem baseada no tempo / simples / sans-PHD a que definir o termo Kd. É provável que respondam 'zero' e digam que D é instável (sem um filtro passa-baixo). Antes de aprender como tudo isso acontece, eu diria e disse essas coisas.

O ajuste do Kd é difícil no domínio do tempo. Quando você pode ver a função de transferência (a transformação Z do subsistema PID), você pode ver rapidamente como é estável. Você também pode ver facilmente como o termo D está afetando o controlador em relação aos outros parâmetros. Se o seu parâmetro Kd contribui com 0,00001 para os coeficientes z-polinomiais, mas o seu termo Ki está em 10,5, então o seu termo D é muito pequeno para ter um efeito real no sistema. Você também pode ver o equilíbrio entre os termos Kp & Ki.

Os DSPs são projetados para calcular equações de diferenças finitas (FDE). Eles têm códigos operacionais que multiplicam um coeficiente, somam um acumulador e mudam um valor em um buffer em um ciclo de instrução. Isso explora a natureza paralela das FDEs. Se a máquina não possui esse código operacional ... não é um DSP. Os PowerPCs incorporados (MPC) têm um periférico dedicado ao cálculo dos FDEs (eles chamam de unidade de dizimação). Os DSPs são projetados para calcular FDEs porque é trivial transformar uma função de transferência em uma FDE. A faixa dinâmica de 16 bits não é suficiente para quantificar facilmente os coeficientes. Muitos dos primeiros DSPs realmente tinham palavras de 24 bits por esse motivo (acredito que palavras de 32 bits são comuns hoje em dia).

IIRC, a chamada transformação bilinear assume uma função de transferência (uma transformação z de um controlador de domínio do tempo) e a transforma em uma FDE. Provar que é 'difícil', usá-lo para obter um resultado é trivial - você só precisa da forma expandida (multiplique tudo) e os coeficientes polinomiais são os coeficientes FDE.

Um controlador PI não é uma ótima abordagem - uma abordagem melhor é criar um modelo de comportamento do sistema e usar o PID para correção de erros. O modelo deve ser simples e baseado na física básica do que você está fazendo. Este é o avanço no bloco de controle. Um bloco PID então corrige o erro usando feedback do sistema sob controle.

Se você usar valores normalizados, [-1 .. 1] ou [0 ... 1], para o ponto de ajuste (referência), feedback e feed-forward, poderá implementar um algoritmo 2-pólos 2-zero em conjunto DSP otimizado e você pode usá-lo para implementar qualquer filtro de 2ª ordem que inclua PID e o filtro passa-baixo (ou passa-alto) mais básico. É por isso que os DSPs têm códigos op que pressupõem valores normalizados, por exemplo, um que produz uma estimativa do quadrado inverso para o intervalo (0..1) Você pode colocar dois filtros 2p2z em série e criar um filtro 4p4z, isso permite você pode alavancar seu código DSP de 2p2z para, por exemplo, implementar um filtro Butterworth passa-baixo de 4 toques.

A maioria das implementações no domínio do tempo inclui o termo dt nos parâmetros PID (Kp / Ki / Kd). A maioria das implementações de domínio z não. dt é colocado nas equações que tomam Kp, Ki e Kd e as transformam em coeficientes [] e b [], de modo que sua calibração (ajuste) do controlador PID agora é independente da taxa de controle. Você pode fazê-lo rodar dez vezes mais rápido, aumentar a matemática a [] & b [] e o controlador PID terá um desempenho consistente.

Um resultado natural do uso do FDE é que o algoritmo é implicitamente "sem falhas". Você pode alterar os ganhos (Kp / Ki / Kd) on-the-fly durante a execução e é bem-comportado - dependendo da implementação no domínio do tempo, isso pode ser ruim.

Geralmente, é gasto muito esforço em controladores PID no domínio do tempo para impedir a conclusão integral. Existe um truque simples com o formulário FDE que faz com que o PID se comporte bem, você pode fixar seu valor no buffer do histórico. Eu não fiz as contas para ver como isso afeta o comportamento do filtro (em relação aos parâmetros Kp / Ki / Kd), mas o resultado empírico é que é "suave". Isso está explorando a natureza "sem falhas" do formulário da FDE. Um modelo de feed-forward contribui para impedir a conclusão integral e o uso do termo D ajuda a equilibrar o termo I. O PID realmente não funciona como pretendido com um ganho em D. (Os pontos de ajuste de giro são outro recurso importante para evitar o enrolamento excessivo.)

Por fim, as transformações Z são um tópico de graduação, não "Ph.D." Você deveria ter aprendido tudo sobre eles na Análise Complexa. É aqui que a universidade que você estuda, o instrutor que você tem e o esforço que você faz para aprender matemática e aprender a usar as ferramentas disponíveis pode fazer uma diferença significativa na sua capacidade de atuar na indústria. (Minha aula de Análise Complexa foi horrível.)

A ferramenta da indústria defacto é o Simulink (que não possui um sistema de álgebra computacional, CAS, então você precisa de outra ferramenta para desenvolver equações gerais). MathCAD ou wxMaxima são solucionadores simbólicos que você pode usar em um PC e aprendi como fazer isso usando uma calculadora TI-92. Eu acho que a TI-89 também tem um sistema CAS.

Você pode procurar equações de domínio z ou domínio laplace na wikipedia para filtros PID e passa-baixo. Há uma etapa aqui que eu não entendo, acredito que você precisa da forma de domínio discreto do controlador PID e, em seguida, precisa fazer a transformação z dele. A transformação laplace deve ser muito semelhante à transformação z e é dada como PID {s} = Kp + Ki / s + Kd · s Acho que a transformação z seria mais responsável pelos Dt nas equações a seguir. Dt é delta-t [ime], eu uso Dt para não confundir essa constante com uma derivada '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

E este é o 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]

Os DSPs normalmente tinham apenas uma multiplicação e adição (não uma multiplicação e subtração); portanto, você pode ver a negação acumulada nos coeficientes a []. Adicione mais b para mais pólos, adicione mais a para mais zero.


1

É melhor usar o método de transformação Z em geral, porque, ao fazer isso, você preserva o comportamento exato do sistema analógico equivalente. Existem métodos de ajuste bem conhecidos, como o Ziegler-Nichols, que funcionam no domínio analógico exatamente como publicado. Se você usar o método de transformação Z, você tem uma expectativa matematicamente rigorosa de que seu controlador resultante fará a mesma coisa pelos mesmos valores dos ganhos P, I e D, que ele fará no domínio analógico, dados esses ganhos. Além disso, você pode desenhar um locus raiz discreto para o sistema e prever a estabilidade para um determinado conjunto de ganhos, o que não é possível se você criar um controlador ad hoc diretamente no código.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.