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

Tentarei expandir um pouco da minha experiência para aqueles que possam estar interessados. Acho que o problema é que temos uma teoria de controle muito inacessível (e às vezes inútil) e depois temos regras que fazem suposições sobre sistemas que muitas vezes são imprecisos.

Estabilidade

Vamos falar primeiro sobre porque os loops de controle se tornam instáveis. Para esta discussão vou assumir um sistema linear. Informalmente isto significa que se o seu sinal de controle é uma onda senoidal em uma determinada freqüência, então a sua saída observada está na mesma freqüência e se você mudar a amplitude do seu sistema de controle, a sua saída responde na mesma proporção. Esta suposição é uma boa aproximação para muitos sistemas do mundo real e nos permite olhar para diferentes freqüências isoladamente.

Se você olhar para o caminho de controle você tem um set-point, seu controlador PID, seu sistema (aka “Plant”), e então seu sensor. Imagine um set-point fixo e uma onda sinusoidal do seu sensor (isto é igual a uma perturbação do mundo real no sensor, alimentada de volta). Em um sistema instável, seu feedback faz com que o loop de controle amplifique o erro ao invés de reduzi-lo de tal forma que o tempo aumenta sua amplitude. A razão pela qual isto acontece é devido a um atraso, ou para esta frequência em particular uma mudança de fase entre a entrada e a saída. Para uma dada frequência podemos olhar para esse deslocamento e amplitude da saída em loop aberto (ou seja, sem feedback) e quando desenhamos todos aqueles em um gráfico, obtemos algo como um Bode Plot. Se tivermos uma situação neste gráfico de loop aberto onde o erro continua sendo amplificado, então temos um sistema instável. Se o atraso for inferior a 1/2 do comprimento de onda ou o ganho for inferior a x1, o sistema será estável. Na prática queremos alguma margem a partir desse ponto (margem de ganho e margem de fase) e é por isso que você verá esse “recuo” em muitos dos métodos manuais/heurísticos.

O principal problema com esses métodos manuais é que você está voando às cegas e tem quase certeza de obter um sistema de controle pobre.

Também tenha em mente que o significado P, I e D está relacionado com o que seu sensor está medindo e que controle você está aplicando. Um erro comum em controladores construídos em casa é as pessoas pensarem que estão a aplicar P quando na verdade não estão. Os controladores de motores muitas vezes têm um loop de posição, passando por um loop de velocidade, passando por um loop de torque. (Uma cascata)

OK mas como é que isto nos ajuda?

O primeiro ponto que eu gostaria de fazer é que se você está construindo seu próprio controlador PID você também deve construir uma maneira de medir a resposta em loop aberto. Faça uma varredura de freqüência na entrada do seu controlador e meça a saída do sensor com o feedback desconectado. Então você pode desenhar o gráfico do Bode de circuito aberto e ver porque o seu sistema é estável e ser capaz de trocar os vários controles. Também é útil para medir a resposta em loop fechado e você pode fazer isso com qualquer sistema fazendo uma varredura de freqüência do seu set-point enquanto o loop está fechado. Ambos não são tão difíceis e não requerem muito conhecimento teórico.

Se você estiver simplesmente ajustando os controles sem nenhum entendimento do que está acontecendo sob o capô, você não será capaz de otimizar seu sistema. Construir alguma intuição sobre estes sistemas não é assim tão difícil. Por exemplo, o ganho proporcional não tem efeito na fase, mas simplesmente aumenta o ganho em circuito aberto em todas as frequências. Então o que você está fazendo quando você está aumentando o ganho proporcional em todos esses métodos de ajuste manual é encontrar a freqüência onde a fase vai para -180. Veja isto para ter mais alguma idéia sobre o impacto dos vários controles em sua resposta de freqüência.

Q Muitas vezes obter o melhor desempenho em loop fechado envolve ajustar o sistema e não apenas os ganhos do controlador. O que você quer é tornar o sistema tão “rígido” quanto possível. Isso permitirá que você aumente os parâmetros de controle e obtenha a melhor largura de banda de circuito aberto e fechado. Na minha experiência em aplicações de controle de motores, o ganho proporcional é aquele que deveria estar fazendo a maior parte do “trabalho” e o integrador o “resto”. Eu acho que você não precisa de nenhum termo D. Ter um filtro de passagem baixa 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 Bode Plot é muito difícil (a freqüência de oscilação que você observa em loop fechado pode ser diferente da do loop aberto).

Se a segurança é uma preocupação (motores muito potentes ou um sistema que pode ser destruído pela descontrole do motor) você precisa colocar alguns limites antes de iniciar o ajuste (por exemplo, limite de corrente, erro de posição máxima) para proteger o sistema. Em seguida, você precisa obter algum tipo de sensação para o alcance dos parâmetros. Se o seu feedback tiver 40 contagens por rotação ou 4000 contagens por rotação, os seus parâmetros serão um factor de 100 para um determinado sistema. Minha abordagem seria primeiro encontrar um intervalo onde você tem alguma má controlabilidade e depois subir a partir daí começando com P e depois eu (embora novamente você esteja voando às cegas). Recuar cria esta margem de estabilidade.

Até ao loop fechado

Tentativas de loop fechado para tirar o erro do sistema. Terá sempre um desempenho um pouco limitado. O que você quer 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ê contorna o controlador e direciona um comando diretamente para o sistema. Um exemplo disso seria a aceleração feed-forward. Se você sabe que é constante de torque do motor e conhece a carga, você pode praticamente dizer quanta corrente você precisa dirigir para obter uma certa aceleração da carga. Você simplesmente pega o comando de aceleração de entrada, multiplica-o por uma constante e adiciona isso ao comando de acionamento do controlador. Você está basicamente fazendo o que seria necessário para dirigir o sistema se não houvesse um controlador e quanto mais próximo você puder obter menos erros seu loop tem que ser eliminado e melhor o seu sistema irá funcionar. Isso faz uma enorme diferença na prática.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *