Sistemas Dinâmicos e Equações de Diferenças com a FRDM KL25Z

banner
Imagem de destaque do artigo
Este post faz parte da série Controladores e Filtros Digitais utilizando o FreeRTOS e a KL25Z. Leia também os outros posts da série:

Introdução

 

Neste artigo serão apresentados alguns conceitos de Controle e Modelagem, bem como a implementação de sistemas dinâmicos digitais baseados em equações de diferenças utilizando a FRDM KL25Z e o FreeRTOS.

 

Função de Transferência e Transformada de Laplace

 

A função de transferência representa o comportamento de um sistema dinâmico. Ela estabelece as transformações que o sinal de entrada sofrerá ao gerar o sinal de saída.

 

Para sistemas contínuos, lineares e invariantes no tempo, é usual utilizar equações diferenciais ou a transformada de Laplace. Assim, a função de transferência G(s) representa a razão entre a transformada do sinal de saída e a transformada do sinal de entrada.

 

G(s) = \frac{Y(s)}{X(s)}

 

A transformada de Laplace representa sistemas contínuos. É necessário, então, dar a ela uma abordagem digital. Isso é feito utilizando a transformada Z, assim como explicado no artigo de Daniel Madeira, chamado Entenda o processo de amostragem real. s e Z se relacionam da seguinte maneira:

 

Z = e^{s\cdot T}

 

Sendo, agora, o sistema digital, é necessário definir uma frequência de amostragem para os sinais (1/T). Pelo teorema da amostragem, esta deve ser superior a duas vezes a maior frequência presente no sinal, a fim de evitar o aliasing.

 

Existem maneiras de converter um sistema dinâmico analógico em digital. São exemplos o retentor de ordem zero, a transformação bilinear (método de Tustin ou integração trapezoidal) e backward difference.

 

No método do retentor de ordem zero o sistema é convertido de maneira a manter seu valor constante entre dois períodos de amostragem. É também explicado no artigo de Daniel Madeira citado anteriormente.

 

Na transformação bilinear, a operação de integração é aproximada pela área de um trapézio, de modo que a seguinte substituição deve ser feita:

 

s = \frac{2}{T}\cdot\frac{1-z^{-1}}{1+z^{-1}}

 

No método backward difference é feita uma aproximação para a operação de derivação, de modo que a seguinte substituição deve ser feita:

 

s = \frac{1-z^{-1}}{T}

 

Equação de Diferenças

 

Para os próximos exemplos será utilizado o seguinte sistema de segunda ordem e sua conversão pelo método do retentor de ordem zero.

 

G(s)=\frac{35}{s^{2}+7s+35}

 

G(z)=\frac{0.03879z+0.03451}{z^{2}-1.6314z+0.70469},\;T = 0.05\;segundos

 

Com ajuda do software MATLAB é possível comprovar que, para uma entrada degrau, a saída do sistema contínuo tem um overshoot de 10% e um tempo de acomodação de 1 segundo, aproximadamente.

 

Resposta ao degrau do sistema dinâmico
Figura 1 - Resposta do Sistema ao Degrau unitário

 

A transformada z possui uma propriedade chamada atraso. Esta propriedade torna possível fazer um algoritmo para execução do sistema digital.

 

X(z)\cdot z^{-n}=x[k-n],\ k=amostra\ atual

 

A equação de diferenças é uma equação em tempo discreto que relaciona a saída atual às entradas e saídas anteriores. Para obter esta equação a partir de um sistema em z, deve-se lembrar que a função de transferência é, por definição, saída dividido pela entrada.

 

Basta, então, dividir o numerador e denominador pelo maior índice de z, multiplicar cruzado e aplicar a propriedade do atraso.

 

No exemplo a seguir, o sistema G(z) apresentado anteriormente será transformado em uma equação:

 

\frac{Y(z)}{X(z)}=\frac{0.03879z+0.03451}{z^{2}-1.6314z+0.70469} \cdot\frac{z^{-2}}{z^{-2}}=\frac{0.03879z^{-1}+0.03451z^{-2}}{1-1.6314z^{-1}+0.70469z^{-2}}

 

Y(z)\cdot(1-1.6314z^{-1}+0.70469z^{-2})=X(z)\cdot(0.03879z^{-1}+0.03451z^{-2})

 

y[k]-1.6314\cdot y[k-1]+0.70469\cdot y[k-2]=0.03879\cdot x[k-1]+0.03451\cdot x[k-2]

 

y[k]=0.03879\cdot x[k-1]+0.03451\cdot x[k-2]+1.6314\cdot y[k-1]-0.70469\cdot y[k-2]

 

Esta última equação está pronta para ser implementada em um microcontrolador, por exemplo.

 

Implementação do Sistema Dinâmico Digital

 

Partiremos de um projeto com o FreeRTOS, na IDE MCUXpresso, como configurado no artigo anterior: Usando FreeRTOS para aplicações com a Freescale FRDM KL25z.

 

O Sistema Operacional de Tempo Real será utilizado aqui para garantir o período de amostragem constante. Serão incluídas no projeto as bibliotecas "FreeRTOS.h" "Task.h". Além destas, serão utilizadas as bibliotecas de acesso aos conversores analógico-digital (entrada do sistema dinâmico) e digital-analógico (saída do sistema dinâmico) mencionadas no artigo anterior e que já foram abordadas em outra série de artigos por Evandro Teixeira.

 

Tarefa principal

 

A fim de organizar o código, será criada uma outra biblioteca responsável por representar o sistema dinâmico (Sistema.h). A tarefa principal ficará responsável, então, por garantir o período de amostragem, fazer a leitura da entrada analógica-digital, passar este valor para a biblioteca e escrever na saída digital-analógica seu valor correspondente.

 

 

Na função main, xTaskCreate é responsável por criar a tarefa que será encarregada pelo sistema (função void sistema). A próxima linha dá início ao scheduler de maneira que o Sistema Operacional passa agora a controlar a execução das tasks;

 

Na task sistema são inicializados os conversores adc e dac, os quais serão a entrada e saída, respectivamente. Em seguida, são feitas as inicializações, as quais serão tratadas mais tarde.

 

A função vTaskDelayUntil guarda na variável wakeTime o momento em que ela foi chamada. Quando executada novamente, será verificado se o tempo de espera foi atingido a partir deste momento. Sua utilização é preferível a vTaskDelay, pois esta não toma como base sua execução anterior, não levando em conta o período de tempo gasto em outras partes do código, por exemplo.

 

O tempo é calculado baseado no número de ticks, que são as trocas de contexto feitas pelo Sistema Operacional. A macro configTICK_RATE_HZ representa a quantidade de ticks que acontecem em um segundo. Portanto, se o delay deve ser configurado para 2 segundos, por exemplo, deve-se esperar 2*configTICK_RATE_HZ ticks. Para que o argumento possa ser dado em milissegundos, parâmetro retornado pela função getTs, basta dividir seu resultado por 1000.

 

Uma vez garantido o período de amostragem, basta ler a entrada do adc, e então colocar o resultado da equação na saída do dac. Neste ponto é feita uma redução da resolução do valor lido pelo adc, que tem 16 bits, para 12 bits, resolução do dac.

 

Sistema Dinâmico

 

A biblioteca representará o sistema dinâmico. Sendo assim, nela será implementado o processamento da equação de diferenças.

 

 

 

No arquivo .c da biblioteca são definidas algumas variáveis e "macros" de uso interno. Os vetores "entrada" e "saida" são responsáveis por armazenar os valores anteriores correspondentes a x e y na equação descrita anteriormente. A macro MAXCOEF define o tamanho destes vetores.

 

A variável "atual" será responsável por identificar a próxima posição a ser ocupada nos vetores de entrada e saída, em uma implementação semelhante a um buffer circular.

 

Os vetores coefx coefy são os coeficientes da equação de diferenças. Os valores de coefx multiplicam a entrada (x) e coefy, a saída (y). Cada posição destes está relacionada às amostras anteriores. O índice 0 acompanha as entradas e saídas atuais (x[k] e y[k]), o índice 1, as anteriores (x[k-1] e y[k-1]), e assim por diante.

 

A inicialização do sistema garante que no início do processo não existam entradas ou saídas anteriores e que a primeira posição a ser ocupada seja a posição 0. A função getTs apenas retorna o valor do período de amostragem em milissegundos.

 

Processamento da Equação

 

A função equacaoDiff recebe o valor do sinal atual, realiza os cálculos da equação, armazena os valores dos cálculos anteriores e retorna o valor que deve ser colocado na saída atual.

 

Como pôde ser visto na equação apresentada no fim da seção "Equação de Diferenças", os coeficientes os quais multiplicam a entrada (x), têm seu sinal mantido, enquanto os que multiplicam a saída (y), tem seu sinal invertido.

 

Generalizando a equação, ela pode escrita da seguinte maneira.

 

\frac{Y(z)}{X(z)}=\frac{a_0\cdot z^{0}+a_1\cdot z^{-1}+a_2\cdot z^{-2}...}{1 +b_1\cdot z^{-1}+b_2\cdot z^{-2}...}

 

y[k]=(a_0\cdot x[k]+a_1\cdot x[k-1]+a_2\cdot x[k-2]...)-(b_1\cdot y[k-1]+b_2\cdot y[k-2]...)

 

Esta foi a abordagem utilizada no processamento da equação nos dois loops presentes na função.

 

Para guardar os valores anteriores, a seguinte lógica de um buffer circular foi aplicada:

 

Representação gráfica de um buffer circular
Figura 2 - Representação gráfica de um buffer circular

 

Portanto, quando se chega a um valor anterior negativo, isto indica que ele é anterior à posição 0 do buffer. Sendo assim, é somado a este valor o tamanho do buffer, de modo a selecionar sua última posição.

 

Ao fim da função o valor calculado para a saída atual é salvo no buffer. A variável que guarda a posição atual é atualizada de modo que seu valor é limitado pelo tamanho do buffer (MAX_COEF). O valor calculado é então retornado para que seja de fato "escrito" na saída do conversor digital-analógico.

 

Resultados

 

A fim de testar a implementação, foi colocada na entrada uma onda quadrada, simulando um degrau, com amplitude de 1 V. A saída foi, então, medida com o auxílio de um osciloscópio. As formas de onda foram as seguintes:

 

Resposta do sistema ao degrau unitário
Figura 3 - Resposta do sistema ao degrau unitário

 

Em amarelo está a entrada do sistema, em azul, sua respectiva resposta.

 

Ao comparar as figuras 3 e 1, é possível comprovar que o sistema teórico e o implementado têm comportamentos suficientemente semelhantes. As especificações de 10% de overshoot e 1 segundo de acomodação estão, também, de acordo.

 

Conclusão

 

Neste artigo foi apresentada a implementação de um sistema de equações de diferenças utilizando o FreeRTOS e a FRDM KL25Z. O código apresentado tem sua forma genérica, de maneira que a troca da equação que representa o sistema não exige significantes mudanças.

 

Para aplicações específicas, uma implementação mais direta do processamento da equação é recomendada, a fim de diminuir os gastos de tempo. Por isso nos próximos artigos este assunto será discutido. Serão, então, propostos métodos que otimizem o processamento e viabilizem a implementação de controladores e filtros digitais, por exemplo, os quais podem necessitar maiores frequências de amostragem.

 

Saiba mais

 

Conceito de amostragem em controle digital de sistemas dinâmicos

Introdução a controle digital de sistemas dinâmicos

Utilizando microcontroladores para controle de conversor DC-DC personalizado - Parte 1

 

Referências

 

Entenda o processo de amostragem real

Usando FreeRTOS para aplicações com a Freescale FRDM KL25z

Bibliotecas de Software para FRDM-KL25Z

FreeRTOS

NISE, Norman. Control Systems Engineering. Editora LTC, 6ª Edição

OGATA, Katsuhiko. Discrete-time Control Systems. Editora Prentice Hall, 2ª Edição

Outros artigos da série

<< Usando FreeRTOS para aplicações com a Freescale FRDM KL25z
Este post faz da série Controladores e Filtros Digitais utilizando o FreeRTOS e a KL25Z. Leia também os outros posts da série:

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Thiago Pereira do Prado
Graduando em Engenharia de Controle e Automação pela Universidade Federal de Itajubá. Aficionado por Tecnologia, Programação e Sistemas Embarcados. Desde cedo era curioso por saber como as coisas funcionavam. Desmontava vários drivers de DVD e carrinhos de controle remoto atrás dos motores DC. Atualmente pesquiso na área de sistemas dinâmicos, controladores e filtros digitais.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
2 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Thiago Pereira do PradoCirineu Carvalho Fernandes Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Cirineu Carvalho Fernandes
Membro
Cirineu Carvalho Fernandes

Excelente Artigo amigo, desenvolvi um hardware que utiliza o ARM CORTEX M0, que iremos implementar para muitas soluções em IoT, em breve lançaremos no mercado, acompanhe a EngeBOT Tecnologia.