Autor Tema: Filtrado Digital de la lectura del AD  (Leído 7783 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Tec_Claudio_Perez

  • PIC12
  • **
  • Mensajes: 62
Filtrado Digital de la lectura del AD
« en: 22 de Septiembre de 2004, 19:31:00 »
Hola a todos.

Tengo un circuito con un 16F876 que recibe una señal 4-20mA de un transmisor de peso. La señal entra al AD del pic y tiene un capacitor a masa para reducir el ruido y el cable de señal es mallado. Sin embargo la señal todavía tiene un poco de ruido y estaba considerando la posibilidad de usar un filtro activo pasabajos chebisev con amplificadores operacionales antes del AD.

Se que aplicando técnicas de DSP (procesamiento digital de señal) se puede filtrar digitalmente la señal. Alguien sabe donde puedo encontrar información (libros o páginas web) sobre esto ? La idea es poder hacerlo con el CCS.

Creo que en este projecto al leer el AD se utiliza esta técnica.
http://www.kd7lmo.net/ground_atv.html

Lo interesante es que dominando la técnica se podría implementar no solo pasabajos, sino tambien rechaza banda a 50 Hz por ejemplo.

Buscando en la red solo encontré un ejemplo de Pasabajo con VB. Se que el tema de los filtros digitales es complicado, pero estoy decidido a aprender.

Desde ya, muchas gracias.

      Téc.Claudio J. Pérez
interrupt_request@hotmail.com

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Filtrado Digital de la lectura del AD
« Respuesta #1 en: 22 de Septiembre de 2004, 23:23:00 »
Que sensor estas utilizando?

Los sensores que entregan una señal analogica de corriente son comunes en la industria con aplicaciones en PLC el valor de 4 a 20 mA es tipico. Un PIC no procesa este tipo de señales de corriente.

Deberias pasar la corriente a una tension adecuada para el PIC antes de proceder a utilizar algun tipo de filtro de los que mencionas o ingresar la señal de corriente directa al PIC. Yo creo que este es tu gran gran gran muy gran problema.

Lamentablemente en este momento olvide un chip que hace este trabajo. Podria buscarlo y en otra oportunidad enviarte el dato si todavia lo necesita.

 Salud2


Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Filtrado Digital de la lectura del AD
« Respuesta #2 en: 23 de Septiembre de 2004, 05:01:00 »
Por aqui tengo un circuito (no un IC, sino un montaje), para convertir de I/V con carga flotante. Si lo quieres ya sabes, me lo dices y te lo envío por privado.
Sólo tendrás que recalcular los componentes para que tu salida sea de 0-5v o la que desees. Viene como calcurar todo.
Como te indica kruskal, estos son usados en instrumentación y la historia de usar 4-20mA (no usar 0-20mA) es para poder saber si hay rotura en algún cable en la transmisión del canal. Si hay 0mA, cable roto. Lo de usar corriente, para evitar caídas de tensión si se usara transmisión en voltage. Unos datos simplemente por si no lo conocías...

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Filtrado Digital de la lectura del AD
« Respuesta #3 en: 23 de Septiembre de 2004, 06:29:00 »
hola Tec_Claudio_Perez

Yo haria un convertidor I/U como dice Cuca y despues haria el filtro pasabajos o pasabanda con unos OP"s. Hacer el filtro digital implica implementar un uP que pueda DSP. Yo no se que uP quieres usar, pero solo te andaria un dsPIC o alguno de Texas Instruments.
El projecto que mencionas tiene un 18f452, por lo tanto no puede hacer funciones DSP. Yo he visto que igualmente se puede hacer un filtro mediante SW, pero yo lo haria analogicamente, es mas seguro. Si quieres te puedo pasar un circuito con un OP de un filtro pasabajos, con el cual puedes hacer un Tschebyscheff o un Bessel o otro. El circuito se conoce con el nombre de "Sallen-Key". En el google encuentras seguro mucha informacion de este.

Ok espero te ayude esto.
Saludos desde Suiza, Pablo.

Desconectado juno303

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 103
RE: Filtrado Digital de la lectura del AD
« Respuesta #4 en: 23 de Septiembre de 2004, 09:48:00 »
pon el ciruito en el topic, asi lo bajo tambien yo ! , o enviamelo tambien.   Tambien tengo problemas con el conversor, uso un LM35 y me mete mucho ruido, varia unos 4 puntos del conversor, que estos equivalen a casi 20mV, etso representa 2 grados en el sensor., 5/1024= 4,8mV * 4= 20aprox.   Que dicen acerca de que los sensores estan diseñados para pLCs, hay que adaptarlos al pic ??? como es eso ???

Tambien necesito poder usar una termocupla PT100 con el pic, alguien ya trabajo con esto ???

saludos

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Filtrado Digital de la lectura del AD
« Respuesta #5 en: 23 de Septiembre de 2004, 12:03:00 »
hola amigos

aca un link en ingles para que vayan mirando:link

El resto viene mas tarde
Saludos desde Suiza, Pablo.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Filtrado Digital de la lectura del AD
« Respuesta #6 en: 23 de Septiembre de 2004, 17:14:00 »
Ya está en el almacén:
http://miarroba.com/foros/ver.php?foroid=256746&temaid=2355454

En cuanto a lo del LM35, sólo lo ví en teoría... sobre todo su hermano inglés, el LM335. Lo que si te recomiendo es que uses una tensión de referencia para el conversor y no la misma fuente de tensión del circuito, ya que variaciones en la referencia también se plasma en el resultado de la conversión. Quizás sea eso... Y mira el consumo del LM35 y si la Vref lo admite también lo alimentas con ella. Así mejor que mejor. De todos modos prueba primero en el conversor y si se arregla.. pues lo dejas así. Que cuando algo funciona mejor no tocar...
Eso es lo que se me ocurre. Y bueno, eso contando en que no la estés usando ya...

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Filtrado Digital de la lectura del AD
« Respuesta #7 en: 24 de Septiembre de 2004, 08:44:00 »
hola amigos

aqui viene el resto del filtro
Aloha
Saludos desde Suiza, Pablo.

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Filtrado Digital de la lectura del AD
« Respuesta #8 en: 24 de Septiembre de 2004, 09:12:00 »
hola amigos

para los que tienen interes, aqui les dejo un link muy interesante sobre filtros hechos con software. Esta en ingles, pero es genial.
Aloha
Saludos desde Suiza, Pablo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Filtrado Digital de la lectura del AD
« Respuesta #9 en: 24 de Septiembre de 2004, 10:24:00 »
Bueno, no se si te servira, pero aqui dejo una rutina que efectua un filtro de peso tipo FIFO...espero te sirva, yo aun no lo utilize.
Codigo:


:=I have a program that measures wheatstone bridge loadcells with a 16 Bit A/D. I would like to average 10 to 20 readings to smooth out the result and have seen several references to median filters in the list. I have spent the last 40 minutes searching for any kind of code snippets to get me coding in the right direction, but to no avail. I have receintly switched from a basic compiler to PCWH and am new to the C language. Does anyone have a code snippet for the median filter or a link on how to implement such a filter. The reading that I am getting from the ADC is stored in a int32 variable called value. Thanks in advance....

In a recent application I needed to have several running averages of a number of pressure transducers. I created a stucture that holds the data in an array, the index into the data array, the running sum, and the average.

// declare the structure type
struct avg_pres
{
long pressure_reading[16];
int index;
long running_sum;
signed long int average;
};

// declare and initialize the 2 pressure structures
struct avg_pres pressure1 ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
struct avg_pres pressure2 ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

Then I use a function to update the data and the average:

void update_running_average (struct avg_pres *sptr, int external_adc_channel)
{
// subtract the oldest reading from the running sum
sptr->running_sum = sptr->running_sum - sptr->pressure_reading[sptr->index];
// read the adc channel for this transducer and store in array
// this is the latest reading
sptr->pressure_reading[sptr->index] = read_ext_adc(external_adc_channel);
// add the latest reading to the running sum
sptr->running_sum = sptr->running_sum + sptr->pressure_reading[sptr->index];
// calculate the average and cast to a signed long int
sptr->average = (signed long int)((sptr->running_sum)/16);

// update the index - points to the next element to update
if(++(sptr->index) > 15)
{
sptr->index = 0;
}
return;
}

The average is a signed long int because it is required in other calculations.

Then in the code I just call the function with the appropriate structure pointer:

update_running_average (&pressure1, PRESSURE1_ADC);
update_running_average (&pressure2, PRESSURE2_ADC);

Hope this helps.


This one is fast and small but not a median filter. It"s more like an RC filter but it"s great for noise rejection.
Current_reading = Read_ADC;
Filtered_reading = (Current_reading + (Filtered_reading * 15)) /16;




Lo pegue aqui porque no me deja subir el archivo...
espero salga bien...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Tec_Claudio_Perez

  • PIC12
  • **
  • Mensajes: 62
RE: Filtrado Digital de la lectura del AD
« Respuesta #10 en: 30 de Septiembre de 2004, 20:17:00 »
Gracias a todos por responder, pero el problema no es el circuito del filtro activo con operacionales, sino si se puede hacer el filtrado del ruido por soft.
Hasta el momento el unico método que he utilizado es la técnica de promedio móvil, lo malo es que al variar la entrada, la salida tarda bastante en cambiar, se introduce una demora, es por esto que me interesa ver si hay otras técnicas.
Voy a ver ver los links y probar los codigos.

Téc. Claudio J. Pérez
Jujuy-Argentina

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Filtrado Digital de la lectura del AD
« Respuesta #11 en: 01 de Octubre de 2004, 04:20:00 »
hola Claudio

mira por lo que se, si haces un filtro mediante soft, el uP necesita mucho tiempo para calcular sus datos. Por eso es que la mayoria usa DSP para filtros hechos en soft. Mediante DSP se pueden hacer calculos muchisimos mas rapidos, que con los PIC"s convencionales. Por el sistema que estas utilizando, haria un filtro con OP"s. El delay que tienen estos filtros es muchisimo mas chicos que los que pueden generar los filtros mediante soft.

De todas maneras, no es para desanimarte a que no aprendas el tema de los filtros digitales. A mi tambien me interesa la materia,a asi que estoy a disposicion para aprender y aportar. Mira la pagina de filtros digitales que te puse mas arriba, esta genial. Solo pones los datos del filtro y te da el programa hecho

Aloha
Saludos desde Suiza, Pablo.

Desconectado cHiPmAn

  • PIC16
  • ***
  • Mensajes: 110
RE: Filtrado Digital de la lectura del AD
« Respuesta #12 en: 01 de Octubre de 2004, 07:27:00 »
Holas,

yo me pregunto si no es suficiente hacer una media de lecturas en un corto espacio de tiempo. Creo que para hacer una media, no se necesita tanta capacidad de calculo.
Creo que la media del ruido es 0, y por tanto, cuantas mas muestras, mejor eliminas el ruido.
Desde luego yo me apunto al carro de hacer un filtrado digital que analogico.
Una buena manera de hacer la media es pillar las muesrtas de una potencia de 2, o sea 8, 16, 32,... y te ahorras la división haciendo un desplazamiento de bits.

Espero haber aportado alguna idea.

Salu2!

Desconectado fer_zone

  • PIC12
  • **
  • Mensajes: 74
RE: Filtrado Digital de la lectura del AD
« Respuesta #13 en: 02 de Octubre de 2004, 19:00:00 »
Hola a todos, les cuento que he estudiado un poco de teoria sobre el filtrado digital (tipo FIR: finite impulse response). En teoria aplicarlo es bastante sencillo, solo se tiene que agrupar un numero definido de muestras del a/d, por ejemplo en un array, luego hallar el promedio de todos los valores que contiene, este resultado es el valor filtrado.

Cuando tomas una muestra nueva se elimina la ultima y se agrega la nueva, para volver a realizar el promedio (FIFO).

La frecuencia de corte dependera de cuan grande sea el array, es decir cuantas muestras estan incluidas en el calculo de promedio.

Cuando el ruido proviene de una fuente periodica senoidal como los 50Hz de la red, si la cantidad de muestras equivalen a un ciclo (20 milisegundos), el promedio de ese "ruido" en teoria es cero y en la practica se aproxima bastante.

Se que hay otros metodos más "robustos", pero este es bastante sencillo de implementar y es muy usado en elementos de control y medida como los que aqui estan mencionando.

Desconectado telekitor

  • PIC10
  • *
  • Mensajes: 30
RE: Filtrado Digital de la lectura del AD
« Respuesta #14 en: 07 de Noviembre de 2004, 08:09:00 »
Para hacer una conversion A/D la señal debe de estar limitada en banda (por debajo de la frecuencia nyquist = fzmuestreo/2) para no tener aliasing(traslape de unas frecuencias en otras) , es OBLIGATORIO HACER FILTRADO PASOBAJO ANALOGICO, para asegurar que esto se cumple, una vez bien digitalizadas las muestras, se puede filtrar digitalmente, la capacidad de calculo necesaria depende en gran medida del orden del filtro a implementar,

el filtro analogico no os lo quita nadie Flash