Quais são as boas estratégias para ajustar loops PID?

55

Os ganhos do controlador de ajuste podem ser difíceis. Quais estratégias gerais funcionam bem para obter um sistema estável que converge para a solução certa?

Felix
fonte
11
Uma pergunta direcionada a uma pergunta mais específica seria mais útil. Caso contrário, você deve apenas olhar para o artigo PID , com uma seção sobre ajuste
ronalchn 26/10/12
2
Sempre achei os PIDs de ajuste muito dependentes das características do sistema, e é por isso que nunca achei os sistemas de auto-ajuste muito úteis. Eles são bons para uma primeira passagem, conjunto de parâmetros de baixo desempenho, mas estão longe de ser ótimos, e você terá o mesmo problema com qualquer estratégia geral que não seja otimizada para os aspectos mecânicos, elétricos e de controle de um determinado sistema.
Mark Booth

Respostas:

66

Para motores pequenos e de baixo torque, com pouca ou nenhuma engrenagem, um procedimento que você pode usar para obter uma boa sintonia da linha de base é sondar sua resposta a uma perturbação.

Para ajustar um PID, use as seguintes etapas:

  1. Defina todos os ganhos como zero.
  2. Aumente o ganho de P até que a resposta a uma perturbação seja oscilação constante.
  3. Aumente o ganho D até que as oscilações desapareçam (ou seja, seja amortecido criticamente).
  4. Repita as etapas 2 e 3 até o aumento do ganho D não interromper as oscilações.
  5. Defina P e D para os últimos valores estáveis.
  6. Aumente o ganho I até chegar ao ponto de ajuste com o número de oscilações desejado (normalmente zero, mas uma resposta mais rápida pode ser obtida se você não se importar com algumas oscilações de superação)

A perturbação que você usa depende do mecanismo ao qual o controlador está conectado. Normalmente, basta mover o mecanismo manualmente para longe do ponto de ajuste e liberá-lo. Se as oscilações aumentarem cada vez mais, será necessário reduzir o ganho de P.

Se você definir o ganho D muito alto, o sistema começará a vibrar (vibre com uma frequência mais alta que as oscilações do ganho P). Se isso acontecer, reduza o ganho D até que ele pare.

Eu acredito que essa técnica tem um nome. Vou colocá-lo aqui quando o encontrar.

hauptmech
fonte
2
Parece Ziegler-Nichols: en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
Throwback1986
11
@ Throwback1986, Isto é, sem dúvida não Ziegler-Nichols que utiliza apenas o ganho P e onde I e ganho D são então calculados em conformidade a partir do ganho P oscilante e o período de oscilação
dm76
Você tem conselhos adicionais para ajustar especificamente um braço de robô com várias articulações que precisam de ajuste? Você começa da base e trabalha para o efetor final, ou vice-versa, ou isso importa?
Adamconkey 21/10
11
Em um ambiente acadêmico ou industrial, você desejará um método de controle mais sofisticado. Para um hobbiest; a gravidade tem um efeito de amortecimento, então ajuste cada junta no ângulo em que a gravidade afeta menos os motores. Por exemplo, com o braço apontando para cima, para que a gravidade atue nos rolamentos e não no motor. Ordem não importa. Adicionar um termo de compensação de gravidade antecipada ao seu controle é provavelmente a melhoria mais fácil (use Newton-Euler recursivo para um braço serial) se você não conseguir o desempenho desejado.
hauptmech
A ferramenta pidtuner.com me deu melhores resultados do que o método Ziegler-Nichols, que tem várias desvantagens conhecidas; folk.ntnu.no/skoge/publications/2003/tuningPID/more/…
Juan Gonzalez Burgos
13

Um método experimental semelhante à resposta do hauptmech que me ensinaram na faculdade:

  1. Defina todos os ganhos como 0.
  2. Aumente K d até o sistema oscilar.
  3. Reduza K d por um fator de 2-4.
  4. Defina K p como cerca de 1% de K d .
  5. Aumente K p até o início das oscilações.
  6. Diminua K p por um fator de 2-4.
  7. Defina K i como cerca de 1% de K p .
  8. Aumente K i até o início das oscilações.
  9. Diminuir K i por um fator de 2-4.

O método Ziegler-Nichols é mais preciso se você puder obter um número exato para o período de oscilação. Geralmente, causa oscilações usando os números "clássicos do PID" dados, portanto nem sempre é o ideal.

Para regras gerais sobre o efeito de cada termo no tempo de subida, superação, tempo de acomodação, erro no estado estacionário e estabilidade, consulte a Tabela 1 de "Análise e Projeto do Sistema de Controle PID" , de Li, Ang e Chong nos Sistemas de Controle IEEE Revista.

Joe Baker
fonte
2
Kd primeiro? Eu sempre pensei que era melhor começar com Kp.
Rocketmagnet
Estou transcrevendo de slides antigos de palestras, se houver um bom motivo para não fazer dessa maneira, eu ficaria curioso para ouvi-lo.
Joe Baker
11
Esse é o algoritmo que eu defendo para o ajuste do "assento da calça". Isso o levará o mais perto possível, sem modelar o sistema ou medir sua resposta. (Modelar e / ou medir é o único caminho a percorrer se você realmente precisar da sintonia correta).
TimWescott
Ajustar o Kd primeiro não faz sentido para mim, pois em todos os PIDs implementados, o sinal de Kd é negativo. É usado para reduzir o sinal de controle quando ocorrem mudanças muito grandes nos erros, essencialmente prejudicando o sistema. Se você tiver apenas Kd, o sistema se moverá na direção oposta, aumentando o erro e agravando o problema. Se Kd for positivo, sempre que ocorrer uma grande mudança no erro na direção certa, você fará com que ela mude ainda mais rápido e supere seu alvo.
Andrew Capodieci
Na verdade, ajustar o ganho D primeiro faz algum sentido, mas estou assumindo que "aumentar" o ganho D significa aumentar o valor absoluto e apenas aumentar o amortecimento. O maior problema com o ganho D é que ele amplifica o ruído de alta frequência e é bom ver esse efeito sem o ganho P. Então, você está basicamente começando a procurar os ganhos nos quais ele para de se comportar como amortecimento e começa a amplificar o ruído e os sinais de erro atrasados. Estou assumindo que, para o passo 2, você precisa cutucar sua planta para ver se ela oscila.
DrRobotNinja
7

O Embedded.com mudou meu artigo mais uma vez, mas aqui é onde está agora. Isso mostra como escrever um loop PID (descobrir como fazê-lo em algo diferente de ponto flutuante é deixado como exercício para o leitor) e como ajustá-lo.

PID sem PhD

A melhor maneira depende muito de suas habilidades. A maneira de obter o melhor ajuste , supondo que você seja um experiente sistema de controle, é geralmente medir a resposta da planta ("planta" == "a coisa que você está controlando") e, em seguida, dependendo de como você fez o procedimento. as medições extraem um modelo da planta e o design para isso, ou apenas o design diretamente para as medições.

Para certas plantas difíceis, você descobrirá que nunca pode fazer medições satisfatórias; nesse caso, você deve seguir apenas os modelos. Essas são raras, mas satisfatórias quando você as faz trabalhar.

TimWescott
fonte
5

Sebastian Thrun apresentou um algoritmo simples para ajustar o PID em sua classe "Como programar um carro robótico". É chamado "twiddle", ele descreve aqui .

Twiddle é muito propenso a encontrar mínimos locais - isso significa que você pode criar um conjunto de três constantes que são boas, mas não ideais para a situação. O problema de ajustar as constantes do PID é um subconjunto de um problema de pesquisa mais geral para encontrar determinados parâmetros para maximizar a utilidade (nesse caso, minimizar o erro do algoritmo do PID). Você pode procurar outras soluções gerais para esse problema, como escaladas, recozimento simulado, algoritmos genéticos etc. que podem acabar encontrando soluções mais ideais.

Robz
fonte
4

Em contraste com as outras duas respostas, eu diria que uma boa maneira manual de ajustar um PID é ignorar o Kd. Portanto, comece em 0 e aumente Kp até chegar ao alvo e aumente Ki para se livrar do erro em estado estacionário.

O Kd pode confundir o problema, uma vez que responde mal ao ruído, então você começa a adicionar filtros na entrada analógica e, em seguida, questiona o que isso faz além de diminuir o controle e tornar a coisa toda mais difícil de resolver ...

Outra coisa que me confunde é se a equação do PID está na forma padrão ou em uma forma independente (paralela na wikipedia). O efeito de Ki parece inverso quando a forma está no caminho errado para o que você pensa que é. Ambos os tipos são usados ​​na automação, às vezes com a opção de alternar entre eles.

daniel
fonte
4

Modelagem do sistema

É claro que o ajuste experimental pode ser feito conforme mencionado nas outras respostas, mas se você conseguir definir um modelo dinâmico razoável para o que quiser controlar e identificar seus parâmetros , poderá projetar seu controlador com base em critérios definidos, como ultrapassagem , tempo de subida , tempo de acomodação , estado estacionário erro e assim por diante.

Existem até ferramentas no MATLAB que podem ajustar seu controlador para otimizar uma combinação desses critérios, o que o torna ainda melhor.

Conheça o seu controlador

Aprender o que cada parâmetro no controlador PID faz também é bastante útil. Todos os algoritmos experimentais são baseados nesse tipo de conhecimento de alguma forma. Se você não apenas seguir as instruções, mas conseguir sentir isso por conta própria, poderá achar mais fácil ajustar seu controlador manualmente.

Problemas do mundo real

Há uma chance de que uma dessas coisas, entre outras, fique no seu caminho ao ajustar seu controle: conclusão , taxa de amostragem inadequada , saturação .

Conclusão

No final, tudo depende do que você pode realmente fazer com seu sistema para obter algum conhecimento sobre como ele funciona e que tipo de experimentação pode ser feita. A melhor coisa é realmente aprender mais sobre controladores PID e teoria de controle em geral, IMO, mas sou tendenciosa :)

georgebrindeiro
fonte
Não entendo por que as pessoas continuam sugerindo heurísticas para ajustar o PID, enquanto atualmente nos são fornecidas muitas ferramentas automáticas para identificação de plantas e design de controladores que não exigem um profundo conhecimento teórico. Polegar para cima para esta resposta então.
Ugo Pattacini 23/01
3

Vou tentar expandir um pouco da minha experiência para aqueles que possam estar interessados. Acho que o problema é que temos muita teoria de controle que é um tanto inacessível (e às vezes não é útil) e, em seguida, temos regras práticas que fazem suposições sobre sistemas que geralmente são imprecisos.

Estabilidade

Vamos falar primeiro sobre por que os loops de controle se tornam instáveis. Para esta discussão, assumirei um sistema linear. Informalmente, isso significa que se o seu sinal de controle é uma onda senoidal em uma determinada frequência, sua saída observada está na mesma frequência e se você alterar a amplitude do seu sistema de controle, sua saída responde na mesma proporção. Essa suposição é uma boa aproximação para muitos sistemas do mundo real e permite observar isoladamente diferentes frequências.

Se você observar o caminho de controle, terá um ponto de ajuste, seu controlador PID, seu sistema (aka "Plant") e, em seguida, seu sensor. Imagine um ponto de ajuste fixo e uma onda senoidal do seu sensor (isso é igual a uma perturbação do mundo real no sensor, realimentada). Em um sistema instável, seu feedback faz com que o loop de controle amplifique o erro, em vez de reduzi-lo, de modo que, à medida que o tempo aumenta, sua amplitude aumenta. A razão pela qual isso ocorre é devido a um atraso ou, para essa frequência específica, uma mudança de fase entre a entrada e a saída. Para uma dada frequência, podemos observar o deslocamento e a amplitude do circuito aberto (ou seja, sem feedback) e, quando desenhamos todos aqueles em um gráfico, obtemos algo como um gráfico de Bode. Se temos uma situação neste gráfico de malha aberta em que o erro continua sendo amplificado, temos um sistema instável. Se o atraso for menor que 1/2 do comprimento de onda ou o ganho for menor que x1, o sistema permanecerá estável . Na prática, queremos uma margem a partir desse ponto (margem de ganho e margem de fase) e é por isso que você verá isso "recuando" em muitos dos métodos manuais / heurísticos.

O principal problema com esses métodos manuais é que você está voando às cegas e está praticamente garantido para obter um sistema de controle ruim.

Lembre-se também de que o significado P, I e D está relacionado ao que seu sensor está medindo e a qual controle você está aplicando. Um erro comum em controladores construídos em casa é que as pessoas pensem que estão aplicando P quando na verdade não estão. Os controladores de motor geralmente têm um loop de posição, passando por um loop de velocidade, passando por um loop de torque. (Uma cascata )

OK, mas como isso nos ajuda?

O primeiro ponto que eu gostaria de destacar é que, se você estiver construindo seu próprio controlador PID, também deve criar uma maneira de medir a resposta de loop aberto. Faça uma varredura de frequência na entrada do seu controlador e meça a saída do sensor com o feedback desconectado. Em seguida, você pode desenhar o gráfico Bode de loop aberto e ver por que seu sistema é estável e pode trocar os vários controles. Também é útil medir a resposta do loop fechado e você pode fazer isso com qualquer sistema fazendo uma varredura de frequência do seu ponto de ajuste enquanto o loop está fechado. Ambos não são tão difíceis e não exigem muito conhecimento teórico.

Se você estiver simplesmente ajustando os controles sem entender o que está acontecendo sob o capô, não poderá otimizar seu sistema. Construir alguma intuição sobre esses sistemas não é tão difícil. Por exemplo, o ganho proporcional não afeta a fase, mas simplesmente aumenta o ganho de malha aberta em todas as frequências. Então, o que você está fazendo quando aumenta o ganho proporcional em todos esses métodos de ajuste manual é encontrar a frequência em que a fase vai para -180. Veja isso para ter mais uma idéia do impacto dos vários controles na sua resposta de frequência.

Muitas vezes, obter o melhor desempenho do circuito fechado envolve ajustar o sistema e não apenas os ganhos do controlador. O que você deseja é tornar o sistema o mais "rígido" possível. Isso permitirá aumentar os parâmetros de controle e obter a melhor largura de banda de malha aberta e fechada. Na minha experiência em aplicações de controle motor, o ganho proporcional é aquele que deveria estar fazendo a maior parte do "trabalho" e o integrador o "descanso". Eu não acho que você precise de um termo D. Ter um filtro passa-baixo e um filtro de entalhe ajuda muito em situações em que você pode ter alguma ressonância mecânica, mas configurá-los sem um Gráfico de Bode é muito difícil (a frequência de oscilação observada no circuito fechado pode ser diferente da malha aberta).

Se a segurança é uma preocupação (motores muito potentes ou um sistema que pode ser destruído pelo motor fora de controle), você precisa colocar alguns limites antes de iniciar o ajuste (por exemplo, limite de corrente, erro máximo de posição) para proteger o sistema. Então você precisa ter algum tipo de percepção do alcance dos parâmetros. Se o seu feedback tiver 40 contagens por rotação ou 4000 contagens por rotação, seus parâmetros serão um fator de 100 para um determinado sistema. Minha abordagem seria primeiro encontrar um intervalo em que você tenha pouca capacidade de controle e, a partir daí, começar com P e depois eu (embora novamente você esteja voando às cegas). Recuar cria essa margem de estabilidade.

Além do circuito fechado

O loop fechado tenta remover o erro do sistema. Sempre terá um desempenho um pouco limitado. O que você deseja fazer é minimizar o erro que seu controlador de loop fechado vê e uma maneira de fazer isso é através de uma técnica chamada feed forward. No feed-forward, você percorre o controlador e aciona um comando diretamente no sistema. Um exemplo disso seria o feed-forward da aceleração. Se você sabe que o torque do motor é constante e conhece a carga, é possível saber a quantidade de corrente necessária para obter uma certa aceleração da carga. Você simplesmente pega a aceleração da entrada de comando, multiplica-a por uma constante e a adiciona ao comando de unidade do controlador. Você está basicamente fazendo o que seria necessário para conduzir o sistema se não houvesse um controlador e, quanto mais próximo você pudesse obter, menos erro seu loop levaria e melhor o desempenho do sistema. Faz uma enorme diferença na prática.

Guy Sirton
fonte
"Na minha experiência em aplicações de controle de motores, o ganho proporcional é o que deve fazer a maior parte do" trabalho "e o integrador o" resto ". Não acho que você precise de um termo D". Eu concordo com isso na aplicação típica de controle de motor. OP faz o trabalho principal e compenso desvios / erros a longo prazo. Mas aqui, o quadcopter estará sujeito a muita turbulência externa; portanto, o termo D é importante para obter uma resposta rápida. Quanto ao termo I, a menos que o quad esteja no modo de navegação autônomo, não é tão crucial.
precisa saber é
@ dm76: A maior parte da minha experiência é com controle motor, e eu faço isso ;-) Minha intuição diz que ainda há espaço para eu no aplicativo quadcopter e acho que se P é muito alto, ele pode lidar com distúrbios externos (como faz no controle do motor). Eu realmente precisaria dar uma olhada mais atenta nesses sistemas para dizer algo definitivo sobre os quadcopters ... Acho que muito do que eu digo aqui se aplica (especialmente a sua sintonia no domínio da frequência e a resposta em circuito aberto do sistema )
Guy Sirton
11
@ dm76: E, na verdade, esses ajustes PID de "regra de ouro" resultam em desempenho muito medíocre em motores e, presumivelmente, o mesmo em quadcopters. Às vezes, um filtro de entalhe bem colocado pode fazer uma ordem de magnitude diferença ...
Guy Sirton
0

Ziegler-Nichols é um método manual fácil. Métodos mais robustos também existem - eles geralmente se baseiam em soluções matemáticas (analítica, otimização iterativa etc.)

Além disso, o Google "PID auto-ajustável" para algumas técnicas automatizadas. O meu favorito é a aplicação de redes neurais ao ajuste PID.

Throwback1986
fonte
0

Se você deseja ter um coeficiente PID preciso:

  • Obtenha os dados do seu atuador estatístico (ou seja, collecting input voltages+ encoder pulsesem um const com frequência ( 0.01sec) durante 20secsum tempo como matriz 3x 2000)
  • Obtenha a função de transferência (TF) do seu atuador (usando a caixa de ferramentas Ident no MATLAB).
  • Por fim, use a caixa de ferramentas PIDTool no MATLAB e faça upload da sua função de transformação.

Ou de maneira rápida e simples:

Existe uma abordagem mais rápida chamada Ziegler – Nichols : insira a descrição da imagem aqui

E nesta imagem demonstre os efeitos dos parâmetros PID :
Efeitos dos parâmetros PID

Benyamin Jafari
fonte