Medicion de Filtros con Arduino



En este post, vamos a realizar un programa muy simple que nos va a permitir medir un filtro y visualizarlo con el Serial Plotter.
El principio de funcionamiento es bastante sencillo, 
Debemos realizar un Sweep de frecuencia, esto se hace generando una salida de frecuencia, básicamente un oscilador, que va variando la frecuencia desde un valor bajo a un valor alto, por ejemplo comenzamos con 1kHz y vamos subiendo la frecuencia de forma continua hasta llegar a los 100kHz, esto es a modo ejemplo podrían ser otros valores pero quiero demostrar solamente que lo que necesitamos es variar frecuencia de forma continua y ascendente.


Aquí se puede ver mejor la idea, donde al principio tenemos la frecuencia mas baja y al final (a la derecha) la frecuencia mas alta, pero es un aumento de frecuencia de forma continua.

Una vez que logramos generar este Sweep o Tracking de Frecuencia, vamos a inyectar esto en el dispositivo bajo testeo (DUT) que queremos ensayar o medir, por ejemplo un filtro pasa bajos (LPF).



Donde dice Vin vamos a inyectar este Sweep de frecuencias, y donde dice Vout vamos a analizar el comportamiento.



Como podemos ver en la imagen del diagrama de respuesta en frecuencia del filtro, tenemos la mayor magnitud en frecuencias bajas, y a medida que aumenta la frecuencia comienza a bajar.
Si ponemos un voltimetro en la salida Vout, tendríamos que ver esta curva, primero con un valor de tensión máximo y luego a medida que la frecuencia aumenta podremos ver como desciende la tensión.
En nuestro circuito utilizaremos un canal analógico para medir la tensión Vout.
Entonces, con un canal digital generamos el Sweep de frecuencias y con un canal analógico leemos el valor de salida del filtro.



El programa: 

unsigned long previousMicros = 0;
volatile int interval = 500;
int i=500, j=0;
void setup(){
pinMode(7, OUTPUT);
Serial.begin(115200);
}
void loop(){
while(i!=0){
for(j=0;j<10;j++){
digitalWrite(7, !digitalRead(7));
delayMicroseconds(interval);
}
interval=i;
Serial.println(analogRead(A0));
i--;
}
}

En este programa utilizamos el Pin 7 como salida de Sweep, y el pin A0 como entrada del ADC.



Mi título contenido de la página