54600b

Transcrição

54600b
DESCRIÇÃO E SÍNTESE DE CONVERSORES A/D E D/A PWM.
Eduardo dos Santos Ferreira*, Mauricio Gomes**, Ricardo Teixeira*** e Nilton Itiro Morimoto.****
RESUMO
Neste artigo apresentamos o projeto, descrição e
implementação de conversores analógicos digitais e
digitais analógicos PWM. Estes conversores são
precisos, tem baixo custo e fáceis de se manufaturar.
Estas características são necessárias para aplicações
em automação e controle, onde uma grande
integração é necessária. São estabelecidas regras de
projeto, onde é possível determinar a melhor
freqüência do relógio do sistema, o menor nível de
conversão do sinal em função do número de bits. O
gerador PWM é descrito em VHDL, e implementado
em um FPGA Xilinix/Spartan II. Um filtro RC é
empregado como integrador para a obtenção do sinal
analógico do conversor D/A. O conversor A/D é do
tipo de aproximações sucessivas. Os resultados
experimentais são lineares, o que valida o modelo
matemático proposto.
INTRODUÇÃO
Sistemas digitais são sistemas nos quais tem-se um
valor finito de valores discretos[1]. Estes sistemas
são utilizados no processamento de informações, que
os tornam úteis para a criação de sistemas de
controle, aquisição e armazenamento de dados.
Contudo, este processamento é discreto, e na maioria
das aplicações temos de monitorar valores contínuos
e produzir uma atuação também continua[2].
Devido a grande importância da implementação de
modelos matemáticos em sistemas digitais para
controle e automação de sistemas analógicos surge a
necessidade de circuitos para a conversão de sinais
analógicos em digitais (conversor A/D) e de
conversores de sinais digitais em analógicos
(conversores D/A).
Neste trabalho nos concentraremos no modelamento
matemático de conversores A/D e D/A do tipo PWM
(modulação por largura de pulso), na sua descrição
em linguagem de descrição de hardware (VHDL
very high speed hardware description language) e
sua implementação em dispositivos de lógica reconfigurável (FPGA-field programable gate array).
MODULAÇÃO POR LARGURA DE PULSO
(PWM)
O sistema de modulação PWM consiste em variar a
largura do pulso de um sinal quadrado portador (eo)
proporcionalmente a função de onda do sinal
modulante (em) [3]. Neste sistema o período e
amplitude da portadora eo são constantes, assim, o
tempo do pulso ( ) mais o tempo desligado deve ser
igual ao período T, como é ilustrado na Figura 1. A
largura instantânea do pulso [ (t)] é uma função do
sinal modulante dado por:
(t ) = 0 + K ⋅em (t ) (1)
onde K é a constante de modulação, expressa em
s/V.
Para um sinal modulante do tipo cossenoidal, com a
seguinte expressão no domínio do tempo (t):
em (t ) = Em ⋅cos(ω m ⋅t ) (2)
onde Em e ω m são respectivamente a amplitude e a
freqüência angular do sinal modulante, a equação 1
pode ser escrita como:
(t ) =
0
 K ⋅Em
 (3)
⋅
⋅cos ω m ⋅t 
1 +

0


onde K ⋅E m / 0 é o índice de modulação m do
sistema PWM, e ele deve ser menor ou igual a 1 e
maior que zero. Deste modo a equação 3 pode ser
rescrita da seguinte forma:
(t ) =
0
⋅(
1 + m ⋅cos ω m ⋅t ) (4)
Como o sinal PWM é uma seqüência de pulsos de
largura variável com um período T constate, é
possível desenvolver o sinal modulado em um série
de Fourier:
e(t ) =
+
E0 ⋅
2 ⋅E 0
π
0
T
∞
⋅∑
n =1
⋅(1 + m ⋅cos(ω m ⋅t )) +
1
n ⋅π ⋅
⋅sen 
n
 T
0
+
1 ⋅n ⋅m ⋅ 0
T

⋅cos(ω 0 ⋅t )⋅cos(ω 0 ⋅t )

(5)
onde E0 e ω 0 são respectivamente a amplitude e
freqüência angular da portadora, m é o índice de
modulação, n é um inteiro positivo. O valor
E 0 ⋅ 0 / T é o nível médio do sinal modulado, assim:
E0 ⋅ 0 (6)
T
Através da expressão acima se pode observar que o
valor médio do sinal PWM depende da largura dos
pulsos do sinal ( 0) e do período (T). Esta
característica pode ser usada para a implementação
de conversores digitais - analógicos e analógico
digitais simples de se descrever em VHDL.
VDC =
* Doutorando em Engenharia Elétrica pela Escola Politécnica da Universidade de São Paulo. E-mail: [email protected].
** Mestrando em Engenharia Elétrica pela Escola Politécnica da Universidade de São Paulo. E-mail: [email protected].
*** Doutor em Engenharia Elétrica - Instituto de Estudos Avançados – CTA. E-mail: [email protected].
**** Doutor em Engenharia Elétrica – Escola Politécnica da Universidade de São Paulo. E-mail: [email protected].
8
Figura 1: Modulação em largura de pulso de um sinal cossenoidal.
CONVERSOR DIGITAL – ANALÓGICO PWM
Um conversor digital analógico PWM pode ser
construído com o uso de um contador síncrono
crescente de N bits e um comparador de N bits [4-6],
como está ilustrado na Figura 2. O dado a ser
convertido é enviado a um registrador, e em seguida
o dado é comparado ao valor do contador, e durante
o tempo em que o valor da contagem for menor que
o dado a ser convertido o valor da saída PWM fica
em nível alto, e assim que este passar o valor do
dado de entrada, o valor da saída PWM fica em nível
baixo pelo resto do tempo de contagem. O processo
é repetido assim que o contador ultrapassar o seu
valor máximo de contagem, como o tempo de
contagem total é fixo e depende do número de bits
teremos um sinal PWM com período fixo. Um
circuito integrador irá gerar o sinal analógico de
saída.
Figura 2: Conversor digital analógico PWM.
Como o contador de N bits demorará um tempo de
contagem (TC) antes de voltar ao zero, e este tempo
TC será o período do sinal PWM. Este tempo de
contagem do contador síncrono de N bits idealmente
é:
TC = TClock ⋅2 N (7)
onde TClock é o período do clock do contador, e N é o
número de bits do contador.
O tempo que o contador leva para atingir o valor do
dado (D) a ser convertido será o tempo de duração
do pulso ( 0):
0 ( D ) = TClock ⋅D (8)
onde D é um número inteiro positivo.
A partir das equações 6, 7 e 8, podemos calcular o
valor do nível médio de saída em função do número
de bits (N) do contador e do dado (D) a ser
convertido:
VDC ( N , D) =
E0 ⋅TClock
⋅(D ) (9)
TClock ⋅2 N
onde E0, (amplitude do sinal da portadora) se tornará
a tensão de referencia do conversor.
Pela equação 9 verificamos que o nível DC de saída
do conversor é independente do período TClock do
contador. Contudo, a taxa de atualização do sinal de
saída é dependente de Tclock, do número de bits do
contador e das características elétricas do circuito
integrador. Assim, para um integrador ideal na saída,
podemos dizer que numericamente esta taxa de
atualização será o tempo de contagem TC (Equação
35). A resolução em tensão do conversor é E0/2N, e
do mesmo modo que o nível DC de saída, este valor
é independente do período TClock.
Na Figura 3 exibimos o cálculo da tensão de saída
VDC em função do dado de entrada (D), observamos
um comportamento nitidamente linear com o
número de contagens, e isto é desejável pois
facilitará a implementação e otimização do circuito
de controle. A Figura 4 exibe o valor de incremento
de tensão, isto é a resolução do conversor em função
do número de bits do contador. Observamos através
dos
cálculos,
que
a
resolução diminui
exponencialmente com o número de bits, isto é
menor é o passo de incremento de tensão do
conversor. Por exemplo, se quisermos uma
resolução de 0,1 V necessitaremos de um contador
de 5 bits, para um conversor com resolução de
0,001V o número de bits é igual a 12. Contudo, ter
um contador com número muito maior que 12 bits
não é tecnologicamente viável, pois além de
acarretar em maior área de chip, teremos um tempo
de atualização lento, e do ponto de vista tecnológico
é difícil fazer circuitos elétricos que respondam a
variações de tensão menores do que 0,0001V,
devido aos ruídos térmicos e correntes parasitárias
dos circuitos.
9
Calculo da Equação 37 para:
N = 12 bits,
E0 = 3,3 V
3,5
Tensão de incremento (V)
3,0
VDC (V)
2,5
2,0
1,5
1,0
0,5
0,0
0
1000
2000
3000
4000
Dado de entrada (Números Inteiros)
Figura 3: Gráfico dos resultados de VDC obtidos do
cálculo da equação 37 para um contador de 12 bits e
uma tensão de referência de 3,3V.
DEMODULAÇÃO DO SINAL PWM
Para a demodulação de sinais contínuos devemos
utilizar um circuito integrador[7-10], como o exibido
na Figura 5. Um circuito integrador é um filtro passa
baixa, cuja freqüência de corte é ajustada para um
valor 10 vezes inferior a do sinal a ser integrado. No
caso dos filtros RC da Figura 5, o valor da
freqüência de corte é:
fc =
10
1
10
0
10
-1
10
-2
10
-3
10
-4
10
-5
10
-6
10
-7
10
-8
10
-9
10
Calculo da Equação 37 para:
E0 = 3,3V
N = 5 bits , Vincremento= 0,1 V
-3
N = 12 bits , Vincremento= 0,8.10 V
-10
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
Número de bits do contador
Figura 4: Gráfico da tensão de incremento em função
do número de bits do contador.
lógico alto, e assim que Vc>Vd a saída do
comparador irá para nível lógico baixo. Isto para a
contagem e o valor do contador é o código digital
correspondente a tensão a ser convertida. Um
registrador de saída irá armazenar o dado
correspondente, e um sinal de controle irá zerar o
contador e reiniciar a conversão.
1
(Equação 1)
2 ⋅R ⋅C
onde R é o valor do resistência expressa em Ohms, e
C o valor da capacitância em Faradays.
Figura 6: Conversor Analógico – digital.
A precisão destes conversores irá depender do
número de bits do contador, no caso do conversor
A/D e do número de bits do barramento de dados.
Desta forma a resolução do mesmo pode se
calculada em função do número de bits (N) do
barramento de dados, através da equação 9:
∆V =
Figura 5: Filtro passa baixa RC.
CONVERSOR ANALÓGICO – DIGITAL PWM
Na Figura 6 exibimos um conversor analógico
digital de aproximações sucessivas [11]. Ele é
constituído por um contador que gera um código
binário, que será inserido em um conversor D/A
PWM, que irá gerar uma tensão (Vc), que será
comparada a tensão desconhecida (Vd). Enquanto a
tensão desconhecida for menor que a tensão de
comparação, a saída do comparador ficará em nível
E0
2N
(10)
EXPERIMENTAL
CONVERSOR D/A PWM
Na Tabela 1 apresentamos a descrição VHDL do
sistema digital do conversor D/A PWM. Neste
sistema temos um contador síncrono de 12 bits e um
comparador de 12 bits cuja saída fica em nível
lógico alto enquanto a contagem for menor que o
dado de entrada.
O programa foi compilado no ISE Foundation 3.1 e
implementado
em
um
FPGA
Xilinix
XC2S100TQPF144-6. Através de um canal serial
10
RS232, os dados a serem convertidos são
transmitidos do computador a placa de
desenvolvimento onde o D/A está implementado. O
sinal PWM de saída é ligado a um circuito
integrador, e um diagrama do experimento é exibido
na Figura 7. Um multímetro HP 34401A foi
utilizado nas medidas de tensão e um osciloscópio
HP 54600B de 100MHz foi empregado nas medidas
de tempo ligado ( ) do PWM
Tabela 1: Descrição de Hardware do PWM
Library IEEE;
use IEEE.std_logic_1164.all;
entity pwm is
port ( clk: in std_logic;
rst: in std_logic;
pwm_data: in std_logic_vector (11 downto 0);
pwm_out : out std_logic);
end pwm;
architecture rtl of pwm is
signal counter: std_logic_vector (11 downto 0);
begin
process (clk,rst)
begin
if (rst = '0') then
counter <= (others =>'0');
pwm_out <= '0';
elsif (clk'event and clk = '1') then
counter <= counter + '1';
if (counter < pwm_data) then pwm_out <= '1';
else pwm_out <= '0';
end if;
end if;
end process;
end rtl;
Tabela 2: Valores de tensão e freqüência do circuito
D/A.
Tensão de +5V
da fonte externa
Tensão de -5V da
fonte externa
Tensão de +12V
da fonte externa
Tensão de -12V
da fonte externa
Tensão interna
do FPGA
Tensão de I/O do
FPGA
Freqüência do
clock
Freqüência do
PWM (f0)
Experimental
5,096V
Teórico
-
-5,03V
-
12,135V
-
-10,606V
-
2,569V
-
3,446V
-
90,00MHz
-
21,9737KHz
21,973KHz
Na
Figura 8 exibimos o comportamento do circuito
construído, observamos um comportamento linear
da tensão de saída em função dos dados de entrada,
como foi previsto. O erro de ajuste entre o modelo
teórico e os dados experimentais foi de apenas
0,1 %.
Na
Figura 9 exibimos a variação de em função dos
dados de entrada, e como era esperado foi também
observado um comportamento linear. O erro de
ajuste entre os dados experimentais e a modelo
teórico é de 0,2 %. O tempo de estabilização do
circuito integrador é de 0,1 ms.
N
Vdc(dado) = (Vcc/2 )*P*Dado
4,0 P = 0,9908 ± 0,0008
Dados Experimentais
Chi^2 = 0.00012
----------------------------------------------N = 12 bits
Vcc = 3,446V
fclock = 90MHz
TPWMTeórico = 21,973 KHz
TPWMExperimental = 21,9737 KHz
---------------------------------------------C = 0.1 uF ± 10 %
R = 10 KΩ ± 5 %
3,5
3,0
VSaída (V)
2,5
2,0
1,5
1,0
0,5
0,0
0
500 1000 1500 2000 2500 3000 3500 4000 4500
Dado de Entrada (Inteiros Positivos)
Figura 8: Variação experimental da tensão de saída
em função dos dados de entrada para o conversor
D/A descrito.
100
-N
(dado) = 2 .P1.(dado).100 %
90 Chi^2 = 0.02211
80 P1 = 0,9980 ±0,0004
------------------------------------------------------
70 N = 12 bits
60
Na Tabela 2 exibimos os valores de tensão medidos
das fontes, as freqüências do clock e do sinal PWM
gerado e seu respectivos valores teóricos. Podemos
observar que o erro entre o valor de freqüência
PWM experimental e teórico é quase desprezível,
provando a qualidade da placa desenvolvida e
validando o modelo proposto na equação 9.
(%)
Figura 7: Arranjo experimental do conversor D/A.
50
40
30
20
Dados Experimentais
10
0
0
500 1000 1500 2000 2500 3000 3500 4000 4500
Dado de Entrada (Inteiros Positivos)
11
Figura 9: Variação experimental de em função dos
dados de entrada para o conversor D/A descrito
Figura 10: Diagrama experimental do conversor A/D.
CONVERSOR ANALÓGICO DIGITAL PWM
begin
process (clk, reset)
Na Tabela 3 apresentamos a descrição VHDL do
sistema digital do conversor A/D PWM. Neste
sistema instanciamos o conversor D/A PWM, e o
utilizamos no nosso conversor de aproximações
sucessivas. O pino “comp” está conectado
eletricamente a saída do comparador de tensão,
como é ilustrado na Figura 10. Os pinos read, start, e
over sinalizam conversão pronta, inicio de conversão
e estouro de escala do conversor. O canal serial
recebe os dados convertidos e os exibe em um
programa monitor, escrito em visual basic.
begin
if (reset = '0') then
s_pwm <= '0';
counter <= (others => '0');
s_data <= (others => '0');
data <= (others => '0');
s_read <= '1';
read <= '1';
over <= '0';
elsif (clk'event and clk = '1') then
data <= s_data;
pwm_out <= s_pwm;
end if;
end process;
Tabela 3: Descrição VHDL do conversor A/D.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
process (clk, reset, start, comp)
begin
if (clk'event and clk = '1') then
if (start = '0') then s_read <= '0';
read <= '0';
end if;
if (s_read = '0') then
if (comp = '1') then
read <= '1';
s_read <= '1';
elsif (counter = "111111111111") then
read <= '1';
s_read <= '1';
over <= '1';
else counter <= counter + 1;
end if;
else s_data <= counter;
end if;
end if;
entity AD is
port (clk: in std_logic;
reset: in std_logic;
start: in std_logic;
comp: in std_logic;
data: out std_logic_vector (11 downto 0);
pwm_out : out std_logic;
ove: out std_logic;
read: out std_logic
);
end AD;
architecture rtl of AD is
component pwm
port (ck: in std_logic;
rst: in std_logic;
pwm_data: in std_logic_vector (11 downto 0);
pwmout : out std_logic);
end component;
signal counter, s_data : std_logic_vector (11 downto 0);
signal s_pwm, s_read : std_logic;
end process;
P1 : component pwm port map(clk,reset,counter,s_pwm);
end rtl;
12
REFERENCIAS
A Figura 11 exibe a função de conversão em função
da tensão de entrada. Este comportamento é
nitidamente linear, assim como é previsto no modelo
proposto. O erro entre os dados experimentais e o
modelo teórico é de aproximadamente 0,04%. A
Figura 12 exibe o erro médio de conversão, para a
faixa de dados convertida, este erro está em torno de
1, o que está de acordo com a teoria, que prevê um
erro +/- 1 bit.
N
4000
Dado (Decimais)
3500
3000
-1
Dado (Vin) = P1 .(2 . VRef . Vin)
P1 = 1,0053 +/- 0,0004
VRef = 3,443V
N = 12 bits
2500
2000
1500
1000
Dados experimentais
500
0
0,0
0,5
1,0
1,5
2,0
2,5
3,0
3,5
Tensão de Entrada (V)
Figura 11: Número convertido em função da tensão
de entrada do comparador
Erro (Numeros Inteiros)
3,0
2,5
2,0
1,5
1,0
0,5
[1] Milos Ercegovac, Tomás Lang, Jaime H.
Moreno, “Introdução aos Sistemas digitais,”
Bookman, 2002.
[2] Jonh P. Uyemura, “Sistemas Digitais, uma
abordagem integrada,” Thomson Pioneira,
2002.
[3] Alcides T. Gomes, “Telecominicações,” Erica,
1999.
[4] P. Craven, “Digital and analogue considerations
for 24-bit performance from a PWM DAC,”
IEE, pp5/1 – 5/5, 1993.
[5] J. M Dias, O. Postolache, P. S. Girão, “PWMA/D conversion: A flexible and Low cost
solution for transducer linearization,” in
Silicon’01 Sensors for Industry Conference,
Rosemount, Illinois, USA,
pp. 258-263,
November 2001.
[6] A. Prodic, D. Maksimovic and R. W. Erickson,
“Design and implementation of a Digital PWM
controller for a high-frequency switching DCDC power converter,” in IECON’01: The 27th
Annual Conference of the IEEE Industrial
Electronics Society, pp. 893-898, 2001.
[7] Jacob Millman e Christos C. Halkias, “Integrated
Electronics: Analog and Digital Circuits and
Systems”, McGraw-Hill, 1972.
[8] Jimmie J. Cathey “Dispositivos e Circuitos
Eletrônicos,” Makron Books, 1994.
[9] Truman S. Gray, “Applied Electronics,”John
Wiley & Sons, Inc., 1954.
[10] Hugh H. Skillig, “Electrical Enginerig
Circuits,” John Wiley & Sons, Inc., 1967.
[11] Herbert Taub e Donald Schillig, “Eletrônica
Digital,” MacGraw Hill, 1977.
0,0
0
500 1000 1500 2000 2500 3000 3500 4000
Dado convertido (Numeros Inteiros)
Figura 12: Erro de conversão em função do valor
convertido.
Conclusão
Demonstramos a possibilidade de implementação de
conversores D/A e A/D simples e eficientes em
FPGAs através da modulação de largura de pulso.
Foram estabelecidas regras práticas de projeto para
estes tipos de conversores, que se adequaram ao
comportamento real.
A principal limitação para estes tipos de conversores
é o tempo de estabilização da saída do integrador,
que se torna fator limitante em projetos de sistemas
onde seja necessária uma maior velocidade de
resposta.
13

Documentos relacionados