Proyecto Sisem: Detector de Eventos en Tiempo Real en 8 ... · senales~ en la plataforma launchpad...

73
Proyecto Sisem: Detector de Eventos en Tiempo Real en 8 canales 21 de junio de 2018 Estudiantes integrantes Mart´ ın Beiro , C.I: 5.101.639-3, Contacto: Cel. 099017984, E-mail: [email protected] Maximiliano C´ ardenas, C.I: 5.317.589-6 Contacto: Cel. 099757556, E-mail: [email protected] Leo Reyes C.I: 4.857.854-2 Contacto: Cel. 099051857, E-mail: [email protected] Tutor Dr. Ing.Leonardo Barboni, Asistente G3/RDT, Dpto. de Electr´ onica, IIE 1

Transcript of Proyecto Sisem: Detector de Eventos en Tiempo Real en 8 ... · senales~ en la plataforma launchpad...

  • Proyecto Sisem: Detector de Eventos en Tiempo Real

    en 8 canales

    21 de junio de 2018

    Estudiantes integrantes

    Mart́ın Beiro , C.I: 5.101.639-3,Contacto: Cel. 099017984, E-mail: [email protected]

    Maximiliano Cárdenas, C.I: 5.317.589-6Contacto: Cel. 099757556, E-mail: [email protected]

    Leo Reyes C.I: 4.857.854-2Contacto: Cel. 099051857, E-mail: [email protected]

    Tutor

    Dr. Ing.Leonardo Barboni, Asistente G3/RDT, Dpto. de Electrónica, IIE

    1

  • 1. Resumen

    Como proyecto de la materia Sistemas Embebidos para Tiempo Real se implementó un detector deeventos en tiempo real de 8 canales. Este utilizó la plataforma MSP432 de Texas Instruments, con elCode Composer Studio (CCS) como IDE. El dispositivo muestrea mediante el ADC14 del dispositivo los8 canales, para luego procesarlos mediante un filtro matcheado con el fin de detectar un evento espećıfico.El tiempo transcurrido entre la ocurrencia de el evento y la detección del mismo es de a lo sumo 10 ms.Como interfaz de usuario se desarrolló un script en Matlab que permite la selección del filtro, el iniciodel estudio y el despliegue de los resultados.La documentación contiene el proceso de diseño e implementación del detector. Además se incluyen laspruebas del sistema, y análisis de tiempos, crucial para un dispositivo de estas caracteŕısticas.

    2

  • Índice

    1. Resumen 2

    2. Introducción 42.1. Descripción del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    3. Objetivos 4

    4. Alcance 4

    5. Diseño 55.1. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55.2. Etapa de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    5.2.1. Plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75.3. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    5.3.1. Descripción funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75.3.2. Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75.3.3. Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    6. Implementación 96.1. Funcionamiento general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96.2. Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106.3. Adquisición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106.4. Unidad de Punto Flotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.5. Marcadores de detección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.6. Comunicación UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126.7. Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.8. Interfaz de Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146.9. Problemas Encontrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    6.9.1. Versión de la placa MSP432P401R . . . . . . . . . . . . . . . . . . . . . . . . . . . 166.9.2. Frecuencia de Muestreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166.9.3. Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166.9.4. Velocidad de la UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166.9.5. Decimación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    7. Estudio de tiempos 167.1. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167.2. Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167.3. Tiempo de Respuesta Teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    8. Pruebas 198.1. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    9. Conclusiones 22

    10.Anexo 2310.1. Conceptos del Curso Aplicados en el Proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 2310.2. Especificación del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2310.3. Planificación del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2910.4. Archivos entregados: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    10.4.1. Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2910.4.2. Documentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2910.4.3. Doxygen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    3

  • 2. Introducción

    2.1. Descripción del problema

    En el proyecto de fin de carrera ESPiDD (’Epilepsy Spike Detection Device’) se debe implementar unsistema de detección de espigas epilépticas en tiempo real (se le llama espiga a la onda epileptoforme).

    En el marco de este proyecto, se buscó evaluar un algoritmo sencillo de detección de señales en tiemporeal y su implementación en un microprocesador MSP432 de Texas Instruments. Para esto, se debiódesarrollar un sistema que realice la adquisición de 8 canales analógicos, y que notifique en un tiempomenor a 10ms el hallazgo de la señal de interés (evento) enviando posteriormente los resultados, señaladquirida y eventos detectados, a una PC.

    Considerando su fácil generación, se definió como evento de interés el semi-ciclo creciente de una señalsinusoidal de una frecuencia determinada. Debido a su orientación a señales biológicas, se acotaron lasfrecuencias de interés a la banda 10Hz − 50Hz.

    3. Objetivos

    El objetivo del presente proyecto es la implementación de un sistema de adquisición y detección deseñales en la plataforma launchpad MSP432P401r de Texas Instruments. El mismo debe ser capaz dedetectar semi-ciclos crecientes de una señal sinusoidal de entre 10Hz y 50Hz, dar aviso de la detecciónde un evento en un tiempo menor a 10ms y enviar los resultados a una PC para su evaluación.

    Adicionalmente, se deberá realizar un estudio detallado de los tiempos implicados en toda la cadenade procesamiento y se evaluará la utilidad de la unidad de operaciones en punto flotante presente en elMSP432.

    4. Alcance

    Se deberá adquirir 8 canales mediante el ADC de 14 bits presente en el MSP432. Aplicando el algoritmode detección a los 8 canales en paralelo y dando aviso mediante uno de los pines del micro al detectar unevento, dentro de los requerimientos de tiempo especificados.

    Se deberá implementar la comunicación UART con el PC utilizando como interfaz gráfica ”MATLAB”.Se dispondrá de diferentes comandos para iniciar el estudio, configurar los parámetros del mismo (señala identificar, largo del filtro a utilizar, etc.) y recibir resultados. Los resultados incluyen tanto las señalesadquiridas como los marcadores (markers) de señalización en los puntos donde se detecto la señal deinterés.

    Realizar el estudio de tiempos completo, caracterizando los tiempos implicados en cada una de lasetapas y proponiendo soluciones que permitan aumentar el tamaño del filtro de detección.

    También se deberá utilizar la unidad de punto flotante para las operaciones del algoritmo, realizandouna evaluación de su utilidad.

    4

  • 5. Diseño

    El sistema a diseñar se puede dividir en los siguientes bloques:

    1. Etapa de entrada analógica: Circuito de entrada, previo al ADC del microcontrolador. Hardwareadicional del proyecto.

    2. Adquisición y conversión: Compuesta principalmente por el modulo de ADC, es la etapa dondese adquieren las muestras de los 8 canales y se convierten las mismas a valores de voltaje en puntoflotante.

    3. Algoritmo de detección: Donde se filtran las muestras y se señaliza al encontrar la señal de interés.

    4. Modulo de comunicación:Se realizará la comunicación mediante la UART con la PC. En estemodulo se realiza la interpretación de comandos desde la PC y el env́ıo de los resultados.

    Dicha estructura se encuentra representada en la figura 1, en el diagrama de bloques del sistema.

    A/DGenerador

    de señales

    Algoritmo

    de detección

    Conversión PC

    uC

    Bu�er y Filtros

    An�-Aliasing

    Osciloscopio marker

    marker

    UART

    Figura 1: Diagrama de bloques del sistema

    El estudio se divide en dos etapas principales. Una primer etapa de reconocimiento, en la cual elusuario deberá identificar la señal de interés y una segunda etapa en la cual se realiza la detección, conla señal previamente determinada. Más adelante en esta sección se analizará el algoritmo utilizado parala detección y se evidenciara la necesidad de la etapa de reconocimiento.

    El funcionamiento del sistema pueden dividirse en dos grandes etapas. En la primera etapa ’preestudio’el usuario elige el evento que desea detectar en el estudio. Luego de ser seleccionado el evento y cargadoen memoria el dispositivo estará en condiciones de comenzar la segunda etapa, el ’estudio’. En esta etapase relevan los 8 canales y se env́ıan las muestras y los markers continuamente.

    5.1. Hardware

    El hardware utilizado para el proyecto consta de dos secciones principales, la plataforma utilizadapara el desarrollo y la etapa de entrada para las señales analógicas. A continuación se detallan lasconsideraciones para el diseño.

    5.2. Etapa de entrada

    Debido a que el sistema de detección está orientado a señales biológicas, se tuvieron en cuentaalgunos criterios para la etapa de adquisición de las señales. Por un lado, no se contemplo una etapade amplificación. Se consideró que la definición del ADC incluido en el micro, del orden de 0,2mVutilizando la referencia interna, era suficiente para el alcance del proyecto. Está definición no permitiŕıavisualizar espigas de epilepsia (de decenas de uV de amplitud), pero si otras señales biológicas como lascard́ıacas. Sin embargo, śı se consideró un buffer de entrada, de forma de no cargar el generador de laseñal, aśı como se tuvieron algunas consideraciones con respecto al ruido.

    5

  • Cabe destacar que la etapa de entrada no consist́ıa en uno de los objetivos fundamentales del proyecto,por lo que no se implementó mas que un prototipo de prueba.

    Se diseño la etapa de entrada que puede verse en la figura 2 con el objetivo de no cargar el circuitogenerador de señales y el ruido por fuera de la banda de frecuencias de interés. Esta etapa está compuestapor un amplificador operacional en configuración de seguidor que actúa como buffer y un filtro R-C pasa-bajos de primer orden.

    Figura 2: Etapa de entrada

    En una primer etapa de diseño se estudió la implementación de la misma con el filtro pasa-bajos antesdel buffer. Esta configuración fue descartada teniendo en cuenta que la configuración elegida presenta unamayor impedancia de entrada (impedancia de entrada del amplificador operacional).A su vez, filtrandoantes del buffer el amplificador podŕıa generar en su salida ruido a frecuencias por fuera de la frecuenciade corte debido a las no idealidades del mismo, con esta configuración este ruido también se ve limitado.

    En cuanto a la elección del valor de los componentes se tuvieron en cuenta los siguientes criterios:

    R > Cosciloscopio

    fcorte >> 50Hz

    Los primeros dos criterios corresponden a que el osciloscopio no influya en las medidas a realizar y elúltimo establece la frecuencia de corte del filtro al menos una década después de la mayor frecuencia enla banda de interés (10-50Hz).

    Utilizando como criterio que una relación de () equivale a un factor de 10 y los valores t́ıpicosde la resistencia y capacitancia de entrada del osciloscipio son Rosciloscopio = 1MΩ, Cosciloscopio = 12pFrespectivamente, entonces se eligió:

    R = 6,8kΩ

    C = 47nF

    fcorte = 498Hz

    Amp.Op LM358N (elección basada en la disponibilidad del mismo)

    Para finalizar se implementó el circuito en un protoboard y se comprobó el correcto funcionamientodel mismo. La frecuencia de muestreo obtenida experimentalmente fue de fcorte = 522Hz por lo que elbuffer funcionará de acuerdo a lo esperado.

    6

  • 5.2.1. Plataforma

    La plataforma hardware utilizada para el desarrollo del proyecto es un launchpad MSP432P401R deTexas Instrument. A continuación se presentan algunas de las caracteŕısticas y funcionalidades principales:

    48 MHz 32-bit ARM Cortex M4F

    Floating point unit (FPU)

    ADC de 14 bits

    Memoria: 256KB flash y 64KB de RAM

    Consumo: 80uA/MHz en modo activo, 660nA en standby operation

    Se realizó la elección de la plataforma en base a la capacidad de procesamiento,mayor que la delMSP430 utilizado en los laboratorios, y la unidad de punto flotante, cuyo estudio y evaluación es uno delos objetivos de este proyecto.

    5.3. Software

    5.3.1. Descripción funcional

    El estudio se divide en dos etapas principales. Una primer etapa de reconocimiento, en la cual sedeberá identificar la señal de interés y una segunda etapa en la cual se realiza la detección, con la señalpreviamente determinada.

    Por lo tanto, el software debe ser capaz de distinguir dos modos de funcionamiento, diferenciando elprocesamiento que se realiza a las muestras del ADC en cada uno de ellos.

    5.3.2. Arquitectura

    Para el proyecto se utilizó la arquitectura Round Robin con interrupciones. Se definió esta arquitecturafrente a encolado de funciones principalmente debido a la simplicidad en la implementación de la misma,sobre todo considerando que no se obteńıan ventajas significativas en la utilización de la segunda.

    Las interrupciones a atender son las siguientes:

    ADC: Que interrumpe al terminar una conversión completa de los 8 canales. Luego de la ISR sedebe iniciar el procesamiento de las muestras, este procesamiento dependerá en que etapa del estudio seencuentra.

    UART: De transmisión y recepción. Las primeras no implican procesamiento posterior a la ISR ya quesolo env́ıan los datos previamente cargados en el buffer. Las segundas corresponden a la recepción delos comandos enviados desde la PC, por lo que luego de recibido un comando completo se debe ingresarinterpretar y realizar las acciones correspondientes.

    5.3.3. Algoritmo

    El algoritmo se basa en la utilización de un filtro de correlación (también conocido como filtromatcheado).Dicho filtro es un sistema lineal invariante cuya salida es la correlación de la señal de entrada con ciertaseñal predefinida. En la figura 3 se puede ver su implementación . Entre sus caracteŕısticas principales setiene: la excelente respuesta ante ruido AWGN, su simplicidad matemática por ser resultado de sumasy multiplicaciones y la baja cantidad de operaciones que conlleva. Este consiste en realizar el productoescalar entre la señal buscada y el vector donde se busca dicha señal. Por estas caracteŕısticas, se decidióutilizarlo para el proyecto. Nótese que si bien en este proyecto se trabajará con sinusoides el filtro esversátil y puede adaptarse para trabajar con cualquier tipo de señales.

    7

  • Figura 3: Filtro de Correlación

    El filtro requiere saber de antemano p(t) que es el evento a detectar (Ver figura 3). Por ello es necesariotomar una ventana de muestras inicial para buscar en ella el evento a detecta previo a realizar el estudio.

    Una vez obtenido p(t), al que llamaremos el filtro, es necesario compararlo con el valor esperado. Elvalor esperado es el valor de la salida del filtro cuando a la entrada se tiene p(t). A partir de este valorse define una tolerancia porcentual con respecto a al mismo. Por lo que se establece una cota superior yuna inferior alrededor del valor calculado. Siempre que el resultado del filtro caiga en el intervalo definidopor estas cotas, se interpretará que se encontró el evento buscado y señalizará esto mediante un marker.

    Mediante una evaluación práctica del filtro, utilizando MATLAB como herramienta, se verificó elfuncionamiento del algoritmo. Se determinó que era necesario aproximadamente 10 veces más muestrasque las determinadas por el teorema de Nyquist para un funcionamiento aceptable, es decir, se requiereuna frecuencia de muestreo 20 veces mayor que el ancho de banda de la señal a detectar. A continuaciónse puede observar el funcionamiento del filtro implementado en MATLAB (figura 4).

    Figura 4: Algoritmo de detección basado en filtro de correlación

    8

  • 6. Implementación

    6.1. Funcionamiento general

    En primer lugar se definió un diagrama de estados del sistema, definiendo cada una de las partes delestudio.

    Como fue explicado en secciones anteriores, el estudio consta de dos etapas, una etapa inicial dereconocimiento y una segunda etapa de detección. En este punto la consideración principal fue no ingresara la detección si no se tiene la señal de interés previamente cargada en el filtro. Para esto se implementó

    una bandera de señalización de coeficientes listos (ćoef ready)́. En la figura 5 se puede observar el diagramade estados del sistema.

    Figura 5: Diagrama de estados del sistema

    Luego de realizadas las configuraciones iniciales, el dispositivo se va a un estado de bajo consumo,en el cual espera por comandos desde la PC. En una primera instancia solo se admiten los comandos decaptura de la ventana inicial de muestras (mediante la bandera de coeficientes listos) y de recepción delfiltro. Con estos comandos se permite al usuario, mediante la interfaz de MATLAB, seleccionar la señalde interés a partir de la ventana recibida y cargarla en el micro-controlador.

    Luego de recibir el filtro enviado desde la PC, se alcanza otro estado de espera en el cual śı es válidoiniciar un estudio. A partir de este momento se habilitan todos los comandos, permitiendo realizar unaserie indefinida de estudios y realizar cambios en el filtro de ser necesario.

    9

  • Cabe destacar que aunque no figura en el diagrama de estados, en cualquiera de los estados de espera sepuede solicitar el filtro cargado en memoria desde la PC. Esta funcionalidad no se incluyo en el diagramade estados debido a que no se considero fundamental para la comprensión del funcionamiento del sistema,pero si como una herramienta útil de verificación.

    6.2. Arquitectura

    Como fue mencionado anteriormente en la sección de Diseño, se utilizó como arquitectura de softwareRound Robin con interrupciones, siendo las interrupciones principales las de la Uart y el ADC.

    Se implementó una capa de abstracción de hardware (ver figura ??, de forma de independizar el restode los módulos del hardware utilizado. Esto consistió principalmente en la generación de módulos para elADC y Uart, dejando accesibles por el usuario funciones y estructuras generales. De esta manera resultasencillo realizar modificaciones al sistema tanto en la forma de adquisición, por ejemplo obteniendo lasmuestras a partir de una comunicación con otro chip, como en la comunicación (por ejemplo si se quisierautilizar comuniación WiFi), siempre que se generen funciones análogas a las anteriores.

    MAIN (ROUND ROBIN)

    MÓDULO

    COMANDOSMÓDULO

    ADQUISICIÓN MÓDULO

    DETECCIÓN

    ADCUART

    CAPA DEPENDIENTE DE HARDWARE

    Figura 6: Diagrama de módulos del sistema

    El sistema implementado consistió principalmente en los siguientes módulos (ver figura 6). Un módulode comandos, encargado de la interpretación y ejecución de los comandos recibidos desde la PC medianteel modulo UART. Un módulo de adquisición y conversión de las muestras, encargado de realizar laadquisición de los datos convertidos por el modulo ADC para los diferentes estudios, y realizar la posteriorconversión a punto flotante. Por último un módulo de detección, encargado del filtrado y marcado de lasmuestras (detección de la señal de interés).

    6.3. Adquisición

    La adquisición de las muestras se realizó mediante el ADC de 14 bits del MSP432. Se realizó laconfiguración del mismo de modo que se realice una conversión de muestras completa (una muestra decada cada canal), interrumpiendo al finalizar la conversión de la última.

    Se utilizó como t́riggerd́el ADC el timer A del micro-controlador, siendo este último el encargado dedeterminar la frecuencia de muestreo del ADC. Esto permite realizar cambios de forma sencilla en lafrecuencia de muestreo, únicamente cambiando los divisores del timer.

    Considerando que se requiere una frecuencia de muestreo 10 veces por encima de la frecuencia deNyquist (para el correcto funcionamiento del algoritmo) y que se espera adquirir señales de hasta 50Hzse determino la frecuencia de muestreo en 1kHz.

    10

  • 6.4. Unidad de Punto Flotante

    En este proyecto no es realmente necesario trabajar con números en punto flotante porque los valoresconvertidos por el ADC son enteros y el filtro utiliza unicamente los valores de las muestras, por loque todos los valores podŕıan ser enteros. Sin embargo trabajar con la unidad de punto flotante fue unrequerimiento inicial para el proyecto. No se midió los tiempos de operación con y sin la FPU para podercompararlos, pero śı se pudieron obtener las siguientes ventajas y desventajas de usar la FPU a partir desu uso y la documentación consultada.

    Ventajas

    Mayor velocidad a la hora de efectuar operaciones matemáticas como divisiones o multiplicaciones.

    No es necesario prever un posible overflow que puede darse fácilmente con operaciones entre enteros.

    Desventajas

    Se necesita mas memoria para almacenar un float que un int.

    Se requiere mas tiempo para enviar un float por la UART que un int porque el float ocupa 2 bytesmas.

    Al trabajar con floats se sacrifica memoria y velocidad de env́ıo para ganar velocidad a la hora derealizar los cálculos.

    6.5. Marcadores de detección

    Luego de realizado el filtrado y detección de la señal de interés sobre las muestras adquiridas, se debióimplementar un sistema de marcado para indicar los puntos de detección. A continuación se describedicho sistema.

    Almacenado

    Los markers son representados por un bit, indicándose mediante un 1 el encuentro de la señal deinteres. Con el fin de ahorrar memoria se guardaron todos los markers en un char, siendo esta estructuramuy conveniente considerando que la cantidad canales utilizados en el proyecto coincide con el númerode bits (8).

    Operaciones

    Acumular Markers:

    Como se explicara en las siguientes secciones, para enviar los datos se debió decimarlos. En esteproceso, se buscó no perder la información de los markers anteriores e incorporarla en el marker a enviar.Con el fin de ahorrar tiempo de procesamiento se llegó a que la mejor solución implicaba realizar un ORlógico con los markers no enviados, ŕeseteandoél marker una vez terminada la decimación. De esta formase almacenan los 1s presentes en el char (en el lugar del canal correspondiente), y se resetea el acumuladoruna vez enviado el marker final.

    markeri = markeri−1||markeractual (1)

    Marcar solo una coincidencia:

    Debido naturaleza del filtro, él mismo puede dar coincidencia de que se encontró un evento en variasmuestras cercanas. Este comportamiento es indeseado en nuestro caso ya que se buscaba indicar lacoincidencia una sola de vez por detección. Por simplicidad se decidió marcar solo la primer muestra enla que se encontró la coincidencia.

    11

  • Siguiendo con el razonamiento de emplear la menor cantidad de tiempo en estas operaciones, resolvimosel problema utilizando operadores lógicos.Se busco que si el marker anterior tenia un 1 en un bit y elnuevo marker también, ese bit no sea de vuelta marcado en 1. Es decir, no se vuelve a detectar la señal deinterés hasta que no salga del umbral de detección. Razonando el comportamiento esperado para todoslos casos posibles obtenemos la siguiente tabla de verdad:

    Figura 7: Tabla de Verdad

    Donde A es el markeri−1, la B es el markeractual y Y es markeri.Por lo que la solución que buscamos es:

    markeri =!markeri−1&&markeractual (2)

    6.6. Comunicación UART

    El sistema fue implementado para recibir comandos desde una PC mediante la Uart. Para la recepcióny env́ıo de los comandos se implemento una interfaz de MATLAB, que será explicada más adelante.

    La UART fue configurada con una tasa de 115200 baudios y un bit de stop. El seteo de los divisorespara tener la velocidad deseada se realizó siguiendo las recomendaciones del fabricante, corroborando queesta velocidad fuera soportada por la plataforma.

    La transmisión y recepción de los bytes se realizó mediante interrupciones de la Uart, siendo lasrutinas de interrupción de RX y TX son muy similares a las empleadas en los laboratorios anteriores delcurso. Ambas cuentan con buffers independientes para enviar o recibir.

    La rutina de recepción carga los caracteres recibidos en un buffer de recepción y levanta una banderasi encuentra un carácter de fin de linea para simbolizar que tiene un dato completo.

    La rutina de transmisión env́ıa los datos previamente cargados en un buffer de transmisión byte a bytehasta enviar un carácter de fin de linea. Una vez enviado baja la bandera de transmisión para simbolizarque terminó de enviar un dato.

    Formato de los datos:

    Una posibilidad para transmitir los datos es convertir los mismos a caracteres ASCII que puedanser léıdos desde una terminal. Esto tiene la ventaja que se pueden interpretar los bytes sin previamenteconocer el formato previo a la conversión. Sin embargo esta implementación tiene dos grandes desventajas.Por un lado se consume más tiempo de procesamiento en convertir los datos a ćharq́ue enviandolos ensu formato original. Por otro, para mantener la precisión de los datos se requiere enviar más bytes deinformación que si se enviara en el formato original (uno por cada char). Por esta razón optamos porenviar los datos sin convertir, es decir que el receptor los tiene que interpretar sabiendo previamente loque va a recibir.

    Por lo tanto, se definió un formato de comunicación con el PC conociendo previamente que tipos dedatos se env́ıan en cada etapa del estudio. Para simbolizar el fin de cada segmento de la comunicación seutilizó el carácter de fin de linea.

    12

  • Funciones de cargado en los buffers de envió y recepción:

    Para esta comunicación, y con el fin de implementar una buena capa de abstracción de hardware, seimplementaron funciones para enviar o recibir los distintos tipos de datos.

    En el caso de las funciones de transmisión, se implemento un buffer interno al bloque de comunicación,al cual se le cargan los datos a enviar mediante funciones. De esta manera se evito que los programasusuarios de este módulo realicen modificaciones no deseadas a los datos previamente cargados.

    Envió de los Datos durante el Estudio:

    Durante la ejecución del estudio se guardan en el buffer las muestras tipo f́loatd́e los 8 canalesordenadas del 1 a 8, luego el carácter que contiene los markers y por ultimo un caracter de fin delinea. Estos datos no son enviados hasta no ingresar todos al buffer.

    6.7. Código

    A continuación se describen los archivos de código desarrollados para la implementación del proyecto.Cada sub-sección corresponde a un archivo fuente del código.

    Algoritmo de detección

    Con el fin de implementar la detección de la señal, se escribió un código en el lenguaje C implementandoel algoritmo basado en el filtro de correlación presentado en la sección ”Diseño”.

    El código esta modularizado, en en esta sección se describirá la función de dichos módulos.

    FILTRADO:

    El módulo filtro se encarga de la inicialización del filtro de correlación,el filtrado y marcado de lasmuestras. En el encabezado se define una estructura de filtro, que contiene un puntero a una cola circular,los coeficientes del filtro y un ı́ndice que simboliza cual es la muestra más nueva. El módulo contiene unafunción de inicialización, la cual carga los punteros necesarios en la estructura y comienza el ı́ndice en cero.

    La función de filtrado recibe una nueva muestra, la agrega a la cola y realiza la multiplicación entrela cola y los coeficientes del filtro. Devolviendo un float con el resultado.

    Por último la función de marcado toma un valor y verifica si está en cierto entorno de un umbralesperado, dicho entorno se define como una variable del sistema, por lo que es posible ajustarla en tiempode compilación para obtener mejores resultados.

    La función principal encargada de filtrar las muestras recibe las muestras de los 8 canales y realiza elfiltrado de cada uno de ellos mediante las funciones del módulo anteriormente explicadas. La informaciónde los markers de evento se devuelve en los bits de un char. A modo de ejemplo, un binario 01000000indica la presencia de la señal de interés en el canal 7.

    Encolado:

    Este módulo es el encargado de el manejo de nuevas muestras. Contiene la función de implementaciónde un buffer circular, donde se le ingresa la estructura de filtro y agrega la muestra en el próximo lugarde la cola, incrementando el ı́ndice que indica el valor más nuevo en el proceso.

    13

  • ADC

    En este módulo se encuentran las funciones necesarias para la adquisición de muestras mediante elADC del MSP432.

    Contiene funciones de configuración, de inicio y fin de la conversión, ademas de las rutinas de atencióna la interrupción tanto del timer (que determina la frecuencia de muestreo) como del ADC. Se señalizael fin de una conversión completa mediante una bandera de ”data ready”.

    UART

    Es el módulo encargado de la implementación de la comunicación UARt. Contiene funciones de env́ıoy recepción de los diferentes tipo de datos: char, int , float y string. Contiene un buffer de transmisióninterno al módulo, donde se cargan los datos a enviar, y un buffer de recepción donde se entregan losdatos recibidos.

    En el caso de la transmisión permite definir si el dato enviado se trata del último, enviando un carácterde fin de linea en caso de serlo.

    COMANDOS

    En comandos.c se detallan las funciones para enviar las muestras del estudio o discernir que comandose envió desde la PC y tomar las acciones pertinentes.

    Las funciones de acceso publico del modulo son las siguientes:

    Transmitir muestra inicial: Se encarga de enviar una ventana inicial del estudio para poder elegirel evento a detectar junto con un pequeño encabezado que detalla la frecuencia de muestreo, la cantidadde canales y el tamaño de la ventana.

    Enviar resultados: Es la encargada de enviar las muestras y los markers del estudio por la UART.A su vez recibe el valor de DOWNSAMPLING para enviar una de cada DOWNSAMPLING muestrasconservando la información de los markers que no fueron enviados.

    Recibir Comandos: Se encarga de discernir que comando fue recibido y ejecuta la acción quecorresponda. Los comandos a recibir son:

    CN: Env́ıa la palabra conectado para simbolizar que la conexión se ejecuto correctamente.

    SW: Inicia la captura y el envió de la ventana inicial dejando la bandera start coef=1.

    CS: Env́ıa a la PC los coeficientes cargados en memoria

    CF: Recibe el filtro para cargar en memoria.

    ES: Comienza el estudio propiamente dicho, muestreando la entrada y filtrando las mismas. Cambiendeja la bandera start=1.

    6.8. Interfaz de Usuario

    Mediante un script de Matlab se permite interactuar al usuario con el dispositivo, comunicando unaPC con la placa por UART. Se detallará brevemente la funcionalidad de cada opción del menú gráfico,correspondida con los comandos de la sección 6.7

    14

  • Figura 8: Menu Principal

    Configurar COM

    Configura e inicia la comunicación serial a 115200 baudios con el microcontrolador, despliega en laterminar un mensaje si logra una conexión exitosa.

    Iniciar Muestreo del Filtro

    Env́ıa el comando correspondiente para el inicio de muestreo de la ventana inicial de uno de loscanales, luego espera a recibir dichas muestras. Una vez que las recibe, las despliega en pantalla y permitela selección automática del evento a utilizar como filtro o permite la selección manual. Para seleccionarmanualmente el evento el usuario solo debe seleccionar el punto inicial y el final del evento.

    Enviar Datos del Filtro

    Env́ıa los coeficientes seleccionados en el elemento anterior del menú, precedidos por el comandocorrespondiente.

    Recibir Filtro

    Realiza un pedido de coeficientes al microcontrolador y los despliega en pantalla.Permite verificar elfiltro que se encuentra cargado en memoria del dispositivo.

    Iniciar Estudio

    Inicia el estudio mediante el comando correspondiente, para luego desplegar las muestras recibidas delos 8 canales, junto con los marcadores correspondientes. El estudio termina cuando el ADC muestreauna cantidad fija de muestras. Este parámetro es configurable desde el código del microcontrolador.

    Salir

    Finaliza la comunicación con la placa.

    6.9. Problemas Encontrados

    En esta sección se detallan los problemas encontrados a lo largo del proyecto y las soluciones a losmismos.

    15

  • 6.9.1. Versión de la placa MSP432P401R

    En un comienzo se nos brindó el launchpad msp432 negro. El mismo se encuentra obsoleto y nose logró utilizarlo con ningunde de los IDEs actuales, tanto IAR como CCS. La única solución que seencontró fue cambiar de launchpad a la versión Roja que es más actual. Este problema retrasó unos d́ıasel proyecto.

    6.9.2. Frecuencia de Muestreo

    Se encontró que para el correcto funcionamiento del filtro se debe utilizar una frecuencia mayor que lade Nyquist. Tomamos como criterio una frecuencia de muestreo 10 veces mayor que la de Nyquist, luegode realizada una evaluación en MATLAB.

    6.9.3. Memoria

    En un comienzo se pensaba almacenar todos los datos en la memoria del microprocesador,pero alaumentar la frecuencia de muestreo y al usar las muestras en punto flotante se hizo necesario utilizarmás memoria que la calculada inicialmente para guardar el estudio. Se decidió no guardar en memoria yenviar todos los datos por la UART.

    6.9.4. Velocidad de la UART

    En un comienzo se configuró la UART a 9600 baudios (al igual que en los laboratorios del curso).Luegode realizar un calculo de los tiempos implicados en el env́ıo de la información, se llego a que se consumı́ademasiado tiempo,por lo que se decidió aumentar la velocidad de la misma a 11520 baudios.

    6.9.5. Decimación

    Aumentar la velocidad de la UART no fue suficiente para enviar toda la información entre intervencionesdel ADC por lo que se decidió decimar las muestras sin perder la información de los markers. Para decimarse env́ıa una muestra de cada N, conservando la información previa de los markers (la decimación noresulta en perdida de eventos detectados).

    7. Estudio de tiempos

    Este estudio es fundamental en el proyecto debido a que es critico el cumplimiento con el requerimientode tiempos. En esta sección se detalla el procedimiento empleado para medir los ciclos empleados en cadaparte del código aśı como el análisis del estudio.

    7.1. Procedimiento

    Para medir los ciclos empleados en cada función se utilizo la herramienta Profile Clock del CCS. Lamisma lleva la cuenta de los ciclos de reloj usados en cada instrucción. Los datos se tomaron reseteandoel contador y avanzando paso a paso por las lineas de código de interés anotando el valor final del reloj.

    7.2. Análisis

    Para comenzar el análisis es importante tener en cuenta las constantes del sistema. Las mismas seresumen en la siguiente tabla:

    16

  • Figura 9: Constantes del Sistema

    La restricción mas importante para no atrasarnos entre muestras es completar todas las acciones que sedetallan en la siguiente tabla (excepto el env́ıo) antes de que se complete una nueva conversión. Recordarque el ADC digitaliza todos los canales al mismo tiempo por lo que la nueva conversión corresponde a ladigitalización de todos los canales. Teniendo en cuenta que la frecuencia del clock es de 48MHz y la demuestreo es de 1000Hz, disponemos de 48000 ciclos de reloj entre intervenciones del ADC.

    Entre dichas intervenciones se deben ejecutar las siguientes acciones:

    Atender la rutina del ADC

    Copiar las muestras a un buffer auxiliar

    Conversion de las muestras a niveles de voltaje

    Cargar las muestras a la cola

    Filtrarlas

    Guardar los markers de resultado

    Cargar los datos al buffer TX

    Enviarlos

    Los ciclos de reloj consumidos en cada uno de los item anteriores pueden verse en la imagen 10.

    Figura 10: Ciclos por acción

    De la tabla 10 se puede extraer que las acciones que mas tiempo consumen son las siguentes:

    a. Filtrado de las muestras: 632 ciclos por tap del filtro.

    b. Cargado de los float en memoria: considerando que el tipo float esta compuesto de 4 bytes.

    c. Tiempo en enviar los datos por la UART.

    La cantidad de ciclos utilizados en la transmisión de los datos por la UART fue calculada teniendoen cuenta que se env́ıan 34 bytes (4bytes*8canales +1 byte del marker + 1 byte del carácter de fin de

    17

  • linea). A su vez la UART envia un bit de stop por lo que la duración total es:

    Ciclosenviando = 34 ∗ 9 ∗48MHz

    115200baudios= 127500ciclos (3)

    Claramente los ciclos que se demoran en enviar los datos por la UART son mayores a los ciclosdisponibles entre intervenciones del ADC. Suponiendo un filtro de 10 taps, hacer todas las instruccioneshasta cargar los datos en el buffer toma 11075 ciclos de reloj. Utilizando este dato, calculamos que losdatos se terminan de mandar próximo a la tercer intervención del ADC. Si el filtro fuera de 75 tapsterminaŕıamos de enviar los datos próximos a la cuarta intervención del ADC.

    NrointervencionADC =127500 + 11075 ciclos

    48000 ciclos≈ 3 (4)

    Esto nos deja con dos posibles opciones:

    Aumentar considerablemente la velocidad de la UART.

    Decimar, es decir mandar una muestra de cada algún numero de muestras conservando la informaciónde los markers.

    Para que los valores en el buffer de transmisión no se superpongan entre si, es necesario que cuandose vaya a cargar el dato correspondiente a una nueva intervención del ADC ya se hallan terminado deenviar todos los datos anteriores.

    Si se quisiera que la UART enviara todos los datos antes de la siguiente intervención del ADC lavelocidad de la misma debe de ser de 3 a 50 veces mayor que la actual para filtro de 5 a 75 taps.

    En este proyecto se implementó la decimación, considerando que se está muestreando muy por encimade la frecuencia de Nyquist. Si se enviaran todas las muestras se estaŕıan enviando 10 veces más muestrasque las requeridas por Nyquist, por lo que se obtiene información redundante. A su vez se prefiriópreferimos no sobre-exigir la velocidad de la UART a los ĺımites dados por el fabricante.

    Por lo tanto la menor decimación posible es enviar una muestra de cada 4 (Permitiendo utilizar filtrosde largo considerable).

    Usando una decimación mayor o igual a 4 se utiliza el siguiente porcentaje de los ciclos en la iteraciónde carga de los resultados en el buffer.

    Figura 11: Ciclos utilizados con decimación

    Esto quiere decir que el sistema puede trabajar con filtros de 75 muestras sin problemas, enviando almenos una de cada 4 conversiones de resultados.

    18

  • Con esto en mente, estos son los porcentajes utilizados en la iteración de envió, considerando la señalde referencia (semiciclo positivo de una sinusoide de 50Hz), por lo que el largo del filtro es de 10 muestras.

    Figura 12: Porcentaje usado con la señal de referencia

    Como puede verse del gráfico anterior, la mayor parte del tiempo el microprocesador estará enestado de bajo consumo, despertándose para enviar los datos por la UART. Este resultado fue bastantesorprendente para nosotros. Todo el procesamiento, y la carga de los datos en el buffer ocupa muy pocotiempo en comparación con lo que se toma para completar el env́ıo de los datos.

    7.3. Tiempo de Respuesta Teórico

    La cota superior de la decimación es 10 para poder reconstruir la señal en recepción. Sin embargoveremos que con una decimación mayor a 6 no cumplimos con la restricción de tiempos.

    Asumiendo que el filtro detecta correctamente la presencia de la señal, no se dará aviso por la UARTde su presencia hasta como máximo 4 intervenciones del ADC luego de cargadas en el buffer. Siempre ycuando no se sobrecargen los tiempos del microprocesador de acuerdo a la figura 11, le llegará el avisodel marker a la PC luego de (4 + Nrodecimacion) ∗ 1ms. Por lo que para un peor caso se puede cumplirteóricamente el requerimiento de dar aviso antes de 10ms hasta con decimación 6.

    En resumen nuestro dispositivo es capaz de detectar eventos de largo menor a 75 muestras en 8 canalesindependientes y enviar las muestras decimadas conjuntamente con el aviso de detección en un tiempomenor a 10ms desde el final del evento. Esto siempre que la decimación esté entre 4 y 6.

    8. Pruebas

    8.1. Resumen

    En esta sección se busca documentar las distintas pruebas realizadas para verificar la funcionalidaddel proyecto, y el correcto cumplimiento de los requerimientos.

    8.2. Procedimiento

    Con el fin de verificar la detección del evento, se generó una sinusoide de 25 Hz mediante un generadorde señales. El ADC de la MSP432 presenta como caracteŕıstica un rango de entrada de 0V a 3.3V, porlo que se tuvo que incorporar un nivel de continua, con el fin de mantener la sinusoide dentro del rangoincluso en los semiciclos negativos. Se utilizó una continua de 2V y una sinusoide de 1Vpp.

    19

  • Luego con el fin de evaluar el desempeño del sistema frente a cambios en la frecuencia de la sinusoide,se varió dicho parámetro hasta no obtener falsos positivos.

    Por último, a modo demostrativo se observó el comportamiento con señales de diente de sierra ycuadradas, con filtros acorde.

    8.3. Resultados

    A continuación se presentan los resultados obtenidos.

    Figura 13: Resultados

    Se puede ver como el programa detecta la ocurrencia del evento en todas sus ocurrencias, para todoslos canales. Por la forma en la que el filtro funciona, el mismo encuentra una el coincidencia del eventouna muestra antes de fin del mismo. Esto se debe a que la correlación entre las señales esta dentro dela tolerancia antes del fin de la señal. El parámetro de tolerancia puede ajustarse mas finamente paraque no se detecte la señal antes pero con la implementación usada esto es complicado. Al disminuir latolerancia, la cota inferior y superior se acercan entre ellas. Recordar que solo habrá coincidencia si elvalor de salida del filtro esta dentro de estos ĺımites. Pero al hacer el intervalo muy angosto cualquiererror en las cuentas, o en el muestreo dará un resultado fuera de los limites y el evento no será detectada.

    Al modificar la frecuencia se obtuvo que la frecuencia superior a la que la señal se dejaba de detectarfue de 30 Hz, mientras que la inferior se encontró en 23.6 Hz.

    Figura 14: Sinusoides de 23.6 y 30 Hz

    Por otro lado, para señales de distinta forma, el detector funciona con la misma efectividad. Esto esgracias a la utilización del filtro matcheado, y si bien no está dentro de los requerimientos del dispositivo,lo vuelve mas versátil. Para las siguientes imágenes se tomo como evento el primer semiciclo positivo decada señal.

    20

  • Figura 15: Onda cuadrada y Triangular

    De las figuras puede verse que el sistema puede detectar los eventos sin ningún problema.

    21

  • 9. Conclusiones

    Logramos armar un sistema capaz de samplear y detectar en tiempo real si una señal este presenteen alguno de los 8 canales sampleados. El tiempo entre el fin del evento y el aviso del mismo esmenor a 10ms por lo que cumplimos con dicho requerimiento.

    Armamos una interfaz gráfica fácil de usar e intuitiva para el usuario.

    El sistema fue probado con señales sinusoidales pero es escalable a detectar cualquier tipo de eventoen una señal.

    Logramos sobrepasar los problemas discutidos y empleamos varios de los conocimientos dados enel curso.

    Comprendimos la importancia del manejo de los tiempos del microprocesador y efectuamos demanera satisfactoria un detallado estudio de los tiempos del mismo.

    Aprendimos a utilizar una nueva herramienta, el Code Composer. El mismo tiene un manejo másfluido que el IAR, es gratis, pero no tiene una herramienta de simulación sin el microcontrolador.

    Las horas utilizadas para culminar el proyecto fueron mayores que las calculadas.

    22

  • 10. Anexo

    10.1. Conceptos del Curso Aplicados en el Proyecto

    RoundRobin con Interrupciones:Aplicamos este forma de arquitectura de SW ya que es sencilla y nuestro proyecto solo tiene dosinterrupciones periódicas, la UART y el ADC. Ambas caracteŕısticas junto con las limitantes de tiemposdescartaron la posibilidad de utilizar encolado de funciones o un RTOS.

    Abstracción de Hardware:Se intentó separar lo mas posible el código dependiente del hardware para que el proyecto pueda sertransportable a otras plataformas. A su vez, se destaca la utilidad de esto para el proyecto de grado,donde se utilizará comunicación por wifi. La abstracción permite modificar sólo las funciones espećıficasde hadware y mantener el comportamiento del resto del sistema.

    Modularización:Se tuvo especial atención a juntar las funciones que cumplan el mismo objetivo en archivos separadoscon respecto a otras funcionalidades de forma de lograr un proyecto ordenado y modularizado. Por otrolado solo se hicieron publicas las funciones y variables que fueran necesarias de forma de que el usuariono tuviera total acceso a todos los módulos

    Rutinas de Interrupción:Siguiendo las recomendaciones del curso, las rutinas de atención a interrupción se hicieron lo mas cortasposibles para estar la menor cantidad de tiempo en ellas, realizando alĺı solo lo indispensable.

    Bajo consumo:En nuestro proyecto, mientras el dispositivo este en estudio, el microcontrolador esta la mayor parte deltiempo dormido despertándose únicamente para atender a la UART. Esto permite el ahorro de enerǵıa,útil para escenaios como la alimentación por bateŕıas

    Operadores de Bits:Siempre que fuera posible se intentó usar operadores de bits en lugar de funciones con muchas condicionespara ahorrar tiempo de procesamiento.

    Conocimientos de C:Se destaca la utilidad del laboratorio no solo en calidad de repaso de C sino por su contenido en si.El algoritmo para el filtro matcheado es una adaptación directa del filtro de coeficientes, empleandoestructuras que contienen las muestras y coeficientes del filtro. Además se utilizó la cola circular para elguardado de muestras, más eficiente de recorrer para este tipo de filtros.

    Comunicación UART:Usamos una implementación de la UART muy similar a la hecha para los laboratorios del curso. Seutilizaron indicadores de fin de palabra con el objetivo de identificar datos válidos.

    10.2. Especificación del proyecto

    Se adjunta el documento entregado al inicio del proyecto:

    23

  • Proyecto Sisem: Detector de Señales en Tiempo Real

    25 de abril de 2018

    0.1. Estudiantes integrantes

    Mart́ın Beiro , C.I: 5.101.639-3,Contacto: Cel. 099017984, E-mail: [email protected]

    Maximiliano Cárdenas, C.I: 5.317.589-6Contacto: Cel. 099757556, E-mail: [email protected]

    Leo Reyes C.I: 4.857.854-2Contacto: Cel. 099051857, E-mail: [email protected]

    1. Tutor

    Dr. Ing.Leonardo Barboni, Asistente G3/RDT, Dpto. de Electrónica, IIE

    2. Descripción del problema

    Como parte de nuestro proyecto de fin de carrera ESpiDD (Epilepsy Spike Detection Device) se debeimplementar un algoritmo de detección de espigas epilépticas en tiempo real.

    Como proyecto de sisem estudiaremos la implementación de dicho algoritmo en un MSP432.Laausencia de base de datos de registros de persona con esta patoloǵıa nos harán utilizar una señalsinuosoidal para verificar el algoritmo.

    Utilizaremos en MSP432 debido a su unidad de punto flotante, de gran utilidad para que el algoritmofuncione de rápidamente. Trabajaremos utilizando el conversor AD de la placa para samplear la señal.Utilizaremos 8 canales para recibir la señal que será generada por un generador de señales.

    El dispositivo tendrá un parámetro que es la frecuencia deseada de detección y al detectar la frecuencialevantará una flag y prenderá un pin digital para señalizarlo. También se guardará la señal digitalizadajunto con el marker para levantar los datos luego desde una PC.

    El sistema deberá trabajar en tiempo real, tolerando una diferencia entre el marker que señaliza lapresencia de la frecuencia deseada y el fin del evento menor a 100ms. Se le llamará evento a el primermedio periodo creciente de la señal sinusoidal medido desde el primer mı́nimo de la sinusoide hasta elprimer máximo. Esto queda mejor detallado en la siguiente figura

    1

  • Figura 1: Evento a detectar

    3. Objetivos

    El proyecto tiene como principal objetivo el estudio del conversor analógico-digital (ADC) y la unidadde punto flotante del MSP432. Se hará especial énfasis en los tiempos implicados en toda la cadena deprocesamiento y se evaluarán las ventajas que pueda tener en este aspecto el uso del punto flotante.

    Para esto se deberá elaborar un dispositivo que dada una señal sinusoidal, adquirida mediante el ADCde la placa, detecte un contenido de frecuencia determinado. Se deben poder adquirir 8 señales, mediantediferentes canales. El tiempo de respuesta debe ser menor a 100ms, desde que sucede el evento hasta quese coloca la señalización de la detección. A su vez debe enviar los los datos y los resultados a un PC parasu posterior verificación.

    3.1. Alcance

    Se deberá implementar el algoritmo de detección en un MSP432, sobre 8 canales muestreados medianteel ADC. A su vez se deberán implementar módulos de comunicación UART con un PC para transmitirlos resultados de la detección conjuntamente con las muestras. Se deberá estudiar el funcionamiento dela unidad de punto flotante y los tiempos de toda la cadena de procesamiento.

    El microprocesador deberá transmitir a la PC las señales de entrada señalizando los puntos donde sedetectó QRS, y los resultados deberán poder ser visualizados mediante MATLAB para su validación.

    Como hardware adicional al MSP432 se utilizará una PC con el software MATLAB y ’Code ComposerStudio’, un buffer para la entrada al micro junto con filtros para evitar el aliasing.

    4. Descripción del sistema

    4.1. Descripción funcional

    El sistema deberá samplear 8 canales, guardar esta información y determinar cuando esta presenteuna determinada componente de frecuencia en una señal sinusoidal. Frente a este suceso deberá setearun flag y dar una salida digital. A su vez deben guardarse en memoria todos la señal digitalizada juntocon los markers para poder enviarlos a una PC por UART.

    2

  • 4.2. Diagrama de Bloques

    5. Diagrama de bloques

    A/D

    Generador

    de señales

    Algoritmo

    de detección

    Memoria PC

    uC

    Bu�er y Filtros

    An�-Aliasing

    Osciloscopio marker

    marker

    Figura 2: Diagrama de bloques del proyecto

    6. Requerimientos y restricciones del sistema

    6.1. Procesamiento y memoria

    EL microcontrolador tiene 256kB de memoria flash. Reservaremos la cuarta parte de la memoriatotal para el registro de la señal digitalizada y el bit para señalizar si se encontró la frecuencia deseadaen cada cada canal. Entonces disponemos de memoriadisponible =

    256kB4 = 64kB. Considerando N = 8

    la cantidad de canales, fm = 200Hz la frecuencia de muestreo, que la resolución del conversor AD es de2Bytes y que se reserva un bit por canal adicional para el flag obtenemos la siguiente expresion:

    Tasabytes = 2Nfm +fmN

    8= 3,4

    kB

    s(1)

    Entonces el tiempo máximo de señal para guardar es de:

    tmax =memoriadisponible

    Tasabytes= 18,8s

    Esto constituye un tiempo mas que suficiente para hacer las pruebas, por lo que la memoria no va aser un problema.

    En cuanto a la velocidad de procesamiento estimamos que la misma es suficiente para muestrear,guardar y procesar la señal en tiempo real.

    6.2. Tiempos de respuesta

    Debemos tener un tiempo entre el comienzo de la onda sinusoidal de la frecuencia que buscamos y lacolocacion del marker menor a 100ms luego del fin del evento.

    7. Diseño Preliminar

    7.1. Plataforma Hardware

    Utilizaremos una placa de desarrollo con un MSP432, un generador de señales, un osciloscopio, unfiltro RC para no tener aliassing, y un buffer para no ingresar directamente la señal del generador a laplaca.

    7.2. Arquitectura de software

    Round-Robin con interrupciones o encolado de funciones. Justificar

    3

  • 8. Planificación

    8.0.1. Actividades

    Estudio del funcionamiento de punto flotante hardware, el ADC y sus limitaciones.

    Aprendizaje de la herramienta Code Composer.

    Estudio e implementación en C del algoritmo.

    Validación y test del algoritmo.

    Env́ıo de datos mediante UART.

    Muestreo de 8 canales mediante el ADC.

    Guardado de muestras en buffer circular.

    Estudio de tiempos

    Relevamiento de resultados en Matlab

    Prueba del funcionamiento global

    Documentación

    8.0.2. Hitos

    25 de abril: Especificaciones Completas

    30 de Mayo: Hito 1. Estudio de punto flotante y ADC, Implementación del algoritmo, muestreo de1 canal, env́ıo de datos.

    8.1. Pruebas

    Se deben testear el muestreo mediante el ADC, el env́ıo mediante UART, el algoritmo y los tiempostotales del sistema.

    1. Primero se debe testear el UART, ya que se utilizará para el test del muestreado. Se enviará un archivode texto previamente definido, se levantará en MATLAB y se comprobará que es igual al archivo quese quizo enviar.

    2. Para el testeo del conversor se enviarán las muestras obtenidas de una señal seno del generador deseñales en dos instancias, con 1 canal y con 8. Se compararán en Matlab con un seno de las mismascaracteŕısticas que el generado.

    3. Para probar el algoritmo ingresaremos la señal por los 8 canales al la placa y configuraremos un pindigital de salida que simbolice la detección. Al osciloscopio conectaremos en un canal el generadorde señales y en el otro canal el pin digital. Variando la frecuencia de la señal a mano miraremos quese detecte el evento cuando la frecuencia generada coincida con la deseada. Y a su vez se medirá eltiempo desde el fin del evento hasta que el marker fue colocado.

    4. Otra posible manera de medir el tiempo de respuesta es mirando el espectrograma de las señalesdigitalizadas en matlab y fijarse la diferencia de tiempo entre que esta presente la frecuencia de interesy la colocacion del marker.

    4

  • 8.1.1. Cronograma

    Semana 1: Estudio, manejo y verificación de las operaciones con punto flotante y el conversor AD.Manejo del Code Composer. Conocimiento de las limitaciones de la memoria del microprocesador.

    Semana 2: Envió de datos por UART. Muestreado de 1 canal y guardado de las muestras memoria.

    Semana 3: Muestreado de 8 canales en simultaneo. Estudio de tiempos del conversor, de memoria yduración las funciones utilizadas.

    Semana 4: Implementación del algoritmo y carga de datos en MATLAB.

    Semana 5: Prueba del sistema global, finalización de la documentación.

    5

  • 10.3. Planificación del proyecto

    No llevamos un conteo muy exhaustivo del tiempo empleado para el proyecto pero el mismo fue muchomayor que el calculado inicialmente.

    10.4. Archivos entregados:

    En la carpeta comprimida entregada se encuentran 3 carpetas:

    Código

    Documentación

    Doxygen

    10.4.1. Código

    Se entregan los siguientes archivos en cada carpeta:

    Matlab Engloba el código generado en matlab.

    • script comunication.m Es el script para la comunicación entre el micro y la PC

    Archivos Fuente Código fuente en C generado para el proyecto

    • adquisicion.c Funciones auxiliares encargadas del muestreo

    • adquisicion.h

    • cola.c Funciones auxiliares encargadas del encolado

    • cola.h

    • comandos.c Funciones encargadas de la recepción e interpretación de los comandos.

    • comandos.h

    • filtro.c Funciones auxiliares encargadas del filtrado.

    • filtro.h

    • inicializacion.c Función de inicialización del reloj

    • inicializacion.h

    • modulo ADC.c Funciones de configuración, inicilización y stop del ADC.

    • modulo ADC.h

    • modulo uart.c Funciones para la configuración de la comunicacion UART y enviado dediferentes tipos de datos.

    • modulo uart.h

    • main.c Main del proyecto

    MSP Libreŕıas del microcontrolador

    10.4.2. Documentación

    Incluye la memoria del proyecto en formato PDF.

    10.4.3. Doxygen

    Incluye la documentación generada por Doxygen del código en html.

    29

  • My ProjectFinal

    Generated by Doxygen 1.8.14

  • Contents

    1 Class Index 1

    1.1 Class List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    2 File Index 3

    2.1 File List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    3 Class Documentation 5

    3.1 filtro_estr Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    3.1.1 Member Data Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    3.1.1.1 coef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    4 File Documentation 7

    4.1 adquisicion.c File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    4.1.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    4.2 adquisicion.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    4.2.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    4.3 Cola.c File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    4.3.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    4.3.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    4.3.2.1 cola() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    4.4 Cola.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    4.4.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    4.4.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    4.4.2.1 cola() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    4.5 comandos.c File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

  • ii CONTENTS

    4.5.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    4.5.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4.5.2.1 enviar_filtro() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4.5.2.2 enviar_resultados() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4.5.2.3 recibir_coeficientes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4.5.2.4 recibir_comandos() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    4.5.2.5 transmitir_muestra_inicial() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    4.5.2.6 transmitir_muestras() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    4.6 comandos.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    4.6.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    4.6.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    4.6.2.1 enviar_resultados() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    4.6.2.2 recibir_comandos() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    4.6.2.3 transmitir_muestra_inicial() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4.7 Filtro.c File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4.7.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    4.7.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    4.7.2.1 filt_estruct_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    4.7.2.2 filtrado() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    4.7.2.3 filtrar_muestras() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    4.7.2.4 inicializar_filtro() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.7.2.5 init_coeficientes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.7.2.6 marcado() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    4.8 Filtro.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    4.8.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    4.8.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    4.8.2.1 filtrar_muestras() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    4.8.2.2 inicializar_filtro() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    4.8.2.3 init_coeficientes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    4.9 inicializacion.c File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    Generated by Doxygen

  • CONTENTS iii

    4.9.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    4.9.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    4.9.2.1 inicializar_reloj() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    4.10 inicializacion.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    4.10.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    4.10.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    4.10.2.1 inicializar_reloj() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    4.11 modulo_ADC.c File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    4.11.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    4.11.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    4.11.2.1 ADC14_IRQHandler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    4.11.2.2 config_ADC() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4.11.2.3 config_timerA() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4.11.2.4 fin_ADC() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4.11.2.5 init_ADC() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    4.11.2.6 init_timerA() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    4.11.2.7 TA1_0_IRQHandler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    4.11.3 Variable Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    4.11.3.1 upConfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    4.12 modulo_ADC.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    4.12.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    4.12.2 Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    4.12.2.1 TIMER_PERIOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    4.12.3 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    4.12.3.1 config_ADC() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    4.12.3.2 fin_ADC() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    4.12.3.3 init_ADC() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    4.13 modulo_uart.c File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    4.13.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    4.13.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    Generated by Doxygen

  • iv CONTENTS

    4.13.2.1 enviar() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    4.13.2.2 EUSCIA0_IRQHandler() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    4.13.2.3 init_uart() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    4.13.2.4 recibir_entero() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    4.13.2.5 recibir_float() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    4.13.2.6 transmitir_char() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    4.13.2.7 transmitir_float() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    4.13.2.8 transmitir_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    4.13.2.9 transmitir_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    4.14 modulo_uart.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    4.14.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    4.14.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    4.14.2.1 init_uart() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    4.14.2.2 recibir_entero() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    4.14.2.3 recibir_float() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    4.14.2.4 transmitir_char() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    4.14.2.5 transmitir_float() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    4.14.2.6 transmitir_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    4.14.2.7 transmitir_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    Index 37

    Generated by Doxygen

  • Chapter 1

    Class Index

    1.1 Class List

    Here are the classes, structs, unions and interfaces with brief descriptions:

    filtro_estr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

  • 2 Class Index

    Generated by Doxygen

  • Chapter 2

    File Index

    2.1 File List

    Here is a list of all documented files with brief descriptions:

    adquisicion.cEn este archivo se encuentran las funciones auxiliares encargadas del muestreo y adquisiciónde las señales analógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    adquisicion.hEn este archivo se encuentran las funciones auxiliares encargadas del muestreo y adquisiciónde las señales analógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    Cola.cEn este archivo se encuentran las funciones auxiliares encargadas del encolado de muestraspara la cola circular de filtrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    Cola.hEn este archivo se encuentran las funciones auxiliares encargadas del encolado de muestraspara la cola circular de filtrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    comandos.cEn este archivo se encuentran las funciones encargadas de la recepción e interpretación de loscomandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    comandos.hEn este archivo se encuentran las funciones encargadas de la recepción e interpretación delos comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    Filtro.cEn este archivo se encuentran las funciones auxiliares encargadas del filtrado . . . . . . . . . 16

    Filtro.hEn este archivo se encuentran las funciones auxiliares encargadas del filtrado . . . . . . . . . 20

    inicializacion.cEn este archivo se encuentran las funcion de inicialización del reloj para frecuencia de 48MHz,con el cristal externo HFXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    inicializacion.hEn este archivo se encuentran las funcion de inicialización del reloj para frecuencia de 48MHz,con el cristal externo HFXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    modulo_ADC.cEn este archivo se encuentran las funciones de configuracion, inicilizacion y stop del ADC de 14bits del MSP432P401R para 8 canales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    modulo_ADC.hEn este archivo se encuentran las funciones de configuracion, inicilizacion y stop del ADC de 14bits del MSP432P401R para 8 canales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    modulo_uart.cModulo que contiene las funciones necesarias para la comunicación UART . . . . . . . . . . 29

    modulo_uart.hModulo que contiene las funciones necesarias para la comunicación UART . . . . . . . . . . 33

  • 4 File Index

    Generated by Doxygen

  • Chapter 3

    Class Documentation

    3.1 filtro_estr Struct Reference

    Public Attributes

    • float ∗ buffer• int nuevo• float ∗ coef

    3.1.1 Member Data Documentation

    3.1.1.1 coef

    float∗ filtro_estr::coef

    lugar del mas nuevo

    The documentation for this struct was generated from the following file:

    • Cola.h

  • 6 Class Documentation

    Generated by Doxygen

  • Chapter 4

    File Documentation

    4.1 adquisicion.c File Reference

    En este archivo se encuentran las funciones auxiliares encargadas del muestreo y adquisición de las señalesanalógicas.

    #include "modulo_ADC.h"#include "comandos.h"

    Macros

    • #define VREF 3.3• #define MAX_SCALE 16384

    Functions

    • int ventana_inicial (float ∗ventana, int tamano, int canal)• void conversion_muestras (float ∗muestras, int cant_canales)• void iniciar_estudio (void)

    4.1.1 Detailed Description

    En este archivo se encuentran las funciones auxiliares encargadas del muestreo y adquisición de las señalesanalógicas.

    Proyecto Detector de señales en tiempo real Modulo de adquisión de señales

    Version

    1.0

    Author

    Maximiliano Cárdenas [email protected]

    Date

    25 de Mayo de 2018

  • 8 File Documentation

    4.2 adquisicion.h File Reference

    En este archivo se encuentran las funciones auxiliares encargadas del muestreo y adquisición de las señalesanalógicas.

    Functions

    • int ventana_inicial (float ∗ventana, int tamano, int canal)• int fun_startADC (float ∗ventana, int tamano, int canal)• void conversion_muestras (float ∗muestras, int cant_canales)

    4.2.1 Detailed Description

    En este archivo se encuentran las funciones auxiliares encargadas del muestreo y adquisición de las señalesanalógicas.

    Proyecto Detector de señales en tiempo real Modulo de adquisión de señales

    Version

    1.0

    Author

    Maximiliano Cárdenas [email protected]

    Date

    25 de Mayo de 2018

    4.3 Cola.c File Reference

    En este archivo se encuentran las funciones auxiliares encargadas del encolado de muestras para la cola circularde filtrado.

    #include #include "Cola.h"

    Functions

    • void cola ( filtro ∗f, float muestra, int nro_muestras)agrega muestra al buffer circular

    Generated by Doxygen

  • 4.4 Cola.h File Reference 9

    4.3.1 Detailed Description

    En este archivo se encuentran las funciones auxiliares encargadas del encolado de muestras para la cola circularde filtrado.

    Proyecto Detector de señales en tiempo real Modulo de adquisión de señales

    Version

    1.0

    Author

    Matín Beiro [email protected]

    Date

    25 de Mayo de 2018

    4.3.2 Function Documentation

    4.3.2.1 cola()

    void cola (

    filtro ∗ f,float muestra,

    int nro_muestras )

    agrega muestra al buffer circular

    Parameters

    in f Estructura con bufferin muestra Muestra a agregar

    4.4 Cola.h File Reference

    En este archivo se encuentran las funciones auxiliares encargadas del encolado de muestras para la cola circularde filtrado.

    Classes

    • struct filtro_estr

    Generated by Doxygen

  • 10 File Documentation

    Macros

    • #define TOLERANCIA 0.02

    Typedefs

    • typedef struct filtro_estr filtro

    Functions

    • void cola ( filtro ∗f, float muestra, int nro_muestras)agrega muestra al buffer circular

    4.4.1 Detailed Description

    En este archivo se encuentran las funciones auxiliares encargadas del encolado de muestras para la cola circularde filtrado.

    Proyecto Detector de señales en tiempo real Modulo de adquisión de señales

    Version

    1.0

    Author

    Matín Beiro [email protected]

    Date

    25 de Mayo de 2018

    4.4.2 Function Documentation

    4.4.2.1 cola()

    void cola (

    filtro ∗ f,float muestra,

    int nro_muestras )

    agrega muestra al buffer circular

    Generated by Doxygen

  • 4.5 comandos.c File Reference 11

    Parameters

    in f Estructura con bufferin muestra Muestra a agregar

    4.5 comandos.c File Reference

    En este archivo se encuentran las funciones encargadas de la recepción e interpretación de los comandos.

    #include "comandos.h"

    Functions

    • void transmitir_muestra_inicial (int frec_muestreo, int tamano, float ∗∗puntero_canales)Funcion transmite la ventana inicial de muestras adquirida con el canal 0.

    • void enviar_filtro (float ∗coef)• void transmitir_muestras (float ∗muestras, char marker, int cant_canales)• int enviar_resultados (float ∗canales, char markers, int cant_canales, int down_samp)

    Funcion que envia las muestras adquiridas por cada canal junto con los marcadores de deteccion.

    • void recibir_coeficientes (float ∗coeficientes_filtro, int length)• void recibir_comandos ()

    Funcion que se encarga de la recepción en interpretación de comandos.

    Variables

    • int start =0• int start_coef =0• int coef_rdy =0• int largo_ventana• float ∗ coeficientes_filtro• float fin_estudio =FIN_DEL_ESTUDIO• float continua =0

    4.5.1 Detailed Description

    En este archivo se encuentran las funciones encargadas de la recepción e interpretación de los comandos.

    Proyecto Detector de señales en tiempo real Modulo de recepción e interpretación de comandos

    Version

    1.0

    Author

    Maximiliano Cárdenas [email protected]

    Date

    25 de Mayo de 2018

    Generated by Doxygen

  • 12 File Documentation

    4.5.2 Function Documentation

    4.5.2.1 enviar_filtro()

    void enviar_filtro (

    float ∗ coef )

    Funcion que envía los coeficientes del filtro

    4.5.2.2 enviar_resultados()

    int enviar_resultados (

    float ∗ muestras,char marker,

    int cant_canales,

    int down_samp )

    Funcion que envia las muestras adquiridas por cada canal junto con los marcadores de deteccion.

    El formato de envio es el siguiente: 8 datos de tipo float correspondientes a los canales, un dato de tipo charcorrespondiente a los markers y un caracter de fin de linea

    Se envian

    Parameters

    muestras puntero a las muestras

    in marker marcador, donde cada bit representa si se detecto o o no laseñal buscada en cadacanal

    in cant_canales Cantidad de canales a enviarin down_samp Variable que permite reducir la cantidad de muestras a enviar, se envia una de cada

    "down_samp" muestras y se almacena la informacion de deteccion

    Returns

    0 si se termino el estudio, 1 si no se termino

    Si se detectaron eventos en muestras consecutivas solo se envia el primero

    Se transmiten las muestras y se cambia el estado del pin 3.2 para verificar en el osciloscopio

    4.5.2.3 recibir_coeficientes()

    void recibir_coeficientes (

    float ∗ coeficientes_filtro,int length )

    Funcion que recibe los coeficientes a cargar en el filtro

    Generated by Doxygen

  • 4.5 comandos.c File Reference 13

    4.5.2.4 recibir_comandos()

    void recibir_comandos ( )

    Funcion que se encarga de la recepción en interpretación de comandos.

    Funcion que se encarga de la interpretacion de los comandos y determina las acciones a realizar Comando "SW"-Start window Inicia la adquisición y posterior transmision de la ventana inicial

    Comando "CN"- Conectado Permite asegurarse de la conección entre el PC y la placa. Envia la palabra "conectado"y setea a high el pin 1.0(LED)

    Comando "CF"-Coeficientes filtro Comando que indica que se van a enviar los coeficientes del filtro desde laPC. Inicializa las estructuras del filtro.Cuando los coeficientes se encuentran cargados en el filtro levanta labandera de datos listos

    Se inicializa la estructura de los coeficientes del filtro, y se avisa a la PC que se pueden recibir los coeficientes

    Se reciben los coeficientes y se inicializa la estructura del filtro

    Comando "SC"-Send coefficients envia los coeficientes del filtro cargados en memoria

    Comando "CE"- Comenzar estudio Comienza el estudio

    4.5.2.5 transmitir_muestra_inicial()

    void transmitir_muestra_inicial (

    int frec_muestreo,

    int tamano,

    float ∗∗ puntero_canales )

    Funcion transmite la ventana inicial de muestras adquirida con el canal 0.

    Funcion que transmite la ventana inicial de muestras

    4.5.2.6 transmitir_muestras()

    void transmitir_muestras (

    float ∗ muestras,char marker,

    int cant_canales )

    Funcion que envia las muestras correspondientes a los 8 canales y los markers de señalización

    Generated by Doxygen

  • 14 File Documentation

    4.6 comandos.h File Reference

    En este archivo se encuentran las funciones encargadas de la recepción e interpretación de los comandos.

    #include "modulo_uart.h"#include "modulo_ADC.h"#include "Filtro.h"

    Macros

    • #define CANTCANALES 8• #define FIN_DEL_ESTUDIO 999• #define L_ESTUDIO 500

    Functions

    • void transmitir_muestra_inicial (int frec_muestreo, int tamano, float ∗∗puntero_canales)Funcion transmite la ventana inicial de muestras adquirida con el canal 0.

    • int enviar_resultados (float ∗muestras, char marker, int cant_canales, int down_samp)Funcion que envia las muestras adquiridas por cada canal junto con los marcadores de deteccion.

    • void recibir_comandos ()

    Funcion que se encarga de la recepción en interpretación de comandos.

    Variables

    • float ∗ coeficientes_filtro• int coef_rdy• int start• int start_coef• int largo_ventana• float continua

    4.6.1 Detailed Description

    En este archivo se encuentran las funciones encargadas de la recepción e interpretación de los comandos.

    Proyecto Detector de señales en tiempo real Modulo de recepción e interpretación de comandos

    Version

    1.0

    Author

    Maximiliano Cárdenas [email protected]

    Date

    25 de Mayo de 2018

    Generated by Doxygen

  • 4.6 comandos.h File Reference 15

    4.6.2 Function Documentation

    4.6.2.1 enviar_resultados()

    int enviar_resultados (

    float ∗ muestras,char marker,

    int cant_canales,

    int down_samp )

    Funcion que envia las muestras adquiridas por cada canal junto con los marcadores de deteccion.

    El formato de envio es el siguiente: 8 datos de tipo float correspondientes a los canales, un dato de tipo charcorrespondiente a los markers y un caracter de fin de linea

    Se envian

    Parameters

    muestras puntero a las muestras

    in marker marcador, donde cada bit representa si se detecto o o no laseñal buscada en cadacanal

    in cant_canales Cantidad de canales a enviarin down_samp Variable que permite reducir la cantidad de muestras a enviar, se envia una de cada

    "down_samp" muestras y se almacena la informacion de deteccion

    Returns

    0 si se termino el estudio, 1 si no se termino

    Si se detectaron eventos en muestras consecutivas solo se envia el primero

    Se transmiten las muestras y se cambia el estado del pin 3.2 para verificar en el osciloscopio

    4.6.2.2 recibir_comandos()

    void recibir_comandos ( )

    Funcion que se encarga de la recepción en interpretación de comandos.

    Todos los comandos deben finalizar con el caracter de fin de linea Lista de comandos: "CN": Permite verificarconexion de la placa, envia la palabra conectado (seguida de un fin de linea) y levanta el pin 1.0 (LED) "SW":Inicia la captura y posterior envio de de la ventana inicial, levantando la flag start_coef. "SC": Se envia a la PC loscoeficientes cargados en el filtro. Cada coeficiente se envia seguido de un caracter de fin de linea."CF": Se recibe un entero con el largo del vector de los coeficientes, un float con la continua de la señal yposteriormente los coeficientes de tipo float.Cada uno de los datos debe contener al final un caracter de fin delinea. "ES": Se comienza la adquisición de muestras para el estudio, levantando la bandera start.

    Funcion que se encarga de la interpretacion de los comandos y determina las acciones a realizar Comando "SW"-Start window Inicia la adquisición y posterior transmision de la ventana inicial

    Generated by Doxygen

  • 16 File Documentation

    Comando "CN"- Conectado Permite asegurarse de la conección entre el PC y la placa. Envia la palabra "conectado"y setea a high el pin 1.0(LED)

    Comando "CF"-Coeficientes filtro Comando que indica que se van a enviar los coeficientes del filtro desde laPC. Inicializa las estructuras del filtro.Cuando los coeficientes se encuentran cargados en el filtro levanta labandera de datos listos

    Se inicializa la estructura de los coeficientes del filtro, y se avisa a la PC que se pueden recibir los coeficientes

    Se reciben los coeficientes y se inicializa la estructura del filtro

    Comando "SC"-Send coefficients envia los coeficientes del filtro cargados en memoria

    Comando "CE"- Comenzar estudio Comienza el estudio

    4.6.2.3 transmitir_muestra_inicial()

    void transmitir_muestra_inicial (

    int frec_muestreo,

    int tamano,

    float ∗∗ puntero_canales )

    Funcion transmite la ventana inicial de muestras adquirida con el canal 0.

    Se envia un entero con la frecuencia de muestreo, un entero con el tamaño de la ventana y un entero con lacantidad de canales disponibles. Posteriormente se envian las muestras adquiridas por el canal 0. Luego de cadauno de los datos se envÃa un caracter de fin de linea

    Parameters

    in frec_muestreo frecuencia de muestreoin tamano tamano del vector de muestras

    puntero_canales puntero a las muestras adquiridas

    Funcion que transmite la ventana inicial de muestras

    4.7 Filtro.c File Reference

    En este archivo se encuentran las funciones auxiliares encargadas del filtrado.

    #include "Filtro.h"#include #include "stdlib.h"

    Generated by Doxygen

  • 4.7 Filtro.c File Reference 17

    Functions

    • float ∗ init_coeficientes (float ∗coeficientes_filtro, int coef_rdy, int largo)Funcion que inicilaiza el espacio de memoria para los coeficientes.

    • void filt_estruct_init ( filtro ∗estr, float ∗coef, float ∗buff)Inicializa la estuctura de filtro.

    • void inicializar_filtro (int largo_ventana, int cant_canales, float ∗coeficientes_filtro)Función que crea las estrucutras de filtro para los distintos canales.

    • float filtrado ( filtro ∗f, float muestra, int nro_muestras, float continua)Función que aplica el filtro.

    • char marcado (float res, float umbral, int largo_ventana)

    Marca las muestras según criterio de umbral y tolerancia.

    • char filtrar_muestras (float ∗canales, int cant_canales, float continua)funcion encargada de el filtrado

    Variables

    • filtro filt_struct [8]• float resultado [8] ={CANT_CANALES}

    4.7.1 Detailed Description

    En este archivo se encuentran las funciones auxiliares encargadas del filtrado.

    Proyecto Detect