Está en la página 1de 18

INSTITUTO TECNOLÓGICO DE CELAYA

DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA

“Proyecto Final”

Reporte

PRESENTA

GAONA CÁRDENAS LUIS FERNANDO

PROFESOR

DR. ALEJANDRO ESPINOSA CALDERÓN


Introducción
La tarjeta de desarrollo Spartan-3A Starter Kit solo requiere la descarga de un programa .bit al FPGA
para su uso lo cual la hace útil al instante de ser conectada. El diseño contiene un almacenamiento en
Flash externo, dispositivos de E / S, como la pantalla VGA y puertos seriales, y actuadores visuales,
además de características FPGA, y el modo Suspender de ahorro de energía.
La placa Spartan-3A Starter Kit tiene una pantalla de cristal líquido (LCD) de 2 líneas por 16
caracteres. Esta tarjeta de desarrollo permite la comunicación y control entre el FPGA y la pantalla
LCD a través de la interfaz de datos de ocho bits mostrada en la Fig. 1, a diferencias de otras tarjetas
como la placa Spartan-3E Starter Kit cuya interfaz de datos es de 4 bits, sin embargo, la tarjeta 3A
también cuenta con una configuración compatible con esta interfaz.

Figura 1: Comunicación entre el FPGA y el LCD


La pantalla LCD es una forma práctica de mostrar una variedad de información utilizando caracteres
ASCII estándar y personalizados. Sin embargo, estas pantallas no son rápidas. Desplazar la pantalla
a intervalos de medio segundo prueba el límite práctico de claridad. Comparado con el reloj de 50
MHz disponible en la placa, la pantalla es lenta.
Conversión analógica a digital

Un conversor o convertidor de señal analógica a digital (Conversor Analógico Digital, CAD; Analog-
to-Digital Converter, ADC) es un dispositivo electrónico capaz de convertir una señal analógica, ya
sea de tensión o corriente, en una señal digital mediante un cuantificador y codificándose en
muchos casos en un código binario en particular. Donde un código es la representación unívoca de
los elementos, en este caso, cada valor numérico binario hace corresponder a un solo valor de
tensión o corriente.

En la cuantificación de la señal se produce pérdida de la información que no puede ser recuperada


en el proceso inverso, es decir, en la conversión de señal digital a analógica y esto es debido a que
se truncan los valores entre 2 niveles de cuantificación, mientras mayor cantidad de bits mayor
resolución y por lo tanto menor información pérdida.

Se utiliza en equipos electrónicos como computadoras, grabadores de sonido y de vídeo, y equipos


de telecomunicaciones.

Ventajas de usar señales digitales

 Cuando una señal digital es atenuada o experimenta perturbaciones leves, puede ser
reconstruida y amplificada mediante sistemas de regeneración de señales.
 Cuenta con sistemas de detección y corrección de errores, que se utilizan cuando la señal
llega al receptor; entonces comprueban (uso de redundancia) la señal, primero para
detectar algún error, y, algunos sistemas, pueden luego corregir alguno o todos los errores
detectados previamente.
 Facilidad para el procesamiento de la señal. Cualquier operación es fácilmente realizable a
través de cualquier software de edición o procesamiento de señal.
 La señal digital permite la multigeneración infinita sin pérdidas de calidad.
 Es posible aplicar técnicas de compresión de datos sin pérdidas o técnicas de compresión
con pérdidas basados en la codificación perceptual mucho más eficientes que con señales
analógicas.

Inconvenientes de la señal digital

 Se necesita una conversión analógica-digital previa y una decodificación posterior, en el


momento de la recepción.
 Si no se emplean un número suficiente de niveles de cuantificación en el proceso de
digitalización, la relación señal ruido (SNR) de la señal resultante se verá reducida.
 El contenido en frecuencia de la señal digital viene limitado por la frecuencia de Nyquist, de
forma que la componente máxima se corresponde con la mitad de la tasa de muestreo.
Además, por cuestiones prácticas, se debe dejar un margen de seguridad desde la
frecuencia de Nyquist y el límite de la banda de interés. Así por ejemplo, en los CD, cuya
frecuencia de muestreo es 44,1 kHz, la componente máxima es 22,05 kHz y la banda de
interés se limita a los 20 kHz (margen del 10%).

Muestreo

La digitalización o conversión A/D, básicamente, consiste en realizar de forma periódica medidas de


la amplitud (tensión) de una señal; por ejemplo, la que proviene de un micrófono si se trata de
(retención) por un circuito de retención (hold), el tiempo suficiente para permitir evaluar su nivel
(cuantificación). Desde el punto de vista matemático, este proceso no se contempla porque se trata
de un recurso técnico debido a limitaciones prácticas, y carece de modelo matemático.

Durante el “muestreo” y la “retención”, la señal aún es analógica, puesto que aún puede tomar
cualquier valor. No obstante, a partir de la “cuantificación”, cuando la señal ya toma valores finitos,
la señal ya es digital. Los cuatro procesos tienen lugar en un conversor analógico-digital.

Cuantificación
En el proceso de cuantificación se mide el nivel de voltaje de cada una de las muestras. Consiste en
asignar un margen de valor de una señal analizada a un único nivel de salida. Incluso en su versión
ideal, añade como resultado una distorsión no deseada a la señal de entrada: el ruido de
cuantificación.

Codificación

La codificación consiste en traducir los valores obtenidos durante la cuantificación al código binario.
Hay que tener presente que el código binario es el más utilizado, pero también existen otros tipos
de códigos que también son utilizados.

Objetivo
El presente reporte describe el uso de convertidor analógico digital (ADC) el cual se usa para
muestrear una señal del tipo senoidal para así encontrar el valor pico de la señal y posterior mente
encontrar el valor rms de la señal y mostrar ese valor en el LCD y mandarlo a la computadora usando
una comunicación RS232.

Antecedentes
El manual del usuario de la tarjeta Spartan-3A/3AN FPGA Starter Kit [1] es su capítulo 5 da una
descripción general sobre el uso del LCD y la posible implementación para impresión de caracteres.
Entre lo más importante se encuentran los siguientes puntos.
El LCD tiene una configuración de 2 x 16 caracteres y tiene un controlador de gráficos interno
Sitronix ST7066U, El controlador tiene tres regiones de memoria internas, cada una con un propósito
específico: DD RAM, CG ROM y CG RAM. La pantalla debe ser inicializada antes de acceder a
cualquiera de estas regiones de memoria.
La RAM de datos de pantalla (DD RAM) almacena el código de caracteres que se mostrará en la
pantalla. La Fig. 2 Muestra la dirección predeterminada para las 32 posiciones de caracteres en la
pantalla. La línea superior de caracteres se almacena entre las direcciones 0x00 y 0x0F. La segunda
línea de caracteres se almacena entre las direcciones 0x40 y 0x4F.

Figura 2: Direcciones Hexadecimales de la DDRAM.


La ROM del generador de caracteres (CG ROM) contiene el mapa de bits de la fuente para cada uno
de los caracteres predefinidos que puede mostrar la pantalla LCD, como se muestra en la Fig. 3 . El
código de caracteres almacenado en DD RAM para cada ubicación de caracteres hace referencia
posteriormente a una posición con el CG ROM.
Figura 3: Set de caracteres para el LCD
El generador de caracteres RAM (CG RAM) proporciona espacio para crear ocho mapas de bits de
caracteres personalizados. Cada ubicación de caracteres personalizados consta de un mapa de bits de
5 puntos por 8 líneas, como se muestra en la Fig. 4.

Figura 4: Ejemplo de un tablero de ajedrez personalizado con código de caracrter


La Fig. 5 resume los comandos del controlador LCD y las definiciones de bits disponibles. Porque la
pantalla se configura para la operación de cuatro bits, cada comando de ocho bits se envía como dos
de cuatro bits. El nibble superior se transfiere primero, seguido por el nibble inferior.

Figura 5: Set de Comandos del LCD.


Si la señal de habilitación de LCD_E es baja, se ignoran todas las demás entradas de la pantalla
LCD.
Las funciones “Clear the display” y “Return cursor home”, Borra la pantalla y devuelve el cursor a la
posición inicial que corresponde a la esquina superior izquierda. Este comando escribe un espacio en
blanco (código de caracteres ASCII / ANSI 0x20) en todas las direcciones de DD RAM. El contador
de direcciones se restablece a 0, ubicación 0x00 en DD RAM. Borra todas las opciones. El bit de
control I / D se establece en 1 (modo de contador de direcciones de incremento) en el comando “Entry
Mode Set”.
El comando Clear the display se realiza con un tiempo de ejecución que va desde 82 μs a 1.64 ms, el
comando Return cursor home se realiza con un tiempo de ejecución que va desde 40 μs a 1.6 ms y el
comando Entry Mode Set se realiza con un tiempo de ejecución de 40 μs, esto es importante ya que
se deben considerar los tiempos de procesamiento inicial de la Pantalla para los pasos posteriores.

“Display On/Off” esta función permite el encendido o pagado del display controlando todos los
caracteres. El cursor y el carácter de la posición del cursor parpadean. El cursor utiliza los cinco
puntos en la línea inferior del carácter. El cursor aparece como una línea debajo del carácter mostrado.
Esto tiene un tiempo de procesamiento de 40 μs.

El comando “Cursor and Display Shift” mueve el cursor y desplaza la pantalla sin cambiar el
contenido de la memoria RAM DD. Desplaza la posición del cursor o la pantalla a la derecha o a la
izquierda sin escribir o leer los datos de la pantalla. Esta función posiciona el cursor para modificar
un carácter individual, o para desplazar la ventana de visualización hacia la izquierda o hacia la
derecha para revelar datos adicionales almacenados en la RAM DD, más allá del carácter decimosexto
en una línea.
El cursor se desplaza automáticamente a la segunda línea cuando se desplaza más allá de la ubicación
del carácter número 40 de la primera línea. Las pantallas de primera y segunda línea cambian al
mismo tiempo. Cuando los datos visualizados se desplazan repetidamente, ambas líneas se mueven
horizontalmente. La segunda línea de visualización no cambia a la primera línea de visualización.
Tiempo de Procesamiento 40 μs.

“Function Set” Establece la longitud de los datos de la interfaz, el número de líneas de la pantalla y
la fuente del carácter. El tablero del kit de inicio admite un único conjunto de funciones con valor
0x28. Tiempo de ejecución 40 μs.

“Set CG RAM Address” Establece la dirección inicial de la RAM del CG. Después de este comando,
todas las operaciones subsiguientes de lectura o escritura en la pantalla son hacia o desde la RAM
CG. Tiempo de ejecución: 40 μs.

“Set DD RAM Address” Establece la dirección DD RAM inicial. Después de este comando, todas las
operaciones subsiguientes de lectura o escritura en la pantalla son hacia o desde DD RAM. Tiempo
de ejecución: 40 μs.
“Write Data to CG RAM or DD RAM" Graba datos en DD RAM si el comando sigue un comando
Set DD RAM Address anterior, o escribe datos en CG RAM si el comando sigue un comando anterior
Set CG RAM Address.

El contador de direcciones se decrementa en uno. 0 1 Desplace la posición del cursor hacia la derecha.
El contador de direcciones se incrementa en uno. 1 0 Mueva toda la pantalla hacia la izquierda. El
cursor sigue el desplazamiento de la pantalla. El contador de direcciones no cambia. 1 1 Desplace la
pantalla completa hacia la derecha. El cursor sigue el desplazamiento de la pantalla. El contador de
direcciones no cambia. Después de la operación de escritura, la dirección se incrementa o disminuye
automáticamente en 1 de acuerdo con el parámetro Modo de entrada. El modo de entrada también
determina el desplazamiento de la pantalla. Tiempo de Ejecución: 40 μs

“Read Data from CG RAM or DD RAM” Lee los datos de DD RAM si el comando sigue un comando
anterior Set DD RAM Address o lee datos de CG RAM si el comando sigue un comando anterior Set
CG RAM Address. Después de la operación de lectura, la dirección se incrementa o disminuye
automáticamente en 1 según el comando Set de modo de entrada. Sin embargo, no se ejecuta un
cambio de pantalla durante las operaciones de lectura. Tiempo de Ejecución: 40 μs

Después de encendido, la pantalla debe inicializarse para establecer el protocolo de comunicación


requerido. La secuencia de inicialización es sencilla e ideal para el controlador embebido PicoBlaze
de ocho bits de alta eficiencia. Después de la inicialización, el controlador PicoBlaze está disponible
para un control o cálculo más complejo, más allá de simplemente conducir la pantalla.

La secuencia de inicialización establece primero que la aplicación FPGA [2] desea utilizar la interfaz
de datos de cuatro bits en la pantalla LCD de la siguiente manera:

1. Espere 15 ms o más, aunque la pantalla está generalmente lista cuando FPGA termina la
configuración. El intervalo de 15 ms es de 750.000 ciclos de reloj a 50 MHz.
2. Escriba LCD_DB <7: 4> = 0x3, y pulse LCD_E High durante 12 ciclos de reloj.
3. Espere 4,1 ms o más, lo que es 205,000 ciclos de reloj a 50 MHz.
4. Escriba LCD_DB <7: 4> = 0x3 y pulse LCD_E High durante 12 ciclos de reloj.
5. Espere 100 μs o más, lo que es 5.000 ciclos de reloj a 50 MHz.
6. Escriba LCD_DB <7: 4> = 0x3, y pulse LCD_E High durante 12 ciclos de reloj.
7. Espere 40 μs o más, lo que es 2.000 ciclos de reloj a 50 MHz.
8. Escriba LCD_DB <7: 4> = 0x2, y pulse LCD_E High durante 12 ciclos de reloj.
9. Espere 40 μs o más, lo que es 2.000 ciclos de reloj a 50 MHz.
Convertidor Analógico Digital usado para este proyecto

Figura 6: PMOD AD1.


La placa de conversión de módulo analógico a digital (AD1) convierte las señales a una tasa de
muestreo máxima de un millón de muestras por segundo, lo suficientemente rápido para los más
exigentes aplicaciones de audio. El AD1 utiliza un conector de cabecera de 6 pines, y con menos de
una pulgada cuadrada es lo suficientemente pequeño como para ubicarse en la fuente de la señal.
Las características incluyen:
• dos ADCS7476MSPS A / D de 12 bits chips convertidores
• un conector de cabecera de 6 pines
• un conector de 6 pines
• dos filtros anti-alias Sallen-Key de 2 polos
• dos conversiones A / D simultáneas canales en hasta un MSa por canal
• Muy bajo consumo de energía
• Factor de forma pequeño (0.95 "x 0.80").
Figura 7: Diagrama a bloques del PMOD.
El AD1 convierte una señal de entrada analógica con un rango de 0-3.3 voltios a un valor digital de
12 bits en el rango de 0 a 4095. El AD1 tiene dos canales de conversión A / D simultáneos, cada uno
con un convertidor y filtro de 12 bits. Cada canal puede muestrear un separado
Transmisión de señales analógicas. El AD1 también puede convertir un solo flujo de señales
analógicas usando solo un canal. Cada canal tiene dos filtros antialias Sallen-Key de 2 polos con
polos configurados a 500 KHz. Los filtros limitan el ancho de banda de la señal analógica a un rango
de frecuencia adecuado para la frecuencia de muestreo del convertidor.
El AD1 utiliza el estándar de bus serie SPI / MICROWIRE ™ para enviar datos convertidos al sistema
host. El bus serie puede funcionar a hasta 20 MHz. El AD1 tiene un encabezado de 6 pines y un 6
pines
Conector para una fácil conexión a una placa del sistema Digilent u otros productos Digilent. Algunas
placas del sistema, como la placa Digilent Pegasus, tienen un cabezal de 6 pines que se puede conectar
al AD1 con un cable de 6 pines. Para conectar el AD1 a otras placas del sistema Digilent, es posible
que se necesite una placa de interfaz modular (MIB) de Digilent y un cable de 6 clavijas. La MIB se
conecta a la placa del sistema y el cable conecta la MIB al AD1. El AD1 puede ser alimentado por
voltaje desde una placa del sistema Digilent o desde un dispositivo externo. Se pueden producir daños
si se suministra alimentación de ambas fuentes o si el dispositivo externo suministra más de 3V.
Xilinx core generator
El sistema CORE Generator ™ de Xilinx acelera el tiempo de diseño al proporcionar acceso a
Propiedades Intelectuales (IP) altamente parametrizadas para los FPGA de Xilinx y está incluido en
la Suite de Diseño ISE®. CORE Generator proporciona un catálogo de arquitectura específica,
dominio específico (integrado, conectividad y DSP) y IP específica del mercado (Automoción,
Consumidor, Mil / Aero, Comunicaciones, Transmisión, etc.). Estas funciones de IP personalizables
por el usuario varían en complejidad desde las funciones más utilizadas, como las memorias y FIFO,
hasta los bloques de construcción a nivel del sistema, como los filtros y las transformaciones. El uso
de estos bloques de IP puede ahorrar días o meses de tiempo de diseño. La IP altamente optimizada
permite a los diseñadores de FPGA concentrar sus esfuerzos en crear diseños más rápido y, al mismo
tiempo, ayudar a que los productos lleguen al mercado más rápido.
También puede generar HDL a medida para configurar rápidamente elementos arquitectónicos FPGA
como MGTs y bloques duros Ethernet y PCI Express utilizando los personalizadores basados en GUI
LogiCORE ™ integrados y los asistentes de arquitectura Core Generator. A través de su perfecta
integración con el entorno de desarrollo ISE, el sistema CORE Generator agiliza su proceso de diseño,
mejora la calidad del diseño y lo ayuda a terminar más rápido.
La IP específica del catálogo de CORE Generator IP se puede utilizar en la metodología de elección
del diseñador:

 Para diseñadores de lógica utilizando Project Navigator.


 Para los diseñadores de algoritmos DSP que usan Xilinx System Generator
 Para diseñadores integrados que utilizan Xilinx Platform Studio (XPS)
Características clave

 Incluido en todas las ediciones de ISE Design Suite así como en ISE WebPACK.
 Busque IP por palabra clave u ordene los listados de IP alfabéticamente o por tipo de función.
También puede ver el núcleo de IP programado para ser "Reemplazado" por versiones más
recientes y los núcleos programados para "Descontinuado" se pueden ver seleccionando
"Todas las versiones de IP".
 Los núcleos IP compatibles con la familia de dispositivos seleccionados se pueden ver
seleccionando "Solo IP compatible con la parte elegida".
 Fácil acceso a información detallada sobre cada núcleo (hojas de datos, guías del usuario,
notas de la versión, estado de las licencias, listas de mejoras para nuevas versiones).
Salida IP mejorada:

 Generación de archivos de proyectos de ISE Design Suite para facilitar la integración y la


gestión de los núcleos IP en Project Navigator.
 Los núcleos seleccionados de procesamiento de imagen y video generan "EDK Pcore" para
facilitar la integración y la administración de los núcleos IP en los proyectos XPS.
 La actualización automatizada del núcleo a la capacidad de la última versión está disponible
para los siguientes núcleos de IP: sumador de sumador, acumulador, contador binario,
generador de memoria de bloques, multiplicador complejo, CORDIC, multiplicador y
registro de cambios basado en RAM.
 Capacidad para permitir la regeneración de todos los núcleos IP del proyecto con
configuraciones de proyecto diferentes a las que se usaron originalmente para generar el
núcleo.

Señales de la RS-232.

 Request To Send (RTS) Esta señal se envía de la computadora (DTE) al módem (DCE) para
indicar que se quieren transmitir datos. Si el módem decide que esta OK, asiente por la línea
CTS. Una vez la computadora prende la señal RTS, esperará que el módem asiente la línea
CTS. Cuando la señal CTS es afirmado por el módem, la computadora empezará a transmitir
datos.
 Clear To Send (CTS) Afirmado por el módem después de recibir la señal de RTS indica que
la computadora puede transmitir.

 Data Terminal Ready (DTR) Esta línea de señal es afirmada por la computadora, e informa
al módem que la computadora está lista para recibir datos.

 Data Set Ready (DSR) Esta línea de señal es afirmada por el módem en respuesta a una señal
de DTR de la computadora. La computadora supervisa el estado de esta línea después de
afirmar DTR para descubrir si el módem esta encendido.

 Receive Signal Line Detect (RSLD) Esta línea de control es afirmada por el módem e informa
a la computadora que se ha establecido una conexión física con otro módem. A veces se
conoce como detector de portadora (CD). sería un error que una computadora transmita
información a un módem si esta línea no está prendida, es decir si la conexión física no
funciona.

 Transmit Data (TD) es la línea por donde el dato se transmite de un bit a la vez

 Receive Data (RD) es la línea por donde el dato se recibe de un bit a la vez.

Metodología
Utilizando lo aprendido en la materia se utilizaron varios recursos ya hechos, por ejemplo la
transmisión RS232 y la impresión en el LCD de la tarjeta Spartan 3A. Para la realización de este
proyecto primero se obtuvo la resolución del ADC, esto nos permite saber a cuanta cantidad de voltaje
equivale cada muestra que se tome, en la fórmula 1 se puede observar como se obtuvo la resolución.
3.3
= = = .000805
2 4095
Formula 1: Resolución del ADC.
Sabiendo la resolución del ADC procedemos a programarlo, eso solo es el primer paso, ahora esas
muestras se tienen que guardar en una memoria para posteriormente analizarlas y encontrar el valor
mayor dentro de todas estas muestras.
En la figura 8 se puede observar el diagrama RTL completo utilizado para el desarrollo de este
proyecto,
Figura 8: Diagrama RTL.
RAM
Utilizando la herramienta ya mencionada en los antecedentes (core generator) se creó una memoria
RAM que contiene 4096 direcciones las cuales equivalen a la cantidad de muestras que nos genera el
PMOD AD1, cada dirección tiene un tamaño de 12 bits para soportar la cantidad de datos que manda
el convertidor.

Figura 9: Imagen de la memoria diseñada en core generator.


Contador
Este contador cuenta de 0 a 4095 valores, equivalente a la cantidad de direcciones que contiene la
memoria RAM, el botón de enable esta enlazado al we (write enable) de la memoria RAM, esto
permite que los datos mandados por el AD1 se puedan escribir en las direcciones de la RAM solo
hasta que se habilite el we y el enable del contador.
Mayor
En el cuadro de mayor, todas las muestras guardadas dentro de la memoria RAM se analizan una por
una hasta encontrar el valor mayor dentro de ellas, al encontrar ese valor se envía hacia la parte de la
división.
División
Esta división solo divide el número mayor entre dos, este se hace para poder darle un offset a la señal
de entrada.
Multiplicación
La multiplicación se hace para encontrar el valor rms de la señal, el obtener el valor máximo solo es
la mitad del trabajo debido a que este valor es el voltaje pico de la señal, para poder realizar el cambio
a rms se utiliza la fórmula 2.
= ∗ .707
Formula 2: Valor rms de la señal.
LUT
Dentro de esta lo que se hace es que al convertir el numero binario en decimal el número que se
obtenga de esa conversión se empieza a buscar dentro del programa y al encontrar el valor correcto
ese valor se busca dentro de la tabla del LCD (Figura 10) y se imprime, debido a que la resolución
del AD1 es mucha se optó por quitarle algo de resolución, esto se debe a que la LUT para mostrar los
valores en el LCD sería demasiado larga y esto ocasionaría que se utilizaran varios recursos de la
FPGA, para evitar esto los valores obtenidos mediante el ADC se convirtieron a decimal, y dentro
del programa cada valor se multiplico por 100, para poder obtener los valores y poder mostrarlos,
aunque esto ocasiona que los valores mostrados en el LCD tengan un error relativamente grande a
comparación de lo que se obtiene con matlab.
Figura 10: Diagrama de funcionamiento.
LCD
0 124 0 0.0
125 248 1 0.1
249 372 2 0.2
373 496 3 0.3
497 620 4 0.4
621 744 5 0.5
745 868 6 0.6
869 992 7 0.7
993 1116 8 0.8
1117 1240 9 0.9
1241 1364 0 1
1365 1488 1 1.1
1489 1612 2 1.2
1613 1736 3 1.3
1737 1860 4 1.4
1861 1984 5 1.5
1985 2108 6 1.6

Tabla 2: Resolución para el LCD.


En la tabla dos se puede observar que al convertir los datos a decimal, de un valor de 0 a 124 el LCD
mostrara un 0, de 125 a 248 mostrara un 1 y así cada 124 valores hasta llegar a 4095.
RS232
Para mayor facilidad se optó por enviar solamente el valor máximo encontrado mediante la
comparación y enviar ese dato mediante la comunicación ya que ese dato solo es de 12 bits, al enviar
ese dato a matlab se implementa un script el cual realiza todo el algoritmo de nuevo, es decir dividir
el resultado y multiplicarlo por .707 para obtener el valor rms.

Simulaciones

Figura 10: simulación de RAM y datos.


Como se puede observar en la figura 10, cuanto el we de la memoria se encuentra habilitado se
empiezan a escribir los datos dentro de la memoria, y cuado se guardan se empiezan a analizar en la
bloque de mayor, y como se puede observar en la figura 11 al ingresar y analizar todos los datos de
la memoria, en el tiempo de 42990 ns se obtiene el valor máximo de los datos dividido entre dos.

Figura 11: Simulación en ISIM del algoritmo.

Resultados
Para verificar el resultado de este algoritmo implementado, se procede a realizar un barrido de voltajes
pico por medio de un Generador de funciones, y para verificar el resultado obtenido se utilizó un
Osciloscopio.
Vp Osciloscopio Matlab Teorico

0.1 0.001 0.0116 0.0707


0.2 0.002 0.022 0.1414
0.3 0.0029 0.029 0.2121
0.4 0.0036 0.0361 0.2828
0.5 0.00434 0.0435 0.3535
0.6 0.005 0.0507 0.4242
0.7 0.005 0.0536 0.4949
0.8 0.007 0.0649 0.5656
0.9 0.0765 0.7128 0.6363
1 0.0796 0.7843 0.707
1.1 0.086 0.8554 0.7777
1.2 0.094 0.9263 0.8484
1.3 0.101 0.9977 0.9191
1.4 0.108 1.06 0.9898
1.5 0.115 1.14 1.0605

En la tabla que se muestra en la parte de arriba se puede observar los valores pico que se introdujeron
mediante el generador de funciones, también se puede observar los valores que se obtuvieron con el
Osciloscopio los valores obtenidos con el Matlab y los valores teóricos.
Figura 12: Grafica de comparación de resultados.
En la figura 12 se puede observar que el valor obtenido en matlab tiene un error muy grande con los
valores que se encuentran entre 0 y .8 Vp, esto se debe a que las señales que se introducen entre 0 y
0.8 tienen demasiado ruido en la señal como se muestra en la figura 13.

Figura 13: Señal con ruido.


Este ruido nos ocasiona que los valores no se puedan leer correctamente debido a que la señal es
demasiado pequeña, para evitar esto se puede utilizar un filtro externo, es decir utilizar capacitores
para filtrar la señal o utilizar un filtro digital, pero esto proyecto no abarco esa parte, por lo tanto se
puede realizar para un trabajo fututo.
Problemática principal
La principal problemática que se encontró en este proyecto fue cuando se trasmitían los datos de la
tarjeta FGPA a matlab, ya que matlab solo puede leer bits de 8, 16 o 32 bits y no sé 12 bits como se
tenía previsto, matlab leía los 12 bits pero a ese dato le concatenaba 4 1’s para poder completar los
16 bits y ese ocasionaba que el algoritmo siempre estuviera mal.
Para corregir esto se procedió a realizar algunos cambios en la programación de la tarjeta FPGA, en
vez de mandar un dato de 12 bits se procedió a mandar dos datos de 8 bits y el script que se puede
ver en la parte de abajo funciona de manera que puede leer dos datos de 8 bits y después los concatena
en un solo vector de 16 bits, después de esto se procede a convertir el dato a decimal para después
aplicarle la multiplicación por la resolución y transformar ese dato a un valor rms.

Conclusiones
El Procesamiento de Señales Digitales o DSP es la manipulación matemática de una señal de
información para modificarla o mejorarla en algún sentido. Este está caracterizado por la
representación en el dominio del tiempo discreto, en el dominio frecuencia discreta, u otro dominio
discreto de señales por medio de una secuencia de números o símbolos y el procesado de esas señales.
Todo este proyecto nos llevó a darnos cuenta de la magnitud de todo lo que se puede hacer con el
lenguaje de programación VHDL, y el utilizar varios recursos de la tarjeta para realizar operaciones
complejas como el procesamiento digital de señales, y la comunicación RS232.
El FPGA es una herramienta muy poderosa y útil, ya que se pueden realizar operaciones de un DSP
dentro de la tarjeta lo que la hace muy útil, y en comparación con el DSP el FPGA tiene muchas
ventajas como que su arquitectura trabaja en paralelo lo que la hace más rápida y trabaja mediante
reconfiguración de hardware.

Referencias
[1] Xilinx, «Spartan-3A/3AN FPGA Starter Kit Board User Guide,» Xilinx, Inc., 2008.
[2] F. D. R. Huiltron, «Reporte LCD,» Celaya Guanajuato, 2017.
[3] R. d. J. R. Troncoso, Electrónica digital y lógica programable, Guanajuato: Universidad de
Guanajuato (UGto), 2016.

También podría gustarte