1 ESCUELA DE ELECTRONICA Y TELECOMUNICACIONES ‘SISTEMA DE ADQUISICIÓN Y MONITOREO DE SEÑALES ELÉCTRICAS, BASADO EN LA UTILIZACIÓN DE UNA FPGA, PARA ANÁLISIS Y CARACTERIZACIÓN DE SEÑALES EN EL RANGO DE FRECUENCIAS BAJAS’ AUTOR: Axel Alejandro Ontaneda Febres Tesis previa a la obtención del Título de Ingeniero en Electrónica y Telecomunicaciones DIRECTOR: Ing. Carlos Carrión LOJA – ECUADOR 2 2009 DECLARACIÓN DE AUTORÍA DEL TEMA DE TESIS Todos las conceptos, opiniones, versiones, resultados y conclusiones que constan en el presente trabajo investigativo, son de responsabilidad exclusiva de las autoras. ……………………. El Autor 3 INTRODUCCIÓN Las señales eléctricas presentes en nuestro medio nos pueden brindar y transmitir diferentes tipos de información, pero dependiendo del análisis que se haga a éstas señales se podrá adquirir o entender tal información. Es así, que en el dominio temporal se puede obtener información de la señal tal como su amplitud, periodo y fase, mientras que en el dominio de la frecuencia se obtiene la densidad espectral dependiendo de la frecuencia a la que oscile esta señal, y además permite conocer la relación entre esas componentes. Los osciloscopios y los analizadores de espectro, son sistemas que permiten hacer un análisis de la señal tanto en el dominio temporal como en el frecuencial, y además son herramientas muy utilizadas en electrónica y en telecomunicaciones, ya que les permite visualizar y entender las distintas señales eléctricas presentes en nuestro medio. Se trabajará los diseños de los sistemas de adquisición, monitoreo y procesamiento de señales a través de FPGAs (Field Programmable Gate Arrays) como su nombre lo indica, son reconfigurables y reprogramables, lo que permite integrar en un solo dispositivo varios programas o permitir actualizar el código presente en él, sin tener que utilizar otro hardware lo cual optimiza los recursos y herramientas. Debido a la gran utilización de éstas herramientas, se decidió involucrar en un sistema de adquisición y monitoreo de señales eléctricas, a través de un sistema electrónico basado en la utilización de una FPGA, para análisis y caracterización de señales, para esto se desarrollo algoritmos utilizando herramientas de diseño de sistemas digitales como lo son Xilinx 8.1i, MATLAB 7.1 y System Generator 8.1 de Xilinx, estos algoritmos pueden ser fácilmente descargados en las FPGAs. Para la implementación de dichos sistemas contamos con dos tarjetas como lo son la FPGA xc3s200 Spartan 3 y la tarjeta xc2vp30 XUP Virtex II Pro el uso de cada una de ellas depende de las características del diseño que pretendemos alcanzar. 4 OBJETIVO GENERAL Y OBJETIVOS ESPECÍFICOS Objetivo General El objetivo general de este trabajo es el diseño de un sistema de monitorización y análisis de señales eléctricas en el dominio del tiempo para el rango de frecuencia de 0 – 3 KHz, y el diseño de un sistema de análisis en el dominio de frecuencia en el rango de 0 – 12 KHz. A través de diseño de algoritmos hardware, capaces de adquirir señales, procesarlas y visualizarla en un sistema VGA con la utilización de una FPGA, se podrá observar importantes características de la señal como la de Amplitud, Periodo y el Espectro de la señal. Objetivos Específicos Diseñar la interfaz de acondicionamiento de la señal, para ingreso de la señal a diferentes escalas por medio de un circuito de adecuación, permitiendo la digitalización apropiada de la señal analógica, a través de un circuito de protección y una adecuada conversión analógica a digital. Diseñar los algoritmos para adquisición de señales, procesamiento de la señal y visualización a través de un monitor VGA. En el procesamiento de la señal se dará formato a los datos para la implementación de memorias de almacenamiento, con lo cual se permitirá tomar estos datos y hacer una representación eficiente en el monitor VGA. Diseñar los algoritmos necesarios, para la implementación de un sistema que permita extraer las características espectrales de una señal variante en el tiempo por medio del algoritmo FFT, este tendrá la capacidad de trabajar en un ambiente de Co-Simulación, para comprobar su funcionalidad en un entorno hardware. 5 Comprobar las funcionalidades de los diseños hardware con sistemas Osciloscopios y Analizador de Espectros, con el objetivo de validar los resultados. Además de validar este tipo de tecnología para la fabricación de estos sistemas de monitoreo. CONTENIDO DECLARACIÓN DE AUTORÍA DEL TEMA DE TESIS .................................................................I INTRODUCCIÓN ...........................................................................................................................II OBJETIVO GENERAL Y OBJETIVOS ESPECÍFICOS ...............................................................III CONTENIDO ................................................................................................................................ IV LISTA DE FIGURAS .................................................................................................................... VI LISTA DE TABLAS .................................................................................................................... VII CAPÍTULO I: ANÁLISIS EN EL DOMINIO TEMPORAL Y EN EL DOMINIO DE LA FRECUENCIA ..................1 1.1 INTRODUCCIÓN ......................................................................................................... 1 1.2 DOMINIO TEMPORAL .................................................................................................. 2 1.2.1 AMPLITUD DE SEÑALES ........................................................................................... 3 1.2.2 FASE DE SEÑALES ................................................................................................. 4 1.3 DOMINIO DE LA FRECUENCIA ...................................................................................... 5 1.4 TRANSFORMADA DE FOURIER ................................................................................... 5 1.4.1 ALGORITMOS DE LA FFT ......................................................................................... 7 1.4.1.1 RADIX-4 .................................................................................................... 7 1.4.1.2 RADIX-2 .................................................................................................... 8 1.5 INSTRUMENTOS DE MEDICIÓN .................................................................................... 9 1.6 ARQUITECTURA DE UN FPGA................................................................................... 10 1.6.1 CARACTERÍSTICAS TÉCNICAS DE LOS FPGA SPARTAN-3 Y VIRTEX II PRO ............... 12 CAPÍTULO II: IMPLEMENTACIÓN DE ALGORITMOS EN LA FPGA .................................................... 14 2.1 INTRODUCCIÓN ....................................................................................................... 14 2.2 DISEÑO DEL SISTEMA DE MONITORIZACIÓN DE SEÑALES EN EL TIEMPO ...................... 14 2.2.1 ETAPA DE PROCESAMIENTO EN LA FPGA .............................................................. 17 2.2.1.1 MÓDULO DE ADQUISICIÓN ........................................................................ 18 2.2.1.2 MÓDULO DE DE CONTROL ........................................................................ 19 6 2.2.1.3 MÓDULO DE VISUALIZACIÓN DE VGA ........................................................ 22 2.3 DISEÑO DEL SISTEMA DE MONITORIZACIÓN DE SEÑALES EN FRECUENCIA ................... 24 2.3.1 MÓDULO DE FILTRADO Y DIEZMADO ...................................................................... 26 2.3.2 MÓDULO DE ENVENTANADO .................................................................................. 28 2.3.3 MÓDULO DE LA FFT ............................................................................................. 28 2.3.4 MÓDULO DE VISUALIZACIÓN .................................................................................. 30 CAPÍTULO III: RESULTADOS........................................................................................................ 32 3.1 RESULTADOS EN EL SMST ...................................................................................... 32 3.1.1 CIRCUITO DE ATENUACIÓN Y ACONDICIONAMIENTO ................................................ 32 3.1.2 DIAGRAMA DE TIEMPOS EN EL MÓDULO DE ADQUISICIÓN ........................................ 33 3.1.3 VISUALIZACIÓN EN EL VGA E IMPLEMENTACIÓN ...................................................... 34 3.2 RESULTADOS EN EL SMSF ...................................................................................... 38 3.2.1 BLOQUE DE FILTRADO .......................................................................................... 38 3.2.2 BLOQUE DE ENVENTANADO................................................................................... 40 3.2.3 BLOQUE DE VISUALIZACIÓN E IMPLEMENTACIÓN EN EL FPGA ................................. 42 CAPÍTULO IV: CONCLUSIONES Y RECOMENDACIONES.................................................................. 45 4.1 CONCLUSIONES ...................................................................................................... 45 4.2 RECOMENDACIONES ................................................................................................ 47 BIBLIOGRAFÍA .......................................................................................................................... 49 ANEXOS ..................................................................................................................................... 50 7 LISTA DE FIGURAS FIGURA 1.1 DOMINIO DEL TIEMPO Y DE FRECUENCIA DE SEÑALES ......................................................2 FIGURA 1.2 AMPLITUD DE UNA SEÑAL ELÉCTRICA ..............................................................................4 FIGURA 1.3 FASE DE UNA SEÑAL ELÉCTRICA CON IGUAL FRECUENCIA ................................................4 FIGURA 1.4 RADIX – 4, BURST E/S ....................................................................................................8 FIGURA 1.5 RADIX – 4, RECURSOS MÍNIMOS......................................................................................9 FIGURA 1.6 ARQUITECTURA DE LOS FPGA ..................................................................................... 12 FIGURA 2.1 DIAGRAMA DE BLOQUES GENERAL DEL SMST .............................................................. 16 FIGURA 2.2 DIAGRAMA DE BLOQUES DEL SMST EN EL FPGA ......................................................... 17 FIGURA 2.3 DIAGRAMA DEL MÓDULO DE ADQUISICIÓN..................................................................... 18 FIGURA 2.4 DIAGRAMA DEL MÓDULO DE CONTROL.......................................................................... 20 FIGURA 2.5 DIAGRAMA DEL MÓDULO DE VISUALIZACIÓN VGA ......................................................... 22 FIGURA 2.6 DIAGRAMA DE BLOQUES GENERAL DEL SMSF .............................................................. 25 FIGURA 2.7 DISEÑO DEL SMSF EN SYSTEM GENERATOR ................................................................ 25 FIGURA 2.8 DISEÑO DEL BLOQUE DE FILTRADO Y DIEZMADO EN SYSTEM GENERATOR ..................... 26 FIGURA 2.9 DISEÑO DEL BLOQUE DE ENVENTANADO Y SU CONFIGURACIÓN ..................................... 28 FIGURA 2.10 DISEÑO DEL BLOQUE DE FFT Y SU CONFIGURACIÓN ................................................... 29 FIGURA 2.11 CÁLCULO DE LA MAGNITUD DE LA FFT. ....................................................................... 30 FIGURA 2.12 VISUALIZACIÓN DE UNA SEÑAL CON MATLAB................................................................ 31 FIGURA 3.1 SEÑALES DEL CIRCUITO DE ATENUACIÓN Y ACONDICIONAMIENTO .................................. 33 FIGURA 3.2 DIAGRAMA DE TIEMPO PARA EL S2PCTRL EN EL MÓDULO DE ADQUISICIÓN ....................... 34 FIGURA 3.3 VISUALIZACIÓN DE LA SEÑAL EN EL VGA ....................................................................... 35 FIGURA 3.4 VISUALIZACIÓN DE LA SEÑAL EN EL VGA Y OSCILOSCOPIO............................................. 35 FIGURA 3.5 SMST-DISPOSITIVO TERMINADO.................................................................................. 37 FIGURA 3.6 FLUJO DE TRABAJO DE LOS FILTROS PARA UNA SEÑAL DE 2.5 KHZ ................................ 38 FIGURA 3.7 FLUJO DE TRABAJO DE LOS FILTROS PARA UNA SEÑAL DE 4 KHZ. .................................. 39 FIGURA 3.8 GENERACIÓN DE LA VENTANA DE BLACKMAN EN SYSGEN ............................................. 40 FIGURA 3.9 TIPOS DE ENVENTANADOS EN DOMINIO DE TIEMPO Y FRECUENCIA .................................. 41 FIGURA 3.10 VISUALIZACIÓN DE UNA SEÑAL: CON SYSGEN Y CON MATLAB . ..................................... 42 FIGURA 3.11 GENERACIÓN DE LA CO-SIMULACIÓN .......................................................................... 43 FIGURA 3.12 DISEÑO IMPLEMENTADO EN EL FPGA CS2VP30 BAJO CO-SIMULACIÓN ......................... 44 8 LISTA DE TABLAS TABLA 1.1 TABLA 2.1 TABLA 2.2 TABLA 2.3 TABLA 3.1 TABLA 3.2 TABLA 3.2 CARACTERÍSTICAS DE LOS DISPOSITIVOS....................................................................... 13 SEÑALES DE MAYOR IMPORTANCIA................................................................................ 18 MODOS DE OPERACIÓN DEL SMST ............................................................................... 21 CARACTERÍSTICAS DE LOS FILTROS ............................................................................... 27 MEDICIONES CON EL OSCILOSCOPIO COMERCIAL Y CON EL SMST BASADO EN EL FPGA . 37 CARACTERÍSTICAS DE LAS VENTANAS ESPECTRALES ..................................................... 41 RECURSOS ESTIMADOS DE HARDWARE PARA EL DISEÑO DEL SMSF .............................. 41 CAPITULO I Análisis en el Dominio Temporal y en el Dominio de la Frecuencia. En este capítulo se presentan las características principales de interés en ingeniería, tanto para señales en el tiempo como en frecuencia. Los principales factores que se pueden encontrar en una señal eléctrica (Amplitud, Frecuencia, Periodo) son descritos a continuación. 1.1 Introducción. Para visualizar fenómenos transitorios, así como formas de ondas en circuitos eléctricos y electrónicos se utiliza un osciloscopio. Un osciloscopio puede medir un gran número de fenómenos, provisto del transductor adecuado será capaz de darnos el valor de una presión, ritmo cardiaco, potencia de sonido, nivel de vibraciones en un vehículo, etc [1]. 9 No obstante, a pesar de las posibles diferencias existentes, todos los osciloscopios presentan unos principios de funcionamiento comunes. Los de uso más generalizado son los que podríamos definir como osciloscopios básicos que son aquellos que presenta información de la amplitud y frecuencia de la señal. El análisis de una señal en el modo temporal o en el dominio del tiempo con ayuda de un osciloscopio permite conocer parte de la información contenida en una señal compleja, como es el caso de una señal modulada. En el modo temporal no se puede conocer las componentes de frecuencia que conforman a la señal compleja, pero si se puede visualizar características importantes de ella tales como la amplitud de la señal y su periodicidad. El Analizador de Espectros es un instrumento que se basa en el análisis en el dominio de la frecuencia y que permite ver en una pantalla en forma simple y rápida las frecuencias de las armónicas que componen una señal compleja, y además permite conocer la relación entre esas componentes, mediante bastones presentados en la pantalla, cuya amplitud es proporcional a la amplitud de los armónicos. Con éste instrumento se puede llegar a frecuencias muy altas con gran precisión, pudiéndose ver hasta señales de Gigahertz. La representación en el dominio de la frecuencia de una señal sinusoidal pura será un bastón único, tal como se muestra en al grafica de la figura 1.1. 10 Figura 1.1 Dominio del Tiempo y de Frecuencia de Señales. Fuente: U.T.N.-F.R.M., Mediciones con Analizador de Espectro de RF-TP6, 2002. 1.2 Dominio Temporal. Existe un término general para describir un patrón que se repite en un determinado tiempo: señal periódica. Existen señales de sonido, señales oceánicas, señales cerebrales y por supuesto, señales de tensión conocida también como señales eléctricas. Un osciloscopio mide estas últimas [2]. El osciloscopio no es más que un instrumento para la visualización y medición de señales eléctricas en el dominio del tiempo. En otras palabras, se pueden ver formas de una señal en él. Una señal eléctrica siempre se presentará con el tiempo en el eje horizontal (X) y la amplitud en el eje vertical (Y). La forma de onda nos proporciona una valiosa información sobre la señal. En cualquier momento podemos visualizar la amplitud que alcanza y, por lo tanto, saber si el voltaje ha cambiado en el tiempo (si se observa, por ejemplo, una línea horizontal podremos concluir que en ese intervalo de tiempo la señal es constante). Con la pendiente de las líneas diagonales, tanto en flanco de subida como en flanco de bajada, se puede conocer la velocidad en el paso de un nivel a otro, pueden observarse también cambios repentinos de la señal (ángulos muy agudos) generalmente debidos a procesos transitorios [2]. Es así que en el dominio temporal los elementos más característicos de una señal eléctrica son: la amplitud, la fase y la frecuencia. 1.2.1 Amplitud de Señales [2]. Voltaje es la diferencia de potencial eléctrico entre dos puntos de un circuito. Normalmente uno de esos puntos suele ser tierra (GND, 0v), pero no siempre, por ejemplo se puede medir el voltaje pico a pico de una señal eléctrica (Vpp) como la diferencia entre el valor máximo y mínimo de esta. La palabra amplitud significa generalmente la diferencia entre el valor máximo de una señal y tierra. En la serie 11 de valores que experimenta una corriente alterna o una fuerza electromotriz senoidal, en el transcurso de un ciclo, el más alto posible valor es por ejemplo cuando el inductor corta el mayor número posible de líneas de fuerza. Este valor se denomina "Valor máximo" y es positivo a 90 º y negativo a 270 º eléctricos. Se llama valor instantáneo al valor de la corriente o del voltaje en un momento cualquiera. El valor máximo es un valor instantáneo, lo mismo que el valor de cero y cualquier otro comprendido entre estos dos. Desde el punto de vista práctico, es de gran importancia el "valor efectivo' o RMS, que es el valor que registran los instrumentos de medición para corriente alterna y se lo puede calcular multiplicando 0.707 (también 1/√2) por el voltaje pico de la señal. El valor RMS es el que produce el mismo efecto térmico (de calor) que el de una corriente directa. El valor medio de una señal alterna senoidal pura es cero, dado que el semi-ciclo positivo es igual y de signo contrario al semi-ciclo negativo. De ahí que cuando se habla de valor medio siempre se refiera al valor medio de una semi-onda. El valor medio de una senoide simétrica se define como la media algebraica de los valores instantáneos durante un semiperiodo. También podemos decir que el valor medio es una ordenada tal que el área del rectángulo a que da lugar es igual al área del semiperiodo [3]. Figura 1.2 Amplitud de una señal eléctrica. Fuente: http://www.unicrom.com/Tut_la_corriente_alterna__.asp 1.2.2 Fase de una Señal [2]. 12 La fase se puede explicar mucho mejor si consideramos la forma de la señal como senoidal. La señal senoidal se puede extraer de la circulación de un punto sobre un círculo de 360 º. Un ciclo de la señal senoidal abarca los 360 º. Cuando se comparan dos señales senoidales de la misma frecuencia puede ocurrir que ambas no estén en fase, o sea, que no coincidan en el tiempo los pasos por puntos equivalentes de ambas señales. En este caso se dice que ambas señales están desfasadas, pudiéndose medir el desfase con una simple regla de tres. Figura 1.3 Fases de una señal eléctrica con igual frecuencia. Fuente: http://www.elo.utfsm.cl/lsb/elo102/labs/sinusoides.htm 1.3 Dominio en la Frecuencia [5]. El dominio de la frecuencia es un término usado para describir la señal en función de la variable independiente ω, en este caso en función de un valor frecuencial. Un gráfico del dominio temporal muestra la evolución de una señal en el tiempo, mientras que un gráfico frecuencial muestra las componentes de la señal según la frecuencia en la que oscilan dentro de un rango determinado y su gráfico se denomina espectro. Una representación frecuencial incluye también la información sobre el desplazamiento de fase que debe ser aplicado a cada frecuencia para poder recombinar las componentes frecuenciales y poder recuperar de nuevo la señal original. El dominio de la frecuencia está relacionado con la transformada de Fourier, las cuales permiten descomponer una señal en un número finito o infinito de frecuencias 13 1.4 Transformada de Fourier. La transformada de Fourier [5] se utiliza para pasar al dominio frecuencial una señal, para así obtener información que no es evidente en el dominio temporal. Se demuestra matemáticamente que una señal periódica se puede descomponer en una suma de senos y cosenos formando una base ortogonal, de esta forma, señales como la voz se pueden descomponer en un sumatoria de señales trigonométricas. El conjunto de constantes que multiplican a cada frecuencia forman el espectro de frecuencias Por otro lado, hay que mencionar que existen Analizadores de Espectro cuya característica principal es contar con dispositivos digitales tales como DSPs o FPGAs [6]. En los casos de estos dispositivos uno de los aspectos básicos de un Analizador es la utilización de un bloque que calcule los armónicos característicos de una señal mediante la Transformada de Fourier. En esta sección se presenta varios métodos para computar la Transformada Discreta de Fourier (DFT) eficazmente. En vista de la importancia de la DFT en varias aplicaciones de procesamiento digital de señales, tales como filtración lineal, análisis de correlación, y análisis del espectro, su cómputo eficaz es un tema que ha recibido la atención considerable por muchos matemáticos, ingenieros y científicos. Hablando matemáticamente la notación X(k), representa los coeficientes de Fourier de x(n). Básicamente, el problema computacional para la DFT [7] es calcular la secuencia {X(k)} de N números complejos estimados teniendo en cuenta otra secuencia de datos {x(n)} de longitud N, según la fórmula, N 1 x(n).WNkn , 0 ≤ k ≤ N-1 X(k) = n 0 WN = e-j2π/N (I.1) En general, la secuencia de datos x(n) es también asumido como valores complejos. Similarmente, la Transformada Discreta de Fourier Inversa (IDFT) se vuelve: 14 N 1 x(n) = 1 N n 0 X (k ).WN nk , 0 ≤ n ≤ N-1 (I.2) Así la DFT y la IDFT envuelven básicamente el mismo tipo de cálculo, por lo que el debate de los algoritmos computacionales eficientes para la DFT es aplicable al cálculo eficiente de la IDFT también. Observemos que para cada valor de k, el cálculo directo de X(k) involucra N multiplicaciones complejas (4N multiplicaciones reales) y N-1 adiciones complejas (4N-2 adiciones reales). Por consiguiente, para computar todos los N valores de la DFT requiere N2 multiplicaciones complejas de N2 - N adiciones complejas. El cálculo directo de la DFT es básicamente ineficiente principalmente porque no explota la simetría y las propiedades de periodicidad del factor de fase W N. En particular, estas dos propiedades son: Propiedad de Simetría: WNk Propiedad de Periodicidad: N/2 WNk = N = WNk WNk (I.3) (I.4) Los algoritmos computacionalmente eficientes descritos en este sección, conocido colectivamente como algoritmos de la Transformada Rápida de Fourier (FFT), explotan estas dos propiedades básicas del factor de fase. 1.4.1 Algoritmos de la FFT [7]. Algunos de los algoritmos usados en la FFT serán mencionados a continuación. El núcleo de la FFT usa la descomposición de Radix-4 y de Radix-2 para computar la DFT. Para las dos soluciones de fase, el método de diezmado en el tiempo (DIT) es usado, mientras que el método de diezmado en frecuencia (DIF) es usado para la solución de streaming o transmisión continua. Cuando se usa Radix-4, la FFT consta de etapas de log4 (N), con cada etapa contiene N/4 de Radix–4 butterflie1. El tamaño de los puntos que no son potencia de 4 necesita una etapa de Radix-2 adicional para combinar los datos. 1 Butterflie: Variante de cálculo de Radix-4 y Radix-2 en forma de mariposa 15 Una FFT que usa Radix-2 tiene etapas de log2 (N), con cada etapa que contiene N/2 de Radix-2 butterflie. La FFT inversa (IFFT) es computada conjugando los factores de fase. Con esta información, se hará la comparación de los dos distintos algoritmos empezando con el Radix-4 y luego con el Radix-2. 1.4.1.1 Radix-4 [8]. Con esta solución, el núcleo de la FFT usa un bloque de procesamiento de Radix-4 y la cual tiene dos procesos (Figura 1.4). Un proceso está cargando y/o descargando los datos. El segundo proceso es calcular la transformada. Los datos de E/S y el procesamiento no son simultáneos. Cuando la FFT es iniciada, los datos son cargados. Después de que una trama completa haya sido cargada, el núcleo computará la FFT. Cuando el cálculo ha terminado, los datos pueden ser descargados ahora. Durante el proceso de cálculo, los datos cargados y descargados no pueden tener lugar al mismo tiempo. Los datos que se cargan y los procesos de descargar pueden solaparse si los datos son descargados en dígito de orden inverso. 16 Figura 1.4 Radix – 4, Burst E/S [9]. Fuente: Xilinx, Fast Fourier Transform v5, 2007. 1.4.1.2 Radix-2 [8]. Esta arquitectura usa un bloque de procesamiento de Radix-2 (Figura I.5) y tiene una arquitectura Burst 2E/S como en la versión de Radix-4. Después de que la trama de datos es cargado, el flujo de datos de entrada debe detenerse hasta que el cálculo de la transformada sea terminado. Entonces, los datos pueden ser descargados. Como con Radix-4, en la arquitectura Burst E/S, los datos pueden ser simultáneamente cargados y descargado si los resultados son presentados en bit en orden inverso. Esta solución soporta tamaños de punto N = 8 - 65536 y usa un mínimo de bloques de memoria. Tanto las memorias de datos como las memorias de factor de fase pueden estar en Bloques de Memoria o Memoria Distribuida (para tamaños de punto inferior o iguales a 1024). 2 Burst: Arquitectura cuyas entradas de datos son de transmisión continua 17 Figura 1.5 Radix – 4, Recursos Mínimos [9]. Fuente: Xilinx, Fast Fourier Transform v5, 2007. 1.5 Instrumentos de Medición. Los instrumentos más comunes de medición y visualización de señales ya sean en el dominio del tiempo como en el de la frecuencia, son los Osciloscopios y los Analizadores de Espectros respectivamente. Su funcionamiento puede ser de tipo analógico como digital, y llegando a visualizar señales de alta frecuencia (en orden de MHz para los Osciloscopios y en GHz para los Analizadores de Espectro). Entre las características principales de un osciloscopio es la capacidad de visualizar señales variantes en el tiempo, así como medir su nivel de voltaje (amplitud de la señal) y su periodicidad. Existen funciones adicionales especialmente para los osciloscopios digitales, como las funciones Hold, Triggering, Zoom y almacenamiento de datos en memoria. La función Hold sirve para congelar la señal en pantalla en un tiempo determinado para así poder ver cambios pequeños y no repetitivos de la señal a analizarse. En cambio, la función Triggering permite poder estabilizar la señal y tener así una adecuada visualización de la misma, esta función es muy útil para poder calcular la amplitud y frecuencia de la señal. La función de Zoom permite realizar una ampliación de la visión de la señal 18 en factores de 10:1 a 1:16 por lo general, variando de acuerdo a los fabricantes de cada osciloscopio. Por último, un módulo de memoria es utilizada para recopilar los datos de una señal, lo que permite almacenar/recuperar las señales para utilizarlas posteriormente, exportar al portapapeles y compartir dicha información con programas de computador, imprimir los resultados y sus parámetros [15]. En cambio, entre las características principales que cuenta un Analizador de Espectros es la visualización y medición de las componentes espectrales de una señal. Por lo general, su escala para medir la amplitud está dada en dBm o en escala logarítmica, existiendo analizadores con la capacidad de escoger entre estos tipos de escala. Otra característica es el ancho de banda, llegando a trabajar en rango de frecuencias del orden de KHz hasta los GHz, y además de contar con la capacidad del Zoom espectral para enfocarse en una determinada zona del espectro de una señal. Los analizadores de espectro modernos cuentan con la habilidad de poder interactuar con el PC para transferencia y almacenamiento de datos. Hablando ya de algunas de las aplicaciones prácticas más comunes para los Analizadores de Espectro se puede mencionar: medidas de potencia de canal, medidas en cables, medidas de Potencia TDMA, medidas de potencia y análisis escalar de redes entre otras [1]. 1.6 Arquitectura de un FPGA [10]. La mayoría de los FPGA3 se basan en SRAM4 y pueden por lo tanto ser programadas muy fácilmente. Debido que se basan en SRAM, los FPGA son volátiles, por lo tanto, deben ser programados cada vez que la energía es aplicada. Esto se logra con otra parte del circuito que recarga la configuración del bitstream, tal como una PROM5. La configuración de bitstream guardado en la SRAM controla las conexiones hechas y también los datos para ser guardados en la look-up tables (LUTs). Las LUTs son esencialmente pequeños memorias que pueden computar funciones lógicas arbitrarias. Cada fabricante tiene un nombre distinto para su bloque básico, pero la unidad fundamental es la LUT. Xilinx tienen los Bloques de Lógica 3 FPGA: Field Programmable Gates Array SRAM: Static Random Access Memory 5 PROM: Programmable Read-Only Memory 4 19 Configurable (CLBs) organizadas en una matriz. Los bloques de lógica configurables de un FPGA son en general localizados en un arreglo de estilo de isla. Cada bloque lógico en la matriz está conectado con los recursos de direccionamiento controlados por una matriz conmutada de interconexión. Con este diseño de estilo de isla, un gran rango de conexiones pueden ser hechas entre recursos. Una desventaja para esta estructura de direccionamiento flexible es que a diferencia de los CPLD6, las rutas de señal no son fijas de antemano, lo que puede resultar en sincronización imprevisible. Cada CLB en un FPGA Xilinx abarca cuatro slices lógicos, que por turno contienen dos generadores de función de 4 entradas, acarreo lógico, compuertas de lógica aritmética, amplios multiplexores de funciones y dos elementos de almacenamiento. El LUT es capaz de implementar cualquier función Booleana definida arbitraria de cuatro entradas y los retrasos de propagación es por lo tanto constante sin considerar la función. Cada slice también contiene flip-flops y una cadena de acarreo rápido. La lógica de acarreo rápido dedicado permite que el FPGA realice circuitos de aritmética muy rápidos. La arquitectura de la familia Spartan 3 y XUP Virtex II Pro consta de cinco elementos funcionales programables fundamentales: Bloques de Lógica Configurable (CLBs) que contienen RAM basadas en Look-up Tables (LUTs) para implementar elementos de lógica y almacenamiento que pueden ser usados como flip-flops o cerrojos. Los CLBs pueden ser programados para efectuar una gran variedad de funciones lógicas como almacenamiento de datos. Bloques de entrada / salida (IOBs) la cuales controlan la circulación de los datos entre los pines de E/S y la lógica interna de los dispositivos. Cada IOB soporta la circulación de datos bi-direccionales más la operación de 3 estados. El bloque RAM provee almacenamiento de datos en forma de 18 Kbit en bloques de doble puerto. Bloques Multiplicadores que aceptan dos números binarios de 18 bits como entradas y calculan el producto. 6 CPLD: Complex Programmable Logic Device 20 Los bloques de Digital Clock Manager (DCM) proveen la auto calibración, completa soluciones digitales para distribuir, retrasos, multiplicaciones, divisiones y desplazamiento de fase de señales de reloj. Un anillo de IOBs rodea una matriz regular de CLBs. Cada columna está formada por algunos bloques de RAM de 18 Kbit; cada bloque es relacionado con un multiplicador dedicado. Los DCMs son coloca Figura 1.6 Arquitectura de los FPGA. Fuente: Digilent, Spartan-3 Starter Kid Board User Guide, 2005. La familia de Spartan 3 y de la XUP Virtex II PRO tiene como característica una rica red de conectores e interruptores que interconectan todos los cinco elementos funcionales, transmitiendo señales entre otros. Cada elemento funcional tiene asociada una matriz de conmutación que permite conexiones múltiples para el direccionamiento. 1.6.1 Características Técnicas de los FPGA Spartan 3 y Virtex II Pro. Sabiendo ya los cinco elementos funcionales programables fundamentales de las tarjetas Spartan 3 y Virtex II Pro, se puede hacer una diferenciación de las características técnicas de éstos FPGA tomando en cuenta los elementos más relevantes. En la tabla 1.1se indica las diferencias entre las dos distintas tarjetas. 21 Tabla 1.1 Características de los Dispositivos. CARACTERÍSTICAS SPARTAN-3 VIRTEX II PRO XC3S200 XC2VP30 Slices 1920 13969 Array Size 24x20 80x46 RAM Distribuida 30 Kb 428 Kb 12 136 216 Kb 2448 Kb DCMs 4 8 PowerPC RISC Cores - 2 Multi-Gigabit Transceivers - 8 VGA/XSGA Si Si 10/100 Ethernet No Si Puerto Serial Si Si PS/2 KBD & MOUSE Si Si ADC/DAC Incorporados No Si Modelo Bloques Multiplicadores Bloques RAM Fuente: Digilent, Spartan-3 Starter Kid Board User Guide, 2005. Xilinx, Hardware Reference Manual XCPV2P, 2005. En base a la tabla 1.1 se puede observar que la tarjeta XUP Virtex II Pro es muy superior en cuanto a características de funcionamiento que la Spartan-3, pero en cambio las tarjetas de la familia Spartan son muy utilizadas por su fácil uso y su costos reducidos. Para la adquisición de señales eléctricas, el FPGA Virtex II Pro cuenta con el códec de audio AC97 el mismo que incorpora un ADC y un DAC que permite contar con todas las funcionalidades analógicas de un sistema de audio. En su defecto, la Spartan-3 no cuenta en sí incorporado un sistema I/O analógico y por tal motivo se debe anexar una tarjeta periférica externa como la tarjeta AIO1, la misma que cuenta con un ADC, un DAC, 4 amplificadores operacionales y un buffer [12]. De lo anterior, se colige que se eligió la tarjeta Spartan-3 por sus reducidos costos, para comprobar sus funcionalidades con respecto a los periféricos E/S externos y para comprobar el funcionamiento de algoritmos de procesamiento para la visualización de datos en el VGA. Por otro lado, se opto por la tarjeta Virtex II Pro, especialmente por sus características de capacidad y alto grado de procesamiento, y además porque en las pruebas preliminares, los resultados arrojan que la tarjeta Spartan-3 es insuficiente en recursos para soportar el algoritmo FFT. 22 CAPITULO II Implementación de algoritmos en la FPGA. En el presente capítulo se discutirá sobre la implementación del proyecto en el FPGA, algoritmos de control para el sistema de monitoreo temporal, y algoritmos para la extracción de características frecuenciales de una señal en el tiempo, con la explicación de cada uno de sus elementos y los dispositivos necesarios para el funcionamiento. 2.1 Introducción. Este capítulo presenta el diseño de un sistema de adquisición de señales para realizar un análisis en el dominio temporal el cual como aplicación final se empleará como un sistema de monitorización de señales en el tiempo para un FPGA Digelentic Spartan-3 serie XC3S200 [10]. Además se presenta un diseño de un sistema de adquisición de señales para realizar un análisis en el dominio de la frecuencia el cual se efectuará en la FPGA XUP Virtex II Pro serie XC2VP30 bajo el entorno de co-simulación [11]. 2.2 Diseño del Sistema de Monitorización de Señales en el Tiempo. Se ha diseñado un sistema de monitorización de señales en el tiempo (SMST) en el rango de frecuencia de 0 a 3 KHz para la tarjeta Spartan-3 XC3S200, el sistema cuenta con capacidades de adquisición de señales analógicas, conversión A/D, procesamiento de la señal y la generación de señales de video. Para la adquisición de señales analógica y para realizar la conversión de análogo a digital (A/D) se utilizará la tarjeta periférica AIO17 [12] la misma que se conecta al FPGA; los valores obtenidos de la conversión A/D se envían hacia la Spartan-3 XC3S200 y guardados en un módulo de memoria llevado a cabo en el FPGA; un controlador de video, también implementado en el FPGA, extrae estos valores y genera las señales de video apropiados que se envían al puerto VGA y 7 AIO1: Analog I/O up to 1MHz 23 usados para mostrar una imagen en un monitor conectado a la tarjeta FPGA. Una interacción básica con el usuario es posible a través de los botones e interruptores de la tarjeta Spartan-3 XC3S200. El diseño del sistema de monitorización de señales en el tiempo lleva a cabo los rasgos comunes de un osciloscopio convencional básico, tales como el ajuste en la tasa de muestreo, así como las funciones Hold y Triggering. Es así que el diseño reúne todos los requisitos para emular a un osciloscopio, y se ha verificado a través de la simulación y la implementación física. El diseño consta de métodos de diseños en VHDL8, esquemático y librerías de Xilinx para el FPGA Spartan-3 XC3S200. Cabe mencionar que el uso de VHDL permite y ayuda a dar una descripción lógica de algún subsistema hardware el mismo que se pueda implementar en una FPGA o un algoritmo DSP corriendo en una FPGA. En este caso, permite hacer una descripción de la lógica que controlan a una sistema de monitoreo de señales en el tiempo basado en las características de funcionamiento de un osciloscopio. Hay que mencionar, que el diseño de este proyecto no necesariamente es exclusivo para el FPGA Spartan-3 XC3S200 ya que puede ser compatible con otros dispositivos de la familia Spartan o incluso para familias distintas como la Virtex. Los circuitos de acondicionamiento de la señal para la tarjeta periférica AIO1 se diseñaron con el uso de Workbench Multisim 9. La transferencia del diseño al FPGA se llevó a cabo con la herramienta Xilinx Impact 8.1i a través de un cable JTAG paralelo. Las señales analógicas se obtuvieron a través de una tarjeta de sonido de PC (especialmente por la versatilidad en el manejo de estas señales), utilizando un archivo sub-vi del software LabView 8.2 o por el software Cool Edit Pro 2.1, los cuales corren en Windows XP o con la utilización de un generador de señales con una señal máxima de 12 Vpp. El diseño del sistema se lo puede presentar en tres etapas: la etapa de adquisición y adecuación la cual se basa en hardware empleando circuitos electrónicos, una etapa de procesamiento la cual lo realiza el FPGA y su diseño se basa en la programación de la Spartan-3, y finalmente una etapa de visualización en la cual se conecta un monitor VGA estándar al FPGA para visualizar los datos. Esto se puede ver en la figura 2.1 donde se detalla el diagrama general para el SMST. 8 VHDL: Lenguaje de Descripción de Hardware de VHSIC 24 ETAPA DE ADQUISICIÓN Y ADECUACIÓN Adquisición de la señal Adecuación de la señal ETAPA DE PROCESAMIENTO EN EL FPGA Módulo de Adquisición Conversión A/D Módulo de Control Módulo de VGA_Display ETAPA DE VISUALIZACIÓN Figura 2.1 Diagrama de Bloques General del SMST Fuente: El Autor El Sistema de Monitoreo de Señales en el Tiempo tiene el siguiente flujo de trabajo: 1) Las señales que podemos ingresar al sistema como prueba pueden ser generadas a través de un generador de ondas, a través del envío por medio del PC de señales analógicas por medio de la tarjeta de sonido, o a través de la obtención de señales eléctricas de algún circuito como un generador de funciones; haciendo énfasis que el umbral de la señal es de 12 Vpp, y a una frecuencia máxima de 3 KHz. 2) La señal analógica se transfiere a la entrada del conector del circuito de adecuación vía cable de audio tipo “jack to jack”. 3) Las señales a la salida del circuito de adecuación son conectadas a la tarjeta periférica AIO1 para dirigirlas a las entradas del circuito conversor A/D (AD7823). 4) El circuito conversor A/D en la tarjeta periférica AIO1 recibe las señales de control apropiadas del FPGA y realiza la conversión digital, saliendo un bit a la vez (transmisión serial). Se utiliza la transmisión serial de datos especialmente para aprovechar los recursos de pines de la tarjeta. Un circuito de serial a paralelo llevado a cabo en el FPGA recoge estos bits y construyendo un byte que se guarda en una memoria de video que también reside en el FPGA (la conversión de serial a paralelo es necesaria para ganar velocidad de procesamiento de los datos dentro de la tarjeta FPGA). 5) Un controlador de VGA analiza la memoria de video y basado en los valores guardados allí genera las señales apropiadas que son enviadas al puerto VGA y crea una imagen en el monitor. 6) La interacción del usuario toma forma por vía de los interruptores y botones de la tarjeta Spartan-3 dónde el operador puede cambiar la tasa de muestreo de la señal analógica y puede escoger diferentes modos de operación. La etapa de adquisición y adecuación de la señal se la tratará más a fondo en el capítulo de resultados, en términos generales consta de un circuito cuyo objetivo 25 principal, por medio de tres escalas distintas, atenuar la señal a un nivel de voltaje apropiado, en el cual pueda trabajar el ADC presente en la tarjeta periférica AIO1 para una óptima digitalización de la señal. 2.2.1 Etapa de procesamiento en la FPGA Ahora se explicará el funcionamiento de la etapa de procesamiento en el FPGA y sus principales características. ETAPA DE PROCESAMIENTO EN EL FPGA MÓDULO DE ADQUISICIÓN MÓDULO DE CONTROL MÓDULO DE VISUALIZACIÓN VGA LEDs Figura 2.2 Diagrama de Bloques del SMST en el FPGA Fuente: El Autor. El gráfico superior indica el diagrama de bloques del Sistema de Monitorización de Señales en el Tiempo (SMST) programado internamente en el FPGA (Figura 2.2) donde se muestra la separación del diseño en tres módulos funcionales principales: Módulo de Adquisición: implementa la comunicación con el conversor AD7823 y suministra los valores digitalizados al módulo de “Visualización”. Módulo de Control: genera el muestreo de la señal requerido por el módulo de adquisición a la tasa especificada por el usuario; además controla la dirección de memoria de video dónde el valor digitalizado se escribirá y se conmutará entre los diferentes modos de funcionamiento. Módulo de Vga_display: lee la memoria de video y crea las señales de VGA requeridos por el monitor externo. Las señales de mayor importancia son descritas brevemente en la tabla 2.1. 26 Tabla 2.1 Señales de mayor importancia. Señales mclk rst sclk convst din hs vs red grn blu ledg led(7:0) an(3:0) ssg(7:0) smpupbtn smpdownbtn hold trigger_en Modos Imput Clock Asynchronous input Output Output Input Output Output Output Output Output Output Output Output Output Asynchronous input Asynchronous input Asynchronous input Asynchronous input Descripción Entrada del Reloj Principal; 50MHz Reinicio Principal del Sistema Señal de Reloj al AD7823 Señal de Inicio de Conversión del AD7823 Datos de Salida del AD7823 Señal de Sincronización Horizontal del VGA Señal de Sincronización Vertical del VGA Señal Red VGA Señal Green VGA Señal Blue VGA Señal Led gate Señales de Led Señal de Ánodo para un display de siete segmentos. Señal de un display de siete segmentos para un dígito. Sample up button; incrementa la tasa de muestreo Sample down button; decremento de la tasa de muestreo Señal Hold Señal Trigger enable Fuente: El Autor. 2.2.1.1 Módulo de Adquisición. El módulo de adquisición implementa una interface de comunicación con el conversor analógico a digital AD7823 que se encuentra en la tarjeta periférica AIO1. Está compuesto de dos partes, tal como es mostrado en Figura 2.3. El primer bloque es un controlador de conversión de datos de seriales a paralelos, diseñado en entorno gráfico esquemático llamado “s2pctrl”, este componente maneja las señales de control hacia el ADC como las señales de inicio de conversión llamada “convst” y la señal de reloj hacia el ADC llamada “sclk”, es síntesis le da la orden al ADC para que pueda enviar los datos al FPGA de manera que se pueda sincronizar el ADC con la frecuencia de trabajo del FPGA, debido a que ambos sistemas (ADC y FPGA) tienen un frecuencia de oscilación de reloj muy distintas. MÓDULO DE ADQUISICIÓN CONVERSOR DE SERIE A PARALELO “s2pctrl” ACUMULADOR DE BITS “SR8CE” Figura 2.3 Diagrama del Módulo de Adquisición. Fuente: El Autor. 27 El segundo bloque, es un registro de desplazamiento (shift register) estándar o también conocido como acumulador, se ha aprovechado el diseño optimizado de la librería de los programas de diseño microelectrónico de Xilinx para implementar este subsistema, de esta manera se puede optimizar y minimizar el tiempo de desarrollo de componentes para la implementación de un sistema complejo. Este elemento se conoce con el nombre genérico “SR8CE” que se usa para acumular los bits que vienen de la salida serial del circuito conversor y los almacena para formar un byte completo. El bloque conversor de serie a paralelo es principalmente implementado ya que cuando se requiera trabajar en la programación de los datos para su visualización en el VGA así como sus modos de operación (modos Hold y trigger) se necesitan que estos datos estén en formato de bytes, por lo que conjuntamente con el bloque acumulador se puede estableces este proceso. El bloque de control de serial a paralelo denominado “s2pctrl” está implementado en el archivo de programación VHD llamado “s2pctrl.vhd”. 2.2.1.2 Módulo de Control. Este módulo es el circuito de control principal del diseño, el cual conduce las señales de control y de dirección requeridos por los otros componentes, cumpliendo con los varios modos de operación seleccionados por el usuario. Esto es definido en el archivo de programación VHD fuente denominado “osc_ctrl.vhd”. Podemos decir que el propósito general del control del osciloscopio esta dado en: 1. Controlar la tasa de muestreo del conversor A/D. 2. Controlar que se muestre la señal. 3. Mostrar algunos parámetros del SMST y las modificaciones que realice el usuario. 4. Cambiar entre los modos de operación del SMST. Hay que indicar que el control del osciloscopio en su archivo fuente está compuesto por dos sub módulos: el primero ayuda a cambiar la tasa de muestreo del circuito A/D la cual está implementado en el archivo de programación VHD denominado “sr_tuner.vhd”, mientras que el segundo permite mostrar los valores en los displays de siete segmentos los cuales representan los microsegundos por 28 división en la pantalla necesarios para el cálculo de la frecuencia y el cual está implementado en el archivo fuente VHD nombrado como “ssgdisp.vhd”. MÓDULO DE CONTROL VARIAR TASA DE MUESTREO “sr_tuner” VISUALIZADOR EN DISPLAYS “ssgdisp” Figura 2.4 Diagrama del Módulo de Control. Fuente: El Autor. El módulo del circuito que controla la base de tiempo del Sistema de Monitorización de Señales en el Tiempo (SMST) está implementado en el archivo fuente VHD “sr_tuner.vhd”, en la que modificando la base de tiempo en efecto significa cambiar la tasa de muestreo, es decir especificando cuan a menudo la señal de muestreo se emite teniendo una interacción directa con el usuario ya que éste indica la variación de la tasa de muestreo en base a los botones pulsados en el FPGA, mientras se está instruyendo al módulo de adquisición para realizar una conversión adecuada de la señal. Este cambio de tasa de muestreo significa tener una mejor visualización de la señal, lo cual lleva a un adecuado cálculo de su amplitud así como de su frecuencia. Con respecto a los varios modos de operación (normal, hold, triggered) son implementados por un controlador de dirección de memoria, dónde el valor digitalizado proporcionados por el módulo de adquisición se supone que es escrito. La tabla 2.2 discute cuando los modos de operación aplican dada las señales “hold”, “trigger_en” y “trigger”, y cómo ellos afectan la dirección de memoria previamente mencionada. Cuando el Sistema de Monitorización de Señales en el Tiempo (SMST) está en el modo “Hold” (congelar la señal), la memoria de video no se refresca o actualiza. Éste congela el trazo de la señal en el monitor, porque el mismo contenido de la memoria de video se despliega una y otra vez, es decir que los valores digitalizados que llegan del módulo de adquisición no son guardados en la memoria de video. Con este modo de operación se tiene como finalidad hacer un análisis de la señal en un tiempo o evento determinado el cual no sea repetible. 29 Tabla 2.2 Modos de operación del SMST. Dirección < 639 Hold X Trigger_en Trigger X X Acción Address address+1 Descripción Modo Normal; dirección la es incrementada Modo Hold; actualización de la = 639 1 X X address 640 memoria de que prevenida es video especificando una dirección inválida Modo última = 639 0 0 X address 0 Normal; entrada de memoria alcanzada, la dirección es reseteada. Modo Triggered, no = 639 0 1 0 No cambia hay señal de trigger; la dirección no es incrementada. Modo Triggered con = 639 0 1 1 address 0 señal de trigger; la dirección es reiniciada. X = No importa Fuente: El Autor. Cuando el Sistema de Monitorización de Señales en el Tiempo está en el modo “triggered”, es susceptible a un evento específico asociado con la señal analógica. Cuando este evento ocurre, la señal “trigger” se afirma, resultando en que la dirección de memoria de video empieza a reiniciarse. El efecto del “triggering” es que el trazo de la señal analógica en la pantalla del monitor es estable, una inestabilidad eventual es el resultado de ruido que causa un “triggerring” prematuro. 30 Con estas funciones implementadas en el sistema de monitorización de señales en el tiempo se cumple con uno de los objetivos, el cual es el emular algunas de las funciones con las que cuenta un osciloscopio digital. 2.2.1.3 Módulo del Visualización VGA. El último bloque para el Sistema de Monitorización de Señales en el Tiempo es el módulo de visualización VGA, cuyo diagrama de bloque es mostrado en la figura 2.5, el cual ilustra que está compuesto de dos entidades: el bloque denominado memoria VGA (“vgamemory”) y el bloque denominado “VGA”. MÓDULO DE VISUALIZACIÓN VGA MEMORIA DEL VGA “vgamemory” VGA Figura 2.5 Diagrama del Módulo de Visualización VGA. Fuente: El Autor. La entidad llamada “vgamemory” (implementada en el archivo de programación fuente VHD llamado “vga_mem.vhd”) representa un módulo de memoria de puerto dual dónde los valores obtenidos de la conversión A/D son almacenados para empezarse a mostrar en la pantalla. La capacidad de la matriz de memoria es 640 bytes siendo de este tamaño debido a que cada valor en la matriz de la memoria representa un pixel en la pantalla teniendo una resolución de 640x480 pixeles. Cada entrada en la memoria corresponde a una columna en la pantalla. El valor contenido en la entrada respectiva denota la coordenada vertical del pixel que se encenderá en la columna correspondiente; por ejemplo si el valor de índice 20 en la matriz de memoria es 42, significa que el pixel encontrado a la intersección de columna número 20 y la hilera número 42 se encenderá. El contenido de la entidad denominada “vgamemory” es escrito por el módulo de adquisición y luego el contenido de la memoria es leído por el controlador del VGA, cuya descripción se detallará posteriormente. En el diseño, el uso de la memoria de VGA es imprescindible debido que los valores que se guardan en ella 31 son usados para el funcionamiento de los distintos modos de operación del SMST como lo son normal, hold y triggered, ya que estos modos utilizan la dirección de memoria de los datos para poder visualizarlos en la pantalla. Hay que indicar que para la aplicación del SMST entre sus características de funcionamiento son la visualización y medición de señales en el rango de 0 a 3 KHz, esto se debe al módulo de memoria ya que la capacidad como se mencionó anteriormente, de 640 bytes no es suficiente para almacenar los valores digitalizados de señales de mayor frecuencia y en especial el poder visualizarlos en pantalla. Una forma de superar este inconveniente es aumentar la capacidad de la memoria, pero eso significaría aumentar la resolución en la pantalla, lo cual sería un problema para visualizar los datos en la Spartan-3 ya que su puerto VGA sólo soporta una resolución de 640x480 pixeles [10]. La entidad del VGA (implementada en el archivo fuente VHD denominado “vga.vhd”) es un controlador de video que maneja las señales de video (“hs”, “vs”, “red”, “grn”, “blu”) [9] señaladas en la tabla 2.1 necesarios por un monitor externo. Basado en estas señales el monitor puede crear una imagen a color la cual se muestra en la pantalla. La implementación del VGA se extiende a un ya existente módulo de controlador de video, originalmente creado para la tarjeta Digilent Pegasus. Agrega señales para las coordenadas lógicas de un lugar en la pantalla (“x” y “y”) y reestructura las señales de color de video “red”, “grn” y “blu”, tal que ellos muestran una imagen diferente. Las coordenadas lógicas se obtienen substrayendo los contadores horizontales (hc) y verticales (vc), y los porches9 horizontales (hbp) y verticales (vbp) respectivamente. La coordenada lógica horizontal (x) denota una columna en la pantalla. Su valor es llevado al controlador a través de la señal de direccionamiento y se usa para dirigirse la memoria de video. El valor obtenido desde la memoria representa la coordenada lógica vertical que denota una fila en la pantalla. Por lo tanto, el trazo de la señal en la pantalla consistirá en píxeles encendidos que tienen las coordenadas iguales que corresponden a los pares [x, data]. 9 Porche: Espacio alto comprendido desde el borde superior o lateral del monitor. 32 2.3 Diseño del Sistema de Monitoreo de Señales en Frecuencia. El intento de este proyecto es el desarrollo de un Sistema de Monitorización de Señales en Frecuencia (SMSF) para el FPGA XUP Virtex II Pro serie XC2VP30 el cual el diseño cuenta con módulos de filtrado de la señal, módulo de enventanado, un módulo con la Transformada Rápida de Fourier de 512 puntos y la exportación hacia el entorno de Matlab para su visualización. Para la aplicación del sistema de monitoreo de señales en frecuencia, fue diseñado con la ayuda de System Generator 8.1 (herramienta de diseño gráfico para algoritmos DSP corriendo en una FPGA). La transferencia de datos para el presente diseño se hará vía cable JTAG USB, la cual se compiló para que pueda correr bajo co-simulación y las señales de entrada fueron generadas con ayuda de Simulink y del Software Cool Edit Pro 2.1. El diseño del sistema de monitorización de señales en frecuencia cuenta con los rasgos básicos de un analizador de espectros, tales como filtrado de la señal, diezmado y enventanado, cálculo de la FFT y extracción de las componentes espectrales de la señal. Es así que el diseño reúne todos los requisitos para emular a un analizador de espectros para bajas frecuencias, en este caso en el rango de 0 a 12 KHz. Hay que mencionar que el presente proyecto es de uso pedagógico, por lo que fue diseñado para funcionar en la banda de frecuencia de audio (20 Hz hasta 20 KHz), pero por prestaciones del FPGA Virtex II Pro en cuanto a capacidad de procesamiento y almacenamiento bajo el entorno de co-simulación basándose en la utilización de la herramienta System Generator, se trabajará entre el rango de 0 hasta los 12 KHz en la cual se consume gran parte de los recursos de la FPGA tal como se verá más adelante en el capítulo de resultados. En el Sistema de Monitoreo de Señales en Frecuencia (SMSF) se puede desglosar y mostrar internamente la lógica de operación de un sistema emulador de un Analizador de Espectro, en el cual se presenta el siguiente flujo de trabajo, tal y como se muestra en la figura 2.6. 33 ADQUISICIÓN DE LA SEÑAL MÓDULO DE FILTRADO MÓDULO DE ENVENTANADO CÁLCULO DE FFT VISUALIZACIÓN DE LA SEÑAL Figura 2.6 Diagrama de bloques General del SMSF. Fuente: El Autor. 1) La señal de entrada será producida por un archivo de audio, la misma que podrá ser editada por el software “Cool Edit Pro” o puede ser generada bajo el entorno Simulink de Matlab. 2) Luego la señal de audio ingresará al bloque de filtrado, el que permitirá eliminar el ruido presente en la señal para que así tener una señal más pura. 3) La señal filtrada pasará posteriormente a un bloque de enventanado, el cual permitirá eliminar las discontinuidades al principio y al final de los bloques de la señal a analizarse para de esta forma eliminar componentes espurios que degradan la señal. 4) Luego de eliminar y atenuar componentes de frecuencia parásitas, la señal llega hasta el bloque de la Transformada Rápida de Fourier (FFT), la que nos dará las componentes características de la señal. 5) Finalmente la señal a la salida de la FFT se exportará hacia Matlab para su visualización la misma que se hará bajo el entorno de co-simulación con el FPGA. Figura 2.7 Diseño del SMSF en System Generator. Fuente: El Autor. En la figura 2.7 se puede observar que el diseño en System Generator está divido en cuatro módulos o bloques principales: 34 Filtrado: es en donde se intentará eliminar el ruido proveniente de la señal de audio a través de una serie de filtros. Enventanado: con la ayuda de la ventana de Blackman se pretende eliminar las discontinuidades al inicio y al final de los bloques de la señal a analizarse. FFT: en éste bloque se obtiene la Transformada Rápida de Fourier de 512 puntos para obtener el espectro de la señal de audio. Visualización: la señal a la salida del bloque de la FFT es llevada a Matlab para ser graficada y comparada frente a la herramienta de visualización “Spectrum Scope” de System Generator. 2.3.1 Módulo de Filtrado y Diezmado. Después de que la señal de audio sea generada por el PC llega al módulo de filtrado el mismo que está compuesto por una serie de filtros [13] tal como se muestra en la figura 2.8. Figura 2.8 Diseño del Bloque de Filtrado y Diezmado en System Generator. Fuente: El Autor. Podemos observar que el bloque de filtrado está compuesto por los siguientes tipos de filtros: Pasa Bajos: este filtro está diseñado para que su ciclo de trabajo sea hasta los 3 KHz, es decir frecuencias superiores las atenuará o eliminará. 35 Pasa Bandas: el filtro presenta ciclo de trabajo entre 3 KHz hasta los 7 KHz, frecuencias fuera de éste rango serán eliminadas o atenuadas. Pasa Altos: este filtro mantiene su ciclo de trabajo en frecuencias superiores a los 7 KHz, pero en el sistema general será controlado por el bloque de Diezmado que lo limitará hasta los 12 KHz. Bloque Diezmado: En el proceso de diezmado, y para evitar aliasing en la señal diezmada, hay que filtrar previamente la señal a diezmar por un filtro pasa bajo con frecuencia de corte en éste caso de 12 KHz y donde el factor de diezmado es de 2. En la tabla 2.3 se puede observar las características de cada uno de los filtros las cuales fueron diseñadas con la herramienta FDATool de System Generator. Tabla 2.3 Características de los Filtros con FDATool. Tipo Pasa Bajos Pasa Bandas Pasa Altos Diezmado Orden 297 297 162 297 Fs (Hz) 48000 48000 48000 48000 Fpass1 (Hz) Fpass2 (Hz) 3000 3600 7000 7600 12000 Fuente: El Autor. Fstop1 (Hz) Fstop2 (Hz) 3300 3300 7300 7300 12500 - Hay que mencionar que los filtros están dispuesto es forma paralela tal como se observa en la figura 2.8, y las salidas de cada uno de los filtros son llevadas a un Multiplexor, el mismo que fue desarrollado su código en Matlab y exportado hasta System Generator por medio del bloque M-Code. Como se mencionó anteriormente, a la salida del Multiplexor se utiliza un bloque de diezmado, el mismo que está compuesto por un filtro pasa bandas con frecuencia de corte de 12000 Hz y el cual tiene un factor de diezmado de 2. La operación de diezmado modifican el número de muestras presentes en la señal, disminuyendo la velocidad de muestreo de la señal continua subyacente. Este tipo de operaciones son importantes en situaciones en las que, por ejemplo, existe un sobre-muestreo que hace posible deshacerse de parte de las muestras sin perder información. El filtro paso bajo presente en el diezmador tiene como misión evitar el posible “aliasing” causado por la reducción de la tasa de muestreo. Es decir, el descartar muestras puede no ser una operación invertible si la nueva velocidad de 36 muestreo no satisface el criterio de Nyquist, o lo que es lo mismo, si en frecuencia se produce solapamiento de espectros. 2.3.2 Módulo de Enventanado. Luego de que la señal haya sido filtrada y diezmada, su salida será multiplicada o aplicada a un bloque de enventanado, el mismo que utiliza la ventana de Blackman. El código para el enventanado se realizó en Matlab el cual es grabado en una variable “g” que es importando hacia System Generator por medio de una ROM tal como se muestra en la figura 2.9. Figura 2.9 Diseño del Bloque de Enventanado y su configuración. Fuente: El Autor. Ya sabemos que esta técnica es usada para obtener una mejor respuesta en el ancho del espectro de las muestras. La ventana de Blackman fue implementada, ya que permite la mejor adaptación [14] para el sistema de visualización de los resultados en Matlab en comparación con la ventana rectangular, la cual permitió diferenciar dos componentes espectrales en regiones cercanas, aunque como desventaja la ventana de Blackman cuenta con más carga computacional. 2.3.3 Módulo de la FFT. 37 Posteriormente que la señal salga del módulo de enventanado llega al módulo de FFT, en donde se realiza la Transformada Rápida de Fourier para obtener la respuesta espectral de las muestras tomadas de la señal de audio en el dominio de la frecuencia. La FFT descompone la DFT en pequeñas transformadas de N puntos, en donde N es el número de puntos por muestra. Con esto podemos indicar que entre mayor número de puntos exista en la FFT mayor será la exactitud de los armónicos en el dominio de la frecuencia de la señal a analizarse. En la figura 2.10 se muestra el módulo o bloque de la FFT y su configuración diseñado en System Generator con el Core FFTv3_1 de Xilinx. Figura 2.10 Diseño del Bloque de FFT y su configuración. Fuente: El Autor. El módulo FFT computa la transformada rápida de Fourier de 512 puntos en modo continuo; para ello se configura el Core FFTv3_1 de Xilinx como Radix-4 Streaming I/O. Se opta por no escalar la señal internamente en el procesador FFT y se extrae la señal “vout” para controlar el posterior cálculo de la magnitud. Se elige trabajar con el algoritmo Radix-4 ya que éste método brinda mayor exactitud en cuanto al cálculo y visualización de los datos para la FFT frente a otros algoritmos como Radix-2, aunque como desventaja representa mayor carga computacional. 38 Para el cálculo de la magnitud se emplea dos bloques Multiplicadores y un bloque AddSub en modo de Adición de la librería de System Generator para así poder calcular el módulo de la señal a la salida del bloque de la FFT, tal y como se observa en la figura 2.11. Figura 2.11 Cálculo de la magnitud de la FFT. Fuente: El Autor. Hay que mencionar por otro lado que la resolución de frecuencia de la FFT de N puntos es: fr = donde FS ; N (II.1) Fs es la frecuencia de muestreo y N el número de puntos de la FFT. Es así que la resolución de frecuencia de la formula II.1 para el presente diseño es de: fr = 2.3.4 48000 = 93,75 Hz 512 Módulo de Visualización. Finalmente después de encontrar la magnitud de la FFT de la señal de audio, estos valores son exportados hacia Matlab a través del bloque “To Workspace” para poder ser graficados y comparados con el “Spectrum Scope” de System Generator. Cabe señalar que la implementación se realizará bajo co-simulación, es decir se hará la simulación en System Generator mientras al mismo tiempo estará trabajando el FPGA con el mismo tipo de información. En la figura 2.12 se muestra la visualización de una señal de audio senoidal de 2.5 KHz graficada en Matlab. 39 Figura 2.12 Visualización de una señal con Matlab Fuente: El Autor. Como un limitante para poder visualizar la señal por medio de Matlab, se debe esperar a que concluya la co-simulación en System Generator, para que los valores enviados al Workspace estén listos y puedan ser leídos por Matlab. Cabe mencionar que se puede visualizar la señal con el “Spectrum Scope” de System Generator en tiempo real cuando se está ejecutando la co-simulación. 40 CAPITULO III Resultados. En el presente capítulo se hará un análisis de los resultados obtenidos en las distintas etapas tanto del Sistema de Monitoreo de Señales en el Tiempo (SMST) como del Sistema de Monitoreo de Señales en Frecuencia (SMSF). 3.1 Resultados en el SMST. En vista que el diseño del SMST es en su mayor parte desarrollado en esquemático, y en este tipo de programación no cuenta con mayores herramientas para la simulación, se centrará en éste capítulo en los resultados del diseño de hardware y en los resultados obtenidos en la visualización en el monitor o VGA. 3.1.1 Circuito de Atenuación y Acondicionamiento. Como se mencionó en el capítulo II, el circuito de atenuación y de acondicionamiento de la señal es muy importante, ya que permite atenuar y adecuar la señal que proviene de la tarjeta de sonido del PC o del generador de funciones a un nivel óptimo de voltaje, para así obtener una señal digitalizada real por medio del ADC. Este circuito fue desarrollado y simulado con el programa Multisim de Electronics Workbench, el cual es presentado en el Anexo E con su respectivo sustento matemático. El circuito de atenuación está compuesto por tres bloques, el primer bloque que es un conjunto de amplificadores operacionales en paralelo en modo inversor que permite realizar distintas atenuaciones para diferentes valores de voltaje de la señal de entrada representando de ésta forma la escala del Sistema de Monitoreo de Señales en el Tiempo por medio del switch1, el segundo bloque está compuesto por un operacional en modo inversor con entradas múltiples el cual suma la señales provenientes del bloque atenuador para formar una sola señal. Finalmente el último bloque consta de dos resistencias y cuatro diodos los cuales actúan como un limitador de voltaje, el mismo que impide un excesivo voltaje hacia el bloque de adecuación y así evitar dañar el ADC, siendo la señal de salida OUTC1. 41 El circuito de acondicionamiento se comporta como un atenuador no inversor con múltiples entradas [5] (en este caso con dos entradas) con la ayuda del amplificador operacional, el cual suma la señal que viene del circuito de atenuación OUTC1 con una señal continua VCC33 que es de 3.3 V, que proviene de la tarjeta AIO1, el mismo que controla a través del potenciómetro el nivel de desplazamiento vertical de la señal o “shift up”, para así adecuarla para el ADC. (a) (b) Figura 3.1 Señales del circuito de atenuación y acondicionamiento: (a) a la entrada del circuito de atenuación, (b) a la salida del circuito de acondicionamiento Fuente: El Autor. En las figuras 3.1 se observa las señales tanto a la entrada del circuito de atenuación para una señal de 8 V como a la salida del circuito de acondicionamiento ya adecuada, el mismo que es llevada por ADIN+ y ADIN- hacia el ADC en la tarjeta periférica AIO1 conectada a la Spartan-3. 3.1.2 Diagrama de Tiempos en el Módulo de Adquisición. Como se indicó en el capítulo II el módulo de Adquisición es el encargado de dar las señales de control para el AD7823, y está compuesto internamente por dos sub-módulos: un bloque denominado “s2pctrl” y otro bloque llamado “SR8CE”. 42 Para mantener el AD7823 en el Modo 1 de operación (Muestreo de Alta Velocidad), las señales de control generados por el controlador de serie a paralelo denominado “s2pctrl” deben tener el tiempo mostrado en la figura 3.2. Al recibir la señal de de muestreo llamado “sample” desde el módulo de control del osciloscopio, el bloque “s2pctrl” pone la señal de inicio de conversión denominado “convst” en bajo y lo guarda allí menos de 1µs; de esta manera el AD7823 no se impulsa a bajo después de la conversión. El flanco de bajada de la señal de inicio de conversión “convst” inicia el proceso de la conversión que típicamente toma entre 4 µs para completar. Después del final de la conversión, el módulo “s2pctrl” puede empezar a extraer el resultado bit a bit desde el interno shift register del AD7823. Esto se hace habilitando la señal de reloj del ADC “sclk” de 12.5 MHz y diciéndole al bloque acumulador de bit denominado SR8CE que desplace a los bits que aparecen en la señal de ingreso de datos “din”, así volviendo a montar el resultado de la conversión. Después de 8 períodos de la señal de reloj “sclk”, la señal de fin de conversión “rdy” se pone en bajo, notificando al módulo de control de osciloscopio que el resultado del muestreo está disponible. La señal de muestreo “sample” va a alto y así también lo hace la señal “rdy”. Figura 3.2 Diagrama de tiempo para el s2pctrl en el módulo de adquisición. Fuente: El Autor. 3.1.3 Visualización en el VGA e Implementación. Una vez finalizado el proyecto e implementado en el FPGA Spartan-3 XC3S200, se puede observar que al conectar el FPGA al VGA se visualiza en la pantalla la señal tal como se muestra en la figura 3.3. Cabe mencionar que el tipo de conector o interfaz hacia el monitor debe de ser tipo VGA, ya que sólo este tipo de conector puede soportar el FPGA Spartan-3 XC3S200. Existen otros tipos de conectores tales como el XSGA el cual si soporta la tarjeta Virtex II Pro XC2VP30. Una interfaz externa inapropiada hacia el monitor dará como consecuencia una distorsión en los gráficos presentados en pantalla, brindando de ésta forma una medición y monitorización errónea de la señal de entrada. 43 Figura 3.3 Visualización de la señal en el VGA. Fuente: El Autor. Como se ve en la gráfica superior la señal se grafica sin ningún problema en el VGA, y es la representación de la señal enviada por la tarjeta de sonido del PC o con la utilización de un generador de funciones. En la figura 3.4 en cambio podemos observar las señales graficadas en el VGA después del procesado por parte del FPGA, y en un osciloscopio comercial conectado a la salida de la fuente de la señal a analizarse. Figura 3.4 Visualización de la señal en el VGA y Osciloscopio. Fuente: El Autor. 44 Cabe mencionar que el sistema de monitoreo de señales en el tiempo basado en FPGA no cuenta con una escala numérica visible en la pantalla para medir la amplitud y frecuencia tal como posee un osciloscopio digital comercial, pero gracias al circuito de atenuación el cual permite una señal de entrada con voltaje máximo de 12 Vpp, la escala presente en la pantalla del SMST representada por la cuadrícula será 3 V, 6V o 12 V, siendo que cada división en la escala simboliza 0.6V, 1.6V o 3.3 V implícitamente la cual dependerá de la escala seleccionada en el circuito de adecuación. Siendo así para poder calcular la amplitud de la señal, se debe multiplicar los 0.6 V (o el valor asignado por la escala del switch1) por el número de divisiones que la señal cubra en su valor máximo, obteniendo así un valor aproximado de su valor real. En cuanto al cálculo de la frecuencia, en los displays del FPGA se muestra una escala numérica en micro segundos la cual se multiplica por el número de divisiones que cubra un periodo de la señal, se calcula el inverso de éste valor y se obtendrá el valor de frecuencia en Hz. Así por ejemplo si en los displays se muestra 400 (dado en micro segundos) y el número de divisiones de un periodo en la cuadrícula de la pantalla es 2.5 tendremos que la frecuencia es: f= 1 = 1000 Hz 400 s * 2.5 (III.1) En la siguiente tabla se presenta mediciones con valores randómicos hechos por el osciloscopio comercial y por el SMST basado en FPGA, para así poder calcular la exactitud o el margen de error entre ambos dispositivos. 45 Tabla 3.1 Mediciones con el Osciloscopio comercial y con el SMST. Señal Aplicada Medición en Medición en el Porcentaje de Osciloscopio Comercial SMST del FPGA Error (Vpp) / FREC. (Vpp) (Hz) (Vpp) (Hz) (%Vpp) (%Hz) 0.25 V a 500 Hz 0.25 500 0.30 500 0.42% 0% 0.5 V a 1000 Hz 0.5 1000 0.56 980 0.50% 0.67% 0.75 V a 2000 Hz 0.75 2000 0.8 2000 0.42% 0% 0.80 V a 2500 Hz 0.8 2500 0.78 2500 0.17% 0% 1.0 V a 2800 Hz 1 2800 1.02 2778 0.17% 0.73% 2.5 V a 1500 Hz 2.5 1500 2.4 1515 0.83% 0.50% 4 V a 800 Hz 4 800 4.2 794 1.67% 0.20% 5.2 V a 1200 Hz 5.2 1200 5.3 1190 0.83% 0.33% 7.2 V a 2000 Hz 7.2 2000 7 2000 1.67% 0% 8 V a 1000 Hz 8 1000 8.1 980 0.83% 0.67% Fuente: El Autor. Con esta tabla se puede observar que la diferencia entre las señales producidas por el FPGA y por el osciloscopio comercial son muy aceptables, llegando a un margen de error para el cálculo de la amplitud del 0.75% y para la frecuencia de 0.31%, lo que brinda seguridad al usuario que los valores mostrados en la pantalla son reales o muy admisibles. En la figura 3.5 se muestra el dispositivo terminado. Figura 3.5 SMST-Dispositivo Terminado. Fuente: El Autor. 46 3.2 Resultados en el SMSF. En este proyecto se mostrará los resultados de cada uno de los módulos o bloques del Sistema de Monitorio de Señales en Frecuencia (SMSF), utilizando System Generator con la herramienta de visualización “Scope”. 3.2.1 Bloque de Filtrado. Como se indicó en el capítulo anterior el bloque de filtrado y diezmado está compuesto por un conjunto de filtros configurados en una arquitectura paralela, los cuales presentan distintas características, así como de distintas frecuencias de trabajo. A la salida de éstos filtros se conectan a un Multiplexor el cual permite que funcione un filtro a la vez dependiente de la señal de entrada, es decir cuando la señal sea menor o igual a 3 KHz el Multiplexor permitirá que pase la señal del filtro pasa bajos; si la señal está entre 3 KHz y 7 KHz se permitirá que pase la señal del filtro pasa bandas y si finalmente la señal es mayor a 7 KHz pasará el filtro pasa altos. Este funcionamiento se podrá observar en la figura 3.6 y figura 3.7. Figura 3.6 Flujo de Trabajo de los Filtros para una señal de 2.5 KHz. Fuente: El Autor. 47 Como se puede observar en la gráfica superior cuando se aplica una señal de 2.5 KHz actúa solamente el filtro pasa bajos y el Multiplexor sólo permite la salida de ese filtro. Figura 3.7 Flujo de Trabajo de los Filtros para una señal de 4 KHz Fuente: El Autor. Como se muestra en la figura 3.7 cuando se aplica una señal de 4 KHz se activa el filtro pasa bandas y a la vez el Multiplexor permite que pase la salida de éste filtro. De esta misma manera sucederá cuando se genere cualquier señal superior a los 7 KHz donde al final sólo se activará el filtro pasa altos y el Multiplexor dejará pasar la salida de ese filtro únicamente. La señal a la salida del multiplexor luego pasará a la etapa de diezmado y posteriormente pasará a multiplicarse por el bloque de enventanado. 48 3.2.2 Bloque de Enventanado. Luego de que la señal haya sido filtrada y diezmada se procede a multiplicar por el bloque de enventanado y como ya se indico es utilizada la ventana de Blackman. La generación del enventanado se lo realiza con la ayuda de Matlab y es exportando a SysGen por medio del bloque ROM, para que conjuntamente con un bloque contador denominado “Count” se carga la ventana en pasos de 512, esto debido a que el proyecto sacará posteriormente la FFT de 512 puntos. La generación del enventanado y del contador se puede observar en la figura 3.8. Figura 3.8 Generación de la Ventana de Blackman en SysGen. Fuente: El Autor. Cabe señalar como se acotó en el capítulo anterior, la ventana de Blackman fue utilizada en el desarrollo del presente proyecto ya que cumple con las características requeridas y además brinda una respuesta espectral mucho más eficientes. Por otro lado hay que mencionar que otras técnicas fueron probadas tales como la ventana de Hann y la ventana de Hamming [14], además del 49 enventanado Rectangular, pero la primera no presentó una adecuada respuesta en frecuencia y la segunda a pesar que cuenta con una respuesta similar a la de Blackman presenta una pequeña discontinuidad al final de su forma característica lo que implica tener un poco de distorsión en el dominio de la frecuencia. Todo esto se observa en la figura 3.9 donde se hace una comparación entre los distintos tipos de enventanado tanto en el dominio del tiempo como en el dominio de la frecuencia. Figura 3.9 Tipos de Enventanados en dominio de tiempo y frecuencia Fuente: El Autor. Tabla 3.2 Características de las Ventanas Espectrales. Atenuación en el lóbulo Ancho de Banda Máximo Rizado en Window de los lados (dB) de la Transición Parabanda (dB) Rectangular -13 2 0.9/N -21 50 Hann -31 2 3.1/N -44 Hamming -41 2 3.5/N -53 Blackman -57 2 5.5/N -74 Fuente: Tomado de http://www1.ceit.es/asignaturas/tratamiento%20digital/tema9.pdf. Con lo observado en la grafica y en la tabla superior se determina que con la ventana de Blackman ayuda a eliminar las discontinuidades al inicio y al final de los bloques de la señal a analizarse y además presenta una mejor respuesta en el dominio de la frecuencia, ya que permite mayor atenuación en los lóbulos secundarios por lo que es el método más idóneo para utilizar en el presente proyecto. 3.2.3 Bloque de Visualización e Implementación en el FPGA. Una vez que la señal ha sido filtrada, diezmada, enventanada y adquirida la FFT se procede a llevar los datos desde System Generator a Matlab con la ayuda del bloque de Simulink “To Workspace” donde se tomará los datos para poder graficarlos y visualizarlos comparando con el “Spectrum Scope ” de SysGen. En la figura 3.10 se puede observar la gráfica de una señal sinusoidal de 2.5 KHz visualizadas en Matlab y en System Generator respectivamente. Figura 3.10 Visualización de una señal: (a) con SysGen y (b) con Matlab. Fuente: El Autor. Como se puede observar entre las gráficas el armónico principal de la señal se encuentra en 2.5 KHz teniendo el mismo valor de amplitud, aunque si existe contraste con los niveles de atenuación, ya que con Matlab se llega un promedio de 51 -65 dB mientras que con System Generator se llega a una media de -55 dB, lo que da a entender que el FPGA brinda mayor atenuación del ruido que la simulación en Matlab. Ahora que el diseño cumple con lo esperado se procede a implementarlo, mostrando en la tabla 3.3 los recursos ocupados por el sistema con la ayuda del bloque de System Generator “Resource Estimator” observando que el diseño está en los límites de los recursos de la tarjeta Virtex II Pro. Tabla 3.3 Recursos estimados de hardware para el diseño del SMSF. Componentes de la Virtex II Pro Slices Recursos Disponibles 13696 Recursos Usados 13087 Porcentaje de Uso 95% FFs 27392 24246 88% BRAMs 136 21 15% LUTs 27392 14024 51% IOBs 556 87 16% Emb. Mults. 16 3 18% Fuente: El Autor. La implementación en la tarjeta se realiza mediante co-simulación. Es así que la gráfica 3.11 muestra los pasos para la co-simulación. Figura 3.11 Generación de la Co-simulación Fuente: El Autor. 52 Para generar el bloque de co-simulación, en el bloque System Generator determinamos las opciones siguientes: Compilation: Hardware Co-Simulation => xup_virtex_ii_pro. (Parámetros de la tarjeta Virtex II Pro). Part: Automáticamente al elegir xup_virtex_ii_pro en compilación se determina las partes de la FPGA, se obtiene: Virtex2P xc2vp30-7ff896 Target Directory: Se especifica el directorio donde se ubicara los archivos generados como resultado de la compilación. Por defecto se nombre como: ./netlist Hardware Description Language: Especifica el lenguaje de descripción de hardware (HDL) que se usará para la compilación del diseño, pueden ser VHDL y Verilog; se escogerá VHDL. Simulink System Period: Define el periodo del sistema en simulink, en unidades de segundo. En el caso de este proyecto será: 1/48000 Una vez definidos los parámetros del bloque System Generator generamos la compilación del modelo realizado. Al cabo de unos minutos, se ha generado el bloque de co-simulación, el cual lo conectamos a las respectivas entradas y salidas para luego simular el modelo. Al simular el modelo ya con el bloque co-simulator, la tarjeta debe estar debidamente conectada al PC y encendida, para que, al realizar la simulación el modelo se compile dentro de la FPGA XC2VP30 y comprobar que el funcionamiento en la FPGA sea el mismo que en la simulación de Sysgen. Figura 3.13 Diseño Implementado en el FPGA cs2vp30 bajo co-simulación. Fuente: El Autor. 53 Capítulo IV CONCLUSIONES Y RECOMENDACIONES 4.1 Conclusiones. A partir de este trabajo se ha diseñado e implementado un Sistema de Monitoreo de Señales en el Tiempo (SMST), así como de un Sistema de Monitoreo de Señales en Frecuencia (SMSF) y utilizarlos en un Sistema de adquisición y monitoreo de señales eléctricas, a través de un sistema electrónico basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias de 0 a 3 KHz para el SMST y para frecuencias entre el rango de 0 hasta 12 KHz para el SMSF. Se ha implementado en distintos FPGAs, es así que con la utilización de la tarjeta Spartan-3 se realizó la aplicación del SMST con la utilización de un VGA para su visualización, mientras que con la tarjeta Virtex II Pro se realizó la aplicación bajo co-simulación del SMSF. Se ha logrado diseñar e implementar un circuito de atenuación y adecuación que permite una digitalización apropiada de la señal analógica proveniente de una fuente de señal externa por medio del conversor analógico a digital (ADC) presente en la tarjeta periférica AIO1 conectada en el FPGA Spartan3 para el Sistema Monitoreo de Señales en el Tiempo, con lo cual se puede ingresar señales de voltaje hasta de 12 Vpp. Se ha implementado en el FPGA una memoria lógica en el Sistema de Monitorización de Señales en el Tiempo, la cual permite almacenar los datos digitalizados de la señal analógica de entrada, para que posteriormente sea leída y sus valores sean representados en pantalla. El tamaño de la memoria es de 640 bytes y en base a esto, se tiene la limitante de que sólo se pueda visualizar señales hasta los 3 KHz debido que la memoria no cuenta con la capacidad de almacenar los valores digitalizados para señales de mayor frecuencia y visualizarlos en pantalla. La capacidad de la memoria tiene una relación directa con la resolución de la pantalla, que 54 para la Spartan-3 es de 640x480 pixeles, y en el caso de aumentar la capacidad de la memoria significa también aumentar la resolución de pantalla lo cual la tarjeta Spartan-3 no estaría en capacidad de soportar. La aplicación de estas memoria es realmente importante, debido a que se puede aplicar funcionalidades al diseño como por ejemplo el de congelar en pantalla la señal, o el de estabilizar una señal que es demasiado veloz para poder visualizar sus características correctamente. Se comprobó la fiabilidad del equipo del Sistema de Monitoreo de Señales en el Tiempo en base a la comparación de resultados de mediciones frente a un osciloscopio convencional, teniendo un error aproximado del 0.75% para la amplitud es decir una variación de frecuencia es decir una variación de 0.09V y de un 0.31% para la 9.3 Hz tal como se observa en la tabla 3.1, brindado al usuario la seguridad que el análisis y procesamiento de la señal se ha realizado de manera óptima. Se ha conseguido incluir en el Sistema de Monitoreo de Señales en el Tiempo las características básicas de un Osciloscopio Digital emulando en gran parte su funcionamiento, es así que el SMST cuenta con un rango de funcionamiento de 0 a 3 KHz el mismo que fue comprobado con un software de generación de tonos y con un generador de funciones como fuentes de señal, y con una señal de entrada de 12 Vpp debido al circuito de atenuación que cuenta con tres escalas (0-3V, 3-6V y 6-12V). Además posee las funciones Hold y Triggering que permite distintas visualizaciones de la señal en pantalla. Como limitante en el proyecto, no se pudo realizar una escala numérica en la pantalla para la visualización de la amplitud y frecuencia, debido que es forzoso un módulo de memoria adicional para programar los caracteres necesarios para mostrar en pantalla, pero esto implica que con este nuevo módulo de memoria se excede los recursos de la tarjeta Spartan-3 por lo que no se puede implementar. Se ha conseguido implementar un Sistema de Monitoreo de Señales en Frecuencia el mismo que cuenta con un rango de funcionamiento de 0 a 12 KHz debido a las características de la co-simulación y en cuanto se encuentra el diseño en los límites de los recursos de la tarjeta XUP Virtex II 55 Pro, tal como se puede observar en la tabla 3.3. Además cuenta con resolución de frecuencia de 93.75 Hz y salida de 16 bits. Posee la capacidad de almacenar los datos analizados para una posterior visualización. Cabe mencionar que el SMSF incorpora las funciones principales de un Analizador de Espectro emulando así su funcionamiento, pero como una limitante en el sistema es debido a la co-simulación, que reparte los recursos de memoria del computador para el análisis tanto en System Generator de Matlab como en el FPGA, haciendo que el procesamiento de los datos sea lento así como su visualización. La implementación de estas herramientas tienen un gran contenido pedagógico, ya que se diseñaron los algoritmos necesarios para cumplir con los requerimientos básicos de un osciloscopio tales como la adquisición y procesamiento de las señales, visualización en la pantalla de la señal y de las funciones de Hold y Triggering, así como de un analizador de espectro; y ayudar a los profesionales en formación en la comprensión de el comportamiento de las distintas señales en el dominio del tiempo como en el de frecuencia. El uso de estas tecnologías son validas para la aplicación e implementación de sistemas electrónicos de medición y monitoreo básicos frente a equipos comerciales costosos. Pero a su vez, esta tecnología puede ser reemplazada o mejorada con otros sistemas electrónicos, tal es el caso de micro-controladores y pantallas GLCD que pueden reemplazar algunas aplicaciones tanto de los FPGAs como de monitores VGA. 4.2 Recomendaciones. El Sistema de Monitoreo de Señales en el Tiempo fue implementado en la tarjeta Spartan-3 la cual tiene buenas prestaciones y brinda un funcionamiento adecuado al momento de compilar y correr el diseño, pero sería recomendable el intentar actualizar el diseño para un FPGA más avanzado tal como la Virtex II Pro, la cual cuenta con mayores capacidades así como de mayor volumen de procesamiento y de velocidad. Además la Virtex II Pro cuenta con un conversor analógico a digital interno por lo cual la 56 tarjeta periférica AIO1 ya no sería necesaria lo que ayudaría a reducir el tamaño de Hardware, y además cuenta con un puerto XSGA que serviría para la visualización de la señal, como también posee una ranura de expansión de memoria RAM lo que ayudaría a aumentar la velocidad de procesamiento de los datos. Se debe emprender en la investigación de aplicaciones con el VGA para la familia Spartan y en especial para la Virtex, ya que fue esto uno de los mayores problemas y limitantes para el diseño y culminación del proyecto de tesis, debido que existe documentación de aplicaciones para la Spartan pero para el caso de la familia Virtex no es así, por lo que el diseño de aplicaciones para el VGA es complicado y difícil de implementar. El sistema de monitorización de señales en frecuencia se implementó bajo el método de co-simulación en la FPGA Virtex II Pro, y en base a aquello sería muy interesante el proponer la mejora del diseño, con la exportación de los datos a través del puerto serial de la tarjeta para que con la ayuda del PC se pueda hacer la reconstrucción de los datos y su visualización. Hay que aclarar que en el puerto serial su transmisión de datos no es muy rápida por lo que se puede transmitir hasta 9600 bps pero sería muchos más eficiente y rápido que el método de co-simulación. Finalmente, otra forma de mejorar el desempeño y las características del sistema de monitorización de señales en frecuencia es utilizando una nueva tarjeta ya sea el FPGA Virtex 5 SXT o la Xtreme DSP la cual cuenta con un módulo de RF el cual ayudaría a incrementar al ancho de banda de la señal a analizarse. Además estas tarjetas cuentan con mayor capacidad de procesamiento y rapidez lo que ayudaría para poder calcular la FFT de 1024 o 2048 puntos, así como lograr que los filtros tengan mejor respuesta de frecuencia y sean mucho más selectivos. 57 BIBLIOGRAFÍA [1] U.T.N.-F.R.M., Mediciones con Analizador de Espectro de RF-TP6, 2002. [2] http://rabfis15.uco.es/lvct/tutorial/22/ayuda/terminologia.htm [3] http://www.unicrom.com/Tut_la_corriente_alterna__.asp [4] http://www.elo.utfsm.cl/~lsb/elo102/labs/sinusoides.htm [5] http://es.wikipedia.org/wiki/ [6] KURT D. ROGERS (Binghamton University), Acceleration and Implementation of a DSP Phase-Based Frequency Estimation Algorithm, 2003. [7] Lyons Richard G., Understanding Digital Signal Processing, Prentice Hall Inc., 2001. [8] Jones Douglas L., Radix-4 FFT Algorithms, 2006. [9] Xilinx, Fast Fourier Transform v5, 2007. [10] Digilent, Spartan-3 Starter Kid Board User Guide, 2005. [11] Xilinx, Hardware Reference Manual XUPV2P, 2005. [12] Digilent, AIO1 Reference Manual, 2004. [13] Petrone Joseph (The Florida State University), Adaptative Filter Architectures for FPGA Implementation, 2004. [14] http://www1.ceit.es/asignaturas/tratamiento%20digital/tema9.pdf [15] http://www.pablin.com.ar/electron/cursos/introosc/index.htm 58 ANEXO A LISTA DE ACRÓNIMOS Y TÉRMINOS. ADC: Conversión Analógica a Digital, conocida también como A/D. AIO1: Analog I/O up to 1MHz. ALIASING: Efecto que causa que señales continuas distintas se tornen indistinguibles cuando se les muestrea digitalmente. DFT: Discrete Fourier Transform. DSP: Application Specific Integrated Circuit. FDCE: Flip-Flop type D with Clock Enable. FFT: Fast Fourier Transform. FPGA: Field Programmable Gates Array. HDL: Hardware Description Language. I/O: Imput / Output. IDFT: Inverse Discrete Fourier Transform. JTAG: Joint Test Action Group. LUT: Look-up Table. MSB: Bit de Mayor Significado. PROM: Programmable Read-Only Memory. RADIX: Algoritmo que permite calcular la FFT de una señal, y dependiendo si es Radix-4 o Radix-2 los datos calculados serán más precisos pero requerirá mayor carga computacional. ROM: Read Only Memory VHDL: Lenguaje de Descripción de Hardware de VHSIC. SMST: Sistema de Monitorización de Señales en el Tiempo. SMSF: Sistema de Monitorización de Señales en Frecuencia. SR8CE: Shift Register of 8 bits with Clock Enable. SRAM: Static Random Access Memory. XC3S200: FPGA de la Familia Spartan 3 serie 200. XC2VP30: FPGA de la Familia Virtex II Pro serie 30. 59 ANEXO B Práctica 1: Empleo de un Osciloscopio para el desarrollo de aplicaciones DSP Objetivo. Emplear el Sistema de Monitorización de Señales en el Tiempo (Osciloscopio) para el entendimiento y desarrollo de aplicaciones de procesamiento digital de señales y de telecomunicaciones así para el manejo de estos sistemas. Procedimiento. Se realizará pruebas para comprobar el correcto funcionamiento del Osciloscopio implementado en una FPGA. Con el propósito de verificar éste sistema, se emplearán señales conocidas en el dominio del tiempo la cual será generada por un Generador de Funciones y el resultado será comparado por la simulación de la misma señal utilizando el programa Electronics Workbench 9. El Osciloscopio cuenta con las características siguientes: Rango de frecuencia de 0 a 3000 Hz. Señal de entrada: 12 Vpp Máx. Conectividad con un monitor VGA. Osciloscopio. El osciloscopio no es más que un instrumento para la visualización y medición de señales eléctricas en el dominio del tiempo. En otras palabras, se pueden ver formas de una señal en él. Una señal eléctrica siempre se presentará con el tiempo en el eje horizontal (X) y la amplitud en el eje vertical (Y). La forma de onda nos proporciona una valiosa información sobre la señal. En cualquier momento podemos visualizar la amplitud que alcanza y, por lo tanto, saber si el voltaje ha cambiado en el tiempo. Es así que en el dominio temporal los 60 elementos más característicos de una señal eléctrica son: la amplitud, la fase y la frecuencia. Figura 1. Osciloscopio implementado en una FPGA. Pruebas de Funcionamiento del Osciloscopio Paso 1 Para comprobar el correcto funcionamiento del Sistema del Osciloscopio implementado en la FPGA Spartan-3 XC3S200 se utilizará señales conocidas tal cual como señales sinusoidales, señales rectificadas, y señales triangulares. Para la generación de las señales se empleará un Generador de funciones el mismo que llevará las señales al módulo de Adquisición del Osciloscopio. Hay que tener en cuenta que el osciloscopio cuenta con un límite en cuanto a la señal de entrada, la cual debe de estar entre 0 a 12 Vpp para la amplitud y de 0 a 3000 Hz para la frecuencia. El Osciloscopio basado en FPGA no cuenta con una escala numérica visible en la pantalla para medir la amplitud y frecuencia tal como posee un osciloscopio comercial, pero gracias al circuito de atenuación el cual permite una señal de entrada con voltaje máximo de 12 Vpp, la escala presente en la pantalla representada por la cuadrícula será 3 V, 6 V o 12 V, siendo que cada división en la escala simboliza 0.6 V, 1.6 V o 3.3 V implícitamente la cual dependerá de la escala seleccionada. Siendo así para poder calcular la amplitud de la señal, se debe multiplicar los 0.6 V (o el valor asignado por la escala del selector del osciloscopio) por el número de divisiones que la señal cubra en su valor máximo, 61 obteniendo así un valor aproximado de su valor real. En cuanto al cálculo de la frecuencia, en los displays del FPGA se muestra una escala numérica (representa los micro segundos en divisiones de la pantalla) por la que se debe multiplicar por el número de divisiones que cubra un periodo de la señal, se calcula el inverso de éste valor y se obtendrá el valor de frecuencia en Hz. Así por ejemplo si en los displays se muestra 400 y el número de divisiones de un periodo en la cuadrícula de la pantalla es 2.5 tendremos que la frecuencia es: f= 1 = 1000 Hz 400 s * 2.5 (1) Utilizando el programa Electronics Workbench simularemos como debe de ser la visualización de las señales en el VGA del Osciloscopio. Primero se generará una señal tipo seno de 1500 Hz con una amplitud de 1.5 V tal como se observa en la simulación de la figura 2. Mientras que en la figura 3 se ve los resultados obtenidos en el Osciloscopio implementado en el FPGA. Figura 2. Señal Senoidal de 1.5 V y 1500 Hz. 62 En la figura 3 en cambio se puede observar la señal en el VGA, verificando su correcta visualización. Figura3. Visualización en el VGA Se puede ver en la gráfica superior que la señal cubre en la cuadrícula 1.3 divisiones en el eje Y, lo cual por los 0.6 V que representa en este caso cada cuadrado obtenemos un valor total de 1.56 Vpp. El diseño cuenta con un margen de error de 0.09 V, por lo que se encuentra dentro de los valores establecidos. Para cálculo de la frecuencia, se debe seguir el procedimiento antes descrito, siendo la escala en el FPGA 400 tal y como se muestra en la figura 4. Figura4. Escala en displays del FPGA para el cálculo de la Frecuencia. Siguiendo con la ecuación 1, y observando que en la figura 3 el periodo de una señal cubre 1.65 divisiones en el eje X, la frecuencia de la señal es de 1515 Hz. El diseño consta con un margen de error de dentro de los valores aceptables. 9.3 Hz por lo que la frecuencia consta 63 Siguiendo con las pruebas, se generará una señal senoidal de 60 Hz con una amplitud de 4 Vpp, a la cual se lo conectará a un puente rectificador quien eliminará el valor del semiciclo negativo de la señal. Esto se puede ver en la figura 5, la cual representa una simulación de la señal con un puente rectificador. Figura 5. Gráfica de una señal rectificada Como se ve en la gráfica superior, al colocar un puente rectificador a una señal tipo seno de 4 Vpp, el puente sólo permite el paso de la señal en el semi ciclo positivo de la misma dando una onda de 2.5 Vp. En cambio, en la gráfica de la figura 6 se muestra la señal visualizada en el VGA. Figura 6. Gráfica de una señal rectificada en el VGA Se puede observar que el osciloscopio basado en una FPGA cumple con la correcta visualización, ya que cada cuadrado de la cuadrícula representa 1.6 V 64 siendo que el máximo valor de la onda es de 1.25 nos da una amplitud de 2.56 Vp y de una frecuencia de 60.2 Hz. Para finalizar se graficará una señal triangular de 1.2 KHz de 2.5 Vpp tal como se ve en la figura 7. Figura 7. Gráfica de una señal triangular. Ahora, se presenta la imagen de la señal triangular visualizada con el osciloscopio en un VGA. Figura 8. Gráfica de una señal triangular en el VGA. Como se puede observar la gráfica tiene una amplitud de 2.52 Vpp, ya que cada cuadrado representa 0.6 V en la cuadrícula y su amplitud máxima cubre 2.1 65 cuadrados de la misma. En cuanto al cálculo de la frecuencia, la escala en los displays del FPGA marca 40, y el número de divisiones que cubre un periodo de la señal es de 2.1, siendo la frecuencia de 1190 Hz. Práctica 2: Empleo de un analizador de espectro para el desarrollo de aplicaciones DSP Objetivo. Emplear el Sistema de Monitorización de Señales en Frecuencia (Analizador de Espectro) para el entendimiento y desarrollo de aplicaciones de procesamiento digital de señales y de telecomunicaciones así para el manejo de estos sistemas. Procedimiento. Se realizará pruebas para comprobar el correcto funcionamiento del Analizador de Espectro implementado en una FPGA. Con el propósito de verificar éste sistema, se emplearán señales conocidas en el dominio de la frecuencia El Analizador de Espectros tiene las características siguientes: Un bloque FFT de 512 puntos. Resolución de frecuencia de 93.75 Hz. Un filtro Pasa Bajos (0Hz - 3000Hz). Un filtro Pasa Bandas (3000Hz - 7000Hz). Un filtro Pasa Altos (7000Hz - 12000Hz). Analizador de Espectro. El Analizador de Espectros es un instrumento que se basa en el análisis en el dominio de la frecuencia y que permite ver en una pantalla en forma simple y rápida las frecuencias de las armónicas que componen una señal compleja, y además permite conocer la relación entre esas componentes, mediante bastones presentados en la pantalla, cuya amplitud es proporcional a la amplitud de los armónicos. 66 Figura 9. Analizador de Espectros implementado en una FPGA. Pruebas de Funcionamiento del Analizador de Espectros Paso 1 Para comprobar el correcto funcionamiento del Sistema del Analizador de Espectro implementado en la FPGA Virtex II Pro XV2P30 se utilizará señales conocidas tal cual como señales sinusoidales, señales cuadradas, y señales triangulares. Para la generación de las señales se empleará el Software Cool Edit Pro 2.1 el mismo que se exportará hacia el entorno de System Generator de Matlab. Hay que tener en cuenta que el analizador de espectros fue implementado en el FPGA bajo el entorno de co-simulación, es decir que se realiza una simulación en el entorno de System Generator y se realiza al mismo tiempo el procesamiento de la señal en la tarjeta en tiempo real. Además el diseño cuenta con un límite en cuanto a la señal de entrada, la cual debe de estar entre 0 a 12 KHz. En cuanto al funcionamiento del Analizador de Espectro, se sabe que en el dominio del tiempo las señales se ven y muestran distinta información que en el dominio de la frecuencia, y como método para comprobar su correcto funcionamiento esta el introducir primeramente una señal pura de 5 KHz. Para una señal seno pura, su representación tanto en el tiempo como en el dominio de la frecuencia se ilustra en la figura 10. 67 Figura 10. Señal senoidal en el dominio temporal y frecuencial. Cuando se habla de señal senoidal pura, se refiere al hecho de que la onda no cuenta con ningunas otras componentes, lo cual se traslada al dominio de la frecuencia en que sólo se visualiza un solo componente de frecuencia la cual se denomina frecuencia fundamental. Sabiendo esto, en la gráfica 11 se visualiza la señal procesada por el Analizador de espectro en el FPGA. Figura 11. Señal senoidal de 5 KHz visualizado por el FPGA. Como se observa, la frecuencia fundamental de la señal se encuentra en 5 KHz, y no se visualiza armónicos secundarios. Hay que indicar que la escala vertical se representa en este caso en dB, la cual es una función logarítmica en base a la amplitud de la señal en voltios en el dominio temporal. 68 Otra prueba es introduciendo una señal cuadrada de 1 KHz de frecuencia, cuya representación en el modo temporal y frecuencial se muestra en la figura 12. Figura 12. Señal cuadrada en el dominio temporal y frecuencial. Como se observa en la figura superior, una señal cuadrada además de contar con el armónico principal posee armónicos secundarios los cuales son múltiplos escalares de la frecuencia fundamental tal como se visualiza en la gráfica 12. Para comprobarlo, se ingresará al analizador de espectros tal señal, cuyos resultados se observan en la figura 13. Figura 13. Señal cuadrada de 1 KHz visualizado en dB por el FPGA. En la gráfica superior se visualiza la señal cuadrada a 1 KHz graficada por el Analizador de espectros en escala logarítmica, pero en la figura 14 se presenta la misma señal pero esta vez en escala lineal. 69 Figura 14. Señal cuadrada de 1 KHz visualizado en escala lineal por el FPGA. La gráfica superior se observa que la representación espectral para una señal cuadrada de 1 KHz es similar a la explicada en la figura 12, presentando así la confiabilidad de los datos para el Analizador de Espectros implementado en una FPGA. Para finalizar, se ingresará una señal triangular de 1 KHz cuya representación en el modo temporal y frecuencial se muestra en la figura 15. Figura 15. Señal triangular en el dominio temporal y frecuencial. Como se observa en la figura superior, una señal triangular además de contar con el armónico principal posee armónicos secundarios al igual que en una señal cuadrada, aunque sus niveles de voltaje son menores como se visualiza en la gráfica 15. Para comprobarlo, se ingresará al analizador de espectros tal señal, cuyos resultados se observan en la figura 16. 70 Figura 16. Señal triangular de 1 KHz visualizado en dB por el FPGA. En la gráfica superior se visualiza la señal triangular a 1 KHz graficada por el Analizador de espectros en escala logarítmica, pero en la figura 17 se presenta la misma señal pero esta vez en escala lineal. Figura 17. Señal triangular de 1 KHz visualizado en escala lineal por el FPGA. La gráfica superior se observa que la representación espectral para una señal triangular de 1 KHz es similar a la explicada en la figura 15, presentando así la confiabilidad de los datos para el Analizador de Espectros implementado en una FPGA. 71 ANEXO C DISEÑO ESQUEMATICOS TITULO: Sistema de adquisición y monitoreo de señales eléctricas, basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias bajas CONTENIDO: Diseño General del SMST en Esquemático REVISADO: FECHA: 10-12-2008 DIBUJO: NÚMERO: 1/4 1 ESCALA: 1:1 72 TITULO: Sistema de adquisición y monitoreo de señales eléctricas, basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias bajas. CONTENIDO: Diseño del Módulo de Adquisición en Esquemático REVISADO: FECHA: 10-12-2008 DIBUJO: NÚMERO: 2/4 2 ESCALA: 1:1 73 TITULO: Sistema de adquisición y monitoreo de señales eléctricas, basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias bajas CONTENIDO: Diseño del SR8CE del Módulo de Adquisición. REVISADO: FECHA: 10-12-2008 DIBUJO: NÚMERO: 3/4 3 ESCALA: 1:1 74 TITULO: Sistema de adquisición y monitoreo de señales eléctricas, basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias bajas CONTENIDO: Diseño del Módulo de Vga Display REVISADO: FECHA: 10-12-2008 DIBUJO: NÚMERO: 4/4 4 ESCALA: 1:1 75 ANEXO D CÓDIGO EN VHDL. CÓDIGO DEL “S2PCTRL” DEL MÓDULO DE “ADQUISITION”. -- Descripción -- 's2pctrl' es la parte de control del módulo de Adquisición. -- Esta implementa el protocolo de comunicación con el convertidor A/D. -- Además envía las señales de control al conversor A/D (convst, sclk) -- Recibe los datos (din) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity s2pctrl is port (rst : in std_logic; mclk : in std_logic; sample : in std_logic; -- dice q está listo para la conversión convst : out std_logic; -- inicia la conversión sclk : out std_logic; load : out std_logic; sh_en : out std_logic; rdy : out std_logic); -- la conversión está lista end s2pctrl; architecture Behavioral of s2pctrl is signal cnt: std_logic_vector(7 downto 0) := (others => '0'); begin -- con la ayuda de "cnt" el controlador obedece el tiempo de las señales del convertidor A/D 76 process(mclk, sample,cnt) begin if (sample = '1') then cnt <= (others => '0'); -- está bien empezar elsif (mclk'event and mclk = '1') then cnt <= cnt + 1; end if; if (cnt = X"FF") then cnt(0) <= '0'; -- previene que el contador este en overflow (mantenerlo en X "FE") empezando una conversión sin el consentimiento de osc_ctrl -- ('cnt' debería ser reseteado solo por sample='1') end if; end process; sh_en <= '1' when (cnt >= X"D6" and cnt < X"F5") else '0'; --habilita el clock serial cuando es necesitado sclk <= cnt(1); -- los datos son recibidos desde el ADC en el flaco de subida de 'sclk' load <= not cnt(1); -- carga los bits en el registro convst <= '1' when (cnt = X"28" or rst = '1') else '0' when cnt = X"02"; -- convst es activado alrededor de 1 us rdy <= '1' when (sample = '1' or rst = '1') else -- rdy es reseteado cuando osc_ctrl reconoce la activación de 'rdy' (poniendo sample a '1') '0' when cnt = X"F5"; -- rdy es activado cuando la conversión esta lista y los datos están disponibles en el registro end Behavioral; 77 CÓDIGO DE LA FUNCIÓN “SR_TUNER” DEL MÓDULO DE “OSC_CTRL”. -- Descripción -- 'srate' representa el tiempo transcurrido entre dos muestras -- 'srate' es incrementado o decrementado exponencialmente cuando es presionado 'smpupbtn'/'smpdownbtn' -- 'srate' inicia en un valor específico (250 ns) luego este es incrementado (500, 1000, etc.) -- 'uspdiv' representa los 'microsegundos por división' en la pantalla del osciloscopio library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity sr_tuner is PORT( ssg : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); an : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); srate : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); dn : IN STD_LOGIC; up : IN STD_LOGIC; rst : IN STD_LOGIC; mclk : IN STD_LOGIC); end sr_tuner; architecture Behavioral of sr_tuner is COMPONENT rate2div PORT( srate : IN std_logic_vector(15 downto 0); uspdiv : OUT std_logic_vector(15 downto 0) ); END COMPONENT; COMPONENT ssgdisp PORT( rst : IN std_logic; mclk : IN std_logic; 78 xval : IN std_logic_vector(15 downto 0); ssg : OUT std_logic_vector(7 downto 0); an : OUT std_logic_vector(3 downto 0) ); END COMPONENT; COMPONENT btnpush PORT( mclk : IN STD_LOGIC; up : IN STD_LOGIC; dn : IN STD_LOGIC; en : OUT STD_LOGIC); END COMPONENT; signal ce : std_logic; signal load : std_logic; signal uord : std_logic; signal sr : std_logic_vector(15 downto 0); signal xval : std_logic_vector(15 downto 0); begin -- incrementa / decrementa el 'srate' de acuerdo a los botones de entrada (up/dn) process (mclk) begin if (mclk'event and mclk='1') then if (load='1') then sr <= X"00FA"; elsif (ce = '1') then if (up = '1') then sr <= sr(14 downto 0) & '0'; else sr <= '0' & sr(15 downto 1); end if; end if; end if; end process; 79 load <= rst or not sr(7); srate <= sr; uord <= up or dn; -- este proceso tiene cuidado que el valor de "srate" sea incrementado solamente una vez, cuando el botón es presionado process(mclk, uord) variable push_event : boolean := false; begin if (uord = '0') then ce <= '0'; push_event := false; elsif (mclk'event and mclk='1') then if (push_event = false) then ce <= '1'; push_event := true; else ce <= '0'; end if; end if; end process; -- esta unidad calcula el valor en 'microsegundos por división' para ser mostrado acorde a 'srate' srate2uspdiv: rate2div PORT MAP( srate => sr, uspdiv => xval ); -- el los 7 segmentos se muestra el valor de los 'microsegundos por división' ssg_display: ssgdisp PORT MAP( rst => rst, mclk => mclk, xval => xval, 80 ssg => ssg, an => an ); end Behavioral; CÓDIGO DE LA SUB FUNCIÓN “RATE2” DEL MÓDULO DE “OSC_CTRL”. -- Descripción -- 'uspdiv' representa los 'microsegundos por división' en la pantalla del osciloscopio -- 'uspdiv' es una función lineal de 'srate': 'uspdiv' = 'srate' x periodos (mclk) x (número de píxeles entre dos líneas verticales) library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity rate2div is Port ( srate : in std_logic_vector(15 downto 0); uspdiv : out std_logic_vector(15 downto 0)); end rate2div; architecture Behavioral of rate2div is signal val : std_logic_vector(4 downto 0); begin -- el valor de uspdiv es traducido, en vez de ser calculado para optimización --'uspdiv' = 'srate' x periodo (mclk) x (número de píxeles entre dos líneas verticales) --'uspdiv' = 'srate' x 20 ns x 40 ns/div -- si 'srate'=250 ns (X"00FA") entonces 'uspdiv' = 250 ns x 20 ns x 40 ns/div = 200000 ns = 200 us val <= "00001" when srate=X"00FA" else "00010" when srate=X"01F4" else "00100" when srate=X"03E8" else 81 "01011" when srate=X"07D0" else "11001" when srate=X"0FA0"; uspdiv <= "00" & val & "000000000"; end Behavioral; CÓDIGO DE LA SUB FUNCIÓN “SSGDISP” DEL MÓDULO DE “OSC_CTRL”. -- Descripción -- muestra los valores en los displeys de 7 segmentos library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ssgdisp is Port (rst : in std_logic; mclk : in std_logic; -- clock principal de 50 MHz xval : in std_logic_vector(15 downto 0); -- número en hexadecimal para ser mostrado (4 dígitos) ssg : out std_logic_vector(7 downto 0); an : out std_logic_vector(3 downto 0)); end ssgdisp; architecture Behavioral of ssgdisp is -- contador en milisegundos (exactamente 1.3107 ms) el tiempo en que un dígito es mostrado en el 7 segmentos signal ms_cnt : std_logic_vector(15 downto 0); -- cuál digito es mostrado en un tiempo dado signal digcnt : std_logic_vector( 1 downto 0); 82 -- el valor hexadecimal de un digito signal hex : std_logic_vector(3 downto 0); signal dig : std_logic_vector(6 downto 0); begin -- ms_cnt es reseteado cada milisegundo => el periodo de ms_cnt(15) es 1 ms process (rst, mclk, ms_cnt) begin if (rst = '1') then ms_cnt <= (others => '0'); elsif (mclk'event and mclk = '1') then ms_cnt <= ms_cnt + 1; end if; end process; -- cada digito del número a ser mostrado (ej. xval) es activado en el 7 segmentos en 1 ms process(rst, ms_cnt(15)) begin if (rst = '1') then digcnt <= "00"; elsif (ms_cnt(15)'event and ms_cnt(15) = '1') then digcnt <= digcnt + 1; end if; end process; -- estos intervalos de 4-bit representan los digitos (hexa) de los numeros a ser mostrados hex <= xval(15 downto 12) when (digcnt = "00") else xval(11 downto 8) when (digcnt = "01") else 83 xval(7 downto 4) when (digcnt = "10") else xval(3 downto 0) when (digcnt = "11"); -- habilita el ánodo correcto a un tiempo apropiada an <= "1110" when (digcnt = "00") else "1101" when (digcnt = "01") else "1011" when (digcnt = "10") else "0111" when (digcnt = "11"); dig <= "0111111" when hex = "0000" else – 0 "0000110" when hex = "0001" else -- 1 "1011011" when hex = "0010" else -- 2 "1001111" when hex = "0011" else -- 3 "1100110" when hex = "0100" else -- 4 "1101101" when hex = "0101" else -- 5 "1111101" when hex = "0110" else -- 6 "0000111" when hex = "0111" else -- 7 "1111111" when hex = "1000" else -- 8 "1101111" when hex = "1001" else -- 9 "1110111" when hex = "1010" else -- A "1111100" when hex = "1011" else -- B "0111001" when hex = "1100" else -- C "1011110" when hex = "1101" else -- D "1111001" when hex = "1110" else -- E "1110001" when hex = "1111" else -- F "0000000"; ssg(6 downto 0) <= not dig; ssg(7) <= '1'; end Behavioral; CÓDIGO DEL “VGA_MEM” DEL MÓDULO DE “VGA_DISPLAY”. -- Descripción 84 -- memoria del video: cada entrada in la memoria representa una columna en la pantalla -- el valor de una entrada es la coordenada en y en la pantalla library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity vgamemory is Port (rst : in std_logic; rd : in std_logic; wr : in std_logic; r_addr : in std_logic_vector(9 downto 0); w_addr : in std_logic_vector(9 downto 0); dataout : out std_logic_vector(7 downto 0); datain : in std_logic_vector(7 downto 0)); end vgamemory; architecture Behavioral of vgamemory is type mem_type is array (639 downto 0) of std_logic_vector(7 downto 0); -- tamaño de la memoria: 640x8 signal mem: mem_type; begin -- proceso de lectura de la memoria process (rst,r_addr, rd, mem) begin dataout <= (others => '0'); if (rst = '0' and rd = '1') then dataout <= mem(conv_integer(r_addr)); end if; end process; -- proceso de escritura de la memoria 85 process (wr) begin if (wr'event and wr = '0') then mem(conv_integer(w_addr)) <= datain; end if; end process; end Behavioral; CÓDIGO DEL “VGA” DEL MÓDULO DE “VGA_DISPLAY”. -- Descripción -- “vga” es el controlador de las señales que se presentaran en la pantalla library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity vga is Port ( mclk : in std_logic; data : in std_logic_vector(7 downto 0); addr : out std_logic_vector(9 downto 0); rd : out std_logic; hs : out std_logic; vs : out std_logic; red : out std_logic; grn : out std_logic; blu : out std_logic); end vga; architecture Behavioral of vga is constant hpixels : std_logic_vector(9 downto 0) := "1100100000"; -- 800 Valor de los píxeles en la línea horizontal 86 constant vlines : std_logic_vector(9 downto 0) := "1000001001"; -- 521 Número de líneas horizontales en la pantalla constant hbp : std_logic_vector(9 downto 0) := "0010010000"; -- 144 Porche trasero horizontal constant hfp : std_logic_vector(9 downto 0) := "1100010000"; -- 784 Porche frontal horizontal constant vbp : std_logic_vector(9 downto 0) := "0000100111"; -- 31 Porche trasero vertical constant vfp : std_logic_vector(9 downto 0) := "0111111111"; -- 511 Porche frontal vertical constant xmax : std_logic_vector(9 downto 0) := "1001111111"; -- 639 constant ymax : std_logic_vector(9 downto 0) := "0101101111"; -- 479 signal hc, vc : std_logic_vector(9 downto 0) := "0000000000"; -- estos son los contadores horizontales y verticales signal clkdiv : std_logic := '0'; -- divisor del clock signal vidon : std_logic := '0'; -- dice si está o no listos los datos para mostrar signal vsenable : std_logic := '0'; signal x, y -- habilita el contador vertical : std_logic_vector(9 downto 0) := "0000000000"; -- coordenadas horizontales y verticales signal ycoord : std_logic_vector(9 downto 0) := "0000000000"; begin -- esto reduce los 50Mhz del clock a la mitad process(mclk) begin if(mclk = '1' and mclk'EVENT) then clkdiv <= not clkdiv; end if; end process; -- corre el contador horizontal process(clkdiv) 87 begin if(clkdiv = '1' and clkdiv'EVENT) then if hc = hpixels then –-si el contador a llegado al final de contar píxeles hc <= "0000000000"; --resetea el contador vsenable <= '1'; --habilita el contador vertical para incrementar else hc <= hc + 1; --Incrementa el contador horizontal vsenable <= '0'; end if; end if; end process; hs <= '1' when hc(9 downto 7) = "000" else '0'; --pulso de sincronización horizontal process(clkdiv) begin if(clkdiv = '1' and clkdiv'EVENT and vsenable = '1') then if vc = vlines then --Resetea cuando el numero de línea es leído vc <= "0000000000"; else vc <= vc + 1; --Incrementa el contador vertical end if; end if; end process; vs <= '1' when vc(9 downto 1) = "000000000" else '0'; --Pulso de sincronización Vertical x <= hc - hbp; y <= vc - vbp; ycoord <= "0011110000" - (data * "00000101"); grn <= '1' when (y = ycoord and vidon = '1') else '0'; -- traza la señal en la pantalla 88 red <= '1' when (y = X"00F0" and vidon = '1') else '0'; -- dibuja una línea la cual representa la señal de valor '0' -- dibuja las cuadrículas azules blu <= '1' when ((y = X"6F" or y = X"9A" or y = X"C5" or y = X"11B" or y = X"146" or y = X"171" or – dibuja las líneas horizontales ((x = X"27" or x = X"4F" or x = X"77" or x = X"9F" or x = X"C7" or x = X"EF" or x = X"117" or x = X"13F" or x = X"167" or x = X"18F" or x = X"1B7" or x = X"1DF" or x = X"207" or x = X"22F" or x = X"257") -- dibuja las líneas verticales and y > X"6F" and y < X"171")) – estas líneas representan el mínimo y the maximum of the signal and vidon='1' and clkdiv = '1') or -- these rows represent the minimum and the maximum of the signal ((x = X"7" or x = X"F" or x = X"17" or x = X"1F" or x = X"27" or x = X"2F" or x = X"37" or x = X"3F" or x = X"47" or x = X"4F" or x = X"57" or x = X"5F" or x = X"67" or x = X"6F" or x = X"77" or x = X"7F" or x = X"87" or x = X"8F" or x = X"97" or x = X"9F" or x = X"A7" or x = X"AF" or x = X"B7" or x = X"BF" or x = X"C7" or x = X"CF" or x = X"D7" or x = X"DF" or x = X"E7" or x = X"EF" or x = X"F7" or x = X"FF" or x = X"107" or x = X"10F" or x = X"117" or x = X"11F" or x = X"127" or x = X"12F" or x = X"137" or x = X"13F" or x = X"147" or x = X"14F" or x = X"157" or x = X"15F" or x = X"167" or x = X"16F" or x = X"177" or x = X"17F" or x = X"187" or x = X"18F" or x = X"197" or x = X"19F" or x = X"1A7" or x = X"1AF" or x = X"1B7" or x = X"1BF" or x = X"1C7" or x = X"1CF" or x = X"1D7" or x = X"1DF" or x = X"1E7" or x = X"1EF" or x = X"1F7" or x = X"1FF" or x = X"207" or x = X"20F" or x = X"217" or x = X"21F" or x = X"227" or x = X"22F" or x = X"237" or x = X"23F" or x = X"247" or x = X"24F" or x = X"257" or x = X"25F" or x = X"267" or x = X"26F" or x = X"277") and y > X"EC" and y < X"F4") or ((y = X"92" or y = X"89" or y = X"80" or y = X"77" or y = X"6F" or y = X"BD" or y = X"B4" or y = X"AB" or y = X"A2" or y = X"9A" or y = X"F0" or y = X"E8" or y = X"DF" or y = X"D6" or y = X"CD" or y = X"C5" or y = X"F8" or y = X"101" or y = X"10A" or y = X"113" or y = X"11B" or y = X"123" or y = X"12C" or y = X"135" or y = X"13E" or y = X"146" or y = X"14E" or y = X"157" or y = X"160" or y = X"169" or y = X"171") and x > X"13B" and x < X"143")else '0'; vidon <= '1' when ((hc < hfp) and (hc > hbp) and (vc < vfp) and (vc > vbp)) else '0'; -- habilita el spot en la pantalla rd <= '1' when (x > X"27" and x <= xmax and y > X"6F" and y <= ymax) else '0'; -- lee la señal de la memoria addr <= x; end Behavioral; 89 ANEXO E FUNDAMENTO MATEMÁTICO DEL CIRCUITO DE ATENUACIÓN Y ACONDICIONAMIENTO. CIRCUITO DE ATENUACIÓN. El circuito de atenuación descrito en los capítulos anteriores fue diseñado en base al software Electronics Workbench 9 y tiene como objetivo el atenuar las distintas señales procedentes de la tarjeta de sonido o del generador de funciones. Además permite crear una protección para el sobre voltaje permitiendo de esta forma cuidar el ADC presente en la tarjeta periférica AIO1. En la figura 5.1 se muestra el circuito de atenuación con sus respectivos valores de sus componentes. Figura 5.1 Circuito Atenuador. 90 El sustento matemático del circuito de atenuación se describe a continuación para la configuración de un operacional como un atenuador inversor tal como se ve en la figura 5.2 y está dado por la fórmula: Figura 5.2 Amplificador Inversor = * (V.1) En base a ésta ecuación se definirá los valores tanto para Rf y Ra. Cabe mencionar que el signo negativo de la ecuación (V.1) se debe que la señal de salida está desfasada 1800 con respecto a la señal que ingresa al circuito y no tiene relación a ningún valor de alguna resistencia. Para el primer módulo del circuito se tiene: ATENUADOR 1 En base a los requerimientos de diseño se tiene que Vo= 1V y Vi= 3V debido que para el atenuador 1 el rango de la señal de entrada va de 0 a 3V. En base a esto, la ecuación (V.1) se transforma en: (V.2) Tomando en cuenta la figura 5.1 la resistencia Rf= R1, Ra= R2 y Rc= R3. Asumiremos el valor de la resistencia Ra= 6.8 KΩ, por tanto Rf sería: *(6.8K) = 2.267 KΩ 2.2 KΩ Siendo así, R1= 2.2 KΩ, R2= 6.8 KΩ. Como se ve Rc no tiene incidencia en la fórmula (V.1), por tanto se puede suponer cualquier valor siendo de esta forma, R3= 1 KΩ. 91 ATENUADOR 2 En base a los requerimientos de diseño se tiene que Vo= 1V y Vi= 6V debido que para el atenuador 2 el rango de la señal de entrada va de 3 a 6V. Tomando en cuenta la figura 5.1 la resistencia Rf= R4, Ra= R5 y Rc= R6. Asumiremos el valor de la resistencia Ra= 7.5 KΩ, y basándose en la ecuación (V.2) por tanto Rf sería: *(7.5 K) = 1.25 KΩ 1.2 KΩ Siendo así, R4= 1.2 KΩ, R5= 7.5 KΩ. Como se ve Rc no tiene incidencia en la fórmula (V.1), por tanto se puede suponer cualquier valor siendo de esta forma, R6= 1 KΩ. ATENUADOR 3 En base a los requerimientos de diseño se tiene que Vo= 1V y Vi= 12V debido que para el atenuador 3 el rango de la señal de entrada va de 6 a 12V. Tomando en cuenta la figura 5.1 la resistencia Rf= R7, Ra= R8 y Rc= R9. Asumiremos el valor de la resistencia Ra= 47 KΩ, y basándose en la ecuación (V.2) por tanto Rf sería: *(47 K) = 3.92 KΩ 3.9 KΩ Siendo así, R7= 3.9 KΩ, R8= 47 KΩ. Como se ve Rc no tiene incidencia en la fórmula (V.1), por tanto se puede suponer cualquier valor siendo de esta forma, R9= 1 KΩ. La salida de cada uno de los atenuadores va a un circuito sumador inversor de múltiples entradas (figura 5.3), la cual tiene como objetivo multiplexar a una sola señal y desfasar nuevamente 180 para así tener una correcta fase con respecto a la señal de entrada original 92 Figura 5.3 Amplificador Inversor con Entradas Múltiples La ecuación para un amplificador inversor con estradas múltiples está dada por la siguiente fórmula: = * (V.3) Basándose en la figura 5.1 Ra= R10, Rb= R11, Rc= R12, Rf= R13 y Rd= R14. Éste circuito no pretende amplificar o atenuar la señal, solo multiplexar a una sola señal y desfasar la señal para que concuerde con la señal de ingreso. Por otro lado, debido a la acción del switch 1 solo ingresa una señal a la vez es decir, por ejemplo cuando el voltaje es existente en la señal Va, el voltaje en Vb y Vc serán cero. Tomando en cuenta estas consideraciones podemos asumir que Ra= Rb= Rc= Rd= Rf= 1 KΩ, por lo tanto R10= R11= R12= R13= R14= 1 KΩ. Finalmente, se coloca el circuito de protección que consiste en el uso de dos resistencias y cuatro diodos, tal como se muestra en la figura 5.4. Figura 5.4 Circuito de Protección de sobre-voltaje 93 En base al gráfico, el circuito actúa como un limitador de voltaje en donde R1 y R2 permiten limitar el nivel de voltaje deseado. En si para éste circuito no hay una fórmula establecida, por lo que para obtener la respuesta del circuito que satisfaga el umbral de voltaje deseado se debe ajustar continuamente los valores de las resistencias aunque existe la premisa que R1 debe de estar en el orden de decenas de Ω y R2 en centenas de KΩ. El circuito para cumplir con las prestaciones planteadas debe permitir el paso de voltaje como máximo de 1.6 V, valores mayores a éste el circuito atenuará la señal automáticamente presentado una distorsión en su amplitud. Con estas premisas, tenemos que el valor para el R1 será de 100 Ω, y para R2 el valor de 68 KΩ. En cuanto a los diodos se utiliza unos de uso general tal como lo son los 1N4148. CIRCUITO DE ADECUACIÓN. El circuito de adecuación intenta desplazar verticalmente la señal proveniente del circuito de atenuación para una adecuada digitalización por parte del ADC presente en la tarjeta periférica. El circuito se muestra en la figura 5.5 con los valores de sus componentes. Figura 5.5 Circuito de Adecuación. El sustento matemático del circuito de adecuación se describe a continuación para la configuración de un operacional como un atenuador no inversor con múltiples entradas (figura 5.6) y está dado por la fórmula: 94 Figura 5.6 Amplificador no Inversor con Entradas Múltiples = * * (V.4) Donde de acuerdo con los requerimientos del sistema Vo= 3V debido que es el valor máximo que puede recibir el ADC para la conversión de la señal analógica a digital. Además se tiene que Va= VCC33= 3.3V que es el voltaje de alimentación que proviene de la tarjeta periférica conectada hacia el FPGA, el valor de Vb= 1V que proviene desde el circuito de atenuación. Por otro lado, se hará la suposición que el valor de Ra= 9.7 KΩ y Rb= 4.7 KΩ, convirtiéndose de esta forma la ecuación (V.4) en: (V.5) En base a la ecuación (V.5) y reemplazando los valores de Ra, Rb, Vo, Va y Vb, podemos encontrar al relación de valores entre Rf y Rc. ; 0.7136 Si asumimos que el valor de Rc= 6.8 KΩ, entonces por despeje de la formula anterior tenemos: KΩ KΩ 4.8 KΩ 95 Hay que indicar que el objetivo de éste circuito es el de variar el desplazamiento vertical de la señal o “shift up”, por lo que la resistencia Ra= 9.7 KΩ se derivará en dos resistencia en serie, con un potenciómetro de 5 KΩ el cual controlará el desplazamiento vertical y una resistencia de 4.7 KΩ, tal como se observa en la figura 5.5. 96 ANEXO F TITULO: Sistema de adquisición y monitoreo de señales eléctricas, basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias bajas CONTENIDO: Diseño del Sistema de Monitorización de Señales en Frecuencia en SysGen REVISADO: FECHA: 10-12-2008 DIBUJO: NÚMERO: 1/3 5 ESCALA: 1:1 97 TITULO: Sistema de adquisición y monitoreo de señales eléctricas, basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias bajas CONTENIDO: Diseño del Módulo Filtrado y Diezmado en SysGen REVISADO: FECHA: 10-12-2008 DIBUJO: NÚMERO: 2/3 6 ESCALA: 1:1 98 TITULO: Sistema de adquisición y monitoreo de señales eléctricas, basado en la utilización de una FPGA, para análisis y caracterización de señales en el rango de frecuencias bajas CONTENIDO: Diseño del Módulo Windowing, FFT y Magnitud en SysGen REVISADO: FECHA: 10-12-2008 DIBUJO: NÚMERO: 3/3 7 ESCALA: 1:1 99 ANEXO G DISEÑO EN MATLAB PARA EL SISTEMA DE MONITORIZACIÓN DE SEÑALES EN FRECUENCIA. CÓDIGO PARA LA VENTANA DE BLACKMAN. g=blackman(512); %se define el valor para la FFT de 512 period=1/25000000; CÓDIGO PARA EL MUX, BLOQUE M-CODE. function sal = mux (out_lpf,out_bpf,out_hpf); val=1; if val==1; sal = (out_lpf)+(out_bpf)+(out_hpf); else sal = 0; end CÓDIGO PARA LA VISUALIZACIÓN DESDE EL FPGA. idxr=find(real~=0&real~=NaN); idxi=find(imag~=0&imag~=NaN); R2=real(idxr(1):end); Q2=imag(idxr(1):end); idxm=find(mag~=0&mag~=NaN); R22=mag(idxr(1):end); Yx=R2+j*Q2; l=1; k=512; for l=1:90 Yt=R2+j*Q2; Pyy =abs(Yt/512); f =48000*(0:256)/512; figure(2) plot(f,10*log(Pyy(1+k:257+k))) title('Frecuencia de la Señal') xlabel('Frecuencia (Hz)') ylabel('Magnitud (dB)') grid AXIS([0 14500 -130 20]) 100 drawnow %pause(0.3) k=k+512; end clc