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