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