Automatización de medidas de un convertidor...

102
Automatización de medidas de un convertidor analógico digital José Ramón García Oya Profesor: Fernando Muñoz Chavero

Transcript of Automatización de medidas de un convertidor...

Automatización de medidas de un convertidor analógico digital José Ramón García Oya Profesor: Fernando Muñoz Chavero

2

Agradecimientos: A Pepe, Miriam, Rafa, Manoli, Salva, Inma, Montaño, Marta y Cristina, por no haberme dejado olvidar de dónde vengo y hacer de estos años de carrera un punto y seguido a los del colegio. A los Wides Openings Franulo, Carlos, Hugo, Adri y Saranfles, por hacerme imposible tocar un libro en todos estos veranos. A Stephanie, por darme tanto pidiendo tan poco y por esos nueve créditos de mitología, que cualquier excusa es buena para echar un rato más juntos, tía. A Alberto, Ale, David, Isidoro, Grande, Cristóbal, Mari, Arteaga, Joaqui, Carlos, Canijo, Fernando, Fabi, Burgui, y todos los demás, por estos años de barriladas, anisadas, carritos del Mercadona y, también, alguna que otra práctica juntos. A Fernando, Ramón y Mariano, por el coñazo que os haya podido dar durante el proyecto. A la Yaya, Lau, hermana, primos, tías y tíos, por hacerme veros como una familia y no como parientes. Y, claro, a mis padres, que si es difícil enumerar a todas las personas que tengo algo que agradecerles, mucho más lo es enumerar todos los motivos por los que estaros a vosotros agradecido.

3

a mis padres

4

Índice

1) Introducción y objetivos……………………...………………………………….6

2) Descripción del sistema…………………………………………………………9

2.1. Descripción del convertidor analógico digital………………………10

2.2. Descripción de los equipos…………………………………………..12

2.2.1. Analizador lógico Tektronix TLA 5202…………………..12

2.2.2. Generador de onda arbitrario Rohde&Schwarz AM300....15

3) Pasos previos para la evaluación del convertidor……………………………18

4) Software empleado……………………………………………………………22

5) Programación…………………………………………………………………26

5.1. Control de equipos………………………………………………….26

5.1.1. Analizador lógico Tektronix TLA 5202………………….26

5.1.2. Generador de onda arbitrario Rohde&Schwarz AM300..35

5.2. Interfaz para el convertidor analógico digital…………………….40

6) Verificación de los resultados……………………………………………….77

6.1. Análisis dinámico………………………………………………….77

6.2. Análisis estático……………………………………………………78

7) Utilización del servidor Web………………………………………………..79

8) Manual básico para el manejo de la interfaz………………………………82

8.1. Montaje físico en el laboratorio…………………………………..82

8.1.1. Alimentación de la placa de evaluación………………..82

8.1.2. Conexión de las señales de entrada…………………….84

8.1.3. Conexión de los pines de salida………………………..85

8.2. Puesta a punto de los equipos……………………………………88

8.3. Empleo del interfaz para la automatización de medidas………..89

5

8.3.1. Guía de los controladores e indicadores de la

Interfaz………………………………………………….90

8.3.2. Guía de los elementos del panel frontal y del diagrama

de bloques……………………………………………….96

9)Bibliografía…………………………………………………………….....102

6

1) Introducción y objetivos

Típicamente las medidas y análisis únicamente realizables en un laboratorio se han

dejado, cuando éste resultaba inaccesible, en manos de la simulación. El paso siguiente

consiste en conseguir realizar estos mismos análisis desde fuera del laboratorio, pero de

señales reales y no simuladas. Para ello nos apoyamos en la programación gráfica que

nos proporciona el programa LabVIEW para poder controlar y visualizar los resultados

de los equipos disponibles en el laboratorio desde cualquier ordenador. Éste es, por

tanto, el objetivo más general del proyecto.

Esta idea general la concretamos en la automatización de convertidores analógico

digitales. Por tanto, el objetivo final de este proyecto será la creación de una interfaz

mediante la cuál, el usuario desde su PC introduzca las características de su convertidor,

tales como su resolución o su frecuencia de muestreo, y obtenga sus características

estáticas y dinámicas que le ayuden a evaluarlo. Además de ser éste el objetivo final del

proyecto también reside en él toda su utilidad práctica, pues la interfaz implementada

goza de una gran flexibilidad (debido al elevado número de parámetros que pueden

introducírsele y también a las mejoras para determinados convertidores que más

adelante se comentarán), por lo que sirve tanto para la caracterización de los

convertidores disponibles en el Departamento como para los de adquisición futura. Así

podrán realizarse múltiples medidas de nuestro convertidor, no sólo facilitando la

accesibilidad a los equipos remotamente, sino también ahorrando un tiempo muy

importante ya que ahora se harán medidas automáticamente que antes había que hacer

una a una, accediendo a los equipos una y otra vez para cambiar manualmente sus

parámetros. Cuando veamos más adelante la implementación para la medida del rango

7

dinámico del convertidor se apreciará más claramente esta gran ventaja. Además, la

interfaz contiene un juego de ventanas desplegables de ayuda para cada uno de sus

controles e indicadores que, con sólo colocar el ratón del ordenador sobre cualquiera de

ellos, mostrarán su descripción (es decir, su funcionalidad, unidades en las que se

expresa y rango permitido que puede tomar) facilitando en gran medida los primeros

contactos del usuario con dicha interfaz.

Por tanto, la primera parte del proyecto consiste en el control de los equipos de

laboratorio de los que depende el convertidor analógico digital para su funcionamiento.

Estos equipos, disponibles en los laboratorios del Departamento de Ingeniería

Electrónica de la Universidad de Sevilla, son:

- El analizador lógico TLA 5202 de Tektronix.

- El generador de onda arbitrario AM 300 de Rohde&Schwarz.

La segunda parte del proyecto consiste en la implementación de la interfaz para la

automatización de medidas del convertidor, que incluirá tanto los análisis específicos

para la caracterización de éste, como los controladores de los equipos anteriormente

comentados en subcapas incluidas en dicha interfaz. Además, comentar que el

convertidor analógico digital que evaluaremos en este proyecto será el AD9235 de

Analog Devices.

La versión de LabVIEW con la que controlaremos los equipos es la 8.0, al ser ésta la

mínima permitida para hacer uso de los drivers de los que dispone el fabricante del

analizador lógico. Con este programa se conseguirán manejar los controladores del

analizador, a la vez que visualizar los resultados que nos devuelva, todo ello a través de

8

un ordenador conectado al equipo de laboratorio remotamente, mediante una conexión

de Internet.

Como acabamos de comentar los drivers a utilizar y modificar serán los proporcionados

por el fabricante, por lo que estaremos obligados a hacer uso de diferentes interfaces

para los diferentes equipos. En nuestro caso, el fabricante Tektronix utiliza unos drivers

que se comunican mediante Ethernet, por lo que necesitaremos que ambos equipos,

ordenador y analizador lógico, estén conectados a la red y, además, conocer sus

direcciones IP para ser capaces de comunicarlos. De este modo, el ordenador actuará

como máquina cliente y el analizador como máquina servidor. Por otra parte el

generador de onda de Rohde&Schwarz necesitará de una interfaz USB para su conexión

con el ordenador, por lo que en este caso la implementación será más sencilla que para

el analizador lógico.

Además, como objetivos secundarios nos proponemos conseguir un aprendizaje más

avanzado del programa LabVIEW, así como de un uso general en el control de equipos

mediante Internet, que nos permita más adelante ser capaces de controlar el resto de

equipos del laboratorio mediante las técnicas aprendidas. Por otra parte, este proyecto

servirá para utilizar algunas de las características de los equipos que típicamente están

desaprovechadas.

Por último, comentar que una vez esté programada toda la interfaz llevaremos acabo el

último paso, que será el uso de un servidor Web para que puedan realizarse estas

mismas medidas desde un PC ajeno al laboratorio.

9

2) Descripción del sistema

El sistema que describiremos a continuación no es tan sólo un sistema de

instrumentación convencional. Un sistema de éste tipo es aquel que integra, para la

realización de una medida, tanto instrumentos que generan estímulos sobre el objeto a

evaluar como otros instrumentos que reciben las respuestas del objeto ante dichos

estímulos.

Por tanto, el sistema que abarca todo el proyecto constará de un sistema de

instrumentación (el generador de onda y la fuente de alimentación que proporcionen los

estímulos y el analizador lógico que los reciba e interprete) junto con el objeto a evaluar

(el convertidor analógico digital), soportado todo por una plataforma que permita la

interconexión de los equipos, según sea el caso, mediante cableado USB y mediante la

red de Internet, es decir, la idea de laboratorio remoto hará necesario que se encuentre el

protocolo TCP/IP bajo el sistema de instrumentación y el PC en el que se ejecute el

interfaz gráfico del panel frontal del instrumento virtual (éste es un concepto del

programa LabVIEW que se explicará más adelante). Este conjunto, por tanto, será el

sistema final que definiremos como sistema de instrumentación remoto.

En este apartado describiremos los equipos empleados así como el convertidor

evaluado. La interconexión de equipos y los protocolos utilizados serán descritos a lo

largo de la memoria.

10

2.1.Descripción del convertidor analógico digital

Se trata, como ya se ha mencionado, del convertidor AD9235. En las figuras de abajo se

muestran el diagrama de bloques funcional y su encapsulado TSSOP (el que se utiliza

en este trabajo).

Fig.2.1. Diagrama de bloques funcional

Fig.2.2. Encapsulado TSSOP

Describiendo brevemente este convertidor podemos decir que dispone de una salida de

12 bits de resolución y una frecuencia de muestreo de 20 MSa/s. El convertidor lo

caracterizamos mediante su propia placa de evaluación, alimentada en un rango de 2,7 a

11

3,6 V (tanto su parte analógica como digital) y con tres modos de suministrarle la señal

de entrada y otros dos de suministrarle la señal de reloj. Entre los tres primeros modos

están el de entrada única, el de entrada amplificada y el de entrada diferencial,

utilizando nosotros ésta última por ser la única habilitada. Entre los modos de reloj CLK

y CLK Auxiliar nos quedamos con el primero.

Entre sus características principales destacan una SNR de 70 dBc aproximadamente

(muestreando a la frecuencia de Nyquist), un bajo consumo (alrededor de 300 mW), un

ancho de banda a la entrada de 500 MHz, una DNL de 4,0± LSB, un rango flexible de

entrada analógica (entre 1 y 2 Vpp), salidas en complemento a dos y estabilizador del

Duty Cycle.

Las aplicaciones más requeridas de este convertidor están en equipos de ultrasonido,

receptores de comunicación y osciloscopios digitales de bajo coste.

El resto de características, ventajas y aplicaciones, así como una descripción detallada

de la placa de evaluación y sus esquemáticos pueden encontrarse en la página

www.analog.com.

Por uno de los canales del generador de funciones se sacará la señal de entrada a la

placa de evaluación que posteriormente se transformará en una señal diferencial y por

el otro canal una señal senoidal de 20 MHz que servirá como entrada al reloj y que

posteriormente en la placa de evaluación será transformada en una señal cuadrada que

servirá de entrada de reloj al convertidor. Sólo quedaría entonces conectarle a la placa la

alimentación a los pines correspondientes y las salidas digitales y el reloj al analizador

12

lógico. Para ello utilizamos los canales A2 y la mitad de los canales A3 (12 bits en

total), conectando, además la salida de reloj a la correspondiente entrada de este grupo

de dos canales.

2.2.Descripción de los equipos

2.2.1. Analizador lógico Tektronix TLA 5202

El analizador lógico que tratamos de controlar es, como ya hemos comentado, el TLA

5202 de Tektronix, que pertenece a la serie TLA 5000. Entre las principales

características y ventajas de esta serie podemos enumerar:

- su alta velocidad en la adquisición de datos (con un tiempo de captura

de eventos de hasta 500 ps y un ancho mínimo del pulso de reloj de

1,5 ps)

- un alto número de canales digitales de entrada (34/68/102/136) siendo

68 canales para el caso del TLA 5202, 4 de ellos señales de reloj

(habiendo un reloj por cada grupo de 16 canales), que se pueden

configurar (multiplexar o demultiplexar) en función de las

necesidades del circuito que se esté testando

- un alto almacenamiento de muestras (32 Mb)

- un sofisticado manejo del trigger (con 16 estados distintos e

independientes) que permite ajustes en la configuración, violaciones y

apariciones de glitches (utilizando para ello el modo MagniVu, con

un tiempo de resolución de 125 ps, simultáneo al de 500

13

anteriormente mencionado), muy útiles para la detección de errores

en nuestro hardware o validación de dispositivos digitales

Entre las características de entrada de los analizadores de la serie TLA 5202

destacamos:

- una carga capacitiva entre 1 y 2 pF

- un rango de tensiones entre -2,5 y 5 V (sin llegar a ser destructivo el

rango 15± V) incluyendo así la aceptación de niveles como los TTL

(1,5 V), CMOS (1,65 V), ECL (-1,3 V), etc., además de otros

definidos por el usuario

- mínimo de slew rate de la señal de entrada, siendo un valor típico el

de 200 mV/ns

Con las anteriores características quedan mencionadas las principales aplicaciones de la

serie TLA 5202, que son las de monitorización y medidas de dispositivos digitales, así

como su verificación y la detección de sus errores. Otra aplicación interesante es la

detección de anomalías en los diseños analógico-digitales, cada vez estos más

frecuentes, con el visor iView time correlated digital-analog, conectándose a un

osciloscopio externo vía USB si es de la serie TLA o vía GPIB si es de la serie TDS.

Comentamos ahora las características de PC con las que cuenta nuestro analizador TLA

5202. Su tratamiento y modo de empleo son, de hecho, similares a los de un ordenador

convencional e incluso para el desarrollo del proyecto se le conectaron un teclado y un

ratón, olvidándonos así del manejo del panel frontal que se ilustra más abajo. Así, se

trata de un PC en el que se encuentra instalado el sistema operativo Microsoft Windows

14

2000 y la aplicación TLA que nos permitirá configurar el analizador lógico para la

correcta adquisición de datos, así como para la visualización de los resultados

obtenidos. También disponemos en el mismo analizador del programa matemático

Matlab, que nos ayudará a interpretar en primera instancia dichos resultados. Por otra

parte, decir que el analizador cuenta con un procesador Intel Celeron a 2 GHz, con 512

MB de DRAM y 80 GB de disco duro.

Por último, comentar algunas de sus características físicas:

- pantalla TFT LCD

- dispone de puertos LAN, paralelo, serie, audio, micro y USB 2.0,

cuatro puertos de este último

- salidas y entradas para conectores BNC a 50Ω

- consumo máximo de 300 W, con una corriente de entrada máxima de

5 A a 90 VAC y un voltaje de 90 a 240 VAC a 47-63 Hz

- opera a temperaturas de entre 5 y 50ºC.

De todos modos éstas y otras características vienen más ampliamente detalladas en los

data sheet del instrumento, que pueden encontrarse en la página www.tek.com.

15

Fig.2.3. Panel Frontal del Tektronix TLA 5202

2.2.2 Generador de onda arbitrario Rohde&Schwarz AM 300

Se trata de un generador de onda de doble canal con muy buenas características en

cuanto a funcionalidad y pureza espectral, ya que reproduce digitalmente la señal

generada casi sin distorsión incluso para altos niveles de frecuencia. De hecho, un valor

típico de supresión de armónicos es, para un seno a 1 MHz, de 70dB, es decir, de un

0.03%. Además el reloj interno que utiliza tiene una característica de jitter muy

pequeña.

Dispone de una alta frecuencia de muestreo, por encima de los 100 MSa/s, una memoria

para la onda generada por cada uno de los dos canales de 256000 puntos y un software

interno para composición de ondas que permite la realización de casi cualquier forma de

onda que pueda incluirse en aplicaciones para laboratorio, producción o servicio.

Ambos canales del instrumento están acoplados en fase (si bien es una opción que se

puede anular) lo que permite la generación de señales en fase y cuadratura con lo cual,

16

por ejemplo, podrán modularse señales de RF. Por otra parte, otra característica

importante es su alto rango de frecuencias, estando el límite en 35 MHz para señales

senoidales y en 50 MHz para señales cuadradas.

Un resumen de sus características se muestra a continuación:

- Dos canales con una relación de fase de alta precisión entre las dos señales.

- Una frecuencia de muestreo de 100 MSa/s.

- 14 bits de resolución vertical, abarcando el rango de amplitudes desde 1 mV

a 10 V, en valores pico a pico.

- Trae disponibles las siguientes funciones estándares: senoidal, triangular,

rampa, exponencial, cuadrada, ruido y pulso.

- Las modulaciones posibles son: AM, FM, ϕM, FSK y PSK.

- Modos de barrido tanto lineales como logarítmcos.

- Interfaz USB.

Fig.2.4. Panel Frontal del Rhode&Schawarz AM 300

Entre las principales aplicaciones de este instrumento podemos destacar tres:

17

- La generación de casi cualquier onda concebible, pudiéndose importar un

gran número de formatos de datos, definidos por el usuario o incluso los

usados en osciloscopios. Ésta función se realiza por medio del software

Waveform Composser.

- Su fácil manejo y la variedad de modulaciones comentadas (AM, FM, ϕM,

FSK y PSK), además de otras definidas por el usuario, permiten su uso en

todos los ámbitos, desde el universitario a los centros de producción, test y

desarrollo.

- La generación de señales relacionadas en el tiempo y fase resultan muy útiles

para los detectores de circuitos, por ejemplo los detectores de fase. Un

ejemplo se muestra en la siguiente figura.

Fig.2.5. Pantalla del AM 300 con dos señales relacionadas en fase

18

3) Pasos previos para la evaluación del convertidor

Antes de comenzar con la explicación de los equipos utilizados y de la programación de

sus controladores, así como de la interfaz para la automatización del convertidor

analógico digital, es necesario comentar los pasos previos realizados para la evaluación

del AD9235 para así, posteriormente comparar estos resultados con los obtenidos tras la

visualización remota de las medidas.

La primera aproximación a las características del convertidor se realiza haciendo uso de

una placa de evaluación, la High Speed ADC FIFO Evaluation Kit (HSC-ADC-EVAL)

de Analog Devices, que conectará su entrada a la salida digitalizada de la placa de

evaluación del convertidor y su salida al PC mediante el puerto paralelo, como se

muestra en la siguiente figura.

Fig.3.1. Conexión para la evaluación del convertidor

Como se muestra en el esquema la placa de evaluación dispone de dos memorias tipo

FIFO que almacenarán los datos digitales capturados, con una frecuencia de 133 MSa/s

19

para cada uno de los canales, pudiéndose, también realizar una demultiplexación con

dos canales diferentes. En nuestro caso, sin embargo, sólo disponemos de una de las

memorias habilitadas, por lo que los pines de la salida digital del convertidor habrá que

conectarlas por la parte de la entrada con la memoria disponible.

Como características físicas de esta placa se puede comentar que está alimentada a 3.3

V o que dispone de filtros antialiasing para una mejor lectura de la señal y un reloj con

un efecto jitter muy poco acusado.

Para visualizar las características del convertidor habrá que instalar en nuestro PC el

ADC_Analyzer Software, disponible junto a la placa, que nos permitirá hacer

mediciones en el tiempo y en frecuencia (calculándole la FFT a la señal de entrada),

tales como la SNR, la SINAD y la SFDR. Una vez hecha la conexión entre los equipos,

sólo habrá que introducir algunos parámetros tales como el número de bits, el número

de muestras, la frecuencia de muestreo o el número de armónicos a tener en cuenta,

antes de ejecutar el programa y obtener los valores anteriormente mencionados. En las

siguientes figuras se ilustran las ventanas que nos sirven para configurar el dispositivo

bajo prueba (DUT) y los parámetros de la FFT. La última figura representa una muestra

de los resultados obtenidos con este software.

Fig.3.2. Configuración del analizador con ADC_Analyzer

20

Fig.3.3. Configuración de la FFT con ADC_Analyzer

Fig.3.4. Resultados obtenidos con ADC_Analyzer

21

Una vez que obtuvimos una caracterización coherente del convertidor el siguiente paso

era realizar las mismas mediciones pero directamente, es decir, sin la HSC-ADC-EVAL

y usando en su lugar el analizador lógico. Para este propósito conectamos la salida

digital a los canales A3 y A2, tal como se ha explicado en la descripción del TLA 5202,

los asociamos en un único grupo de canales y lo configuramos para que su frecuencia de

muestreo sea la misma que la del convertidor, o sea, lo configuramos en modo de reloj

externo.

Obtenido ya un fichero de texto con las salidas digitales lo exportamos, sin olvidarnos

de pasar los valores a formato decimal, para posteriormente importarlo a Matlab.

Utilizamos la versión 6.1 de este programa matemático que, por tanto, anteriormente

habremos de haber instalado en el analizador lógico. Una vez importado el fichero, tan

sólo quedará por ejecutar las órdenes plot y psd con este fichero como parámetro para

obtener la respuesta en el tiempo y en frecuencia, respectivamente, del convertidor, y

comprobar visualmente que los resultados son similares a los obtenidos con el software

de la placa de evaluación. En ambos casos se obtienen unos parámetros como los

especificados en la descripción del convertidor.

22

4) Software empleado

Este capítulo se refiere a los programas instalados en nuestro PC para la correcta

automatización del analizador lógico.

En primer lugar debemos instalar LabVIEW, el programa de National Instruments

mediante el que realizaremos el control del equipo. La versión de este programa

empleada es la 8.0, pues, como anteriormente comentamos, ésta es la mínima requerida

para poder utilizar el driver que proporciona Tektronix para sus analizadores de la serie

TLA.

Una vez que tenemos instalado LabVIEW descargamos el driver del analizador lógico

de la página de National Instruments www.ni.com. Este driver utiliza la tecnología Plug

and Play (project-style) y una interfaz Ethernet, como ya comentamos, por lo que

ambos equipos deberán estar conectados a Internet.

Para poder utilizar este driver no basta con LabVIEW, sino que se necesita un software

adicional. Uno de estos programas adicionales es el VISA 3.0. Por suerte, en nuestro

caso esta versión de VISA se instalaba a la vez que LabVIEW junto a otros productos de

National Instruments (como NI-488.2, que es necesario a menos que se utilice la

interfaz serie, no siendo éste nuestro caso). VISA (Virtual Instruments Software

Architecture) es un conjunto de librerías de LabVIEW que engloban a las funciones de

Ethernet y otros tipos de interfaces. Así, con estas librerías de nivel superior, nos

desentendemos del protocolo de conexión de los equipos y, además, si queremos

controlar algún otro equipo con otra conexión o ampliar el sistema con otro equipo que

23

use, por ejemplo GPIB o RS-232, no tendremos que cambiar de funciones. Por tanto, las

funciones USB necesarias para controlar el AM 300 quedarán también englobadas por

las librerías VISA.

Otro programa adicional que necesita instalado este driver es la versión 1.1 de .NET

Framework para poder usar el fichero TLANetInterfaces.dll. En nuestro caso lo que se

necesitaba era una mejora de la versión existente y fue posible descargarla desde la

página www.microsoft.com.

Una vez tenemos instalados todos estos programas en nuestra máquina cliente podemos

instalar nuestro driver dentro del subdirectorio labview\instr.lib. De este modo

podremos utilizar cuando queramos este driver accediendo directamente desde la paleta

de funciones de LabVIEW.

Se podría utilizar ya el driver abriendo alguno de sus instrumentos virtuales de ejemplo

o Getting Started, ya que estos tienen asignados valores por defecto en casi todos sus

controles. De hecho, el único control que no tiene valor asignado es el campo de

dirección IP de la máquina servidor. Previamente a utilizar LabVIEW comprobamos si

la comunicación ente ambos equipos es posible. Para ello es necesario instalar un nuevo

programa en nuestro ordenador, el TLA Script, disponible en uno de los CDs que aporta

el propio analizador lógico. Este programa se basa en una línea de comandos para

conectar, desconectar y dar algunas órdenes más al analizador sin necesidad de

LabVIEW. Como nosotros realizamos todo el control mediante LabVIEW tan sólo

necesitamos conocer los comandos de prueba connect y disconnect para comenzar y

finalizar respectivamente la conexión entre ambos equipos. El primero de estos

24

comandos puede ir con o sin parámetro. Si lo lleva se trata de la dirección IP del

analizador lógico y si no lo lleva la conexión será en modo local, o sea, el servidor y el

cliente estarán dentro de la misma máquina. La desconexión nunca lleva parámetros.

Por otra parte, decir que el resto de comandos, así como la estructura de sus parámetros,

vienen ampliamente detallados en la ayuda de TLA Script.

Sólo faltaría meter en el campo URL del panel de control la dirección IP del

instrumento (172.16.2.254 en nuestro caso) como tcp://172.16.2.254:9000/TlaSystem.

Por otra parte, si quisiéramos trabajar en modo local se podría sustituir esto

(previamente habríamos ejecutado el comando connect sin parámetros) por

tcp://localhost:9000/TlaSystem, que es precisamente lo que recomienda el fabricante

que hagamos en primera instancia para comprobar la correcta comunicación. Sin

embargo, para llevar a cabo esto será necesario tener instalado en nuestro ordenador

otro programa, el TLAVu. Éste es un visualizador similar a la aplicación TLA que está

instalado en nuestro analizador y que se ejecutará cuando hagamos estas

comprobaciones previas en modo local. El TLAVu también está disponible en otro CD

suministrado junto con el propio analizador lógico.

Una vez comprobada una correcta comunicación se puede utilizar LabVIEW para, de

este modo centrarnos en los problemas propios de la programación gráfica. Para ello

hay que tener en cuenta que la ejecución de cualquiera de los instrumentos virtuales de

los que consta el driver debe realizarse dentro de un proyecto y no como un instrumento

virtual independiente.

25

Todo este software hace referencia al necesario para controlar el analizador lógico. En

cuanto al generador de onda solamente necesitamos instalar sus drivers, disponibles en

la página www.rsd.de, y copiarlos en la carpeta labview\instr.lib para acceder a ellos

directamente desde la paleta de funciones. Para controlar este equipo no será necesaria

más instalación, tan sólo conectar el cable USB entre el PC y el generador y

automáticamente pasará de modo local a modo remoto. Abriendo el programa SiScan,

que se instala junto a los drivers, obtendremos la dirección USB del generador de onda,

que se reconoce gracias a las funciones VISA instaladas. Una vez instalada esta función

sólo quedará introducirla como parámetro del instrumento virtual que controle al

generador.

26

5) Programación

Como ya se comentó en la introducción, la programación del conjunto del proyecto

consta, por un lado del control de los equipos y, por el otro, de la implementación de

una interfaz que permita al usuario caracterizar remotamente un convertidor analógico

digital determinado.

5.1. Control de equipos

5.1.1 Analizador lógico Tektronix TLA 5202

Como ya hemos comentado, ejecutando algunos de los instrumentos virtuales que

vienen como ejemplos dentro del driver nos podemos aproximar al control de nuestro

equipo, pero nunca será éste exactamente igual al suministrado por el driver.

Comenzamos entonces por describir cuáles son los cambios en la configuración del

analizador que realizaremos para cubrir las necesidades del trabajo y, posteriormente,

elegiremos uno de los ejemplos del driver lo más parecido posible a lo que necesitamos

y lo modificaremos hasta ser capaces de poder controlar remotamente las características

que ya hemos aprendido a configurar manualmente en nuestro analizador lógico.

En primer lugar querremos elegir el tipo de reloj para muestrear nuestras señales. Este

reloj puede ser interno (simple, 2X o 4X) o externo (simple o 2X). En nuestro caso

elegimos el modo externo simple porque, de otro modo, aparecen glitches no deseados

27

al visualizar la señal, incluso especificando exactamente un reloj de 20 MHz. El

problema es que la función que selecciona el modo de reloj con LabVIEW está

deshabilitada, lo que solucionaremos dejando este modo por defecto en el analizador y

anulando el reset disponible en el bloque de inicialización, es decir el control del reset lo

fijaremos, al igual que el resto de valores por defecto, con la opción Make Current

Value Default dentro de la ventana Data Options. En segundo lugar necesitamos

aumentar la memoria de datos recibidos por el analizador lógico para ser capaces

posteriormente de reconstruir fielmente la señal. Otro aspecto a tener en cuenta es una

reagrupación de canales que nos permita leer los datos recibidos como enteros

representados con 12 bits y no con 8, como por defecto se representan. Así que, como

ya dijimos, utilizamos los 4 bits menos significativos del canal A3 y los 8 bits del canal

A2 como miembros de un único grupo de canales, aunque bien se podría haber hecho

cualquier otra combinación de bits. Con esto tendríamos una configuración básica que

se muestra a continuación.

Fig. 5.1. Panel frontal de TLA_5202.vi

28

Fig.5.2. Diagrama de bloques de TLA_5202.vi

29

Fijándonos en el panel frontal observamos las siguientes entradas. En el campo URL

escribiremos la dirección IP de nuestro analizador lógico con el formato indicado y en el

campo Count el número de muestras del convertidor que se tomarán. El campo Reset

estará a Off por defecto, como ya hemos comentado. Los campos Module y Data Set se

dejan con sus valores por defecto también, o sea, el módulo LA1, que es el único

operativo, y el modo de adquisición de datos principal. La otra entrada que se observa

es Ocurrencia, que no tiene utilidad para el control del analizador en solitario, pero sí

cuando controlemos el conjunto completo de los equipos. Se trata de una entrada del

tipo ocurrence, que es un evento que le llegará del instrumento virtual que maneja al

generador de onda arbitrario (por tanto éste tendrá un mismo evento del mismo tipo

pero de salida) cuando éste termine de colocar los datos en la placa de evaluación del

convertidor, para que así los datos que tome el analizador sean los válidos y no los

convertidos a digital en el experimento anterior.

También observamos dos salidas, una de ellas que nos indicará si no ha habido error o

si, en cambio, sí lo ha habido (y en ese caso hará una descripción del mismo, mediante

una explicación y un código de identificación para que, mediante la ayuda de LabVIEW,

seamos capaces de solucionarlo), y la otra que indica mediante una matriz los valores

leídos.

Pasamos ahora a estudiar el diagrama de bloques. Éste consta de los siguientes subVIs

(sub Instrumentos Virtuales), todos ellos proporcionados por la librería donde se

encuentran los drivers del instrumento:

30

Abre la comunicación con el analizador lógico y, opcionalmente, le aplica un

reset al instrumento. Por tanto como entradas recibirá la dirección del instrumento y

a la salida sacará su referencia para que de este modo pueda ser entendida por los

siguientes bloques de configuración. Por otra parte contará, al igual que los

siguientes bloques que ahora comentamos, con una entrada y una salida de

indicación de error. Además, no sólo da la opción de un reset mediante el

controlador correspondiente, sino que también posee otros dos interruptores

booleanos, uno de ellos para elegir si chequeamos o no el instrumento elegido para

comprobar que tiene las características adecuadas, y otro que permite elegir la

opción a un cliente remoto del analizador para que este muestre un mensaje de

confirmación. Por defecto, dejaremos estas dos entradas sin ser utilizadas.

Se trata del subVI que configura el número de muestras que se almacenarán en

la memoria del analizador dependiendo del número que le llegue a la entrada, junto

con el módulo (LA1) y la referencia de entrada (también tendrá una referencia de

salida como el resto de bloques que le siguen).

Comienza una nueva adquisición de datos.

Indica cuando el analizador lógico está adquiriendo datos y cuándo ha

terminado, poniendo en ese caso una salida booleana a valor falso. Por tanto este

subVI habrá de ejecutarse periódicamente dentro de un bucle. El tipo de bucle

elegido es el de la siguiente figura, un While Loop, que ejecuta todo lo que está

dentro de él hasta que se cumpla la condición. Así, en este caso, a cada iteración se

31

preguntará por el estado del analizador lógico y para cada una de ellas empleará un

tiempo de 5 segundos mediante la función Wait que aparece dentro del bucle de la

figura y que, como se comprueba, recibe el tiempo a esperar en unidades de

milisegundos.

Fig. 5.3. Detalle del bucle While Loop

Es el subVI que devuelve los datos almacenados. Por tanto necesitará como

parámetros el módulo donde han sido almacenados los datos (LA1) y su capacidad

de almacenamiento, así como el modo de adquisición de datos y un número que

indique cuál de los datos se considerará el primero para ser tratado como una señal

lógica en los bloques posteriores. En nuestro caso ponemos el valor cero, tomando

así todos los datos leídos como válidos. De la salida de los datos hablaremos una

vez comentemos los últimos bloques.

Se encarga de cerrar la interfaz de entrada y salida con el instrumento.

Se trata del instrumento virtual Simple Error Handler que recibe la indicación

de error del bloque anterior y, en caso de fallo, saca la explicación e identificación

de éste para que pueda ser visualizado desde el panel frontal. Opcionalmente

despliega una caja de diálogo que en este proyecto no utilizaremos.

32

Es la función que recibe una ocurrencia como entrada y que hace que todos los

nodos que la estuviesen esperando comiencen a realizar sus tareas. En este caso, el

único nodo que la esperaba era TLA_5202.vi.

Comentamos por último el tratamiento que hacemos de la señal centrándonos en las

necesidades de nuestro trabajo, así como en el convertidor que hemos utilizado para su

verificación. La salida era originariamente tan sólo la misma que la del subVI que

devuelve los datos almacenados, pero nosotros nos fijamos sólo en los canales A3 y A2

(el resto quedarán a 0), que fueron los utilizados durante toda la realización del

proyecto. Estos canales, cada uno de 8 bits, del analizador lógico se corresponden con

las columnas 6 y 7, que son las que extraeremos.

Fig. 5.4. Detalle de la extracción de canales

Como la salida recibe el tratamiento de array usaremos le siguiente función:

Se trata de la función Index Array, que crea un subarray de un array en

concreto, especificándole las filas o columnas que queremos extraer. Por tanto,

utilizamos dos de estas funciones, las dos con el mismo array de entrada

especificándole a una la columna 6 y a otra la 7.

33

La idea ahora es agrupar estos dos subarrays en uno sólo que represente la salida de 12

bits del convertidor analógico digital. Para hacer esto hay que operar numéricamente

con los arrays y números enteros, que al tener una sola dimensión resultarán

incompatibles con los arrays. Para solucionar esto utilizamos esta otra función, también

disponible en la paleta de funciones:

Esta función (Array to Matrix) convierte un array en matriz con la cuál

LabVIEW sí nos permite operar con números enteros. Haciendo esto ya tendremos

dos matrices que representan a los canales A3 y A2.

Como el canal A3 representamos los bits más significativos (11-8) de la salida del

convertidor (todas estas especificaciones aparecen más ampliamente explicadas en el

manual de usuario), por lo que habrá que desplazar su valor binario 8 bits para después

sumarle el valor de A2. Para realizar este desplazamiento a la izquierda multiplicamos

el valor de la matriz A3 por 256 ( 82 ), o sea, multiplicamos por este número cada uno de

los elementos de la matriz A3. Por tanto, ya podemos sumar los valores de A3 y A2 sin

que se superpongan sus bits, agrupándolos en un solo canal de 12 bits de resolución. La

salida ya está, de este modo, disponible para ser tratada por los siguientes bloques. Estas

modificaciones son igualmente válidas para convertidores de hasta 16 bits.

Por último, comentar que hemos realizado la misma operación para posibles

evaluaciones futuras de convertidores de hasta 24 o de hasta 32 bits. Para el primer caso

sumaríamos un tercer canal desplazando previamente sus bits 16 posiciones (es decir,

multiplicando por 65536) y para el segundo también usaríamos un cuarto canal

34

desplazando sus bits 24 posiciones (multiplicando por 16777216) sin que tampoco en

estos casos exista desbordamiento. Por tanto, sólo habría, por ejemplo, en una

aplicación futura de un convertidor de 32 bits, sumar estos dos nuevos canales a la

salida que sí tenemos actualmente habilitada para convertidores de hasta 16 bits. En este

caso se han elegido los canales D3 (columna 8) para un tercer bloque de 8 bits y D2

(columna 9) para un cuarto bloque, si bien se podría haber utilizado cualquier

combinación con los 64 bits de datos del TLA 5202. A continuación se muestra la

columna que se corresponde con cada uno de los canales de la serie TLA 5000, que

como ya comentamos, puede alcanzar hasta los 128 bits.

CANAL DE LA

SERIE TLA

POSICIÓN EN

LA MATRIZ

E3 2

E2 3

E1 4

E0 5

A3 6

A2 7

D3 8

D2 9

A1 10

A0 11

D1 12

D0 13

C3 14

35

C2 15

C1 16

C0 17

Tabla 5.1. Correspondencia de canales y columnas

5.1.2. Generador de onda arbitrario Rohde&Schwarz AM 300

El driver construido para este equipo consta, básicamente, en una sucesión de funciones

de configuración puestas en serie y, posteriormente, siendo duplicadas éstas, de modo

que así se puedan controlar los dos canales del generador, pudiendo almacenar las

características de la onda de cada canal por separado. En las siguientes figuras se

muestra este driver, el AM300.vi.

36

Fig.5.5. Panel frontal del AM300.vi

37

Fig.5.6. Diagrama de bloques del AM300.vi

38

Como se comprueba observando el panel frontal, los valores de entrada disponibles son

la dirección física del equipo (USB::0xAAD::0x5::100373, que se encuentra grabada

por defecto y que no tiene por qué ser modificada si no cambiamos de equipos), el canal

elegido (que será el canal 1 para la señal de entrada y el canal 2 para el reloj del

convertidor), la amplitud de la señal (1 V por defecto para el reloj), la forma de onda

(siendo 0 el identificador de la onda senoidal y habiendo hasta diez formas de onda

diferentes), el offset en tensión (será 0 en ambos casos), la frecuencia de las señales, los

diferentes tipos de acoplamientos entre ambos canales (frecuencia, amplitud, salida y

fase) y el identificador de errores. Además, posteriormente añadimos un bloque para

controlar la fase ya que si no se pone sería de 0º y para la generación de la rampa

necesaria para el análisis estático que posteriormente se explica debe adelantarse en 90º

(es decir, un cuarto de período) la onda triangular para obtener la rampa requerida.

Todos estos controladores irán por duplicado, como ya hemos comentado. Los

diferentes bloques del diagrama los comentamos brevemente a continuación. El orden

de colocación de estos en el diagrama es indiferente, si bien, como es lógico, el bloque

de inicialización debe ir en primer lugar y los de salida y de fin de sesión al final.

Es el bloque que se encarga de la inicialización del generador de funciones por

lo que tendrá como una de sus entradas la dirección física del equipo que sacará a la

salida como una referencia al instrumento que servirá tanto de entrada como de salida

para todos los subVIs posteriores. Además tendrá las correspondientes entrada y salida

de error y además dos interruptores boolanos, uno para elegir entre hacer un reset o no

hacerlo y otro para, a criterio del usuario también, chequear o no el instrumento elegido

para comprobar que tiene las características adecuadas.

39

Permite elegir entre los diferentes tipos de acoplamiento.

Permite elegir entre el canal 1 o el canal 2.

Recibe como entrada la fase en el tiempo expresada en grados.

Recibe como entrada el identificador de forma de onda.

Recibe como entrada la frecuencia expresada en hertzios.

Recibe como entrada la amplitud expresada en voltios.

Recibe como entrada el offset expresado en voltios.

Habilita o deshabilita la salida del canal indicado por medio de un interruptor

booleano que, por defecto, estará a valor false, es decir, las salidas de los canales estarán

habilitados.

Reinicializa al dispositivo para que pueda ser utilizado de nuevo. A este bloque

le sigue el VI Simple Error Handler descrito anteriormente.

40

Genera la ocurrencia que se utilizará como salida para avisar al analizador lógico

de que ya puede comenzar a leer datos válidos.

5.2. Interfaz para el convertidor analógico digital

La idea de esta interfaz es que, con ella, se puedan analizar el máximo número de

convertidores posible y de una forma sencilla y completa para el usuario. El panel de

control de esta interfaz que es, a su vez, el instrumento virtual principal del proyecto, se

muestra en la siguiente figura.

41

Fig.5.7. Panel frontal de CADinterfaz.vi

42

Se observa que las entradas que introducirá el usuario son las siguientes:

- Dirección física del generador de onda arbitrario cuyo valor, utilizado en el

laboratorio, está puesto por defecto. La dirección IP del analizador lógico no

estará accesible directamente al usuario desde este panel frontal ya que,

como la del generador, no es necesario cambiarla y, además, la ejecución de

sus drivers depende de la ejecución previa de los del generador.

- Resolución del convertidor, es decir, el número de bits.

- Frecuencia de muestreo del convertidor, expresada en Hz.

- Frecuencia de la señal de entrada, expresada en Hz.

- Ancho de banda sobre el que se realizarán los cálculos de ruido y distorsión,

expresado en Hz.

- Frecuencia mínima a partir de la cual se realizarán dichos cálculos,

expresada en Hz.

- Número de muestras que se tomarán para el cálculo de la potencia de la señal

de entrada y de la de los armónicos, siendo éstas el número de puntos a cada

lado de la respectiva frecuencia central

- Fondo de escala del convertidor, esto es, la amplitud máxima admisible por

el CAD expresada en Vpp.

- Amplitud de la señal de entrada, también expresada en Vpp.

- Interruptor booleano para seleccionar entre un análisis dinámico o bien uno

estático.

43

- Interruptor booleano que, en caso de haber elegido realizar un análisis

dinámico, permite seleccionar o no la posibilidad de hacer un cálculo del

rango dinámico del convertidor.

- Número de iteraciones que se realizarán del bucle principal del instrumento

virtual que calcula el rango dinámico, es decir, el número de señales de

amplitud distinta que se pondrán a la entrada del convertidor analógico

digital para calculárseles la SNDR a la salida. Será, por tanto, el número de

puntos de la gráfica de salida y sólo tendrá sentido su valor cuando el usuario

haya decidido realizar un análisis dinámico completo.

Por otro lado las salidas se dividirán en dos bloques:

Salidas correspondientes a la caracterización dinámica:

- Gráfica de la densidad espectral de potencia de la señal de entrada (PSD),

expresada en decibelios y en función de la frecuencia abarcando el rango que

va desde la continua (DC) hasta la mitad de la frecuencia de muestreo, es

decir, 10 MHz en nuestro caso

- Gráfica de la onda senoidal puesta a la entrada del convertidor en función del

tiempo. Si la amplitud de ésta es igual al fondo de escala del convertidor el

valor máximo de su amplitud debe ser igual a resolución2 , siendo 0 el valor

mínimo.

- Valores obtenidos de la THD (distorsión armónica total), SNR (relación

señal a ruido), SNDR (relación señal a ruido más armónicos) y ENOB

(número efectivo de bits). La explicación del significado de estas

44

expresiones se realiza más adelante y la los valores de las tres primeras se

expresan en decibelios.

- Valores de la potencia de la señal, de la potencia del ruido y de la potencia

de los tres primeros armónicos a la salida del convertidor, expresadas todas

en decibelios y normalizadas respecto al valor de la potencia de la señal, por

lo que el valor que nos muestre el indicador de ésta será siempre de 0 dB.

- Gráfica del rango dinámico que representa diferentes valores del SNDR en

decibelios, en función de la potencia de entrada. El rango de valores que

toma ésta irá desde un valor algo menor al mínimo posible ( 1/n* resolución2 ,

con n>1, siempre que éste no sea menor al mínimo que el generador puede

dar a su salida, que, como dijimos, está establecido en 1 mV) hasta el fondo

de escala del convertidor. Además, este rango de potencias de entrada estará

normalizado con la potencia de la señal cuya amplitud pico a pico sea igual

al fondo de escala, de manera que el valor máximo representable en el eje x

será siempre igual a 0 decibelios.

Salidas correspondientes a la caracterización estática:

- Gráfica de la rampa a la salida del convertidor, es decir, una representación

de la escalera que tendrá aproximadamente resolución2 niveles de amplitud, es

decir, 4096 escalones en el caso de nuestro convertidor.

- Gráfica de la rampa que habría a la salida de un convertidor ideal de las

mismas características que las del que estamos evaluando.

- Gráfica que representa los valores del DNL para cada uno de los niveles del

convertidor.

45

- Gráfica que representa los valores del INL para cada uno de los niveles del

convertidor.

- Valores de los DNL e INL máximos.

- Valor de la resolución real del convertidor en función de su caracterización

estática.

- Número de monotónicos (es decir, número de veces en los que, por error,

uno de los escalones tiene una amplitud mayor al del escalón siguiente) y

cantidad de código que se pierde.

El diagrama de bloques de este instrumento virtual presentará dos aspectos diferentes,

dependiendo del modo de análisis elegido, ya que esta elección se gobierna con un

interruptor que toma un valor booleano que sirve como condición a la estructura Case

empleada. Así, el diagrama de bloques cuando se elige el análisis dinámico resulta

como se muestra en la siguiente figura.

46

Fig. 5.8. Diagrama de bloques de CADinterfaz.vi (Análisis dinámico)

A la estructura Case le llegarán todas las entradas ya mencionadas del panel frontal y

todas ellas serán utilizadas en una o más de una ocasión en el caso del análisis

47

dinámico. El primer subVI en ejecutarse será AM300.vi, ya que es el único que no

depende de eventos que se generen en nodos anteriores dentro de la estructura Case.

Así, a este primer bloque le llegarán los valores que se introducen desde el panel frontal

por el usuario, es decir, las frecuencias de muestreo del convertidor y de la señal a

digitalizar, así como la amplitud de esta señal de entrada y la dirección física del equipo

que, aunque no sea un valor que vayamos a cambiar en una sucesión de experimentos, sí

que debe estar presente para que así la comunicación mediante el protocolo USB con el

generador de onda sea la primera tarea en ejecutarse por el programa.

Una vez finalizada la ejecución de AM300.vi el siguiente bloque en ejecutarse es el

TLA_5202.vi ya que a éste es al que le llega el evento generado por el instrumento

virtual anterior. Ésta será la única entrada que reciba este bloque puesto que a todos sus

controles anteriormente comentados no es necesario realizarles ningún cambio. Su

salida será la matriz de datos convertidos una vez hayan sido ensamblados

correctamente los 12 bits. Esta salida, por un lado, sirve para pasar directamente a ser

representada en el tiempo, y por el otro como entrada al instrumento virtual dinamica.vi

que será el encargado de realizar la caracterización estática del convertidor.

Comenzamos comentando el primer camino que toma la señal para su representación

temporal, encontrándose en primer lugar la función Index Array, que ya explicamos

dentro del bloque TLA_5202.vi, y que en este caso nos sirve para convertir la matriz

bidimensional en la que está representada la señal en una unidimensional con la que

podamos operar más cómodamente con sus valores. Así, le introducimos un parámetro

igual a 0 en el índice de las columnas para, de esta forma, extraer la única de ellas que

48

tiene datos. Una vez hecho esto, realizamos una conversión de tipo con la siguiente

función:

que pasa de tipo double a tipo de datos dinámico, que es el formato adecuado

para representar señales en el tiempo.

El otro camino que toman los valores convertidos de la señal es el que se utiliza de

entrada para el bloque encargado de la caracterización dinámica. Antes de describirlo

comentaremos las funciones que previamente permiten que podamos pasarle las

frecuencias como un parámetro de tipo matriz.

La función Bundle recibe un cierto número de elementos que pueden ser del

mismo tipo o de tipos distintos (en nuestro caso serán tres, todos ellos tipo double) y

ensambla con ellos un solo elemento tipo cluster que pondrá en su salida. Un elemento

de este tipo es similar a un vector, pero con la peculiaridad de que puede estar

compuesto por elementos de distinto tipo.

Esta función (Cluster to Array) convierte un elemento tipo cluster a un elemento

tipo array. La salida de esta función pasará, por último, por la función Array to Matrix,

anteriormente comentada.

Tanto su panel frontal, como su diagrama de bloques se representan en las siguientes

figuras.

49

Fig. 5.9. Panel frontal de dinamica.vi

50

Fig. 5.10. Diagrama de bloques de dinamica.vi

En el panel frontal de este instrumento virtual encontramos como entrada, además de la

matriz con los datos convertidos, una matriz con los valores de las frecuencias que

introduce el usuario y también la banda de frecuencias a integrar en los cálculos y el

número de puntos de la FFT que utilizaremos para los cálculos de potencias, que

igualmente serán elección del usuario.

Las salidas se mapearán directamente como salidas de la interfaz con el usuario, ya que

éstas son la gráfica de la PSD y los valores de los SNR, SNDR, THD y ENOB, así

51

como los valores normalizados de potencia. La otra salida de la que dispone dinamica.vi

es una del tipo Ocurrence, que servirá para avisar al bloque que calcula el rango

dinámico que ya puede comenzar a ejecutarse.

Fijándonos ahora en el diagrama de bloques observamos, por un lado, una función

similar a la ya utilizada en AM300.vi para poner a la salida un evento. Por el otro lado

realizamos todo el tratamiento de la señal.

En primer lugar convertimos la matriz bidimensional de datos en una unidimensional tal

como explicamos un poco más arriba. De este modo, ya podremos utilizar los datos

convertidos con el tipo requerido por la siguiente función:

Recibe la señal en el tiempo y calcula su densidad espectral de potencia. La

ventana con el que realizamos la FFT es de tipo Hanning, si bien existen otras opciones

como son Hamming, Blackman-Harris, Blackman exacta, Blackman, Flat Top, Harris

de cuatro o de siete términos, Low Sidelobe, Blackman Nuttall, triangular, Kaiser,

Dolph-Chebyshev, gaussiana y rectangular. La opción de poner los valores de la PSD en

decibelios la dejamos a false, pues necesitaremos un tratamiento de sus valores en

números naturales para posteriores cálculos. Una vez obtenida la PSD utilizamos las

siguientes funciones para su tratamiento:

Como la salida de la función anterior es una cadena de caracteres habrá que

descomponer ésta en sus elementos con este bloque que recibe el cluster o conjunto de

elementos y los separa. Así, en este caso dichos elementos serán la frecuencia inicial, la

separación diferencial entre muestras y el array con el valor de cada una de ellas. Éste

52

será el que nos interese y el que le llegue como entrada al módulo MathScript Node y

también al que representa su espectro.

Hace el logaritmo en base 10 de cada elemento de la PSD para representarla en

decibelios (posteriormente se multiplica por 10 al ser valores de potencia). Esto se hace

así porque la visualización de la gráfica es mucho más clara de este modo.

Este bloque calcula el número de puntos de la PSD.

Convierte a tipo double el tamaño de la FFT para ser tratado en la rutina

matemática. Por el mismo motivo también se convierte el array de datos a matriz

utilizando la misma función que en el instrumento virtual TLA_5202.vi.

Una vez tenemos listos los valores de las variables que son la matriz de datos de la PSD

y su tamaño nos queda por introducirle al módulo matemático el resto de valores

necesarios. Estos son los valores de las frecuencias, la banda de operación y el número

de muestras para el cálculo de potencias. Las dos últimas se le pasan directamente desde

la interfaz de usuario mientras que a los valores de frecuencias, al llegarnos dentro de

una matriz, habrá que extraerlos para su tratamiento independiente. Para ello usamos la

función inversa a una de las ya explicadas:

que hace una conversión de tipo de matriz a array bidimensional, ya que lo que

necesitamos es un vector que contenga las columnas. Es por ello por lo que

posteriormente extraemos un vector unidimensional (la primera columna, de ahí a que

su índice correspondiente sea igual a 0). Una vez obtenido este vector tan sólo habrá que

53

extraer sus tres primeros elementos con sendas funciones Index Array para, de este

modo, tener listas cada una de las tres frecuencias como parámetros independientes.

Con todos los parámetros listos nos disponemos a comentar ahora el núcleo de este

instrumento virtual, el MathScript Node, ya que es éste el que calcula todos los

parámetros que caracterizarán dinámicamente al CAD. Una función de este tipo es

aquella que ejecuta Labview MathScript, una aplicación de LabVIEW que ejecuta

comandos matemáticos con una sintaxis muy parecida a la del lenguaje Matlab. A

continuación mostraremos más detalladamente las sentencias utilizadas, comentadas

correctamente, ya que dentro del MathScript Node se decidió obviar estos comentarios

por no hacer de la función de esta rutina matemática un bloque de tamaño

desproporcionado.

Sus entradas serán, como hemos dicho, una matriz con los valores de amplitud (en

números naturales) de cada uno de los puntos de la PSD, el número de puntos, las

frecuencias de entrada, de muestreo e inferior, y la banda y número de puntos que se

integrarán para el cálculo de potencias. Como salida tendremos los dos bloques de

resultados que el usuario visualiza desde el panel frontal principal, es decir, por un lado

la SNR, SNDR, THD y ENOB, y por el otro, los valores de las potencias normalizadas

de la señal, ruido y los tres primeros armónicos. Además, hemos dejado como salidas,

tanto el número de armónicos cuya potencia calculamos, como los puntos de la FFT en

los que se encuentran las frecuencias de señal, inferior y de límite de banda. Estas

salidas no se visualizarán en el panel frontal, pero no las hemos eliminado al habernos

resultado útiles en la depuración del programa y considerar que podrán tener su utilidad

en futuros desarrollos. La rutina comentada es como sigue:

54

PotTotal=0; %inicializamos todos los valores de PotSignal=0; %potencia eliminando los cálculos PotRuido=0; %anteriores PotArmonicos=0; PotArm1=0; PotArm2=0; PotArm3=0; Ndat=ceil(size*2*fdat/fs); %calculamos las muestras en las que se NfB=ceil(size*2*fB/fs); %encontrarán la frecuencia de señal, el Nfl=ceil(size*2*fl/fs); %límite de la banda y la frecuencia inferior. %Para ello cada una de las frecuencias son %normalizadas respecto a la frecuencia de %muestreo por lo que habrá, además que %dividir por ésta, multiplicar por 2, ya que %la PSD se representa hasta la mitad de fs %y el resto de frecuencias con su valor %completo, cumpliendo de este modo el %teorema de Nyquist. Como el punto para %fs debe ser el último de la FFT, %multiplicamos por el tamaño de ésta. La %función Ceil aproxima el resultado al %entero superior más próximo. for i=Nfl+1:NfB+1 %mediante un bucle for que itera desde la PotTotal=PotTotal+datos(i); %frecuencia inferior hasta el límite de la end %banda calculamos la potencia total, %sumando los valores de todos los puntos %que nos llegan por la matriz de entrada % datos for i=Ndat-Nb+1:Ndat+Nb+1 %mediante un bucle for que itera alrededor PotSignal=PotSignal+datos(i); %de la frecuencia de la señal calculamos la end %potencia de ésta. El número de puntos %que integrarán la potencia vendrá dado %por el parámetro de entrada Nb, de modo %que se tomarán ese número de puntos a %cada lado de la frecuencia central PotSignalDB=10*log10(PotSignal); %se calcula el valor en dB de la potencia de %la señal Narmonicos=floor(fB/fdat); %calculamos el número de armónicos que %se tendrán en cuenta para el cálculo de la %distorsión, aproximando con la función % floor al entero inferior más próximo, de

55

%modo que contabilizaremos un armónico %por cada vez que el valor de la banda %doble al de la frecuencia de la señal for i=2:Narmonicos %con un bucle for iteramos tantas veces Nfi=i*Ndat; %como armónicos hayamos calculado. for j=Nfi-Nb+1:Nfi+Nb+1 %Para cada uno calculamos el punto de la PotArmonicos=PotArmonicos+datos(j); %FFT donde se encuentra (es decir, el end %doble de la frecuencia de la señal, el end %triple,…). Para cada uno de esos %puntos calculamos su potencia y %las vamos sumando para obtener así %el valor total de la potencia de distorsión PotArmonicosDB=10*log10(PotArmonicos);%calculamos la potencia de distorsión en %dB if(Narmonicos>2) %Bucle para el caso en el que tengamos for j=2*Ndat-Nb+1:2*Ndat+Nb+1 %calcular las potencias de los 3 primeros PotArm1=PotArm1+datos(j); %armónicos. Para cada uno de ellos end %calculamos su potencia y lo for j=3*Ndat-Nb+1:3*Ndat+Nb+1 %introducimos en una variable distinta. PotArm2=PotArm2+datos(j); end for j=4*Ndat-Nb+1:4*Ndat+Nb+1 PotArm3=PotArm3+datos(j); end else if(Narmonicos==2) %Bucle para el caso en el que tengamos for j=2*Ndat-Nb+1:2*Ndat+Nb+1 %calcular la potencia de los 2 primeros PotArm1=PotArm1+datos(j); %armónicos end for j=3*Ndat-Nb+1:3*Ndat+Nb+1 PotArm2=PotArm2+datos(j); end else if(Narmonicos==1) %Bucle para el caso en el que for j=2*Ndat-Nb+1:2*Ndat+Nb+1 %tengamos que calcular la potencia PotArm1=PotArm1+datos(j); %del primer armónico únicamente end end end end PotRuido=PotTotal-PotSignal-PotArmonicos; %La potencia de ruido la %calculamos restándole a la

56

%potencia total la potencia %de la señal y la potencia de %los armónicos snr=10*log10(PotSignal/PotRuido); %Calculamos los valores de sndr=10*log10(PotSignal/(PotRuido+PotArmonicos)); %SNR, SNDR, THD y thd=10*log10(PotArmonicos/(PotSignal+PotArmonicos)); %ENOB según sus enob=(sndr-1.76)/6.02; %definiciones PotSignalN=0; %El valor de la salida que %indique la potencia de la %señal estará normalizado %respecto a ella misma, por %lo que siempre valdrá 0 dB PotRuidoDB=10*log10(PotRuido)-PotSignalDB; %Normalizamos la potencia %de ruido una vez pasada a %dB Pot1ArmDB=10*log10(PotArm1)-PotSignalDB; %Normalizamos las Pot2ArmDB=10*log10(PotArm2)-PotSignalDB; %potencias de los 3 primeros Pot3ArmDB=10*log10(PotArm3)-PotSignalDB; %armónicos una vez pasadas %a dB

Por último, y volviendo a lo que es la programación gráfica de dinamica.vi, queda por

decir que volvemos a colocar en serie (como hacíamos en CADinterfaz.vi) las funciones

Bundle, Cluster to Array y Array to Matrix, para sacar de este modo la caracterización

dinámica y los valores de potencia normalizados.

Una vez explicado el bloque dinamica.vi en su totalidad y, antes de comenzar a tratar el

otro subVI (RangoDinamico.vi) cuando el selector de la estructura Case de

CADinterfaz.vi tiene valor true, observamos cómo las salidas numéricas que

caracterizan dinámicamente al convertidor son tratadas inversamente a como acabamos

de explicar dentro de dinamica.vi, es decir, ponemos en serie las funciones Matrix to

57

Array e Index Array para extraer un array unidimensional que contenga los valores

calculados para, posteriormente, utilizar la función:

Array to Cluster para presentar en la interfaz de usuario como un cluster de

elementos la caracterización dinámica y los valores de potencia, siendo ésta una forma

más elegante de hacerlo.

Dentro de este caso de la estructura principal sólo quedaría comentar unas etiquetas que

aparecen llamadas Rampa real, Rampa ideal, DNL, INL y Carac.Estatica. Se trata de

variables locales de las salidas cuando el selector de la estructura es igual a false, es

decir, cuando hemos seleccionado un análisis estático del convertidor. Esto es necesario

por dos razones. La primera porque LabVIEW nos obliga a ello, ya que, como en otros

muchos lenguajes de programación, no se nos permite que las salidas definidas para un

caso queden indefinidas para algún otro. La segunda es porque, de este modo,

almacenamos los valores que posiblemente se hayan calculado para así poder tener una

representación completa de ambos análisis, estático y dinámico, en una misma interfaz,

tal como se mostraba en la figura 5.7. Para hacer esto tan sólo hay que picar con el

botón derecho del ratón un terminal y elegir la opción Create>Local Variable.

Posteriormente, y una vez colocada la variable local dentro del caso de la estructura

donde queremos conservar su valor, volvemos a picarla con el botón derecho del ratón y

elegimos la opción Change to Read, ya que, por defecto, la variable local aparece del

tipo de escritura y a nosotros nos interesa que sea de lectura, para que así tome y

conserve los valores de la salida a la que la cablearemos.

58

Ahora sí pasamos a comentar el bloque RangoDinamico.vi, que es el que, como su

nombre indica, el que se encarga de representar gráficamente el rango dinámico del

convertidor analógico digital, esto es, los valores de SNDR en función de las distintas

potencias, normalizadas respecto a la máxima, a la entrada del convertidor. En primer

lugar mostramos su panel frontal para enumerar de este modo las entradas y salidas de

este instrumento virtual.

Fig.5.11. Panel frontal de RangoDinamico.vi

Observamos que las entradas serán prácticamente las mismas que las de dinamica.vi, es

decir, la misma matriz con las frecuencias elegidas por el usuario, la banda en la que se

calculará la SNDR y el número de puntos para el cálculo de potencias. También tendrán

como parámetro común la resolución del convertidor. Una de las entradas adicionales

de este instrumento virtual tendrá un control de tipo Ocurrence que nos llega desde

dinamica.vi y que nos indicará el momento en el que finaliza su ejecución para entonces

poder comenzar la de este bloque. Además, introducidos por el usuario, nos llegarán los

59

valores de Boolean e Iteraciones. Con el primero de ellos se decidirá si se quiere o no

calcular el rango dinámico. Esto se hace así porque el tiempo que se tarda en ejecutar

este instrumento virtual es muy prolongado, ya que hay que comunicarse sucesivas

veces (el número que indique Iteraciones) con los equipos. La comunicación que resulta

más lenta, del orden de una decena de segundos, se ha comprobado que es la que utiliza

el protocolo USB, o sea, la que nos sirve para comunicarnos con el generador de onda,

por lo que, por este motivo, el valor por defecto que tendrá este control booleano en la

interfaz de usuario será igual a false. Además, habrá una entrada más que se dejará

como controlador interno, ya que en principio no habrá que cambiar el valor por defecto

que se les ha dejado. Éste controlador es la dirección física del generador de onda, que

como comentamos durante la explicación de la interfaz de usuario será necesario hacer

uso de él para que AM300.vi comience a ejecutarse comunicando así correctamente con

el generador.

Las únicas salidas de las que dispondrá este instrumento virtual serán la representación

gráfica del rango dinámico y una barra de progreso con un rango de 0 a 100. Se ha

decidido utilizar esta herramienta por el motivo ya comentado del tiempo de varios

minutos que hay que esperar para obtener una gráfica con un número considerable de

puntos. Por esto, para evitar la sensación al usuario de que la aplicación no avanza, éste

podrá acceder al panel frontal de este instrumento virtual que le mostrará cuál es el

número de la iteración que está ejecutándose, coloreándose en una unidad la barra de

progreso por cada incremento del índice que las controla.

A continuación mostramos el aspecto del diagrama de bloques de RangoDinamico.vi.

60

Fig.5.12. Diagrama de bloques de RangoDinamico.vi

61

Como se comprueba observando el diagrama de bloques de la figura anterior

prácticamente toda la programación de este instrumento virtual se concentra dentro de

una estructura Case a cuyo selector le llega el valor del interruptor Boolean que

selecciona entre calcular el rango dinámico del convertidor o no calcularlo. En el caso

de que el valor fuera igual a false la estructura estaría completamente vacía,

encontrando en ella únicamente las variables locales llamadas x, y y Vi, cuyo significado

ahora explicaremos.

Observamos, antes que nada, la presencia de una función que recibe el evento de

dinamica.vi, que le permitirá comenzar la ejecución del instrumento virtual. Una

función de este tipo ya fue ilustrada durante la explicación de TLA_5202.vi.

Ya estudiando el caso en el que el selector es igual a true, observamos que dentro de la

estructura Case aparece un bucle for. Éste será el encargado de realizar tantas

iteraciones como indique el usuario de la interfaz. Un bucle for contiene dos variables,

N e i . La primera será el número de iteraciones a realizar, por lo que la cablearemos a

su control correspondiente, mientras que la segunda es la variable que se va

incrementando en una unidad, por lo que su rango irá desde 0 hasta N-1.

El primer paso dentro de este bucle será calcular cuáles serán las tensiones de entrada

para las que calcularemos el valor de su SNDR a la salida del convertidor. Los límites

de estas tensiones estarán fijados independientemente del número de iteraciones

elegidas y sus valores serán la tensión del fondo de escala para su valor máximo y un

valor algo menor que su LSB (siendo LSB= resolucion21 ), es decir, un valor algo menor al

62

mínimo que el convertidor puede reconocer como un valor de tensión. Por tanto, estos

serán los puntos conocidos de la recta que queremos calcular, (1, resolucion241

×) y

(N,2

max imo ), habiendo considerado la variable x=i+1 y dividiendo por 4 el valor de

LSB para obtener ese valor algo menor del que hablábamos (dividiendo por 2) y

dividiendo otra vez por 2 ya que LSB es un valor en Vpp y para el cálculo en decibelios

necesitamos el valor de pico. Por este último motivo también dividimos por 2 el valor

del fondo de escala, ya que este lo introduce el usuario en Vpp. Con estos dos puntos ya

tendríamos la ecuación de la recta de la que sacaríamos tantos puntos equidistantes

como iteraciones solicite el usuario. Sin embargo, dado que la SNDR se calcula en

decibelios, resulta más conveniente que la equidistancia entre valores de la tensión a la

entrada fuera en escala logarítmica y no lineal, por lo que pasamos a decibelios siendo

ahora los puntos de los extremos (1, 20log( resolucion241

×)) y (N, 20log(

2max imo )). Por

tanto sabiendo que la ecuación de una recta de define como:

)1(21211 ax

aabbby −

−−

=−

siendo (a1,b1) y (a2,b2) los puntos conocidos, la ecuación de la recta que necesitamos

tendrá la siguiente expresión:

)1(1

)24

1log(20)2

maxlog(20)

2maxlog(20 +−

−=− Ni

Nx

imoimoVin

resolucion

donde Vin es el valor de tensión de pico en decibelios que pondremos a la entrada del

convertidor para cada uno de los valores que vaya tomando la variable i . De este modo,

los valores de la tensión de entrada serán equidistantes en escala logarítmica, que es lo

63

que nos interesa. Resulta necesario comentar también que puede ocurrir que el valor

mínimo de tensión a la entrada no pueda ponerse a la salida del generador de onda por

ello usamos el siguiente módulo MathScript Node:

Fig. 5.13. Módulo MathScript Node

que pondrá a su salida el valor mínimo de tensión en voltios, que será x/2 (o sea, LSB/4)

o bien 0,5 mV, ya que la tensión mínima que puede dar el generador de onda es de 1

mVpp, en el caso de que la tensión requerida sea inferior a la mínima del generador. En

nuestro caso necesitaríamos una tensión mínima para la gráfica del rango dinámico de

0,06 mV (ya que el convertidor que utilizamos es de 12 bits), que resulta menor que los

0,5 mV del generador, por lo que ésta será la tensión más pequeña que pongamos a la

entrada del convertidor.

Por tanto, con todo esto ya podemos calcular los valores de Vin a partir de su ecuación,

teniendo en cuenta que previamente utilizamos la función:

que por su primera entrada recibe el valor de n, o sea, de la resolución en este

caso, y por la segunda el valor por el que se multiplicará n2 .

El resto de funciones, tales como operaciones aritméticas o la función que calcula el

logaritmo en base 10 ya comentada durante la explicación de dinamica.vi, serán las que

nos conduzcan al valor de Vin. Además, observamos cómo el indicador Progreso va

64

conectado directamente al índice del bucle for. Una vez obtenida Vin habrá que calcular

su valor en Vpp que es como debe recibir la entrada de amplitud de del canal 1 del

generador de onda. Para ello dividimos por 20 y aplicamos la función:

que saca la potencia de base 10 y exponente la entrada, es decir, que calcula la

inversa del logaritmo. Tras esto, habrá que multiplicar por 2 para calcular el valor pico a

pico.

Con esta tensión como entrada ya podemos llamar al instrumento virtual que maneja al

generador de onda, tal como realizamos anteriormente. El resto de parámetros serán los

que ya dijimos que están puestos por defecto, a excepción de la frecuencia de señal (por

el canal 1) y la frecuencia de muestreo (por el canal 2), que llegarán introducidas por el

usuario como elementos de una matriz. Para extraerlas hacemos como ya hemos

explicado, poniendo en serie las funciones Matrix to Array y Array Index. Ahora, en vez

de volver a extraer cada una de las frecuencias con ésta última función, utilizamos la

función Array to Cluster y posteriormente:

Esta función (Unbundle) recibe un cluster y lo descompone en elementos

independientes. Es una forma distinta a la realizada anteriormente con arrays pero

igualmente válida. Además el hecho de realizar estas operaciones dentro o fuera de la

estructura Case resulta indiferente.

65

Una vez generadas, cada una de las ondas senoidales digitalizadas serán leídas por el

analizador lógico, una vez que TLA_5202.vi reciba el aviso por medio del evento que le

envía AM300.vi de que los datos ya están listos. Exactamente igual que en dinamica.vi,

extraemos la primera columna que la matriz devuelva tras acabar la comunicación con

el analizador y le realizamos su PSD, igualmente sacando sus amplitudes en unidades

naturales para tenerlos así disponibles como entrada de la rutina matemática. Del mismo

modo también extraemos ahora los datos del cluster que devuelve FFT Power Spectral

Density.vi y calculamos el tamaño de dicho vector.

El módulo MathScript Node que usamos ahora es muy parecido al empleado en

dinamica.vi, si bien es algo más sencillo a no tener que realizar tantos cálculos como

aquél. Además de las entradas de aquél, el actual nodo recibirá como entradas

adicionales la tensión de la señal de entrada y el fondo de escala del convertidor que

estemos evaluando. Como salidas sólo nos interesarán los valores de la SNDR y de la

potencia normalizada respecto a la máxima a la entrada del convertidor, si bien hemos

dejado las del nodo de dinamica.vi para que su evaluación nos resultase más sencilla,

aunque sus valores no se ilustran directamente en el panel frontal del actual instrumento

virtual. Lo mismo ocurre con la variable que representa la tensión de entrada expresada

en voltios. A continuación se muestra el código de la rutina correctamente comentado:

PotTotal=0; %inicializamos todos los valores de PotSignal=0; %potencia eliminando los cálculos PotRuido=0; %anteriores PotArmonicos=0; Ndat=ceil(size*2*fdat/fs); %calculamos las muestras en las que se NfB=ceil(size*2*fB/fs); %encontrarán la frecuencia de señal, el Nfl=ceil(size*2*fl/fs); %límite de la banda y la frecuencia inferior. %Para ello cada una de las frecuencias son

66

%normalizadas respecto a la frecuencia de %muestreo por lo que habrá, además que %dividir por ésta, multiplicar por 2, ya que %la PSD se representa hasta la mitad de fs %y el resto de frecuencias con su valor %completo, cumpliendo de este modo el %teorema de Nyquist. Como el punto para %fs debe ser el último de la FFT, %multiplicamos por el tamaño de ésta. La %función Ceil aproxima el resultado al %entero superior más próximo. for i=Nfl+1:NfB+1 %mediante un bucle for que itera desde la PotTotal=PotTotal+datos(i); %frecuencia inferior hasta el límite de la End %banda calculamos la potencia total, %sumando los valores de todos los puntos %que nos llegan por la matriz de entrada % datos for i=Ndat-Nb+1:Ndat+Nb+1 %mediante un bucle for que itera alrededor PotSignal=PotSignal+datos(i); %de la frecuencia de la señal calculamos la End %potencia de ésta. El número de puntos %que integrarán la potencia vendrá dado %por el parámetro de entrada Nb, de modo %que se tomarán ese número de puntos a %cada lado de la frecuencia central Narmonicos=floor(fB/fdat); %calculamos el número de armónicos que %se tendrán en cuenta para el cálculo de la %distorsión, aproximando con la función % floor al entero inferior más próximo, de %modo que contabilizaremos un armónico %por cada vez que el valor de la banda %doble al de la frecuencia de la señal for i=2:Narmonicos %con un bucle for iteramos tantas veces Nfi=i*Ndat; %como armónicos hayamos calculado. for j=Nfi-Nb+1:Nfi+Nb+1 %Para cada uno calculamos el punto de la PotArmonicos=PotArmonicos+datos(j); %FFT donde se encuentra (es decir, el end %doble de la frecuencia de la señal, el end %triple,…). Para cada uno de esos %puntos calculamos su potencia y %las vamos sumando para obtener así %el valor total de la potencia de distorsión

67

PotRuido=PotTotal-PotSignal-PotArmonicos; %La potencia de ruido la %calculamos restándole a la %potencia total la potencia %de la señal y la potencia de %los armónicos sndr=10*log10(PotSignal/(PotRuido+PotArmonicos)); %calculamos la sndr según %definición PotNorm=20*log10(Vin)-20*log10(maximo/2); %pasamos la tensión de %entrada de Vp a dB y lo %normalizamos respecto %a la máxima potencia a la %entrada Una vez hemos obtenido estos dos últimos valores cableamos sndr a la salida llamada y

y PotNorm a la salida llamada x. Los valores de estas salidas irán siendo tomadas, a

cada iteración del bucle, por la función Build XY Graph:

Fig. 5.14. Función Build XY Graph Esta función almacena las distintas parejas de puntos introducidos por las entradas X

Input e Y Input y construye con ellas la gráfica que representa el rango dinámico del

convertidor, es decir, el valor de la SNDR en función de la potencia de entrada del

convertidor, normalizada respecto a su valor máximo admitido por éste. Por tanto, el

valor máximo representable en el eje x será de 0 dB.

Por último, comentar que el tipo de dato que reciben las entradas de los ejes es

dinámico, por lo que tendremos que usar un par de funciones como las que ya hemos

68

explicado para convertir el tipo double a este nuevo tipo de dato. Además de éstas, esta

función dispondrá de entradas para habilitarla (enable), para resetearla y para describir

los errores, con su correspondiente descriptor de errores a la salida. Estas entradas

tendrán puestos sus valores por defecto, es decir, la función estará habilitada, se

reseteará cada vez que se utilice y consideraremos que no tendrá errores a la entrada.

Una vez finalizada la descripción del bloque que calcula el rango dinámico, hemos

finalizado también toda la descripción de CADinterfaz.vi cuando el selector de la

estructura Case es igual a true. El aspecto que toma en el caso contrario es el que se

muestra a continuación.

69

Fig.5.15. Diagrama de bloques de CADinterfaz.vi (Análisis estático)

Lo primero que podemos comentar es, de nuevo, el uso de variables locales que nos

permitan almacenar las salidas de la estructura para el caso contrario. En esta ocasión

70

las variables locales son XY Graph, Waveform Graph, Espectro, Potencias y

Carac.Dinamica.

Observamos que el bloque AM300.vi sigue siendo el primero en ejecutarse en este caso,

pero ahora los datos se introducirán de manera distinta a como se hacía para el análisis

dinámico. En primer lugar la señal de entrada ahora no será un seno, sino una onda

triangular para, a tal efecto, suministrarle a la rutina que se encarga del análisis estático

la rampa adecuada. Por ello, en la entrada que controla en dicho instrumento virtual la

forma de onda del canal 1 ponemos un 2, ya que la forma de onda triangular se

parametriza con ese número entero. La forma de onda del segundo canal seguirá siendo

senoidal. Además la entrada del canal 1 ahora será siempre igual al fondo de escala,

pues esta es la amplitud pico a pico que debe tener la onda triangular para que el análisis

estático sea completo, ya que de este modo el convertidor representará a su salida todos

los niveles posibles.

La otra diferencia en la forma de introducir los parámetros en el bloque AM300.vi reside

en el modo de pasarle la frecuencia de la señal. Mientras que la frecuecia de muestreo

sigue siendo la que introduce el usuario, ahora la frecuencia de la señal vendrá dada en

función de ésta. El cálculo muestreofrec.

65536 representa el tiempo que se tarda en tomar

65536 muestras, que es el valor que dejamos por defecto en TLA_5202.vi. Esto es así

debido a que lo que tarda convertidor en muestrear una vez es igual a muestreofrec.

1

segundos. Por tanto necesitaremos una onda triangular cuyo periodo sea el doble de este

valor, es decir, de la rampa cuya amplitud abarca todo el fondo de escala, por eso

multiplicamos por 2. Posteriormente invertimos el valor de este período para calcular su

71

frecuencia. Por tanto, en el tiempo que se tarda en muestrear 65536 veces la entrada

solamente dará tiempo a digitalizar la rampa debido a que, como dijimos, estará

adelantada en 90º respecto a su origen.

Una vez generada esta señal le llegará el correspondiente evento a TLA_5202.vi para

que almacene los datos digitalizados por el convertidor. Cuando todos estos datos hayan

sido leídos los recibirá en forma de matriz el instrumento virtual estatico.vi, que será el

que se encargue de la caracterización estática del convertidor.

Fig.5.16. Panel frontal de estatico.vi

En el panel frontal anterior se observan tres entradas, la resolución del convertidor, su

frecuencia de muestreo y Rampa, que es la matriz con los datos convertidos. El resto de

elementos son los indicadores de las distintas salidas. Así, disponemos de un bloque que

nos calcula los valores máximos de DNL e INL, la resolución práctica del convertidor

según su caracterización estática, y el número de monotónicos y de cantidad de código

perdido. Las gráficas representan, como ya se dijo en la descripción del panel frontal

72

principal, las rampas reales e ideales y los valores de DNL e INL para cada uno de los

niveles del convertidor. A continuación mostramos el diagrama de bloques:

Fig.5.17. Diagrama de bloques de estatico.vi

73

De nuevo en este caso el bloque principal es un módulo matemático que haciendo un

barrido de la señal de entrada calcula los valores máximos de los DNL e INL, así como

construye los vectores que serán representados en las diferentes gráficas. Esta señal

entraría por el control Rampa, pero existe un problema y es que nuestra placa de

evaluación filtra las frecuencias muy bajas, como la de la onda triangular que

necesitamos. Por tanto, hemos dejado sin cablear esta entrada para que en un uso futuro

pueda emplearse tan sólo con cablearla a la rutina matemática y a la gráfica que la

representa y anulando la unión entre la rutina y el conjunto de operaciones que

sustituyen a la rampa real que, si bien no tienen utilidad práctica en cuanto a la

evaluación de un convertidor en concreto, sí nos es de gran ayuda para comprobar que

las rutinas para el análisis estático funcionan correctamente.

Este conjunto de operaciones comienzan calculando la frecuencia de la onda triangular.

Con esta idea construimos una rampa con resolución2 muestras, 4096 en el caso de nuestro

convertidor. Esto lo hacemos así al elegir una frecuencia igual a resolucionxmuestreofrec24. . De este

modo, si en un segundo la señal es muestreada veinte millones de veces (en el caso de

nuestro convertidor), se muestreará solamente 4096 veces en un período de la señal si

este es igual muestreofrec

resolucíon

.2 . Como nos interesaría que, como dijimos, sólo abarcara una

rampa deberíamos multiplicar este período por 2, pero lo hacemos por 4 obteniendo

sólo una rampa con su rango de amplitud de 0 al valor de pico porque la opción de

adelantar la fase de la señal, como hacíamos con el generador de onda no es posible

implementarla. A continuación mostramos las nuevas funciones que se observan en este

diagrama de bloques:

74

Asocia varios elementos independientes en un cluster. En este caso necesitamos

unir la frecuencia de muestreo y el número de muestras en un cluster que sirve como

parámetro a la función siguiente.

Recibe como entradas el cluster anterior y la frecuencia calculada de la señal,

generando a la salida la señal triangular requerida. El resto de controladores se dejan a

sus valores por defecto, incluida la amplitud de la señal, que será de 1voltio de pico.

Este dato es importante ya que tendrá que concordar con el parámetro de fondo de

escala del convertidor analógico digital que mostramos a continuación.

Simula a un convertidor analógico digital que recibe la señal en el tiempo (una

rampa en este caso) y el número de bits empleado para la conversión y saca la señal

digitalizada. Además, su valor de fondo de escala lo dejamos en 2 Vpp y así se podría

digitalizar la señal analógica generada empleando todos los niveles del convertidor. Por

último, comentar que la conversión se realizará en formato complemento a dos y que

esta función dispondrá de entrada (que le llegará desde la función que genera la onda

triangular) y salida en forma de cadena de caracteres para la descripción de los errores

que se produzcan.

Convierte los datos digitales generados en un array de valores numéricos

(enteros de 32 bits en este caso) para poder tratarlos en la rutina.

75

Las funciones Array Size, Array to Matrix y To Double Precision Float ya fueron

comentadas con anterioridad empleándose en tareas similares. Por último mostraremos

ahora la rutina del módulo MathScript Node correctamente comentado. Este bloque

cuenta con la matriz de datos digitalizados y su tamaño como entradas y, como salidas,

todos los indicadores que aparecen en el panel frontal, así como el valor de LSB,

resultando éste muy útil para la depuración del programa.

%a(1:8)=0; %esta sentencia está comentada %porque en principio no se utiliza. %Se trata de una forma de hacer 0 %las primeras muestras del vector %de datos debido a que hay %ocasiones en las que éstas no son %válidas. j=0; %ponemos a 0 todas las variables aux=0; monotonic=0; missingcode=0; for i=1:(size-1) %para cada dato comprobamos si es if a(i)>a(i+1) %mayor que el posterior. Si es así aux=a(i); %almacenamos su valor e monotonic=monotonic+1; %incrementamos el número de end %monotónicos if (a(i)<a(i+1)) %si es menor y, además, su valor es if (a(i)+1 == a(i+1) & a(i)>aux) %inferior en una unidad al posterior j=j+1; %y es mayor que el último que vreal(j)=i; %provocó un monotónico, entonces else %lo almacenamos como dato válido missingcode=missingcode+(a(i+1)-a(i)-1); %en la siguiente posición. j=j+1; %En caso contrario (siempre que el vreal(j)=i; %dato sea inferior al posterior) se end %seguirá incluyendo en el vector de end %datos válidos pero se incrementará end %la variable de código perdido con %diferencia del siguiente dato con %el actual más la unidad, que con %una conversión correcta debería %valer 0

76

LSB=(vreal(j)-vreal(1))/(j-1); %definimos LSB como la amplitud %de la escalera creada entre el %número de escalones, o sea, el %tamaño teórico del escalón videal(1)=vreal(1); %el primer elemento del vector %ideal será igual al del real for i=1:j-1; %creamos los vectores videal, DNL DNL(i)=(vreal(i+1)-vreal(i)-LSB)/LSB; %e INL según su definición videal(i+1)=videal(i)+LSB; INL(i)=(vreal(i)-videal(i))/LSB; end INL(j)=(vreal(j)-videal(j))/LSB; %fuera del bucle creamos el último %elemento de INL resolucion=log2(j+1); %calculamos el número de bits %efectivo según la caracterización %estática. Sumándole 1 al número %de escalones obtenemos el número %de niveles que es capaz de %distinguir nuestro convertidor INLmax=max(abs(INL)); %calculamos los valores máximos DNLmax=max(abs(DNL)); %de DNL e INL Con esto quedaría totalmente descrita toda la programación llevada a cabo en el

proyecto.

77

6) Verificación de los resultados

6.1. Análisis dinámico

Se observa que los resultados que caracterizan dinámicamente al convertidor son muy

parecidos a los que indica el fabricante en los data sheet. Así, los valores de SNR y

SNDR (que son muy parecidos ya que la distorsión que produce el convertidor a su

salida es mínima), están siempre entre 60 y 70 dB cuando el fabricante especificaba

70,3 de SNR y 70,2 de SNDR para una frecuencia de entrada de 10 MHz. Por otro lado

la THD, que indica la baja distorsión de la que hablábamos, resulta siempre menor a los

-70 dB y a medida que acercamos la señal de entrada a la frecuencia de Nyquist (10

MHz) nos vamos acercando a los -86,3 que especifica el fabricante. Por último, decir

que el número efectivo de bits sale siempre igual a 11 (es necesario aproximar al entero

superior ya que ENOB es el número de bits que necesita teóricamente para hacer la

conversión que realiza en la realidad), obteniéndose valores muy parecidos a los 11,2

que da el fabricante.

Por otro lado, tanto la gráfica de la PSD como los valores numéricos de potencia para el

ruido y los armónicos, resultan en concordancia con las gráficas que ofrecen los data

sheet, ya que estos también indican un fondo de ruido alrededor de los -60 dB y unas

amplitudes para los armónicos alrededor de los -80 dB.

78

6.2. Análisis estático

Como ya se dijo, el hecho de que la placa de evaluación de nuestro convertidor filtre las

bajas frecuencias, hace imposible un análisis estático. Por tanto, todo lo que hacemos en

este caso es simular una onda triangular y pasarla por un convertidor ideal. La utilidad

práctica de esto será entonces, no la evaluación de ningún convertidor, sino la del

programa llevado a cabo para posteriores análisis. De este modo, debido a la idealidad

del convertidor, todas las salidas que indican errores serán igual a 0, o sea, DNL, INL,

número de monotónicos y cantidad de código perdido. Además, el número de bits será

igual a 11, debido a que para la creación del vector que contiene la rampa real sólo se

cogen la mitad de los niveles de la rampa generada. Esto se debe a que los niveles de las

4096 muestras a la salida del convertidor son iguales dos a dos (y sólo se contabilizan

los cambios de amplitud), por tanto, el vector real se formará a partir de los 2048 niveles

de la escalera, que haciendo su logaritmo en base 2 nos dará 11. Sin embargo, como el

valor que toma cada elemento del vector de la rampa real es la iteración por la que vaya

comprobando la muestra convertida (y son 4096 muestras), la pendiente de la recta a la

salida será dos, es decir, su eje vertical alcanzará hasta 4095 y su eje horizontal hasta

2047. La causa de que las muestras a la salida del convertidor tomen valores iguales dos

a dos es porque al estar deshabilitada la opción de retraso en el tiempo, sólo podremos

convertir la cuarta parte de la señal triangular, o sea, una rampa a la mitad del fondo de

escala del convertidor.

79

7) Utilización del servidor Web

Como ya comentamos en la introducción haremos uso de la red Internet no sólo para el

control remoto del analizador lógico, si no para poder utilizar desde fuera del

laboratorio la interfaz implementada. Lo primero que tendremos que hacer será activar

el web Server de LabVIEW. Lo hacemos tomando el punto Options del menú Tools,

habilitándole el servidor Web desde la pestaña web server configuration, introduciendo

ahí mismo el fichero *.html creado, como posteriormente se comenta. Una vez hecho

esto se puede acceder al panel virtual de dos maneras.

Para la primera de ellas la máquina cliente necesitará tener instalado LabVIEW. Así,

mediante la opción Connect to remote Panel del menú Operate introducimos la

dirección IP del servidor y el nombre del instrumento virtual que queremos

implementar. Para poder controlar este instrumento remotamente deberemos habilitar la

opción Request Control VI y desde la máquina servidor se podrá monitorizar la

dirección IP que ahora controla el instrumento.

La otra manera no necesita tener instalado LabVIEW en la máquina cliente. De este

modo, se presenta el instrumento virtual con un formato *.jpg, lo que significa que sólo

se podrá visualizar pero nunca controlar. Esto sólo interesaría en algunos casos, pero no

en todos. En cambio, la primera manera de acceder desde una máquina servidor tiene el

inconveniente de que es necesario tener instalado LabVIEW. Por tanto, buscaremos un

híbrido de las dos maneras comentadas.

80

Para ello generamos un archivo *.html que contenga una referencia al *.vi que se quiere

controlar. Lo primero que hacemos entonces es instalar en el navegador cliente (ya sea

Explorer, Netscape o alguno para Linux) un plug-in que descargamos desde la página de

National Instruments, a la que se puede acceder directamente desde el fichero *.html

creado. Las opciones de construcción del archivo *.html pueden ser modificadas con la

opción Web Publishing Tool del menú Tools. Una vez hecho esto se accederá al

instrumento colocando en la barra de direcciones http ://nombre del PC/Nombre del

archivo.html y accederemos a la interfaz creada.

Con esto, hemos conseguido cumplir todos nuestros objetivos, es decir, el control

remoto de equipos del laboratorio, la automatización de medidas para convertidores

analógico digitales (comprobando que los resultados son similares a los obtenidos

localmente) y el acceso a éstas desde cualquier punto conectado a Internet. A

continuación se muestra el fichero *.html generado:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN"> <HTML> <HEAD> <TITLE>Title of Web Page</TITLE> </HEAD> <BODY > <H1>Title of Web Page</H1> Text that is going to be displayed before the VI panel image.<P> <TABLE BORDER = 1 BORDERCOLOR = #000000><TR><TD> <SCRIPT language="JavaScript"><!-- var lng; if (navigator.userLanguage) { lng = navigator.userLanguage; }; if (navigator.language) { lng = navigator.language.toLowerCase(); }; var obj = '<OBJECT ID="LabVIEWControl" CLASSID="CLSID:A40B0AD4-B50E-4E58-8A1D-8544233807AD" WIDTH=1018 HEIGHT=701 CODEBASE="ftp://ftp.ni.com/support/labview/runtime/windows/8.0'; if (lng.indexOf("fr") != -1) { obj = obj + '/French'; } else if (lng.indexOf("de") != -1) { obj = obj + '/German'; } else if (lng.indexOf("ja") != -1) { obj = obj + '/Japanese'; } obj = obj + '/LVRunTimeEng.exe">'; document.write(obj); // --></SCRIPT>

81

<PARAM name="LVFPPVINAME" value="ProyectoCAD.lvproj/My Computer/CADinterfaz.vi"> <PARAM name="REQCTRL" value=true> <EMBED SRC=".LV_FrontPanelProtocol.rpvi80" LVFPPVINAME="ProyectoCAD.lvproj/My Computer/CADinterfaz.vi" REQCTRL=true TYPE="application/x-labviewrpvi80" WIDTH=1018 HEIGHT=701 PLUGINSPAGE="http://digital.ni.com/express.nsf/express?openagent&code=exck2m&"></EMBED> </OBJECT> </TD></TR></TABLE> <P> Text that is going to be displayed after the VI panel image. </BODY> </HTML>

82

8) Manual básico para el manejo de la interfaz

El presente manual está orientado a la implementación de la interfaz con el convertidor

AD9235 de Analog Devices, que es el que se a utilizado a lo largo de todo el desarrollo

y verificación de la interfaz. Si bien el manejo de una placa de evaluación de un

convertidor puede variar sensiblemente respecto al de la otra, esto sólo afectará al

primer punto de este manual, Montaje físico en el laboratorio, ya que uno de los

objetivos fundamentales de este interfaz es la prestación de una alta flexibilidad, que

permita su uso para la evaluación y caracterización de múltiples convertidores analógico

digitales. Así, una vez puestas en su lugar correcto, siguiendo las instrucciones de los

respectivos data-sheet, las alimentaciones y las señales de entrada y de reloj, así como

los pines digitales de salida junto con sus señales de reloj al analizador lógico, el resto

de puntos serán comunes para todos los convertidores.

8.1.Montaje físico en el laboratorio

8.1.1. Alimentación de la placa de evaluación

Lo primero que habrá que hacer, según nos aconseja el fabricante del convertidor, es

alimentar la placa de evaluación. Como ya mencionamos en el punto 2.1, esta placa

puede alimentarse en un rango de 2,7 a 3,6 V, por lo que consideramos un buen valor el

3V para alimentar todo el circuito.

83

La placa del AD9235 dispone de cuatro fuentes de alimentación distintas, tal como se

ilustra en la siguiente figura. Estas son la alimentación de la parte analógica de la placa

de evaluación, la alimentación de su parte digital, la alimentación de la parte analógica

del dispositivo bajo prueba (el convertidor) y la alimentación de su parte digital. Las

alimentaciones de ambas partes digitales tendrán en común una misma toma de tierra, y

lo mismo ocurrirá con las dos correspondientes a la parte analógica.

Fig.8.1. Alimentación de la placa de evaluación

Al emplear una alimentación de 3 V para todo el circuito, como hemos dicho,

podríamos haber cableado las cuatro tomas de alimentación para conectarlas a una

misma fuente con su tierra conectada a una tierra común que cablease a las dos

anteriores. Sin embargo, con la intención de desacoplar los circuitos digitales y

analógicos, desde nuestra fuente de alimentación sacaremos dos sondas distintas, una de

la salida que puede dar hasta 6 V y, la otra, de la salida que alcanza los 25 V. Por tanto,

ambos rangos son más que suficientes para nuestro circuito.

De este modo una de las salidas de la fuente irá al cable de color naranja que une las

alimentaciones analógicas y la otra al otro cable naranja que une las digitales. Ambas

tierras serán independientes y cada una de ellas irá a una de las salidas de tierra de la

fuente de alimentación.

84

8.1.2. Conexión de las señales de entrada

Como dijimos en el punto 2.1, la placa de evaluación dispone de tres entradas BNC

para que se conecte en una de ellas la señal que queremos convertir. La conectaremos

desde el canal 1 del generador de onda hasta la entrada XFMR, es decir, la entrada que

pasa por el transformador y que convierte a la señal analógica en una señal diferencial a

la entrada del convertidor. Esto lo hacemos así porque las otras dos posibilidades de

entrada, SINGLE y AMP, no tienen trazadas las pistas hasta el convertidor.

Entre las dos elecciones posibles para conectar la señal de reloj (desde el canal 2 de

nuestro generador de onda) nos hemos decantado por CLOCK sobre AUX CLK para

realizar nuestros experimentos, aunque del mismo modo se podrían haber realizado con

esa segunda entrada.

Por último, comentar que tanto las dos salidas del generador de onda como las cinco

entradas de nuestra placa de evaluación tendrán una impedancia de 50 ohmios, por lo

que estarán acopladas entre ellas. Los dos cables, junto con los correspondientes

adaptadores que habremos de colocar en las entradas de la placa, nos lo suministra el

fabricante del convertidor, Analog Devices, y serán tal y como se ilustra en la siguiente

figura:

85

Fig.8.2. Cables y conectores BNC

8.1.3. Conexión de los pines de salida

Lo primero que habrá que tener en cuenta para conectar los pines de la placa de

evaluación al analizador lógico será la errata que aparece en su data sheet en la que el

orden de los bits del más al menos significativo está representado al revés de cómo

realmente es. Por tanto los 12 bits del convertidor podrán ser leídos en su

correspondiente pin de salida tal y como se muestra en la tabla siguiente. La figura 8.3.

aclara la errata comentada.

Pin 7 9 11 13 15 17 19 21 23 25 27 29

Bit D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

Tabla 8.1. Correspondencia de bits de datos con pines de salida

86

Fig.8.3. Pines de salida de la placa de evaluación

Por tanto, el bit más significativo se corresponderá con el cuarto pin y el menos

significativo con el decimoquinto, ya que los pines de datos se contabilizan con

números impares y los pares se reservan para cada una de sus tomas de tierra. Así, la

fila de abajo de pines será de datos y la de arriba será de tierra.

Por otro lado, como ya hemos dicho, el analizador lógico TLA 5202 dispone de 68

entradas digitales. 64 de ellas serán de datos, agrupándose en cuatro grupos de 16 para

los que cada uno habrá una entrada de reloj, sumando así las 68. Cada uno de estos

grupos se dividirá en dos canales de 8 bits y, tanto para cada canal como para cada reloj

habrá un cable adicional que se conectará a la tierra.

En nuestro caso utilizamos el grupo que forman los canales A2 y A3. Para los ocho bits

menos significativos de la señal muestreada utilizamos el canal A2 y los cuatro más

significativos con los cuatro menos significativos de A3. Teniendo en cuenta que cada

uno de los bits se corresponde con el color que indique la siguiente tabla:

87

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Tabla 8.2. Correspondencia de bits y colores

La conexión final para evaluar el convertidor AD9235 con el analizador TLA 5202 será:

Pin 7 Pin 9 Pin 11 Pin 13 Pin 15 Pin 17

A3 A3 A3 A3 A2 A2

Pin 19 Pin 21 Pin 23 Pin 25 Pin 27 Pin 29

A2 A2 A2 A2 A2 A2

Tabla 8.3. Correspondencia de pines de la placa y del analizador

Además, habrá que tener en cuenta que cada uno de los canales tendrá un pin de tierra

que habrá que conectarse a cualquiera de los pines de la fila superior de la placa de

evaluación.

Por último, hay que decir dónde conectaremos la señal de reloj. Existen en el circuito

dos jumpers, JP3 y JP4, uno de los cuáles estará conectado para que la señal cuadrada

de reloj le llegue al convertidor y el otro quedará libre. Es indiferente cuál de los dos

conectemos, pues la única diferencia es que por uno de ellos pasa una señal de reloj y

por el otro la misma señal pero negada. En nuestro caso, decidimos dejar conectado JP4,

por lo que cualquiera de los dos pines que quedan libres de JP3 nos servirán para que

88

ahí conectemos la entrada de reloj del analizador lógico. También esta señal tendrá una

toma de tierra que conectaremos a cualquiera de los pines pares de salida de nuestra

placa de evaluación.

8.2. Puesta a punto de los equipos

Ésta será muy sencilla puesto que, una vez encendidos, sólo habrá que dejar puesto por

defecto, como ya dijimos, el reloj del analizador lógico en modo de funcionamiento

externo. Para ello sólo tenemos que abrir la ventana Setup del software que se abre

automáticamente cada vez que encendemos el analizador lógico. Una vez en esta

ventana elegimos la opción External dentro de la pestaña Clock.

Por otro lado, al generador de onda sólo habrá que conectarle el cable que nos

proporciona el fabricante y que se muestra en la figura 8.4. Éste se conecta entre el

puerto USB de nuestro ordenador y el puerto que indica PC en la parte trasera del

generador de onda, tal como se muestra en la figura 8.5.

Fig.8.4. Cable USB del generador de onda

89

Fig.8.5. Vista trasera del generador de onda

Una vez conectado, el generador de onda pasará automáticamente de modo local a

modo remoto y el caso contrario ocurrirá cuando se desconecte. Si se quiere cambiar de

modo de trabajo sin necesidad de desconectar el cable tan sólo habrá que pulsar el botón

Sys y elegir la opción To Local o bien To Remote.

8.3. Empleo de la interfaz para la automatización de medidas

En principio el usuario tan sólo debe acceder al panel frontal del instrumento virtual

CADinterfaz.vi, por lo que lo único que deberá de hacer será, una vez abierto LabVIEW,

con la opción Open Proyect de Proyect elegir el proyecto almacenado

ProyectoCAD.lvproj. Hecho esto se abrirá una ventana que nos mostrará todos los

instrumentos virtuales que componen el proyecto. Abrimos entonces CADinterfaz.vi,

por ser éste el bloque principal de la jerarquía y de este modo ya estaremos delante de

90

su panel frontal para parametrizar y caracterizar a nuestro convertidor. Una vez escritos

los parámetros sólo tendremos que pulsar la tecla Run para ejecutar el programa.

Hay que decir que los siguientes apartados se complementan con la ayuda

proporcionada por LabVIEW. De este modo, eligiendo la opción Help>Show Context

Help con sólo colocar el ratón sobre cualquiera de los controladores o indicadores

aparecerá una ventana que hace una descripción detallada de ellos. Lo mismo se ha

hecho para el resto de paneles frontales de todos los subVIs del proyecto, así como una

descripción general de los propios instrumentos virtuales cuando se coloca el ratón en el

diagrama de bloques en el que está contenido. Las funciones de librería son, en este

caso, descritas por el fabricante.

8.3.1. Guía de los controladores e indicadores de la interfaz

Controladores:

Permite la opción de elegir entre un análisis estático o bien uno dinámico.

Permite la opción de realizar una gráfica que represente el rango dinámico

del convertidor, esto es, la SNDR en función de la potencia de entrada. Por defecto se

encuentra deshabilitado y sólo se ejecutará cuando su valor sea igual a true y, además,

hayamos elegido previamente la opción de análisis dinámico.

91

Es el número de puntos que calculamos para la gráfica del rango

dinámico. Una gráfica de 15 puntos puede hacer que el programa tarde en ejecutarse

unos diez minutos.

Número de bits de nuestro convertidor. Con el programa tal como está

diseñado se pueden evaluar convertidores de hasta 16 bits, si bien es fácilmente

ampliable hasta los 32.

Frecuencia de muestreo dada en Hertzios. Su límite superior será de 35

Hz, a no ser que la placa de evaluación reciba directamente un reloj con forma

cuadrada. En ese caso el valor máximo, dado por el generador AM 300, será de 50

MHz.

Frecuencia de la señal senoidal en Hertzios. Debido a su forma de onda,

su valor máximo será de 35 MHz, si bien, debido al teorema de Nyquist, nunca podrá

valer más de la mitad de la frecuencia de muestreo.

Frecuencia dada en Hertzios a partir de la cuál no se tendrán en cuenta

los armónicos ni tampoco la potencia de ruido a la salida del convertidor.

92

Frecuencia dada en Hertzios a partir de la cuál se tendrán en cuenta los

armónicos y la potencia de ruido.

Número de puntos de la FFT que se tendrán en cuenta alrededor de la

frecuencia central para el cálculo de la potencia de la señal y de los armónicos.

Fondo de escala del convertidor. Éste es el máximo valor, dado en Vpp,

que puede haber a la entrada del convertidor.

Amplitud de la señal de entrada en valores de Vpp. Por tanto, su valor no

deberá ser mayor al del fondo de escala del convertidor para que éste no sature.

Indicadores:

a) Salidas referentes al análisis dinámico:

La caracterización estática devuelve los siguientes valores, los tres primeros dados en

decibelios:

- Relación de señal a ruido (SNR):

SNR= )..log(10RuidoPotSeñalPot

-Relación de señal a ruido y distorsión (SNDR):

SNDR= )cos..

.log(10ArmóniPotRuidoPot

SeñalPot+

-Distorsión total armónica (THD):

93

THD= )..

.log(10DistorsiónPotSeñalPot

DistorsiónPot+

-Número efectivo de bits (ENOB):

ENOB=02,6

76,1−SNDR

Por otro lado, los valores de potencia nos devolverán los resultados indicados en

decibelios y normalizados frente a la potencia de la señal a la salida del convertidor, por

lo que el valor de esta última siempre valdrá 0 dB.

Por último, tenemos tres gráficas:

- Espectro: representa la densidad espectral de frecuencia de la señal a la

salida del convertidor. Su amplitud viene dada en decibelios y su eje x en

hertzios, siendo su valor máximo la mitad de la frecuencia de muestreo.

- Waveform Graph: representa la señal a la salida del convertidor en función

del tiempo. Su amplitud viene dada en número de niveles que utiliza el CAD

para su representación. Por ejemplo, poniendo a la entrada una señal con

amplitud igual al fondo de escala del convertidor (de 12 bits), la señal a la

salida de éste oscilará entre 0 y 4095.

- XY Graph: representa la gráfica del rango dinámico. En el eje y se

representan los distintos valores de SNDR, cada uno para una distinta

potencia de entrada que oscilará entre algo menos de la potencia mínima que

el convertidor puede distinguir a la entrada (o bien del mínimo que puede dar

el generador, o sea, 1mV) y la potencia de la señal cuya amplitud es igual al

94

fondo de escala del convertidor. Estas potencias se representarán en dB y

estarán normalizadas respecto a la potencia máxima, por lo que el valor

máximo siempre será igual a 0 dB. El número de señales intermedias vendrá

dado por el número de iteraciones que hayamos elegido y estarán

equiespaciadas entre ellas en escala logarítmica.

b) Salidas referentes al análisis estático:

La caracterización estática nos devolverá los siguientes valores:

- DNLmax: es el valor del máximo, en términos absolutos, de todos los DNL

calculados. El DNL de cada nivel (escalón) que es capaz de distinguir el

convertidor se define como:

LSBLSBivrealivrealiDNL −−+

=)()1()(

donde vreal es el vector que contiene la amplitud de cada escalón que se

origina de convertir la rampa y LSB se define como:

1

)1()(−−

=i

vrealivrealLSB

es decir, calculamos la diferencia entre el nivel más alto y el nivel más bajo y

lo dividimos por el número de niveles. De este modo calculamos la amplitud

media de un escalón. Por tanto, DNL calcula el error que hay entre dos

escalones reales, sabiendo que si la diferencia entre ambos es de un LSB el

error será nulo.

- INLmax: es el valor del máximo, en términos absolutos, de todos los INL

calculados. El INL se define, para cada escalón, como:

LSBividealivrealiINL )()()( −

=

95

donde videal es un vector que contiene los valores que, sin ningún tipo de

fallo debiera tener la escalera, es decir, un elemento de videal valdrá lo

mismo que el anterior pero sumándole LSB. Por tanto, INL nos indicará el

error que se comete con el valor real respecto al ideal.

- Resolución: es el número efectivo de bits que utiliza el convertidor en

función de su análisis estático, es decir, será igual a )1(log2 +n , siendo n el

número cambios de nivel en la escalera, o sea, sumándole uno obtenemos el

número de niveles del convertidor.

- monotonic: indica el número de veces que el valor de una de las muestras es

superior al de la siguiente.

- missingcode: variable en la que se va almacenando la suma de los errores

cometidos. Así, para cada nivel se sumará su valor restándole a éste el del

anterior y la unidad, de modo que sino no hubiese ningún fallo no se sumaría

nada a la variable.

Además, se visualizarán, en esta interfaz, hasta cuatro gráficas referidas al análisis

estático del convertidor:

- Rampa ideal: representa la rampa que debiera aparecer a la salida del

convertidor si éste no tuviera errores estáticos, es decir, se trata de una

escalera cuya diferencia entre niveles es siempre igual al valor de LSB,

96

partiendo de que se le asigna, a su primer nivel, el mismo valor que el de la

rampa real.

- Rampa real: representa la rampa que se ve a la salida del convertidor. Tendrá

tantos puntos en su eje horizontal como niveles pueda distinguir el

convertidor y se construirá con todos aquellos niveles que no provoquen

monotónicos, es decir, que no tengan un valor superior al del escalón

posterior. Por tanto, en condiciones normales, el número de niveles

representados tanto por la real como por la ideal (que se construye con el

mismo número de elementos) será del orden de bitsn ª2 .

- DNL e INL: representan el valor de DNL (o INL) para cada muestra tomada.

Ésta gráfica será muy útil para distinguir en qué muestra se produjo el error

máximo y también para saber si este error es un caso aislado (o sea, un DNL

(o INL) mucho mayor que los demás) o bien existen muchas muestras que

fallan también.

8.3.2. Guía de los elementos del panel frontal y del diagrama de bloques

Panel frontal:

Habrá que tener en cuenta que para poder utilizar cualquiera de estos controladores o

indicadores tan sólo tendremos que pinchar el panel frontal con el segundo botón del

97

ratón y así aparecerá la paleta Controls. El resto será seguir el camino que se indica en

la segunda columna de la siguiente tabla:

Control/Indicador: Modo de acceso: Ocurrencias en el

proyecto:

Numeric> Numeric Control

CADInterfaz.vi AM300.vi TLA_5202.vi dinamica.vi RangoDinamico.vi estatico.vi

Numeric> Numeric Indicator

CADInterfaz.vi

Boolean> Push Button

CADInterfaz.vii TLA_5202.vi RangoDinamico.vi

Boolean> Horizontal Toggle Switch

CADInterfaz.vi

Boolean> Vertical Slide Switch

RangoDinamico.vi

String&Path> String Control

AM300.vi TLA_5202.vi RangoDinamico.vi

String&Path> String Indicador

AM300.vi TLA_5202.vi

Array,Matrix&Cluster>RealMatrix.ctl

TLA_5202.vi dinamica.vi RangoDinamico.vi estatico.vi

Graph> Waveform Graph

CADInterfaz.vi dinamica.vi estatico.vi

98

Graph> XY Graph

CADInterfaz.vi RangoDinamico.vi

Numeric> Vertical Progress Bar

RangoDinamico.vi

Refnum> Ocurrence Refnum

AM300.vi TLA_5202.vi dinamica.vi RangoDinamico.vi

Tabla 8.4. Indicadores y controladores utilizados

Diagrama de bloques:

Habrá que tener en cuenta que para poder utilizar cualquiera de estas funciones tan sólo

tendremos que pinchar el diagrama de bloques con el segundo botón del ratón y así

aparecerá la paleta Functions. El resto será seguir el camino que se indica en la segunda

columna de la siguiente tabla. En la tercera, además, se indica la página de la memoria

en la que se describe cada función.

99

Función: Modo de acceso: Ocurrencias en el proyecto:

Structures> For Loop

RangoDinamico.vi (pag.60)

Structures> While Loop

TLA_5202.vi (pag.31)

Structures> Case Structure

CADInterfaz.vi RangoDinamico.vi (pag.46)

Array> Array Size

dinamica.vi RangoDinamico.vi estatico.vi (pag.52)

Array> Index Array

CADInterfaz.vi TLA_5202.vi dinamica.vi RangoDinamico.vi estatico.vi (pag.32)

Array> Array to Cluster

CADInterfaz.vi RangoDinamico.vi (pag.57)

Array> Cluster to Array

CADInterfaz.vi dinamica.vi estatico.vi (pag.48)

Array> Array to Matrix

CADInterfaz.vi TLA_5202.vi dinamica.vi RangoDinamico.vi estatico.vi (pag.33)

Array> Matrix to Array

CADInterfaz.vi dinamica.vi RangoDinamico.vi (pag.52)

Cluster&Variant> Unbundle

dinamica.vi RangoDinamico.vi (pag.51)

Cluster&Variant> Bundle

CADInterfaz.vi dinamica.vi estatico.vi (pag.48)

Numeric> Add

TLA_5202.vi

Numeric> RangoDinamico.vi

100

Subtract Numeric>

Multiply CADInterfaz.vi TLA_5202.vi dinamica.vi RangoDinamico.vi estatico.vi

Numeric> Divide

CADInterfaz.vi RangoDinamico.vi estatico.vi

Numeric> Increment

RangoDinamico.vi

Numeric> Decrement

RangoDinamico.vi

Numeric> Scale By Power Of 2

RangoDinamico.vi estatico.vi (pag.63)

Numeric> Reciprocal

CADInterfaz.vi

Numeric> Numeric Constant

CADInterfaz.vi TLA_5202.vi dinamica.vi RangoDinamico.vi estatico.vi

Numeric> Conversion> To Double Precision Float

dinamica.vi RangoDinamico.vi estatico.vi (pag.52)

Boolean> True Constant

AM300.vi

Timing> Wait(ms)

TLA_5202.vi (pag.31)

Waveform> Analog to Digital

estatico.vi (pag.72)

Waveform> Analog Waveform> Waveform Generation> Triangle Waveform

estatico.vi (pag.74)

Signal Processing> Waveform Measurements> FFT Power Spectral Density

dinamica.vi RangoDinamico.vi (pag.51)

Synchronization> Occurrences> Generate Ocurrence

AM300.vi dinamica.vi (pag.40)

Synchronization> Occurrences> Set Ocurrence

TLA_5202.vi RangoDinamico.vi (pag.32)

Mathematics> Elementary&Special Functions>

dinamica.vi RangoDinamico.vi (pag.64)

101

Exponential> Power Of 10

Mathematics> Elementary&Special Functions> Exponential> Logarithm Base 10

RangoDinamico.vi (pag.52)

Mathematics> Scripts&Formulas> MathScript Node

dinamica.vi RangoDinamico.vi estatico.vi (pag.53)

Dialog&User Interface> Simple Error Handler

AM300.vi TLA_5202.vi (pag.31)

Signal Manipulation Palette> To DDT

CADInterfaz.vi RangoDinamico.vi (pag.48)

No figura en la paleta de funciones. Aparece cuando en el panel frontal se coloca una gráfica XY.

RangoDinamico.vi (pag.67)

Tabla 8.5. Funciones utilizadas

Además de las funciones empleadas, hay que decir que mediante la paleta de funciones

también accedemos a los instrumentos virtuales de los drivers (Instrument

I/O>Instrument Drivers>R&S AM300 Dual Arbitrary Generador o bien Tektronix TLA

Series) y también a los subVIs desarrollados específicamente para este proyecto (Select

a VI).

102

9) Bibliografía

- CMOS data converters for communications

Mikael Gustavsson, J. Jacob Wikner and Nianxiong Nick Tan

Kluwer Academic Publishers, cop. 2000

- Programación gráfica para el control de instrumentos

Antonio Manuel Lázaro

Paraninfo, 2001

- Labview User Manual

National Instruments Corporation, 2003

- G Programming Reference Manual

National Instruments Corporation, 2003

- Labview Data Acquisition Basics Manual

National Instruments Corporation, 2003

- Function and VI Reference Manual

National Instruments Corporation, 2003

Enlaces Web:

www.tek.com

www.analog.com

www.ni.com

www.microsoft.com

www.rsd.com