Automatización de medidas de un convertidor...
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.
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
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
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.
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.
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.
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.
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