Pesquisar este blog

terça-feira, 10 de setembro de 2013

Gerador de áudio senoidal com AOs

GERADOR DE SINAIS SENOIDAIS


A forma de onda senoidal pode ser encontrada na tomada elétrica das nossas casas, numa frequência de 60Hz e tensão váriavel de 115V a 240V em geral. Ao contrário de ondas quadradas que podem ser facilmente geradas com circuitos digitais e apesar de ser uma forma de onda simples e conter apenas uma componente harmônica (a fundamental) a onda senoidal não é fácil de se obter com  circuitos eletrônicos. Uma onda senoidal é analógica e é muito útil pra se realizar testes e medições em áudio. Então se faz necessário ter um gerador de áudio senoidal e veremos duas formas interessantes de se obter uma onda senoidal com baixa distorção harmônica.  Um dos circuitos é antigo e analógico e o outro circuito é digital e pode ser obtido a partir de software inserido em um microcontrolador.

Na década de 1930, dois engenheiros decidiram constituir uma empresa para fabricar instrumentos eletrônicos e tiveram como encomenda dos estúdios Disney, a fabricação de geradores de áudio. A HP começou assim, fabricando geradores de áudio. E os dois fundadores (Will Hewlett e David Packard) criaram um oscilador que era baseado em uma ponte de Wien, onde a malha de realimentação positiva era formada por capacitores e resistores, que criava a defasagem necessária para um circuito amplificador começar a oscilar. Como essa malha atenuava o sinal para 1/3, a malha de realimentação negativa precisava compensar essa atenuação e dar um ganho de 3. Ocorre que para dar início a oscilação, inicialmente o ganho total precisava ser um pouco maior do que 1, assim a malha de realimentação negativa precisa ter um ganho inicial maior do que 3 e depois quando estiver estabilizado, ser de 3. Para isso eles bolaram um circuito simples e funcional. Aproveitaram que uma lâmpada incandescente possui uma resistência baixa quando fria e uma resistência crescente com o aumento da temperatura do filamento. Obviamente naquela época os amplificadores eram construídos com válvulas e não com transistores ou circuitos integrados. Mas pode-se montar um oscilador com ponte de Wien e um amplificador operacional com o mesmo princípio de operação e sem precisar de altas tensões, podendo ser alimentado por uma pilha de 9V.

O circuito do oscilador usa um duplo AO tipo TL072, onde um AO é usado como oscilador e outro como buffer de corrente e isolador. A frequência de operação é calculada pela fórmula:
F = 1 / (2 x PI x R x C), onde R é formado pelo potênciometro duplo de 47k logarítmico onde  cada resistor varável está em série com um resistor fixo de 100 ohms para limitar a frequência superior e os capacitores são iguais de 100nF. É interessante que o potênciometro tenha as duas resistências variáveis com valor o mais iguais possíveis, assim como os dois capacitores de 100nF.
No lado da malha de realimentação negativa, usar uma lâmpada tipo grão de arroz, de 12V 50mA, que tenha assim uns 240 ohms de resistência quando acesa, somada a um resistor de 100 ohms, resultando em uma resistência por volta de 300 ohms. Para ajustar o ganho final, deve-se ajustar o trimpot de 1k, para que tenha o ganho final de 3. O ajuste se faz com um osciloscópio e verificando a forma de onda na saída, de forma que tenha a maior amplitude sem que haja achatamento ou clipamento nas pontas da senóide. A fonte é uma bateria de 9V que tem um terra virtual no meio da tensão da bateria.
O esquema:


E alguns oscilogramas dos sinais em 100Hz, 1kHz e 10kHz:
100Hz e 2Vpp

1kHz e 2Vpp

10kHz e 2,2Vpp

Foto do gerador de áudio montado

Com o gerador de áudio, consegui obter até 8Vpp de amplitude e adicionei uma chave de 3 posições pra poder comutar os capacitores da ponte, assim tenho um gerador de 3 faixas de frequências. Pra incrementar mais um pouco e não ter que usar aqueles dials pouco precisos pra selecionar a frequência, adicionei um frequêncimetro digital com display de 3 dígitos e faixas de medição auto selecionáveis (999Hz, 9.99kHz e 99.9kHz) usando um PIC18F1220, que consegue medir até uns 30kHz.












O segundo circuito para gerar uma onda senoidal variável usa um circuito com técnica Direct Digital Synthesis (DDS). Esse é um sistema bem atual, onde se consegue uma altíssima resolução de frequências (chegando a 0,01Hz ou menos) e uma grande faixa de frequências, tudo controlado digitalmente e com alta precisão. A técnica DDS consiste em se ter uma tabela de fases e valor de amplitude (conversor fase-amplitude) do sinal de saída. Nessa tabela podemos ter variadas formas de onda e não apenas onda senoidais, mas também triangulares, dente de serra, quadrada, arbitrária e programável. Existem alguns cis especializados da Analog Devices como o AD9850 e o AD9833 que são programáveis via sinais digitais e possuem frequências de saída na casa das dezenas de MHz.
Um circuito DDS é composto basicamente de:
- Uma entrada ou gerador de clock digital, o clock de referência
- Um oscilador controlado numericamente (NCO) que por sua vez é composto de um registrador acumulador de fase, um registrador de incremento de fase e mais alguns registradores auxiliares
- Uma tabela de conversão fase para amplitude
- Um conversor digital - analógico
- Filtros passa baixas

Como funciona o DDS ? O registrador acumulador de fases geralmente tem um número relativamente grande de bits (por ex. 28 bits) e somente alguns bits de mais alta significância são usados para buscar um valor de amplitude na tabela de conversão (uma ROM que pode precisar de por ex. 10bits de endereço para buscar um valor de amplitude). O registrador de incremento de fase contém o valor que vai ser somado a cada período de clock ao registrador acumulador de fase. Quanto maior o valor do registrador de incremento, mais rapidamente o valor no acumulador de fase vai aumentar e mais rapidamente os 10 bits superiores aumentam, fazendo com que a tabela forneça os valores de amplitude variando mais velozmente. Ou seja, o valor do registrador de incremento de fase guarda uma relação direta com a frequência do sinal de saída.
Assim a frequência de saída será dada pela fórmula:
Fo = (valor incremento x frequência do clock)/ (2 ^ número de bits do acumulador de fase)
e a resolução de frequência será igual a:
Res = Frequência do clock / (2^ número de bits do acumulador de fase)

Para saber mais:
Tutorial DDS (em Inglês) da Analog Devices

Um gerador DDS pode ser implementado internamente num microcontrolador, para sintetizar sinais na frequência de áudio, pois haverá uma limitação quanto à velocidade de processamento (somas e conversão na tabela de busca) e o próprio clock do microcontrolador.

Eu escolhi trabalhar com um PIC 16F873 a 20MHz (inicialmente era 4MHz, mas era lento demais) com uma rede R-2R na saída de 8 portas para fazer a conversão digital-analógica. O restante é tudo firmware, aproveitando os registradores internos (memória RAM) do PIC para implementar os registradores de incremento e de acumulação de fase. A tabela de conversão fica na memória FLASH de programa.
O registrador de acumulador de fase será de 16 bits, portanto contará até 65535 e será circular (quando tiver overflow, inicia do zero ou próximo, dependendo do valor do incremento).
O registrador de incremento de fase será também de 16 bits e terá valor de duas vezes o valor da frequência escolhida. Assim a frequência escolhida será limitada a 20kHz (20000), de forma que nesse caso o registrador de incremento terá valor máximo de 40000. Como valor mínimo de frequência, estabeleci o valor de 10Hz. Cabe dizer que com as limitações de tamanho dos registradores usados, a síntese de frequências acima de 5kHz não fica perfeita, com distorção considerável.
A tabela de seno, será de 8 bits de endereço, com 8 bits de amplitude (a ser convertida para analógico pelo conversor DA de 8 bits). O período de clock será de aproximadamente 30us (32768Hz).

Para a conversão digital-analógica uma rede R-2R de 8 bits com resistores de 1k e 2k para obter um sinal de mais ou menos 4Vpp, mas totalmente acima dos 0V. Esse sinal passa por um filtro PI com dois capacitores e um indutor com frequência de corte na faixa de 22kHz. Pode-se passar finalmente o sinal por um buffer feito com AO e ganho unitário.

Como elemento de visualização, foi usado um display de cristal líquido de 2 linhas e 16 colunas, comum para se selecionar a frequência do sinal gerado. Com seis teclas: menu, enter, +1Hz (ajuste fino), -1Hz (ajuste fino), +100Hz e -100Hz (ajuste grosso), escolhe-se a frequência dentro da faixa de 10Hz a 20kHz e aperta-se enter, o sinal começa a ser gerado. Para selecionar ou parar o sinal, aperta-se menu.

O esquema:



















O firmware:
:10000000B2014629A00000308A0020087F39201B59
:10001000803C0D20A01B003C080082070034033404
:10002000063409340C3410341334163419341C34A7
:100030001F342234253428342B342E3431343334D5
:10004000363439343C343F34413444344734493411
:100050004C344E3451345334553458345A345C345F
:100060005E34603462346434663468346A346B34C9
:100070006D346F3470347134733474347534763451
:10008000783479347A347A347B347C347D347D34FA
:100090007E347E347E347F347F347F347F34040872
:1000A000A70006138613861383160613861386137A
:1000B000F030860583122708B2187B283A30A10059
:1000C000FC30DB203330A60090201030A1006830D7
:1000D000DB2090206430DA202230A60090202830E7
:1000E0007A200C307A2001307A2006307A20B2143F
:1000F00027087B283214A600321C89288613033C6B
:10010000031C8E288E200730A100D030DB20031482
:1001100008003214FE3C031941298617A60E321C32
:1001200032100617F030860526080F3986040613AC
:10013000A60E321890283230DA2003140800B313C8
:1001400029080319B3170530A8002730A300103081
:10015000B5200330A300E830B520A3016430B520FA
:10016000A3010A30B5202408BC28A2002508A1005C
:100170002408A0000A212008A000A8030319B31333
:1001800029080319C6282802031808002008031D9F
:10019000B313B31B0800303E3C29A301A200FF307B
:1001A000A207031CA307031C41290330A100E6306A
:1001B000DB20CF28A101FC3EA000A109031CE628FA
:1001C000FF300000A0070318E128A0076400A10F7A
:1001D000E0280800A2000330F628A2000130F6282B
:1001E000A2000630F628A2000430F628A800230852
:1001F0002102031DFD2822082002043003180130CB
:10020000031902302805031DFF3041290404031D92
:10021000FF304129A501A4011030A600210DA40D35
:10022000A50D2208A4022308031C230FA50203180E
:1002300020292208A40723080318230FA507031069
:10024000A00DA10DA60B0E29200841291030A800F1
:10025000A101A001A70CA60C031C34292208A007A9
:1002600023080318230FA107A10CA00CA50CA40CB4
:10027000A80B2A2924084129840031088A00300863
:100280008200831303138312640008008316FF3077
:10029000850020308600870107309F008312B80157
:1002A000B901E830BA000330BB000230A600A70154
:1002B0003A08A2003B08A3008A012621BC002508B9
:1002C000BD00FE308A01502001308A0150204630A6
:1002D0008A01502072308A01502065308A015020F6
:1002E00071308A01502075308A01502065308A01B2
:1002F00050206E308A01502063308A0150206930CE
:100300008A01502061308A01502020308A0150201B
:1003100044308A01502044308A01502053308A01F1
:100320005020FE308A015020C0308A0150207630A3
:100330008A01502061308A0150206C308A0150209F
:100340006F308A01502072308A01502020308A019B
:1003500050203D308A015020A9013A08A4003B08F2
:10036000A5004F30B000B1018A019F2064008A11BE
:100370000519D029BA0A0319BB0A3A08A0003B089C
:10038000A1005530A300F0308A01F0208A11031D2E
:10039000CD29F030BA005530BB0032308A01CD2073
:1003A00064008A11851AEB296430BA070318BB0A66
:1003B0003A08A0003B08A1004E30A30020308A017B
:1003C000F0208A11031DE8292030BA004E30BB000E
:1003D00032308A01CD2064008A118518062A013046
:1003E000BA020030031C013EBB023A08A0003B08E1
:1003F000A100A3010A308A01EA208A11031D032A01
:100400000A30BA00BB0132308A01CD2064008A1163
:10041000051A362A6430BA020030031C013EBB02C2
:100420003A08A0003B08A100A3010A308A01F3208A
:10043000BE003A08A0003B08A1004E30A3002030C7
:100440008A01ED20C0003E08840040088A01062190
:10045000C000C1006400400841048A110319332A16
:100460000A30BA00BB0132308A01CD200230A6002A
:10047000A7013A08A2003B08A3008A012621BC007C
:100480002508BD00B801B90164008A1185194A2AFE
:100490008A114F2A64308A01CD208A0161293908E6
:1004A0008A010220BE00BF01BE1BBF0380303E0791
:1004B00087003C08B8073D080318013EB9076400EF
:1004C0008A110518652A8A01612916308A01DA2005
:0A04D0008A014F2A63008A016A2A9C
:02400E00323D41
:00000001FF