Wednesday, December 7, 2016

Filtro Promedio Móvil Msp430


Como otros han mencionado, debe considerar un filtro IIR (respuesta de impulso infinito) en lugar del filtro FIR (respuesta de impulso finito) que está utilizando ahora. Hay más, pero a primera vista los filtros FIR se implementan como convoluciones explícitas y filtros IIR con ecuaciones. El filtro IIR particular que uso mucho en los microcontroladores es un filtro de paso simple de un solo paso. Este es el equivalente digital de un simple filtro analógico R-C. Para la mayoría de las aplicaciones, éstas tendrán mejores características que el filtro de caja que está utilizando. La mayoría de los usos de un filtro de caja que he encontrado son el resultado de alguien que no presta atención en la clase de procesamiento de señal digital, no como resultado de necesitar sus características particulares. Si sólo desea atenuar las altas frecuencias que usted sabe son el ruido, un filtro de un solo paso de paso bajo es mejor. La mejor manera de implementar uno digitalmente en un microcontrolador es generalmente: FILT lt-- FILT FF (NEW-FILT) FILT es una pieza de estado persistente. Esta es la única variable persistente que necesita para calcular este filtro. NUEVO es el nuevo valor que se está actualizando el filtro con esta iteración. FF es la fracción del filtro. Que ajusta la pesadez del filtro. Mire este algoritmo y vea que para FF 0 el filtro es infinitamente pesado ya que la salida nunca cambia. Para FF 1, su realmente ningún filtro en absoluto, ya que la salida sólo sigue la entrada. Los valores útiles están intermedios. En los sistemas pequeños, se selecciona FF para que sea 1/2 N de modo que la multiplicación por FF se pueda realizar como un desplazamiento a la derecha por N bits. Por ejemplo, FF puede ser 1/16 y multiplicar por FF por lo tanto un desplazamiento a la derecha de 4 bits. De lo contrario este filtro sólo necesita un substracto y un agregado, aunque los números generalmente necesitan ser más anchos que el valor de entrada (más en la precisión numérica en una sección separada a continuación). Normalmente tomo lecturas de A / D mucho más rápido de lo que se necesitan y aplico dos de estos filtros en cascada. Este es el equivalente digital de dos filtros R-C en serie, y se atenúa por 12 dB / octava por encima de la frecuencia de rolloff. Sin embargo, para las lecturas de A / D su generalmente más relevante mirar el filtro en el dominio del tiempo considerando su respuesta del paso. Esto le indica cuán rápido su sistema verá un cambio cuando cambie la cosa que está midiendo. Para facilitar el diseño de estos filtros (que sólo significa escoger FF y decidir cuantos de ellos a la cascada), uso mi programa FILTBITS. Se especifica el número de bits de cambio para cada FF en la serie de filtros en cascada y se calcula la respuesta de paso y otros valores. En realidad, por lo general, ejecutar esto a través de mi script wrapper PLOTFILT. Esto ejecuta FILTBITS, que hace un archivo CSV, luego traza el archivo CSV. Por ejemplo, aquí está el resultado de PLOTFILT 4 4: Los dos parámetros de PLOTFILT significan que habrá dos filtros en cascada del tipo descrito anteriormente. Los valores de 4 indican el número de bits de cambio para realizar la multiplicación por FF. Los dos valores FF son por lo tanto 1/16 en este caso. El rastro rojo es la respuesta de la etapa de la unidad, y es la cosa principal a mirar. Por ejemplo, esto le dice que si la entrada cambia instantáneamente, la salida del filtro combinado se establecerá en 90 del nuevo valor en 60 iteraciones. Si te importa el tiempo de solución de 95, entonces usted tiene que esperar alrededor de 73 iteraciones, y por 50 tiempo de solución sólo 26 iteraciones. El rastro verde le muestra la salida de una sola espiga de amplitud completa. Esto le da una idea de la supresión de ruido aleatorio. Parece que ninguna muestra causará más de un cambio de 2.5 en la salida. El rastro azul es dar una sensación subjetiva de lo que este filtro hace con el ruido blanco. Esto no es una prueba rigurosa, ya que no hay garantía de que exactamente el contenido de los números aleatorios elegidos como el ruido blanco de entrada para esta ejecución de PLOTFILT. Es sólo para darle una sensación áspera de cuánto será aplastado y lo suave que es. PLOTFILT, tal vez FILTBITS, y muchas otras cosas útiles, especialmente para el desarrollo de firmware PIC está disponible en la versión de software PIC Development Tools en mi página de descargas de software. Agregado acerca de la precisión numérica veo de los comentarios y ahora una nueva respuesta que hay interés en discutir el número de bits necesarios para implementar este filtro. Tenga en cuenta que la multiplicación por FF creará Log 2 (FF) nuevos bits por debajo del punto binario. En sistemas pequeños, FF se elige generalmente para ser 1/2 N de modo que esta multiplicación se realice realmente por un desplazamiento a la derecha de N bits. FILT es por lo tanto un entero de punto fijo. Tenga en cuenta que esto no cambia ninguna de las matemáticas desde el punto de vista de los procesadores. Por ejemplo, si está filtrando lecturas A / D de 10 bits y N 4 (FF 1/16), entonces necesita 4 bits de fracción por debajo de las lecturas A / D de enteros de 10 bits. Uno de los procesadores más, youd estar haciendo operaciones enteras de 16 bits debido a las lecturas de 10 bits A / D. En este caso, todavía puede hacer exactamente las mismas operaciones enteras de 16 bits, pero comience con las lecturas A / D a la izquierda desplazadas por 4 bits. El procesador no sabe la diferencia y no necesita. Hacer la matemática en todo enteros de 16 bits funciona si usted los considera 12,4 puntos fijos o enteros verdaderos de 16 bits (16,0 puntos fijos). En general, es necesario agregar N bits cada polo de filtro si no desea añadir ruido debido a la representación numérica. En el ejemplo anterior, el segundo filtro de dos tendría que tener 1044 18 bits para no perder información. En la práctica en una máquina de 8 bits que significa youd utilizar valores de 24 bits. Técnicamente sólo el segundo polo de dos necesitaría el valor más amplio, pero para la simplicidad del firmware usualmente utilizo la misma representación, y por lo tanto el mismo código, para todos los polos de un filtro. Normalmente escribo una subrutina o macro para realizar una operación de polo de filtro, y luego aplicarla a cada polo. Si una subrutina o macro depende de si los ciclos o la memoria del programa son más importantes en ese proyecto en particular. De cualquier manera, utilizo un cierto estado del rasguño para pasar NUEVO en la subrutina / macro, que pone al día FILT, pero también las cargas que en el mismo estado del rasguño que NUEVO estaba pulg. Esto hace fácil aplicar múltiples polos puesto que el FILT actualizado de un poste es El NUEVO de la siguiente. Cuando una subrutina, es útil tener un puntero apuntan a FILT en el camino, que se actualiza justo después de FILT a la salida. De esta manera la subrutina opera automáticamente en filtros consecutivos en memoria si se llama varias veces. Con una macro usted no necesita un puntero puesto que usted pasa en la dirección para funcionar en cada iteración. Ejemplos de código Aquí hay un ejemplo de una macro como se describe anteriormente para un PIC 18: Y aquí hay una macro similar para un PIC 24 o dsPIC 30 o 33: Ambos ejemplos se implementan como macros utilizando mi preprocesador de ensamblador PIC. Que es más capaz que cualquiera de las instalaciones macro incorporadas. Clabacchio: Otro problema que debería haber mencionado es la implementación de firmware. Puede escribir una subrutina de filtro de paso bajo de un solo polo una vez, luego aplicarla varias veces. De hecho, por lo general escribo una subrutina de este tipo para tomar un puntero en la memoria al estado del filtro, a continuación, hacer avanzar el puntero para que pueda ser llamado en sucesión fácilmente para realizar filtros multipolares. Ndash Olin Lathrop Apr 20 12 at 15:03 1. Muchas gracias por sus respuestas - todas ellas. Decidí usar este filtro IIR, pero este filtro no se utiliza como un filtro LowPass estándar, ya que necesito valorar los valores promedio de los contadores y compararlos para detectar cambios en un determinado rango. Ya que estos Valores van de dimensiones muy diferentes dependiendo de Hardware que quería tomar un promedio para poder reaccionar a estos cambios específicos de hardware automáticamente. Ndash sensslen May 21 12 at 12:06 Si se puede vivir con la restricción de un poder de dos números de elementos a la media (es decir, 2,4,8,16,32 etc), entonces la división puede ser fácil y eficiente de una manera De bajo rendimiento micro sin división dedicada, ya que se puede hacer como un cambio de bits. Cada turno a la derecha es una potencia de dos por ejemplo: El OP pensó que tenía dos problemas, dividiendo en un PIC16 y la memoria para su amortiguador del anillo. Esta respuesta muestra que la división no es difícil. Es cierto que no aborda el problema de la memoria, pero el sistema SE permite respuestas parciales, y los usuarios pueden tomar algo de cada respuesta por sí mismos, o incluso editar y combinar las respuestas de otros. Dado que algunas de las otras respuestas requieren una operación de división, son igualmente incompletas, ya que no muestran cómo lograr esto de manera eficiente en un PIC16. Ndash Martin Apr 20 12 at 13:01 Hay una respuesta para un verdadero filtro de media móvil (también conocido como filtro de caja) con menos requisitos de memoria, si no te importa el downsampling. Su llamado un filtro integrador-peine en cascada (CIC). La idea es que usted tiene un integrador que tomar las diferencias de más de un período de tiempo, y la clave de ahorro de memoria dispositivo es que mediante el muestreo, no tienes que almacenar todos los valores del integrador. Se puede implementar utilizando el pseudocódigo siguiente: Su longitud media móvil efectiva es decimationFactorstatesize, pero sólo necesita mantener alrededor de las muestras de estado. Obviamente, puede obtener un mejor rendimiento si su stateize y decimationFactor son potencias de 2, de modo que la división y los operadores de resto se sustituye por cambios y máscara-ands. Postscript: Estoy de acuerdo con Olin que siempre debe considerar filtros IIR simple antes de un filtro de media móvil. Si no necesita la frecuencia-nulos de un filtro de vagón, un filtro de paso bajo de 1 o 2 polos probablemente funcione bien. Por otro lado, si está filtrando para fines de decimación (tomando una entrada de alta tasa de muestreo y promediándola para su uso por un proceso de baja velocidad) entonces un filtro de CIC puede ser justo lo que está buscando. (Especialmente si se puede usar statesize1 y evitar el ringbuffer en conjunto con sólo un único valor de integrador anterior) Theres algunos análisis en profundidad de la matemática detrás de la utilización de la primera orden IIR filtro que Olin Lathrop ya ha descrito en el Digital Signal Processing stack exchange (Incluye muchas imágenes bonitas). La ecuación para este filtro IIR es: Esto se puede implementar usando sólo números enteros y sin división usando el siguiente código (podría necesitar un poco de depuración como estaba escribiendo desde la memoria.) Este filtro se aproxima a una media móvil de Los últimos K muestras estableciendo el valor de alfa a 1 / K. Hacer esto en el código precedente definiendo BITS a LOG2 (K), es decir para K 16 fijado BITS a 4, para K 4 fijado BITS a 2, etc. (Mal verificar el código enumerado aquí tan pronto como consiga un cambio y Edite esta respuesta si es necesario.) Respondió Jun 23 12 at 4:04 Heres un filtro de paso bajo de un solo polo (promedio móvil, con frecuencia de corte CutoffFrequency). Muy simple, muy rápido, funciona muy bien, y casi no hay sobrecarga de memoria. Nota: Todas las variables tienen un alcance más allá de la función de filtro, excepto la pasada en newInput Nota: Este es un filtro de una sola etapa. Múltiples etapas se pueden conectar en cascada para aumentar la nitidez del filtro. Si utiliza más de una etapa, tendrá que ajustar DecayFactor (en relación con la frecuencia de corte) para compensar. Y, obviamente, todo lo que necesita son las dos líneas colocadas en cualquier lugar, no necesitan su propia función. Este filtro tiene un tiempo de aceleración antes de que el promedio móvil represente el de la señal de entrada. Si necesita omitir ese tiempo de aceleración, sólo puede inicializar MovingAverage al primer valor de newInput en lugar de 0 y esperar que el primer newInput no sea un outlier. (CutoffFrequency / SampleRate) tiene un intervalo entre 0 y 0,5. DecayFactor es un valor entre 0 y 1, por lo general cerca de 1. Flotadores de precisión simple son lo suficientemente buenos para la mayoría de las cosas, sólo prefiero dobles. Si necesitas pegarte con números enteros, puedes convertir DecayFactor y Factor de Amplitud en enteros fraccionarios, en los que el numerador se almacena como el entero, y el denominador es una potencia entera de 2 (así puedes cambiar a la derecha como el número Denominador en vez de tener que dividir durante el bucle del filtro). Por ejemplo, si DecayFactor 0.99 y desea utilizar números enteros, puede establecer DecayFactor 0.99 65536 64881. Y luego, cada vez que multiplique por DecayFactor en su bucle de filtro, simplemente cambie el resultado 16. Para más información sobre esto, un excelente libro thats En línea, capítulo 19 sobre filtros recursivos: dspguide / ch19.htm PS Para el paradigma de la media móvil, un enfoque diferente para establecer DecayFactor y AmplitudeFactor que puede ser más relevante para sus necesidades, digamos que desea que el anterior, alrededor de 6 elementos promediados juntos, hacerlo discretamente, youd añadir 6 elementos y dividir por 6, por lo que Puede establecer el AmplitudeFactor a 1/6, y DecayFactor a (1.0 - AmplitudeFactor). Respondió May 14 12 at 22:55 Todo el mundo ha comentado a fondo sobre la utilidad de IIR vs FIR, y en la división de poder de dos. La identificación apenas tiene gusto de dar algunos detalles de la puesta en práctica. Lo siguiente funciona bien en pequeños microcontroladores sin FPU. No hay multiplicación, y si mantienes N una potencia de dos, toda la división es de un solo ciclo de desplazamiento de bits. Búfer de anillo FIR básico: guarda un buffer de ejecución de los últimos N valores, y una SUM corriente de todos los valores en el búfer. Cada vez que llega una nueva muestra, resta el valor más antiguo en el buffer de SUM, reemplázalo por el nuevo, añada la nueva muestra a SUM y SUM / N. Búfer de anillo IIR modificado: mantener una SUM corriente de los últimos N valores. Cada vez que llega una nueva muestra, SUM - SUM / N, agregue la nueva muestra, y la salida SUM / N. Si le estoy leyendo bien, usted está describiendo un filtro IIR de primer orden, el valor que está restar es el valor más antiguo que está cayendo, pero es el promedio de los valores anteriores. Los filtros IIR de primer orden pueden sin duda ser útiles, pero no estoy seguro de lo que quiere decir cuando sugiere que la salida es la misma para todas las señales periódicas. A una frecuencia de muestreo de 10KHz, alimentar una onda cuadrada de 100Hz en un filtro de caja de 20 etapas producirá una señal que se eleva uniformemente para 20 muestras, se sienta alto para 30, cae uniformemente para 20 muestras y se sienta bajo para 30. Un primer orden Filtro IIR. Ndash supercat Aug 28 13 a las 15:31 producirá una onda que empieza bruscamente a subir y gradualmente se nivela cerca (pero no en) el máximo de entrada, luego empieza a caer bruscamente y gradualmente se nivela cerca (pero no) del mínimo de entrada. Comportamiento muy diferente. Ndash supercat August 28 13 at 15:32 Un problema es que un simple promedio móvil puede o no ser útil. Con un filtro IIR, puede obtener un filtro agradable con relativamente pocos calcs. La FIR que usted describe sólo puede darle un rectángulo en el tiempo - un sinc en freq - y no puede administrar los lóbulos laterales. Puede ser bien vale la pena para lanzar en un número entero multiplica para que sea una buena sintonía sintonizable FIR si se puede ahorrar las garrapatas del reloj. Ndash Scott Seidman: No hay necesidad de multiplicar si uno simplemente tiene cada etapa de la FIR o la salida de la media de la entrada a esa etapa y su valor almacenado anterior, y luego almacenar la entrada (si se tiene El rango numérico, se podría usar la suma en lugar de la media). Si ese filtro es mejor que un filtro de caja depende de la aplicación (la respuesta de paso de un filtro de caja con un retardo total de 1ms, por ejemplo, tendrá un pico d2 / dt desagradable cuando el cambio de entrada, y 1ms más tarde, pero tendrá El mínimo posible d / dt para un filtro con un retraso total de 1ms). Ndash supercat Como dijo mikeselectricstuff, si realmente necesita reducir sus necesidades de memoria, y no te importa su respuesta al impulso que es un exponencial (en lugar de un pulso rectangular), me gustaría ir para un filtro de media móvil exponencial . Los uso ampliamente. Con ese tipo de filtro, usted no necesita ningún búfer. Usted no tiene que almacenar N muestras pasadas. Solo uno. Por lo tanto, sus requisitos de memoria se redujo por un factor de N. También, no necesita ninguna división para eso. Sólo multiplicaciones. Si tiene acceso a aritmética de punto flotante, use multiplicaciones de coma flotante. De lo contrario, haga multiplicaciones enteras y desplaza hacia la derecha. Sin embargo, estamos en 2012, y te recomiendo que utilices compiladores (y MCUs) que te permitan trabajar con números de coma flotante. Además de ser más eficiente de la memoria y más rápido (usted no tiene que actualizar los elementos en cualquier búfer circular), yo diría que es también más natural. Porque una respuesta de impulso exponencial coincide mejor con la forma en que se comporta la naturaleza, en la mayoría de los casos. Un problema con el filtro IIR como casi tocado por olin y supercat pero aparentemente ignorado por otros es que el redondeo abajo introduce cierta imprecisión (y potencialmente sesgo / truncamiento). Suponiendo que N es una potencia de dos, y sólo se utiliza la aritmética entera, el turno de derecha elimina sistemáticamente los LSB de la nueva muestra. Eso significa que la duración de la serie nunca podría ser, el promedio nunca tendrá en cuenta. Por ejemplo, supongamos una serie que disminuye lentamente (8, 8, 8, 7, 7, 7, 7, 6, 6) y asuma que el promedio es realmente 8 al principio. La muestra del puño 7 llevará la media a 7, independientemente de la resistencia del filtro. Sólo para una muestra. La misma historia para 6, etc. Ahora piensa en lo opuesto. La serie sube. El promedio se mantendrá en 7 para siempre, hasta que la muestra es lo suficientemente grande como para que cambie. Por supuesto, puede corregir el sesgo añadiendo 1 / 2N / 2, pero eso no resolverá realmente el problema de precisión. En ese caso la serie decreciente permanecerá para siempre en 8 hasta que la muestra sea 8-1 / 2 (N / 2). Para N4 por ejemplo, cualquier muestra por encima de cero mantendrá el promedio sin cambios. Creo que una solución para eso implicaría mantener un acumulador de los LSB perdidos. Pero no lo hice lo suficientemente lejos para tener el código listo, y no estoy seguro de que no perjudicaría la potencia IIR en algunos otros casos de series (por ejemplo, si 7,9,7,9 promedio a 8 entonces). Olin, su cascada de dos etapas también necesitaría alguna explicación. Se refiere a la celebración de dos valores medios con el resultado de la primera alimentado en el segundo en cada iteración. Cuál es el beneficio de este MSP430 Low Cost PinOsc Capacitive Touch Resumen Introducción Al considerar la solución táctil capacitiva adecuada, el costo frente al rendimiento a menudo viene a la mente. Sin embargo, ahora agregue flexibilidad y la solución total se vuelve aún más complicada. La sabiduría convencional podría decir utilizar una solución de tacto capacitivo de función fija. El problema es que estas soluciones a menudo carecen de flexibilidad o son demasiado caras. El MSP430 Value Series satisface todas estas necesidades con una variedad de opciones de MCU de bajo costo. Específicamente utilizado en este informe de aplicación es el MSP430G2553 con PinOsc GPIOs diseñados para sensores táctiles capacitivos junto con módulos de 16 bits Timer0A3 y Timer1A3 para el control de tiempo del proceso de medición y el intervalo de exploración para permitir de bajo consumo de energía y bajo costo flexibles soluciones táctiles capacitivas. En las siguientes secciones, los componentes del sistema serán presentados y discutidos. Esto incluirá el elemento del sensor, el uso de PinOsc GPIO, 160Timer0A3 para la operación de medición y Timer1A3 para el intervalo de exploración.160 Esto será seguido por la discusión del software de medición del sensor que se centrará en la medición de elementos de sensor, procesamiento de sensores y análisis de sensores. En la discusión del Software de Medición de Sensores, también destacaremos las técnicas de Filtrado160y la operación de ajuste de la línea de base que se usa en la etapa de Procesamiento de Sensores.160 Como pieza final, también se tratará la calibración de Elemento de Sensor. Como continuación de este documento, consulte también el ejemplo de aplicación del teclado capacitivo TouchPad de MSP430 Low Cost PinOsc. Descripción general del sistema En la sección Descripción general del sistema, los subcomponentes del sistema se abordarán en detalle. La Figura 1 muestra un ejemplo de sistema que implementa múltiples sensores de contacto capacitivos PinOsc MSP430.160 La Figura 2 muestra la implementación de un elemento sensor para la medición de tacto capacitivo PinOsc. Figura 1. Ejemplo de sistema de toque capacitivo PinOsc Figura 2. Elemento de sensor único PinOsc A lo largo de esta sección, se discutirán detalles sobre el MSP430G2553. Otros dispositivos MSP430 también tienen la estructura PinOsc GPIO, así que asegúrese de hacer referencia a la hoja de datos del dispositivo apropiado para obtener detalles exactos del caso de uso. Elementos del sensor PinOsc El primer componente interface160 del sistema es el sensor. Al usar la función PinOsc de la familia MSP430, notará varias características importantes. No se requieren componentes discretos externos. Como se muestra en la Figura 1, cada elemento sensor está independientemente conectado a cualquier pinOsc GPIO pin (en el MSP430G2553, todos los 24 GPIOs tienen la capacidad PinOsc). Existe un alto grado de flexibilidad en la forma y tamaño del elemento sensor junto con la configuración del sensor. Tenga en cuenta aquí que la definición de un sensor es la implementación funcional de la sensación táctil capacitiva deseada y puede incluir uno o más elementos individuales. Un sensor podría ser un botón de elemento único o un control deslizante o rueda de elementos múltiples. Un sensor también podría ser un solo elemento utilizado para la detección de proximidad o una estructura de matrices para un teclado o incluso un trackpad.160 A continuación se presentan algunos ejemplos de tipos de sensores con los elementos individuales utilizados para crear el sensor. Figura 3. Ejemplos de sensores A pesar de que la estructura del sensor puede parecer diferente, la interfaz GPIO MSP430 para cada elemento sensor permanece igual. PinOsc GPIO (Generación de Frecuencia) Conectado a un sensor externo de 160 °, el PinOsc (Pin Oscillator) GPIO es una estructura muy simple en ciertos dispositivos MSP430 que permite la detección táctil capacitiva de bajo coste sin la necesidad de componentes externos. Cuando la estructura PinOsc está habilitada en el GPIO, la estructura interna combinada con una capacitancia externa del sensor produce un oscilador interno. Esta oscilación está directamente relacionada con la capacitancia del elemento sensor externo. Es esta frecuencia la que se medirá. Figura 4. PinOsc GPIO Bloque Timer0A3 (PinOsc Measurement) Para realizar la medición del sensor, se utiliza el Timer0A3 mostrado en la figura 1602. TA0CLK está conectado internamente al PinOsc y proporciona la fuente de reloj al temporizador. El TAOCLK PinOsc junto con una fuente de baja frecuencia (VLO interna o externa LFXT1) conectada a la entrada de captura TA0CCR0 permite la medición de la frecuencia PinOsc. En este ejemplo, se utiliza el dispositivo MSP430G2553, pero es importante hacer referencia a la hoja de datos del dispositivo apropiado, ya que las conexiones internas y los módulos temporizadores pueden ser diferentes.160 Figura1605. PinOsc Timer0A3 Bloque Timer1A3 (Intervalo de exploración) Para el período de intervalo de exploración, se utiliza un segundo recurso de temporizador en el MSP430G2553. Si bien es posible también reutilizar el mismo módulo Timer0A3, el Timer1A3 mostrado en la Figura 1 mantenido por separado permite el control más fácil para el intervalo periódico de exploración del sensor. Este intervalo ayuda a controlar la velocidad de detección y el consumo de energía del sistema. Figura 6. PinOsc TimerA3 Sensor de Bloqueo Implementación del Software Independientemente del tipo de sensor, existen 3 etapas comunes del proceso de detección capacitiva. El primero es la medición del sensor en sí, el segundo es el procesamiento de la medición, y el tercero es el análisis de los datos. Figura 7. Medición del sensor Medición del diagrama de flujo Medir la frecuencia del PinOsc implica escanear individualmente el elemento Sensor para generar un Raw Count para cada elemento. Este conteo bruto se almacena entonces para cada elemento del sensor. Esta característica es idéntica para cada tipo de sensor. La generación de este conteo bruto se implementa utilizando el elemento sensor PinOsc como fuente de reloj para el Timer0A3 (TA0CTL. TASSEL3PinOsc) 160 y contando durante un período fijo (ciclo de acumulación) controlado por una entrada de captura al Timer0A3 (TA0CCTL0.CCIS1ACLK). El Raw Count160 es la relación de la cuenta de 160 de la frecuencia PinOsc con el Ciclo de Acumulación (controlado por ACLK). Figura 8.160 Diagrama de flujo de medida Medición del proceso Después de que se realiza la etapa de medición, se analizan los elementos del sensor resultantes Raw Data. Varios sub-pasos se describen con más detalle en las secciones siguientes. Los datos crudos se comparan con cada elemento del sensor Valor base (basecnt) para generar un valor Delta Count (deltacnt) .160 Después de generar el valor de deltacnt para cada elemento sensor, se aplica una etapa de filtración (opcional, pero recomendada) .160 Una vez filtrada , Los datos del elemento sensor se comparan con el nivel de umbral de los elementos del sensor.160 Esto determina si un sensor está activo o inactivo.160 Si está inactivo, el ajuste de la línea base puede ocurrir.160 A medida que cambia la capacitancia en cada elemento, también aumenta la frecuencia PinOsc resultante. Es importante recordar que la temperatura y el voltaje también afectarán a la frecuencia de PinOsc, por lo que es necesario ajustar el valor de la línea de base durante el funcionamiento (véase Ajuste de la línea de base y Ajuste de 160). Después de procesar todos los elementos sensores, se devuelve el estado sensor resultante. Figura 9. Diagrama de Flujo de Proceso Analizar Sensor Sensor El análisis de datos puede tomar numerosos significados. Esto podría ser un simple botón decodificar, una posición en un control deslizante o rueda, un cierto tipo de gesto, o algo más. El siguiente es simplemente análisis de los estados individuales de los elementos del sensor definidos por el sensor de presión del parámetro de entrada.160 El valor de la presión del sensor se toma del valor decodificado del estado de los sensores de la función del proceso. Figura 10. Análisis de diagramas de flujo Técnicas de filtrado Antes de continuar con la gestión de la línea de base, es posible que desee examinar nuestros datos de adquisición de Raw.160 Existen muchas aplicaciones que experimentan ruido u otras perturbaciones.160 Estas influencias pueden afectar la fiabilidad de los datos Sin embargo, en muchos casos, un simple filtrado de software puede ayudar a la interpretación de la medición con poco impacto en el rendimiento general del sistema (potencia y velocidad). Normalmente, este paso se lleva a cabo en la etapa de medición del proceso. Los métodos simples son un filtro IIR, filtro de suma y filtro de media móvil acumulativa (Filtro Sumatorio Nominalizado) .160 Si optamos por aprovechar la señal amplificada, podemos descuidar el Filtro CMA. Existen beneficios e inconvenientes para cada método, pero la implementación de ambos puede hacer que la detección de eventos sea más robusta e inmune a las interferencias. Figura 11. Análisis del Diagrama de Flujo Como puede observarse, el Filtro de Sumar (C2SUM) responde más rápido que el Filtro IIR (C2IIR) .160 Sin embargo, para este caso, el Filtro Sumador requiere 4x el requisito de memoria para el deltacntvalue (entero de 16 bits valor). Para un sensor con muchos elementos, los requisitos de la memoria de respuesta a la memoria pueden ser un factor limitante para las soluciones de bajo costo.160 Teniendo esto en cuenta y dependiendo de los requisitos de la ganancia del factor de ponderación de IIR, Configuración y ajuste de la línea de base Al continuar con los componentes de la etapa de proceso, es necesario discutir la línea de base.160160 Una línea de base es simplemente el punto de referencia sin tocar del sistema del que se determina el tacto. Por lo tanto, el valor de referencia (basecnt) para cada elemento de sensor debe ser inicializado y mantenido. El mantenimiento de la línea de base es extremadamente importante de recordar debido al hecho de que el sistema está impactado por fuerzas externas (temperatura, humedad, humedad) así como parámetros del sistema (voltaje) .160 Estos factores160 pueden hacer que la referencia intacta160base lineal160 deriva. Si no se tiene en cuenta esta deriva, pueden producirse errores con efectos imprevistos. Por lo tanto, como parte de la etapa de Proceso, también tiene lugar el ajuste de la línea de base (basecnt). Para la detección capacitiva del tacto, existen tres condiciones de error clave que pueden verse afectadas por el ajuste de la línea de base. 1) Falso Positivos - Cuando un elemento sensor se interpreta como activo cuando en realidad no está activo. Los falsos positivos pueden ocurrir por dos razones.160 La primera es que el ruido del sistema ha resultado en una o más mediciones erróneas que corrompen el contenido de los datos.160160 La segunda es que la línea base se ha ajustado erróneamente en un estado en que los datos de medición se interpretan en Un estado inválido.160 Estas dos razones se mitigan con el uso del PinOsc (construido en el filtrado de hardware debido a la técnica de medición) y el manejo apropiado de la línea de base. Cuando un elemento de sensor se interpreta como activo permanece bloqueado en el estado activo debido a la corrupción de la balena. Los Positivos Bloqueados se relacionan con la segunda razón de los Falso Positivos.160 Cuando la línea de base se modifica erróneamente, las lecturas de mediciones siempre serán Caen dentro de un rango de detección positivo.160 Esto se debe a un manejo deficiente del ajuste de la línea de base y se asocia más a menudo al deseo de realizar un movimiento ascendente muy rápido en la línea de base debido a un gran valor negativo detectado.160 Si se aplica el dithering de línea de base , Los grandes negativos a menudo no se experimentan. 3) Positivos Perdidos - Cuando un elemento sensor no se interpreta como activo cuando en realidad está activo. Los Positivos Perdidos (a veces llamados Finger Creep) ocurren cuando el ajuste de la línea de base destinado a compensar las condiciones ambientales se aplica a la presencia de un dedo humano.160 Si se produce una aproximación muy lenta al elemento sensor, entonces esto puede ser confundido Cambia a la capacitancia de los elementos del sensor.160 Esto hace que se produzca el ajuste de la línea base y rastree el movimiento del dedo más cerca del elemento sensor.160 Cuando el dedo está en contacto con el elemento sensor, la línea de base está al mismo nivel que la medida Tenga en cuenta que los Positivos Perdidos suelen involucrar dos parámetros (velocidad de escaneo de los elementos sensores y técnica de ajuste de la línea de base). 160 Usando algunas técnicas simples, los Positivos Perdidos pueden ser fácilmente evitados. Umbrales de los elementos del sensor Antes de concluir el MSP430 Low Cost PinOsc Capacitive Touch Resumen, una última dirección de punto 160 es la configuración de los umbrales de los elementos del sensor. Cuando se realiza la interpretación de datos, es importante tener en cuenta que para un elemento de sensor dado, el valor de delta (basecnt - meascnt para el método PinOsc) es160 se compara con un umbral específico.160 Esto plantea la pregunta Cómo se determina el elemento de sensor deseado Límites de umbral La respuesta simple es medirlo. La mejor respuesta es tener su proceso de medición automatizado.160 A continuación se muestra una herramienta de ejemplo para ayudar a medir el valor máximo de deltacnt para cada elemento de sensor. Como puede ver, las barras negras muestran el valor de deltacnt relativo con la lectura máxima real mostrada. Dado que se trata de la lectura MAX160, normalmente se debe utilizar algún nivel por debajo de este punto para establecer el límite de umbral de detección.160 En el ejemplo del teclado táctil capacitivo PinOsc MSP430 Low Cost, estos valores son160saved to160a160boardxxx. h include file en la carpeta CapTouchLib y referenciados por el Structure. c Element construct.160160Cada sensor element160define xxxMAXVALUE160is160applied160to160thethresholdcal. Thresholdsense y. maxResponse. En la estructura. c, para cada elemento sensor (const struct Element type), estos niveles se establecen de la siguiente manera: thresholdcal 0.1160 xxxMAXVALUE (o 10 del nivel xxxMAXVALUE) al que se produce el ajuste de la línea base del elemento sensor debido a la desviación de la temperatura. Thresholdsense160 0.3 xxxMAXVALUE (o 30 del nivel xxxMAXVALUE) por encima del cual se detecta el elemento sensor como activo. Estos niveles se pueden cambiar si se desea. ReferenciasTag: MSP430 Me alegro de anunciar que finalmente he hecho algunos progresos en el uso de FreeRTOS En este post Ill escribir acerca de cómo modificar el código de ejemplo para MSP430F5438, que es una placa de evaluación con abundantes periféricos, para trabajar en MSP430F5529, que es un popular Launchpad bordo. Primero, la enfermedad habla sobre cómo funcionar el mundo del Hello usando FreeRTOS, que es un programa simple del LED que destella. Entonces malo actualiza el código usado en mi proyecto del sensor y lo hace funcionar en FreeRTOS. Continuar leyendo 8220Running FreeRTOS en Launchpad MSP430F55298221 1.Introducción En este proyecto, se desarrolló un firmware para adquirir datos de varios sensores, incluyendo MPU9150, BMP180, SHT21, SIL29023 y TMP006.Un protocolo de interfaz I2C simple fue desarrollado para comunicarse con sensores. Filtración de algoritmos se aplican para eliminar el ruido del sensor, incluyendo el filtro de media móvil, el filtro de valor mediano, FIR filtro de paso bajo. El ángulo del dispositivo se calculó utilizando atan (arco tangente) la función y la fusión de datos de giroscopio y accelerometer. An Interfaz de usuario consistió en interruptores, Y la salida del texto de la PC fue construida para evaluar diversos sensores y cambiar entre el modo de la energía baja y el modo de trabajo. Finalmente todos los datos crudos del sensor y datos filtrados fueron enviados a la PC con UART y trazado en tiempo real. Seguir leyendo 8220Evaluating Hub Sensor con Launchpad MSP4308221 Recent Posts Archivos Categorías

No comments:

Post a Comment