Ruido de audio: ATMEGA328P, MCP4921 y LM386

1

Estoy tratando de construir un circuito de audio simple. El objetivo es almacenar archivos .wav en forma de archivos hexadecimales en la memoria flash del ATMEGA328P y emitir el audio a través de un pequeño altavoz utilizando un DAC MCP4921 y un amplificador operacional LM386N-1.

Subí una parte de mi esquema de EAGLE. El valor de AMP_FIL_R es en realidad 0.05uF, en lugar de los 100uF indicados en el Esquema Eagle, y esto es por la hoja de datos LM386. Además, el código que estoy ejecutando está adjunto. Comencé con el código de aquí y Agregué algo de código para reproducir mi archivo hexadecimal.

El problema: Aunque soy capaz de emitir un maullido, está saliendo con mucho ruido. Por lo tanto, parece que el sonido final que realmente deseo está totalmente allí, pero se agrega un ruido de alta frecuencia por encima de él.

La pregunta: ¿Qué podría estar causando este ruido? He leído una serie de cosas que podrían causar esto. Primero, el regulador de potencia LTC1514-5 que estoy usando está en el rango de frecuencia de conmutación de 650 kHz, ¿no está seguro si está afectando el audio? En segundo lugar, el amplificador operacional LM386, ¿debería estar más alejado del altavoz? ¿Conexiones poco confiables en el tablero? ¿La proximidad al equipo de banco, como la fuente de alimentación del osciloscopio / metro / CC?

//"meow.h" file is stored as PROGMEM, char type variable

#include "avr/io.h"
#include "util/delay.h"
#include "HRL_SPI.h"
#include "HRL_MCP492x.h"
#include "meow.h"

void setup() {
  Serial.begin(9600);  
  // Initiate SPI in Mode 0 with MSB first, NO interrupts and a clock of F_CPU/4   
  setupSPI(SPI_MODE_0, SPI_MSB, SPI_NO_INTERRUPT, SPI_MASTER_CLK4);  
  SETUP_DAC;  
  _delay_us(100);    
}

int config = 0x30; //Mono, unbuffered, 1xGain, SHDN off  
word output = 0;  
word a=0; //index for meow array 

void loop() {

  if(a==sizeof(meow)) {Serial.print("again!"); delay(2000); a=0;}  
  output = pgm_read_byte(&(meow[a++]))*16; //Multiplied by 16 to go from 8 to 12 bits  

//  Serial.print("index:");  
//  Serial.print(a,DEC);  
//  Serial.print('\n');     
//  Serial.print("output:");  
//  Serial.print(output,DEC);  
//  Serial.print('\n');  
//  Serial.print('\n');    

  writeMCP492x(output,config);    
  _delay_us(125);    
}
    
pregunta user2608147

2 respuestas

2

Saturation.

Conectó el voltaje de referencia de MCP4921 a su \ $ V_ {DD} \ $, a través de un filtro. Esto significa que \ $ V_ {REF} \ $ es 3.3V o 5V (supongo que 5 V, debido a su LTC1514-5).

Esto significa que su señal analógica tiene un valor máximo de pico a pico de 5V. El LM386 en esa configuración tiene una ganancia entre 20 y 200. Suponiendo una ganancia de solo 20 (lo cual dudo, ya que hay un \ $ 10 \ \ mu F \ $ cap), obtienes \ $ 100 \ V_ {pp} \ $ , lo que, por supuesto, no se puede lograr, también porque la tensión máxima de operación del LM386 es de 12V.

Puedes probar:

  • insertando una resistencia en paralelo a DEC_C6, para reducir el voltaje de referencia (puede ser tan bajo como 0.04V). Supongo que el rendimiento del ruido fijo disminuirá.
  • Atenuar Vout_A. Pero, de nuevo, no solo se reducirá el rendimiento del ruido, sino que sería una solución muy ineficiente: atenúa la señal y la amplifica de nuevo.
  • o use alguna configuración de controlador de altavoz no amplificador, para que no saturará.

De todos modos, mantenga el 386 alejado del regulador de conmutación. De hecho, el 386 es muy no lineal fuera de su ancho de banda y, por lo tanto, el ruido de 650 kHz se puede captar y poner en la banda.

    
respondido por el next-hack
0

Publicar una nueva respuesta para agregarla al anser aceptado ya que no tengo el karma para comentar:

@ next-hack tuvo una gran respuesta con respecto a arreglar los circuitos alrededor del DAC, y también hay espacio para mejorar / sintonizar el amplificador.

La clave es medir / sondear en las uniones de cada bloque de la cadena:

  • señal a DAC

  • señal de DAC que es señal a amp

  • señal del amplificador que es señal para el orador

  • ...etc.

Sin tener más detalles del ruido es difícil de identificar. Como señala otra pregunta (enlace: El amplificador de audio LM386 no amplifica ) y @ next-hack alude a, usted tiene ruido potencial de la propagación desde otra fuente (por ejemplo, fuente de alimentación) o desde otro acoplamiento. Si la energía es de una batería o un regulador lineal al opamp y al DAC, es más probable que esté en buena forma. Si proviene de un suministro de conmutación, o está sesgado en uno, entonces hay espacio para que se introduzca el ruido.

    
respondido por el Raj

Lea otras preguntas en las etiquetas