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
Visitante
cirineu

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.