DAC com sinal PWM

Em alguns projetos é necessário gerar uma tensão analógica, variando de 0 a 5 volts por exemplo, mas o microcontrolador em uso não possui um DAC para converter um valor digital para uma tensão analógica. Como proceder? Uma das saídas é fazer um DAC com sinal PWM.

É isso que veremos neste post, como utilizar o circuito abaixo para gerar um sinal analógica a partir de um PWM filtrado.

DAC com PWM filtrado
DAC com PWM filtrado

Inscreva-se em nossa lista de emails para ser avisado sobre novos posts em resumos semanais.

Conversor digital-analógico

Um DAC é um conversor digital-analógico. A sigla vêm do inglês Digital to Analog Converter.

Em um microcontrolador com um conversor digital-analógico, apenas escrevemos em um registrador o valor binário correspondente a tensão desejada na saída. O conversor trata de colocar a tensão correta no pino de saída.

A maioria dos microcontroladores não possuem um periférico DAC, sendo necessário utilizar um conversor digital-analógico externo, conectado por I2C ou SPI, por exemplo.

Mas um CI extra pode custar muito para um projeto e há uma forma mais barata, que é criar um DAC com sinal PWM filtrado.

DAC com sinal PWM filtrado

Com um sinal PWM um um filtro RC podemos converter um valor digital para analógico. O valor correspondente a tensão desejada é escrito no registrador do PWM, que gerará uma onda com duty-cycle correspondente ao este valor. O filtro RC tratará de converter a onda quadrada do PWM em uma tensão analógica aproximadamente proporcional ao duty-cycle do PWM.

Devemos tomar um pouco de cuidado ao escolher os componentes do filtro, por dois motivos: queremos que o filtro gere o mínimo possível de ondulação; e que o filtro não demore muito para acomodar uma variação no PWM.

Estes dois requisitos exigem ações opostas. Para menor ondulação precisamos que ambas a capacitância e a resistência sejam o maior possível. Para que o filtro tenha uma resposta rápida precisamos que ambas sejam o menor possível.

A baixa ondulação geralmente é necessária, enquanto a necessidade de resposta rápida do filtro não é tão comum, diminuindo a restrição do circuito que pode ser utilizado.

Para que haja baixa ondulação o período do PWM precisa ser muito menor que a constante de tempo do filtro. Isso pode ser obtido com uma proporção 5, ou maior, dependendo da tolerância do projeto a não-linearidade do carregamento do capacitor.

T_{PWM} = \displaystyle\frac{1}{f_{PWM}} \ll R_1 C_1

f_{PWM} \gg \displaystyle\frac{1}{R_1 C_1}

f_{PWM} > \displaystyle\frac{5}{R_1 C_1}

Com esta proporção entre constante de tempo e frequência de PWM o capacitor carrega e descarrega de maneira aproximadamente linear, e podemos deduzir o a equação do valor médio na saída do filtro.

Para isso consideramos a variação da tensão no capacitor em ambos os estados do sinal PWM. Para nível alto+ no PWM:

\Delta V_{C1+} = \displaystyle\frac{1}{C_1} i_{C1+} \Delta t_+

\Delta V_{C1+} = \displaystyle\frac{1}{C_1} \displaystyle\frac{V_{CC} - V_{C1med}}{R_1} \displaystyle\frac{DC}{f_{PWM}}

\Delta V_{C1+} = \displaystyle\frac{V_{CC} - V_{C1med}}{R_1 C_1 f_{PWM}} DC

Para nível baixo- no PWM:

\Delta V_{C1-} = \displaystyle\frac{1}{C_1} i_{C1-} \Delta t_-

\Delta V_{C1-} = \displaystyle\frac{1}{C_1} \displaystyle\frac{0 - V_{C1med}}{R_1} \displaystyle\frac{1 - DC}{f_{PWM}} (1 - DC)

\Delta V_{C1-} = \displaystyle\frac{- V_{C1med}}{R_1 C_1 f_{PWM}}(1 - DC)

Para que a tensão média seja constante as duas variações precisam ser iguais em magnitude, mas com sinais opostos. Cancelando os termos idênticos dos dois lados obtemos que a tensão média é igual a tensão de alimentação multiplicado pelo duty-cycle do sinal PWM.

\Delta V_{C1+} = - \Delta V_{C1-}

\displaystyle\frac{V_{CC} - V_{C1med}}{R_1 C_1 f_{PWM}} DC = - \displaystyle\frac{- V_{C1med}}{R_1 C_1 f_{PWM}}(1 - DC)

(V_{CC} - V_{C1med}) DC = V_{C1med} (1 - DC)

V_{C1med} = V_{CC} DC

Podemos também deduzir a equação de ondulação abaixo. A ondulação tem seu máximo com duty-cycle 50%.

\Delta V_{C1} = \displaystyle\frac{1}{C_1} i_{C1} \Delta t

\Delta V_{C1} = \displaystyle\frac{1}{C_1} \displaystyle\frac{V_{CC} - V_{C1med}}{R_1} \displaystyle\frac{DC}{f_{PWM}}

\Delta V_{C1} = \displaystyle\frac{1}{C_1} \displaystyle\frac{V_{CC}(1 - DC)}{R_1} \displaystyle\frac{DC}{f_{PWM}}

\Delta V_{C1} = \displaystyle\frac{V_{CC}}{R_1 C_1 f_{PWM}} (DC - DC^2)

\Delta V_{C1max} = \displaystyle\frac{V_{CC}}{4 R_1 C_1 f_{PWM}}

O tempo de acomodação do filtro depende apenas da constante de tempo do filtro. Considerando a acomodação de 90% obtemos o tempo abaixo.

t_{RC} = - \ln(1 - 0,9) R_1 C_1

t_{RC} = 2,3 R_1 C_1

Adicionando um AMPOP buffer

Não apenas precisamos escolher o filtro corretamente, também é necessário que não haja uma carga considerável no filtro, que causaria mudança nas constantes de tempo do filtro e, consequentemente, invalidaria os cálculos anteriores.

Para resolver este problema, ou seja, elimitar a carga que um circuito externo possa causar no filtro, podemos utilizar um AMPOP buffer unitário!

DAC com PWM filtrado e AMPOP buffer
DAC com PWM filtrado e AMPOP buffer

Amplificando o sinal

Caso a tensão do PWM é menor que a tensão analógica desejada podemos utilizar o amplificador operacional como um buffer com ganho.

Escolhendo os resistores R3 e R4 podemos criar qualquer tensão de saída, por exemplo, convertendo um PWM de 3 V em uma tensão analógica de 0 a 12 V (ex: R3=30k e R4=10k).

DAC com PWM filtrado e AMPOP amplificador
DAC com PWM filtrado e AMPOP amplificador

Atenuando o sinal

Também podemos estar na situação onde a tensão do PWM é maior que a tensão analógica desejada. Para resolver isso podemos utilizar um divisor resistivo no filtro.

Neste caso a tensão gerada pelo filtro será reduzida de acordo com o equivalente de Thevenin. E a resistência equivalente do filtro também será reduzida de acordo com o equivalente de Thevenin.

V_{th} = \displaystyle\frac{V_{CC} R_2}{R_1 + R_2}

R_{th} = R_1||R_2 = \displaystyle\frac{R_1 R_2}{R_1 + R_2}

As equações utilizadas acima serão válidas substituindo VCC por Vth e R1 por Rth.

DAC atenuado com PWM filtrado e AMPOP buffer
DAC atenuado com PWM filtrado e AMPOP buffer

Compartilhe!

Gostou do post? Foi útil? Clique abaixo e compartilhe com seus amigos!

Veja mais posts sobre Hardware.

Autor: Djones Boni

Engenheiro Eletricista.

2 comentários em “DAC com sinal PWM”

  1. Boa noite professor,
    Estou utilizando este tipo de conversor em meu TCC. O trabalho é sobre controle de vazão de um canal hidráulico. Utilizo o arduino e o sensor ultrassônico para medir de forma indireta a vazão no canal. Como o arduino só possui saida digitais (PWM), utilizei este filtro passa baixa com o ampop como buffer e com ganho 2 para suprir corrente de 4 a 20 mA. Como a impedancia de entrada do inversor de frequencia é 500 ohms então :
    5V (arduino)x 2(ganho ampop) = 10 V / 500 ohms = 20mA

    Porém tenho alguns problemas. A corrente máxima de saída no conversor é aproximadamente 19,08 mA , ou seja não se aproxima dos 20mA . Isso acarreta em erros no controle em malha fechada de vazão.
    Um dos possíveis erros observei na saída pwm do arduino que não aplica os 5V e sim algo em torno de 4.8 V, as vezes mais as vezes menos.
    Minha outra duvida é: qual AMPOP escolher? Existe algum que seja ideal para esta aplicação?

    1. Olá, Davi.

      É esperado que o microcontrolador forneça menos do que VCC=+5V nos pinos de saída em nível alto.
      Para ver isso verifique no datasheet pelos valores VOH.

      Também é esperado que o AMPOP foneça menos do que a tensão de alimentação. Nesse caso ela precisa ser maior que 10 volts, algo em torno de 12 volts.
      Novamente, para isso verifique o datasheet pelos valores VOH.

      Na maioria dos casos, a escolha de um AMPOP precisa ser criteriosa quando se trabalha com ganhos altos e/ou com frequências altas.
      Acredito que um AMPOP comum como LM324, LM358 ou LM741 dê conta.

      Saudações!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *