Filtros recursivos con lenguaje C en PSoC Designer
Por: Tapia Farias Ing. Electrónico enTelecomunicaciones www.psoc-chile.es.tl
Esta nota de aplicación tiene como finalidad ayudar en el fácil desarrollo de filtros recursivos mediante lenguaje C para ser aplicados en Psoc Designer en la digitalización de señales y equipos de medición.
Introducción
De acuerdo a lo indicado, se deben utilizar distintos elementos y etapas para diseñar un equipo de medición, las cuales deben ser seleccionados de manera adecuada y se debe tomar la precaución de una correcta utilización, teniendo en mente lo señalado a continuación:
El voltaje que se obtiene a la salida de un transductor puede llegar a tener un valor relativamente alto, si se le compara con la sensibilidad de los modernos equipos electrónicos de medición.
Por ejemplo, no es raro disponer de 20 mV por cada gravedad de aceleración a la salida de un acelerómetro piezoeléctrico. Si se midiese un elemento sometido a choque, no sería asombroso medir una aceleración de hasta 1000 g lo cual equivale a un voltaje de salida de unos 20 V.
Sin embargo, la impedancia de salida de estos transductores es del orden de las decenas de GΩ y cualquier instrumento de medición haría disminuir este voltaje si fuera conectado a la salida del acelerómetro, debido a que la impedancia de entrada del instrumento de medición sería mucho menor del MΩ.
Filtros
La señal proveniente de un dispositivo o directamente de un transductor, según él, está compuesta, en general, por numerosas armónicas, siendo de sumo interés para el especialista la separación de estas armónicas con vistas a la identificación de problemas en la maquinaria industrial.
Esta operación constituye, generalmente, una responsabilidad de los filtros, que atendiendo a los objetivos de su empleo podrán tener diferentes características dinámicas.
Según la Norma ISO 2041 el filtro es un dispositivo para la descomposición de las oscilaciones en base a sus frecuencias componentes. Este introduce una atenuación relativamente baja para las oscilaciones contenidas en una o más bandas de frecuencias e introduce una atenuación relativamente alta sobre las oscilaciones contenidas en otras bandas de frecuencia.
Con el vertiginoso desarrollo de los microprocesadores, de la electrónica y la computación, han proliferado aceleradamente los llamados analizadores de señales que constituyen la integración en un solo instrumento de otros instrumentos.
Claro está, el filtrado de la señal no se ejecuta en forma analógica. Cuando se requiere un filtrado a alta velocidad, si no que se efectúa a través de algoritmos “construidos” por software, mediante filtros digitales recursivos, que le proporcionan una alta resolución en el análisis y una alta velocidad de cálculo que, en ocasiones, puede llegar a satisfacer las exigencias de la frecuentemente malinterpretada y mal empleada categoría de tiempo real.
Teoría
De acuerdo a lo indicado en la nota de aplicación AN2099 la función de transferencia para un filtro paso bajo y pasa alto de polo simple a esta definida por:
Donde fs, es la frecuencia de muestreo, fo como frecuencia de Roll off, a valor de atenuación, despejando se obtiene:
Diseño de Filtros
La nota de aplicación AN2099 entrega un completo procedimiento y teoría respecto de los filtros digitales, desarrollados en Asembler, pero al intentar obtener los mismos resultados mediante lenguaje C, se complica un poco el entendimiento. En este ejemplo vemos que no hay por que complicarse debido a que es muy simple desarrollar filtros digitales.
Al utilizar un conversor análogo digital del tipo delsig11 para el muestreo de una señal cada 30 ms a aproximadamente 35 Hertz el desempeño de los filtros análogos LP, BP, HP no entrega buenos resultados, siendo seguro solo a frecuencias mayores de 300 Hz, por lo cual se debe utilizar un filtro IIIR debido a que los filtros en bloques SC no se desempeñan bien a bajas frecuencias y se calientan, aumentando asi el ruido de la señal.
Primero se debe definir que ancho de banda queremos para nuestro filtro y que es lo que deseamos filtrar, en este ejemplo se diseñara filtro pasa banda, que permita el paso de un señal de 35Hz.
OK, Vamos:
- Primero se debe calcular la función de transferencia (eq.2)
- Se debe escoger la velocidad de Muestreo, para este ejemplo escogeremos el máximo para un ADC Delsig11 es decir 7812 Ks
- Escoja la frecuencia para este filtro. Aquí diseñaremos un filtro LP de 45 Hz y un HP de 35 Hz, creando un filtro pasa banda (BP). Se calcula el valor de “a”, para cada uno de ellos. De lo cual obtenemos:
- Para el filtro pasa bajo de polo simple de 45 Hz se obtuvo: a = 27,6
- Para el filtro pasa alto de 25 Hz se obtuvo: a = 49,7
- Luego implementarlo y definirlo en el programa de desarrollo en lenguaje C. Para esto debemos definir las variables necesarias, es decir una variable que reciba el valor del ADC (iData), la variable que recibe el valor para el filtro LP (flowpass), de igual forma para el filtro HP (fhighpass). 5.- Declarar las variables en el inicio del programa para cada valor de “a”.
#define a VALUE 27.6 #define bVALUE 49.7
Aplicación.
Aquí se utilizó para obtener el máximo valor de un proceso y se almacenó en la variable “mayor” y luego de la etapa de filtro poder utilizarlo en otro proceso.
#include “m8c.h” #include “iifilters.h”
•••••••••••• float current_calculation (void)
float volt;
iData=DELSIG11_iGetdataClearFlag(); iData=(iData + (DELSIG11_iGetDataClearFlag()))/2; DELSIG11 StopAD(); fLowPass += ((iData-fLowPass)/aVALUE); fhigPass += ((fLowPass-fhigPass)/VALUE); if(mayor < fhigPass) mayor=fhigPass; else mayor = mayor; }
Respecto al orden del filtro, éste se puede variar de acuerdo a los resultados obtenidos. Obviamente se debe considerar que se respetan los criterios de Nyquist y otros para el procesado digital de señales, como así también los 3 ciclos necesarios para obtener un dato correcto desde un ADC Delsig11.
Conclusión:
Se ha presentado una manera muy fácil y simple de diseñar filtros recursivos en C, solo deben probar….