URGENTE... Filtros

Saludos:
Estoy desarrollando una red SPI la cual consiste de 2 esclavos (microcontroladores) y un maestro (DSP). Los esclavos reciben señales análogas de 6 sensores cada una, a través de sus ADC. Estas señales deben ser enviadas hacia la tarjeta DSP (vía SPI) y finalmente hacia un PC vía WIFI.
Estoy comunicando vía SPI y vía Wifi... Pero ahora se me pide que implemente algu tipo de filtro digital sencillo en los microcontroladores para cada señal convertida, como por ejemplo un promediado de muestras o algo parecido... Tienes alguna otra idea de filtros sencillos... Sencillos me refiero a tipo promedioado... Nada de filtro FIR...
También se me pide que cree unas convensiones para los diferentes sensores. Es decir, establecer un sistema de referencia para cada sensor (angulo, presión, fuerza, aceleración). Pero no se como hacer eso... No entiendo muy bien.
Lo que más me importa por el momento es lo de los filtros...
Cualquier ayuda te la agradecería muchísimo
Muchas gracias de antemano.
Respuesta
1
¿La verdad? No se de eso, no quiero contestarte tonterías, prefiero mandarte a alguien que sepa más de eso, escoge en esta misma sección, algún experto y verifica por sus respuestas que sepa algo de todo esto, yo desde luego hay ...

3 respuestas más de otros expertos

Respuesta
1
Sobre el tema de implementar un filtro, además de la opción de promediar, podrías plantearte un sistema que discriminara las lecturas que no se desviaran de la anterior más de un determinado porcentaje. Esto es, en el caso de una temperatura por ejemplo, que las lecturas que variaran menos de 0,2ºC se ignoraran, o más que ignorarse se almacenaran en una variable del micro esclavo y se envíen al maestro cada por tiempo, siendo por un tiempo largo, máximo. ¿Por qué? Porque si todos los datos que se reciben son iguales, se ignorarían todos, y necesitaremos como mínimo un valor más o menos actualizado.
Solo es una idea, no me he visto en esta situación.
Sobre establecer un sistema de referencia para los sensores, ¿por qué no haces que se envíen 2 primeros bytes con unas iniciales que te sea manejables? No se, por ejemplo a1=angulo1, a2=angulo2,p1,p2...  seguido del valor.
Lamento darte solo alguna idea muy genérica, todavía no he realizado ninguna red de este tipo, y digo todavía porque la domótica de mi casa la quiero implementar de esa manera.
Mil gracias por tu respuesta.
Acerca del filtro que mencionas, me parece una muy buena idea y creo que también sirve para ajustar la resolución de las medidas; tiene algún nombre el filtro que mencionas, o fue algo que se te ocurrió... lo digo por si hay forma de googlear un poco más acerca del tema y ver si encuentro más opciones, aunque creo que es una excelente idea de un filtro simple.
Lo de el sistema de referencia: ¿Me hablas de una cabecera que identifique cada sensor verdad?... pero además quisiera saber una forma de representar los datos de otra forma diferente a binario puro... como por ejemplo ascii... no se no conozco más...
La verdad no entiendo cual es la finalidad de enviar los datos en otra representación, si de igual manera el maestro tiene que interpretar los datos y hacer operaciones binarias para ejercer sus funciones de control... no me queda claro... pero el proyecto me lo exige.
De nuevo te agradezco y espero tu respuesta... ya te ganaste una muy buena calificación de mi parte.. je je
Me alegro que te gustara la idea.
No conozco ningún nombre para este tipo de filtro, es una idea que se me ocurrió, que seguramente no inventara nada nuevo, pero no se como podrías googlear sobre ello. De todas maneras, su funcionamiento es muy sencillo. Si programas los micros en C, es cosa casi trivial, si es en esamblador, a mi por lo menos me cuesta bastante más.
Puedes hacer lo siguiente, vas tomando lecturas (conversiones A/D) cada cierto tiempo, según tus necesidades y vas guardando en un pequeño array las 2 ultimas lecturas, por ejemplo. Vas comparando la ultima con la penúltima (haces una resta), si la diferencia es mayor que su 5%, por ejemplo, pues la envías o almacenas definitivamente, que no, pues tomas otra lectura y desplazas los valores en el array.
Lo de sistema de referencia, si programas en C es más intuitivo, porque los datos los tratas como ascii. Por ejemplo, si recibes un "a125", puedes hacer: if(datoentrada[0]=="a") ... sabes que la variable que has recibido es de tipo "a". Si quisieras saber si es de el esclavo 1 o 2,: if(datoentrada[1]==1)... sabes que es del esclavo 1.
Si te exigen que los datos a tratar no sean en binario puro, diría que es ascii lo que te están pidiendo. Tendrás que transformar los dígitos de la cadena ascii en un valor numérico para poder operar con ellos.
Te doy mi mail y si quieres me escribes o me agregas al messenger, es cucuruy( a r r o b a )hotmail.com
Respuesta
1
Me cabrea mucho no saber lo necesario para ayudar a todos los que preguntáis. Pero es así: mis conocimientos, aun cuándo son de una persona de 86 años, tienen su límite. Lo mío es electrónica general y, más concretamente, especializada y con mucha experiencia en instrumentación de laboratorio (Generadores, osciloscopios, frecuencímetros, balanzas, contadores, etc. con lo que, obviamente, se aprende mucho...), pero apenas conozco las tripas de la informática, de la que soy un simple usuario, y menos las redes SPI (¿?), la Wifi... y demás zarandajas. A mi edad, esas cosas ya me superan, e incluso los micros, lamentablemente porque nadie me los ha enseñado, apenas los rozo... Considera que nací con las viejas válvulas, y han sido ya demasiadas las etapas que he tenido que ir superando.
Lo siento de verdad. No soy capaz de ayudarte en ésta ocasión, pero aquí me dejas para lo que pueda hacer en otra.
A ver si encuentras ayuda en otra persona "más moderna" y actualizada que yo.
¿Has probado a buscar ayuda en alguno de los muchos y excelentes foros de Google...?
Espero lo resuelvas. Entre tanto.
Respuesta
1
Lo que hice una vez fue construir una table en RAM con unas 10 casillas y sacar el valor medio de ellas. Luego revisé la tabla y eliminé las que se alejaban mucho del valor medio, puede ser un 30% y las reemplacé con el valor medio.
Si estas programando en assembler lo más complicado es la división para sacar el valor medio. En la página de microchip encontré un programa para dividir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas