- IC PT2258
- Como funciona o IC PT2258
- O Esquemático
- Componentes necessários
- Código Arduino
- Testando o circuito de controle de volume de áudio digital
- Aprimoramento adicional
O potenciômetro é um dispositivo mecânico através do qual se pode ajustar a resistência de acordo com o valor desejado, alterando assim a corrente que passa por ele. Existem muitas aplicações para um potenciômetro, mas principalmente um potenciômetro é usado como um controlador de volume para amplificadores de áudio.
Um potenciômetro não controla o ganho do sinal, mas forma um divisor de tensão e é por isso que o sinal de entrada fica atenuado. Portanto, neste projeto, vou mostrar a você como construir seu controlador de volume digital com o IC PT2258 e fazer a interface com um Arduino para controlar o volume de um circuito amplificador. Você também pode verificar vários circuitos relacionados ao áudio aqui, incluindo medidor VU, circuito de controle de tom, etc.
IC PT2258
Como mencionei anteriormente, o PT2258 é um IC feito para ser usado como um controlador de volume eletrônico de 6 canais , esse IC usa a tecnologia CMOS especialmente projetada para aplicações de áudio e vídeo multicanal.
Este IC fornece uma interface de controle I2C com uma faixa de atenuação de 0 a -79dB a 1dB / etapa e vem em um pacote DIP ou SOP de 20 pinos.
Alguns dos recursos básicos incluem,
- 6 canais de entrada e saída (para sistemas de áudio doméstico 5.1)
- Endereço I2C selecionável (para aplicação em cadeia)
- Separação de canal alto (para aplicação de baixo ruído)
- Razão S / N de> 100dB
- A tensão operacional é de 5 a 9V
Como funciona o IC PT2258
Este IC transmite e recebe dados do microcontrolador via linhas SCL e SDA. O SDA e o SCL constituem a interface do barramento. Essas linhas devem ser puxadas para cima por dois resistores de 4,7 K para garantir uma operação estável.
Antes de irmos para a operação real do hardware, aqui está a descrição funcional detalhada do IC. se você não quiser saber tudo isso, pode pular esta parte porque toda a parte funcional é gerenciada pela biblioteca do Arduino.
Data de validade
- Os dados da linha SDA são considerados estáveis quando o sinal SCL é ALTO.
- Os estados HIGH e LOW da linha SDA mudam apenas quando o SCL está LOW.
Iniciar e parar condição
Uma condição inicial é ativada quando
- o SCL é definido como HIGH e
- SDA muda de estado HIGH para LOW.
A condição de parada é ativada quando
- SCL é definido como HIGH e
- SDA muda do estado LOW para HIGH
Nota! Esta informação é muito útil para depurar os sinais.
Formato de dados
Cada byte transmitido para a linha SDA consiste em 8 bits, que formam um byte. Cada byte deve ser seguido por um bit de reconhecimento.
Reconhecimento
O reconhecimento garante uma operação estável e adequada. Durante o pulso de reconhecimento do clock, o microcontrolador puxa o pino SDA para ALTO, neste exato momento em que o dispositivo periférico (processador de áudio) puxa para baixo (BAIXO) a linha SDA.
O dispositivo periférico (PT2258) agora está endereçado e deve gerar um reconhecimento após receber um byte, caso contrário, a linha SDA permanecerá em nível alto durante o nono (9º) pulso de relógio. Se isso acontecer, o transmissor mestre gerará informações de STOP para abortar a transferência.
Isso elimina a necessidade de haver uma transferência de dados válida.
Seleção de Endereço
O endereço I2C deste IC depende do estado do CODE1 (Pino No.17) e CODE2 (Pino No.4).
CÓDIGO1 (PIN No. 17) |
CÓDIGO 2 (PIN No. 4) |
HEX ADDRESS |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logic High = 1
Lógica baixa = 0
Protocolo de Interface
O protocolo de interface consiste no seguinte:
- Um pouco de começo
- Um Byte de Endereço de Chip
- ACK = bit de reconhecimento
- Um byte de dados
- Um pouco de parada
Um pouco de arrumação
Depois que o IC é ligado, ele precisa esperar pelo menos 200ms antes de transmitir o primeiro bit de dados, caso contrário, a transferência de dados pode falhar.
Após o retardo, a primeira coisa a fazer é limpar o registro enviando “0XC0” vi a linha I2C, isso garante o correto funcionamento.
A etapa acima limpa todo o registro, agora precisamos definir um valor para o registro, caso contrário, o registro armazena o valor lixo e obtemos uma saída sardenta.
Para garantir ajustes de volume adequados, é necessário enviar um múltiplo de 10dB seguido por um código de 1dB para o atenuador em sequência, caso contrário, o IC pode se comportar de forma anormal. O diagrama abaixo o esclarece mais.
Ambos os métodos acima funcionarão corretamente.
Para garantir a operação adequada, certifique-se de que a velocidade de transferência de dados I2C nunca exceda 100 KHz.
É assim que você pode transmitir um byte para o IC e atenuar o sinal de entrada. A seção acima é para aprender como o IC funciona, mas como eu disse antes, vamos usar uma biblioteca Arduino para nos comunicarmos com o IC que gerencia todo o código rígido e só precisamos fazer algumas chamadas de função.
Todas as informações acima são retiradas da folha de dados, consulte-a para obter mais informações.
O Esquemático
A imagem acima mostra o esquema de teste do Circuito de Controle de Volume baseado em PT2258. É retirado da folha de dados e modificado de acordo com a necessidade.
Para a demonstração, o circuito é construído em uma placa de ensaio sem solda com a ajuda do esquema mostrado acima.
Nota! Todos os componentes são colocados o mais próximo possível para reduzir a indutância e a resistência da capacitância parasita.
Componentes necessários
- PT2258 IC - 1
- Arduino Nano Controller - 1
- Breadboard genérico - 1
- Terminal de parafuso 5 mm x 3 - 1
- Botão de pressão - 1
- Resistor de 4,7 K, 5% - 2
- Resistor 150K, 5% - 4
- Resistor de 10k, 5% - 2
- Capacitor 10uF - 6
- Capacitor 0,1uF - 1
- Jumper Wires - 10
Código Arduino
Para simplificar, vou usar uma biblioteca PT2258 do GitHub, que é feita pela sunrutcon.
Esta é uma biblioteca muito bem escrita, por isso decidi usá-la, mas como é muito antiga, está um pouco cheia de erros e precisamos consertá-la antes de podermos usá-la.
Primeiro, baixe e extraia a biblioteca do repositório GitHub.
Você obterá os dois arquivos acima após a extração.
#include #include
Em seguida, abra o arquivo PT2258.cpp com seu Editor de Texto favorito, estou usando o Notepad ++.
Você pode ver que o “w” da biblioteca de fios está em letras minúsculas, o que é incompatível com as versões mais recentes do Arduino, e você precisa substituí-lo por um “W” maiúsculo, é isso.
O código completo para o Controlador de Volume PT2258 pode ser encontrado no final desta seção. Aqui são explicadas partes importantes do programa.
Começamos o código incluindo todos os arquivos de bibliotecas necessários. A biblioteca Wire é usada para comunicação entre o Arduino e o PT2258. A biblioteca PT2258 contém todas as informações críticas de tempo I2C e confirmações. A biblioteca ezButton é usada para fazer interface com os botões de ação .
Em vez de usar as imagens de código abaixo, copie todas as instâncias de código do arquivo de código e torne-as formatadas como costumávamos fazer em outros projetos
#incluir
Em seguida, faça os objetos para os dois botões e a própria biblioteca PT2258.
PT2258 pt2258; ezButton button_1 (2); ezButton button_2 (4);
Em seguida, defina o nível de volume. Este é o nível de volume padrão com o qual este IC começará.
Volume Int = 40;
Em seguida, inicie o UART e defina a frequência do clock para o barramento I2C.
Serial.begin (9600); Wire.setClock (100000);
É muito importante ajustar o clock I2C, caso contrário, o IC não funcionará porque a frequência máxima de clock suportada por este IC é 100KHz.
Em seguida, fazemos uma pequena manutenção com uma instrução if else para garantir que o IC esteja se comunicando corretamente com o barramento I2C.
If (! Pt2258.init ()) Serial.printIn (“PT2258 iniciado com sucesso”); Else Serial.printIn (“Falha ao iniciar PT2258”);
A seguir, definimos o atraso de debounce para os botões.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Finalmente, inicie o IC PT2258 configurando-o com o volume do canal padrão e o número do Pin.
/ * Iniciando PT com volume padrão e Pin * / Pt2258.setChannelVolume (volume, 4); Pt2258.setChannelVolume (volume, 5);
Isso marca o fim da seção Void Setup () .
Na seção Loop , precisamos chamar a função de loop da classe de botão; é uma norma de biblioteca.
Button_1.loop (); // Normas da biblioteca Button_2.loop (); // Normas da biblioteca
A seção abaixo se destina a diminuir o volume.
/ * se o botão 1 for pressionado se a condição for verdadeira * / If (button_1.ispressed ()) {Volume ++; // Incrementando o contador de volume. // Esta instrução if garante que o volume não ultrapasse 79 If (volume> = 79) {Volume = 79; } Serial.print (“volume:“); // imprimindo o nível de volume Serial.printIn (volume); / * definir o volume para o canal 4 que está no PIN 9 do IC PT2558 * / Pt2558.setChannelVolume (volume, 4); / * definir o volume para o canal 5, que é o PIN 10 do IC PT2558 * / Pt2558.setChannelVolume (volume, 5); }
A seção abaixo se destina a aumentar o volume.
// O mesmo acontece com o botão 2 If (button_2.isPressed ()) {Volume--; // esta instrução if garante que o nível de volume não vai abaixo de zero. Se (volume <= 0) Volume = 0; Serial.print (“volume:“); Serial.printIn (volume); Pt2258.setChannelVolume (volume, 4); Pt2558.setChannelVolume (volume, 5); }
Testando o circuito de controle de volume de áudio digital
Para testar o circuito, o seguinte aparelho foi usado
- Um transformador que tem um Tap 13-0-13
- 2 Alto-falante de 4Ω 20W como uma carga.
- Fonte de áudio (telefone)
Em um artigo anterior, mostrei como fazer um amplificador de áudio simples de 2x32 watts com IC TDA2050, vou usá-lo também para esta demonstração.
Desordenei o potenciômetro mecânico e encurtei dois fios com dois pequenos cabos de ligação.
Agora, com a ajuda de dois botões, o volume do amplificador pode ser controlado.
Aprimoramento adicional
O circuito pode ser modificado para melhorar seu desempenho. Melhorias como o circuito podem ser feitas em um PCB para eliminar ainda mais o ruído gerado pela seção digital do IC. Também podemos adicionar um filtro adicional para rejeitar ruídos de alta frequência. Além disso, verifique outros circuitos de amplificador de áudio e outros projetos relacionados a áudio.
Espero que tenha gostado deste artigo e aprendido algo novo com ele. Se você tiver alguma dúvida, pode perguntar nos comentários abaixo ou pode usar nossos fóruns para uma discussão detalhada.