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.






 

12 comentários:

  1. Parabéns polo post. É sempre bom ver aplicações práticas de assuntos que comummente são mostrados apenas em teoria.

    ps: o link para "códdigo para utilizar a FFT" está quebrado. Existe outro lik?

    ResponderExcluir
    Respostas
    1. Olá Ricardo!
      O link foi corrigido.
      Obrigado pela observação!
      O link é de outro post deste mesmo blog.
      Att.

      Excluir
  2. Respostas
    1. Olá, eu comprei na "Farnell",mas a Farnell do Brasil fechou. Hoje você encontra na "tiggercomp".

      Excluir
    2. beleza! Muito obrigado!
      Você teria algumas referências bibliográficas pra me passar sobre o assunto? Achei meio complicada a programação

      Excluir
    3. Olá, tem o nome de um livro nas referências:
      HAYKIN, Simon S.; VAN VEEN, Barry. Sinais e sistemas. Porto Alegre: Bookman, 2001. 668p.

      Excluir
  3. esse é o tema do meu TCC (Análise de Harmônicas) da faculdade mas eu não domino muito de processamento digital e tenho várias dúvidas no tema que o meu orientador também não entende muito. Você teria a disponibilidade de me ajudar? Nem que seja pra utilização de arduino eu ficaria muito grato

    ResponderExcluir
  4. Obrigado pela contribuição.......excelente artigo!

    ResponderExcluir
  5. Hello, thanks a lot for showing us your project. I am trying to replicate the application and I got it working until the point of calculating the frequency with the highest energy component. What I am not sure is how to create a variable where I can store both the energy and frequency of the whole sampled signal so I can then use that to plot the spectrum analyzer graph. Do you think you can post the dsPIC code you used for this?

    Thank you

    ResponderExcluir
    Respostas
    1. Hi. The source code is in the other blog article:
      http://mrgptu.blogspot.com/2015/03/como-utilizar-fft-com-o-dspic-dsp.html

      I have 2 vectors of 128 data:
      input: 128 samples in time (from ADC). (xmemory, uC, fractional data)
      FFT output: 64 frequency spectra. (ymemory, DSP, fractional complex data)

      What is your email address so I can send the project to you?

      Excluir
    2. hello, my email is robertoweiser40@gmail.com. Thanks

      Excluir
    3. Este comentário foi removido pelo autor.

      Excluir