• Nenhum resultado encontrado

Kit de desenvolvimento CYCLONE II da Altera

No documento Modulação vetorial aplicada em FPGAs (páginas 30-38)

O kit usado pelo autor como alvo para todos os códigos em VHDL feitos é o kit de desenvolvimento DE-01 da empresa Altera, com endereço eletrônico disponível em https://www.intel.com.br/content/www/br/pt/products/programmable.html.

Tal kit possui um FPGA da família cyclone II com 20.000 elementos lógicos recombináveis e vários clocks disponíveis, como 50MHz, 24MHz e 27MHz, além de uma vasta gama de pinos de i/o, como entradas tipo PS2, RS232, uma saída VGA e até um CODEC de áudio.

Um dos pontos importantes para a escolha desse kit pelo autor foi a sua grande disponibilidade no laboratório e simplicidade de programação.

Figura 19 - Kit de desenvolvimento escolhido pelo autor e seu diagrama de blocos.

4 METODOLOGIA

Na primeira metade do trabalho, aplica-se o algoritmo de modulação vetorial no domínio discreto, de maneira a poder validar as características do método implementado. Nesse intuito, foi escolhido o PSIM como software de simulação inicial, visto que o mesmo tem uma vasta gama de funções, é amplamente usado no ramo da eletrônica de potência, e dá a possibilidade de se escrever códigos na linguagem de programação C.

Deve-se deixar claro que C tem como alvo microprocessadores e, portanto, não é o objetivo desse documento. O código escrito em C no software PSIM será apenas um auxiliador para a construção de um código que seja entendido por FPGAs.

Como o código auxiliar tem como objetivo ser adaptado para VDHL, algumas restrições foram necessárias, visto que o código escrito no software PSIM não poderia conter nenhuma capabilidade que não estivesse presente no código final de baixo nível.

As seguintes restrições foram tomadas:

• Não seria usada nenhuma função com relação a temporização. • Não seria usada nenhuma função trigonométrica.

• Não seria usada nenhuma função matemática complexa.

4.1 O Algoritmo

Assim como mostrado no capítulo2, a modulação vetorial utiliza um vetor de referência 𝑉𝑟𝑒𝑓 que gira no plano 𝛼 − 𝛽 com frequência 𝑓, amplitude 𝐴.

Para o cálculo dos tempos de acionamento das chaves usando a representação polar de 𝑉𝑟𝑒𝑓são usadas equações trigonométricas, que não são suportadas pela linguagem alvo e, portanto, a representação retangular de 𝑉𝑟𝑒𝑓foi usada ao invés.(Islam et al., 2018)

𝑉𝑟𝑒𝑓foi decomposto em suas componentes real e imaginária, dessa maneira, as componentes do vetor traçam sinusoides no eixo do tempo, e caso tais componentes sejam calculadas, o próprio 𝑉𝑟𝑒𝑓estará representado:

𝑅𝑒{𝑉𝑟𝑒𝑓} = 𝐴. 𝑐𝑜𝑠(2𝜋𝑓) = 𝑉𝑟𝑒𝑓𝑋 ( 6 )

Como não é possível o uso de funções trigonométricas, uma maneira diferente de sintetizar as componentes de 𝑉𝑟𝑒𝑓(𝑉𝑟𝑒𝑓𝑋, 𝑉𝑟𝑒𝑓𝑌)é necessária.

A alternativa mais comum para solucionar esse impasse é o uso de uma look-up table com os valores de uma senóide normalizada, guardada dentro de um vetor. Caso este vetor seja armazenado em memória externa ao FPGA, a comunicação entre estes dois irá acarretar num limite máximo de velocidade para execução do algoritmo, visto que o FPGA precisaria esperar um novo dado da referência senoidal para executar uma nova iteração.(Tzou, Hsu e Kuo, 1996)

Uma look-up table também poderia ser armazenada dentro do próprio FPGA em seus flip-flops, porém, o número de elementos lógicos no controlador é finito, e dependendo da resolução da senóide desejada, o espaço necessário para armazenar a mesma pode ser até maior que o espaço do próprio código, inviabilizando tal solução.

Neste contexto o autor se dispõe a usar uma solução diferente. Ao invés de se armazenar os dados da referência em tempo de compilação, a mesma será gerada programaticamente em tempo de execução, sem a necessidade de interfaceamento com outro CI e usando muito menos componentes do FPGA.

Para criar o vetor de referência foi percebida uma oportunidade nas simulações computacionais de objetos, ao se notar que um corpo em trajetória circular descreve sinusoides em suas posições horizontal e vertical em função do tempo. A Figura 20 mostra que caso a velocidade de um corpo seja perpendicular à sua posição, o mesmo descreve a trajetória circular necessária.

Figura 20 - Fundamentos do movimento de objetos em trajetória circular.

A partir do modelo físico do corpo em movimento, desconsiderando imperfeições como atrito e a resistência do ar, resultam as seguintes equações:

𝑃𝑜𝑠𝑖çã𝑜𝑋= 𝑃𝑜𝑠𝑖çã𝑜𝑋𝐼𝑛𝑖𝑐𝑖𝑎𝑙+ ∫ 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒𝑋. 𝑑𝑡 𝑡 0 ( 8 ) 𝑃𝑜𝑠𝑖çã𝑜𝑌 = 𝑃𝑜𝑠𝑖çã𝑜𝑌𝐼𝑛𝑖𝑐𝑖𝑎𝑙+ ∫ 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒𝑌. 𝑑𝑡 𝑡 0 ( 9 ) 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒 ⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗ ⃘ 𝑃𝑜𝑠𝑖çã𝑜⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗ = 0, |𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒|, |𝑃𝑜𝑠𝑖çã𝑜| > 0 ( 10 )

Analisando essas equações sobre a ótica do domínio discreto, as integrais são substituídas por somas simples e a rotação em 90° é feita pela matriz:

𝑅𝑜𝑡𝑑 = ( cos (∅) sen (∅) −sen (∅) cos (∅))

( 11 )

Com ∅ = 90°, tem-se as seguintes equações:

𝑃𝑜𝑠𝑖çã𝑜𝑋[𝑖] = 𝑃𝑜𝑠𝑖çã𝑜𝑋[𝑖 − 1] + 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒𝑋[𝑖]

𝑃𝑜𝑠𝑖çã𝑜𝑌[𝑖] = 𝑃𝑜𝑠𝑖çã𝑜𝑌[𝑖 − 1] + 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒𝑌[𝑖] ( 12 ) 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒𝑋[𝑖] = − 𝑃𝑜𝑠𝑖çã𝑜𝑌[𝑖 − 1]. V

𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒𝑌[𝑖] = 𝑃𝑜𝑠𝑖çã𝑜𝑋[𝑖 − 1]. V

( 13 )

Onde V é uma constante que dita tanto a frequência de rotação quanto a resolução da simulação. O resultado da aplicação destas equações para criar um sinal senoidal está na Figura 21.

Figura 21 - Simulação da referência senoidal.

É possível notar que a simulação gerou um sinal senoidal (“cossenoref”) com um raio que aumenta progressivamente. Ao se pensar sobre o exemplo do tempo contínuo, mostrado na Figura 22, no qual cada incremento da posição tem valor diferencial (dt = 0), tal problema não deve ocorrer, visto que resultaria nas seguintes equações:

𝑁𝑜𝑣𝑜 𝑅𝑎𝑖𝑜2 = 𝑅𝑎𝑖𝑜 𝐴𝑛𝑡𝑖𝑔𝑜2+ (Velocidade.dt)2 ( 14 )

No tempo discreto, o módulo do passo(𝑑𝑡) jamais será nulo, causando a amplitude da referência a divergir. É necessário então uma sub-rotina para efetuar a correção da amplitude de tal senóide. A solução usada pelo autor foi multiplicar, a cada certo número de iterações, as componentes real e imaginária de𝑉𝑟𝑒𝑓 pelo quociente entre o raio desejado e o raio atual medido.

|𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒. 𝑑𝑡| = 0 ( 15 )

|𝑁𝑜𝑣𝑜 𝑅𝑎𝑖𝑜| = |𝑅𝑎𝑖𝑜 𝐴𝑛𝑡𝑖𝑔𝑜| ( 16 )

Figura 23 - Correção da amplitude da senóide. Figura 22 - Exemplo de 'iteração' do movimento circular.

Fonte: Próprio autor.

Fonte: Próprio autor.

Após o uso dessa sub-rotina a amplitude da referência se manteve constante, assim como pode ser visto na Figura 23.

Com as componentes do vetor de referência já conhecidos, para o algoritmo de modulação trifásico, é necessário se definir em qual sextante a referência se encontra. Para o primeiro sextante, como os dois segmentos de reta que delimitam o mesmo tem ângulos 0° e 60° respectivamente, as equações que denotam se 𝑉𝑟𝑒𝑓 está no 1° sextante são:

𝑉𝑟𝑒𝑓𝑋 ≥ 0, 𝑉𝑟𝑒𝑓𝑌 ≥ 0, 𝑉𝑟𝑒𝑓𝑌 ≤ 𝑉𝑟𝑒𝑓𝑋. √3

( 17 )

Para todos os outros 5 sextantes, equações similares foram manualmente redigidas pelo autor e conseguem com precisão determinar o setor atual da referência, assim como verificado em simulação computacional mostrada na Figura 24.

Para cada sextante são definidos 2 vetores ativos a serem usados, assim como descrito na Tabela 1. Vale ressaltar que inicialmente na estratégia de modulação usada havia uma sequência clara dos vetores ativos usados, onde o 2° vetor usado em um sextante específico seria, no próximo sextante, o 1° vetor.

Figura 24 - Detecção de sextante.

Tabela 1 -Descrição dos vetores ativos por sextante. Sextante

Vetor ativo 1 Vetor ativo 2

Número Ativação das

chaves Binário Número

Ativação das chaves Binário 1 1 100 4 2 110 6 2 2 110 6 3 010 2 3 3 010 2 4 011 3 4 4 011 3 5 001 1 5 5 001 1 6 101 5 6 6 101 5 1 100 4

Com os dois vetores ativos definidos, resta ao algoritmo definir os tempos em que cada vetor ficará na saída do inversor. Tal cálculo, assim como explanado no capítulo 2, é feito pela definição dos coeficientes para que a combinação linear dos vetores ativos seja igual a referência. Para o 1° sextante temos as equações( 4 ) e ( 5 ):

𝑉𝑟𝑒𝑓𝑋. 𝑇𝑆 = 2 3. 𝑉𝑐𝑐. 𝑇1+ cos(60°). 2 3. 𝑉𝑐𝑐. 𝑇2 𝑉𝑟𝑒𝑓𝑌. 𝑇𝑆 = sin(60°).2 3. 𝑉𝑐𝑐. 𝑇2

Sendo 𝑇1 o tempo de uso do vetor ativo 1, e 𝑇𝑆 o tempo total de um ciclo da modulação.

Como os ângulos das funções trigonométricas presentes são sempre constantes, elas podem ser pré-calculadas em tempo de compilação e substituídas por valores suficientemente próximos para a aplicação desejada. No exemplo a seguir foram usadas 3 casas decimais de precisão. 𝑇2 = 3. (𝑉𝑟𝑒𝑓𝑌. 𝑇𝑆) 1.732. 𝑉𝑐𝑐 ( 18 ) 𝑇1 = 3. (𝑉𝑟𝑒𝑓𝑋. 𝑇𝑆 − 𝑉𝑐𝑐𝑇2 3 ) 𝑉𝑐𝑐. 2 ( 19 ) 𝑇0 = 𝑇𝑠 − 𝑇1− 𝑇2 ( 20 )

Figura 26 - Resultados de simulação para o algoritmo criado.

Vale ressaltar que para cada sextante as equações para o cálculo dos tempos são diferentes, tendo cabido ao autor resolver todos os sistemas de equações decorrentes e os colocar na linguagem de código desejada.

Usando tais equações foi possível finalizar o algoritmo em C para iniciar os testes da modulação vetorial trifásica. Assim como mostrado na Figura 25, o código criado foi capaz de executar corretamente a modulação, visto que em cada período, a variável ‘estadoatual’ passa por 0, assume um dos vetores ativos, troca pelo outro vetor e no meio da forma de onda chega no valor 7 (111), para depois repetir o ciclo ao reverso. É possível notar que os vetores ativos usado em cada sextante mudam, porém com um deles sempre permanecendo de um sextante a outro.

As simulações com o algoritmo criado acionando o inversor estudado foram realizadas e seus sinais de tensão e corrente na saída do conversor estão na Figura 26, evidenciando o correto funcionamento do código visto a baixa distorção harmônica da forma de onda de corrente, além da correta defasagem entre cada braço.

Figura 25 - Estados da modulação vetorial.

Fonte: Próprio autor

Por fim é possível criar o fluxograma do algoritmo desenvolvido, presente na Figura 27. O código criado está presente no anexo A.

No documento Modulação vetorial aplicada em FPGAs (páginas 30-38)

Documentos relacionados