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),
ou
u ( k ) = K p e ( k ) + K i T i ⋅ soma + K d
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.
Respostas:
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.
fonte
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).
fonte
Aqui está o acordo, na minha experiência:
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 + sum
vez desum += 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.)
fonte
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:
fonte
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.
fonte
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'.
E este é o 2p2z FDE:
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.
fonte
É 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.
fonte