Controlador PLL - Phase Locked Loop

Controlador-PLL

Phase Locked Loop (PLL) é um sistema de controle que gera a partir de um sinal de entrada um sinal de saída com frequência e fase instantâneas em sincronismo com o sinal amostrado. Por manter em regime permanente a frequência de saída igual à frequência de entrada, tal sistema pode rastrear a frequência do sinal amostrado, assim como gerar frequências múltiplas do sinal de entrada.

 

As propriedades dessa malha de controle permite um uso amplo em aplicações tais como rádio, telecomunicações, análise de sinais entre outras. Em eletrônica de potência tal sistema é crucial para manter o sincronismo de fases em aplicações conectadas a rede elétrica (Grid-Tie). Como saída deste sistema temos os valores de seno e cosseno em fase com o sinal de entrada o que permite uma vasta utilização em  sistemas de controle, tais como transformada dq (Referência síncrona) ou mesmo na Teoria da Potência Instantânea (Transformação de Park).

 

Controlador PLL

 

O diagrama de um sistema PLL básico é composto por, um Phase Detect (PD), um Loop Filter (LPF) e um Voltage Controlled Oscilator (VCO). Tal como apresentado na Figura 1.

 

Controlador-PLL-01
Figura 1 - Diagrama de um sistema PLL básico

 

A função do bloco Phase Detect é comparar o seno do sinal de entrada com o cosseno do bloco VCO com o objetivo de gerar um sinal de erro proporcional ao erro do ângulo. Para isto o bloco em questão multiplica o sinal de saída do VCO com o sinal medido na entrada. No entanto, a informação do erro possui uma variável que é duas vezes a frequência de entrada o que necessariamente deve ser removida para o correto funcionamento do sistema.

 

O erro é a entrada para o Loop Filter que nada mais é que um controlador PI, este controlador é usado para zerar o erro permitindo que o sistema entre em regime permanente.

 

 

PLL com Filtro Rejeita-Faixa

 

Tal como dito anteriormente, a componente não linear da saída do Phase Detect deve ser removida. Um filtro Rejeita-faixa pode ser usado para eliminar a linearidade que é imposta pela multiplicação da frequência da rede por dois. A figura 2 mostra o diagrama PLL com o filtro Rejeita-Faixa como saída do PD.

Controlador-PLL-02
Figura 2 - diagrama PLL com o filtro Rejeita-Faixa

 

Software Phase Locked Loop

 

Para implementar um PLL via software é necessário que utilizemos das teorias de processamento digital de sinais tais como teoria da amostragem e transformada Z entre outras. Não entrarei no mérito de descrever as discretizações das malhas de controle propostas neste artigo, porém tentarei mostrar de forma simples a matemática necessária para o correto funcionamento do sistema.

 

Phase Detect

 

Ypd = Xpd * Cos[n-1]

 

Notch Filter

 

Função de Transferência:           

            

Controlador-PLL-eq-01

 

Aplicando a transformada Z:

 

Ynf = B0*Xnf[n] + B1*Xnf[n-1] + B2*Xnf[n-2] – A1*Ynf[n-1] – A2*Ynf[n-2]

 

Loop Filter

 

Função de Transferência:

 

Controlador-PLL-eq-02

 

 

Aplicando a transformada Z:

 

Ylf = B0*Xlf[n] + B1*Xlf[n-1] – A1*Ylf[n-1]

 

Gerador de Seno e Cosseno

 

Para evitar um alto consumo de CPU na geração do seno e cosseno, ambos serão gerados aplicando-se o princípio da integração:

 Controlador-PLL-eq-03

 

Aplicando para seno e cosseno temos:

 

sen[n] = sen[n-1] + cos[n-1]*∆t

cos[n] = cos[n-1] + sen[n-1]*∆t

 

 

Aplicação

 

A placa de desenvolvimento Freedom KL25Z foi utilizada para a implementação do SPLL (Software Phased Locked Loop). Três periféricos são essênciais para o correto funcionamento da malha de controle: conversor Analógico-Digital (ADC) responsável pela amostragem do sinal de entrada, Timer0 define o tempo de amostragem do sistema, ou seja, define também a taxa com que processada a malha de controle, no caso em questão 10 kHz (0.1ms) e por último o conversor Digital-Analógico (DAC) usado como saída para o sistema.

 

A biblioteca SPLL.h define algumas das constantes do sistema tais como, frequência da rede, π e frequência de amostragem. Além é claro de declarar a estrutura das variáveis e os protótipos  das funções.

 

 

A função initPLLVar(SPLL_1ph  *spll1) tem por objetivo inicializar todo o sistema de controle, em suma o que esta função faz é definir as variáveis através do ponteiro que lhe é passado. É importante ressaltar que outras duas funções de inicialização são chamadas dentro desta função. Uma inicializa os valores do Filtro Rejeita-Faixa e a outra inicializa a demais variáveis do sistema.

 

 

A malha de controle está implementada dentro da função SPLL_1ph_run_FUNC(SPLL_1ph *spll1), é nela que se encontra a código de todos os blocos da malha de controle do PLL já discretizados. Ou seja, toda vez que esta função é chamada o sinal de entrada passa pelo Phase Detect, Notch Filter, Loop Filter e VCO.

 

 

Dentro da main.c  temos apenas a inicialização dos periféricos e do SPLL. Já na função pllFunc(), toda vez que essa é chamada grava o valor convertido pelo ADC na variável de entrada do sistema AC_input. Além disso, chama a função SPLL_1ph_run_FUNC(SPLL_1ph *spll1) e escreve o valor calculado no DAC.

 

 

Tal como mostra o código abaixo, toda vez que o que a interrupção do Timer 0 acontece, a cada 0.1ms, a função pllFunc() é chamada e a malha de controle é executada.

 

 

 

Conclusão e Teste

 

O sistema descrito neste artigo foi todo escrito em C, permitindo que esse código seja reutilizado em outras plataformas. O microcontrolador usado para os testes não possui operações com float implementadas em hardware o que deixou o sistema praticamente no limite de operação, ou seja a função pllFunc()  é chamada a cada 0.1ms e ela demora 0.08s para ser executada. Porém como prova de conceito o sistema funcionou perfeitamente, apenas os coeficientes do LoopFilter, B0_LPF e B1_LPF, ainda podem ser otimizados.

 

A figura 3 mostra o resultado da implementação. O sinal de entrada em amarelo está sendo gerado por gerador de sinais e opera em 60Hz com um Vpp  de aproximadamente 3.3V. O sinal de saída em verde estabiliza a frequência e em seguida a faze com o sinal de entrada mantendo o ângulo Teta entre eles próximo de zero. A figura 3 mostra em três etapas o sinal de saída (verde) se aproximando do sinal de entrada (amarelo).

 

Controlador-PLL-03
Figura 3 - Resultado da implementação
Licença Creative Commons
Controlador PLL - Phase Locked Loop por Pedro Andrade de Oliveira. Esta obra está licenciado com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Técnico em Eletromecânica - Cefet-MG Bacharel em Engenharia Elétrica com ênfase em Eletrônica - Universidade Federal de Itajubá. Mestrando em Engenharia Elétrica - Universidade Federal de Itajubá

Deixe um comentário

1 Comentário em "Controlador PLL - Phase Locked Loop"

Notificar
avatar
 
Ordenar por:   recentes | antigos | mais votados
Vinicius
Visitante
Vinicius

Bem legal. Dá para passar "algumas horas" com essa brincadeira. O resultado esperado é simples, porém a elaboração do algoritmo é muito complexa. Parabéns pelo seu conhecimento.

wpDiscuz