X

Filtro pasa bajas diseñado en matlab e implementado en Arduino

Código en Matlab

clear

format long

fs=4000;  %frecuencia de muestreo
ts=1/fs;
fc=500;  % frecuencia de corte
 
Fnyquist=fs/2;  % frecuencia de Nyquist
 
 % Normalización de la frecuencias
 
 Wn=fc/Fnyquist; 
 
 N=1;
  
% Calculando el orden y las frecuencias de corte en rad/muestra
 
% [numB,denB] = BUTTER(N,Wn,'low');
 
 [numB,denB] = butter(N,Wn,'low')
 
 tf(numB,denB,ts)

 

Como obtener la ecuación en diferencias

 

Código en Arduino

 

#include <TimerOne.h>


float x;  // señal de entrada

float y;  // señal de filtrada
int bandera=0; // declaramos bandera

float  xanterior=0; // declaramos bandera

float  yanterior=0; // declaramos bandera


// rutina de interrupcion temporal cada periodo de muestreo la bandera se pone en uno
void ISR_timer(){
 
  bandera=1;
  
}

void setup(){
  
  Serial.begin(57600);    // incializa comunicacions serial
  
  Timer1.initialize(250);      //periodo de muestreo //  fs = 4kHz  ts=1/4k = 0.25e-3 =250 us
  Timer1.attachInterrupt(ISR_timer); // Activa la interrupcion y la asocia a ISR_timer

}

void loop(){
  
  
  
  if (bandera == 1) {
    
   x= (5.0*analogRead(0))/1023.0;


   y=0.29291*x +0.2929*xanterior+ 0.4142*yanterior;

   
  xanterior=x;
  yanterior=y;
   
   
    bandera=0;
   
  
    Serial.println(y);
  }
  
  



}

 

Visita

http://microcontroladores.com.mx/

Christian:

View Comments (3)

  • Por favor, si podría explicar con más detalle el código en Arduino, sobre todo como ingreso la señal de entrada a ser filtrada al Arduino. Muchas gracias.

    • La señal a filtrar debe estar en un rango de 0 - 5 V por que es el rango que acepta la en la entrada analógica de arduino.
      Para lograr que tu señal a filtrar este en ese rango puedes tienes que hacer acondicionamiento con amplificadores operacionales.
      Para un caso practico experimental y mostrar que funciona el filtro, puedes usar un generador de señales, por ejemplo puede usar una señal senoidal con un frecuencia x, con una amplitud de 2.5 V y offset de 2.5.

      • Para ver el resultado del filtrado, es necesario usar el grafica serial de Arduino. En caso de que quieras verlo en el osciloscopio, necesitarías un conversor digita analógico.
        Saludos

Related Post