Article image
Wenderson Anjos
Wenderson Anjos15/04/2022 20:41
Compartilhe

Sistemas de Controle Linear: Análise de Estabilidade do Sistema

  • #C
  • #Arquitetura de Sistemas

Fala galera! Por esses dias comecei a estudar umas aplicações e decidi fazer uma postagem um pouco diferente hoje: Sobre o "Critério de estabilidade de Routh-Hurwitz". É um algoritmo matemático eficiente feito por John Routh e Adolf Hurwitz para testar se um sistema de controle linear e invariante no tempo é instável, estável ou marginalmente estável.

Sobre o Algoritmo de Routh-Hurwitz

O algoritmo serve pra testar se as raízes de um polinômio apresentam partes negativas, e se sim, logo o sistema com tal polinômio possui instabilidade. Esta aplicação é muito visto na área da engenharia elétrica/eletrônica. Se temos um sistema linear que é invariante no tempo, logo ele seguindo esta linha de tempo, ele não pode apresentar variações oscilatórias exponenciais na amplitude do sinal, Quando o sistema recebe uma Entrada de dados que seria H(s), esta entrada pode ser passado para um controlador, onde tal controlador seria um numerador de um denominador, o denominador é o polinômio, se os cálculos deste polinômio se mostrar instável, isto significa que a saída dos dados, que vamos chamar de S(s), terão dados exponenciais e a amplitude do sinal subiu e variou de forma desequilibrada (não de forma linear), prejudicando assim o curso do sistema e a vida de outras pessoas que utilizam tal sistema.

Se nós temos um sistema que nunca será estável, logo estamos falando de um Problema NP, ou seja, NÃO-polinomial, onde ele não pode ser resolvido com nenhum sequer polinômio, sendo assim um sistema por natureza lento, com oscilações exponenciais, inseguro e ainda que exige um grande poder de processamento. Mas e se há uma forma de alterar os coeficientes do sistema, no qual uma entrada específica pode torná-lo um sistema estável? Ou até melhor: Se com os coeficientes certos, toda entrada possa considerar o sistema estável? Pois é, uma forma de testar isso, é usando o critério de estabilidade de Routh-Hurwitz.

image

Aplicação em C para Análise de Estabilidade

Eu fiz uma função em C chamada RouthHurwitz() que recebe 3 argumentos: A entrada do controlador Kc, O coeficiente x e o coeficiente y. Kc será um numerador do denominador s(sx)(sy), este denominador é uma simplificação/redução (Uma equação característica) do denominador real que será formado na própria função, o algoritmo da função é capaz de decodificar o s(sx)(sy) com as entradas necessárias, e formar os coeficientes organizados para depois preencher uma Tabela, chamada de Tabela de Routh-Hurwitz. Ao mesmo tempo que esta Tabela é formada no algoritmo através de uma Matriz, cálculos são feitos pra determinar os valores da Sub-matriz, estes valores serão as raízes, se estas raízes apresentar mudanças de sinais (de positivo para negativo) o sistema do denominador real gerado, será considerado "instável".. se as últimas raízes forem 0 e não houver mudanças de sinais no polinômio par acima deles, é um sistema "marginalmente estável", agora se não houver nenhuma mudança de sinal nas raízes e for diferente de 0, logo o sistema é "estável".

image

image

Testando os coeficientes usando critério de Routh-Hurwitz

Nas imagens abaixo eu faço um testes com algumas entradas, determinando também os coeficientes, exemplo da 1ª imagem: Para formar o denominador "1s^3 + 5s^2 + 1s^1 + 7", os coeficientes x e y devem ser x = -1 e y = 6, que seria o denominador simplificado "s(s-1)(s+6)", com a entrada do controlador "Kc" como um numerador (Enviado por uma função de transferência E(s)), na Tabela de Hurwitz gerada na 1ª imagem, as linhas de s2 a s0 apresenta 2 mudanças de sinal (de positivo para negativo), sendo s1 com uma raiz negativa -0.40, o algoritmo diz que é instável (Porque houve a mudança de sinal), mas ele também diz que para o sistema ser considerado estável usando o mesmo denominador simplificado (com uma entrada diferente o denominador real é alterado), a entrada do controlador Kc deve ser maior ou igual a 7,5.

image

Então eu testo na 2ª imagem com a entrada IGUAL a 7.5, o denominador real muda e o sistema é apresentado como "marginalmente estável", pois as raízes da sub-matriz é igual a 0 e não houve nenhuma mudança de sinal acima:

image

Porém agora, eu testo na 3ª imagem uma entrada MAIOR que 7.5, ou seja, 7,6... e o sistema é "apenas" estável, pois não houve uma mudança de sinal:

image

Logo no sistema da 1ª imagem a amplitude do sinal oscilaria subindo exponencialmente, no sistema da 2ª imagem a amplitude oscilaria de forma permanente (sem subir ou descer) e no sistema da 3ª imagem a amplitude decairia até chegar num patamar equilibrado, isto é, linear e invariante no tempo. Então o algoritmo preveu qual é a entrada necessária do controlador para o sistema ser estável, e nas outras imagens outros coeficientes são testados com entradas diferentes, gerando denominadores distintos entre eles.

Testando agora com coeficientes diferentes, como x = -2 e y = 7:

image

A imagem anterior foi "instável", então adaptar corretamente a entrada do controlador sem alterar os coeficientes:

image

Analisando um controlador acima do exigido para estabilidade com os coeficientes x = 3 e y = 0:

image

Sem alterar os coeficientes, mas adaptar o controlador para igual ao exigido, tornando-o marginalmente estável:

image

No início eu pensei em fazer este algoritmo em Assembly na Arquitetura RISC para PIC16F ou PIC12F, pois aí poderíamos ver o comportamento das oscilações dos sinais analógicos, utilizando ondas senoidais (Eu ainda farei isso), porém como a arquitetura RISC não nos prover bons recursos de cálculos e números reais, eu teria uma grande dor de cabeça pra projetar um algoritmo que seria ainda mais simples do que este feito em C, então pra começar, em Assembly o algoritmo deve ser mais simples, não formando a tabela mas fazendo cálculos diretos com números inteiros (Já que com 8 bits se torna inviável representar valores reais), sem muitos rodeios, apenas enviando o sinal pra o osciloscópio. Mas eu vou deixar isto pra outra hora. O intuito desta postagem é compreender como o algoritmo matemático é eficiente pra determinar a estabilidade de um sistema e que pode ser utilizado em diversos firmwares de um sistema de controle linear, fazendo as alterações necessárias e garantindo assim a segurança de todos que utilizam o sistema.

Links Úteis

Abaixo eu posto o link do GitHub do algoritmo que fiz em C pra vocês estudarem e alguns links de referência:

Repositório do algoritmo de Routh-Hurwitz:

https://github.com/FrancisBFTC/RouthHurwitz_C_Algoritm

Links de referência 1:

https://eletricacomscilab.blogspot.com/2018/04/criterio-de-estabilidade-de-routh.html

Link de referência 2:

https://www.professores.uff.br/ninoska/wp-content/uploads/sites/57/2017/10/Control_Aula19_casos-especial-Estabilidade_1sem2017.pdf?fbclid=IwAR1-AEahgTGzyFTT47lProXuvQTVgLmHJI_WJnZvsBcxQX_v9k4IAZSRczs

Outros artigos:

Projeto de Botões com LEDs - Eng. com Assembly & Circuitos:

https://web.dio.me/articles/projeto-de-botoes-com-leds-eng-com-assembly-circuitos?back=%2Farticles&page=1&order=oldest

Circuito de uma ULA - Somador Completo de 1 bit [FullAdder]

https://web.dio.me/articles/circuito-de-uma-ula-somador-completo-de-1-bit-fulladder?back=%2Farticles&page=1&order=oldest

Circuito Simulatório de uma Unidade Lógico-Aritmética de 4 & 8 bits para soma & subtração

https://web.dio.me/articles/circuito-simulatorio-de-uma-unidade-logico-aritmetica-de-4-8-bits-para-soma-subtracao?back=%2Farticles&page=1&order=oldest

Reator Industrial via Equações Booleanas em Assembly

https://web.dio.me/articles/reator-industrial-via-equacoes-booleanas-em-assembly?back=%2Farticles&page=1&order=oldest

Portas lógicas com transístores N e P - ULA na vida real - Verilog & Scheme

https://web.dio.me/articles/portas-logicas-com-transistores-n-e-p-ula-na-vida-real-verilog-scheme?back=%2Farticles&page=1&order=oldest

#cprogramming #assembly #matematica #algoritmos #engineering

Compartilhe
Comentários (4)

OF

Olívio Ferreira - 13/05/2022 22:50

Muito bom essa sua explanação nesse código.

Wenderson Anjos
Wenderson Anjos - 20/04/2022 21:21

Obrigado Addson! Este é um conteúdo bem denso mesmo na engenharia mas que se torna útil para certas aplicações que dependem deste algoritmo.

Elenice Scarinci
Elenice Scarinci - 02/09/2023 21:37

Muito bom! Parabéns

Addson Gomes
Addson Gomes - 16/04/2022 18:02

parece bem complexo, porém, gostei bastante do que eu li neste seu artigo. grato!