Problema de recorte del circuito AGC (control automático de ganancia)

-1

Una vez más, muchachos volvieron con un problema a mi circuito AGC, sin embargo, este es el último.

  1. El problema es que el LM833N está recortando a menos de 1.92Vpp a 4.586 V Vcc. Entiendo que este op-amp no es riel a riel, sin embargo, debería estar dentro de su oscilación de voltaje.

  2. No puedo explicar por qué obtengo un Vpp de 1.80V.

El algoritmo:

A. Ardunio lee la señal de audio a A0: lee 760 mV, esto está en pico después del rectificador de precisión.

B. Ardunio realiza la ecuación \ $ R2 = ((\ frac {Vo} {Vin}) - 1) * R1 \ $ Usando un objetivo de Vo deseado de 1.92V, esta es una variable dentro del IDE de Ardunio.

C. \ $ R2 = 1526.32 \ Omega \ $

D. Ardunio procede a encontrar la cantidad de pasos necesarios para llegar a \ $ 1526.32 \ Omega \ $ \ $ Value = 1526.32 / 36.75 \ = 41 \ $, donde se encontró 36.75 usando 9400 (medido en una fuente digital utilizando 0xFF) / 256 (hoja de datos)

E. Al ver el valor en el amplificador, \ $ 41 * 36.75 = 1506.75 \ Omega \ $ Esto se espera ya que perderemos precisión debido a una resolución de 8 bits.

\ $ Vo = ((\ frac {R2} {R1}) + 1) * V_ {IN} \ $

\ $ Vo = ((\ frac {1506.75} {1000}) + 1) * 760mV \ $

\ $ Vo = 1.90513V_ {p} \ $

No entiendo por qué este valor se muestra como un pico-pico de voltaje

Lo que me limita a mí es el Voltage Swing del LM833N o no estaba calculando Vp, sino Vpp.

Aquí hay fotos del circuito y del esquema

simular este circuito : esquema creado usando CircuitLab

Código Ardunio (muy áspero):

 #include <SPI.h>


int chipSelect = 10;
double voltageDivderOutput = A7;
int calibrationTurnOn = 3;
double desireAudioSignal = 1.98;
double audioSignalInput = A0;


double R1 = 1000.0;
double resolution = 256.0; 
double offset = 0.0;
double realValue = 9400;
double RS = 0.0;
double Voltage;
double Vcc;
double R2 = 0.0;
double ADCValue;
double R2New = 0.0;
double Vout = 1.92;
void setup()
{

  pinMode(chipSelect, OUTPUT);
  pinMode(voltageDivderOutput, INPUT);
  pinMode(audioSignalInput, INPUT);

  pinMode(calibrationTurnOn, OUTPUT);
  Serial.begin(9600);
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  calibration();

}


 void calibration() {
  Vcc = readVcc()/1000.0; //Gives the voltage of Vcc
  RS = 9400.0/resolution; //In datasheet of the Digi pot
  digitalWrite(chipSelect, LOW);
  SPI.transfer(0x00);
  SPI.transfer(0x00); //Makes the gain close as one as possible
  digitalWrite(chipSelect, HIGH);
}

long readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1100800L / result; // Back-calculate AVcc in mV
  return result;
}


void loop()
{


 double R2 = 0.0;
 double Vin = (analogRead(A0)/1024.0)*Vcc; //Read the value of Vin of the audio signal
 R2 = ((Vout/Vin)-1.0)*R1; //Transfer Function of the Non-inverting amplifier, re-arrange to find R2  
 double value = 0.0;
 value = R2/RS; //Find the int number to insert into register

 if (value >= 255)
 {
  value = 255;
  digitalWrite(chipSelect, LOW);
  SPI.transfer(0x00);
  SPI.transfer((int)value);
  digitalWrite(chipSelect, HIGH);
 }

 else if (value <= 0)
 {
  value = 0;
  digitalWrite(chipSelect, LOW);
  SPI.transfer(0x00);
  SPI.transfer((int)value);
  digitalWrite(chipSelect, HIGH);
 }

 else
 {
  digitalWrite(chipSelect, LOW);
  SPI.transfer(0x00);
  SPI.transfer((int)value);
  digitalWrite(chipSelect, HIGH);
 }

  value = 0.0;


}
    
pregunta Pllsz

1 respuesta

0

De los comentarios, parece ser simplemente que el LM833 está alcanzando sus límites de salida.

Puede determinar esos límites a partir de la hoja de datos.

Busque la "variación de voltaje de salida" en las especificaciones opamp. Para el LM833, se da como + -13.5V cuando se alimenta desde + -15V.

Eso es 1.5V de cada riel. Eso se mantendrá bastante cierto independientemente de la tensión de funcionamiento.

Está ejecutando su LM833 en 4.8V. Entonces, el límite superior es 3.3V (4.8-1.5), el límite inferior es 1.5V (0 + 1.5).

La diferencia es 1.8V, por lo que está viendo clipping a 1.8V pico a pico.

El LM833 no parece ser un buen complemento para su tarea.

Su sugerencia 21314 se ve mejor, al menos en términos del cambio de voltaje de salida. No miré el resto de las especificaciones.

    
respondido por el JRE

Lea otras preguntas en las etiquetas