scieee AI-readable full text Open interactive document viewer

Sistema de medida remota de señales eléctricas en tiempo real.

Ruiz Martínez, Ángel

Abstract

El objetivo del trabajo es la realización de una monitorización y control de manera remota de un convertidor analógico-digital. Para ello nos serviremos de la placa ZedBoard y de los diversos recursos de los que dispone. Usaremos uno de los dos microprocesadores para la gestión del convertidor y en el otro microprocesador ejecutaremos un sistema operativo Linux muy básico que nos ayudará con las comunicaciones del sistema. Para la realización del proyecto deberemos fabricar en primer lugar una placa de desarrollo para conectar esta con la ZedBoard y poder obtener los datos del mismo para su posterior envío. Además, tendremos que desarrollar todas las aplicaciones necesarias para todo el proceso.

Full text

Equation Chapter 1 Section 1 Trabajo Fin de grado Grado en Ingeniería de Tecnologías de Telecomunicación. Sistema de medida remota de señales eléctricas en tiempo real. Autor: Ángel Ruiz Martínez Tutor: Sergio Vázquez Pérez Dpto. Ingeniería Electrónica Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 2 Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de Telecomunicación. Sistema de medida remota de señales eléctricas en tiempo real. Autor: Ángel Ruiz Martínez Tutor: Sergio Vázquez Pérez Profesor titular Dpto. de Ingeniería Electrónica Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 4 Trabajo Fin de Grado: Sistema de medida remota de señales eléctricas en tiempo real. Autor: Ángel Ruiz Martínez Tutor: Sergio Vázquez Pérez El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2018 6 El Secretario del Tribunal Agradecimientos Me gustaría agradecer a Sergio Vázquez Pérez por su implicación en el proyecto y todas las indicaciones y conocimientos que me ha proporcionado para la realización del presente proyecto. A su vez, por extensión, a todo el Departamento de Electrónica de la Escuela Técnica Superior de Ingenieros y a la Universidad de Sevilla por los medios prestados para la realización del mismo. También agradecer a Abraham Márquez Alcaide por el desarrollo de la interfaz externa, una de las partes utilizadas en la elaboración del mismo. Resumen El objetivo del trabajo es la realización de una monitorización y control de manera remota de un convertidor analógico-digital. Para ello nos serviremos de la placa ZedBoard y de los diversos recursos de los que dispone. Usaremos uno de los dos microprocesadores para la gestión del convertidor y en el otro microprocesador ejecutaremos un sistema operativo Linux muy básico que nos ayudará con las comunicaciones del sistema. Para la realización del proyecto deberemos fabricar en primer lugar una placa de desarrollo para conectar esta con la ZedBoard y poder obtener los datos del mismo para su posterior envío. Además, tendremos que desarrollar todas las aplicaciones necesarias para todo el proceso. 8 Abstract The objective of the project is the realization of a remote monitoring and control of an analog-digital converter. For this we will use the ZedBoard and the various resources available. We will use one of the two microprocessors for the management of the converter and in the other microprocessor we will execute a basic Linux OS that will help us with the communications of the system. For the realization of the project we will have to first manufacture a development board to connect it with the ZedBoard and to obtain the data of it for later shipment. In addition, we will have to develop all the necessary applications for the whole process. Índice Agradecimientos 6 Resumen 7 Abstract 8 Índice 9 Índice de Figuras 11 1 Introducción 13 2 ADS8365 14 2.1 Características 14 2.2 Placa de Desarrollo 15 2.2.1 Elementos 15 2.2.2 Fabricación 16 2.2.3 Configuración 17 3 ZedBoard 19 3.1 Características generals 19 3.2 Recursos a usar 20 3.3 Desarrollo hardware 23 3.3.1 Creación de un proyecto 23 3.3.2 Selección de recursos 27 3.3.3 Finalizar Proyecto 31 4 Conexionado 33 5 Desarrollo software 37 5.1 LINUX 37 5.1.1 Compilación 37 5.1.1.1 uImage 38 5.1.1.2 devicetree.dtb 39 5.1.1.3 uramdisk.image.gz 39 5.1.1.4 BOOT.bin 40 5.1.1.4.1 main_wrapper.bit 40 5.1.1.4.2 u-boot.elf 40 5.1.1.4.3 fsbl.elf 40 5.1.1.4.4 app_cpu1.elf 41 5.1.2 Funcionamiento 41 5.2 Aplicación ADS8365 (app_cpu1) 42 5.3 Aplicación Servidor (s_control) 43 5.4 Interfaz Externa 44 16 positiva de uno de los canales. La parte negativa de esa entrada diferencial al canal irá conectada a la VREF de este integrado. Necesitamos un valor de tensión de referencia VREF de 2.5V y para conseguir este valor de manera estable usaremos el integrado OPA343 [3]. Ilustración 2-4: OPA343 Por último, también necesitaremos otra tensión de referencia para el ADS8365 en este caso de valor 2.048V. Para conseguir esta nos serviremos de la referencia de tensión LM4040 [4]. Ilustración 2-5: LM4040 Solo falta añadir algunos comentarios sobre el diseño completo. Para el correcto funcionamiento del sistema necesitaremos tres alimentaciones diferentes en la placa de desarrollo. La alimentación analógica marcada como AVDD será de 5v, la alimentación digital, marcada como BVDD será de 3V y, por último, necesitaremos dos tensiones de +15V y -15V para dotar a los canales del rango de funcionamiento correcto. Además, para optimizar la conexión con la Zedboard necesitaremos tener accesibles las dieciséis entradas correspondientes a la configuración y control de integrado y las dieciséis salidas correspondientes a los datos. En el Anexo Rutado placa desarrollo ADS8365 podemos encontrar como quedaría la placa lista para ser fabricada con todos los elementos rutados. Para la realización de dicho rutado se ha usado el programa EAGLE [5]. 2.2.2 Fabricación Como estamos ante una placa de desarrollo realizaremos la fabricación manual de la misma para usarla como prototipo de pruebas. Seguiremos un proceso de fabricación estándar para este tipo de placas haciendo uso de los elementos disponibles en el laboratorio. El primer paso es realizar las impresiones de ambas caras de la placa en acetato. Cortaremos nuestra placa con el tamaño adecuado y colocaremos cada una de las caras en su posición. Hay que poner especial cuidado a la hora de alinear bien las caras para una correcta exposición. Una vez tengamos las caras bien alineadas introduciremos la placa en la máquina insoladora durante un tiempo aproximado de 2 minutos y 45 segundos. A continuación, cogeremos nuestra placa y la meteremos en un recipiente con el líquido revelador. El tiempo necesario no es algo fijo así que estaremos atentos para ver cuando la impresión de las pistas se hace visible. Entonces sacaremos la placa del líquido revelador y la limpiaremos bien con agua. Un detalle es importante es recordar reciclar este líquido revelador porque se puede usar varias veces. Necesitamos ahora eliminar el cobre sobrante. Para ello prepararemos una solución que estará compuesta de, en este orden, una parte de agua fuerte, una parte de agua oxigenada y dos partes de agua. Sumergiremos la placa en este líquido, con precaución porque puede ser perjudicial tocarlo y respirar los vapores, y cuando se haya eliminado todo el cobre sobrante la sacaremos y la secaremos con la ayuda de un papel. El último paso de este primer proceso es eliminar la resina existente. Para ellos nos ayudaremos de un poco de acetona. Otra opción es volver a insolar la placa y pasarla por el revelador. Con esto nuestra placa ya debe estar lista para pasar al siguiente paso. Pasaremos a realizar los taladros necesarios para los diferentes elementos que lo necesiten. En nuestra placa tendremos elementos que requerirán taladros y otros de montaje superficial. Una vez realizados todos los taladros resulta interesante hacer una primera comprobación de que hasta ahora todo el proceso va bien. Para ello haremos una prueba de continuidad sobre las diferentes pistas. Si todo es correcto podemos proseguir. El último paso es realizar la soldadura de los diferentes elementos. Este proceso de soldadura tiene un orden que debemos seguir. En primer lugar, deberemos soldar las diferentes vías que tenga nuestra placa. A continuación, soldaremos los diferentes componentes SMD (de montaje superficial) y, posteriormente, el resto de los integrados. Por último, solo queda soldar los conectores y los pines. Antes de dar por finalizada nuestra placa volveremos a realizar una comprobación de continuidad de la misma. Si todo es correcto nuestra placa está lista. 2.2.3 Configuración El integrado ADS8365 tiene accesibles 16 líneas de configuración. De ellas no todas nos serán útiles para nuestro desarrollo así que explicaremos las que sí debemos usar. • CS y RD: Estas líneas son activas a nivel bajo y ambas deberán activarse para poder realizar una lectura en alguno de los canales. • EOC: Activa a nivel bajo. Nos indica que tenemos un nuevo dato listo para poder leer. • FD: Activa a nivel bajo. En el caso de que estemos usando nuestro integrado en modo FiFo (convertir Ilustración 2-6: Placa ADS8365 finalizada 18 todos los canales de manera secuencial) indica que tenemos un dato en el primer canal. • BYTE: Permite configurar el integrado en modo 8-bits. • RESET: Activo a nivel bajo. Reinicia el sistema. • HOLDA/HOLDB/HOLDC: Activos a nivel bajo. Permiten seleccionar que canales queremos convertir. Hay que comentar que el dispositivo reparte los canales en tres pares: A0, A1, B0, B1, C0 y C1. Con estas señales podemos controlar qué par queremos convertir. • A0/A1/A2: Permite seleccionar qué canales queremos leer. Su selección se lleva a cabo de la siguiente manera: Ilustración 2-7: Selección de canales a leer • CLK: Señal de reloj. En el Anexo Máscaras de configuración podemos encontrar todas las máscaras necesarias para las diferentes acciones que nos pueden interesar. 3 ZEDBOARD El elemento principal de nuestro sistema es un SoC de Xilinx con el chip Zynq-7000 que recibe el nombre de Zedboard [6], en concreto, el modelo Zynq XC7Z020-1CLG484. 3.1 Características generals Ilustración 3-1: Zedboard elementos Entre los dispositivos de los que se compone dicho chip se encuentran dos núcleos ARM Cortex-A9 a una frecuencia de 667Mhz cada uno. La parte lógica, también referenciada como FPGA, es equivalente al modelo Artix-7 de Xilinx con 85.000 celdas lógicas, 53.200 LUTs y 106.400 Flips-Flops. Además, posee una memoria RAM DDR3 de 512 MB. 20 Ilustración 3-2: Zedboard bloques funcionales 3.2 Recursos a usar No todos los recursos disponibles los utilizaremos en el desarrollo del proyecto. Los que nosotros usaremos principalmente son: • Núcleos ARM Cortex-A9: Usaremos los dos. En el primero ejecutaremos un sistema operativo Linux personalizado para nuestra aplicación, lo crearemos nosotros mismos. En el segundo instalaremos las aplicaciones necesarias para la gestión de los datos del convertidor. Ilustración 3-3: Arquitectura Cortex-A9 • Dispositivo para tarjetas SD: En una tarjeta SD incluiremos todos los archivos necesarios para la ejecución tanto del sistema operativo como de las diferentes aplicaciones desarrolladas. Ilustración 3-4: Interfaz SD • USB UART: Usaremos esta interfaz para la comunicación entre el PC y la Zedboard. Con esto podremos realizar la ejecución del sistema operativo Linux y trabajar con él. • XADC Header: No usaremos todo el conector como tal, pero sí uno de sus pines con el fin de obtener una alimentación necesaria para el funcionamiento de la placa de desarrollo del ADS8365. Ilustración 3-5: XADC Header • DDR3 Memory: Usaremos los dispositivos de memoria para almacenar datos y poder procesarlos para su envío posterior. • PMODs: Usaremos estos puertos tanto para la obtención de los 16 bits de datos como para la configuración y el control del convertidor. 22 Ilustración 3-6: PMODs • Jumpers: Son necesarios para poder configurar la Zedboard para que funcione de manera correcta para cumplir las especificaciones necesarias para nuestra aplicación. Ilustración 3-7: Jumpers de configuración • Otros pines: Usaremos algunos pines aislados para la obtención de alguna alimentación y tierras para el sistema global. 3.3 Desarrollo hardware Nos encontramos ante una placa de desarrollo que dispone de una gran cantidad de lógica programable que debemos adecuar a nuestro funcionamiento. Esta configuración consiste en la modificación interna de la placa para obtener el acceso a los recursos que necesitamos para la realización de nuestro proyecto. Este desarrollo lo haremos con la ayuda del programa VIVADO [7] en su versión v2014.4 de Xilinx. Con este programa podremos realizar las diferentes conexiones internas para tener acceso a los recursos. Con la ayuda de este programa podremos realizar diferentes tareas. Por un lado, tendremos una simulación del sistema en el que podremos realizar una serie de pruebas para comprobar cómo se debería comportar el sistema real una vez que lo hagamos funcionar. Por otro lado, una vez el sistema completo este definido y configurado podremos exportarlo y obtener el archivo necesario (bitstream) para poder ejecutar el sistema completo. Además, podremos enlazar nuestra configuración hardware con otro software, el SDK de Xilinx, para poder realizar las diferentes aplicaciones que queramos incluir en nuestro sistema. 3.3.1 Creación de un proyecto Para poder iniciar un proyecto debemos hacer unos pasos iniciales para poder ligar nuestro diseño a la placa determinada que estemos usando. Comenzaremos por crear un proyecto nuevo dándole a Create New Project. Ilustración 3-8: VIVADO Proyecto nuevo 1 24 Ilustración 3-9: VIVADO Proyecto nuevo 2 A continuación, debemos elegir el nombre del proyecto, así como, la localización que queramos que tenga dentro de nuestro ordenador. Ilustración 3-10: VIVADO Proyecto nuevo 3 El siguiente paso es indicar el tipo de proyecto que vamos a realizar. En nuestro caso elegiremos RTL Project para que así podamos elegir los diferentes componentes y poder personalizarlo ajustándonos a nuestras necesidades. Ilustración 3-11: VIVADO Proyecto nuevo 4 Por último, solo nos queda seleccionar la placa con la que estamos trabajando para que la configuración final sea la adecuada. En nuestro caso, seleccionaremos la ZedBoard. 32 Ilustración 3-23: VIVADO Create HDL Wrapper Para completar ya solo queda hacer la síntesis del circuito, la implementación y generar el archivo bitstream. Para ello podemos ir seleccionando cada uno de los pasos o ir directamente a Generate Bitstream que esto hará que se pase por los tres procesos obligatoriamente. Si no existe ningún error podremos continuar con el desarrollo. Ilustración 3-24: VIVADO Generar Bitstream 4 CONEXIONADO Para concluir con la parte física del proyecto solo nos queda la conexión de los diferentes elementos del sistema completo. Podemos suponer la ZedBoard como el núcleo del sistema y enfocaremos este proceso de conexionado desde el punto de vista de la misma. Ilustración 4-1: Interconexión sistema completo • ZedBoard-PC: Esta conexión se hace a través del puerto UART de la Zedboard y el puerto USB del ordenador. Esto se realiza para mediante un terminal serie en el ordenador poder ejecutar el sistema Linux que se encontrará ejecutándose en uno de los núcleos de la ZedBoard. Ilustración 4-2: UART • ZedBoard-Internet: Para la conexión de la ZedBoard a internet usaremos el puerto Ethernet del que dispone la ZedBoard. 34 Ilustración 4-3: Ethernet • ZedBoard-ADS8365: Entre ambos dispositivos tendremos que conectar muchas señales. La placa de desarrollo del ADS8365 necesita varias alimentaciones diferentes, una para la parte analógica y otra para la parte digital, y para resolver esto lo que haremos será sacar dichas alimentaciones de la placa de la Zedboard. Explorando los diferentes pines de los que dispone dicha placa se pueden encontrar los 3V necesarios para la parte digital en uno de los PMODs marcado con VCC. Ilustración 4-4: VCC 3V Para sacar los 5V necesarios para la parte analógica recurriremos al conector XADC Header que en uno de sus pines tiene esa tensión accesible. Ilustración 4-5: VCC 5V Necesitaremos además un pin de tierra (GND) para unificar las mismas entre las dos placas y para ello recurriremos a alguno de los pines de los que dispone la ZedBoard para este fin. Ilustración 4-6: GND Por último, debemos conectar tanto las líneas correspondientes a los datos como las líneas de control y configuración del ADS8368. Para esta conexión haremos uso de los PMODs que configuramos en el proceso de desarrollo hardware poniendo mucha atención a la hora de conectarlos y siguiendo el siguiente esquema. Ilustración 4-7: Conexiones ADS8365 36 Ilustración 4-8: Conexiones Control y Configuración Ilustración 4-9: Conexiones Datos Por último, solo debemos conectar la ZedBoard a la red de alimentación mediante el transformador que se incluye con la placa. Todo el sistema está conectado de manera correcta y listo para empezar a funcionar. Ilustración 4-10: Conexión ZedBoard – ADS8365 5 DESARROLLO SOFTWARE El uso de diferentes plataformas para el desarrollo del proyecto hace obligatorio el trabajo a nivel de software de cada una de estas. Desde el punto de vista de la programación el sistema podemos centralizarlo de nuevo en la ZedBoard. Esta placa posee dos núcleos ARM Cortex-A9 que usaremos para funcionalidades completamente diferentes. Ilustración 5-1: Desarrollo Software Sistema En un primer núcleo, al que llamaremos CPU 0, ejecutamos un sistema operativo Linux personalizado y, sobre él, la aplicación que nos ayudará a gestionar el servidor. Este servidor se usará para la comunicación de los datos, vía internet, con una interfaz externa que también deberá ser programada. En el segundo núcleo, CPU 1, programaremos una aplicación que se encargará de la gestión de la placa del ADS8365. Aunque los dos núcleos hacen un trabajo paralelo y diferente, al final, trabajarán con los mismos datos. Toda esta información compartida estará contenida en la memoria de la ZedBoard para que ambos puedan acceder a ella. 5.1 LINUX El objetivo de usar un sistema operativo Linux en nuestro desarrollo es el de tener una plataforma con muchas posibilidades que nos ayude a resolver problemas como la comunicación vía internet o la ejecución de otras aplicaciones que queramos desarrollar. Con objeto de optimizar el diseño no nos centraremos en la instalación de una distribución existente en el mercado de este sistema operativo, sino que realizaremos nuestra propia versión de un sistema operativo Linux muy ligero pero que cumpla todas las necesidades que tengamos. 5.1.1 Compilación Para el correcto funcionamiento de nuestro sistema necesitamos un sistema operativo Linux que no ocupe muchos recursos y que además se ejecute al inicio desde una tarjeta SD que introduciremos en la ZedBoard. Además, como este sistema será el que se inicie al arrancar la placa debemos incluir también la aplicación que se ejecutará de manera paralela en el otro núcleo para que funcione de manera transparente al usuario. Para poder ejecutar de esta manera nos serviremos de los archivos fuente del kernel de Linux para poder modificarlos y ajustarlos a nuestras necesidades. Es importante tener en cuenta el control de versiones ya que alguno de los procedimientos puede ser ligeramente diferente si se cambia alguna de ellas. En nuestro desarrollo usaremos el kernel de Linux correspondiente a la versión 3.14.4. Por otro lado, para poder realizar la modificación y la 38 posterior compilación tendremos que instalar un software llamado Petalinux 2014.4 [8] y todo el trabajo lo realizaremos bajo un sistema operativo Linux en este caso con la distribución Ubuntu 14.04 LTS [9] con un núcleo ARM de 64 bits. Para comenzar el desarrollo necesitaremos descargar tres archivos fuente [10] con los que trabajaremos y los cuales serán necesarios para la ejecución. Estos son: • linux-xlnx-xilinx-v14.4.zip • u-boot-xlnx-xilinx-v14.4.zip • uramdisk.image.gz Los dos primeros son archivos genéricos pero el último es un archivo de imagen que depende de la plataforma sobre la que vayamos a ejecutar nuestro sistema, en este caso, ZedBoard. Al final del proceso de compilación y configuración debemos tener una serie de archivos que depositaremos en la tarjeta de memoria SD y que harán posible la ejecución del sistema y de las distintas aplicaciones. Estos archivos necesarios son: • uImage • devicetree.dtb • uramdisk.image.gz • BOOT.bin • s_control.elf (Esta será la aplicación que queremos ejecutar sobre Linux) Ilustración 5-2: Archivos tarjeta SD Una vez tengamos los archivos fuente descargados y el software necesario instalado empezaremos por generar los diferentes archivos. NOTA: Es recomendable antes de iniciar el desarrollo ejecutar las variables de entorno. Para ello, según dónde tengamos instalados nuestro software, ejecutaremos: ▪ source /opt/xilinx/Vivado/…/settings64.sh ▪ source /opt/xilinx/ISE/…/settings64.sh 5.1.1.1 uImage Trabajaremos desde una ventada de terminal Linux. En primer lugar, deberemos descomprimir el archivo fuente linux-xlnx-xilinx-v14.4.zip, dirigirnos hacia el directorio del archivo y escribir una serie de comandos. Todo el proceso debe daros como resultado la aparición de un archivo con el nombre uImage. Procedimiento: I. unzip linux-xlnx-xilinx-v14.4.zip II. cd linux-xlnx-xilinx-v14.4 III. export CROSS_COMPILE=arm-xilinx-eabi- IV. make ARCH=arm Xilinx_zynq_defconfig V. make ARCH=arm menuconfig VI. (EXIT) VII. make ARCH=arm UIMAGE_LOADHDDR=0x8000 uImage Una vez ejecutados todos los pasos podremos encontrar el archivo uImage en el directorio linux-xlnx-xilinx- v14.4/arch/arm/boot. 5.1.1.2 devicetree.dtb Para poder obtener este archivo volvemos a recurrir a un terminal de Linux. Debemos colocarnos en el directorio donde hemos descomprimido el archivo linux-xlnx-xilinx-v14.4.zip y realizar lo siguiente: I. cd arch/arm/boot/dts II. cp zynq-zed.dts zynq-zed-Suh.dts Con esta orden haremos una copia para mantener el archivo original y poder hacer las modificaciones necesarias en la copia. Estás modificaciones consisten en indicar que solo usaremos una de las CPUs existentes además de delimitar la memoria que usará está. Ilustración 5-3: Devicetree Modificación CPU En la línea 43 debemos añadir antes de root: maxcpus=1 Ilustración 5-4: Devicetree Modificación Memoria En la línea 81 debemos cambiar el valor 0x20000000 por 0x18000000. Para poder obtener finalmente el archivo devicetree.dtb volvemos al terminal Linux en el punto en el que lo dejamos y ejecutamos la siguiente línea: I. ../../../../scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb zynq-zed-Suh.dts NOTA: Algunas de las rutas pueden cambiar debido a la instalación en el equipo pero las terminaciones en las rutas deben ser las mismas. 5.1.1.3 uramdisk.image.gz Este archive no es necesario modificarlo, se copiará directamente a la tarjeta SD y la única precaución como ya comentamos es realizar su descarga teniendo en cuenta la plataforma que estamos usando, ZedBoard. 40 5.1.1.4 BOOT.bin Para este archivo necesitaremos generar varios archivos adicionales. Necesitaremos: • main_wrapper.bit • u-boot.elf • fsbl.elf • app_cpu1.elf Una vez que tengamos todos estos archivos para poder generar el BOOT.bin necesitaremos generar un archivo intermedio bootimage.bif cuyo contenido puede depender de las rutas propias de nuestra instalación. Ilustración 5-5: bootimage.bif Una vez lo tengamos todo preparado solo tendremos que volver al terminal Linux y ejecutar el siguiente código dentro de la carpeta donde hayamos generado el bootimage.bif. bootgen -image bootimage.bif -o i -boot.bin -w on 5.1.1.4.1 main_wrapper.bit Este archivo contiene información relacionada con la parte lógica de la FPGA y para obtenerlo solo tenemos que exportar el proyecto que realizamos en Vivado y acordarnos de incluir el archivo bitstream. Cuando haya finalizado la exportación lo encontraremos en la carpeta del proyecto, en nuestro caso, con el nombre de main_wrapper.bit. 5.1.1.4.2 u-boot.elf Para la generación de este archivo volveremos al terminal de Linux. Nos debemos colocar sobre el directorio donde descargaremos el archivo fuente llamado u-boot-xlnx-xilinx-v14.4.zip y ejecutar los siguientes comandos: I. unzip u-boot-xlnx-xilinx-v14.4.zip II. cd u-boot-xlnx-xilinx-v14.4 III. export CROSS_COMPILE=arm-xilinx-eabi- IV. make zynq-zed-config V. make VI. cp u-boot u-boot.elf Con esto ya tendremos el archivo que buscábamos. 5.1.1.4.3 fsbl.elf Para generar los archivos restantes trabajaremos con el SDK de Xilinx, para ello, una vez exportado el proyecto en Vivado lanzaremos el SDK directamente desde la opción que existe en el menú como Launch SDK… En el SDK podremos desarrollar las diferentes aplicaciones que usaremos tanto ejecutándose de manera transparente como es el caso de la app_cpu1 como las que queramos ejecutar nosotros manualmente. Para obtener la primera, fsbl.elf, simplemente tenemos que crear una aplicación nueva del tipo ZYNQ FSBL indicando que el procesador será el 0. 5.1.1.4.4 app_cpu1.elf Esta será la aplicación encargada de controlar el convertidor. Su funcionamiento se explica en el apartado correspondiente. Una vez tengamos el código de la misma deberemos crear una aplicación nueva en el SDK incluyendo que el procesador usado será el 1. Además, tendremos que hacer dos modificaciones en el BSP creado. Ilustración 5-6: app_cpu1 modificación BSP 1 Ilustración 5-7: app_cpu1 modificación BSP 2 Por último, al crear la aplicación se creará un archivo lscript.ld que debemos asegurarnos de que tenga los valores correctos para la memoria. ps7_ddr_0_S_AXI_BASEADDR 0x18000000 0x80000000 5.1.2 Funcionamiento Para poder ejecutar el sistema simplemente debemos iniciar la ZedBoard con la SD. Con esto, mediante un terminal GTK podremos ejecutar el Linux que hemos compilado. Una vez iniciado, podremos usarlo como un terminal de Linux normal y tendremos accesibles multitudes de funciones, aunque no todas las que podemos encontrar en otro tipo de distribuciones. Si queremos ejecutar alguna aplicación solo debemos proceder como se hace normalmente en un sistema operativo Linux. Nuestro sistema operativo sí tiene DHCP instalado por lo que para conectarnos a internet solo tendremos que conectarnos mediante un cable Ethernet a un router que permita este tipo de acceso. Si no, siempre podremos hacer una configuración manual de la misma. 48 Ilustración 6-5: Tarjeta SD Conectado y comprobado todo, enchufaremos a la corriente el transformador de la ZedBoard y pondremos en ON el switch ON/OFF de la ZedBoard. Necesitamos ejecutar un terminal para recibir los datos del puerto UART de la ZedBoard y para eso abriremos la aplicación GtkTerm en nuestro Linux en el ordenador. Nos aparecerá una pantalla en negro en la que deberemos teclear el comando boot y pulsar enter. El sistema empezará a arrancar y a configurarse. Una vez este proceso haya terminado ya podremos utilizarlo y manejarnos a través de la consola como si fuese un terminal de Linux normal. Veremos como aparece la palabra zynq en el prompt para indicarnos que estamos conectados con la ZedBoard. Ilustración 6-6: GtkTerm boot Ilustración 6-7: Sistema iniciado Una primera comprobación que es recomendable hacer para estar seguros de que todo va correctamente es asegurarnos de que tenemos conexión a internet. Para ello lo más fácil es realizar un ping a una dirección conocida, de nuestra misma red, o de fuera. En nuestro caso la hemos realizado a GOOGLE. Es posible que si no está bien configurado el DNS al poner directamente la dirección Google.com la ZedBoard no sea capaz de resolverla. Para solucionar esto, nos dirigiremos a la carpeta /etc de nuestro sistema y crearemos un archivo con el nombre resolv.conf con la información de los servidores DNS. Si no, siempre se puede hacer ping a la dirección IP directamente y no debe haber ningún problema. Ilustración 6-8: Ping GOOGLE Realizada esta comprobación solo queda iniciar el servidor. Para ello deberemos dirigirnos a la carpeta donde 50 se encuentran los archivos de la tarjeta SD y ejecutar la aplicación: I. cd mnt II. ./s_control.elf Con esto el servidor estará iniciado y mostrará un mensaje indicando que espera una conexión externa. 6.2 Inicio de la interfaz Para poder ejecutar la interfaz JAVA se debe tener instalado el programa NetBeans IDE 8.0.2 [11]. Una vez instalado se debe ejecutar y abrir el proyecto de la interfaz. Al ejecutar por primera vez el programa pedirá algunas librerías extra que se deben instalar. Estas librerías se encuentran con el resto de archivos del proyecto. Para instalarlas se debe extraer previamente cada una e ir añadiéndolas al programa. El proceso completo es el siguiente: • Al abrir el proyecto aparecerá una advertencia de que existen algunos problemas y se debe pulsar el botón Resolve Problems… • Aparecerá una lista con las librerías que faltan. Se debe hacer el proceso para cada una de ellas. Se selecciona una y se pulsa Resolve… • En la siguiente ventana se debe pulsar New Library… en Library Name se debe poner el nombre que nos aparecía en la lista anterior correspondiente a la librería que se quiera añadir y se pulsa OK. • Por último, se debe pulsar el botón Add JAR/Folder… y buscar el archivo que se ha descomprimido anteriormente y pulsa aceptar. Con esto debe aparecer como solucionado el problema. • Se debe repetir el proceso con todas librerías que se piden. Ahora sí ya se puede ejecutar el programa pulsando Run Project o pulsando la tecla F6. Una vez iniciada la interfaz lo primero que tenemos que hacer es realizar la conexión con el servidor. Para ello debemos rellenar el campo IP y el puerto con los datos de nuestra ZedBoard. La IP dependerá de la que nos asignen en nuestra red pero el puerto siempre será el 3550. Con esta información solo queda seleccionar PowerCell_0 y darle al botón Connect. Ilustración 6-9: Barra de Conexión Si todo ha ido correctamente, nuestra interfaz estará conectada con el servidor y el convertidor empezará a funcionar y mandar información. Podemos empezar a usarla. En primer lugar, podemos marcar qué canales queremos ver y si deseamos algún tipo de coeficiente de magnitud y fase para cada uno de los canales. Ilustración 6-10: Coeficientes de Magnitud y Fase Por otro lado, también tenemos accesibles dos campos donde podemos configurar tanto la frecuencia de muestreo como el número de ciclos que queremos mostrar en la pantalla. Recordar que para que en este caso los cambios tengan efecto debemos pulsar el botón Write. Ilustración 6-11: Cycles y Frecuencia Veremos ahora lo que muestra nuestra interfaz ante varias señales de entrada diferentes. 52 6.3 Ejemplo 1: Onda Cuadrada Señal de entrada: Onda Cuadrada. Canales a mostrar: 1. Ilustración 6-12: Onda cuadrada 6.4 Ejemplo 2: Seno – 2 canales Señal de entrada: Seno. Canales a mostrar: 2. Condición: OFFSET. Ilustración 6-13: Seno – 2 Canales con offset 54 6.5 Ejemplo 3: Seno – 4 canales Señal de entrada: Seno. Canales a mostrar: cuatro. Condición: OFFSET. Ilustración 6-14: Seno – 4 Canales con offset. ANEXOS Esquemático placa desarrollo ADS8365 56 Rutado placa desarrollo ADS8365 Máscaras de configuración