sábado, 31 de janeiro de 2015

dsPIC PID Temp - Um Controlador Digital de Temperatura com Algoritmo PID

Dentre os métodos de estabilização de malhas de controle de processos, o Algoritmo PID se destaca como o mais utilizado hoje nos vários setores industriais. Este artigo demonstra um Controlador Digital de Temperatura que faz uso deste algoritmo.



A Microchip disponibiliza para a sua família de Controladores Digitais de Sinais (DSCs), dsPIC30F, a biblioteca DSP.h que possui funções para processamento digital de sinais como operações com vetores, matrizes, filtros FIR e IIR, FFT e o Algoritmo PID, que é demonstrado neste projeto.

A função do circuito é controlar a temperatura de um resistor modulando a sua potência. Esta é uma aplicação simples para aprendermos a utilizar o algoritmo PID.

A Figura 1 mostra algumas características do circuito.

Figura 1 - Características do circuito

O diagrama de interligação entre o DSC e os periféricos do circuito com os respectivos sinais pode ser visto na Figura 2.


Figura 2 - Diagrama de interligação

O DSC escolhido foi o dsPIC30F4013, mostrado na Figura 3,  que possui todos os periféricos necessários para a interface já integrados, como conversor A/D de 12 bits, saída PWM e módulo UART para comunicação serial. 


Figura 3 - O controlador Digital de Sinais dsPIC30F4013


Funcionamento do Circuito

O dsPIC recebe o sinal de temperatura de 10 mV / °C de um sensor linear de temperatura LM35 através da entrada analógica AN9. Esta é a Variável de Processo (PV), como é conhecida no ramo de automação industrial. O Valor Desejado, ou Set-Point (SP), é ajustado pelo usuário através de três teclas e um display gráfico GLCD 128x64 padrão KS108B, que é utilizado como IHM (Interface Homem Máquina). Os três parâmetros do PID, Proporcional (kp), Integral (ki) e Derivativo (kd), que definem a resposta do controle também podem ser ajustados pelo usuário, conforme mostrado na Figura 4. 

 Figura 4 - Tela do display GLCD para ajustes de SP, Kp, Ki e Kd

O controlador então executa o algoritmo PID que fornece a Saída do controle, e a converte em um sinal PWM (Modulação por Largura do Pulso) que através de um drive com MOSFET controla a potência do resistor, que é a Variável Manipulada (MV). A face do sensor de temperatura é fixada junto ao corpo do resistor e fornece o feedback, ou realimentação, para o controle. A Figura 5 mostra a placa com o resistor de potência, o MOSFET, sensor de temperatura e botões de ajuste.

Figura 5 - Placa de interface conectada ao dsPIC


Na Figura 6 temos o diagrama de blocos do sistema de controle com a função de transferência de cada ação do controlador PID. O termo z-1, no domínio da frequência, aparece devido termos um controle discreto no tempo, isto é, baseado em amostragens.

Figura 6 - Diagrama em Blocos com a Função de Transferência do controlador

O cálculo executado pelo algoritmo PID é expresso como:
Saída [n] = Saída [n-1] +
                 + Erro [n] * Coeficiente_a +
                 + Erro [n-1] * Coeficiente_b +
                 + Erro [n-2] * Coeficiente_c
Sendo:
Coeficiente_a = ( Kp + Ki + Kd )
Coeficiente_b = - ( Kp + 2 * Kd )
Coeficiente_c = Kd

Onde:
Saída [n] é a saída do controle para o aquecimento.
Erro é a diferença entre o set-point e a PV (temperatura atual).
Kp, Ki e Kd são os parâmetros do PID.
[n], [n-1] e [n-2] são o N-ésimo valor da variável armazenada na memória e identifica este como um controle no tempo discreto.

Obs.: Todos os dados estão em valores fracionários, isto é, numa escala de -1 a 1, para a execução das instruções assembler de DSP do dsPIC. Todo o algoritmo PID é executado em 60 ciclos de máquina, possibilitando a execução de Controles em Tempo Real.

O programa do dsPIC

O programa foi desenvolvido em linguagem C no ambiente MPLAB IDE. 

São utilizadas 3 funções da biblioteca para os cálculos do algoritmo PID:
PIDInit ( ): inicializa o algoritmo, limpa o histórico e a saída do controlador PID;
PIDCoeffCalc ( ): gera os coeficientes a, b e c do algoritmo. É executada sempre que o valor de kp, ki ou kd é alterado;
PID ( ): executa os cálculos do algoritmo propriamente dito a cada 0,5 segundos.

No início do programa são configurados os PORTs de I/O e iniciados os periféricos em glcd_inicializa ( ), uart_init ( ),init_adc12 ( ), pwm_init ( ) e PIDInit ( ). O programa passa então a um loop executando a função PID( ), lendo as teclas e atualizando a tela do display GLCD.

O arquivo main.c contém o programa principal. DSP.h e PID.s pertencem à biblioteca da Microchip para executar os cálculos do PID. PID_GLCD.hex é o arquivo gerado pelo compilador para ser gravado no dsPIC.


O programa do PC

Para a análise do desempenho do controle e da verificação da estabilidade do sistema os dados de temperatura, set-point e saída do PWM são enviados para o computador a cada 2 segundos e apresentados em um gráfico em tempo real por um programa desenvolvido em Visual Basic, que recebe estas informações do Controlador pela porta serial RS 232, utilizando o CI MAX232 para conversão dos níveis de sinais. Um gráfico da temperatura também pode ser visualizado no display gráfico GLCD. Esta interface gráfica é vista na Figura 7.

Figura 7 - Programa dsPIC PID TEMP que roda no PC

A Figura 8 exibe o gráfico da temperatura gerado no display GLCD.

Figura 8 - Gráfico da temperatura gerado no display GLCD

Para não se perderem os dados de set-point, kp, ki e kd ajustados pelo usuário, após uma desenergização, os mesmos podem ser salvos na memória EEPROM do dsPIC através da opção “salvar dados” disponível no menu do display gráfico.

Figura 9 - Dados salvos na memória EEPROM


Teste do programa e Sintonia do Controle

A Figura 10 apresenta a resposta do controlador a uma variação da entrada. O gráfico foi gerado pelo programa com os parâmetros kp em 0,4, ki em 0,10 e kd em 0,04.
Figura 10 - Resposta do controle a uma variação de entrada

Na Figura 11 pode ser visto o diagrama elétrico do Controlador Digital de Temperatura

Figura 11 - Diagrama elétrico do circuito

e na Figura 12 ilustramos a montagem do protótipo realizado.
Figura 12 - Protótipo do circuito


Conclusão

Devido a sua simplicidade, baseando-se em apenas três constantes das ações P(Proporcional), I(Integral) e D(Derivativo), o algoritmo PID é o método de controle para estabilidade de processos mais utilizado nas indústrias e pode ser facilmente implementado nos projetos através da biblioteca disponível para os dsPICs conforme foi demonstrado neste artigo.

Assista ao vídeo do circuito em funcionamento:

Video do dsPIC PID TEMP



Referencia Bibliográfica

Nise, N. S. Engenharia de Sistemas de Controle. 5 ed. Rio de Janeiro: LTC, pp. 364 - 373, 277- 279, 356-399, 2009.
Ogata, H. Engenharia de Controle Moderno. 4 ed. São Paulo: ABDRC, pp. 49 -55, 230 -235, 557 - 573, 2007.
MICROCHIP. PID Control Library. Disponível em: www.microchip.com Acesso em 21 maio 2011.
MACORATTI, J. C. Desenvolvimento de Programas em Visual Basic. Disponível em: www.macoratti.net Acesso em 21 maio 2011.
MICROCHIP. Code Examples. CE019 - Proportional Integral Derivative (PID) controllers & closed-loop control. Disponível em: http://ww1.microchip.com/downloads/en/DeviceDoc/CE019_PID.zip

* Projeto Publicado na Revista Saber Eletrônica 454.

quarta-feira, 28 de janeiro de 2015

FFT-PIC - Um Analisador de Espectro para a Rede de Energia Elétrica

 Uma aplicação da Transformada Rápida de Fourier, dsPIC e o Processamento Digital de Sinal

 Muitos estudantes de Engenharia se deparam no decorrer de seu curso com as fórmulas de Euller, as Séries e as benditas Transformadas de Fourier. Muitos se perguntam pra que aprender tantos cálculos? Vou utilizar isso algum dia? A ideia básica deste projeto foi mostrar de forma prática e didática uma aplicação da Transformada Rápida de Fourier.



Antes de descrever o funcionamento do circuito, vamos relembrar um pouco da Transforma de Fourier. Basicamente um sinal pode ser representado de duas formas: uma no domínio do tempo e outra no domínio da frequência. O sinal no domínio do tempo pode ser obtido naturalmente como por exemplo um sinal sonoro, uma música, etc. Em algumas ocasiões a análise de um sinal se torna melhor compreendida se analisada no domínio da frequência, como as harmônicas presentes em uma rede elétrica.
            A Transformada de Fourier (FT) é utilizada para converter uma função ou sinal do domínio do tempo para o domínio da frequência e vice-versa.
A Transformada Discreta de Fourier (DFT) é aplicada para sinais discretos no tempo (dados coletados por um conversor analógico digital por exemplo).
A Transformada Rápida de Fourier (FFT) foi desenvolvida para uma execução mais rápida dos cálculos da FT possibilitando o seu uso na computação. Dentre as suas principais aplicações estão a filtragem digital, reconhecimento de padrões, bargraph para sinais de áudio, equalizadores, eliminações de ruído e interferência de imagens.
A FFT representa a soma de uma série de ondas senoidais de diferentes frequências, fases e amplitudes:



 Onde:


N= 2^n e n pode ser escrito como N = 2M, sendo M um inteiro positivo. 

                Para entender a diferença do sinal analisado no domínio do tempo e no domínio da frequência vamos a um exemplo prático utilizando o software dsPICworks, da Microchip. Com ele geramos alguns sinais. 
                Na Figura 1a temos um sinal senoidal de 60 Hz (domínio do tempo, eixo x do gráfico).

 Figura 1a - Sinal Senoidal de 60 Hz no tempo

              Na Figura 1b um sinal senoidal de 600 Hz (domínio do tempo).  

  Figura 1b - Sinal Senoidal de 600 Hz no tempo

               Efetuando a soma dos sinais senoidais A e B obtemos o sinal C mostrado na Figura 1c (domínio do tempo).

 Figura 1c - Soma dos Sinais Senoidais de 60 Hz e 600 Hz no tempo

              O resultado da Transformada Rápida de Fourier aplicada ao sinal C é exibido na Figura 1D. O sinal agora é visto no domínio da frequência (eixo x do gráfico). Observe 2 picos no gráfico, que representam a energia do espectro de 60 Hz e de 600 Hz.

 Figura 1d - Resultado da FFT aplicado ao sinal
             
          A análise de um sinal no domínio da frequência se torna muito interessante e/ou mais amigável conforme a aplicação, por exemplo, em um VU Meter, equalizador gráfico de áudio ou na análise das frequências harmônicas da rede de energia elétrica (múltiplas de 60 Hz), que aliás, é o foco deste nosso projeto de exemplo para a aplicação da FFT.
O desenvolvimento da linha dsPIC30F da Microchip possibilitou a utilização de algoritmos complexos para os projetos devido à alta capacidade de processamento de dados (30 MIPS – Mega instruções por segundo) aliada às instruções de DSP que otimizam o processamento digital de sinais e facilitam a execução de programas em tempo real.
O circuito proposto faz uso de um microcontrolador & DSP (Controlador Digital de Sinal -DSC) dsPIC30F4013 que coleta um sinal na faixa de 0 à 3780 Hz, aplica a FFT, calcula a frequência de maior amplitude e mostra um gráfico com o espectro de frequência do sinal, com as 63 múltiplas harmônicas de 60 Hz.
O programa faz uso da biblioteca “DSP Library” da Microchip que possui os algoritmos necessários para a execução da FFT.
A figura 2 mostra o diagrama do circuito. São utilizados poucos componentes externos além do dsPIC e do display LCD. O circuito funciona independente do display e da comunicação serial, ou seja, o leitor pode montar somente a parte do display sem a comunicação serial (MAX232), ou vice-versa, conforme os recursos que tiver.

 

  Figura 2 – Diagrama do Analisador de Espectro FFT-PIC




Funcionamento do circuito

O sinal de entrada é amostrado pela entrada analógica AN2 do dsPIC em uma frequência de amostragem de 7,68 Khz (fs), lembrando que o máximo que a entrada suporta é 5 volts. O capacitor C1 faz o acoplamento do sinal e os resistores R3 e R4 centralizam o sinal em 2.5 Vcc. O ADC de 12 bits é configurado para mostrar o sinal no formato fracionário com sinal, isto é, 0 - 5 V é representado numa escala de -1,0 à 1,0.
È executado o algoritmo da FFT sobre 128 amostras do sinal no tempo, obtendo a amplitude de 64 frequência do sinal. A frequência de amostragem e o número de ‘pontos’ amostrados foi calculado para se obter as frequências múltiplas de 60 Hz (fo), a qual é de interesse em muitas áreas da elétrica, principalmente para a análise de interferências harmônicas nas redes de energia elétrica.
A frequência de maior espectro é mostrada em um display LCD 16X2 juntamente com o seu módulo. As amplitudes das frequências são enviadas para um computador através da saída UART2, o MAX232 converte os níveis TTL para RS232 para serem enviados para a porta serial do PC. O programa Analisador de Espectro FFT-PIC desenvolvido em Visual Basic recebe os dados do dsPIC e mostra-os na forma de gráfico de barras para a visualização do espectro de frequências do sinal amostrado.

O programa do dsPIC

O código que roda no dsPIC foi desenvolvido em linguagem C no ambiente de desenvolvimento MPLAB IDE juntamente com o compilador MPLAB C30 da Microchip. O programa inicia na função Main () com a configuração dos PORTS de I/O e inicialização das variáveis. Os periféricos são configurados e iniciados com as funções:
-  uart_init (), inicia a comunicação UART2/RS232 a 9600 bps, 8 bits de dados, sem paridade e 1 bit de parada.
 -init_adc12 (), inicia o conversor analógico digital.
- init_timer1 (), configura a interrupção do Timer1 para uma amostragem de 7,68 ksps com o ADC.
- lcd_init (), configura o display LCD para comunicação com 4 bits de dados.
São enviadas as mensagens iniciais para o display com a função envia_mensagem (TXPtr), o programa passa então para um loop infinito aguardando o fim das 128 amostragens do sinal de entrada. Estes dados são escalonados para -0,5 a 0,5 e submetidos à Transformada Rápida de Fourier pela função FFTComplexIP (). A ordem dos dados de saída, já no domínio da freqüência são organizados pela função BitReverseComplex (), o sinal complexo é convertido para real através de SquareMagnitudeCplx (). A função VetorMax () retorna o índice da frequência de maior espectro. Estas últimas 4 funções pertencem à biblioteca DSP Library. É calculada a frequência de maior espectro e enviada para o LCD assim como o seu módulo.
A função transmite_dados () envia os dados das 64 frequências para o computador, são enviados primeiro a parte inteira, depois a parte decimal e 3 bytes para controle da comunicação.
O programa faz uso do temporizador WDT configurado para 4096 ms. Um LED, ligado no pino RF0, pisca intermitente quando o programa está sendo executado normalmente.
A figura 3 mostra o protótipo do circuito amostrando um sinal de 1020 Hz.
 

 Figura 3 - Circuito do FFT-PIC


O programa do Analisador de Espectro FFT-PIC

O programa do Analisador de Espectro FFT-PIC foi desenvolvido no Visual Basic 6.0 e testado no Windows XP SP2. Com ele é possível visualizar o espectro das frequências do sinal que foi amostrado pelo dsPIC.
A comunicação com o DSC é feita através do controle MSComm que acessa a porta COM1 do computador. A comunicação serial está configurada para 9600 bps, 8, N, 1.
O formulário possui menus e botões para conectar e desconectar a porta serial, com indicação de status da comunicação e um indicador de erros nos dados.
O pacote de dados recebido do dsPIC é mostrado em um gráfico de barras. Para gerar o gráfico foi utilizado o objeto ChartSpace, pertencente ao Office Web Components. 2 combobox permitem ajustar os eixos X e Y do gráfico.
O programa inicia com a rotina Load_Form () que carrega o formulário e inicia o gráfico. Cada byte recebido pela serial chama o evento MSComm1_OnComm (). Quando o pacote de dados for recebido a rotina carregavalorFFT () atualiza o gráfico com os novos valores recebidos dos espectros das frequências, numa escala de amplitude de 0 à 100, e a frequência de maior módulo. Uma caixa de texto permite visualizar os dados que são recebidos.
Na figura 4 pode ser visto o programa com um sinal amostrado de 1020 Hz.


 Figura 4 - Programa Analisador de Espectro FFT-PIC desenvolvido no VB

O circuito pode ser testado utilizando um programa gerador de sinais para PC, que pode ser encontrado na internet. Para teste dos cálculos da FFT da DSP Library foi gerado um sinal senoidal variando de 0 à 3780 Hz em 15 segundos na saída de som para fone de ouvido do computador, lembrando que a entrada analógica do dsPIC suporta de 0 à 5 Vcc.A seguir você pode assistir ao vídeo mostrando o circuito sendo testado.
 
 
 Vídeo Teste do Circuito do FFT-PIC com um Gerador de Sinal

As linhas dos programas do dsPIC e do VB foram comentadas para facilitar na compreensão do código. Todos os cálculos referentes às configurações dos registradores da comunicação UART, do conversor A/D, da interrupção do temporizador Timer1 e do temporizador do WDT estão escritos junto às suas funções no programa principal ‘main.c’ . O arquivo ‘fuses.c’ contém a programação dos bits de configuração do dispositivo como a ativação do oscilador interno, a multiplicação do clock (PLL) por 16 para a operação a 30 MIPS e atribuição do tempo do WDT.
Este software foi desenvolvido para mostrar um exemplo das diversas aplicações para a Transformada de Fourier e os recursos oferecidos pelo dsPIC, e pode ser utilizado para detectar a frequência de um sinal (em passos de 60 Hz) e também para visualizar o seu espectro de frequência, sendo muito útil para analisar componentes de interferência e harmônicas em um sinal.
   
ATENÇÂO: A entrada analógica do circuito NÂO deve ser conectada diretamente à rede de energia elétrica ou tomada pois não suporta 127 V / 220 V. Esta tensão deve ser abaixada por um transformador para uma tensão compatível com a entrada do circuito: 0 à 5 Vcc, conforme identificado no diagrama elétrico.
 
Referência Bibliográfica

www.microchip.com

MACORATTI. J. C. Desenvolvimento de programas em VB. Disponível em:  http://www.macoratti.net


SIMON S. HAYKIN, BARRY VAN VEEN. Sinais e Sistemas.


MICROCHIP. Code Examples. CE018 - Using the Fast Fourier Transform (FFT) for Frequency Detection. Disponível em: http://ww1.microchip.com/downloads/en/DeviceDoc/CE018_FFT_DSPlib_101007.zip


 * Projeto publicado na revista Saber Eletrônica 448.