Escolar Documentos
Profissional Documentos
Cultura Documentos
PARÁ
CAMPUS BELÉM
CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO
BELÉM/PA
2023
TAYMESON FURTADO CHAVES
BELÉM/PA
2023
DADOS INTERNACIONAIS DE CATALOGAÇÃO NA PUBLICAÇÃO (CIP)
CDD: 621.3815322
BELÉM/PA
2023
Dedico aos meus pais Carlos Alberto e Maria do
Socorro pelo incentivo e compreensão.
AGRADECIMENTOS
Aos meus pais Carlos Alberto e Maria do Socorro pelo apoio emocional, psicológico e
financeiro durante este curso.
Ao meu amor Daniela Chagas por estar ao meu lado me apoiando e incentivando.
Ao meu orientador André Cavalcante por sua orientação ao longo desse tempo e pelo
apoio financeiro.
Ao Instituto Federal do Pará pela formação profissional e pela infraestrutura fornecida
ao longo do curso.
À professora e coordenadora Regiane Araújo pela dedicação como professora em
orientar e lessionar seus valiosos conhecimentos.
Aos meus colegas de turma pela amizade e momentos de alegria nessa caminhada.
“A imaginação é mais importante que o conheci-
mento.” (Albert Einstein)
RESUMO
In this paper, the implementation of a converter with the option to select a two-level inverter and
a multilevel inverter from three to seven levels through an FPGA teaching kit board from the
company Altera with eight semiconductor switches is presented. The selection of the number
of inverter levels is performed with selector switch buttons present on the FPGA board. The
topology used to generate two to five levels was the symmetrical cascaded inverter. For the
seven-level inverter, the asymmetrical cascade inverter topology was used. For the development
of the inverter, a sinusoidal PWM modulation technique with carriers in phase was used, in
which the frequency was 2.5 kHz for the carriers and 60 Hz for the modulator. The circuit is
controlled by an FPGA programmable logic device using VHDL language. To understand the
implementation of the VHDL code were developed flowcharts that explain the explain the code’s
orientation. Simulations were made using ModelSim software to analyze the the behavior of the
VHDL code, and PSIM to analyze the waveforms of each inverter. inverter. Finally, the results of
the inverter in operation obtained with an oscilloscope are presented. oscilloscope.
AC Alternating Current
AD Analógico Digital
CA Corrente Alternada
CC Corrente Contínua
CI Circuito Integrado
DA Digital Analógico
DC Direct Current
FLC Flying-Capacitor
PD Phase Disposition
SD Secure Digital
PS Phase-Shift
S1 Chave de acionamento
S2 Chave de acionamento
S3 Chave de acionamento
S4 Chave de acionamento
D1 Diodo de retorno
D2 Diodo de retorno
m Número de níveis
Ar Amplitude da senoide
Ap Amplitude da portadora
fr Frequência da senoide
fp Frequência da portadora
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.1.1 Objetivo geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.1.2 Objetivos específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2 Estrutura do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 SIMULAÇÃO E PROGRAMAÇÃO . . . . . . . . . . . . . . . . . . . . 38
3.1 Simulação do Inversor no PSIM . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.1 Inversor de dois níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.2 Inversor de três níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.1.3 Inversor de cinco níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.1.4 Inversor de sete níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.1.5 Taxa de Distorção Harmônica (THD) . . . . . . . . . . . . . . . . . . . . . 44
3.2 A Linguagem VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3 Trabalhando com o Quartus® II Web Edition . . . . . . . . . . . . . . . 47
3.4 Trabalhando com o ModelSim – Intel FPGA Edition 2021.1 . . . . . . . 53
3.5 Simulação realizada no ModelSim . . . . . . . . . . . . . . . . . . . . . 57
3.5.1 Inversor de dois níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.5.2 Inversor de três níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.5.3 Inversor de cinco níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.5.4 Inversor de sete níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5 DESENVOLVIMENTO DO PROTÓTIPO . . . . . . . . . . . . . . . . . 75
5.1 Circuito do Inversor Multinível . . . . . . . . . . . . . . . . . . . . . . . 75
5.2 Driver de Acionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.3 Circuito de Potência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.4 Placa Altera DE2 e Aspectos Teóricos sobre FPGAs . . . . . . . . . . . . 83
5.4.1 Vantagens e desvantagens dos FPGAs . . . . . . . . . . . . . . . . . . . . . 85
5.4.2 Placa Altera DE2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1 Protótipo Montado no Laboratório . . . . . . . . . . . . . . . . . . . . . 89
6.2 Resultados Obtidos do Circuito em Funcionamento . . . . . . . . . . . . 91
6.2.1 Inversor de dois níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.2.2 Inversor de três níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.2.3 Inversor de cinco níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.2.4 Inversor de sete níveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.3 Espectro Harmônico Obtido por FFT no Osciloscópio . . . . . . . . . . 93
6.4 Análise no Osciloscópio do dead-time . . . . . . . . . . . . . . . . . . . . 95
7 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
APÊNDICES 103
APÊNDICE A – ESQUEMA DO CIRCUITO COMPLETO . . . . . . 104
1 INTRODUÇÃO
Das várias técnicas de modulação que usam PWM (Pulse Width Modulation), que é
uma técnica de pulsar rapidamente um sinal de modo a se obter o controle de potência e alcançar
melhorias na qualidade de energia e redução de distorção harmônica, a mais comum é o SPWM
(Modulação por Largura de Pulso Senoidal) o qual se baseia na comparação entre uma senoide e
uma portadora triangular para gerar os sinais de acionamento dos semicondutores. Tipicamente,
microcontroladores e dispositivos DSP (Digital Signal Processor) têm sido empregados para a
geração dos sinais PWM necessários para controle das chaves semicondutoras (BIAVA; FRAN-
CISCO; COELHO, 2016). DSPs são microprocessadores usados para processamento de sinal
como áudio e vídeo. Todavia, os FPGAs, embora exijam maior conhecimento em eletrônica, são
"processadores"de alto desempenho usados em processamento de dados em tempo real (AGNOL,
2018).
No passado, os circuitos lógicos eram basicamente constituídos por portas lógicas em
circuitos integrados, e vinham pré-configurados do fabricante, não permitindo que o usuário
fizesse suas próprias modificações. A chegada dos PLDs (Programmable Logic Devices) modi-
ficou esse paradigma, principalmente com o advento dos FPGAs (Field-Programmable Gate
Array) que são circuitos integrados contituídos de blocos lógicos arranjados em forma de matriz.
Isso permitiu que usuários fizessem seus próprios projetos de circuitos. Os PLDs são circuitos
cuja funcionalidade pode ser implementada pelo próprio usuário (COUTINHO, 2019). Portanto,
não apresentam uma função lógica definida e oriunda de fábrica até que o próprio usuário
configure esta função para uma aplicação.
Os FPGAs, assim como qualquer PLD, tem como diferencial com relação aos proces-
sadores, a capacidade de executar tarefas de forma paralela. Assim, a mudança de um sinal de
entrada modifica todos os sinais internos simultaneamente, e não sequencial como ocorre na
execução de instruções em processadores. Um FPGA pode assumir funções de qualquer outro
processador, como também permite implementar um processador em sua estrutura, além de pos-
suir capacidade de processar grande volume de dados paralelamente (AGNOL, 2018; DUTRA,
2016). Como os FPGAs permitem que o usuário tenha liberdade de programar a implementação
de qualquer circuito digital, é possível implementar diferentes técnica de modulação PWM em
conversores, com capacidade de realizar tarefas paralelas e não sequenciais como ocorre em
microcontroladores.
O presente trabalho apresenta a construção de um protótipo de um conversor multinível
monofásico capaz de gerar de dois a sete níveis controlado por um FPGA da empresa Altera,
utilizando técnica de modulação SPWM. A topologia empregada foi o Conversor em Cascata de
Ponte H (CHB) Simétrico para gerar dois a cinco níveis. E para gerar sete níveis, foi usada a
topologia Conversor em Cascata de Ponte H Assimétrica. No trabalho é descrito o desenvolvi-
mento do código em VHDL responsável por toda lógica de modulação a qual, por sua vez, é
responsável por gerar os sinais de saída do FPGA para o acionamento dos oito MOSFETs. É
descrito também o circuito driver que condiciona os sinais de baixa potência da placa do FPGA
aos gates dos MOSFETs.
A placa contendo o FPGA possuem botões que são capazes de selecionar quantos
níveis (dois, três, cinco ou sete níveis) se deseja na saída do inversor. A frequência padrão da
fundamental nesse inversor é 60 Hz e a das portadoras é 2500 Hz, contudo é possível alterar
essas frequências através dos botões da placa.
O objetivo desse trabalho é desenvolver uma ferramenta didática para o curso prático de
eletrônica de potência no IFPA Campus Belém, pois no Instituto não ha kit didático de inversores
multiníveis que possam auxiliar os professores no ensino de inversores. Neste Trabalho de
Conclusão de Curso (TCC), optou-se como modelo de FPGA a família Cyclone II da fabricante
Altera, devido a disponibilidade da placa no IFPA Campus Belém.
18
1.1 Objetivos
Inversores são circuitos que convertem uma tensão de entrada CC em uma tensão de
saída CA simétrica, com amplitude e frequência desejada, transferindo potência CC para uma
carga CA (HART, 2012; RASHID, 2014).
São constituídos por uma fonte CC que alimenta um circuito que pode ou não ter
frequência e/ou tensão variável. É possível se obter variação na tensão da saída de um inversor
de duas formas: uma é variando a tensão da fonte CC na entrada, e outra é mantendo a fonte CC
fixa e variar a tensão de saída por meio de modulação por largura de pulso – PWM.
Rashid (2014, p. 242) afirma isso dizendo que se a tensão de entrada CC for fixa e
não controlável, a tensão de saída pode ser variada variando o ganho do inversor através da
modulação por largura de pulso.
Inversores podem ser classificados quanto a topologia (meia-ponte e ponte completa)
do circuito, quanto ao número de fases (monofásico e trifásicos) e quanto ao número de níveis
(dois níveis e multinível). Os multiníveis podem ser classificados em grampeado a diodos,
grampeado a capacitores, inversor com capacitor flutuante, inversor ponte H em cascata simétrico
e assimétrico, entre outros. A Figura 2.1 mostra uma possível classificação dos inversores.
O inversor mais elementar é o inversor de dois níveis cuja saída é formada por níveis
que geram dois valores de tensão. É um conversor que apresenta, naturalmente, custo reduzido
devido à simplicidade do seu circuito. Para uma tensão de entrada E, a tensão de saída na carga
será +E ou −E para inversores em ponte completa, e +E/2 ou −E/2 para os inversores em
meia-ponte.
Esse conversor apresenta como desvantagem a baixa eficiência e elevada distorção
harmônica na saída, obrigando os fabricantes a desenvolverem filtros com custos muito elevados.
Ao se trabalhar com alta potência, é necessário atenuar a frequência de chaveamento para reduzir
as perdas. Contudo, para inversores de dois níveis, isso é inviável, pois a THD se torna elevada
demais. Por isso, esse inversor é usado em aplicações com baixa potência (MESQUITA, 2011).
A Figura 2.2 mostra a saída de um conversor monofásico de dois níveis com modulação PWM.
O formato de onda da tensão de saída na carga é mostrado na Figura 2.7. Nota-se que o
formato é o mesmo da topologia em meia-ponte.
23
Existem outros inversores que são capazes de sintetizar mais do que apenas dois
níveis de tensão. Esses inversores são denominados de inversores multiníveis. São circuitos que
sintetizam, na saída, tensão de vários níveis de tensão através de uma tensão CC de entrada, com
melhor conteúdo harmônico (MENAKA, 2017).
Os conversores multiníveis são compostos por chaves semicondutoras e capacitores,
nos quais através das combinações dessas chaves é possível adicionar ou retirar as tensões dos
capacitores formando uma onda de saída com vários níveis de tensão (ENCARNAÇÃO, 2009).
Embora os dispositivos semicondutores atuais sejam capazes de suportar altas tensões
e correntes, em algumas aplicações são requeridas tensões e correntes que vão além do valor
máximo permitido para estes dispositivos (WALTRICH, 2009). Encarnação (2009, p. 12) afirma
que uma solução para isso “seria a associação de chaves semicondutoras em série e/ou paralelo
de forma que o conjunto de chaves resultantes representasse uma única chave de maior potência
capaz de suportar os níveis de potência envolvidos”.
A Figura 2.8 exemplifica a saída de dois inversores multiníveis usando técnica de
modulação SPWM. Na Figura 2.8a, o sinal de saída apresenta três níveis e na Figura 2.8b,
apresenta nove níveis. Percebe-se que quanto maior o número de níveis, mais senoidal se torna o
sinal de saída.
Figura 2.8 – Inversor com três e nove níveis
(a) Inversor de três (b) Inversor de nove níveis
Novelin (2017, p. 18) afirma que um sinal da tensão de saída na carga em formato
quadrado apresenta um alto conteúdo harmônico. Portanto, o formato quadrado ou retangular de
onda em inversores de dois níveis apresenta muitos harmônicos que trazem consequências inde-
sejadas para sistemas de potência. Harmônicos, por exemplo, causam aumento do aquecimento
em motores devido ao aumento das perdas no ferro e no cobre, reduzindo a eficiência e o torque,
e, também, causam ruído audíveis nos motores (EFEITOS, 2007).
Inversores multiníveis são usados para diminuir a distorção harmônica sem diminuir a
potência do inversor, portanto são excelentes para atingir tensões elevadas com baixos harmôni-
cos (MENAKA, 2017).
Teoricamente, a distorção harmônica igual a zero pode ser obtida através de um número
infinito de níveis, portanto quanto maior o número de níveis, menor será a distorção harmônica
na saída do inversor (LAI e PENG, 1996). Quanto as classificações anteriores, os inversores
multiníveis podem ser classificados quanto ao número de fases, meia-ponte e ponte completa.
24
o sinal de saída entre v x e o ponto neutro ‘o’ (Neutral-Point) é (+E)/2, e quando somente as
chaves S3 e S4 estão em condução, o sinal de saída é (−E)/2. Para o estado em que somente S2
e S3 estão em condução, a saída é zero.
No caso do inversor de cinco níveis, a tensão no barramento CC é dividida entre os
quatro capacitores, formando, assim, cinco níveis na saída. Para se realizar um conversor NPC
de cinco níveis, é necessário usar oito dispositivos de chaveamento, quatro capacitores e doze
diodos (MANSO, 2019). A desvantagem dessa topologia é que com o aumento no número de
níveis, há o aumento excessivo no número de diodos (LOPES, 2019).
Na Figura 2.11 está o esquema do CHB de Figura 2.11a três níveis e Figura 2.11b
cinco níveis. Nota-se que, conforme as equações apresentadas por Manso (2019), o CHB de
três níveis necessita de apenas uma fonte CC e uma célula ou ponte H, constituída por quatro
27
No CHB de cinco níveis, os pares S1 /S2 , S3 /S4 , S5 /S6 e S7 /S8 não devem ser
acionados simultaneamente para evitar curto-circuito nas fontes isoladas. Com exceção desses
estados, os possíveis estados de comutação estão resumidos no Quadro 2.
29
De acordo com Mesquita (2011, p. 24), “os níveis da tensão na saída do conversor
em cascata devem ser igualmente espaçados”. Isso significa que a diferença entre dois níveis
consecutivos de tensão no sinal de saída do conversor híbrido assimétrico deve ser sempre a
mesma. Ainda segundo Mesquita (2011) se isso não for obedecido haverá comprometimento na
distorção harmônica do sinal de saída do conversor.
Para que isso seja garantido, Mesquita (2011) cita três condições que devem ser satisfei-
tas:
V1 ≤ V2 ≤ V3 ...Vx (2.1)
com Vx ∈ N, x = 1, 2, 3...n
• A menor fonte de tensão é escolhida como base para a normalização. Dessa forma, têm-se
os valores das fontes normalizados:
VX
VxN OR = (2.2)
V1
com VxN OR ∈ N, x = 1, 2, 3...n
• Para que os níveis sejam igualmente espaçados, essa última restrição demonstra que os
valores normalizados das tensões também deve satisfazer:
x−1
X
VxN OR ≤ 1 + 2 VxN OR (2.3)
x=1
A configuração do inversor pode ser unária (quando a fontes estão dispostas em progres-
são geométrica com razão 1), binária (progressão geométrica com razão 2) e ternária (progressão
geométrica com razão 3) (MESQUITA, 2011). Na configuração binária não ocorre subtração
entre as fontes das células para gerar níveis intermediários. Na ternária ocorre subtração entre as
fontes para gerar níveis intermediários. Mesquita (2011) apresenta em seu trabalho a seguinte
relação do número total de níveis para as configurações unárias, binárias e ternárias cujos pesos
para fontes Vx são respectivamente (1:1:1...), (1:2:4...) e (1:3:9...):
x
X VX
N =1+2 (2.4)
x=1 V1
32
Como exemplo, o inversor da Figura 2.14 é classificado como binário, pois a fonte de
tensão da segunda célula é o dobro da fonte da primeira célula, isto é, a disposição das duas
fontes segue uma progressão geométrica de razão 2.
Com relação aos estados de comutação do conversor da Figura 2.14, o Quadro 3
apresenta os possíveis estados de comutação com os respectivos sinais de saída do inversor.
A Figura 2.15 mostra os sete estados de chaveamento aplicados neste trabalho. Con-
forme se observa no Quadro 3, cada etapa corresponde um nível de tensão na saída do inversor.
33
Figura 2.19 – Modulação SPWM com Disposição em Oposição de Fases Alternadas (APOD)
A taxa de distorção harmônica quantifica o quanto uma forma de onda está distorcida
em relação a uma onda perfeitamente senoidal. É calculada para um determinado harmônico, ou
para todos os harmônicos do circuito (NOVELIN, 2017).
Segundo Novelin (2017), a taxa de distorção harmônica total (THD), é a relação entre
os valores das componentes harmônicas e o valor da componente fundamental, definido como:
qP
∞
n=2 ·Vn2
T HF = (2.8)
Vf
Onde:
Vf é o valor eficaz da tensão ou corrente na frequência fundamental;
Xn é o valor eficaz da tensão ou corrente na frequência de ordem n.
38
3 SIMULAÇÃO E PROGRAMAÇÃO
Neste capítulo serão apresentados simulações realizadas nos softwares PSIM e Multi-
Sim, aspectos da linguagem VHDL, como também os passos para se trabalhar com o Quartus®
II e ModelSim para se programar em VHDL.
Carga
30
20
10
0
‐10
‐20
‐30
‐40
Portadora Senoide
Time (s)
100
50
‐50
‐100
‐150
P1
Time (s)
1
0.8
0.6
0.4
0.2
P2
Time (s)
1
0.8
0.6
0.4
0.2
0
0 4m 8m 12m 16m 20m
Time (s)
Na Figura 3.4, é apresentada a saída com três níveis do inversor na carga. Agora, a
senoide é comparada com duas portadoras para gerar dois níveis mais o nível zero. Quando a
senoide é maior que a primeira portadora, a saída na carga apresenta pulsos variando entre 0 e
+32 V. Quando a senoide é menor que a primeira portadora e maior que a segunda portadora, a
saída apresenta pulsos variando entre 0 e -32 V. S1, S2, S3 e S4 são os sinais de chaveamento
aplicados nos MOSFETs. A tensão RMS foi de 24,40 V.
Carga
20
0
‐20
‐40
‐100
S1
Time (s)
0.8
0.4
S2
Time (s)
0.8
0.4
S3
Time (s)
0.8
0.4
S4
0.8
0.4
0
0 5m 10m 15m 20m 25m 30m 35m
Time (s)
60
40
20
‐20
‐40
‐60
200
100
‐100
‐200
Time (s)
Na Figura 3.7, são mostrados os sinais responsáveis por chavear os oito MOSFETs.
S1
0.8
0.4
S2
Time (s)
0.8
0.4
S3
Time (s)
0.8
0.4
S4
Time (s)
0.8
0.4
S5
Time (s)
0.8
0.4
S6
Time (s)
0.8
0.4
S7
Time (s)
0.8
0.4
S8
Time (s)
0.8
0.4
0
0 5m 10m 15m 20m 25m 30m
Time (s)
40
20
‐20
‐40
Time (s)
30
20
10
‐10
‐20
‐30
Time (s)
0.8
0.4
S2
Time (s)
0.8
0.4
S3
Time (s)
0.8
0.4
S4
Time (s)
0.8
0.4
S5
Time (s)
0.8
0.4
S6
Time (s)
0.8
0.4
S7
Time (s)
0.8
0.4
0
S8
Time (s)
0.8
0.4
0
0 5m 10m 15m 20m 25m 30m 35m
Time (s)
A Figura 3.12 ilustra um código em VHDL para implementação de uma porta NOT,
mostrando as estruturas entity e architecture.
O VHDL pode ser “programado” através de software EDA (Eletronic Design Auto-
mation) como, por exemplo, o Quartus® II Web Edition desenvolvido pela empresa Altera,
atualmente pertencente a Intel. É um software de síntese de projetos que reduz o tempo de
criação de circuitos digitais. Este software foi usado para implementar o código em VHDL nesse
trabalho.
A inserção de dados no Quartus® II Web Edition pode ser feita no Editor gráfico que
utiliza um diagrama de blocos a partir de elementos primitivos como portas lógicas, comparado-
res, somadores, entre outros (ZOLET, 2014). Pode ser feita também pelo Editor de texto onde
o programador insere comandos em linguagem VHDL ou Verilog para o desenvolvimento de
projetos (ZOLET, 2014). O desenvolvimento do código VHDL nesse projeto foi realizada no
editor de texto do Quartus® II Web Edition. O tópico a seguir explana os passos para se trabalhar
com o Quartus® II.
Após isso, a próxima e última tela resume as configurações feitas, restando apenas
finalizar clicando em “Finish”.
Finalizada as configurações do projeto, o passo seguinte é definir a linguagem que será
trabalhada. No trabalho atual, a linguagem utilizada foi o VHDL. Isso é definido indo em “File”
depois em “New” e, em seguida, selecionando “VHDL File”, conforme ilustra a Figura 3.16.
50
Ao clicar em “OK”, a tela do editor de texto é aberta. É nesse editor que a programação
em VHDL é implementada. Como exemplo, a imagem da Figura 3.17 ilustra parte do código em
VHDL implementado neste trabalho no editor de texto. Trata-se do código responsável por gerar
os sinais PWM do inversor multinível.
Após o desenvolvimento da programação no código, é necessário realizar a compilação.
Isso é feito clicando em “Start Compilation”. O programa solicita salvar o código VHDL. O
arquivo VHDL deverá ser salvo como o mesmo nome da entidade (entity). No caso atual, o
arquivo foi nomeado como “inversor_multinivel.vhd”. Se o arquivo não possuir o mesmo nome
da entidade, a compilação apresentará erro.
Caso nenhum erro seja encontrado no código durante a compilação, o passo seguinte
será mapear as entradas e/ou saídas do kit Altera DE2. Isso é necessário para definir quais serão
os pinos dos slots de expansão da placa FPGA que serão responsáveis pela saída dos sinais
PWM.
A Figura 3.18 mostra os dois slots de expansão da placa Altera DE2 e os pinos que
foram usados para enviar os sinais de acionamento aos gates. Os oito primeiros pinos superiores
do slot GPIO 2 são responsáveis por enviar os sinais PWM para o Driver de acionamento.
51
O mapeamento dos oito pinos no Pin Planner foi feito seguindo os endereços indicados
no manual da placa Altera DE2. O endereço do Clock (PIN_N2), por sua vez, foi obtido da
matriz de endereços conforme é mostrado na Figura 3.19. Os endereços dos botões usados na
placa foram obtidos do manual da placa. A Tabela 3.1 resume todos os endereços de entrada e
saída do projeto.
O oscilador da placa Altera DE2 tem frequência de 50 Mhz, portanto a período do clock
é 20 ns com ciclo de trabalho de 50%. Esses atributos são definidos na janela seguinte após clicar
em “Next”, conforme é ilustrado na Figura 3.24.
Nesta seção, serão mostrados os resultados simulados do inversor de dois, três, cinco e
sete níveis, bem como o formato da senoide, das portadoras, a saída do inversor e os sinais de
acionamento dos MOSFETs. O período de clock foi de 20 ns, e o tempo de simulação foi de 30
ms. A saída do inversor é representada pela variável "Vcc". A simulação no ModelSim serve
para avaliar se o código VHDL está funcionando conforme com o desejado.
58
Considerando “△t” como o intervalo de tempo entre dois valores lidos na ROM e “Tclk ”
o período completo do clock, então o número de contagens de ciclos de clock entre dois valores
lidos para fixar a frequência desejada é:
△t
Nx = (4.1)
Tclk
Como “△t” é a razão entre o período completo “T ” da senoide e o número de valores
“n” contidos na senoide, tem-se a seguinte equação dada por:
T
△t = (4.2)
n
Substituindo Equação (4.2) em Equação (4.1), chega-se em:
T
Nx = (4.3)
n · Tclk
65
A partir desse bloco, a explicação do fluxo é o mesmo do fluxograma da Figura 4.1 até
o bloco de decisão “Valor da Modulante 2 é maior que valor Portadora 2?”, com a diferença que
67
agora existem dois blocos de leitura da ROM, “Portadora 1” e “Portadora 2”, pois, como foi
explicado no Capítulo 2, para três níveis, são necessárias duas portadoras.
A partir do bloco “Valor da Modulante 2 é maior que valor Portadora 2?”, os blocos de
decisão farão comparação entre a modulante com as portadoras para o acionamento dos sinais
PWM. O acionamento dos sinais foi baseado no Quadro 1.
O conector “D” faz a ligação do fluxograma da Figura 4.3 ao da Figura 4.4. O inversor
de cinco níveis implementado nesse fluxograma é baseado na topologia clássica CHB simétrico.
e PWM4 em relação aos sinais complementadores (PWM2 e PWM3), pois os sinais PWM1 e
PWM4 só serão setados em nível 1 quando o contador for maior que N3.
Na Tabela 4.1, N3 é igual a 50. Logo, são necessários aguardar 50 ciclos de clock ou
mais. Um ciclo de clock, para uma frequência de 50 MHz, é igual a 20 ns, portanto 50 ciclos
equivalem um intervalo de tempo de 1 µs. Dessa forma, é gerado um atraso ou dead-time de 1µs
entre os sinais complementares. Assim, quando um MOSFET é desligado, o FPGA aguarda 1 µs
para acionar o MOSFET complementar.
Quando a portadora é maior que a modulante, o “timer2” é incrementado e os sinais
PWM1 e PWM4, antes setados em nível alto, agora são setados imediatamente em nível baixo
ou “0”. Quando o valor do contador “timer2” é maior que 50, os sinais PWM2 e PWM3 são
setados em nível alto ou “1”.
Na Figura 4.7, é ilustrado graficamente o resultado da presença do dead-time, represen-
tado por △t entre dois sinais PWM complementares, seguindo o processo do fluxograma.
Se o teste do bloco “Botão 1 está ligado e contador9 é zero?” for falso, então o bloco
de decisão “Botão 1 está desligado e contador9 é um?” é testado para verificar se o contador
“contador9” é um. Essa condição ocorre quando o botão, que antes estava pressionado é “solto”.
Na prática, enquanto o botão continuar pressionado, a frequência não mais se altera, somente se
o mesmo botão for liberado e permitir que contador “contador9” seja zerado é que a frequência
poderá ser alterada.
O bloco “Botão2 está ligado e contador10 é zero é freqsen é maior que 5?”, se verdadeiro,
é responsável por permitir que o botão reduza a frequência impedindo que a frequência seja
zerada ou que o valor da variável “freqsen” seja negativa. O contador “contador10” impede
que a frequência seja reduzida de maneira descontrolada caso o botão se mantenha pressionado
indefinidamente.
Logo depois, novamente surge o bloco “contador13 = 50000?” responsável pela técnica
debounce no botão de redução de frequência. O bloco seguinte “freqsen = freqsen – 5” reduz a
frequência em 5 Hz cada vez que o botão é pressionado. Depois o bloco “contador10 = contador10
+ 1” é incrementado para impedir redução descontrolada da frequência. Posteriormente, as
variáveis “a1”, “a2”, “a3”, “a4”, “b1”, “b2”, “b3” e “b4” são zeradas.
Se “Botão2 está ligado e contador10 é zero é freqsen é maior que 5?” é negativo, o
bloco “botão 2 está desligado e contador10 é 1? é testado e, caso verdadeiro, zera o contador
“contador10” permitindo que a frequência seja alterada novamente.
O conector “G” indica que após a execução dos blocos, será testado o bloco de decisão
“Botão 13 está ligado e contador11 é zero? Se verdadeiro, o bloco que implementa a técnica
debounce é executado e depois o bloco “freqtri = freqtri + 500” aumenta a frequência da
portadora em 500 Hz quando o botão for pressionado. Logo depois o contador “contador11” é
incrementado e as mesmas variáveis do bloco “contador10” são zeradas.
O bloco “Botão 4 está ligado e contador12 é zero e freqtri é maior que 500?” verifica
se o quarto botão não está pressionado indefinidamente e se a frequência não é igual a 500 ou
menor. Isso impede que ao reduzir a frequência, a variável freqtri não receba valor menor ou
igual a zero.
Quando verdadeiro, a técnica debounce também é aplicada, e depois o bloco responsável
por reduzir a frequência em 500 Hz é executado. Depois o contador “contador12” é incrementado
com a mesma finalidade do contador “contador11”.
Por fim, bloco “Botão 4 está desligado e contador 12 é um?”, quando verdadeiro,
zera o contador “contador12” permitindo modificar novamente a frequência da portadora. O
bloco “Botão swtich está ligado?” representa o bloco de decisão “switch1 ligado” da Figura 4.1,
pois o algoritmo de alteração da frequência antecede os algoritmos dos inversores. Portanto,
somente após a execução do algoritmo de alteração da frequência os algoritmos dos inversores
são executados.
75
5 DESENVOLVIMENTO DO PROTÓTIPO
Este capítulo tem o objetivo de explanar a montagem do inversor, bem como os circuitos
de potência e de acionamento, através de simulações realizadas no PSIM, como também o
desenvolvimento das simulações da programação em VHDL realizada no Quartus II e no
ModelSim. Serão apresentados também os aspectos teóricos sobre o FPGA e os materiais
necessários para o desenvolvimento do projeto.
A Figura 5.1 ilustra a conexão da placa do FPGA com o circuito do inversor. Na placa
do FPGA, há oito saídas e um ground conectados no slot de expansão da placa, conforme é
ilustrado na figura.
Figura 5.1 – Protótipo montado
A Figura 5.2 ilustra o esquema completo entre o circuito do inversor, composto pelo
circuito de potência, circuito driver e o circuito isolador do inversor. O circuito isolador é
composto por oito CIs optoacopladores PC817. Cada par de CI optoacoplador isola um driver
da saída da placa FPGA, garantido segurança à placa.
O circuito driver, constituído por quatro Drivers High And Low Side, recebe os
comandos de acionamento da placa do FPGA através dos optoacopladores para acionar os
MOSFETs do circuito de potência formado por duas pontes H.
Os gates drivers são circuitos integrados que servem como interface entre os sinais de
controle advindos de controladores digitais ou analógicos e interruptores semicondutores como
MOSFETs e IGBTs (INFINEON, 2022a). Basicamente, os gate drivers servem para condicionar
os sinais de saída de um controlador digital ou analógico para um nível de tensão necessário para
acionar transistores.
Neste trabalho, o driver aplicado é conhecido como High And Low Side. Ele permite
acionar dois MOSFETs de forma independente, ou seja, é possível acionar dois MOSFETs de
diferentes braços de transistores, superior ou inferior, de forma independente.
Conforme se observa na Figura 5.4, o circuito básico é composto por um capacitor
bootstrap e um diodo bootstrap. Além disso, o source do MOSFET superior possui referência
diferente do ground do MOSFET inferior. Dependendo da aplicação, o source do MOSFET
superior pode ou não estar conectado ao dreno do MOSFET inferior.
Figura 5.4 – Diagrama típico de conexão de driver High And Low Side
Oliveira (2021) afirma que na operação com bootstrap é necessário que os MOSFETs
chaveiem de modo que o duty cicle seja sempre inferior a 100% para que o capacitor de bo-
otstrap se carregue. A Figura 5.5 apresenta a conexão aplicada em um High And Low Side
modelo IR2101 no projeto deste trabalho. A conexão do driver com a carga foi feita em formato
Half-Bridge, no qual o dreno do MOSFET superior é conectado no source do MOSFET inferior.
Figura 5.5 – Conexão em modo Half-Bridge do driver High And Low Side IR2101
A saída do slot de expansão, mostrado na Figura 5.1 da placa do FPGA, trabalha com
sinais do tipo bit que variam entre 0 V e 3,3 V. Esses níveis de tensão não são capazes de acionar
de forma adequada os gates dos MOFESTs, e, por isso, é necessário condicionar os sinais de
saída da placa do FPGA com o circuito de potência, contendo os oito MOSFETs.
O circuito driver desenvolvido neste trabalho é um circuito que permite esse tipo de
condicionamento entre a placa do FPGA e o circuito de potência, permitindo acionar os gates do
MOSFETs com tensão entre 0 V e 12 V.
O circuito é constituído por:
• 4 drivers do tipo High and Low Side modelo IR2101 da International Rectifier.
• 8 optoacopladores PC817.
• 8 resistores de gate de 100 Ω.
• 8 resistores de 1 kΩ.
• 8 resistores de 100 Ω.
• 4 capacitores bootstraps eletrolíticos de 47 uF/50 V.
• 6 capacitores eletrolíticos de 1 nF / 50 V.
• 4 diodos rápidos modelo UF4007.
• 1 fonte de 12 V ISO modelo KPA-040F de 40 W.
• 1 fonte de 12 V APD modelo WA-18J12FB de 18 W.
• 1 Placa protoboard.
• Cabos jumpers.
O circuito montado na protoboard é dividido em duas células, superior e inferior,
isoladas, conforme mostra a Figura 5.6. A célula superior é responsável por acionar os quatro
MOSFET da ponte H superior, e a célula inferior é responsável pela ponte H inferior. Ambas as
células são alimentadas por duas fontes isoladas de 12 V: a superior por uma fonte do fabricante
APD modelo KPA-040F de 40 W e a inferior pelo fabricante ISO modelo WA-18J12FB de 18 W,
conforme é apresentado na Figura 5.7.
79
Figura 5.7 – Fontes usadas para alimentar o circuito driver: a) Modelo WA-18J12FB b) Modelo KPA-040F
Cada fonte alimenta dois CI IR2101. Conforme se ver na Figura 5.6, os CIs localizados
na parte superior são alimentados pela fonte KPA-040F, e os CIs na parte inferior são alimentados
pela fonte WA-18J12FB.
Cada CI IR2101 é responsável por acionar dois MOSFETs de cada braço de transistores.
Esse modelo foi escolhido por ser o componente com menor custo encontrado na internet durante
as buscas por gates drivers.
De acordo com seu datasheet, o IR2101 possui duas entradas independentes, e pode ser
alimentado com até 20 V e, por isso, o sinal de saída pode acionar gates com tensão Vgs de até
20 V.
Conforme é mostrado na Figura 5.6, para implementar o circuito driver de acionamento,
foram necessário quatro CIs IR2101 para acionar os oito MOSFETs IRFP460n do circuito de
80
potência.
Como forma de isolar opticamente a placa kit FPGA do circuito de potência, foram
adicionados oito optoacopladores de modelo PC817 nas entradas de cada CI IR2101. Durante o
funcionamento, os sinais oriundos do kit FPGA são enviados para os optoacopladores que são
responsáveis por repassar esses sinais aos gates drivers e manter o isolamento óptico.
A Figura 5.8 mostra o esquema elétrico de um driver IR2101 no circuito de acionamento.
Os sinais de entrada PWM1 e PWM2, complementares, vindos do kit FPGA são responsáveis
por acionar os MOSFETs superior e inferior, respectivamente. Nota-se o isolamento óptico
feito pelos optoacopladores U1 e U2 nas entradas HIN e LIN do driver. As entradas HIN e LIN
são responsáveis por acionar o GATE1 e GATE2, respectivamente. O capacitor de bootstrap
está representado por C1. Os diodos D3 e D4 servem para descarregar de modo mais rápido as
capacitâncias parasitas dos gates dos MOSFETs.
Figura 5.8 – Esquema elétrico de entrada e saída de um driver IR2101 do circuito de acionamento
Basicamente, quando um dos sinais PWM está em nível alto, o LED aciona o transistor
interno do optoacoplador levando a entrada (HIN ou LIN) correspondente para nível baixo. Do
contrário, se o sinal PWM estiver em nível baixo, o LED não aciona o transistor do optoacoplador,
e a entrada do IR2101 se mantem em nível alto. Embora, o fato supracitado mostre que as
entradas HIN e LIN estejam defasadas em relação aos sinais PWM do FPGA, isso não interfere
no funcionamento do circuito, conforme é mostrado na Figura 5.9.
É importante citar que nessa configuração com uso do IR2101 em modo Half-Bridge
as entradas PWM1 e PWM2 devem receber sinais com mesmo nível lógico para gerar sinais
complementares nos GATE1 e GATE2, respectivamente. Por exemplo, para que os sinais nos
GATEs sejam “1” e “0”, as entradas PMW1 e PWM2 devem receber os níveis “1” e “1”, e para
que sejam “0” e “1” as entradas devem receber níveis “0” e “0”.
Portanto, no projeto de programação, considerou-se esse detalhe para manter a lógica
binária em “1” e “0” ou “0” e “1” na saída do circuito de acionamento. Caso essa regra não seja
obedecida, os MOSFETs podem ser acionados simultaneamente, levando ao curto-circuito e à
queima dos MOSFETs.
81
Figura 5.9 – Sinais PWM complementares da saída de um driver IR2101 no circuito de acionamento
A Figura 5.9 mostra a saída de dois sinais PWM (enviados pela placa FPGA) de um dos
drivers IR2101 obtidos no osciloscópio digital do laboratório de eletrônica do IFPA, em um dos
testes do circuito. Nota-se que os sinais são complementares e variam de 0 à 12 V, evidenciando
o bom funcionamento do circuito Driver.
Os sinais PWM 1, PWM 2, PWM 3, PWM 4, PWM 5, PWM 6, PWM 7 e PWM 8 são
sinais condicionados do Driver ou circuito de acionamento. Cada sinal PWM varia entre 0 V e
12 V. Os sinais de saída do inversor são obtidos nos pontos de saída A e B, conforme é ilustrado
na Figura 5.10.
A Figura 5.11 mostra a imagem do MOSFET modelo IRFP460 usado no projeto. Esse
transistor é capaz, segundo seu datasheet, de suportar corrente de dreno de até 20 A e tensão
entre dreno e fonte de até 500 V. Os oito MOSFETs são do laboratório de eletrônica de potência.
Alimentação das duas pontes H é fornecida pelas duas fontes mostradas na Figura 5.13,
do laboratório. Cada fonte de modelo PS-3002D é capaz de fornecer até 32 VDC. Na imagem,
a fonte de cima (VCC_1) alimenta a ponte H superior, e a fonte de baixo (VCC_2) alimenta a
ponte H inferior.
Figura 5.13 – Fontes CC modelo PS–3002D
Muitos sistemas digitais atuais são feitos com Dispositivos de Lógica Programável
(PLD), cuja configuração é feita pela conexão e desconexão eletrônica de pontos internos para
criação de funções lógicas (TOCCI; WIDNER; MOSS; 2019). Os PLDs são circuitos cuja funci-
onalidade pode ser implementada pelo próprio usuário, portanto não apresentam uma função
84
Além disso, devido ao hardware dedicado, é possível obter latências previsíveis nos FPGAs
(CARMINATI e SCANDURRA, 2021). Qualquer circuito digital, independentemente da com-
plexidade, pode ser projetado em um FPGA, desde que o chip contenha um número suficiente de
blocos lógicos para emular o projeto.
Com relação as desvantagens, os microcontroladores são programados usando Assem-
bly ou linguagem C/C++, que são linguagens simples e fáceis de se trabalhar. FPGAs exigem
conhecimento de linguagem HDL e de circuitos digitais, o que dificulta muito seu aprendizado.
FPGAs são caros em comparação com os microcontroladores para operações mais
simples (MONMASSON et al. 2011). Outra desvantagem é que os FPGAs não costumam usar
recursos analógicos como ADCs. (AGNOL, 2018).
Com relação a processadores DSP, FPGAs oferecem maior taxa de transferência e poder
de processamento. Como podem ser reconfigurados no hardware, FPGAs oferecem personali-
zação completa ao implementar vários aplicativos DSP (ALTERA, 2001). Uma das barreiras
que os FPGAs enfrentam no mercado de DSP é o fato de sua linguagem não ser baseada em C e
sim em HDL, exigindo conhecimento profundo de sistemas digitais (ALTERA, 2001). DSPs
exigem conhecimento de linguagem simples como a C, diferentemente dos FPGAs que exigem
conhecimento de hardware para programar. DSP, da mesma forma que os microcontroladores,
executam tarefas sequenciais e assim apresentam limitações semelhantes quando comparados
aos FPGAs que trabalham de forma paralela.
FPGA têm vida útil curta em comparação com os microcontroladores. Microcontrola-
dores podem durar décadas em um dispositivo, enquanto que um chip FPGA em um dispositivo
embarcado geralmente requer substituição a cada dois a cinco anos (GARAGE, 2023)
Os sinais elétricos de saída da placa Altera DE2 vêm dos slots de expansão, cada
87
um contendo 40 pinos. Esses sinais são enviados para o Driver de acionamento para serem
condicionados e reenviados aos gates dos MOSFETs.
Os três botões slide switch são responsáveis por alternar o tipo de inversor. O primeiro
switch ativa o inversor de dois níveis, o segundo ativa o de três níveis, o terceiro ativa o de
cinco níveis e o quarto ativa o de sete níveis. O quinto botão tem função de resetar a frequência
da portadora e da senoide. Os quatro botões push button são responsáveis pela alteração da
frequência: o primeiro aumenta e o segundo reduz a frequência da senoide; o terceiro aumenta e
o quarto reduz a frequência da portadora.
6 RESULTADOS
Neste capítulo, serão apresentados os resultados práticos obtidos da saída dos inversores,
no osciloscópio, cujo circuito foi montado na protoboard. Serão mostrados também os espectros
harmônicos de cada inversor obtidas através da FFT do Osciloscópio.
O tipo de modulação usada neste projeto foi a modulação PD, na qual todas as portadoras
estão em fase.
Na Figura 6.3, é mostrado a placa DE0 Altera do FPGA conectada ao circuito driver
montado na protoboard durante os testes. Na Figura 6.4, é apresentado o circuito de potência
recebendo os sinais de acionamento do circuito driver.
Figura 6.3 – Placa FPGA enviando sinais de acionamento ao driver
A Figura 6.5, apresenta com maior aproximação a conexão da placa do FPGA ao driver
através do cabo flat conectado à saída IDE da placa. Além do oito terminais conectados, há um
nono terminal que conecta os optoacopladores ao ground da placa.
tensão RMS foi de 29,1 V. Essa diferença de quase 3 V é motivada pelo índice de modulação
para esse inversor ser 0,99.
RMS com tensão de 44,92 V. No teste prático, a tensão RMS foi de 43,1 V.
Figura 6.8 – Saída do inversor de cinco níveis
Na Figura 6.11, é apresentado o espectro harmônico para saída do inversor de três níveis.
Nota-se uma sutil redução do conteúdo harmônico quando comparado à Figura 6.10.
7 CONCLUSÃO
Para desenvolvimento de trabalhos futuros com uso de FPGA a seguintes sugestões são
apresentadas:
• Aplicação de técnicas de controle para o controle de de tensão ou corrente na saída do
inversor;
• Aplicação de técnicas de controle para o controle de velocidade de um motor acionado
pelo inversor;
• Desenvolvimento de filtro para redução de THD no circuito do inversor;
• Desenvolvimento de uma placa do circuito para ser utilizada como kit didático no ensino
de eletrônica de potência;
98
REFERÊNCIAS
Monmasson, E.; Idkhajine, M.; Cirstea, N.; Bahri, I.; Tisan and M. W. Naouar. "FPGAs in
Industrial Control Applications,"in IEEE Transactions on Industrial Informatics. vol. 7,
no. 2, pp. 224-243, May 2011, doi: 10.1109/TII.2011.2123908.
TEXAS INSTRUMENTS. Low Side and H-Bridge Gate Driver Fundamentals. Texas, 2017.
Disponível em: <https:
//training.ti.com/gate-driver-training-series-low-side-and-h-bridge-gate-driver-fundamentals>.
Acesso em: 20 de jan. de 2022.
MANSO, João Luís Torre. Desenvolvimento de um Filtro Ativo de Potência Série
Monofásico sem Fontes Externas. Orientador: Doutor José Gabriel Oliveira Pinto. 2019. 156 p.
Dissertação (Mestre em Engenharia Eletrónica Industrial e de Computadores) - Universidade de
Minho, Minho, 2019.
MANSUR, Rodolfo Labiapari. FPGA – Linguagem De Descrição De Hardware (VHDL).
Laboratório Imobilis: Computação móvel. Ouro Preto, 27 jun. 2016. Disponível em: <http:
//www2.decom.ufop.br/imobilis/fpga-flexibilidade-no-projeto-de-hardware-parte-3-de-3/>.
Acesso em: 10 jul. 2022.
MENAKA, S.; MURALIDHARAN, S. Novel symmetric and asymmetric multilevel inverter
topologies with minimum number of switches for high voltage of electric ship propulsion
system. Indian Journal of Geo Marine Sciences. Índia, v. 46, n. 9, set. 2017.
MESQUITA, Samuel Jó de. Uma Proposta De Projeto Para Inversor Multinível Em Cascata
Assimétrico Com 63 Níveis Na Tensão De Saída E Operação Em Baixa Frequência.
Orientador: Fernando Luiz Marcelo Antunes. 2011. 180 p. Dissertação (Mestre em Engenharia
Elétrica) - Universidade Federal do Ceará, Fortaleza, 2011.
NORONHA, D. B. et al. Uma visão geral sobre dispositivos lógicos reconfiguráveis (fpga) e
suas aplicações. XIII Conferência de Estudos em Engenharia Elétrica, 2015. Disponível em:
<https://www.peteletricaufu.com.br/static/ceel/doc/artigos/artigos2005/ceel2005_059.pdf>.
Acesso em: 1 mai. 2022.
NOVELIN, Isabelle Thais. Comportamento Harmônico De Inversores De Frequência.
Orientador: Joaquim Eloir Rocha. 2017. 74 p. Trabalho de Conclusão de Curso (Bacharel em
Engenharia Elétrica) - Departamento Acadêmico de Eletrotécnica (DAELT) da Universidade
Tecnológica Federal do Paraná (UTFPR), Curitiba, 2017.
OLIVEIRA, Thiago. Tipos de Gate Drivers em Eletrônica de Potência. YouTube, 29 de jun. de
2021. Disponível em: <https://youtu.be/RgFSD5BAVbY>. Acesso em 28 nov. 2021.
PARIS, Jean Michel de. Modulação Phase disposition com Algoritmo de Sorting para
Conversores Multiníveis Simétricos em Cascata. Orientador: Dra. Fernanda de Morais
Carnielutti. 2018. 166 p. Dissertação (Mestrado em Engenharia Elétrica) - Universidade Federal
de Santa Maria, Santa Maria, 2018.
RASHID, Muhhamad H. Eletrônica de Potência: Dispositivos, circuitos e aplicações. 4. ed. São
Paulo: Pearson Education do Brasil, 2014. 880 p. ISBN 978-85-430-1452-4. E-book (880 p.).
SINGH, Rohit. CPLD vs FPGA: Differences between them and which one to use?. [S. l.], 2017.
Disponível em: <https://numato.com/kb/cpld-vs-fpga-differences-one-use/>. Acesso em: 28 fev.
2022.
102
VCC_1
VDD_1 VDD_1
D3 D5
APÊNDICE A – Esquema do Circuito Completo
D1 D2
UF4007
R17 Q1 Q3 UF4007
R5
UF4007 UF4007
1k R1 IRFP460 IRFP460 R3 1k
C1 C4 C2 100 100 C5 C6 C3
47uF 22n 22n 22n 22n 47uF
1 U1 1 U2
R21 U9 U3 R7
1 A C 4 2 8 8 2 4 C A 1
pwm1 HIN V+ VB VB V+ HIN pwm3
100R 7 7 100R
HO HO
6 6
VS A VS
2 3 3 5 5 3 3 2
LIN COM LO LO COM LIN
K E E K
PC817
4
IR2101 D4 D6 4
PC817
IR2101
GND_FPGA R18 UF4007 UF4007 R6 GND_FPGA
1k
Q2 Q4 1k
R2 IRFP460 IRFP460 R4
R22 U5 100 100 U4 R8
1 A C 4 4 C A 1
pwm2 pwm4
100R 100R
2 3 3 2
K E E K
PC817 PC817
GND_1 GND_1 GND_1
GND_FPGA VCC_2 GND_FPGA
VDD_2 VDD_2
D8 D11
D7 D10
UF4007 UF4007
R11 Q5 Q7 R19
UF4007 UF4007
1k R9 IRFP460 IRFP460 R15 1k
C7 C9 C8 100 100 C11 C12 C10
47uF 22n 22n 22n 22n 47uF
1 U6 1 U10
R13 U7 U11 R23
1 A C 4 2 8 8 2 4 C A 1
pwm5 HIN V+ VB VB V+ HIN pwm7
100R 7 7 100R
HO HO
6 6
VS B VS
2 3 3 5 5 3 3 2
LIN COM LO LO COM LIN
K E E K
PC817
4
IR2101 D9 D12 4
PC817
IR2101
GND_FPGA R12 UF4007 UF4007 R20 GND_FPGA
1k
Q6 Q8 1k
R10 IRFP460 IRFP460 R16
R14 U8 100 100 U12 R24
1 A C 4 4 C A 1
pwm6 pwm8
100R 100R
2 3 3 2
K E E K
PC817 GND_2 PC817
GND_2 GND_2
GND_FPGA GND_FPGA
105
78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,
50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,
22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1);
type triangular3 is array (integer range <>) of integer; -- Portadora triangular doinversorde 7 níveis com 1500 amostras variando de 0 a 500
constant variable_portadora3:triangular3 (1 to
1500):=(0,1,1,2,3,3,4,5,5,6,7,7,8,9,9,10,11,11,12,13,13,14,15,15,16,17,17,18,19,19,
20,21,21,22,23,23,24,25,25,26,27,27,28,29,29,30,31,31,32,33,33,34,35,35,36,37,37,38,
39,39,40,41,41,42,43,43,44,45,45,46,47,47,48,49,49,50,51,51,52,53,53,54,55,55,56,57,
57,58,59,59,60,61,61,62,63,63,64,65,65,66,67,67,68,69,69,70,71,71,72,73,73,74,75,75,
76,77,77,78,79,79,80,81,81,82,83,83,84,85,85,86,87,87,88,89,89,90,91,91,92,93,93,94,
95,95,96,97,97,98,99,99,100,101,101,102,103,103,104,105,105,106,107,107,108,109,109,
110,111,111,112,113,113,114,115,115,116,117,117,118,119,119,120,121,121,122,123,123,
124,125,125,126,127,127,128,129,129,130,131,131,132,133,133,134,135,135,136,137,137,
138,139,139,140,141,141,142,143,143,144,145,145,146,147,147,148,149,149,150,151,151,
152,153,153,154,155,155,156,157,157,158,159,159,160,161,161,162,163,163,164,165,165,
166,167,167,168,169,169,170,171,171,172,173,173,174,175,175,176,177,177,178,179,179,
180,181,181,182,183,183,184,185,185,186,187,187,188,189,189,190,191,191,192,193,193,
194,195,195,196,197,197,198,199,199,200,201,201,202,203,203,204,205,205,206,207,207,
208,209,209,210,211,211,212,213,213,214,215,215,216,217,217,218,219,219,220,221,221,
222,223,223,224,225,225,226,227,227,228,229,229,230,231,231,232,233,233,234,235,235,
236,237,237,238,239,239,240,241,241,242,243,243,244,245,245,246,247,247,248,249,249,
250,251,251,252,253,253,254,255,255,256,257,257,258,259,259,260,261,261,262,263,263,
264,265,265,266,267,267,268,269,269,270,271,271,272,273,273,274,275,275,276,277,277,
278,279,279,280,281,281,282,283,283,284,285,285,286,287,287,288,289,289,290,291,291,
292,293,293,294,295,295,296,297,297,298,299,299,300,301,301,302,303,303,304,305,305,
306,307,307,308,309,309,310,311,311,312,313,313,314,315,315,316,317,317,318,319,319,
320,321,321,322,323,323,324,325,325,326,327,327,328,329,329,330,331,331,332,333,333,
334,335,335,336,337,337,338,339,339,340,341,341,342,343,343,344,345,345,346,347,347,
348,349,349,350,351,351,352,353,353,354,355,355,356,357,357,358,359,359,360,361,361,
362,363,363,364,365,365,366,367,367,368,369,369,370,371,371,372,373,373,374,375,375,
376,377,377,378,379,379,380,381,381,382,383,383,384,385,385,386,387,387,388,389,389,
390,391,391,392,393,393,394,395,395,396,397,397,398,399,399,400,401,401,402,403,403,
404,405,405,406,407,407,408,409,409,410,411,411,412,413,413,414,415,415,416,417,417,
418,419,419,420,421,421,422,423,423,424,425,425,426,427,427,428,429,429,430,431,431,
432,433,433,434,435,435,436,437,437,438,439,439,440,441,441,442,443,443,444,445,445,
446,447,447,448,449,449,450,451,451,452,453,453,454,455,455,456,457,457,458,459,459,
460,461,461,462,463,463,464,465,465,466,467,467,468,469,469,470,471,471,472,473,473,
474,475,475,476,477,477,478,479,479,480,481,481,482,483,483,484,485,485,486,487,487,
488,489,489,490,491,491,492,493,493,494,495,495,496,497,497,498,499,499,500,499,499,
498,497,497,496,495,495,494,493,493,492,491,491,490,489,489,488,487,487,486,485,485,
484,483,483,482,481,481,480,479,479,478,477,477,476,475,475,474,473,473,472,471,471,
470,469,469,468,467,467,466,465,465,464,463,463,462,461,461,460,459,459,458,457,457,
456,455,455,454,453,453,452,451,451,450,449,449,448,447,447,446,445,445,444,443,443,
442,441,441,440,439,439,438,437,437,436,435,435,434,433,433,432,431,431,430,429,429,
428,427,427,426,425,425,424,423,423,422,421,421,420,419,419,418,417,417,416,415,415,
414,413,413,412,411,411,410,409,409,408,407,407,406,405,405,404,403,403,402,401,401,
400,399,399,398,397,397,396,395,395,394,393,393,392,391,391,390,389,389,388,387,387,
386,385,385,384,383,383,382,381,381,380,379,379,378,377,377,376,375,375,374,373,373,
372,371,371,370,369,369,368,367,367,366,365,365,364,363,363,362,361,361,360,359,359,
358,357,357,356,355,355,354,353,353,352,351,351,350,349,349,348,347,347,346,345,345,
344,343,343,342,341,341,340,339,339,338,337,337,336,335,335,334,333,333,332,331,331,
330,329,329,328,327,327,326,325,325,324,323,323,322,321,321,320,319,319,318,317,317,
316,315,315,314,313,313,312,311,311,310,309,309,308,307,307,306,305,305,304,303,303,
302,301,301,300,299,299,298,297,297,296,295,295,294,293,293,292,291,291,290,289,289,
288,287,287,286,285,285,284,283,283,282,281,281,280,279,279,278,277,277,276,275,275,
274,273,273,272,271,271,270,269,269,268,267,267,266,265,265,264,263,263,262,261,261,
260,259,259,258,257,257,256,255,255,254,253,253,252,251,251,250,249,249,248,247,247,
246,245,245,244,243,243,242,241,241,240,239,239,238,237,237,236,235,235,234,233,233,
232,231,231,230,229,229,228,227,227,226,225,225,224,223,223,222,221,221,220,219,219,
218,217,217,216,215,215,214,213,213,212,211,211,210,209,209,208,207,207,206,205,205,
204,203,203,202,201,201,200,199,199,198,197,197,196,195,195,194,193,193,192,191,191,
190,189,189,188,187,187,186,185,185,184,183,183,182,181,181,180,179,179,178,177,177,
176,175,175,174,173,173,172,171,171,170,169,169,168,167,167,166,165,165,164,163,163,
162,161,161,160,159,159,158,157,157,156,155,155,154,153,153,152,151,151,150,149,149,
148,147,147,146,145,145,144,143,143,142,141,141,140,139,139,138,137,137,136,135,135,
134,133,133,132,131,131,130,129,129,128,127,127,126,125,125,124,123,123,122,121,121,
120,119,119,118,117,117,116,115,115,114,113,113,112,111,111,110,109,109,108,107,107,
106,105,105,104,103,103,102,101,101,100,99,99,98,97,97,96,95,95,94,93,93,92,91,91,90,
89,89,88,87,87,86,85,85,84,83,83,82,81,81,80,79,79,78,77,77,76,75,75,74,73,73,72,71,
71,70,69,69,68,67,67,66,65,65,64,63,63,62,61,61,60,59,59,58,57,57,56,55,55,54,53,53,
52,51,51,50,49,49,48,47,47,46,45,45,44,43,43,42,41,41,40,39,39,38,37,37,36,35,35,34,
33,33,32,31,31,30,29,29,28,27,27,26,25,25,24,23,23,22,21,21,20,19,19,18,17,17,16,15,
15,14,13,13,12,11,11,10,9,9,8,7,7,6,5,5,4,3,3,2,1,1);
type senoide1 is array (integer range <>) of integer;-- senoide do inversor de dois niveis com 1000 valores variando de 0 a 1000
constant variable_senoide1 : senoide1 (1 to 1000):=(500,503,506,509,513,516,519,522,
525,528,531,535,538,541,544,547,550,553,556,560,563,566,569,572,575,578,581,584,588,
591,594,597,600,603,606,609,612,615,618,621,624,627,630,633,636,639,643,646,649,652,
655,657,660,663,666,669,672,675,678,681,684,687,690,693,696,699,701,704,707,710,713,
716,719,721,724,727,730,733,735,738,741,744,746,749,752,755,757,760,763,765,768,771,
773,776,778,781,784,786,789,791,794,796,799,801,804,806,809,811,814,816,819,821,824,
826,828,831,833,835,838,840,842,845,847,849,851,854,856,858,860,862,864,867,869,871,
873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903,905,906,908,910,912,
914,915,917,919,920,922,924,925,927,929,930,932,934,935,937,938,940,941,943,944,946,
947,948,950,951,952,954,955,956,958,959,960,961,963,964,965,966,967,968,969,970,971,
973,974,975,976,976,977,978,979,980,981,982,983,984,984,985,986,987,987,988,989,989,
990,991,991,992,992,993,993,994,994,995,995,996,996,996,997,997,997,998,998,998,999,
999,999,999,999,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,
1000,999,999,999,999,999,998,998,998,997,997,997,996,996,996,995,995,994,994,993,993,
992,992,991,991,990,989,989,988,987,987,986,985,984,984,983,982,981,980,979,978,977,976,
976,975,974,973,971,970,969,968,967,966,965,964,963,961,960,959,958,956,955,954,952,
951,950,948,947,946,944,943,941,940,938,937,935,934,932,930,929,927,925,924,922,920,
919,917,915,914,912,910,908,906,905,903,901,899,897,895,893,891,889,887,885,883,881,
879,877,875,873,871,869,867,864,862,860,858,856,854,851,849,847,845,842,840,838,835,
833,831,828,826,824,821,819,816,814,811,809,806,804,801,799,796,794,791,789,786,784,
781,778,776,773,771,768,765,763,760,757,755,752,749,746,744,741,738,735,733,730,727,
724,721,719,716,713,710,707,704,701,699,696,693,690,687,684,681,678,675,672,669,666,
663,660,657,655,652,649,646,643,639,636,633,630,627,624,621,618,615,612,609,606,603,
600,597,594,591,588,584,581,578,575,572,569,566,563,560,556,553,550,547,544,541,538,
535,531,528,525,522,519,516,513,509,506,503,500,497,494,491,487,484,481,478,475,472,
469,465,462,459,456,453,450,447,444,440,437,434,431,428,425,422,419,416,412,409,406,
403,400,397,394,391,388,385,382,379,376,373,370,367,364,361,357,354,351,348,345,343,
340,337,334,331,328,325,322,319,316,313,310,307,304,301,299,296,293,290,287,284,281,
279,276,273,270,267,265,262,259,256,254,251,248,245,243,240,237,235,232,229,227,224,
222,219,216,214,211,209,206,204,201,199,196,194,191,189,186,184,181,179,176,174,172,
169,167,165,162,160,158,155,153,151,149,146,144,142,140,138,136,133,131,129,127,125,
123,121,119,117,115,113,111,109,107,105,103,101,99,97,95,94,92,90,88,86,85,83,81,80,
78,76,75,73,71,70,68,66,65,63,62,60,59,57,56,54,53,52,50,49,48,46,45,44,42,41,40,39,
37,36,35,34,33,32,31,30,29,27,26,25,24,24,23,22,21,20,19,18,17,16,16,15,14,13,13,12,
11,11,10,9,9,8,8,7,7,6,6,5,5,4,4,4,3,3,3,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,2,2,2,3,3,3,4,4,4,5,5,6,6,7,7,8,8,9,9,10,11,11,12,13,13,14,15,16,16,17,
18,19,20,21,22,23,24,24,25,26,27,29,30,31,32,33,34,35,36,37,39,40,41,42,44,45,46,48,
49,50,52,53,54,56,57,59,60,62,63,65,66,68,70,71,73,75,76,78,80,81,83,85,86,88,90,92,
94,95,97,99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,129,131,133,136,
138,140,142,144,146,149,151,153,155,158,160,162,165,167,169,172,174,176,179,181,184,
186,189,191,194,196,199,201,204,206,209,211,214,216,219,222,224,227,229,232,235,237,
240,243,245,248,251,254,256,259,262,265,267,270,273,276,279,281,284,287,290,293,296,
299,301,304,307,310,313,316,319,322,325,328,331,334,337,340,343,345,348,351,354,357,
361,364,367,370,373,376,379,382,385,388,391,394,397,400,403,406,409,412,416,419,422,
425,428,431,434,437,440,444,447,450,453,456,459,462,465,469,472,475,478,481,484,487,
491,494,497);
type senoide2 is array (integer range <>) of integer;-- Senoide do inversor de 3 níveis com 1000 valores variando de -500 a 500
constant variable_senoide2 : senoide2(1 to 1000):=(0,3,6,9,13,16,19,22,25,28,31,35,38,41,44,47,50,53,56,60,63,66,69,72,75,78,
81,84,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,143,146,149,152,155,157,160,163,166,169,172,175,178,
107
181,184,187,190,193,196,199,201,204,207,210,213,216,219,221,224,227,230,233,235,238,241,244,246,249,252,255,257,260,263,265,
268,271,273,276,278,281,284,286,289,291,294,296,299,301,304,306,309,311,314,316,319,321,324,326,328,331,333,335,338,340,342,
345,347,349,351,354,356,358,360,362,364,367,369,371,373,375,377,379,381,383,385,387,389,391,393,395,397,399,401,403,405,406,
408,410,412,414,415,417,419,420,422,424,425,427,429,430,432,434,435,437,438,440,441,443,444,446,447,448,450,451,452,454,455,
456,458,459,460,461,463,464,465,466,467,468,469,470,471,473,474,475,476,476,477,478,479,480,481,482,483,484,484,485,486,487,
487,488,489,489,490,491,491,492,492,493,493,494,494,495,495,496,496,496,497,497,497,498,498,498,499,499,499,499,499,500,500,
500,500,500,500,500,500,500,500,500,500,500,500,500,499,499,499,499,499,498,498,498,497,497,497,496,496,496,495,495,494,494,
493,493,492,492,491,491,490,489,489,488,487,487,486,485,484,484,483,482,481,480,479,478,477,476,476,475,474,473,471,470,469,
468,467,466,465,464,463,461,460,459,458,456,455,454,452,451,450,448,447,446,444,443,441,440,438,437,435,434,432,430,429,427,
425,424,422,420,419,417,415,414,412,410,408,406,405,403,401,399,397,395,393,391,389,387,385,383,381,379,377,375,373,371,369,
367,364,362,360,358,356,354,351,349,347,345,342,340,338,335,333,331,328,326,324,321,319,316,314,311,309,306,304,301,299,296,
294,291,289,286,284,281,278,276,273,271,268,265,263,260,257,255,252,249,246,244,241,238,235,233,230,227,224,221,219,216,213,
210,207,204,201,199,196,193,190,187,184,181,178,175,172,169,166,163,160,157,155,152,149,146,143,139,136,133,130,127,124,121,
118,115,112,109,106,103,100,97,94,91,88,84,81,78,75,72,69,66,63,60,56,53,50,47,44,41,38,35,31,28,25,22,19,16,13,9,6,3,0,-3,
-6,-9,-13,-16,-19,-22,-25,-28,-31,-35,-38,-41,-44,-47,-50,-53,-56,-60,-63,-66,-69,-72,-75,-78,-81,-84,-88,-91,-94,-97,-100,
-103,-106,-109,-112,-115,-118,-121,-124,-127,-130,-133,-136,-139,-143,-146,-149,-152,-155,-157,-160,-163,-166,-169,-172,-175,
-178,-181,-184,-187,-190,-193,-196,-199,-201,-204,-207,-210,-213,-216,-219,-221,-224,-227,-230,-233,-235,-238,-241,-244,-246,
-249,-252,-255,-257,-260,-263,-265,-268,-271,-273,-276,-278,-281,-284,-286,-289,-291,-294,-296,-299,-301,-304,-306,-309,-311,
-314,-316,-319,-321,-324,-326,-328,-331,-333,-335,-338,-340,-342,-345,-347,-349,-351,-354,-356,-358,-360,-362,-364,-367,-369,
-371,-373,-375,-377,-379,-381,-383,-385,-387,-389,-391,-393,-395,-397,-399,-401,-403,-405,-406,-408,-410,-412,-414,-415,-417,
-419,-420,-422,-424,-425,-427,-429,-430,-432,-434,-435,-437,-438,-440,-441,-443,-444,-446,-447,-448,-450,-451,-452,-454,-455,
-456,-458,-459,-460,-461,-463,-464,-465,-466,-467,-468,-469,-470,-471,-473,-474,-475,-476,-476,-477,-478,-479,-480,-481,-482,
-483,-484,-484,-485,-486,-487,-487,-488,-489,-489,-490,-491,-491,-492,-492,-493,-493,-494,-494,-495,-495,-496,-496,-496,-497,
-497,-497,-498,-498,-498,-499,-499,-499,-499,-499,-500,-500,-500,-500,-500,-500,-500,-500,-500,-500,-500,-500,-500,-500,-500,
-499,-499,-499,-499,-499,-498,-498,-498,-497,-497,-497,-496,-496,-496,-495,-495,-494,-494,-493,-493,-492,-492,-491,-491,-490,
-489,-489,-488,-487,-487,-486,-485,-484,-484,-483,-482,-481,-480,-479,-478,-477,-476,-476,-475,-474,-473,-471,-470,-469,-468,
-467,-466,-465,-464,-463,-461,-460,-459,-458,-456,-455,-454,-452,-451,-450,-448,-447,-446,-444,-443,-441,-440,-438,-437,-435,
-434,-432,-430,-429,-427,-425,-424,-422,-420,-419,-417,-415,-414,-412,-410,-408,-406,-405,-403,-401,-399,-397,-395,-393,-391,
-389,-387,-385,-383,-381,-379,-377,-375,-373,-371,-369,-367,-364,-362,-360,-358,-356,-354,-351,-349,-347,-345,-342,-340,-338,
-335,-333,-331,-328,-326,-324,-321,-319,-316,-314,-311,-309,-306,-304,-301,-299,-296,-294,-291,-289,-286,-284,-281,-278,-276,
-273,-271,-268,-265,-263,-260,-257,-255,-252,-249,-246,-244,-241,-238,-235,-233,-230,-227,-224,-221,-219,-216,-213,-210,-207,
-204,-201,-199,-196,-193,-190,-187,-184,-181,-178,-175,-172,-169,-166,-163,-160,-157,-155,-152,-149,-146,-143,-139,-136,-133,
-130,-127,-124,-121,-118,-115,-112,-109,-106,-103,-100,-97,-94,-91,-88,-84,-81,-78,-75,-72,-69,-66,-63,-60,-56,-53,-50,-47,
-44,-41,-38,-35,-31,-28,-25,-22,-19,-16,-13,-9,-6,-3);
type senoide3 is array (integer range <>) of integer; -- Senoide do inversor de 5 níveis com 1000 valores variando de -1000 a 1000
constant variable_senoide3 : senoide3 (1 to 1000):=(0,6,13,19,25,31,38,44,50,57,63,69,75,82,88,94,100,107,113,119,125,132,
138,144,150,156,163,169,175,181,187,194,200,206,212,218,224,230,236,243,249,255,261,267,273,279,285,291,297,303,309,315,321,
327,333,339,345,351,356,362,368,374,380,386,391,397,403,409,414,420,426,431,437,443,448,454,460,465,471,476,482,487,493,498,
504,509,514,520,525,531,536,541,546,552,557,562,567,572,578,583,588,593,598,603,608,613,618,623,628,633,637,642,647,652,657,
661,666,671,675,680,685,689,694,698,703,707,712,716,720,725,729,733,738,742,746,750,754,758,762,766,771,775,778,782,786,790,
794,798,802,805,809,813,816,820,824,827,831,834,838,841,844,848,851,854,858,861,864,867,870,873,876,879,882,885,888,891,894,
897,899,902,905,907,910,913,915,918,920,923,925,927,930,932,934,937,939,941,943,945,947,949,951,953,955,957,959,960,962,964,
965,967,969,970,972,973,975,976,977,979,980,981,982,983,985,986,987,988,989,990,990,991,992,993,994,994,995,996,996,997,997,
998,998,998,999,999,999,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,999,999,999,998,998,998,997,997,996,996,995,
994,994,993,992,991,990,990,989,988,987,986,985,983,982,981,980,979,977,976,975,973,972,970,969,967,965,964,962,960,959,957,
955,953,951,949,947,945,943,941,939,937,934,932,930,927,925,923,920,918,915,913,910,907,905,902,899,897,894,891,888,885,882,
879,876,873,870,867,864,861,858,854,851,848,844,841,838,834,831,827,824,820,816,813,809,805,802,798,794,790,786,782,778,775,
771,766,762,758,754,750,746,742,738,733,729,725,720,716,712,707,703,698,694,689,685,680,675,671,666,661,657,652,647,642,637,
633,628,623,618,613,608,603,598,593,588,583,578,572,567,562,557,552,546,541,536,531,525,520,514,509,504,498,493,487,482,476,
471,465,460,454,448,443,437,431,426,420,414,409,403,397,391,386,380,374,368,362,356,351,345,339,333,327,321,315,309,303,297,
291,285,279,273,267,261,255,249,243,236,230,224,218,212,206,200,194,187,181,175,169,163,156,150,144,138,132,125,119,113,107,
100,94,88,82,75,69,63,57,50,44,38,31,25,19,13,6,0,-6,-13,-19,-25,-31,-38,-44,-50,-57,-63,-69,-75,-82,-88,-94,-100,-107,-113,
-119,-125,-132,-138,-144,-150,-156,-163,-169,-175,-181,-187,-194,-200,-206,-212,-218,-224,-230,-236,-243,-249,-255,-261,-267,
-273,-279,-285,-291,-297,-303,-309,-315,-321,-327,-333,-339,-345,-351,-356,-362,-368,-374,-380,-386,-391,-397,-403,-409,-414,
-420,-426,-431,-437,-443,-448,-454,-460,-465,-471,-476,-482,-487,-493,-498,-504,-509,-514,-520,-525,-531,-536,-541,-546,-552,
-557,-562,-567,-572,-578,-583,-588,-593,-598,-603,-608,-613,-618,-623,-628,-633,-637,-642,-647,-652,-657,-661,-666,-671,-675,
-680,-685,-689,-694,-698,-703,-707,-712,-716,-720,-725,-729,-733,-738,-742,-746,-750,-754,-758,-762,-766,-771,-775,-778,-782,
-786,-790,-794,-798,-802,-805,-809,-813,-816,-820,-824,-827,-831,-834,-838,-841,-844,-848,-851,-854,-858,-861,-864,-867,-870,
-873,-876,-879,-882,-885,-888,-891,-894,-897,-899,-902,-905,-907,-910,-913,-915,-918,-920,-923,-925,-927,-930,-932,-934,-937,
-939,-941,-943,-945,-947,-949,-951,-953,-955,-957,-959,-960,-962,-964,-965,-967,-969,-970,-972,-973,-975,-976,-977,-979,-980,
-981,-982,-983,-985,-986,-987,-988,-989,-990,-990,-991,-992,-993,-994,-994,-995,-996,-996,-997,-997,-998,-998,-998,-999,-999,
-999,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-999,-999,-999,-998,-998,-998,-997,-997,-996,-996,-995,
-994,-994,-993,-992,-991,-990,-990,-989,-988,-987,-986,-985,-983,-982,-981,-980,-979,-977,-976,-975,-973,-972,-970,-969,-967,
-965,-964,-962,-960,-959,-957,-955,-953,-951,-949,-947,-945,-943,-941,-939,-937,-934,-932,-930,-927,-925,-923,-920,-918,-915,
-913,-910,-907,-905,-902,-899,-897,-894,-891,-888,-885,-882,-879,-876,-873,-870,-867,-864,-861,-858,-854,-851,-848,-844,-841,
-838,-834,-831,-827,-824,-820,-816,-813,-809,-805,-802,-798,-794,-790,-786,-782,-778,-775,-771,-766,-762,-758,-754,-750,-746,
-742,-738,-733,-729,-725,-720,-716,-712,-707,-703,-698,-694,-689,-685,-680,-675,-671,-666,-661,-657,-652,-647,-642,-637,-633,
-628,-623,-618,-613,-608,-603,-598,-593,-588,-583,-578,-572,-567,-562,-557,-552,-546,-541,-536,-531,-525,-520,-514,-509,-504,
-498,-493,-487,-482,-476,-471,-465,-460,-454,-448,-443,-437,-431,-426,-420,-414,-409,-403,-397,-391,-386,-380,-374,-368,-362,
-356,-351,-345,-339,-333,-327,-321,-315,-309,-303,-297,-291,-285,-279,-273,-267,-261,-255,-249,-243,-236,-230,-224,-218,-212,
-206,-200,-194,-187,-181,-175,-169,-163,-156,-150,-144,-138,-132,-125,-119,-113,-107,-100,-94,-88,-82,-75,-69,-63,-57,-50,-44,
-38,-31,-25,-19,-13,-6);
type senoide4 is array (integer range <>) of integer; -- Senoide do inversor de 7 níveis com 1500 valores variando de -1500 a 1500
constant variable_senoide4 : senoide4 (1 to 1500):=(0,6,13,19,25,31,38,44,50,57,63,69,75,82,88,94,100,107,113,119,126,132,
138,144,151,157,163,169,176,182,188,194,200,207,213,219,225,232,238,244,250,256,263,269,275,281,287,293,300,306,312,318,324,
330,336,343,349,355,361,367,373,379,385,391,397,403,409,415,422,428,434,440,446,452,458,464,469,475,481,487,493,499,505,511,
517,523,529,535,540,546,552,558,564,570,575,581,587,593,599,604,610,616,622,627,633,639,644,650,656,661,667,673,678,684,689,
695,701,706,712,717,723,728,734,739,745,750,755,761,766,772,777,782,788,793,798,804,809,814,820,825,830,835,841,846,851,856,
861,866,871,877,882,887,892,897,902,907,912,917,922,927,932,937,942,946,951,956,961,966,971,975,980,985,990,994,999,1004,
1008,1013,1018,1022,1027,1031,1036,1040,1045,1049,1054,1058,1063,1067,1072,1076,1080,1085,1089,1093,1098,1102,1106,1111,
1115,1119,1123,1127,1131,1135,1140,1144,1148,1152,1156,1160,1164,1168,1172,1176,1179,1183,1187,1191,1195,1199,1202,1206,
1210,1214,1217,1221,1225,1228,1232,1235,1239,1242,1246,1249,1253,1256,1260,1263,1266,1270,1273,1276,1280,1283,1286,1290,1293,
1296,1299,1302,1305,1308,1311,1314,1317,1320,1323,1326,1329,1332,1335,1338,1341,1344,1346,1349,1352,1355,1357,1360,1363,1365,
1368,1370,1373,1375,1378,1380,1383,1385,1388,1390,1392,1395,1397,1399,1401,1404,1406,1408,1410,1412,1414,1417,1419,1421,1423,
1425,1427,1429,1430,1432,1434,1436,1438,1440,1441,1443,1445,1446,1448,1450,1451,1453,1454,1456,1457,1459,1460,1462,1463,1465,
1466,1467,1469,1470,1471,1472,1473,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1487,1488,1489,1490,1490,
1491,1492,1492,1493,1494,1494,1495,1495,1496,1496,1497,1497,1497,1498,1498,1498,1499,1499,1499,1499,1500,1500,1500,1500,1500,
1500,1500,1500,1500,1500,1500,1500,1500,1499,1499,1499,1499,1498,1498,1498,1497,1497,1497,1496,1496,1495,1495,1494,1494,1493,
1492,1492,1491,1490,1490,1489,1488,1487,1487,1486,1485,1484,1483,1482,1481,1480,1479,1478,1477,1476,1475,1473,1472,1471,1470,
1469,1467,1466,1465,1463,1462,1460,1459,1457,1456,1454,1453,1451,1450,1448,1446,1445,1443,1441,1440,1438,1436,1434,1432,1430,
1429,1427,1425,1423,1421,1419,1417,1414,1412,1410,1408,1406,1404,1401,1399,1397,1395,1392,1390,1388,1385,1383,1380,1378,1375,
1373,1370,1368,1365,1363,1360,1357,1355,1352,1349,1346,1344,1341,1338,1335,1332,1329,1326,1323,1320,1317,1314,1311,1308,1305,
1302,1299,1296,1293,1290,1286,1283,1280,1276,1273,1270,1266,1263,1260,1256,1253,1249,1246,1242,1239,1235,1232,1228,1225,1221,
1217,1214,1210,1206,1202,1199,1195,1191,1187,1183,1179,1176,1172,1168,1164,1160,1156,1152,1148,1144,1140,1135,1131,1127,1123,
1119,1115,1111,1106,1102,1098,1093,1089,1085,1080,1076,1072,1067,1063,1058,1054,1049,1045,1040,1036,1031,1027,1022,1018,1013,
1008,1004,999,994,990,985,980,975,971,966,961,956,951,946,942,937,932,927,922,917,912,907,902,897,892,887,882,877,871,866,861,
856,851,846,841,835,830,825,820,814,809,804,798,793,788,782,777,772,766,761,755,750,745,739,734,728,723,717,712,706,701,695,
689,684,678,673,667,661,656,650,644,639,633,627,622,616,610,604,599,593,587,581,575,570,564,558,552,546,540,535,529,523,517,
511,505,499,493,487,481,475,469,464,458,452,446,440,434,428,422,415,409,403,397,391,385,379,373,367,361,355,349,343,336,330,
324,318,312,306,300,293,287,281,275,269,263,256,250,244,238,232,225,219,213,207,200,194,188,182,176,169,163,157,151,144,138,
132,126,119,113,107,100,94,88,82,75,69,63,57,50,44,38,31,25,19,13,6,0,-6,-13,-19,-25,-31,-38,-44,-50,-57,-63,-69,-75,-82,-88,
-94,-100,-107,-113,-119,-126,-132,-138,-144,-151,-157,-163,-169,-176,-182,-188,-194,-200,-207,-213,-219,-225,-232,-238,-244,
-250,-256,-263,-269,-275,-281,-287,-293,-300,-306,-312,-318,-324,-330,-336,-343,-349,-355,-361,-367,-373,-379,-385,-391,-397,
-403,-409,-415,-422,-428,-434,-440,-446,-452,-458,-464,-469,-475,-481,-487,-493,-499,-505,-511,-517,-523,-529,-535,-540,-546,
-552,-558,-564,-570,-575,-581,-587,-593,-599,-604,-610,-616,-622,-627,-633,-639,-644,-650,-656,-661,-667,-673,-678,-684,-689,
-695,-701,-706,-712,-717,-723,-728,-734,-739,-745,-750,-755,-761,-766,-772,-777,-782,-788,-793,-798,-804,-809,-814,-820,-825,
-830,-835,-841,-846,-851,-856,-861,-866,-871,-877,-882,-887,-892,-897,-902,-907,-912,-917,-922,-927,-932,-937,-942,-946,-951,
-956,-961,-966,-971,-975,-980,-985,-990,-994,-999,-1004,-1008,-1013,-1018,-1022,-1027,-1031,-1036,-1040,-1045,-1049,-1054,
-1058,-1063,-1067,-1072,-1076,-1080,-1085,-1089,-1093,-1098,-1102,-1106,-1111,-1115,-1119,-1123,-1127,-1131,-1135,-1140,
-1144,-1148,-1152,-1156,-1160,-1164,-1168,-1172,-1176,-1179,-1183,-1187,-1191,-1195,-1199,-1202,-1206,-1210,-1214,-1217,
-1221,-1225,-1228,-1232,-1235,-1239,-1242,-1246,-1249,-1253,-1256,-1260,-1263,-1266,-1270,-1273,-1276,-1280,-1283,-1286,
-1290,-1293,-1296,-1299,-1302,-1305,-1308,-1311,-1314,-1317,-1320,-1323,-1326,-1329,-1332,-1335,-1338,-1341,-1344,-1346,-1349,
-1352,-1355,-1357,-1360,-1363,-1365,-1368,-1370,-1373,-1375,-1378,-1380,-1383,-1385,-1388,-1390,-1392,-1395,-1397,-1399,-1401,
-1404,-1406,-1408,-1410,-1412,-1414,-1417,-1419,-1421,-1423,-1425,-1427,-1429,-1430,-1432,-1434,-1436,-1438,-1440,-1441,-1443,
-1445,-1446,-1448,-1450,-1451,-1453,-1454,-1456,-1457,-1459,-1460,-1462,-1463,-1465,-1466,-1467,-1469,-1470,-1471,-1472,-1473,
-1475,-1476,-1477,-1478,-1479,-1480,-1481,-1482,-1483,-1484,-1485,-1486,-1487,-1487,-1488,-1489,-1490,-1490,-1491,-1492,-1492,
-1493,-1494,-1494,-1495,-1495,-1496,-1496,-1497,-1497,-1497,-1498,-1498,-1498,-1499,-1499,-1499,-1499,-1500,-1500,-1500,-1500,
-1500,-1500,-1500,-1500,-1500,-1500,-1500,-1500,-1500,-1499,-1499,-1499,-1499,-1498,-1498,-1498,-1497,-1497,-1497,-1496,-1496,
-1495,-1495,-1494,-1494,-1493,-1492,-1492,-1491,-1490,-1490,-1489,-1488,-1487,-1487,-1486,-1485,-1484,-1483,-1482,-1481,-1480,
-1479,-1478,-1477,-1476,-1475,-1473,-1472,-1471,-1470,-1469,-1467,-1466,-1465,-1463,-1462,-1460,-1459,-1457,-1456,-1454,-1453,
-1451,-1450,-1448,-1446,-1445,-1443,-1441,-1440,-1438,-1436,-1434,-1432,-1430,-1429,-1427,-1425,-1423,-1421,-1419,-1417,-1414,
-1412,-1410,-1408,-1406,-1404,-1401,-1399,-1397,-1395,-1392,-1390,-1388,-1385,-1383,-1380,-1378,-1375,-1373,-1370,-1368,-1365,
-1363,-1360,-1357,-1355,-1352,-1349,-1346,-1344,-1341,-1338,-1335,-1332,-1329,-1326,-1323,-1320,-1317,-1314,-1311,-1308,-1305,
108
-1302,-1299,-1296,-1293,-1290,-1286,-1283,-1280,-1276,-1273,-1270,-1266,-1263,-1260,-1256,-1253,-1249,-1246,-1242,-1239,-1235,
-1232,-1228,-1225,-1221,-1217,-1214,-1210,-1206,-1202,-1199,-1195,-1191,-1187,-1183,-1179,-1176,-1172,-1168,-1164,-1160,-1156,
-1152,-1148,-1144,-1140,-1135,-1131,-1127,-1123,-1119,-1115,-1111,-1106,-1102,-1098,-1093,-1089,-1085,-1080,-1076,-1072,-1067,
-1063,-1058,-1054,-1049,-1045,-1040,-1036,-1031,-1027,-1022,-1018,-1013,-1008,-1004,-999,-994,-990,-985,-980,-975,-971,-966,
-961,-956,-951,-946,-942,-937,-932,-927,-922,-917,-912,-907,-902,-897,-892,-887,-882,-877,-871,-866,-861,-856,-851,-846,-841,
-835,-830,-825,-820,-814,-809,-804,-798,-793,-788,-782,-777,-772,-766,-761,-755,-750,-745,-739,-734,-728,-723,-717,-712,-706,
-701,-695,-689,-684,-678,-673,-667,-661,-656,-650,-644,-639,-633,-627,-622,-616,-610,-604,-599,-593,-587,-581,-575,-570,-564,
-558,-552,-546,-540,-535,-529,-523,-517,-511,-505,-499,-493,-487,-481,-475,-469,-464,-458,-452,-446,-440,-434,-428,-422,-415,
-409,-403,-397,-391,-385,-379,-373,-367,-361,-355,-349,-343,-336,-330,-324,-318,-312,-306,-300,-293,-287,-281,-275,-269,-263,
-256,-250,-244,-238,-232,-225,-219,-213,-207,-200,-194,-188,-182,-176,-169,-163,-157,-151,-144,-138,-132,-126,-119,-113,-107,
-100,-94,-88,-82,-75,-69,-63,-57,-50,-44,-38,-31,-25,-19,-13,-6);
shared variable a1 : integer := 0; -- variável para contagem subidas do clock
shared variable b1 : integer := 0; -- variável para contagem subidas do clock
shared variable a2 : integer := 0; -- variável para contagem subidas do clock
shared variable b2 : integer := 0; -- variável para contagem subidas do clock
shared variable a3 : integer := 0; -- variável para contagem subidas do clock
shared variable b3 : integer := 0; -- variável para contagem subidas do clock
shared variable a4 : integer := 0; -- variável para contagem subidas do clock
shared variable b4 : integer := 0; -- variável para contagem subidas do clock
shared variable contador1 : integer := 1; --declaração variável contador1
shared variable contador2 : integer := 1; --declaração variável contador2
shared variable contador3 : integer := 1; --declaração variável contador3
shared variable contador4 : integer := 1; --declaração variável contador4
shared variable contador5 : integer := 1; --declaração variável contador5
shared variable contador6 : integer := 1; --declaração variável contador6
shared variable contador7 : integer := 1; --declaração variável contador7
shared variable contador8 : integer := 1; --declaração variável contador8
shared variable contador9 : integer := 0; --declaração variável contador9
shared variable contador10 : integer := 0; --declaração variável contador10
shared variable contador11 : integer := 0; --declaração variável contador11
shared variable contador12 : integer := 0; --declaração variável contador12
shared variable contador13 : integer := 0; --declaração variável contador13
shared variable modulante1 : integer := 0; --variável p/ carregamento de um vetor senoidal
shared variable modulante2 : integer := 0; --variável p/ carregamento de um vetor senoida2
shared variable modulante3 : integer := 0; --variável p/ carregamento de um vetor senoida3
shared variable modulante4 : integer := 0; --variável p/ carregamento de um vetor senoidal
shared variable portadora : integer := 0; --variável que carrega valores da portadora do inversor de 2 niveis
shared variable portadora_1 : integer := 0; --variável que carrega valores da portadora 1
shared variable portadora_2 : integer := 0; --variável que carrega valores da portadora 2
shared variable portadora_3 : integer := 0; --variável que carrega valores da portadora 3
shared variable portadora_4 : integer := 0; --variável que carrega valores da portadora 4
shared variable portadora_5 : integer := 0; --variável que carrega valores da portadora 5
shared variable portadora_6 : integer := 0; --variável que carrega valores da portadora 6
shared variable freqsen : integer := 60; --freq. em 60Hz da moduladora
shared variable freqtri : integer := 2500; --freq. em 2,5 Khz da portadora triangular
shared variable N3 : integer := 50; -- Tempo morto em ciclos de clocks, cada unidade equivale 20ns. O deadtime, aqui, vale 1us
shared variable N1 : integer := 1; --variável que define o número de ciclos de clock entre amostras da modulante
shared variable N2 : integer := 1; --variável que define o número de ciclos de clock entre amostras da portadora
shared variable timer1 : integer := 1; -- contador timer1 para o deadtime
shared variable timer2 : integer := 1; -- contador timer2 para o deadtime
shared variable timer3 : integer := 1; -- contador timer3 para o deadtime
shared variable timer4 : integer := 1; -- contador timer4 para o deadtime
shared variable timer5 : integer := 1; -- contador timer5 para o deadtime
shared variable timer6 : integer := 1; -- contador timer6 para o deadtime
shared variable timer7 : integer := 1; -- contador timer7 para o deadtime
shared variable timer8 : integer := 1; -- contador timer8 para o deadtime
shared variable Vcc : integer := 0; -- Variável Vcc para simulação da saída do inversor no Modelsim
begin
process(clk) -- início do processo
begin
if rising_edge(clk) then
contador13 := contador13 + 1;
if contador13 > 100000 then
contador13 := 0;-- reseta o contador13
end if;
if rst = '1' then -- reseta a frequencia para o valor padrão
freqsen := 60; -- fundamental em 60Hz
freqtri := 2500; -- portadoras em 2Khz
end if;
if button1 = '1' and contador9 = 0 then -- botão+ ligado e contador zerado
if contador13 > 1 then
freqsen := freqsen + 5; -- aumenta a freqsen em 5 unidades
contador9 := contador9 + 1; -- incrementa o contador
a1 := 0;-- reseta a variavel
b1 := 0;-- reseta a variavel
a2 := 0;-- reseta a variavel
b2 := 0;-- reseta a variavel
a3 := 0;-- reseta a variavel
b3 := 0;-- reseta a variavel
a4 := 0;-- reseta a variavel
b4 := 0;-- reseta a variavel
end if;
else
if button1 = '0' and contador9 = 1 then -- botão+ desligado e contador é 1
contador9 := 0; -- reseta o contador
end if;
end if;
if button2 = '1' and contador10 = 0 and freqsen > 5 then -- botão+ ligado e contador zerado
if contador13 > 50000 then
freqsen := freqsen - 5; -- aumenta a freqsen em 5 unidades
contador10 := contador10 + 1; -- incrementa o contador
a1 := 0;-- reseta a variavel
b1 := 0;-- reseta a variavel
a2 := 0;-- reseta a variavel
b2 := 0;-- reseta a variavel
a3 := 0;-- reseta a variavel
b3 := 0;-- reseta a variavel
a4 := 0;-- reseta a variavel
b4 := 0;-- reseta a variavel
end if;
else
if button2 = '0' and contador10 = 1 then -- botão+ desligado e contador é 1
contador10 := 0; -- reseta o contador
end if;
end if;
if button3 = '1' and contador11 = 0 then -- botão+ ligado e contador zerado
if contador13 > 50000 then
freqtri := freqtri + 500; -- aumenta a freqtri em 500 unidades
contador11 := contador11 + 1; -- incrementa o contador
a1 := 0;-- reseta a variavel
b1 := 0;-- reseta a variavel
a2 := 0;-- reseta a variavel
b2 := 0;-- reseta a variavel
a3 := 0;-- reseta a variavel
b3 := 0;-- reseta a variavel
a4 := 0;-- reseta a variavel
b4 := 0;-- reseta a variavel
end if;
else
if button3 = '0' and contador11 = 1 then -- botão+ desligado e contador é 1
contador11 := 0; -- reseta o contador
end if;
end if;
109
if button4 = '1' and contador12 = 0 and freqtri > 500 then -- botão- ligado e contador zerado
if contador13 > 50000 then
freqtri := freqtri - 500; -- diminui a freqtri em 500 unidades
contador12 := contador12 + 1; -- incrementa o contador
a1 := 0;-- reseta a variavel
b1 := 0;-- reseta a variavel
a2 := 0;-- reseta a variavel
b2 := 0;-- reseta a variavel
a3 := 0;-- reseta a variavel
b3 := 0;-- reseta a variavel
a4 := 0;-- reseta a variavel
b4 := 0;-- reseta a variavel
end if;
else
if button4 = '0' and contador12 = 1 then-- botão- desligado e contador é 1
contador12 := 0;-- reseta o contador
end if;
end if;
if switch1 = '1' then -- Chave 1 ligada / Ativa o inversor para dois níveis
a1 := a1 + 1;-- incrementa a variável a cada subida de clock
b1 := b1 + 1;-- incrementa a variável a cada subida de clock
N1 := 50000000/(freqsen*1000); --cálculo de N1 (contagens de clock)
N2 := 50000000/(freqtri*1000); --cálculo de N2 (contagens de clock)
if a1= N1 then --executa quando a for igual a N1 subidas de clock
modulante1 := variable_senoide1(contador1); --carregamento do vetor senoide
contador1 := contador1 + 1; --incrementa variável contador1
if contador1 = 1000 then --funçao para limitar contador1 em 1000
contador1 := 1; --quando contador1 atinge 1000 assume valor 1
end if;
a1 := 0; --zera variavel a1
end if;
if b1=N2 then --executa quando a for igual a N2 subidas de clock
portadora := variable_portadora1(contador2); -- vetor portadora carrega os valores da variable_portadora
contador2 := contador2 + 1; --incrementa 1 na variavel
if contador2=1000 then --reinício do número do vetor que será carregado
contador2:=1; --início a partir do primeiro vetor
end if;
b1:=0; --zera variável b
end if;
if modulante1 > portadora then -- A saída é +Vcc
timer1 := timer1 + 1; -- incrementa o timer
pwm2<='1'; -- seta o gate em LOW
pwm3<='0'; -- seta o gate em HIGH
pwm5<='0'; -- seta o gate em HIGH
pwm6<='0'; -- seta o gate em HIGH
pwm7<='0'; -- seta o gate em HIGH
pwm8<='0'; -- seta o gate em HIGH
if timer1>N3 then -- condição que, quando verdadeira, gera deadtime
pwm1<='1'; -- seta o gate em LOW
pwm4<='0'; -- seta o gate em HIGH
timer1 := 0;-- Reseta o timer
timer2 := 0;-- Reseta o timer
end if;
Vcc := 10; -- Variável com utilidade apenas para simulação no Modelsim
else -- A saída é -Vcc
timer2 := timer2 + 1; -- incrementa o timer
pwm1<='0'; -- seta o gate em HIGH
pwm4<='1'; -- seta o gate em LOW
pwm5<='0'; -- seta o gate em HIGH
pwm6<='0'; -- seta o gate em HIGH
pwm7<='0'; -- seta o gate em HIGH
pwm8<='0'; -- seta o gate em HIGH
if timer2>N3 then -- condição que, quando verdadeira, gera deadtime
pwm2<='0'; -- seta o gate em HIGH
pwm3<='1'; -- seta o gate em LOW
timer1 := 0;-- Reseta o timer
timer2 := 0;-- Reseta o timer
end if;
Vcc := -10; -- Variável com utilidade apenas para simulação no Modelsim
end if;
elsif switch2 = '1' then -- Chaves 2 ligada / Ativa o inversor para três níveis
a2 := a2 + 1;-- incrementa a variável a cada subida de clock
b2 := b2 + 1;-- incrementa a variável a cada subida de clock
N1:=50000000/(freqsen*1000); --cálculo de N1
N2:=50000000/(freqtri*1000); --cálculo de N2
if a2=N1 then --executa se a2 = n1 subidas de clk
modulante2 := variable_senoide2(contador3);--carregamento do vetor senoide
contador3:=contador3 + 1;--incrementa a variável contador
if contador3=1000 then -- limita o contador em 1000
contador3:=1; -- reseta o contador
end if;
a2:=0; -- reseta a variável a2
end if;
if b2=N2 then --carregamento das portadoras em N2 subidas de clock
portadora_1 := variable_portadora2(contador4); --carrega e posiciona portadora1
portadora_2 := variable_portadora2(contador4)-500; --carrega portadora2
contador4:= contador4 + 1;--incrementa a variável contador
if contador4=1000 then -- limita contador4 em 1000
contador4:=1; -- reseta o contador
end if;
b2:=0;
end if;
if modulante2 > portadora_1 then -- Saida do inversor em +VCC
timer1 := timer1 + 1;-- incrementa o timer
pwm2<='1'; -- seta o gate em LOW
pwm3<='0'; -- seta o gate em HIGH
pwm6<='0'; -- seta o gate em HIGH
pwm7<='0'; -- seta o gate em HIGH
pwm5<='0'; -- seta o gate em HIGH
pwm8<='0'; -- seta o gate em HIGH
if timer1>N3 then -- condição que, quando verdadeira, gera deadtime
pwm1<='1';
pwm4<='0'; -- seta o gate em HIGH
timer1:=0; -- Reseta o timer
timer2:=0; -- Reseta o timer
timer3:=0; -- Reseta o timer
timer4:=0; -- Reseta o timer
timer5:=0; -- Reseta o timer
timer6:=0; -- Reseta o timer
timer7:=0; -- Reseta o timer
end if;
Vcc := 10; -- Variável com utilidade apenas para simulação no Modelsim
end if;
if modulante2 < portadora_1 and modulante2 > portadora_2 then -- Saida do inversor em 0VCC
timer2 := timer2 + 1;-- incrementa o timer
pwm1<='1'; -- seta o gate em HIGH
pwm3<='1'; -- seta o gate em HIGH
pwm5<='1'; -- seta o gate em HIGH
pwm7<='1'; -- seta o gate em HIGH
pwm6<='1'; -- seta o gate em HIGH
pwm8<='1'; -- seta o gate em HIGH
if timer2>N3 then -- condição que, quando verdadeira, gera deadtime
pwm2<='1'; -- seta o gate em HIGH