Pesquisar este blog

Mostrando postagens com marcador gerador áudio. Mostrar todas as postagens
Mostrando postagens com marcador gerador áudio. Mostrar todas as postagens

sexta-feira, 16 de maio de 2014

Injetor de Sinais


Injetor de Sinais microcontrolado

Mais um projeto simples para gerar sinais de áudio para teste, dessa vez usando um microcontrolador pequeno e barato, o PIC 12F629, que tem apenas 8 pinos em encapsulamento DIP. Desses 8 pinos, 6 são usados para acesso às portas de entrada e saída. A ideia é usar 5 portas de saída para gerar níveis que serão convertidos em sinal analógico por uma rede resistiva ponderada. A porta restante será usada como entrada para um botão que selecionará as frequências do sinal geral. Escolhi gerar 60Hz, 400Hz, 1kHz e 1,5kHz (máximo) selecionados apertando o botão sequencialmente e em círculo (volta aos 60Hz após 1500Hz).
Com 5 bits de faixa dinâmica podemos gerar 32 níveis analógicos que formarão o sinal analógico, como as saídas do PIC geram somente sinais lógicos TTL, ao final da conversão teremos um nível DC positivo somado ao sinal, que deverá ser acoplado ao dispositivo em teste por um capacitor de saída para retirar o nível DC. Os 32 degraus podem ser suavizados usando-se mais uma rede RC como filtro, mas que vai atenuar o sinal final.
A técnica para gerar as senóides aqui não foi a de DDS, apenas vario o tempo entre cada amostra (20 amostras com valores tabelados) de forma a aumentar ou diminuir o período do sinal. O 12F629 tem muito pouca memória pra se implementar DDS.
Como conversor D-A (digital-analógico) optei por usar resistores com ponderação ao invés de usar uma rede R-2R porque não seriam muitos bits a converter, então são poucos valores a ponderar. Como cada bit deve ter o dobro da ponderação do bit menos significativo subsequente, os resistores escolhidos foram: 510 ohms, 1kohms, 2kohms, 3,9kohms e 8,2kohms.  Haverá um pequeno erro na ponderação, mas a aplicação não é para testes e medições de distorção harmônica, apenas para ter um sinal mais perto de senoidal do que quadrado (usado na maioria dos injetores de sinal simples).

O esquema é o seguinte:

Todo o circuito pode ser montado em uma pequena plaquinha universal e acomodado em uma caixinha.
As frequências podem sofrer um pequeno desvio devido ao fato de o PIC ser configurado com o oscilador interno que não é muito preciso, mas obtive valores bem próximos dos desejados (medidos com um frequêncimetro rudimentar de 3 dígitos embutido no meu laboratoriozinho digital):




Finalmente uma foto do sinal no "osciloscópio" do Gameboy. Esse sinal é de 1kHz obtido da saída 2 (após o filtro RC) com 1Vpp.  Na saída 1 é possível obter um sinal com 4Vpp.

E aqui a montagem final numa plaquinha universal:


Um vídeo com os sinais gerados e visualizados no osciloscópio, onde é possível ver os degraus da onda:
http://youtu.be/NWpha4t2pMU

Pra finalizar o firmware pra ser gravado no PIC:
:100000002828A301A200FF30A207031CA307031C9A
:1000100023280330A100DF300F200328A101E83E90
:10002000A000A109FC30031C1828A00703181528FC
:10003000A0076400A10F152820181E28A01C222844
:1000400000002228080083130313831264000800B1
:10005000073099008316083085008312850103302C
:10006000BC003030B800B901203085003908A1004B
:1000700038080F20243085003908A10038080F20E7
:10008000313085003908A10038080F203430850050
:100090003908A10038080F20363085003908A10042
:1000A00038080F20373085003908A10038080F20A4
:1000B000363085003908A10038080F20343085001B
:1000C0003908A10038080F20313085003908A10017
:1000D00038080F20243085003908A10038080F2087
:1000E000203085003908A10038080F201330850022
:1000F0003908A10038080F20063085003908A10012
:1001000038080F20033085003908A10038080F2077
:10011000013085003908A10038080F208501390811
:10012000A10038080F20013085003908A1003808E7
:100130000F20033085003908A10038080F20063051
:1001400085003908A10038080F20133085000630DB
:100150003802BA000030031C013E3902BB003B08E4
:10016000A1003A080F20B52034286400851DB92865
:10017000080064008519C628C8300120BC0A640044
:100180003C08053C031DC6280130BC0064003C0847
:10019000013C031DCF283230B8000330B9006400A1
:1001A0003C08023C031DD7287730B800B901640031
:1001B0003C08033C031DDF282D30B800B901640062
:1001C0003C08043C031DE7281D30B800B9010800B5
:0401D0006300E828B8
:02400E008C3FE5
:00000001FF

quarta-feira, 4 de dezembro de 2013

Oscilador Senoidal Valvulado

GERADOR DE ÁUDIO VALVULADO COM 6BQ7

Continuando com minhas experiências com osciladores de áudio, chegou a vez de montar um gerador de áudio valvulado. Achei um esquema na internet usando a 12AT7 e por ponte de Wien. Resolvi adaptar o esquema para usar a 6BQ7 que tem um ganho (mu) um pouco menor, mas como não necessitamos de ter um ganho alto e o oscilador fica limitado a ter um ganho de 3, ela deveria servir. Ela é um duplo triodo muito usada nos amplificadores da Meteoro, com base noval e filamentos de 6,3V. Além disso vou usar uma tensão de alimentação menor do que a do esquema original.

O esquema original é esse:
Nesse projeto a frequência é ajustável e variável de acordo com a posição do potenciômetro duplo de 1 Mohm. Como eu não tinha um desses, resolvi fazer o oscilador com valor fixo. A fórmula da frequência é:
Freq = 1 / (2 x pi x R x C)  desde que as duas resistências e os dois capacitores da malha de realimentação positiva sejam iguais.Essa malha (ou loop) de realimentação vai ter um ganho de 1/3 (atenuação por 3) na frequência escolhida.

Minha adaptação, usando as peças que eu tinha:
Esquema do meu circuito

Já na malha de realimentação negativa (a que define o ganho para compensar a atenuação) temos que ter um ganho de 3 para compensar a atenuação de 1/3 na malha positiva de forma a ter um ganho geral de 1. Mas para o oscilador começar a funcionar, inicialmente precisamos ter um ganho geral maior do que 1, e portanto um ganho maior do que 3 na malha de realimentação negativa. Usando a velha dica da lâmpada incandescente que inicialmente tem uma baixa resistência quando desenergizada e que aumenta a medida que ela esquenta, achei uma lâmpada de 130 V e uns 3 W de potência. Ela inicialmente tem o filamento frio com 369 ohms, então a resistência do potenciômetro de ajuste tem que ter mais do que duas vezes esse valor (na verdade bem mais pois a resistência da lâmpada vai aumentar bastante). No esquema original usaram um de 5k, o que adotei como valor a ser usado.

A lâmpada


A montagem foi feita numa plaquinha de fibra de vidro com ilhóses e terminais que eu faço em casa e permite uma rápida soldagem e muitas e muitas modificações (virtualmente indestrutível). Tudo fixado a um chassis de chapa de alumínio, com furos e locais pra fixação de soquetes, bornes, barras sindal, e conectores. O transformador de força também foi feito por mim pra uma versão de um pequeno amplificador valvulado.


Para minha surpresa, o circuito funcionou logo de primeira (ajustando o potenciômetro de 5k) e obtive essa linda senoide de 480 Hz (conforme calculado) de 1 Vrms e uma pequena distorção. Fazendo a medição do valor do potenciômetro, ele ficou em 1220 ohms, de forma que a lâmpada deve ficar com um valor de metade disso (610 ohms energizada).


O valor calculado da frequência segue abaixo:
Freq = 1 / (2 x 3,14159265 x 10000 x 33 x 10^-9) = 482 Hz
O osciloscópio estava com varredura vertical em 1 V por quadrícula e 1 ms por quadrícula horizontal.

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