[:es]Objetivos:
- Implementar un filtro Butterworh en Arduino
Diseño de filtro:
- Segundo Orden
- Butterworth
- Filtro pasa bajas
- Frecuencia de corte 400 hz
- Frecuencia de muestreo 100kHz
- Periodo de muestreo 10 us
Usamos la pagina http://www.schwietering.com/jayduino/filtuino/
para generar la ecuación en diferencias
http://www.schwietering.com/jayduino/filtuino/index.php?characteristic=bu&passmode=lp&order=2&usesr=usesr&sr=10000&frequencyLow=400¬eLow=¬eHigh=&pw=pw&calctype=double&run=Send

Código Arduino:
#include <SPI.h> // Remember this line!
#include <DAC_MCP49xx.h>
#define SS_PIN 10
DAC_MCP49xx dac(DAC_MCP49xx::MCP4921, SS_PIN);
#include “TimerOne.h” // libreria sirve para generar interrupciones por tiempo
int row; // señal de entrada
float yn; // señal de salida
//Low pass butterworth filter order=2 alpha1=0.04
class FilterBuLp2
{
public:
FilterBuLp2()
{
v[0]=0.0;
v[1]=0.0;
}
private:
double v[3];
public:
double step(double x) //class II
{
v[0] = v[1];
v[1] = v[2];
v[2] = (1.335920002785651040e-2 * x)
+ (-0.70089678118840259557 * v[0])
+ (1.64745998107697655399 * v[1]);
return
(v[0] + v[2])
+2 * v[1];
}
};
FilterBuLp2 f;
void setup() {
Timer1.initialize(10); // Dispara cada 100 us
Timer1.attachInterrupt(muestrea); // Activa la interrupcion y la asocia a muestrea
dac.setSPIDivider(SPI_CLOCK_DIV16);
dac.setPortWrite(true);
}
void muestrea () { // se ejecuta cada 100 us
int raw = analogRead(A0);
float filtered = f.step(raw);
yn=map(filtered,0,1024,0,4096); // se mapa xn de 0 1024 a 0 4096 ya que el DAC es de 12 bits
dac.output(yn); // se manda yn al DAC
}
void loop() {
}
Resultados:
Para una frecuencia de entrada de 100 Hz

Para una frecuencia de salida de 800 Hz

[:en]Objetivos:
- Implementar un filtro Butterworh en Arduino
Diseño de filtro:
- Segundo Orden
- Butterworth
- Filtro pasa bajas
- Frecuencia de corte 400 hz
- Frecuencia de muestreo 100kHz
- Periodo de muestreo 10 us
Usamos la pagina http://www.schwietering.com/jayduino/filtuino/
para generar la ecuación en diferencias
http://www.schwietering.com/jayduino/filtuino/index.php?characteristic=bu&passmode=lp&order=2&usesr=usesr&sr=10000&frequencyLow=400¬eLow=¬eHigh=&pw=pw&calctype=double&run=Send

Código Arduino:
#include // Remember this line!
#include
#define SS_PIN 10
DAC_MCP49xx dac(DAC_MCP49xx::MCP4921, SS_PIN);
#include “TimerOne.h” // libreria sirve para generar interrupciones por tiempo
int row; // señal de entrada
float yn; // señal de salida
//Low pass butterworth filter order=2 alpha1=0.04
class FilterBuLp2
{
public:
FilterBuLp2()
{
v[0]=0.0;
v[1]=0.0;
}
private:
double v[3];
public:
double step(double x) //class II
{
v[0] = v[1];
v[1] = v[2];
v[2] = (1.335920002785651040e-2 * x)
+ (-0.70089678118840259557 * v[0])
+ (1.64745998107697655399 * v[1]);
return
(v[0] + v[2])
+2 * v[1];
}
};
FilterBuLp2 f;
void setup() {
Timer1.initialize(10); // Dispara cada 100 us
Timer1.attachInterrupt(muestrea); // Activa la interrupcion y la asocia a muestrea
dac.setSPIDivider(SPI_CLOCK_DIV16);
dac.setPortWrite(true);
}
void muestrea () { // se ejecuta cada 100 us
int raw = analogRead(A0);
float filtered = f.step(raw);
yn=map(filtered,0,1024,0,4096); // se mapa xn de 0 1024 a 0 4096 ya que el DAC es de 12 bits
dac.output(yn); // se manda yn al DAC
}
void loop() {
}
Resultados:
Para una frecuencia de entrada de 100 Hz

Para una frecuencia de salida de 800 Hz

[:]

hola que tal ? estoy tratando de implementar este código , para un proyecto , pero estoy teniendo varios problemas principalmente no me funciona jaja
quería saber si lo echo en http://www.schwietering.com/jayduino/filtuino/index.php? no tendría que dentro del void muestra ? , de no ser necesario como devuelve lo calculado para trabajar en el void muestra ?
y otra consulta que habria que poner donde dice
#include // Remember this line!
#include
#define SS_PIN 10
DAC_MCP49xx dac(DAC_MCP49xx::MCP4921, SS_PIN);
muchas gracias por su molestia.
Una disculpa las primeras lineas estaban mal son
#include // Remember this line!
#include
#define SS_PIN 10
Ya corregí el articulo
Amigo Aqui Usate un codigo de DAC o usaste un integrado..