scieee AI-readable full text Open interactive document viewer

Desarrollo de herramientas para el control remoto de una fuente de alimentación mediante Python

López Morilla, Diego

Abstract

En este proyecto se analiza el control remoto de la instrumentación haciendo uso del estándar VISA (Virtual Instrument Software Architecture). Se han escrito una serie de programas en lenguaje Python para realizar el control remoto de una fuente de alimentación HP 6622A disponible en el Laboratorio de adiocomunicación haciendo uso de un bus ampliamente conocido en la industria de la adquisición de datos, GPIB. Para finalizar, se han realizado unas pruebas experimentales con dicho equipo empleando los códigos desarrollados y se han analizado posteriormente los resultados obtenidos.

Full text

Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Desarrollo de herramientas para el control remoto de una fuente de alimentación mediante Python Autor: Diego López Morilla Tutores: MªJosé Madero Ayora y Juan Antonio Becerra González Dpto. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Desarrollo de herramientas para el control remoto de una fuente de alimentación mediante Python Autor: Diego López Morilla Tutores: MªJosé Madero Ayora Profesor Titular Juan Antonio Becerra González Profesor Sustituto Interino Dpto. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2018 Trabajo Fin de Grado: Desarrollo de herramientas para el control remoto de una fuente de alimentación mediante Python Autor: Diego López Morilla Tutores: MªJosé Madero Ayora y Juan Antonio Becerra González El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha: A mi familia A mis amigos Agradecimientos Este Trabajo Fin de Grado cierra una de las etapas más importantes e influyentes de mi vida, por eso me gustaría agradecer en primer lugar, a toda mi familia por haberme hecho llegar hasta aquí, ya que sin su apoyo incondicional y su confianza en mí, no estaría escribiendo estas líneas ahora mismo. Por otro lado, agradecer también a mis compañeros y amigos que me han acompañado en estos cuatro años de carrera, ya que ha sido un honor compartir este periodo con ellos, tanto los buenos momentos como los malos. Por último, agradecer a los maestros que han sabido transmitirme sus conocimientos y han intentado dar lo mejor de sí mismos para formarme como ingeniero. Sin más que añadir, me reitero en agradecer a todas estas personas lo que me han aportado durante estos años ya que todos y cada uno de ellos han contribuido en mi aprendizaje. Diego López Morilla Sevilla, 2018 III XÍndice Abreviado 6.7 Entrada/salida 57 6.8 POO: Programación Orientada a Objetos 58 6.9 Módulos y paquetes 59 6.10 Gráficas en Python 60 6.11 PyVISA 64 7 Códigos desarrollados 67 7.1 Apertura de conexión 67 7.2 Comandos y queries 69 7.3 Tensión 71 7.4 Corriente 74 8 Pruebas experimentales 81 8.1 Prueba 1: Búsqueda del punto de polarización de un amplificador 82 8.2 Prueba 2: Barrido de tensión 86 8.3 Prueba 3: Monitoreo en tiempo real 90 9 Conclusiones y líneas futuras de trabajo 97 Apéndice A Datos exportados de la prueba 2 99 Apéndice B Datasheet del amplificador CGH40010 105 Apéndice C Datasheet del transistor EPB018A5-70 121 Apéndice D Datasheet del amplificador MAX2430 125 Índice de Figuras 137 Índice de Tablas 139 Índice de Códigos 141 Bibliografía 143 Índice Resumen V Abstract VII Índice Abreviado IX 1 Introducción 1 1.1 Objetivos y alcance 1 1.2 Organización y estructura de la memoria 2 2 Instrumentación Virtual 3 2.1 Evolución de la instrumentación 4 2.1.1 Principales ventajas de la automatización de medidas 4 2.2 Estándar VISA 5 2.2.1 Interfaces para el control de la instrumentación 6 3 Otros buses para el control remoto de instrumentos 7 3.1 USB: Universal Serial Bus 8 3.1.1 Estándares USB 8 3.1.2 Conectores 9 3.2 LXI: LAN eXtensions for Instrumentation 10 3.2.1 Características principales 10 3.3 RS-232C: Recommended Standard 232 11 3.3.1 Conectores 11 3.4 PCI Express: Peripheral Component Interconnect Express 13 3.4.1 Conexiones 13 3.4.2 Versiones 14 3.5 PXI: PCI eXtensions for Instrumentation 14 3.5.1 PXI Hardware 15 3.5.2 PXI Software 16 3.6 FireWire 16 3.6.1 Versiones del estándar 16 3.6.2 Conectores 16 4 GPIB: General Purpose Interface Bus 19 4.1 Estándares 19 4.2 Descripción general 20 4.2.1 Limitaciones principales de GPIB 20 4.3 Características eléctricas 22 4.4 Características funcionales 22 4.4.1 Protocolo de transferencia del bus GPIB 23 Líneas de datos 23 Líneas de control de transferencia (Handshake) 24 XI XII Índice Líneas de control general 25 Señales de masa 25 4.4.2 Direccionamiento e identificación 25 4.4.3 Funciones básicas 26 4.5 Comandos 27 Comandos Talk/Listen 28 Comandos Universales (UGC) 29 Comandos Addressed (ACG) 29 Comandos Comunes 30 4.5.1 Secuencias de control y protocolos de un controlador 30 Secuencias de control IEEE 488.2 31 Protocolos IEEE 488.2 31 4.5.2 Comandos SCPI 31 4.5.3 La norma 488.2 32 Protocolo básico 33 Protocolos de excepción 33 Reporte de estado 34 5 Equipo utilizado 37 5.1 Especificaciones 37 5.1.1 Rangos de salida 37 5.1.2 Precisión 38 5.1.3 Rizado y ruido 38 5.1.4 Control remoto 38 GPIB 38 Sintaxis 38 Condiciones iniciales 41 Comandos de alimentación 41 5.2 Otros equipos 42 6 Python 45 6.1 Herramientas básicas 46 Modo interactivo 46 Anaconda Navigator 46 6.2 Palabras reservadas 48 6.3 Variables en Python 48 6.4 Tipos de datos 49 6.4.1 Números y operaciones aritméticas elementales 49 Enteros y decimales 49 Números complejos 49 Operaciones básicas 50 Cociente y resto de una división 50 Potencias y raíces 50 Otras funciones de interés 50 6.4.2 Cadenas 51 Longitud 51 Concatenar cadenas 51 Porciones de cadenas 51 Cadenas "f" 52 6.4.3 Booleanos 52 Operadores lógicos 52 Operadores relacionales 53 6.4.4 Secuencias 53 Tuplas 53 Listas 53 Índice XIII Range 54 Diccionarios 54 6.5 Estructuras de control 55 6.5.1 Condicionales 55 if... 55 if... else... 55 6.5.2 Iteraciones 55 for 55 while 56 6.6 Funciones 56 6.6.1 Variables 56 6.6.2 Parámetros 57 6.7 Entrada/salida 57 6.7.1 Entrada 57 6.7.2 Salida 57 6.7.3 Ficheros 57 6.8 POO: Programación Orientada a Objetos 58 6.8.1 Elementos principales 58 Clases 58 Propiedades 58 Métodos 58 Objetos 58 6.8.2 Herencia 58 6.9 Módulos y paquetes 59 6.9.1 Namespaces 59 6.9.2 Módulos de sistema 59 Módulo os 59 Módulo sys 60 Módulo subprocess 60 6.10 Gráficas en Python 60 6.10.1 Funciones principales 61 Crear figuras 61 Múltiples gráficas en una figura 61 Pintar gráfica 61 Otras funciones 61 Ejemplos de gráficas 62 6.11 PyVISA 64 6.11.1 Control remoto paso a paso 64 Creación del objeto correspondiente al instrumento 64 Establecimiento de los atributos del objeto 64 Escribir y leer valores 64 7 Códigos desarrollados 67 7.1 Apertura de conexión 67 7.2 Comandos y queries 69 7.3 Tensión 71 7.3.1 Manejo de niveles de tensión 71 7.3.2 Protección de sobretensión 73 7.4 Corriente 74 7.4.1 Manejo de niveles de corriente 74 7.4.2 Protección de sobrecorriente 76 7.4.3 Códigos orientados a las pruebas 78 8 Pruebas experimentales 81 XIV Índice 8.1 Prueba 1: Búsqueda del punto de polarización de un amplificador 82 8.2 Prueba 2: Barrido de tensión 86 8.3 Prueba 3: Monitoreo en tiempo real 90 9 Conclusiones y líneas futuras de trabajo 97 Apéndice A Datos exportados de la prueba 2 99 Apéndice B Datasheet del amplificador CGH40010 105 Apéndice C Datasheet del transistor EPB018A5-70 121 Apéndice D Datasheet del amplificador MAX2430 125 Índice de Figuras 137 Índice de Tablas 139 Índice de Códigos 141 Bibliografía 143 1 Introducción El valor de un acto reside más en el esfuerzo por llevarlo a cabo que en el resultado. Albert Einstein Ac tualmente, los sistemas de monitorización y control se llevan a cabo a través de instrumentación virtual ya que el avance tecnológico que se está experimentando es notable. Los sistemas basados en instrumentación virtual son empleados debido a su gran flexibilidad y capacidad de reconfiguración, así como su bajo coste y alto rendimiento. Siguiendo la línea de resaltar las ventajas de dicho sistema, cabe destacar el ahorro del tiempo respecto a la instrumentación tradicional. En este proyecto se elaborará en Python un programa que permita controlar la fuente de alimentación HP 6622A remotamente. La caracterización experimental de sistemas de radiocomunicación requiere el uso de equipamiento especializado de laboratorio que incluye generadores y analizadores vectoriales de señal. Con frecuencia, la realización de una medida conlleva la repetición de gran cantidad de configuraciones o la adquisición de grandes cantidades de datos, por lo que es habitual realizar dichas medidas de forma automatizada mediante el control remoto de los equipos de instrumentación. Por otro lado, además de automatizar dichos instrumentos, los DUT (Device Under Test) pueden necesitar una alimentación la cual puede variar de una medida a otra, por lo que también es realmente interesante monitorizar las fuentes de alimentación. La instrumentación actual de comunicaciones permite diversas opciones para su control remoto, entre las que destaca el uso del estándar VISA (Virtual Instrument Software Architecture). Por otro lado, Python es un lenguaje de programación interpretado, multiplataforma y de código abierto, que está ganando importancia en los últimos años. Python cuenta con muchos paquetes y módulos puestos a disposición de cualquier desarrollador para realizar distintas tareas, entre ellas el control remoto de instrumentación mediante VISA. 1.1 Objetivos y alcance En este proyecto, principalmente se llevará a cabo lo previamente expuesto. Mediante el control remoto se controlará una fuente de alimentación particularizando en un lenguaje concreto de programación, en este caso Python. Para lograrlo se desarrollarán funciones las cuales pondrán ser empleadas, por ejemplo, para establecer una tensión y una intensidad determinada, limitar intensidades, etc. Para ello, previamente se expondrá teóricamente todo el contenido necesario para la comprensión de lo que se va a realizar en el laboratorio. Se hará un breve repaso de los buses más empleados en la actualidad para la interconexión de instrumentos, haciendo especial énfasis en el bus GPIB, el cual será el que se utilizará en este trabajo. Por otro lado, también se hará un pequeño resumen de lo necesario acerca de Python, explicando también el módulo PyVISA, el cual será muy importante para la tarea que queremos realizar. Por último para demostrar la validez de todo lo previamente expuesto, se realizarán múltiples pruebas en el laboratorio como la caracterización la curva I-V de un transistor o la comprobación de la estabilización de la intensidad en un montaje al dejar la tensión constante. 1 2Capítulo 1. Introducción 1.2 Organización y estructura de la memoria El presente Trabajo Fin de Grado se desarrolla en gran medida en el Laboratorio de Radiocomunicación de la Universidad de Sevilla por lo que en éste se pueden diferenciar dos grandes partes. Por un lado la parte teórica, desde el Capítulo 2 hasta el Capítulo 6, en la que se hará una descripción de los conocimientos necesarios para abordar el tema a tratar y por otro la parte práctica que la componen el resto de Capítulos, desde el 7 al 8, en la que se expondrán los códigos y experimentos realizados en este trabajo. A partir del presente Capítulo 1 de Introducción, se encuentran los siguientes: •Capítulo 2: Instrumentación Virtual. Se presenta la instrumentación y su evolución desde la tradicional a la virtual. Se describe el estándar VISA, presentando su importancia para la instrumentación virtual al lector. •Capítulo 3: Otros buses para control remoto de instrumentos. Se introducen y se hace una breve descripción de los principales buses empleados en la actualidad para la realización de instrumentación virtual. En este capítulo no será explicado el bus empleado en este trabajo ya que se le dedicará un capítulo exclusivamente para poder realizar un análisis más detallado del mismo. •Capítulo 4: GPIB: General Purpose Interface Bus . En este capítulo se analizarán las características más relevantes del bus y se explicarán los comandos que se emplearán en la práctica. Además de ello, se realizará una descripción de la evolución de los estándares desde su aparición hasta el último estándar desarrollado. •Capítulo 5: Equipo utilizado. Será empleado para la presentación de los instrumentos usados en la parte práctica del proyecto. Se hará especial énfasis en la descripción del equipo principal de este proyecto, la fuente de alimentacion HP 6622A, la cual va a ser controlada remotamente. •Capítulo 6: Python. Servirá para introducir el lenguaje usado en la parte práctica, Python. Mediante este capítulo simplemente se pretende dar una visión general acerca de los aspectos básicos necesarios para entender los códigos desarrollados y no hacer una guía de programación. •Capítulo 7: Códigos desarrollados. En este capítulo se expondrán los códigos que se han redactado para realizar las pruebas experimentales. Estarán acompañados de una breve descripción para su correcta comprensión por parte del lector. •Capítulo 8: Pruebas experimentales. Se llevarán a cabo múltiples pruebas en las que se podrán a prueba el funcionamiento de los códigos previamente desarrollados. Mediante estas pruebas, se analizará el comportamiento de distintos dispositivos tales como transistores o amplificadores. •Capítulo 9: Conclusiones y líneas futuras de trabajo. Se exponen las conclusiones a las que se han llegado tras la elaboración de este trabajo y se proponen actividades a realizar en el futuro en base al mismo. 2 Instrumentación Virtual La potencia está en el Software. National Instruments La instrumentación virtual aparece a partir de la necesidad de emplear el ordenador personal como instrumento de medida de señales como por ejemplo: temperatura, velocidad, revoluciones, etc. Es decir, el PC recibe la información digitalizada procedente de un dispositivo externo, el cual realiza mediciones de fenómenos físicos y las convierte en señales de corriente o voltaje. Por otro lado, el ordenador no solo adquiere las medidas, sino que también realiza las tareas de procesamiento, análisis, almacenamiento, distribución y despliegue de los datos obtenidos. Esta es la base de los instrumentos virtuales, los cuales tienen sus funciones definidas por software, esto es lo que se conoce como instrumentación virtual. En este contexto destaca LabVIEW (Laboratory Virtual Instrument Engineering Workbench), el cual es el primer software utilizado para diseñar instrumentos en el ordenador empleando programación gráfica, esto es, que los programas no se escriben, sino que se dibujan, facilitando su comprensión. En resumen, el instrumento virtual además de adquirir la señal, implica la interfaz hombre-máquina, el estudio y el tratamiento de la señal. Para realizar esta tarea será necesario realizar un montaje como el de la Figura 2.1 en el que aparecen un controlador, generalmente un PC (Controller) en el cual habrá un software de control remoto ejecutándose, los instrumentos de medición necesarios (Instrument1,Instrument2, Instrument3) que deberán tener capacidad de control remoto y se comunicarán con el controlador mediante una interfaz de comunicación física (Communication Interface). Por último será necesario un dispositivo bajo prueba (DUT), el cual se comunicará con el controlador, en los casos que sea necesario, mediante otra interfaz (DUT Control Interface). Figura 2.1 Esquema de montaje para automatizar medidas. 3 4Capítulo 2. Instrumentación Virtual 2.1 Evolución de la instrumentación A partir de los últimos años, el uso de la tecnología está siendo uno de los factores mas decisivos para la mejora de los sistemas electrónicos basados en equipos de cómputo (estacionarios y móviles). Esto provoca el uso de nuevos sistemas de instrumentación a través del uso de nuevo hardware usando software cada vez mas novedoso y potente. La instrumentación virtual proporciona un nuevo enfoque a la instrumentación tradicional, añadiendo nuevos elementos y características mediante avances tecnológicos basados en innovaciones científicas. Históricamente, los sistemas de instrumentación tradicional se han basado en realizar mediciones individuales empleando sensores o transductores para obtener variables físicas y convertirlas en señales eléctricas para posteriormente, ser interpretadas y procesadas. Mediante esta metodología, para medir varias variables, serán necesarios diferentes aparatos físicos, los cuales pueden tener o no múltiples interfaces, dificultando la gestión de los datos obtenidos. Esta es una de las principales desventajas de la instrumentación tradicional, ya que no se tiene interacción con equipos de cómputo en tiempo real, al contrario que en la instrumentación virtual, en la cual se pueden automatizar las medidas. Figura 2.2 Instrumentación virtual vs. instrumentación tradicional. 2.1.1 Principales ventajas de la automatización de medidas La idea principal de la instrumentación virtual, como ya se ha nombrado, es sustituir y ampliar elementos hardware por otros software, empleando para ello un ordenador personal. Esto nos va a proporcionar infinidad de ventajas con respecto a la instrumentación tradicional, ya que existirá un avance continuo en cuanto a flexibilidad y escalabilidad de equipos e instrumentos de medición. Las principales ventajas de automatizar las medidas son: 1. Ahorro de tiempo Algunas de las pruebas realizadas requieren de medidas repetitivas, ya que es necesario realizarlas para un amplio rango de valores. Empleando software, se podrá hacer esta tarea más rápidamente, siendo innecesario configurar los instrumentos para cada medida, incluso sin ni siquiera estar presente físicamente. 2. Distancia de operación Tal y como se ha nombrado previamente, no es necesario estar presente físicamente para realizar una medida, y ésta es otra de las ventajas de la instrumentación virtual. Empleando esto inteligentemente, se llega a la conclusión de que se pueden realizar medidas del DUT en distintas cámaras, como por ejemplo anecoica o de temperatura, para ver cómo se comporta y hacer las medidas a distancia. 3. Mediciones repetibles El proceso realizado para elaborar las pruebas siempre será el mismo por lo que una vez desarrollado y depurado, se podrá repetir en infinidad de ocasiones, lo que deriva en una mayor fiabilidad en la prueba realizada y los resultados obtenidos. 4. Facilidad de expansión Si el usuario desea realizar la misma tarea en más de un DUT, puede llevarlo a cabo de una forma más sencilla. Por ejemplo, un osciloscopio de cuatro canales puede ayudar a manejar cuatro DUT. Si se necesita algún DUT adicional, se puede usar una unidad de conmutación automática. 2.2 Estándar VISA 5 2.2 Estándar VISA El estándar VISA (acrónimo de Virtual Instrument Software Architecture) es un API de alto nivel orientado al testeo y medida en la industria de la instrumentación virtual. Muchas de las empresas más reconocidas del sector implementan dicho estándar, como pueden ser Rohde & Schwarz, National Instruments, Keysight Technologies o Tektronix. Mediante VISA, se puede configurar, programar y solucionar problemas de sistemas de instrumentación que comprenden interfaces GPIB, VXI, PXI, serie, Ethernet y/o USB ya que proporciona la interfaz de programación entre el hardware y los entornos de desarrollo como LabVIEW, Python, Visual Studio, Lab- Windows/CVI o Matlab. Tal como se muestra en la Figura 2.3, VISA permite al desarrollador programar independientemente del bus que vaya a ser empleado, ya que usando la misma librería se puede establecer la comunicación con distintos buses. En resumen, VISA es un estándar de prueba y medida para permitir la comunicación entre un instrumento y una aplicación permitiendo a esta última acceder al instrumento sin necesidad de preocuparse de los detalles de la interfaz entrada/salida. Por lo tanto, para empezar a utilizar VISA, solo se tendrán que instalar las librerías VISA de algún proveedor y comenzar a llamar al archivo VISA DLL correspondiente. Un ejemplo de ello sería el caso en el que se usan comandos SCPI dentro de un lenguaje de programación y se comunica con un instrumento. Figura 2.3 Empleo de VISA con distintos buses para la misma aplicación. A continuación se expondrá una lista de las funciones VISA más importantes, las cuatro primeras hacen referencia a funciones de acceso y búsqueda y las cuatro últimas a funciones de entrada/salida. VISA Open Default RM: Abre un nuevo administrador de recursos para todas las conexiones VISA. VISA Find Resource / Find Next Resource: Encuentra un instrumento con unos criterios dados. VISA Open/Close: Abre/cierra la conexión remota con un instrumento. VISA Set/Get Attribute: Establece/lee un atributo. VISA Write: Escribe un comando a un instrumento. VISA Read: Lee la respuesta de un instrumento. VISA Clear: Limpia el buffer de entrada y salida. VISA Read STB: Lee el byte de estado de un instrumento. 12 Capítulo 3. Otros buses para el control remoto de instrumentos Figura 3.10 Pinout de los conectores DB. Como se puede observar en la Figura 3.10, se puede establecer una comunicación con tan solo 9 señales, prescindiendo del resto, incluso podría reducirse a 3 líneas solamente empleando los pines de RX, TX y GND ya que el resto son necesarios en caso de querer implementar un mejor sincronismo entre dispositivos. Para realizar esto, una práctica muy común es emplear transceptores para adaptar los niveles TTL de los microcontroladores a los empleados en RS232 como se indica en la figura Figura 3.11. Figura 3.11 Conexión ordenador-microcontrolador usando un transceptor. 3.4 PCI Express: Peripheral Component Interconnect Express 13 3.4 PCI Express: Peripheral Component Interconnect Express Se trata de un estándar de comunicación para ordenadores basado en el bus PCI, el cual se utiliza conectando directamente periféricos a la placa base. A diferencia de los buses ISA, PCI permite una configuración dinámica del periférico, es decir, en el tiempo de arranque las tarjetas PCI y el BIOS se comunican para negociar los recursos solicitados por la primera. Se trata de un estándar fundamental ya que es utilizado para la comunicación de las tarjetas gráficas y puede emplearse para otros tipos de tarjeta como pueden ser de red, de sonido o de expansión. La versión más empleada en la actualidad es la 3.0, una mejora sobre la PCI 1.0 original la cual cuadriplica su velocidad de transferencia hasta 8 GT/s. 3.4.1 Conexiones Las conexiones físicas de los puertos PCI-e pueden encontrarse hasta de cuatro tamaños distintos, como puede observarse en la Figura 3.12. Figura 3.12 Ejemplos de conectores para PCI Express. Figura 3.13 Conexiones físicas de los puertos PCI Express. 14 Capítulo 3. Otros buses para el control remoto de instrumentos Mientras más grande sea el puerto, más conexiones y pines de datos tendrá. Estas conexiones se conocen como carriles, los cuales cada uno de ellos tienen dos señalizaciones, una diseñada para transmitir y otra para recibir. Por lo tanto, cuantos mas carriles existan, mayor será la velocidad a la que se transmitan los datos. 3.4.2 Versiones Existen actualmente cuatro versiones y estamos a la espera de una quinta. En cada una de ellas la velocidad de transferencia por línea de datos ha sido mejorada. Simplificando mucho, tenemos unas velocidades de 250 MB/s en PCI 1.x, 500 MB/s en PCI 2.0, 1 GB/s en PCI 3.0 y 2 GB/s en PCI 4.0 por línea, todo esto se resume mejor en la Figura 3.14 y en la Tabla 3.3. Además, en la misma tabla, se pueden observar unas aproximaciones del número de transferencias por segundo al número de bits por segundo. Aparte del aumento de velocidad existen cambios tanto en la codificación usada, como en el control de errores, el cual ha sido mejorado también en cada una de las versiones. Figura 3.14 Evolución de PCI-e. Tabla 3.3 Velocidades de las versiones de PCI-e. Versión de PCI Express Código en línea Velocidad de transferencia Ancho de banda (por carril) 1.0 8b/10b 2,5 GT/s 2 Gb/s (250 MB/s) 2.0 8b/10b 5 GT/s 4 Gb/s (500 MB/s) 3.0 128b/130b 8 GT/s 7.9 Gb/s (984,6 MB/s) 4.0 128b/130b 16 GT/s 15.8 Gb/s (1969,2 MB/s) 3.5 PXI: PCI eXtensions for Instrumentation Se trata de una plataforma robusta para PC que ofrece una solución para sistemas de medición y automatización. PXI proporciona ventajas como el bajo coste, alto rendimiento y flexibilidad y los beneficios de un estándar abierto de la industria. PXI combina la tecnología de un PC estándar con el factor de forma de una especificación CompactPCI 2 . Existe un consorcio industrial que define los requisitos de hardware, electricidad, software, energía y refrigeración, lo que permite la interconectividad entre los dispositivos de diferentes fabricantes. 2 Se trata de un conjunto de especificaciones que se definen a la hora de construir sistemas de forma modular, a bajo coste y de manera escalable. Siguen el estándar 3U y 6U de Eurocard en cuanto a las medidas. 3.5 PXI: PCI eXtensions for Instrumentation 15 3.5.1 PXI Hardware •Chasis PXI El chasis PXI contiene un plano posterior de alto rendimiento que permite que las tarjetas en el sistema puedan comunicarse rápidamente entre sí. Como base de su sistema PXI que es, el chasis ofrece los buses de potencia, enfriamiento y comunicación de PCI y PCI Express para su controlador y sus módulos Figura 3.15 Chasis PXI. •Controlador del sistema El chasis PXI puede usar un controlador embebido de alto rendimiento con un SO Microsoft Windows o un SO en tiempo real (NI LabVIEW Real-Time) en el Slot 1 o un módulo que haga de interfaz para permitir la conexión a un controlador externo (como un PC). Esta última opción proporciona una opción muy rentable y poderosa. La elección del tipo de controlador PXI variará según la aplicación. Figura 3.16 Controlador embebido. •Módulos Existe una amplia gama en cuanto a módulos se refiere, incluyendo instrumentos de prueba que toman una amplia variedad de mediciones tales como voltaje, corriente, frecuencia, así como generadores de señales y formas de onda. También pueden realizar otras funciones, incluyendo adquisición de imágenes, fuentes de alimentación, conmutación y más. Figura 3.17 Módulos PXI. 16 Capítulo 3. Otros buses para el control remoto de instrumentos 3.5.2 PXI Software El estándar PXI depende de un entorno de software y hardware estandarizado. Como PXI se basa en el estándar PCI, muchas de las rutinas PCI se pueden aplicar al entorno PXI. Los módulos PXI no se pueden controlar desde un panel frontal físico, por lo tanto, se requiere el control del software a través del plano posterior. Los requisitos mínimos son Windows de 32 bits. Algunos proveedores también son compatibles con Linux u otros sistemas operativos. Los controladores IVI son opcionales, éstos son controladores de instrumentos sofisticados que presentan un mayor rendimiento y flexibilidad para aplicaciones de prueba más complejas que requieren intercambiabilidad, estado de almacenamiento en caché o simulación de instrumentos. 3.6 FireWire Es una tecnología de entrada/salida de datos en serie a muy alta velocidad y para el conexionado de dispositivos digitales tales como videocámaras o cámaras digitales a ordenadores. También conocido por el estándar que sigue, el IEEE 1394, es uno de los estándares más rapidos que existen por lo que es óptimo para transferencia de datos multimedia y otros dispositivos de alta velocidad como impresoras o discos duros. Con FireWire se pueden alcanzar velocidades de hasta 400 Mb/s manteniéndola de forma estable. Además posee una flexibilidad de conexión bastante buena y es capaz de soportar hasta 63 dispositivos simultáneamente, aceptando longitudes de cable de máximo 4.25 m. 3.6.1 Versiones del estándar •FireWire 400 (IEEE 1394) Puede transferir datos entre dispositivos a velocidades de datos semidúplex de 100, 200 o 400 Mb/s (las tasas de transferencia reales son 98.304, 196.608 y 393.216 Mb/s), conocidos como modos S100, S200 y S400 respectivamente. La longitud máxima de cable es 4.5 m aunque se pueden conectar en cadena hasta 16 cables con repetidores obteniendo un resultado de 72 m en total. •FireWire 800 (IEEE 1394b) Mejora la velocidad de transferencia hasta los 800 Mb/s (786.5 Mb/s reales) con tecnología full-dúplex usando un nuevo esquema de codificación llamado beta, el cual se basa en 8b/10b. Además se extiende la distancia máxima de cable hasta los 100 m. •FireWire s800T (IEEE 1394c) Proporciona mejoras técnicas las cuales permiten el uso de la interfaz con conectores RJ-45 con cables CAT 5. De esta manera se podían aprovechar las ventajas de Ethernet y FireWire simultáneamente, a pesar de ello, dejó de usarse. •FireWire s1600 y s3200 Permiten velocidades de 1.6 y 3.2 Gb/s (1.572864 Gb/s y 3.145728 Gb/s reales respectivamente) usando los mismos conectores de 9 pines que el FireWire 800. 3.6.2 Conectores •Cuatro contactos Es considerablemente más pequeño que el de seis, pero la ausencia de dos contactos elimina la posibilidad de alimentar el componente conectado. •Seis contactos Incluye salida de energía por lo que puede alimentar el dispositivo conectado sin la necesidad de usar una fuente de alimentación separada. •Nueve contactos Es retrocompatible con las tasas de menor velocidad y con conectores FireWire 400. A pesar de ello, requiere tomas de corriente diferentes. En la Figura 3.18 se pueden observar los conectores FireWire y en la Tabla 3.4 el patillaje. 3.6 FireWire 17 Figura 3.18 Conectores FireWire. Tabla 3.4 Patillaje de conectores FireWire según su número de contactos. Pin Señal 1 TPB- (4 y 9 pines); Alimentación (6 pines) 2 TPB+ (4 y 9 pines); Tierra (6 pines) 3 TPA- (4 y 9 pines); TPB- (6 pines) 4 TPA+ (4 y 9 pines); TPB+ (6 pines) 5 TPA- (6 pines); A-shield (9 pines) 6 TPA+ (6 pines); Tierra (9 pines) 7 Sin conexión 8 Alimentación (9 pines) 9 B-shield (9 pines) 4 GPIB: General Purpose Interface Bus El único error real es aquel del que no aprendemos nada. Henry Ford IEEE 488 es un estándar que define un bus de datos digital multimaestro de 8 bits paralelos para comunicaciones de corto alcance, desarrollado inicialmente por Hewlett-Packard en los años 70 como HP-IB (Hewlett-Packard Interface Bus). A pesar de que se creó a finales de la década de los 60 para conectar equipos de prueba automatizados, también tuvo éxito en la década de los 70 y 80 como un bus periférico para las primeras microcomputadoras, como la Commodore PET. Los estándares más recientes han reemplazado al inicial IEEE 488 para su uso en computadoras, aunque se sigue usando en equipos de prueba y medida. 4.1 Estándares En 1975, el IEEE estandarizó el bus como Standard Digital Interface for Programmable Instrumentation, IEEE 488, revisándose en 1978 y dando lugar a IEEE 488-1978. Posteriormente se revisó de nuevo en 1987, surgiendo el IEEE 488.1. En estos estándares se definió la parte mecánica, eléctrica y los parámetros básicos del protocolo de GPIB, sin especificar el formato de los datos y/o comandos. En 1987, el IEEE introdujo Standard Codes, Formats, Protocols, and Common Commands, mejor conocido como IEEE 488.2. En este estándar se proporcionó la sintaxis básica y el convenio de formato, los comandos independientes de los dispositivos, estructuras de datos, protocolos de error y similares. IEEE 488.2 se basa en IEEE 488.1 pero no lo sustituye. Como se ha explicado anteriormente, en IEEE 488.1 está definido el hardware y en IEEE 488.2 está definido el protocolo, sin embargo, los comandos no estaban estandarizados, por lo que diferían en instrumentos de la misma clase pero de distinto fabricante. Es por ello que HP desarrolló en 1989 su lenguaje TML, precursor de los comandos SCPI (Standard Commands for Programmable Instruments), los cuales fueron introducidos en 1990. SCPI agregó comandos genéricos estándar y una serie de comandos específicos para cada clase de instrumento. El IEC (International Electrotechnical Commission) desarrolló sus propios estándares en paralelo a los del IEEE, con IEC 60625-1 e IEC 60625-2 (IEC 625), más tarde reemplazado por IEC 60488. Por otro lado, National Instruments introdujo en el mercado una extensión compatible con IEEE 488.1, originalmente conocida como HS-488. En ella se aumentó la velocidad máxima a 8 MB/s, disminuyendo ésta conforme se conectan más dispositivos al bus, dando lugar al IEEE 488.1-2003. Finalmente, en 2004 el IEEE y el IEC combinaron sus respectivos estándares en: IEC 60488-1, Standard for Higher Performance Protocol for the Standard Digital Interface for Programmable Instrumentation - Part 1: General, el cual sustituye a IEEE 488.1 y a IEC 60625-1, y por otro lado, el IEC 60488-2,Part 2: Codes, Formats, Protocols and Common Commands, el cual sustituye a IEEE 488.2 y a IEC 60625-2. 19 20 Capítulo 4. GPIB: General Purpose Interface Bus Figura 4.1 Relación entre las normas IEEE 488.1, IEEE 488.2 y SCPI. 4.2 Descripción general El aspecto funcional de la norma incluye el uso de líneas específicas para enviar y recibir mensajes, el protocolo para la transmisión y recepción de esos mensajes, la lógica que utilizan y la temporización entre líneas. Además, se dispone de una serie de diez funciones de interconexión de propósitos específicos. El bus transfiere órdenes y datos entre los dispositivos conectados al mismo a través de 16 líneas, las cuales se dividen en tres grupos: • Bus de datos: Compuesto por 8 líneas (DIO1-DIO8) sobre las cuales los mensajes son transmitidos en forma de bytes consecutivos. • Control de transferencia de bytes: Es un conjunto de tres líneas (DAV, NRFD y NDAC) cuya función es asegurar la correcta transmisión de los datos entre los equipos. • Bus de control general de la interfaz: Constituido por 5 líneas (ATN, IFC, REN, SRQ y EOI) que se utilizan para enviar comandos entre los equipos relativos al modo de interpretar los datos transferidos o comandos básicos de manejo de la interfaz. 4.2.1 Limitaciones principales de GPIB Las características mecánicas, eléctricas y funcionales de la norma imponen ciertas restricciones las cuales hay que cumplir para conseguir el funcionamiento óptimo del bus. •Permite la interconexión de hasta 15 equipos, siendo uno de ellos el controlador del resto. •Al menos dos tercios de los equipos conectados al bus deben estar encendidos. • Los dispositivos conectados al bus pueden enviar y/o recibir información de cualquiera del resto de equipos. •La tasa de transferencia máxima que se puede alcanzar es de 8 MB/s. • La separación máxima entre dispositivos no debe ser mayor a 4 m, y la separación promedio en total de la red debe ser inferior a 2 m. •La red no debe exceder la longitud máxima de 20 m. •Se admite una configuración de la red en bus o en estrella, tal y como se muestra en la Figura 4.2. 4.2 Descripción general 21 (a) Topología en bus. (b) Topología en estrella. Figura 4.2 Formas de interconexión del bus GPIB. A pesar de que solo se pueden conectar 15 dispositivos directamente, cada uno de ellos puede tener elementos secundarios, los cuales poseerían una dirección secundaria que se obtiene combinando la dirección principal con otro grupo de 31 direcciones para formar un total de 961 direcciones secundarias. Por otro lado, es muy difícil obtener la velocidad máxima de transferencia, a no ser que se lleve a cabo un diseño muy cuidadoso de la red que tenga en cuenta los retardos digitales y los tiempos de establecimiento con cables de longitud mínima, cargas adecuadas y transceptores especiales. Los conectores empleados pueden ser de tipo americano (24 terminales) o europeo (25 terminales), hembras en los instrumentos y macho y hembra en los cables (apilables), como se puede ver en la Figura 4.3. (a) Conector GPIB americano. (b) Conector GPIB europeo. Figura 4.3 Tipos de conectores GPIB. 28 Capítulo 4. GPIB: General Purpose Interface Bus Tabla 4.2 Naturaleza de los comandos. b7 b6 b5 Tipo de comando 0 0 0 Addressed 0 0 1 Universal 0 1 X Listen 1 0 X Talk 1 0 X Secondary Cada equipo conectado al bus tiene una dirección exclusiva comprendida entre 0 y 30, establecida como ya se ha explicado anteriormente por hardware o por software. Esta dirección irá en los bits b4, b3, b2, b1 y b0 para referenciar al equipo. El código 0b11111, que corresponde con el 31, se emplea como dirección de difusión para referenciar a todos los equipos. Comandos Talk/Listen Con estos comandos, el controlador gestiona qué equipo actúa como talker o como listener. También se incluyen comandos que pasen a los equipos a modo idler. Tabla 4.3 Comandos Talk/Listen. Abreviatura Nombre completo Dato Descripción MTA My Talk Address 0b010ddddd Establece el modo talker en el equipo "ddddd" UNT Untalk 0b01011111 El equipo en el modo talker pasa a modo idler MLA My Listen Address 0b001ddddd Establece el modo listener en el equipo "ddddd" UNL Unlisten 0b00111111 Todos los equipos en modo listener pasan a modo idler Figura 4.9 Ejemplo de uso de comandos Talk/Listen enviando un dato. 4.5 Comandos 29 Para la finalización de los mensajes de datos existen tres métodos: •Método EOI: tras el envío del último dato, el talker establece la línea del bus EOI al valor true. •Método EOS: el último carácter enviado es uno establecido previamente. • Método de cuenta: el controlador no permite enviar más bytes al talker cuando se ha alcanzado el número de bytes preestablecido en la cabecera del mensaje estableciendo las líneas NRFD y NDAC al estado lógico true. Comandos Universales (UGC) Son un conjunto de comandos que son enviados por el controlador a todos los equipos. Tabla 4.4 Comandos Universales. Abreviatura Nombre completo Dato Descripción LLO Local Lockout 0b00010001 Se deshabilita el control mediante el panel frontal de los equipos DCL Device Clear 0b00010100 Inicializa las interfaces hardware y software de los equipos PPU Parallel Poll Unconfigure 0b00010101 Indica el final de una operación de sondeo en paralelo SPE Serial Poll Enable 0b00011000 Habilita a todos los equipos para que respondan al sondeo serie SPD Serial Poll Disable 0b00011001 Deshabilita el modo de sondeo serie Figura 4.10 Ejemplo de uso de comandos universal realizando serial poll. Comandos Addressed (ACG) Los únicos destinatarios de estos comandos son los equipos que previamente han sido configurados como listener, por lo tanto solo les afecta a ellos. Tabla 4.5 Comandos Addressed. Abreviatura Nombre completo Dato Descripción GTL Go To Local 0b00000001 Devuelve el control de los paneles frontales a los equipos SDC Selected Device Clear 0b00000100 Inicializa las interfaces hardware y software de los equipos listener PPC Parallel Poll Configure 0b00000101 Configura el inicio de una encuesta paralela quedando los equipos a la espera de un comando MSA MSA My Secondary Address 0b011xcbbb Establece la línea (bbb) y el estado (c=0 significa request=FALSE) con la que responden a una encuesta paralela los equipos listener GET Group Trigger 0b00001000 Dispara el trigger de los equipos en estado listener. Permite operaciones sincronizadas entre instrumentos TCT Take Control 0b00001001 Establece como controlador activo al equipo que está direccionado como listener 30 Capítulo 4. GPIB: General Purpose Interface Bus Figura 4.11 Ejemplo de uso de comandos addressed realizando parallel poll. Comandos Comunes Una innovación importante del estándar IEEE 488.2 fue la introducción de un conjunto estandarizado de comandos comunes para las muchas operaciones genéricas que todos los instrumentos deben realizar. El protocolo de intercambio de mensajes IEEE 488.2 es la base del estándar SCPI que hace que la programación del sistema de prueba sea aún más fácil. Los mnemónicos para estos comandos comunes comienzan con un asterisco ( * ) para diferenciarlos de los comandos específicos de cada dispositivo. Estos comandos se muestran en la Tabla 4.6. Tabla 4.6 Comandos Comunes. Mnemónico Nombre completo Función *IDN? Identification Query Identifica el tipo de instrumento y versión del software *RST Reset Command Sitúa al equipo en el estado básico de referencia *TST? Selft-Test Query Requiere el resultado del autotest del equipo *OPC Operation Complete Command Fija el bit de operación completa del registro estándar *OPC? Operation Complete Query Responde con 1 si se han ejecutado órdenes previas *WAI Wait-to-Continue Command Espera a que se realicen todas las operaciones pendientes *CLS Clear Status Command Despeja el registro de estado y los registros de incidencia *ESE Event Status Enable Command Habilita bits del registro de habilitación de incidencias *ESE? Event Status Enable Query Interroga al registro de habilitación de incidencias estándar *ESR? Event Status Enable Query Interroga al registro de incidencias estándar *SRE Service Request Enable Command Habilita los bits del registro de habilitación de Byte de estado *SRE? Service Request Enable Query Requiere el contenido del registro SER de habilitación del byte de estado *STB? Read Status Byte Query Requiere el estado del registro resumido del Byte de estado *LRN? Learn Device Setup Query Solicita el estado actual del equipo *OPT? Option Identification Query Requiere la opción instalada en el equipo *RCL Recall Command Restaura el estado del equipo del registro save/recall *SAV Save Command Almacena el estado actual en un registro save/recall *TRG Trigger Command Arranca o dispara la operación del equipo de forma remota 4.5.1 Secuencias de control y protocolos de un controlador A pesar de que IEEE 488.2 tuvo menos impacto en los controladores que en los instrumentos, existen varios requisitos y mejoras opcionales para los controladores que hacen que un controlador IEEE 488.2 sea un componente necesario de los sistemas de prueba. IEEE 488.2 define con precisión la forma en que los 4.5 Comandos 31 controladores envían comandos y datos y les agrega funcionalidad. Debido a estos requisitos del controlador IEEE 488.2, los fabricantes de instrumentos pueden diseñar instrumentos compatibles y eficientes. Los beneficios de esta estandarización para el desarrollador de sistemas de prueba son la reducción del tiempo y coste de desarrollo, ya que resuelve los problemas causados por las incompatibilidades de los instrumentos, las estructuras de comandos variables y los formatos de datos. Secuencias de control IEEE 488.2 El estándar IEEE 488.2 definió secuencias de control que especifican los mensajes exactos que se envían desde el controlador, así como el orden de múltiples mensajes. IEEE 488.2 definió 15 secuencias de control obligatorias y cuatro secuencias de control opcionales, como se muestra en la Tabla 4.7. Tabla 4.7 Secuencias de control obligatorias y opcionales de un controlador de la norma IEEE 488.2. Secuencia de control Carácter Descripción SEND COMMAND Obligatorio Envío de órdenes con ATN en nivel alto SEND SETUP Obligatorio Envío de dirección para enviar datos SEND DATA BYTES Obligatorio Envío de datos con ATN en nivel bajo SEND Obligatorio Envío de un mensaje del programa RECEIVE SETUP Obligatorio Envío de dirección para recibir datos RECEIVE RESPONSE MESSAGE Obligatorio Recepción de datos con ATN en nivel bajo RECEIVE Obligatorio Recepción de un mensaje DEVICE IFC Obligatorio Envío de señal de inicialización de instrumentos IFC DEVICE CLEAR Obligatorio Puesta en estado inicial de los dispositivos ENABLE LOCAL CONTROLS Obligatorio Puesta de los dispositivos en estado de control local ENABLE REMOTE Obligatorio Puesta de los dispositivos en estado de control remoto SET RWLS Obligatorio Puesta de los dispositivos en estado de control remoto e inhibición del control local SEND LLO Obligatorio Puesta de los dispositivos en estado de control local e inhibición del control remoto READ STATUS BYTE Obligatorio Lectura del octeto de estado de la norma IEEE 488.1 TRIGGER Obligatorio Envío de mensaje de inicio de ejecución de un grupo de acciones PASS CONTROL Opcional Paso del control a otro dispositivo PERFORM PARALLEL POLL Opcional Realización de un sondeo en paralelo PARALLEL POLL CONFIGURE Opcional Configuración o desinhibición de los dispositivos para realizar un sondeo en paralelo PARALLEL POLL UNCONFIGURE Opcional Inhibición de los dispositivos para realizar un sondeo en paralelo Protocolos IEEE 488.2 Los protocolos son rutinas de alto nivel que combinan varias secuencias de control para realizar operaciones comunes del sistema de prueba. IEEE 488.2 define dos protocolos obligatorios y seis protocolos opcionales, como se muestra en la Tabla 4.8. Tabla 4.8 Protocolos obligatorios y opcionales de un controlador de la norma IEEE 488.2. Palabra clave Carácter Función RESET Obligatorio Inicialización del sistema FINDRQS Opcional Identificación del dispositivo que solicita servicio ALL SPOLL Obligatorio Sondeo secuencial de todos los dispositivos PASS CTL Opcional Cesión del control REQUEST CTL Opcional Petición de control FINDLSTN Opcional Búsqueda de receptores SETADD Opcional (necesita FINDLSTN) Establecimiento de direcciones TESTSYS Opcional Autoverificación del sistema 4.5.2 Comandos SCPI SCPI (Standard Commands for Programmable Instruments) es un estándar que define un conjunto de mensajes que forman un lenguaje que permite la comunicación con instrumentos. SCPI es muy usado por la mayoría de instrumentos GPIB, sin embargo, también es muy usado en RS-232, Ethernet, PXI o VXI. La adoptación de este lenguaje por varios de los grandes fabricantes como HP o Agilent ha permitido cierta uniformidad en las comunicaciones entre dispositivos. 32 Capítulo 4. GPIB: General Purpose Interface Bus SCPI va mas allá de 488.2 y define un estándar de comandos de programación. Por ejemplo, para una función de medida determinada, SCPI define los comandos específicos que hay que emplear para acceder a ella a través de las interfaces LAN, GPIB o USB. Con SCPI se logran dos ventajas muy importantes: − Si se sabe utilizar unas funciones en un equipo SCPI, se sabrá controlar las mismas funciones en otro equipo SCPI distinto. −Un programa escrito para un instrumento SCPI, se adaptará fácilmente a otro SCPI. Los comandos SCPI no son más que cadenas ASCII que se envían al instrumento sobre la capa física, mediante esto, se pueden realizar operaciones o consultas (éstas últimas caracterizadas por el símbolo " ? ") El formato de los mensajes en su forma canónica es, aplicándolo a un ejemplo: "TRIGger <m>: LEVel <n> [: VALue] <Level>", teniendo en cuenta que: 1. Las partes entre corchete son opcionales. 2. La parte de las mayúsculas es obligatoria, al contrario que la de las minúsculas que es opcional. 3. Los comandos SCPI no distinguen entre mayúsculas y minúsculas. 4. Se pueden combinar comandos usando el punto y coma. Por ejemplo: TRIG1: SOUR CH1" y "TRIG1: LEV2 3.5" es igual que "TRIG1: SOUR CH1; LEV2 3.5" . Esto se debe a que la ruta del árbol de comandos no cambia dentro de una cadena a no ser que, tras el punto y coma, se introduzcan dos puntos ("TRIG1: SOUR CH1;: CHAN2: STATe ON"). 5. Los parámetros numéricos sin unidades se entenderán en unidades del Sistema Internacional (SI). 4.5.3 La norma 488.2 El estándar 488.2 define los modos de operación básicos de los equipos tales como el intercambio de mensajes entre el controlador y el instrumento, como por ejemplo, cuando están dispuestos a escuchar y hablar a otros equipos y qué ocurre cuando no se cumple el protocolo. El modelo de un equipo que cumple la norma 488.2 se puede representar como se muestra en la Figura 4.12. Figura 4.12 Modelo de intercambio de un equipo 488.2. Búffer de salida Zona de la memoria donde las órdenes son almacenadas antes de ejecutarse por parte del parser. De esta manera, se pueden almacenar varias órdenes contenidas en un string y que el controlador se libere y pueda comunicarse con otros equipos. Búffer de entrada Zona de la memoria en la que los datos se almacenan a la espera de que el controlador los lea. Parser Se trata del controlador interno que interpreta los mensajes recibidos por el buffer de entrada y los ejecuta. En caso de necesitar una respuesta por parte del instrumento, coloca los datos correspondientes en el buffer de salida. 4.5 Comandos 33 Protocolo básico • El equipo y el controlador se intercambian mensajes de órdenes y de respuestas; los primeros pueden ser de control, en caso de que requieran un cambio del estado del equipo o de requerimiento, en caso de solicitar información acerca del estado del equipo. Hasta que la respuesta a dicho requerimiento no llega al controlador, éste no envía más órdenes. •La regla básica del protocolo es: "El equipo solo habla cuando está dispuesto a ello, y en ese caso, tiene que hablar antes de que se le ordene hacer una cosa nueva". • Cuando el equipo es encendido o recibe una orden *CLS ambos buffers son inicializados, así como el parser hace lo propio a la raíz de su árbol de órdenes. • El equipo y el controlador se intercambian mensajes de órdenes y de respuestas completos, por lo que el controlador deberá enviar un mensaje completo de órdenes antes de intentar leer una respuesta. De igual forma, cuando le llegue un mensaje de respuesta, deberá leerlo completo antes de enviar una nueva orden. • El controlador puede mandar un requerimiento compuesto, lo cual consiste en enviar un mensaje con múltiples órdenes de requerimientos en él separados por el carácter ";". Los mensajes de respuesta saldrán por el buffer en el mismo formato. Protocolos de excepción Si se produce un fallo en el intercambio de información entre equipos, el proceso no termina de forma normal sino que existe un protocolo de excepción el cual se lleva a cabo. Los distintos casos que pueden ocurrir son: •Equipo direccionado para hablar sin nada en cola. – Si el fallo producido es que el instrumento no ha recibido la orden de requerimiento, éste indicará un error de encolamiento y no enviará ningún byte por el bus. – Sin embargo, si el fallo es producido por no haber podido ejecutar la orden de requerimiento (a consecuencia de otro error), el equipo no indica fallo de encolamiento y espera a recibir un mensaje del controlador. •Equipo direccionado para hablar sin que nadie escuche. El equipo direccionado como talker esperará a que algún equipo sea direccionado como listener o bien a que el controlador tome el control del bus. •Error de orden. Es producido cuando existe un fallo en la sintaxis ya que el equipo no podrá interpretar la orden correctamente al no reconocerla. •Error de ejecución. Puede producirse en dos tipos de situaciones. Por un lado, si alguno de los parámetros está fuera del rango establecido y, por otro lado, si el equipo se encuentra en un estado en el que la ejecución del comando introducido no esté permitida. •Error específico de equipo. Si el equipo en cuestión no puede ejecutar una orden por cualquier motivo dependiente única y exclusivamente de sí mismo y no como consecuencia del protocolo, se produce este error. •Error de encolamiento. Se produce si no se sigue el protocolo de lectura de los datos de la cola de salida. •Condición inconclusa. Se genera en caso de que el controlador intente leer un mensaje de respuesta antes de que el programa haya terminado de generar dicho mensaje. •Condición interrumpida. En caso de que el controlador envíe un mensaje de orden antes de terminar de leer por completo una respuesta producida por un equipo ante un mensaje de requerimiento, el equipo genera un error de encolamiento y el segmento de mensaje no leído es eliminado del buffer de salida. 34 Capítulo 4. GPIB: General Purpose Interface Bus •Bloqueo de buffer Se produce al estar lleno el buffer de entrada, lo que provoca que el de salida también se llene. Si un controlador envía un mensaje con muchas órdenes de requerimiento, entonces el equipo generará un mensaje de respuesta muy largo, el cual puede superar la capacidad del buffer de salida. El controlador no puede terminar de enviar el mensaje al estar la entrada llena, la cual no se vacía hasta que la respuesta no termine de ejecutarse. Para solucionarlo, el equipo limpia la cola de salida y genera un error de encolamiento. Reporte de estado Otra innovación del estándar IEEE 488.2 es un esquema estandarizado para informes de estado. Este sistema de informe de estado está disponible para informar sobre eventos significativos que ocurren dentro de cada instrumento conectado al bus. En este esquema, cada instrumento está equipado con dos registros de estado, llamados Event Status Register (SESR) y Status Byte Register (SBR). Cada bit en estos registros corresponde con un tipo particular de evento que puede ocurrir mientras el instrumento está en uso, como un error de ejecución o la finalización de una operación. Cuando se produce el evento de un tipo dado, el instrumento establece el bit del registro de estado asociado en un valor de uno, si ese bit se ha habilitado previamente en el registro correspondiente. Por lo tanto, leyendo los registros de estado, es posible decir qué eventos han ocurrido. El SESR, que se muestra esquemáticamente en la Tabla 4.9, registra ocho tipos de eventos que pueden ocurrir dentro de un instrumento de adquisición de datos. Tabla 4.9 Bits del Standard Event Status Register (SESR). Standard Event Status Register (SESR) 7 6 5 4 3 2 1 0 PON URQ CME EXE DDE QYE RQC OPC Las funciones de estos bits se describen en la Tabla 4.10. Tabla 4.10 Funciones de los bits del Standard Event Status Register (SESR). Bit Función asociada 7 (MSB) Power On: indica el encendido del instrumento. 6 User Request: un botón del panel frontal se ha pulsado. 5 Command Error: el instrumento recibió un comando con sintaxis errónea. 4 Execution Error: un error ha ocurrió mientras el instrumento ejecutaba un comando. 3 Device Dependant Error: indica que el dispositivo está funcionando incorrectamente. 2 Query Error: se intentó leer el mensaje de salida cuando no había datos o se recibió un nuevo comando antes de que se leyeran los datos previamente solicitados. 1 Request Control: el instrumento solicita ser controlador. 0 (LSB) Operation Complete: todos los comandos han sido completados. El SESR se emplea como una herramienta de señalización de eventos. Al iniciar las comunicaciones con los instrumentos, es necesario activar dichos bits de notificación que interesen. Esto, para los instrumentos que cumplen el estándar IEEE 488.2, se realiza mediante el comando *ESE (Event Status Enable). Por ejemplo, si se desea activar el bit QYE y así detectar cuando ocurre un error en el bit 2 del SESR, habrá que escribir *ESE 4 (4=0b00000100). El SBR, que se muestra esquemáticamente en la Tabla 4.11, registra si los datos están disponibles en el buffer de salida del instrumento, si el instrumento solicita el servicio y si el SESR ha registrado algún evento. Las funciones de los bits del registro se describen en la Tabla 4.12. 4.5 Comandos 35 Tabla 4.11 Bits del Status Byte Register (SBR). Status Byte Register (SBR) 7 6 5 4 3 2 1 0 - RQS ESB MAV - - - - Tabla 4.12 Funciones de los bits del Status Byte Register (SBR). Bit Función del bit 7 (MSB) Puede ser definido para el uso por el fabricante del instrumento. 6 Request Service: el instrumento requiere de los servicios del controlador. 5 Event Status Byte: es activado si algún evento del registro SESR ocurre. 4 Message Available: hay un dato disponible en el buffer de salida. 3-0 Puede ser definido para el uso por el fabricante del instrumento. Un instrumento se puede configurar para poder realizar peticiones de servicio (RQS), que es una señal digital por un cable dedicado del bus GPIB de 24 hilos en respuesta a cualquiera de los siguientes dos eventos: un evento detectado por el SESR o la presencia de datos solicitados en el buffer de salida (es decir, activación de bits ESB o MAV, respectivamente). Para configurar esto, se hace a través del comando *SRE (Service Request Enable). Por ejemplo, si se desea que se realice una peticion de servicio si un evento en el SESR ha ocurrido, habrá que activar el bit ESB del registro SBR por lo que habrá que escribir: *SRE 32 (32=0b00100000). Sin embargo, si se quiere activar la petición de servicio cuando haya datos en el buffer de salida, lo que se deberá escribir es: *SRE 16 (16=0b00010000). La relación entre el SESR, el buffer de salida y el SBR se muestra en la Figura 4.13. Figura 4.13 Registros de estado del estándar IEEE 488.2. 5 Equipo utilizado No dejes que el ruido de las opiniones de otros apague tu propia voz interior. Steve Jobs Para realizar este Trabajo Fin de Grado, el equipo de laboratorio que será controlado remotamente es la fuente de alimentación HP 6622A (Figura 5.1). Dicha fuente ofrece unas especificaciones y precisión que nos permiten una optimización de las medidas. Sus principales ventajas son: •Dos salidas de la fuente completamente aisladas en un rack de 3U. •Salidas de doble rango. •Mediciones incorporadas y características avanzadas programables. •Salidas rápidas y con bajo ruido. •Funciones de protección para garantizar la seguridad del DUT. •Compatible con GPIB. Figura 5.1 Fuente de alimentación HP 6622A. 5.1 Especificaciones 5.1.1 Rangos de salida Para ambos canales, a diferencia de otras fuentes que se pueden encontrar en el mercado, los rangos de salida son los mismos: 37 6 Python Sé tú el cambio que quieres ver en el mundo. Mahatma Gandhi Phyton es un lenguaje de programación creado a principio de los años 90 por el neerlandés Guido van Rossum y cuyo nombre esta inspirado en el grupo de cómicos ingleses Monty Python del programa de la BBC Monty Python’s Flying Circus. Se trata de un lenguaje similar a Perl 1 , pero con una sintaxis muy limpia y que favorece un código legible. Es administrado por la Python Software Foundation 2 y es un lenguaje interpretado, con tipado dinámico, fuertemente tipado y multiplataforma. •Lenguaje interpretado Un lenguaje interpretado significa que emplea un programa intermedio llamado intérprete para su ejecución, esto se hace realizando la traducción secuencialmente y a medida que sea necesario (paso a paso), a diferencia de los lenguajes compilados, que compilan el código completo para que posteriormente lo pueda comprender la máquina correctamente. Esto dota a Python de más flexibilidad y portabilidad, sin embargo, su ejecución es más lenta. A pesar de ello, Python tiene muchas características de los lenguajes compilados, por lo que podremos referirnos a él como un lenguaje semi interpretado. En Python, el código fuente se traduce a un pseudocódigo intermedio llamado bytecode generando archivos .pyc o .pyo, que son los que se ejecutarán posteriormente. •Tipado dinámico Ésta es una de las características más potentes de los lenguajes interpretados y es que, no es necesario declarar el tipo de contenido que va a contener cada variable en su definición, sino que éste se determinará en tiempo de ejecución según el valor asignado en el programa. Incluso si, tras asignarle un valor con un tipo correspondiente, le asignamos un valor de otro tipo distinto, la variable se convertirá al tipo nuevo. •Fuertemente tipado Es necesario realizar una conversión explícita de las variables para tratarla como un tipo distinto al que es. Es decir, si se tiene una cadena, no se podrá tratar como un número entero y sumarla con otro entero, sino que habrá que realizar una conversión previamente. •Multiplataforma El intérprete de Python está en multitud de plataformas disponible (UNIX, Solaris, Windows, Linux, Mac OS...) por lo que si no se usan librerías específicas de la plataforma en la que se esté trabajando, el programa podrá ejecutarse en el resto de sistemas sin problemas. 1 Lenguaje de programación desarrollado a finales de los 80 por Larry Wall con el principal objetivo de simplificar las tareas de administración de un sistema UNIX. 2 Organización sin ánimo de lucro creada en 2001 que posee los derechos de Python y realiza tareas relacionadas con dicho lenguaje tales como el desarrollo de Python o la administración las licencias de código abierto del mismo. 45 46 Capítulo 6. Python •Programación Orientada a Objetos La POO (Programación Orientada a Objetos) es un paradigma de programación 3 en el cual los conceptos e ideas reales de los problemas a solucionar se tratan como objetos y clases en el programa, el cual consistirá en una interacción entre los mismos. Python también permite la programación imperativa, programación funcional y programación orientada a aspectos. 6.1 Herramientas básicas Existen dos formas de ejecutar código Python. Se pueden escribir líneas en el intérprete y obtener una respuesta para cada una de ellas, lo que se conoce como modo interactivo, o bien hacerlo en un archivo de texto y ejecutarlo. Modo interactivo Se dice que se está trabajando en una sesión interactiva cuando los comandos son leídos directamente de la terminal. Normalmente, se espera el siguiente comando con el prompt primario (" >>> ") y para las líneas de continuación se espera con el prompt secundario. El intérprete, antes de mostrar el prompt primario, muestra un mensaje con su número de versión y una nota de copyright como se muestra en el Código 6.1. Código 6.1 Inicio de sesión interactiva en Python. Python 3.6.3 |Anaconda, Inc.| (default, Oct 15 2017, 03:27:45) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Si se quiere escribir un constructor multilínea, será necesario usar las líneas de continuación como en el Código 6.2. Código 6.2 Ejemplo de multilínea en una sesión interactiva. >>> flag = 1 >>> if flag: ... print ("La bandera está activa") ... La bandera está activa En este proyecto nos interesa escribir programas por lo que no se empleará el intérprete directamente como se ha expuesto anteriormente. Sin embargo, indirectamente sí que se está usando ya que al ejecutar los programas, en realidad lo que se está haciendo es ejecutar línea a línea en la terminal. Anaconda Navigator Como se ha nombrado previamente, también es posible escribir archivos en los que se incluya todo el código del programa para posteriormente ejecutarlos. En este proyecto se realizará de esta manera, empleando Anaconda Navigator, que es una GUI que permite iniciar aplicaciones y administrar y manejar fácilmente paquetes y entornos sin utilizar líneas de comandos. Con esta interfaz, se puede trabajar con un repositorio local o en la llamada Anaconda Cloud. Está disponible para macOS, Linux y Windows. La forma más simple de ejecutar el código con Navigator es con Spyder (Scientific PYthon Development EnviRonment). Haciendo click en Spyder desde el inicio de Navigator se abrirá una nueva pestaña (Figura 6.2) donde se podrá escribir y ejecutar el código. Spyder es un potente entorno de desarrollo interactivo para el lenguaje Python con funciones avanzadas de edición, pruebas interactivas y depuración. 3 Se trata de una representación de un enfoque particular para diseñar soluciones a un problema. Cada paradigma tiene sus propios conceptos y formas de tratar los elementos involucrados en el problema, así como los pasos a seguir para solucionarlo. 6.1 Herramientas básicas 47 Figura 6.1 Inicio Anaconda Navigator. Figura 6.2 Ventana de Spyder. 48 Capítulo 6. Python 6.2 Palabras reservadas A las palabras que son identificadores predefinidos y que tienen un significado especial dentro de cada lenguaje, y, por lo tanto, no se pueden utilizar como identificadores en los programas, se les llama palabras reservadas. En Python, comparado con otros lenguajes, el número de palabras reservadas no es muy alto, pero habrá que tenerlas en cuenta y son las mostradas en la Tabla 6.1. Tabla 6.1 Palabras reservadas en Python. and class elif finally if lambda print while as continue else for import not raise with assert def except from in or return yield break del exec global is pass try 6.3 Variables en Python En Python las variables se entienden como "etiquetas" que permiten referenciar a los datos los cuales se guardan en objetos. Al ser un lenguaje de programación orientado a objetos, su modelo de datos también está basado en ello. Para cada dato que aparece, Python crea un objeto para guardarlo, y cada uno de ellos tiene: •Identificador único: permite a Python referirse a él sin ambigüedades. • Tipo de datos: permite a Python saber qué operaciones pueden hacerse con el dato y como almacenarlo en memoria. •Valor: el dato en cuestión. Por ejemplo al escribir a=2, Python crea el objeto "2" el cual tiene un identificador único y es de tipo entero, guardando el valor "2". Posteriormente asignará la etiqueta "a" a dicho objeto. Por otro lado los objetos pueden ser: Objetos inmutables: Objetos que no se pueden modificar (números, cadenas y tuplas). Objetos mutables: Objetos que se pueden modificar (listas y diccionarios). A continuación se muestran unos ejemplos acerca de estos dos tipos de objetos, ya que es algo importante a la hora de programar en Python: Código 6.3 Cambio de valor de una variable (objetos inmutables). >>> x = 15 >>> y = x >>> y, x (15, 15) >>> x = 30 >>> x, y (30, 15) En el Código 6.3 se ve cómo se crea un nuevo objeto "30" y se referencia con la etiqueta "x" mientras que "y" sigue referenciando al objeto antiguo. Código 6.4 Cambio de valor de una variable (objetos mutables que no se modifican). >>> x = [15, 30] >>> y = x >>> y, x ([15, 30], [15, 30]) 6.4 Tipos de datos 49 >>> x = [25, 40] >>> x, y ([25, 40], [15, 30]) En el Código 6.4 ocurre igual que en el caso anterior pero con otro tipo de estructura. Se crea un objeto nuevo referenciándolo con la etiqueta "x" e "y" sigue referenciando al antiguo. Código 6.5 Cambio de valor de una variable (objetos mutables que sí se modifican). >>> x = [15, 30] >>> y = x >>> x, y ([15, 30], [15, 30]) >>> x[0] = 25 >>> x, y ([25, 30], [25, 30]) En este último Código 6.4, a diferencia de los anteriores, no se crea ningún objeto nuevo sino que se modifica el existente. Como ambas etiquetas están referenciando al mismo objeto, devuelven el mismo valor modificado. 6.4 Tipos de datos 6.4.1 Números y operaciones aritméticas elementales Enteros y decimales Python distingue entre números enteros y decimales. Para denotar la diferencia entre uno y otro se usará el delimitador punto ("."). Los primeros se almacenan en variables de tipo int y los segundos en variables de tipo float. Código 6.6 Números enteros y decimales. >>> type(4) <class 'int'> >>> type(4.0) <class 'float'> Números complejos También es posible almacenar números complejos en Python y hacer cálculos con ellos. Para crear una variable de este tipo se puede hacer de dos maneras distintas: usando complex o escribiendo directamente la parte real y la parte imaginaria acompañada del carácter "j", las cuales se pueden mostrar por separado ya que cada una se guarda en un atributo distinto del objeto creado, tal y como se muestra en el Código 6.7. Código 6.7 Números complejos. >>> n_complejo1 = complex(1,6) >>> n_complejo1 (1+6j) >>> n_complejo2 = 1 + 6j >>> n_complejo2 (1+6j) >>> n_complejo2.real 1.0 >>> n_complejo2.imag 6.0 50 Capítulo 6. Python Operaciones básicas Las operaciones básicas son la suma ("+"), resta ("-"), multiplicación ("*") y división ("/"). En cualquiera de las operaciones, si interviene algún número decimal, el resultado será decimal. En el caso de la división, incluso aunque no intervenga ningún número decimal y el resultado sea un número entero, se guardará en un decimal. En el Código 6.8 se muestran algunos ejemplos de esto. Código 6.8 Operaciones básicas. >>> 5 + 4 9 >>> 2 - 5 -3 >>> 10 / 2 5.0 >>> 3.4 * 5 17.0 Cociente y resto de una división El cociente siempre será un número entero (su parte decimal será "0") aunque se almacenará en un decimal si interviene algún decimal en la operación, sin embargo, el resto puede ser decimal. Este último siempre tiene el mismo signo que el divisor. En el Código 6.9 se pone en práctica cómo hallar el cociente y el resto de una división con los operadores ("//" y "%") o la función correspondiente. Código 6.9 Cociente y resto de una división. >>> 16.5 // 2 8.0 >>> 16.5 % 2 0.5 >>> divmod(16.5,2) (8.0, 0.5) Potencias y raíces Las potencias tienen prioridad sobre las multiplicaciones y divisiones y, teniendo en cuenta que se tratan de operaciones inversas, se empleará el mismo operador ("**") para calcular las raíces. También se puede realizar esto mediante una función. Código 6.10 Potencias y raíces. >>> 2 ** 5 32 >>> 16 ** 0.5 # Halla la raíz cuadrada 4.0 >>> (-1) ** 0.5 (6.123233995736766e-17+1j) >>> -9 ** 0.5 # Primero hace la raíz y luego le pone el signo negativo -3.0 >>> pow(4,3) 64 >>> pow(64,0.5) 8.0 Otras funciones de interés round: Si recibe un argumento, redondea al entero más próximo, si recibe dos, redondea al decimal más proximo con el número de decimales indicado en el segundo argumento. 6.4 Tipos de datos 51 floor: Redondea al entero inferior. ceil: Redondea al entero superior. abs: Calcula el valor absoluto de un número. max: Calcula el valor máximo de un conjunto de valores (numéricos o cadenas). En el caso de cadenas, el valor máximo se corresponde con el último valor en orden alfabético. min: Calcula el valor mínimo de un conjunto de valores (numéricos o cadenas). En el caso de cadenas, el valor mínimo se corresponde con el primer valor en orden alfabético. sum: Calcula la suma de un conjunto de valores contenidos en una variable que debe ser iterable. sorted: Ordena un conjunto de valores contenidos en una variable que debe ser iterable. 6.4.2 Cadenas Una cadena es una secuencia inmutable de caracteres Unicode 4 , delimitada por comillas. Las cadenas tienen mucha utilidad en la programación y se realizará un breve análisis de las funciones más relevantes. Antes que nada, destacar que, como en muchos lenguajes de programación, para acceder al primer valor de una cadena se accede con el índice "0" y no con el "1" como sería lógico pensar para alguien externo al mundo de la programación: Código 6.11 Índice de las cadenas. >>> cadena = "prueba" >>> cadena[0] 'p' >>> cadena[1] 'r' Longitud Para obtener la longitud de una cadena, se hará con la función len: Código 6.12 Longitud de cadenas. >>> cadena = "prueba" >>> len(cadena) 6 Concatenar cadenas Es una de las propiedades más importantes, con la que se consigue juntar varias cadenas en una sola. Es posible aplicar operadores a las cadenas como se muestra en el Código 6.13. Código 6.13 Concatenación de cadenas. >>> cadena = "prueba" >>> "mensaje" + "DE" + "prueba" 'mensajeDEprueba' >>> "mensaje" + "DE" + 4*cadena 'mensajeDEpruebapruebapruebaprueba' Porciones de cadenas A las subcadenas se les llama porciones de cadenas y su acceso se hará similar al que se indicó anteriormente para acceder a un carácter. Con el operador "[n:m]" se extrae desde el carácter n-ésimo hasta el m-ésimo. 4Se trata de un estándar de codificación de caractéres universal para representar texto de múltiples lenguajes. 52 Capítulo 6. Python Código 6.14 Porciones de cadenas. >>> cadena = "prueba" >>> cadena[2:4] 'ue' >>> cadena[:3] 'pru' >>> cadena[1:] 'rueba' Cadenas "f" En Python 3.6 se incluyó una facilidad para insertar variables y expresiones dentro de las cadenas, lo cual se denominó cadenas "f". Éstas contienen variables y expresiones entre llaves las cuales se sustituyen por su valor. Para emplearlas se debe anteponer una "f" a la cadena como se indica en el Código 6.15. Código 6.15 Cadenas "f". >>> mes = "Marzo" >>> dias = 31 >>> print (f"El mes de {mes} tiene {dias} días.") El mes de Marzo tiene 31 días. 6.4.3 Booleanos Son aquellas variables que solo pueden tomar dos posibles valores: verdadero (True) o falso (False). En realidad, en Python todas las variables pueden considerarse booleanas, ya que una variable vacía o nula se supone False y el resto True. Para convertir un valor a booleano se emplea la funcion bool. Código 6.16 Variables booleanas. >>> bool() False >>> bool(None) False >>> bool(111) True >>> bool("ejemplo") True Operadores lógicos Se tratan de operaciones que trabajan con operadores booleanos y son los que se muestran en la Tabla 6.2. Tabla 6.2 Operadores lógicos en Python. Operador Descripción and "Y" lógico or "O" lógico not Negación Estos operadores se pueden agrupar en una sola expresión, dando lugar a expresiones compuestas, sin embargo, hay que hacerlo teniendo en cuenta que Python evalúa primero los not, luego los and y por último los or. 6.4 Tipos de datos 53 Operadores relacionales También operan con resultados booleanos. Tabla 6.3 Operadores relacionales en Python. Operador Descripción > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que == Igual que != Distinto que Pyhon permite encadenar varias comparaciones y el resultado será verdadero si y sólo si todas las comparaciones lo son. 6.4.4 Secuencias Tuplas Es un conjunto ordenado de elementos que pueden ser del mismo o de varios tipos. Se consideran objetos inmutables. Para crearla solo hay que escribir los elementos entre paréntesis (los cuales son opcionales) separados por comas. El acceso a los elementos se realiza introduciendo el índice correspondiente entre corchetes y para saber el número de elementos que componen una tupla se emplea la funcion len. Para crear tuplas de un solo elemento es necesario escribir una coma tras él. En el Código 6.17 se ejemplifica todo lo previamente explicado. Código 6.17 Ejemplo de uso de tuplas. >>> tupla_ejemplo = (3, "hola", 9.2) >>> tupla_ejemplo[2] 9.2 >>> len(tupla_ejemplo) 3 >>> tupla_un_elemento = (10,) >>> tupla_un_elemento (10,) Listas Son conjuntos de elementos del mismo o distinto tipo, las cuales se limitan por corchetes. Se consideran objetos mutables. Una lista puede contener incluso otras listas y éstas a su vez a otras, y así sucesivamente. Para acceder a algún elemento de la lista, se realiza de la misma manera que en las tuplas, con los corchetes e introduciendo su índice. Si aplicamos el operador suma con listas, éstas se concatenan y para eliminar elementos de las mismas, se hará con la palabra reservada del. Por último, comentar que si se hace una copia de una lista, al ser un objeto mutable, si se modifica la lista inicial posteriormente, la nueva también se verá modificada, por lo que se empleará la notación de sublistas. Todo esto se puede observar en el Código 6.18. Código 6.18 Ejemplo de uso de listas. >>> ejemplo_lista = [1, 2, 3, 4, 5, 6] >>> ejemplo_lista[0] 1 >>> ejemplo_lista_anidada = [ejemplo_lista, 7, 8] >>> ejemplo_lista_anidada 60 Capítulo 6. Python Tabla 6.5 Métodos módulo os. Método Descripción os.access(path, modo_de_acceso) Saber si se puede acceder a un archivo o directorio os.getcwd() Conocer el directorio actual os.chdir(nuevo_path) Cambiar de directorio de trabajo os.chroot() Cambiar al directorio de trabajo raíz os.chmod(path, permisos) Cambiar los permisos de un archivo o directorio os.chown(path, permisos) Cambiar el propietario de un archivo o directorio os.mkdir(path[, modo]) Crear un directorio os.mkdirs(path[, modo]) Crear directorios recursivamente os.remove(path) Eliminar un archivo os.rmdir(path) Eliminar un directorio os.removedirs(path) Eliminar directorios recursivamente os.rename(actual, nuevo) Renombrar un archivo os.symlink(path, nombre_destino) Crear un enlace simbólico Módulo sys Es el encargado de proporcionar funcionalidades y variables relacionadas con el intérprete. Las más importantes se resumen en la Tabla 6.6 y en la Tabla 6.7. Tabla 6.6 Variables del módulo sys. Variable Descripción sys.argv Retorna una lista con todos los argumentos pasados por línea de comandos. Al ejecutar python modulo.py arg1 arg2, retornará una lista: [’modulo.py’, árg1’, árg2’] sys.executable Retorna el path absoluto del binario ejecutable del intérprete de Python sys.maxint Retorna el número positivo entero mayor, soportado por Python sys.platform Retorna la plataforma sobre la cuál se está ejecutando el intérprete sys.version Retorna el número de versión de Python con información adicional Tabla 6.7 Métodos del módulo sys. Método Descripción sys.exit() Forzar la salida del intérprete sys.getdefaultencoding() Retorna la codificación de caracteres por defecto sys.getfilesystemencoding() Retorna la codificación de caracteres que se utiliza para convertir los nombres de archivos unicode en nombres de archivos del sistema sys.getsizeof(object[, default]) Retorna el tamaño del objeto pasado como parámetro. El segundo argumento (opcional) es retornado cuando el objeto no devuelve nada. Módulo subprocess Permite trabajar de forma directa con órdenes del Sistema Operativo. Hay que tener cuidado ya que el uso incorrecto de este módulo podría comprometer al sistema. Entre los métodos más comunes de subprocess, se encuentra call. Este método suele ser útil para ejecutar órdenes sencillas. El método call, recibe como argumento el comando a ser ejecutado. Sin embargo, si el comando introducido requiere algún argumento, se le pasará a call como primer parámetro el comando y el resto los argumentos. 6.10 Gráficas en Python Para realizar gráficas, se utiliza Pylab. Pylab es una API para Python de la biblioteca gráfica Matplotlib (matplotlib.pyplot) que utiliza Numpy, un módulo matemático que añade funciones para operar con vectores 6.10 Gráficas en Python 61 o matrices. Esta biblioteca proporciona una forma rápida de representar datos y figuras con calidad y en varios formatos. 6.10.1 Funciones principales En este apartado se nombrarán algunas de las funciones que tiene el módulo para hacer gráficas, ya que sería muy extenso si se explicaran todas. Crear figuras Crear una nueva figura se realiza de la siguiente manera: figure(num, figsize, dpi, facecolor, edgecolor, frameon) Los argumentos, los cuales son opcionales, son: 1. num: Numeración de la figura. 2. figsize: Tupla que contiene el ancho y alto en pulgadas del tamaño de la figura 3. dpi: Resolución de la imagen en puntos por pulgada. 4. facecolor: Color del rectángulo de la figura. 5. edgecolor: Color del perímetro de la figura. 6. frameon:Si es falso, elimina el marco de la figura. Múltiples gráficas en una figura Para organizar varias gráficas en la misma cuadrícula, se sigue la siguiente estructura: subplot(numRows, numCols, plotNum) Los argumentos son: 1. numRows: Número de filas. 2. numCols: Número de columnas. 3. plotNum: Número de gráfica. Pintar gráfica Finalmente, la sintaxis a seguir para pintar una gráfica es la siguiente: subplot(numRows, numCols, plotNum) Los argumentos son: 1. x: Valor en el eje de abcisas (Puede ser tupla, lista o array). 2. y: Valor en el eje de ordenadas (Puede ser tupla, lista o array). 3. linestyle: Color y tipo de gráfica. 4. linewidth: Ancho de línea. 5. marker: Marcador. Otras funciones Otras de las funciones útiles y que se emplearán en el proyecto son: show: Presenta las figuras en pantalla. legends: Coloca una leyenda a las gráficas xlabel: Etiqueta al eje de abcisas de la gráfica actual. ylabel: Etiqueta al eje de ordenadas de la gráfica actual. close: Cierra la gráfica. 62 Capítulo 6. Python Ejemplos de gráficas Para empezar, en el Código 6.29 se muestra cómo pintar una gráfica en una dimensión, la cual se puede observar en la Figura 6.3. Código 6.29 Gráfica simple en una dimensión. #!/usr/bin/env python # -*- coding: utf-8 -*- # Carga de los módulos necesarios import scipy as sp import matplotlib.pyplot as plt # Creamos el array x de cero a diez con cien puntos x = sp.linspace(0, 10, 100) # Creamos el array y conde cada punto es el seno de cada elemento de x y = sp.sin(x) # Creamos una figura plt.figure() # Representamos plt.plot(x,y) # Mostramos en pantalla plt.show() Figura 6.3 Gráfica simple en una dimensión. A continuación, en el Código 6.30 se muestra cómo programar para que se muestren varias gráficas en la misma figura, como se puede observar en la Figura 6.4. 6.10 Gráficas en Python 63 Código 6.30 Varias gráficas individuales en una figura. #!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import division import numpy as np # Cargamos numpy como el alias np import matplotlib.pyplot as plt # Cargamos matplotlib.pyplot como el alias plt # Definimos el periodo de la gráfica senoidal periodo = 2 # Definimos el array dimensional x = np.linspace(0, 10, 1000) # Definimos la función senoidal y = np.sin(2*np.pi*x/periodo) # Creamos la figura plt.figure() # Primera gráfica plt.subplot(2,2,1) plt.plot(x, y,'r') # Segunda gráfica plt.subplot(2,2,2) plt.plot(x, y,'g') # Tercera gráfica plt.subplot(2,2,3) plt.plot(x, y,'b') # Cuarta gráfica plt.subplot(2,2,4) plt.plot(x, y,'k') # Mostramos en pantalla plt.show() Figura 6.4 Varias gráficas individuales en una figura. 64 Capítulo 6. Python 6.11 PyVISA Se trata de un paquete de Python que permite el control remoto de dispositivos independientemente del bus empleado. Esto recuerda al estándar VISA visto en la Sección 2.2 ya que PyVISA no es más que una forma sencilla de implementar dicho estándar en Python. De esta manera se facilitarán las tareas de monitorización y control de instrumentos, ya que esta librería se podrá emplear con cualquier interfaz y con cualquier instrumento. 6.11.1 Control remoto paso a paso Para realizar una comunicación con un instrumento y, por tanto, poder enviarle y recibir información, habrá que realizar una serie de pasos previos que se explicarán a continuación: Creación del objeto correspondiente al instrumento Lo primero que hay que realizar para establecer una comunicación, es crear el objeto asociado al instrumento con el que se quiere realizar la misma. Para ello, la estructura será la siguiente: import visa resources = visa.ResourceManager() IV_ Obj = resources.open_ resource(’interface_ type::board_ number::resource_ class’) En la primera línea se importa el módulo VISA para emplearlo posteriormente. En la segunda línea se llama al método ResourceManager de dicho módulo, con esto se consigue guardar en una variable los recursos existentes. Para finalizar, en la última línea se abre el recurso que se requiera de la lista previa. Los campos en cursiva habrá que rellenarlos de la siguiente manera: interface_ type: Tipo de interfaz del recurso. board_ number: Número de la tarjeta de la interfaz del recurso. resource_ class: Especifica la clase de recurso. En el Código 6.31 se puede ver un ejemplo de la creación de un objeto GPIB: Código 6.31 Creación del objeto GPIB. >>> import visa >>> resources = visa.ResourceManager() >>> resources.list_resources() ('ASRL1::INSTR', 'ASRL2::INSTR', 'GPIB0::14::INSTR') >>> IV_Obj = resources.open_resource('GPIB0::14::INSTR') Establecimiento de los atributos del objeto Un recurso representa un instrumento. Existen muchas clases que derivan de los recursos las cuales representan los diferentes tipos de recursos (GPIB, Serial...). Cada uno posee atributos y métodos particulares para usar. A continuación se analizan los atributos más comunes. session: Se trata de un identificador único que representa la comunicación. timeout: Es el tiempo establecido máximo para una operación y es dado en milisegundos. chunk_size: Cantidad de fragmentos de datos que lee simultáneamente PyVISA del instrumento. Un fragmento consta de 20 kB. read_termination: Carácter de terminación de los mensajes. Escribir y leer valores Tras establecer la comunicación como previamente se ha explicado, se podrán escribir y leer datos en los instrumentos usando los métodos de la Tabla 6.8. 6.11 PyVISA 65 Tabla 6.8 Métodos empleados para la escritura y lectura en instrumentos. Método Descripción query_ascii_values(data) Leer valores ASCII query_binary_values(data, datatype, is_big_endian) Leer valores binarios write_ascii_values(data, values) Escribir valores ASCII write_binary_values(data, values) Escribir valores binarios write(data) Escribir read_raw() Leer Como se puede observar, los dos últimos métodos de la tabla son generales para leer y escribir. Estos serán los que se emplearán en los códigos de este trabajo. Cuando se quiera escribir algo sobre el instrumento sin esperar respuesta, se empleará el método write únicamente, en caso de esperar un dato procedente del instrumento, inmediatamente después se llamará a read_raw para almacenar la respuesta. Esto se puede realizar dentro de un bloque try-except por si ocurriera algún fallo como se puede ver en el Código 6.32 y en el Código 6.33. Código 6.32 Ejemplo de lectura de un instrumento. try: IV_Obj.write(strCommand) Ans = IV_Obj.read_raw() except: del(IV_Obj) print("Failed sending the query.") Código 6.33 Ejemplo de escritura en un instrumento. try: IV_Obj.write(strCommand) except: del(IV_Obj) print("Failed sending the command.") 7 Códigos desarrollados El fracaso es, a veces, más fructífero que el éxito. Henry Ford Este capítulo consta del análisis y la explicación del código que se ha redactado y empleado para la toma de medidas en este proyecto. Se trata de una serie de módulos, los cuales cada uno de ellos contienen un listado de definiciones y declaraciones que realizarán una tarea concreta, como por ejemplo, poner un nivel de tensión a una fuente o establecer un límite de intensidad. Los módulos serán analizados en el orden lógico de su escritura, iniciando con lo más básico que es la conexión con el equipo hasta el objetivo final, la toma de datos. Señalar que muchas de las funciones están duplicadas con la única diferencia del cambio en el número del canal el cual correponderá con el valor 1 si se trata del que da valores negativos de tensión y con el valor 2 si es el que da valores positivos. En muchas de las funciones se encontrará que se establecerá un valor de 8000 fragmentos al atributo chunk_- size que tal y como se explicó en el Capítulo 6, determina la cantidad de información a leer simultáneamente proveniente del instrumento. Por otro lado, también será usual realizar una limpieza del registro de estado y de incidencias con el comando *CLS antes de mandar un comando. 7.1 Apertura de conexión Antes de enviarle comandos a los equipos para controlarlos remotamente, en el caso de este proyecto más concretamente a la fuente de alimentación HP 6622A, será necesario crear una conexión con dicho equipo. Esto se realizará de la siguiente manera: se llamará a la función connect_ps perteneciente al módulo connect_- ps (Código 7.1) la cual recibe un número de argumentos variables en función de si se quiere modificar el protocolo de comunicación, el número de la tarjeta, la dirección primaria o la dirección secundaria. Si no se le pasan dichos argumentos, se configurará automáticamente con los parámetros por defecto programados, es decir, GPIB, 0, 5 y sin dirección secundaria respectivamente, lo necesario para controlar la fuente usada en nuestro montaje. Código 7.1 Inicio de conexión con el instrumento. # -*- coding: utf-8 -*- """ Created on Sat Apr 28 21:45:01 2018 @author: Diego """ import build_GPIB_object from six import string_types 67 68 Capítulo 7. Códigos desarrollados def connect_ps (*varargin): numargs = len(locals()) global Status Status = 0 class init1(): def __init__ (self, protocol, **GPIB): self.protocol = protocol self.__dict__.update(GPIB) class init2(): def __init__ (self, board, primaddr): self.board = board self.primaddr = primaddr Parameters = init1 (protocol = 'GPIB', GPIB = init2(0,5)) if numargs < 1: IV_Obj = build_GPIB_object.build_GPIB_object(Parameters) if isinstance(varargin[0], string_types) == False: raise ("First parameter must be a string.") else: if varargin[0] == 'GPIB': Parameters.protocol = varargin[0] else: raise ("Protocol type must be GPIB.") if numargs > 1: if Parameters.protocol == 'GPIB': Parameters.GPIB.board = int(varargin[1]) if numargs > 2: Parameters.GPIB.primaddr = int(varargin[2]) if numargs > 3: Parameters.GPIB.secaddr = int(varargin[3]) IV_Obj = build_GPIB_object.build_GPIB_object(Parameters) return Status, IV_Obj Para realizar dicha conexión, será necesaria la creación de un objeto el cual identifique al equipo que se va a controlar. Esto se realiza con la función build_GPIB_object del módulo build_GPIB_object (Código 7.2) mediante la cual, empleando el módulo visa, primero se obtiene un listado de los recursos disponibles mediante el método ResourceManager y posteriormente se abre el recurso correspondiente a la fuente, creando el objeto identificador de la misma, el cual ha sido nombrado como IV_Obj. Como comentario adicional, recordar que el atributo timeout, explicado en el Capítulo 6, es empleado de manera que si una operación tiene una duración mayor a dicho valor (en milisegundos), ésta es abortada y se lanza una excepción. Se ha establecido dicho atributo a un valor que permita realizar las comunicaciones de manera óptima. Además se ha empleado una bandera que será retornada al realizar la conexión con el equipo mediante la cual se podrá saber si se ha realizado con éxito, tomando el valor 1 en caso afirmativo o el valor 0 en caso contrario. 7.2 Comandos y queries 69 Código 7.2 Creación del objeto identificador del instrumento. # -*- coding: utf-8 -*- """ Created on Sat Apr 28 21:30:04 2018 @author: Diego López Morilla """ import visa def build_GPIB_object(Parameters): global Status try: if hasattr(Parameters.GPIB, 'secaddr'): resources = visa.ResourceManager() IV_Obj = resources.open_resource(f"{Parameters.protocol}{Parameters. GPIB.board}::{Parameters.GPIB.primaddr}::{Parameters.GPIB. secaddr}") IV_Obj.timeout = 1000 else: resources = visa.ResourceManager() IV_Obj = resources.open_resource(f"{Parameters.protocol}{Parameters. GPIB.board}::{Parameters.GPIB.primaddr}::INSTR") IV_Obj.timeout = 1000 except: raise("Object could not be created") Status = 1 return IV_Obj 7.2 Comandos y queries Como se vio en el Capítulo 5, en la instrumentación virtual se pueden mandar comandos o queries. Los primeros se emplean para realizar tareas que no requieran respuesta por parte del equipo como podrían ser establecer un nivel de tensión o de corriente. Por otro lado, las queries constan de una comunicación bidireccional, es decir, una vez que el equipo recibe la orden, éste debe responder con algún dato como por ejemplo la identidad del equipo. Para realizar esto, se han creado dos funciones: send_command Mediante esta función perteneciente al módulo send_command (Código 7.3) se envían comandos a la fuente de alimentación. Recibe como parámetros el objeto que representa al equipo y el comando que se le quiere enviar. Además, posee ciertas comprobaciones para asegurar que lo que se está enviando se trata de un comando. En caso de fallo en la comunicación a pesar de que el comando sea correcto, se lanzará una excepción. Código 7.3 Envío de comandos. # -*- coding: utf-8 -*- """ Created on Sun Apr 29 11:21:59 2018 @author: Diego López Morilla """ from six import string_types 76 Capítulo 7. Códigos desarrollados Iout = Iout * 1000 print(f"Current (mA): {Iout}") del(ps) def power_supply_Ineg_query_r(): (Status, ps) = connect_ps.connect_ps('GPIB') ps.chunksize = 8000 (Status, Iout) = send_query.send_query(ps, "IOUT? 1") Iout = float(Iout.decode('utf-8')) Iout = Iout * 1000 del(ps) return Iout En dichos módulos se distinguen tres funciones en cada uno de ellos, las cuales tendrán una función concreta y serán explicadas a continuación: power_supply_Ipos_set / power_supply_Ineg_set Mediante esta función se introducirá como único argumento la intensidad máxima deseada que puede dar la fuente para que no dañe los dispositivos empleados. La unidad del valor introducido tiene que ser el miliamperio. power_supply_Ipos_query / power_supply_Ineg_query Cuando se ejecute, preguntará a la fuente qué valor de intensidad está leyendo. La respuesta a la pregunta será imprimida por pantalla para que el usuario pueda visualizarla. La unidad del valor imprimido es el miliamperio y será indicado junto al dato. power_supply_Ipos_query_r / power_supply_Ineg_query_r Al igual que ocurre en tensión, en corriente existe una función que pregunta el valor pero no lo imprime por pantalla, sino que lo devuelve para almacenarlo en una variable. Esto será de vital importancia en el desarrollo posterior de las pruebas a realizar para poder almacenar los niveles de corriente que están establecidos. La unidad del valor devuelto es el miliamperio. 7.4.2 Protección de sobrecorriente La protección de sobrecorriente controla que no pase más intensidad que la deseada para que no se quemen los dispositivos que componen el montaje. En el Código 7.11 se pueden observar las funciones pertenecientes al módulo overcurrent_Ipos y en el Código 7.12 los del overcurrent_Ineg. Código 7.11 Protección de sobrecorriente de la fuente positiva. # -*- coding: utf-8 -*- """ Created on Sun Apr 29 21:33:07 2018 @author: Diego López Morilla """ import connect_ps import send_command import send_query def overcurrent_Ipos_set(OCP): if OCP == 'ON': state = 1 else: if OCP == 'OFF': state = 0 7.4 Corriente 77 (Status, ps) = connect_ps.connect_ps('GPIB') ps.chunksize = 8000 send_command.send_command(ps, ("*CLS")) send_command.send_command(ps, f"OCP 2, {state}") del(ps) def overcurrent_Ipos_query(): (Status, ps) = connect_ps.connect_ps('GPIB') ps.chunksize = 8000 (Status, OCPstate) = send_query.send_query(ps, "OCP? 2") print(f"Overcurrent protection state: {OCPstate.decode('utf-8')}") del(ps) Código 7.12 Protección de sobrecorriente de la fuente negativa. # -*- coding: utf-8 -*- """ Created on Sun Apr 29 21:33:07 2018 @author: Diego """ import connect_ps import send_command import send_query def overcurrent(OCP): if OCP == 'ON': state = 1 else: if OCP == 'OFF': state = 0 (Status, ps) = connect_ps.connect_ps('GPIB') ps.chunksize = 8000 send_command.send_command(ps, ("*CLS")) send_command.send_command(ps, f"OCP 1, {state}") del(ps) def overcurrent_Ineg_query(): (Status, ps) = connect_ps.connect_ps('GPIB') ps.chunksize = 8000 (Status, OCPstate) = send_query.send_query(ps, "OCP? 1") print(f"Overcurrent protection state: {OCPstate.decode('utf-8')}") del(ps) 78 Capítulo 7. Códigos desarrollados 7.4.3 Códigos orientados a las pruebas Para realizar las pruebas se han elaborado tres módulos que ayudarán al desarrollo de las mismas. Se trata de power_supply_Imax,power_supply_measure ypower_supply. El primero contiene una única función que recibe como primer argumento la intensidad máxima en miliamperios que se desea que proporcione el canal 1 y como segundo lo análogo respecto al canal 2 de la fuente. Dicho método puede consultarse en el Código 7.13. Código 7.13 Limitación de corriente en ambos canales de la fuente. # -*- coding: utf-8 -*- """ Created on Wed May 30 00:09:04 2018 @author: Diego López Morilla """ import power_supply_Ineg import power_supply_Ipos def power_supply_Imax_set(Imax_neg, Imax_pos): power_supply_Ineg.power_supply_Ineg_set(Imax_neg/1000) power_supply_Ipos.power_supply_Ipos_set(Imax_pos/1000) El siguiente, power_supply_measure, contiene también una única función la cual al llamarla proporcionará al usuario por pantalla una información muy completa acerca de los valores de tensión e intensidad que está proporcionando la fuente en todos sus canales. Esto se realizará con el Código 7.14. Código 7.14 Medida de tensión y corriente en ambos canales de la fuente. # -*- coding: utf-8 -*- """ Created on Thu May 31 23:30:47 2018 @author: Diego López Morilla """ import power_supply_Vpos import power_supply_Vneg import power_supply_Ipos import power_supply_Ineg def power_supply_measure(): print("Power supply 1 (Negative):") power_supply_Vneg.power_supply_Vneg_query(); power_supply_Ineg.power_supply_Ineg_query(); print("Power supply 2 (Positive):") power_supply_Vpos.power_supply_Vpos_query(); power_supply_Ipos.power_supply_Ipos_query(); El último se muestra en el Código 7.15 y está compuesto de una única función con el mismo nombre que el módulo la cual recibirá tres parámetros en el siguiente orden: número de canales de la fuente que se quieren emplear (en el caso de este proyecto deberá ser 1 ó 2 ya que posee dos canales), tensión del canal 2 de la fuente (será la tensión Vds) y tensión del canal 1 de la fuente (será la Vgs). 7.4 Corriente 79 Código 7.15 Fijado de tensión de los canales de la fuente. # -*- coding: utf-8 -*- """ Created on Wed May 30 00:17:22 2018 @author: Diego López Morilla """ import power_supply_Vpos import power_supply_Vneg import power_supply_measure def power_supply(nps, Vds, Vgs): numargs = len(locals()) if numargs != 3: print("The number of arguments must be 3.") else: if nps == 1: if not Vgs: while Vds < 0: print("ATTENTION: Vds is negative.") Vds = input("Please, enter a positive value (V).") power_supply_Vpos.power_supply_Vpos_set(Vds) elif not Vds: while Vgs > 0: print("ATTENTION: Vgs is positive.") Vgs = input("Please, enter a negative value (V).") power_supply_Vneg.power_supply_Vneg_set(-Vgs) else: print("Wrong voltage.") print("Please, enter new values.") elif nps == 2: while Vds < 0: print("ATTENTION: Vds is negative.") Vds = input("Please, enter a positive value (V).") while Vgs > 0: print("ATTENTION: Vgs is positive.") Vgs = input("Please, enter a negative value (V).") power_supply_Vpos.power_supply_Vpos_set(Vds) power_supply_Vneg.power_supply_Vneg_set(-Vgs) else: print("The number of power supplies must be 1 or 2.") power_supply_measure.power_supply_measure() 8 Pruebas experimentales La creatividad requiere el coraje de dejar ir las certezas. Erich Fromm Tras analizar en el Capítulo 7 los códigos básicos escritos para el desarrollo del proyecto, en el presente se explicarán de qué manera se combinarán todos ellos para realizar una serie de pruebas prácticas en el laboratorio. La primera prueba consistirá en poner a trabajar un transistor de Cree en su punto óptimo de polarización. Se proseguirá con una prueba cuyo objetivo es realizar un barrido de tensiones para caracterizar el comportamiento I-V de un transistor FET. Por último, se realizará un script para controlar en tiempo real el valor que está tomando la tensión e intensidad proporcionada por la fuente en ambos canales. Antes de realizar cualquiera de estas pruebas será necesario importar todos los módulos creados para poder llamarlos desde la terminal. Se ha creado un módulo llamado import el cual tiene como única funcionalidad la importación del resto de módulos: Código 8.1 Importación de los módulos. # -*- coding: utf-8 -*- """ Created on Wed May 16 13:07:16 2018 @author: Diego López Morilla """ import power_supply_Vpos import power_supply_Vneg import power_supply_Ipos import power_supply_Ineg import overvoltage_Vpos import overvoltage_Vneg import overcurrent_Ipos import overcurrent_Ineg import send_query import send_command import build_GPIB_object import connect_ps import power_supply_Imax import power_supply_measure import power_supply import graphics_TR 81 82 Capítulo 8. Pruebas experimentales 8.1 Prueba 1: Búsqueda del punto de polarización de un amplificador En esta prueba se empleará una placa de evaluación de un amplificador de Cree basado en el transistor HEMT (high electron mobility transistor) CGH40010. En la Figura 8.1 se puede observar dicha placa y en la Figura 8.2 el transistor individualmente fuera de la misma. El transistor CGH40010 es un transistor de nitruro de galio (GaN) de gran movilidad de electrones. El CGH40010 ofrece una solución de uso general para una variedad de aplicaciones de RF y microondas dando una alta eficiencia, alta ganancia y gran ancho de banda, lo que hace que el CGH40010 sea ideal para circuitos amplificadores lineales y comprimidos. La placa empleada está optimizada para trabajar a una frecuencia de 3.6 GHz, dando una ganacia de 13 dB. El punto recomendado para polarizar el transistor es el siguiente: −Vds = 28 V. −Ids = 200 mA. −Vgs = -2.36 V. El procedimiento recomendado para alimentar transistores HEMT o FET de empobrecimiento, es decir, con un valor de Vgs negativo, es el siguiente: 1. Fijar la intensidad máxima de los canales. 2. Inicializar las tensiones Vds y Vgs a valores seguro, esto es, con una tensión Vgs negativa y por debajo del valor de corte. 3. Realizar el conexionado del montaje. 4. Aumentar las tensiones progresivamente hasta llegar al punto óptimo de polarización. Figura 8.1 Placa de evaluación del amplificador de Cree. 8.1 Prueba 1: Búsqueda del punto de polarización de un amplificador 83 Figura 8.2 HEMT CGH40010. Esta prueba ha consistido en realizar los pasos que previamente se han expuesto para llegar al punto de polarización recomendado por el fabricante. El montaje necesario para llevarla a cabo se muestra en la Figura 8.3. Figura 8.3 Montaje para la primera prueba en el laboratorio. En la Figura 8.5 se muestran las interacciones a realizar en la terminal para realizar la prueba. Primeramente se fijan 5 mA y 400 mA como intensidades Igs e Ids máximas permitidas para asegurar que no se queme el DUT. Posteriormente se fijarán las tensiones Vds y Vgs a 0 V y -4 V respectivamente para realizar el conexionado del montaje sin riesgo. Por último se irán aumentando ambas tensiones progresivamente hasta alcanzar los 28 V de Vds y -2.36 V de Vgs como se mencionó previamente. Paralelamente se irán realizando medidas para comprobar que las intensidades toman valores correctos y no se han disparado a un valor muy elevado, lo que sería síntoma de un incorrecto funcionamiento del dispositivo bajo prueba. Más concretamente, mientras la Vgs está por debajo de la tensión de corte, que según el datasheet (Apéndice B) está en el rango de -3.8 a -2.3 V con un valor típico de -3.3 V, se puede apreciar que el transistor está al corte y las corrientes Ids e Igs son prácticamente nulas. Por el contrario, cuando aumenta Vgs y supera ese umbral, el transistor empieza a conducir, obteniéndose mayor Ids al aumentar Vgs para un valor de Vds fijo, como es el caso. Finalmente, cuando el valor de Vgs vuelve a estar por debajo de la tensión de corte, la corriente Ids de nuevo es prácticamente nula porque se ha vuelto a cortar el canal. 84 Capítulo 8. Pruebas experimentales Éste es el comportamiento esperado del transistor tal y como se representa en la Figura 8.4, donde se puede consultar una gráfica del comportamiento teórico que debe tener un transistor JFET en sus tres estados de funcionamiento: corte, lineal y saturación. (a) Curva Ids - Vgs teórica de un transistor JFET. (b) Curva Ids-Vds teórica de un transistor JFET. Figura 8.4 Comportamiento teórico de un transistor JFET. 8.1 Prueba 1: Búsqueda del punto de polarización de un amplificador 85 Figura 8.5 Interacciones para el desarrollo de la primera prueba experimental. 92 Capítulo 8. Pruebas experimentales plt.show() tms.append(x + (time.time()-init)) tms.remove(tms[0]) Vds.append(power_supply_Vpos.power_supply_Vpos_query_r()) Vds.remove(Vds[0]) Ids.append(power_supply_Ipos.power_supply_Ipos_query_r()) Ids.remove(Ids[0]) Vgs.append(power_supply_Vneg.power_supply_Vneg_query_r()) Vgs.remove(Vgs[0]) Igs.append(power_supply_Ineg.power_supply_Ineg_query_r()) Igs.remove(Igs[0]) El script básicamente preguntará por los valores de tensión e intensidad que estén establecidos en cada momento en los canales e irá dibujando gráficas una tras otra eliminando los valores antiguos e introduciendo los más actuales. El dispositivo que se va a emplear en esta prueba es el amplificador de baja potencia MAX2430 de Maxim cuya banda de frecuencia de funcionamiento es entre 800 MHz y 1000 MHz. Dicho amplificador se puede alimentar con una tensión entre 3 V y 5.5 V. En este caso se le aplicará una tensión de alimentación de 3.6 V. La eficiencia del amplificador es del 24% y proporciona ganancias por encima de los 32 dB. La particularidad que tiene este dispositivo es que se alimenta con una tensión positiva constante pero la corriente que consume cambia al variar la potencia de RF a la entrada. Por ejemplo, con un valor de Vcc=5 V y sin entrada de RF, el amplificador estaría consumiendo 52 mA aproximadamente, valor que aumentaría una vez se le introduzca la RF. El montaje empleado se puede ver en la Figura 8.9 visualizádose individualmente el amplificador en la Figura 8.10. Figura 8.9 Montaje para la tercera prueba en el laboratorio. 8.3 Prueba 3: Monitoreo en tiempo real 93 Figura 8.10 Amplificador MAX2430. El objetivo de esta prueba es poder visualizar en las gráficas esa variación de consumo que realiza el dispositivo, para ello se han empleado dos terminales, una en la que se ejecute el script que imprime las gráficas continuamente (Figura 8.12), donde se han usado como límites de los ejes los mostrados en la Tabla 8.2 y en la otra en la que se introducirán los datos (Figura 8.13). Para conseguir el objetivo deseado, se aplicarán distintos valores de nivel de RF a la entrada al dispositivo para que vaya cambiando la intensidad que consume. Antes de empezar, se deberá configurar que las gráficas se impriman en una ventana nueva en lugar de en la terminal para poder visualizarlas de una manera fluida. Haciendo click en Herramientas-Preferencias se abrirá una ventana nueva, en la que habrá que seleccionar Terminal de IPyhon y en la pestaña Gráficas se seleccionará Salida: Automático tal y como se observa en la Figura 8.11. Figura 8.11 Configuración de Spyder para las gráficas. 94 Capítulo 8. Pruebas experimentales Inicialmente se limita en intensidad a un valor de 300 mA para evitar dañar el dispositivo. Posteriormente se inicia el valor de tensión a 0 V, por lo que el consumo será de 0 A tal y como se puede observar en la gráfica de la Figura 8.14. A continuación se alimentará el amplificador y con el generador de señal se irá variando manualmente el nivel de RF, ya que no tenemos control remoto del generador de señal. De esta manera se pueden observar cambios en el nivel de intensidad. Por último, se deja de alimentar al dispositivo estableciendo una tensión de 0 V, por lo que dejará de consumir. Cabe destacar que los valores de Vgs e Igs son nulos todo el tiempo porque no se está empleando el canal correspondiente de la fuente en esta prueba. Figura 8.12 Llamada al script para la apertura de las gráficas. Figura 8.13 Interacciones para el desarrollo de la tercera prueba experimental. Tabla 8.2 Tamaño de los ejes. Mínimo Máximo Vgs -1 1 Igs -10 10 Vds 0 5 Ids 0 200 8.3 Prueba 3: Monitoreo en tiempo real 95 Figura 8.14 Gráfica para el análisis del consumo del MAX2430. 9 Conclusiones y líneas futuras de trabajo Pero hay que seguir adelante. Las batallas hay que darlas se ganen o se pierdan; hay que darlas por el hecho mismo de darlas. Porque eso nos cumple, eso nos ratifica. José Luis Sampedro En este proyecto se ha dado especial énfasis al concepto de instrumentación virtual, el cual cada vez se encuentra más presente en los proyectos de toma de datos y actualmente se han desarrollado muchísimos sistemas para implementar aplicaciones que se basan en instrumentación virtual. Esto es debido a los numerosos beneficios y a la eficiencia que proporciona esta metodología de trabajo, permitiendo al usuario configurar y generar sus propios sistemas consiguiendo un buen desempeño de los equipos acompañado de una alta flexibilidad, reutilización y reconfiguración de los mismos, de manera que se reducen considerablemente los costes de desarrollo, mantenimiento, etc. Este concepto asegura, además de que el trabajo actual podrá ser empleado en el futuro, una flexibilidad y extensión a medida que cambian las necesidades funcionales y operativas del usuario, ya que al estar todo definido por software y no por hardware, la adaptación del instrumento según la necesidad es casi completa. Además se han explicado los diferentes buses existentes de comunicación utilizados en la instrumentación virtual que se pueden encontrar en la actualidad, haciendo un breve resumen de ellos como por ejemplo de RS 232, PXI... En este trabajo se ha empleado el bus GPIB, uno de los más usados en la actualidad debido a las altas prestaciones que ofrece. Para la comunicación con los equipos se ha hecho uso de comandos SCPI con el apoyo del módulo PyVISA de Python para enviar dichos comandos. Python ha proporcionado ahorro de tiempo y facilidad de programación, al tratarse de un lenguaje interpretado. En este proyecto se ha desarrollado un conjunto de códigos muy potentes mediante los cuales se consigue reducir notablemente el tiempo del usuario en la realización de medidas, ya que si no se contara con ellos, se hubieran tenido que introducir manualmente los valores correspondientes en cada medida. Los códigos desarrollados en este proyecto pueden ser empleados para la realización de múltiples pruebas independientemente de las realizadas en el mismo, ya que sirven para establecer parámetros básicos en una fuente de alimentación. Por ejemplo se pueden usar para realizar pruebas con otros transistores, amplificadores, diodos, reguladores, etc. En el futuro, se podría extender la funcionalidad de dichos códigos en función de las necesidades del usuario, como se viene explicando anteriormente gracias a la flexibilidad de la instrumentación virtual. Además, a pesar de estar perfectamente explicada la funcionalidad de cada módulo en esta memoria, se podría elaborar una interfaz gráfica que haga más intuitivo el uso del código y mejore la interactividad con el usuario. 97 Apéndice A Datos exportados de la prueba 2 Código A.1 Archivo test1.py. Vgs = -1.0 Vgs_out = [-1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003, -1.003] Vds_out = [0.0, 0.051, 0.102, 0.152, 0.203, 0.254, 0.292, 0.343, 0.394, 0.444, 0.495, 0.546, 0.597, 0.647, 0.711, 0.762, 0.812, 0.851, 0.901, 0.952, 1.003, 1.054, 1.104, 1.155, 1.206, 1.257, 1.308, 1.346, 1.396, 1.447, 1.498, 1.549, 1.6, 1.65, 1.701, 1.752, 1.803, 1.841, 1.892, 1.955, 1.993, 2.057, 2.107, 2.145, 2.209, 2.26, 2.31, 2.349, 2.399, 2.45, 2.501, 2.552, 2.602, 2.653, 2.704, 2.755, 2.806, 2.844, 2.894, 2.945, 2.996, 3.047, 3.098, 3.148, 3.199, 3.25, 3.301, 3.351, 3.39, 3.44, 3.491] Igs_out = [-0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1] Ids_out = [-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.6, 0.6] Vgs = -0.9 Vgs_out = [-0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901, -0.901] 99 100 Appendix A. Datos exportados de la prueba 2 Vds_out = [0.0, 0.051, 0.102, 0.152, 0.203, 0.254, 0.292, 0.343, 0.394, 0.444, 0.495, 0.546, 0.597, 0.66, 0.711, 0.762, 0.812, 0.851, 0.901, 0.952, 1.003, 1.054, 1.104, 1.155, 1.206, 1.257, 1.308, 1.346, 1.396, 1.447, 1.498, 1.549, 1.6, 1.65, 1.701, 1.752, 1.803, 1.841, 1.892, 1.942, 1.993, 2.057, 2.107, 2.145, 2.209, 2.26, 2.31, 2.349, 2.399, 2.45, 2.501, 2.552, 2.602, 2.653, 2.704, 2.755, 2.806, 2.844, 2.894, 2.945, 2.996, 3.047, 3.098, 3.148, 3.199, 3.25, 3.301, 3.351, 3.39, 3.44, 3.504] Igs_out = [-0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1] Ids_out = [-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6] Vgs = -0.8 Vgs_out = [-0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8, -0.8] Vds_out = [0.0, 0.051, 0.102, 0.152, 0.203, 0.254, 0.292, 0.343, 0.394, 0.444, 0.495, 0.546, 0.597, 0.647, 0.711, 0.762, 0.812, 0.851, 0.901, 0.952, 1.003, 1.054, 1.104, 1.155, 1.206, 1.257, 1.308, 1.346, 1.396, 1.447, 1.498, 1.549, 1.6, 1.65, 1.701, 1.752, 1.803, 1.841, 1.892, 1.942, 2.006, 2.044, 2.107, 2.158, 2.209, 2.26, 2.31, 2.349, 2.399, 2.45, 2.501, 2.552, 2.602, 2.653, 2.704, 2.755, 2.806, 2.844, 2.894, 2.945, 2.996, 3.047, 3.098, 3.148, 3.199, 3.25, 3.301, 3.351, 3.39, 3.44, 3.504] Igs_out = [-0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1] Ids_out = [-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.6, -0.5, -0.5, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6] Vgs = -0.7000000000000001 Vgs_out = [-0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711, -0.711] Vds_out = [0.0, 0.051, 0.102, 0.152, 0.203, 0.254, 0.292, 0.343, 0.394, 0.444, 0.495, 0.546, 0.597, 0.66, 0.698, 0.749, 0.812, 0.851, 0.901, 0.952, 1.003, 1.054, 1.104, 1.155, 1.206, 1.257, 1.308, 1.346, 1.396, 1.447, 1.498, 101 1.549, 1.6, 1.65, 1.701, 1.752, 1.803, 1.841, 1.892, 1.955, 1.993, 2.057, 2.095, 2.158, 2.209, 2.26, 2.31, 2.349, 2.399, 2.45, 2.501, 2.552, 2.602, 2.653, 2.704, 2.755, 2.806, 2.844, 2.894, 2.945, 2.996, 3.047, 3.098, 3.148, 3.199, 3.25, 3.301, 3.351, 3.39, 3.44, 3.491] Igs_out = [-0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1] Ids_out = [-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.6, -0.5, 0.6, 0.6, -0.5, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 1.7] Vgs = -0.6000000000000001 Vgs_out = [-0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.597, -0.609, -0.597, -0.609, -0.609, -0.597, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.597, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.597, -0.609, -0.609, -0.597, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609, -0.609] Vds_out = [0.0, 0.051, 0.102, 0.152, 0.203, 0.254, 0.292, 0.343, 0.394, 0.444, 0.495, 0.546, 0.597, 0.647, 0.698, 0.749, 0.812, 0.851, 0.901, 0.952, 1.003, 1.054, 1.104, 1.155, 1.206, 1.257, 1.308, 1.346, 1.396, 1.447, 1.498, 1.549, 1.6, 1.65, 1.701, 1.752, 1.803, 1.841, 1.892, 1.955, 1.993, 2.044, 2.107, 2.145, 2.209, 2.26, 2.31, 2.349, 2.399, 2.45, 2.501, 2.552, 2.602, 2.653, 2.704, 2.755, 2.806, 2.844, 2.894, 2.945, 2.996, 3.047, 3.098, 3.148, 3.199, 3.25, 3.301, 3.351, 3.39, 3.44, 3.491] Igs_out = [-0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1] Ids_out = [-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.6, -0.5, 0.6, -0.5, -0.5, -0.5, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7, 1.7] Vgs = -0.5000000000000001 Vgs_out = [-0.495, -0.508, -0.495, -0.495, -0.495, -0.495, -0.508, -0.508, -0.508, -0.495, -0.495, -0.508, -0.495, -0.495, -0.508, -0.495, -0.508, -0.508, -0.495, -0.495, -0.508, -0.495, -0.495, -0.508, -0.495, -0.495, -0.508, -0.495, -0.495, -0.495, -0.495, -0.495, -0.495, -0.495, -0.495, -0.495, -0.495, -0.495, -0.508, -0.508, -0.508, -0.495, -0.495, -0.508, -0.495, -0.508, -0.508, -0.508, -0.495, -0.495, -0.495, -0.495, -0.495, -0.508, -0.495, -0.508, -0.495, -0.495, -0.495, -0.495, -0.495, -0.495, -0.508, -0.495, -0.508, -0.508, -0.495, -0.495, -0.495, -0.508, -0.495] Vds_out = [0.0, 0.051, 0.102, 0.152, 0.203, 0.254, 0.292, 0.343, 0.394, 0.444, 0.495, 0.546, 0.609, 0.647, 0.711, 0.749, 0.812, 0.851, 0.901, 0.952, 1.003, 1.054, 1.104, 1.155, 1.206, 1.257, 1.308, 1.346, 1.396, 1.447, 1.498, 1.549, 1.6, 1.65, 1.701, 1.752, 1.803, 1.841, 1.892, 1.955, 2.006, 3CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. 50 60 70 80 15 16 17 18 Drain Efficiency (%) (W), Gain (dB) Psat, Gain, and Drain Efficiency vs Frequency of the CGH40010F in the CGH40010-TB VDD = 28 V, IDQ = 200 mA 0 10 20 30 40 10 11 12 13 14 3.50 3.55 3.60 3.65 3.70 3.75 3.80 3.85 3.90 Drain Efficiency (%) P SAT (W), Gain (dB) Frequency (GHz) Psat Gain Drain Eff Typical Performance Small Signal Gain and Return Loss vs Frequency of the CGH40010 in the CGH40010-TB PSAT, Gain, and Drain Efficiency vs Frequency of the CGH40010F in the CGH40010-TB VDD = 28 V, IDQ = 200 mA Gain (dB), Return Loss (dB) CGH40010 Nominal Fixture Performance S parameters 10 20 3.7 GHz 14.7 dB 3.8 GHz 14.31 dB 3.6 GHz 14.89 dB 3.4 GHz 14.9 dB 2.5 3 3.5 4 4.5 Frequency (GHz) -20 -10 0 3.8 GHz -8.549 dB 3.7 GHz -7.49 dB 3.6 GHz -7.497 dB 3.4 GHz -10.65 dB DB(|S(2,1)|) Fixture_2_G28V1L2w1_43_42 DB(|S(1,1)|) Fixture_2_G28V1L2w1_43_42 Efficiency Gain PSAT 4CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. Typical Performance Swept CW Data of CGH40010F vs. Output Power with Source and Load Impedances Optimized for Drain Efficiency at 2.0 GHz VDD = 28 V, IDQ = 200 mA Swept CW Data of CGH40010F vs. Output Power with Source and Load Impedances Optimized for Drain Efficiency at 3.6 GHz VDD = 28 V, IDQ = 200 mA 0 10 20 30 40 50 60 70 80 12 13 14 15 16 17 18 26 28 30 32 34 36 38 40 42 Drain Efficiency (%) Gain (dB) Pout (dBm) Swept CW Data of CGH40015F vs. Output Power with Source and Load Impedances Optimized for Drain Efficiency at 2.0 GHz VDD = 28 V, IDQ = 200 mA, Freq = 2.0 GHz 0 8 16 24 32 40 48 56 64 72 80 10 11 12 13 14 15 16 23 25 27 29 31 33 35 37 39 41 43 Drain Efficiency (%) Gain (dB) Pout (dBm) Swept CW Data of CGH40015F vs. Output Power with Source and Load Impedances Optimized for Drain Efficiency at 3.6 GHz VDD = 28 V, IDQ = 200 mA, Freq = 3.6 GHz 5CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. Typical Performance Swept CW Data of CGH40010F vs. Output Power with Source and Load Impedances Optimized for P1 Power at 3.6 GHz VDD = 28 V, IDQ = 200 mA Simulated Maximum Available Gain and K Factor of the CGH40010F VDD = 28 V, IDQ = 200 mA MAG (dB) K Factor 0 6 12 18 24 30 36 42 48 54 60 8 9 10 11 12 13 14 23 25 27 29 31 33 35 37 39 41 43 Drain Efficiency (%) Gain (dB) Pout (dBm) Swept CW Data of CGH40015F vs. Output Power with Source and Load Impedances Optimized for P1 Power at 3.6 GHz VDD = 28 V, IDQ = 200 mA, Freq = 3.6 GHz 6CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. Typical Noise Performance Simulated Minimum Noise Figure and Noise Resistance vs Frequency of the CGH40010F VDD = 28 V, IDQ = 100 mA Electrostatic Discharge (ESD) Classifications Parameter Symbol Class Test Methodology Human Body Model HBM 1A > 250 V JEDEC JESD22 A114-D Charge Device Model CDM 1 < 200 V JEDEC JESD22 C101-C Minimum Noise Figure (dB) Noise Resistance (Ohms) 7CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. Source and Load Impedances Frequency (MHz) Z Source Z Load 500 20.2 + j16.18 51.7 + j15.2 1000 8.38 + j9.46 41.4 + j28.5 1500 7.37 + j0 28.15 + j29 2500 3.19 - j4.76 19 + j9.2 3500 3.18 - j13.3 14.6 + j7.46 Note 1. VDD = 28V, IDQ = 200mA in the 440166 package. Note 2. Optimized for power, gain, PSAT and PAE. Note 3. When using this device at low frequency, series resistors should be used to maintain amplifier stability. CGH40010 Power Dissipation De-rating Curve Note 1. Area exceeds Maximum Case Operating Temperature (See Page 2). D Z Source Z Load G S 10 12 14 16 Power Dissipation (W) CGH40010F CW Power Dissipation De-rating Curve 0 2 4 6 8 0 25 50 75 100 125 150 175 200 225 250 Power Dissipation (W) Maximum Case Temperature (°C) Note 1 8CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. CGH40010-TB Demonstration Amplifier Circuit Bill of Materials Designator Description Qty R1,R2 RES,1/16W,0603,1%,0 OHMS 1 R3 RES,1/16W,0603,1%,47 OHMS 1 R4 RES,1/16W,0603,1%,100 OHMS 1 C6 CAP, 470PF, 5%,100V, 0603 1 C17 CAP, 33 UF, 20%, G CASE 1 C16 CAP, 1.0UF, 100V, 10%, X7R, 1210 1 C8 CAP 10UF 16V TANTALUM 1 C14 CAP, 100.0pF, +/-5%, 0603 1 C1 CAP, 0.5pF, +/-0.05pF, 0603 1 C2 CAP, 0.7pF, +/-0.1pF, 0603 1 C10,C11 CAP, 1.0pF, +/-0.1pF, 0603 2 C4,C12 CAP, 10.0pF,+/-5%, 0603 2 C5,C13 CAP, 39pF, +/-5%, 0603 2 C7,C15 CAP,33000PF, 0805,100V, X7R 2 J3,J4 CONN SMA STR PANEL JACK RECP 1 J2 HEADER RT>PLZ.1CEN LK 2 POS 1 J1 HEADER RT>PLZ .1CEN LK 5POS 1 - PCB, RO4350B, Er = 3.48, h = 20 mil 1 Q1 CGH40010F or CGH40010P 1 CGH40010-TB Demonstration Amplifier Circuit 9CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. CGH40010-TB Demonstration Amplifier Circuit Schematic CGH40010-TB Demonstration Amplifier Circuit Outline 10 CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. Typical Package S-Parameters for CGH40010 (Small Signal, VDS = 28 V, IDQ = 100 mA, angle in degrees) Frequency Mag S11 Ang S11 Mag S21 Ang S21 Mag S12 Ang S12 Mag S22 Ang S22 500 MHz 0.909 -123.34 17.19 108.22 0.027 21.36 0.343 -90.81 600 MHz 0.902 -133.06 14.86 101.82 0.028 15.60 0.329 -98.65 700 MHz 0.897 -140.73 13.04 96.45 0.028 10.87 0.321 -104.84 800 MHz 0.894 -146.96 11.58 91.78 0.029 6.84 0.317 -109.84 900 MHz 0.891 -152.16 10.41 87.61 0.029 3.33 0.316 -113.95 1.0 GHz 0.890 -156.60 9.43 83.82 0.029 0.19 0.318 -117.42 1.1 GHz 0.889 -160.47 8.62 80.31 0.029 -2.66 0.321 -120.40 1.2 GHz 0.888 -163.90 7.93 77.02 0.029 -5.28 0.326 -123.02 1.3 GHz 0.887 -166.99 7.34 73.90 0.029 -7.72 0.332 -125.36 1.4 GHz 0.887 -169.80 6.82 70.92 0.029 -10.01 0.338 -127.51 1.5 GHz 0.887 -172.39 6.38 68.05 0.029 -12.18 0.345 -129.50 1.6 GHz 0.887 -174.80 5.98 65.28 0.028 -14.24 0.353 -131.37 1.7 GHz 0.887 -177.07 5.63 62.59 0.028 -16.21 0.360 -133.15 1.8 GHz 0.887 -179.22 5.32 59.97 0.028 -18.09 0.369 -134.87 1.9 GHz 0.887 178.73 5.04 57.41 0.028 -19.91 0.377 -136.54 2.0 GHz 0.888 176.76 4.78 54.89 0.027 -21.66 0.385 -138.17 2.1 GHz 0.888 174.86 4.55 52.42 0.027 -23.35 0.393 -139.77 2.2 GHz 0.888 173.02 4.34 49.99 0.027 -24.98 0.402 -141.34 2.3 GHz 0.888 171.23 4.15 47.60 0.026 -26.56 0.410 -142.90 2.4 GHz 0.889 169.48 3.97 45.24 0.026 -28.08 0.418 -144.45 2.5 GHz 0.889 167.76 3.81 42.90 0.026 -29.55 0.426 -145.99 2.6 GHz 0.890 166.07 3.66 40.59 0.025 -30.98 0.434 -147.53 2.7 GHz 0.890 164.39 3.53 38.30 0.025 -32.36 0.442 -149.06 2.8 GHz 0.890 162.74 3.40 36.03 0.025 -33.69 0.450 -150.59 2.9 GHz 0.891 161.10 3.28 33.78 0.024 -34.97 0.458 -152.12 3.0 GHz 0.891 159.46 3.17 31.55 0.024 -36.20 0.465 -153.65 3.2 GHz 0.892 156.21 2.97 27.12 0.023 -38.51 0.479 -156.72 3.4 GHz 0.893 152.96 2.79 22.73 0.022 -40.63 0.493 -159.80 3.6 GHz 0.893 149.69 2.64 18.38 0.022 -42.52 0.505 -162.90 3.8 GHz 0.894 146.38 2.50 14.05 0.021 -44.17 0.517 -166.03 4.0 GHz 0.894 143.03 2.38 9.72 0.020 -45.56 0.527 -169.19 4.2 GHz 0.894 139.61 2.28 5.40 0.019 -46.67 0.537 -172.39 4.4 GHz 0.895 136.11 2.18 1.07 0.019 -47.46 0.546 -175.64 4.6 GHz 0.895 132.53 2.09 -3.29 0.018 -47.90 0.554 -178.95 4.8 GHz 0.895 128.85 2.01 -7.68 0.017 -47.96 0.561 177.69 5.0 GHz 0.895 125.06 1.94 -12.10 0.017 -47.61 0.568 174.25 5.2 GHz 0.895 121.15 1.88 -16.58 0.016 -46.84 0.573 170.72 5.4 GHz 0.895 117.11 1.82 -21.12 0.016 -45.67 0.578 167.10 5.6 GHz 0.895 112.94 1.77 -25.73 0.015 -44.12 0.582 163.38 5.8 GHz 0.895 108.62 1.72 -30.42 0.015 -42.30 0.586 159.54 6.0 GHz 0.895 104.15 1.68 -35.20 0.015 -40.33 0.589 155.56 Download this s-parameter file in “.s2p” format at http://www.cree.com/products/wireless_s-parameters.asp 11 CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. Typical Package S-Parameters for CGH40010 (Small Signal, VDS = 28 V, IDQ = 200 mA, angle in degrees) Frequency Mag S11 Ang S11 Mag S21 Ang S21 Mag S12 Ang S12 Mag S22 Ang S22 500 MHz 0.911 -130.62 18.41 105.41 0.022 19.44 0.303 -112.24 600 MHz 0.906 -139.65 15.80 99.47 0.023 14.31 0.299 -119.83 700 MHz 0.902 -146.70 13.80 94.50 0.023 10.17 0.298 -125.50 800 MHz 0.899 -152.41 12.22 90.19 0.023 6.68 0.299 -129.85 900 MHz 0.898 -157.17 10.96 86.34 0.024 3.67 0.302 -133.28 1.0 GHz 0.896 -161.24 9.92 82.82 0.024 0.99 0.305 -136.05 1.1 GHz 0.896 -164.79 9.06 79.56 0.024 -1.41 0.309 -138.34 1.2 GHz 0.895 -167.95 8.33 76.49 0.024 -3.62 0.314 -140.30 1.3 GHz 0.895 -170.80 7.70 73.57 0.023 -5.66 0.320 -142.01 1.4 GHz 0.894 -173.41 7.17 70.78 0.023 -7.56 0.326 -143.54 1.5 GHz 0.894 -175.82 6.70 68.08 0.023 -9.35 0.332 -144.94 1.6 GHz 0.894 -178.09 6.28 65.47 0.023 -11.05 0.338 -146.24 1.7 GHz 0.894 179.78 5.92 62.92 0.023 -12.66 0.345 -147.48 1.8 GHz 0.894 177.75 5.59 60.43 0.023 -14.19 0.352 -148.68 1.9 GHz 0.894 175.81 5.30 57.99 0.023 -15.65 0.358 -149.84 2.0 GHz 0.894 173.94 5.04 55.59 0.022 -17.05 0.365 -150.99 2.1 GHz 0.894 172.13 4.80 53.23 0.022 -18.39 0.372 -152.12 2.2 GHz 0.894 170.37 4.58 50.91 0.022 -19.67 0.379 -153.26 2.3 GHz 0.895 168.65 4.38 48.61 0.022 -20.90 0.386 -154.39 2.4 GHz 0.895 166.96 4.20 46.33 0.021 -22.08 0.393 -155.54 2.5 GHz 0.895 165.30 4.03 44.08 0.021 -23.20 0.400 -156.69 2.6 GHz 0.895 163.66 3.88 41.84 0.021 -24.27 0.407 -157.85 2.7 GHz 0.895 162.04 3.74 39.63 0.021 -25.28 0.414 -159.03 2.8 GHz 0.895 160.43 3.60 37.43 0.020 -26.25 0.420 -160.22 2.9 GHz 0.896 158.83 3.48 35.24 0.020 -27.16 0.427 -161.42 3.0 GHz 0.896 157.24 3.37 33.06 0.020 -28.02 0.433 -162.64 3.2 GHz 0.896 154.06 3.16 28.74 0.019 -29.57 0.446 -165.13 3.4 GHz 0.896 150.87 2.98 24.44 0.019 -30.88 0.457 -167.69 3.6 GHz 0.896 147.66 2.82 20.16 0.018 -31.95 0.468 -170.31 3.8 GHz 0.897 144.41 2.68 15.89 0.018 -32.76 0.478 -173.00 4.0 GHz 0.897 141.10 2.56 11.61 0.017 -33.30 0.488 -175.77 4.2 GHz 0.897 137.72 2.45 7.33 0.017 -33.55 0.497 -178.61 4.4 GHz 0.897 134.26 2.35 3.03 0.017 -33.50 0.505 178.47 4.6 GHz 0.897 130.71 2.26 -1.31 0.016 -33.18 0.512 175.46 4.8 GHz 0.896 127.06 2.17 -5.68 0.016 -32.58 0.518 172.36 5.0 GHz 0.896 123.30 2.10 -10.09 0.016 -31.74 0.524 169.16 5.2 GHz 0.896 119.42 2.04 -14.57 0.016 -30.72 0.529 165.86 5.4 GHz 0.896 115.41 1.98 -19.10 0.016 -29.60 0.534 162.44 5.6 GHz 0.896 111.26 1.92 -23.71 0.016 -28.46 0.537 158.89 5.8 GHz 0.895 106.97 1.87 -28.40 0.017 -27.41 0.540 155.20 6.0 GHz 0.895 102.53 1.82 -33.19 0.017 -26.54 0.543 151.36 Download this s-parameter file in “.s2p” format at http://www.cree.com/products/wireless_s-parameters.asp 12 CGH40010 Rev 3.1 Cree, Inc. 4600 Silicon Drive Durham, NC 27703 USA Tel: +1.919.313.5300 Fax: +1.919.869.2733 www.cree.com/wireless Copyright © 2006-2011 Cree, Inc. All rights reserved. The information in this document is subject to change without notice. Cree and the Cree logo are registered trademarks of Cree, Inc. Typical Package S-Parameters for CGH40010 (Small Signal, VDS = 28 V, IDQ = 500 mA, angle in degrees) Frequency Mag S11 Ang S11 Mag S21 Ang S21 Mag S12 Ang S12 Mag S22 Ang S22 500 MHz 0.914 -135.02 18.58 103.70 0.020 18.36 0.300 -126.80 600 MHz 0.909 -143.57 15.88 98.05 0.020 13.67 0.302 -133.51 700 MHz 0.906 -150.23 13.83 93.33 0.021 9.90 0.304 -138.40 800 MHz 0.904 -155.61 12.23 89.23 0.021 6.77 0.307 -142.08 900 MHz 0.903 -160.09 10.95 85.56 0.021 4.08 0.311 -144.94 1.0 GHz 0.902 -163.93 9.91 82.21 0.021 1.71 0.314 -147.23 1.1 GHz 0.901 -167.29 9.04 79.09 0.021 -0.41 0.319 -149.10 1.2 GHz 0.901 -170.29 8.31 76.15 0.021 -2.35 0.323 -150.69 1.3 GHz 0.900 -173.00 7.69 73.35 0.021 -4.12 0.328 -152.07 1.4 GHz 0.900 -175.50 7.15 70.66 0.021 -5.78 0.333 -153.29 1.5 GHz 0.900 -177.81 6.69 68.07 0.021 -7.32 0.338 -154.41 1.6 GHz 0.900 -179.98 6.27 65.54 0.021 -8.77 0.344 -155.44 1.7 GHz 0.900 177.96 5.91 63.08 0.020 -10.15 0.349 -156.43 1.8 GHz 0.899 176.00 5.59 60.67 0.020 -11.45 0.355 -157.38 1.9 GHz 0.899 174.12 5.30 58.30 0.020 -12.68 0.361 -158.30 2.0 GHz 0.899 172.31 5.04 55.97 0.020 -13.85 0.366 -159.22 2.1 GHz 0.899 170.54 4.80 53.67 0.020 -14.96 0.372 -160.14 2.2 GHz 0.900 168.83 4.58 51.40 0.020 -16.01 0.378 -161.06 2.3 GHz 0.900 167.15 4.39 49.16 0.019 -17.01 0.384 -161.99 2.4 GHz 0.900 165.49 4.21 46.94 0.019 -17.95 0.390 -162.93 2.5 GHz 0.900 163.87 4.04 44.73 0.019 -18.85 0.396 -163.88 2.6 GHz 0.900 162.26 3.89 42.54 0.019 -19.69 0.402 -164.86 2.7 GHz 0.900 160.66 3.75 40.37 0.019 -20.48 0.407 -165.85 2.8 GHz 0.900 159.08 3.62 38.21 0.019 -21.21 0.413 -166.86 2.9 GHz 0.900 157.51 3.50 36.05 0.018 -21.89 0.418 -167.89 3.0 GHz 0.900 155.93 3.39 33.91 0.018 -22.52 0.424 -168.95 3.2 GHz 0.900 152.79 3.18 29.65 0.018 -23.61 0.435 -171.12 3.4 GHz 0.900 149.64 3.00 25.40 0.017 -24.48 0.445 -173.38 3.6 GHz 0.900 146.45 2.85 21.17 0.017 -25.11 0.454 -175.73 3.8 GHz 0.900 143.23 2.71 16.93 0.017 -25.51 0.463 -178.17 4.0 GHz 0.900 139.94 2.58 12.69 0.017 -25.67 0.471 179.30 4.2 GHz 0.900 136.58 2.47 8.43 0.016 -25.60 0.479 176.67 4.4 GHz 0.899 133.14 2.38 4.15 0.016 -25.32 0.486 173.94 4.6 GHz 0.899 129.61 2.29 -0.17 0.016 -24.85 0.492 171.12 4.8 GHz 0.899 125.97 2.21 -4.53 0.016 -24.24 0.498 168.18 5.0 GHz 0.898 122.23 2.13 -8.94 0.016 -23.54 0.503 165.13 5.2 GHz 0.898 118.36 2.07 -13.41 0.016 -22.80 0.507 161.96 5.4 GHz 0.898 114.36 2.01 -17.95 0.017 -22.11 0.511 158.66 5.6 GHz 0.897 110.22 1.95 -22.56 0.017 -21.54 0.514 155.22 5.8 GHz 0.897 105.94 1.90 -27.26 0.018 -21.16 0.517 151.63 6.0 GHz 0.897 101.51 1.86 -32.04 0.019 -21.04 0.519 147.87 Download this s-parameter file in “.s2p” format at http://www.cree.com/products/wireless_s-parameters.asp Apéndice D Datasheet del amplificador MAX2430 125 For free samples & the latest literature: http://www.maxim-ic.com, or phone 1-800-998-8800. For small orders, phone 1-800-835-8769. ________________General Description The MAX2430 is a versatile, silicon RF power amplifier that operates directly from a 3V to 5.5V supply, making it suitable for 3-cell NiCd or 1-cell lithium-ion battery applications. It is designed for use in the 800MHz to 1000MHz frequency range and, at 915MHz, can produce +21dBm (125mW) of output power with greater than 32dB of gain at VCC = 3.6V. A unique shutdown function provides an off supply current of typically less than 1µA to save power during “idle slots” in time-division multiple-access (TDMA) transmissions. An external capacitor sets the RF output power envelope ramp time. External power control is also possible over a 15dB range. The amplifier’s input is matched on-chip to 50Ω. The output is an open collector that is easily matched to a 50Ωload with few external components. The MAX2430 is ideal as a driver amplifier for portable and mobile telephone systems, or as a complete power amplifier for other low-cost applications, such as those in the 915MHz spread-spectrum ISM band. It is fabricated with Maxim’s high-frequency bipolar transistor process and is available in a thermally enhanced, 16-pin narrow SO and miniature 16-pin PwrQSOP packages with heat slug. ________________________Applications Digital Cordless Phones 915MHz ISM-Band Applications Two-Way Pagers Wireless LANs Cellular Phones AM and FM Analog Transmitters ____________________________Features ♦Operates Over the 800MHz to 1000MHz Frequency Range ♦Delivers 125mW at 915MHz from +3.6V Supply (100mW typical from +3.0V supply) ♦Operates Directly from 3-Cell NiCd or 1-Cell Lithium-Ion Battery ♦Over 32dB Power Gain ♦RF Power Envelope Ramping is Programmable with One External Capacitor ♦Input Matched to 50Ω(VSWR < 2:1) ♦15dB Output Power Control Range ♦1µA Typical Shutdown Current MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver ________________________________________________________________ Maxim Integrated Products 1 16 15 14 13 12 11 10 9 1 2 3 4 5 6 7 8 GND3 GND3 GND4 GND4 GND4 GND4 BIAS RFOUT GND3 SHDN GND2 RFIN GND2 GND1 VCC1 VCC2 TOP VIEW MAX2430 Narrow SO/PwrQSOP Pin Configuration MAX2430 MASTER BIAS GAIN GND2 NOTE: MAX2430IEE (PwrQSOP PACKAGE) UNDERSIDE METAL SLUG MUST BE SOLDERED TO PCB GROUND PLANE. GND3 VCC1 VCC2 BIAS GND4 RFOUT 9 1087 11, 12, 13, 141, 15, 163, 5 SHDN GND1 RFIN 2 6 4DRIVER OUTPUT BIAS Functional Diagram 19-1093; Rev 2; 1/98 PART TEMP. RANGE PIN-PACKAGE EVALUATION KIT MANUAL FOLLOWS DATA SHEET Ordering Information MAX2430IEE -20°C to +85°C 16 PwrQSOP MAX2430ISE -20°C to +85°C 16 Narrow SO MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver 2 _______________________________________________________________________________________ ABSOLUTE MAXIMUM RATINGS DC ELECTRICAL CHARACTERISTICS (VCC = VCC1 = VCC2 = RFOUT = 3V to 5.5V, GND1 = GND2 = GND3 = GND4 = 0V, SHDN = 2.2V, BIAS = open, RFIN = open, TA= -20°C to +85°C, unless otherwise noted.) AC ELECTRICAL CHARACTERISTICS (MAX2430 EV kit, f = 915MHz, VCC = 3.6V, SHDN = VCC, RFOUT matched to 50Ωresistive load, output measurements taken after matching network, TA= +25°C, unless otherwise noted.) (Note 1) Stresses beyond those listed under “Absolute Maximum Ratings” may cause permanent damage to the device. These are stress ratings only, and functional operation of the device at these or any other conditions beyond those indicated in the operational sections of the specifications is not implied. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. VCC1, VCC2..........................................................................+6V SHDN, BIAS...................................................-0.3V, (VCC + 0.3V) RFIN.............................................................................-0.3V, +2V PRFIN..................................................................................-3dBm Continuous Power Dissipation (TA= +70°C) PwrQSOP (derate 20mW/°C above +70°C)......................1.6W Narrow SO (derate 20mW/°C above +70°C) ....................1.6W Operating Temperature Range ...........................-20°C to +85°C Storage Temperature Range.............................-65°C to +160°C Lead Temperature (soldering, 10sec).............................+300°C SHDN = low No RF input applied, VCC = 5.5V BIAS pin open SHDN = VCC CONDITIONS µA110ICC(OFF)Shutdown Supply Current mA52 70ICC V3 5.5VCC Supply Voltage Range Supply Current V2.2VBIAS BIAS Pin Voltage V2.2 VCC VSHDN(HI) SHDN High Input V0.4VSHDN(LO) SHDN Low Input µA18ISHDN SHDN Bias Current UNITSMIN TYP MAXSYMBOLPARAMETER VCC = 3.0V VCC = 3.6V (Note 2) PRFIN = -20dBm f1 = 915MHz, f2 = 916MHz, POUT per tone = 14dBm CONDITIONS dBm 19 20.4 P1dB POUT at 1dB Compression 20 21.4 MHz800 1000Frequency Range 32 34 dBGP Power Gain dBc-30OIM3Output IM3 UNITSMIN TYP MAXSYMBOLPARAMETER POUT = P1dB POUT = P1dB POUT = P1dB POUT = P1dB RFIN connected to 50Ωsource %24 η Efficiency dBc-40 dBc-262nd Harmonic 3rd Harmonic mA160ICCRF Supply Current 2:1VSWRIN Maximum Input VSWR VCC = 3V to 5.5V, PRFIN ≤-10dBm (Note 3) 8:1VSWROUT Maximum Output Load Mismatch dB7NFNoise Figure VCC = 3V to 5.5V, PRFIN ≤-12dBm (Note 4) 6:1VSWROUT Maximum Output Load Mismatch for Stability 31 33 MAX2430ISE MAX2430IEE MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver _______________________________________________________________________________________ 3 25 20 15 5 10 0 250 150 200 100 50 0 PIN (dBm) -15-20 -5-10-25 OUTPUT POWER AND CURRENT vs. INPUT POWER POUT (dBm) ICC (mA) POUT 3.6V 3.6V 5.5V 5.5V 3V 3V ICC 25 20 15 10 5 250 200 150 100 50 TEMPERATURE (°C) -20 0 20 40 60 80 100 OUTPUT POWER AND CURRENT vs. TEMPERATURE POUT (dBm) ICC (mA) -5.5V 3.6V 3V POUT @ PIN = -12dBm POUT @ PIN = -17dBm ICC @ PIN = -17dBm ICC @ PIN = -12dBm 30 35 40 25 20 15 10 5 MAX2430-03 PIN (dBm) -15-20 -5-10-25 OUTPUT POWER AND GAIN vs. INPUT POWER POUT (dBm) GAIN (dB) POUT 3.6V 3.6V 5.5V 5.5V 3V 3V GAIN 35 15 -20 40 60 80 100 OUTPUT POWER AND GAIN vs. TEMPERATURE (NORMAL OPERATING MODE) 20 30 MAX1691-4a TEMPERATURE (°C) 25 20 0 5.5V 3.6V 3.0V GAIN (dB)POUT (dBm) PIN = -12dBm GAIN POUT 4.0 3.5 3.0 2.0 1.5 2.5 1.0 MAX2430-05 FREQUENCY (MHz) 400 600 800 1000 1200 1400 1600 INPUT VSWR vs. FREQUENCY VSWR 3V 5V 150 100 50 -50 -100 0 -150 MAX2430-06 FREQUENCY (MHz) 800400 1200 1600 2000 RF INPUT IMPEDANCE vs. FREQUENCY INPUT IMPEDANCE (Ω) REAL IMAG __________________________________________Typical Operating Characteristics (MAX2430EVKIT-SO, f = 915MHz, VCC = 3.6V, SHDN = VCC, output matched to 50Ωresistive load, output measurements taken after matching network, TA= +25°C, unless otherwise noted.) Note 1: Minimum and maximum parameters are guaranteed by design. Note 2: For optimum performance at a given frequency, output matching network must be designed for maximum output power. See Applications Information section. Operation outside this frequency range is possible but has not been characterized. Note 3: No damage to the device. Note 4: All non-harmonically related outputs are more than 60dB below the desired signal for any electrical phase. AC ELECTRICAL CHARACTERISTICS (continued) (MAX2430 EV kit, f = 915MHz, VCC = 3.6V, SHDN = VCC, output matched to 50Ωresistive load, output measurements taken after matching network, TA= +25°C, unless otherwise noted.) (Note 1) CONDITIONS BIAS pin capacitor C1 = 120pF BIAS pin capacitor C1 = 2.2nF dB50 µs 1 10 Turn-On/Off Times UNITSMIN TYP MAXSYMBOLPARAMETER SHDN = 0.4V, PIN = -10dBm dB47 RFIN to RFOUT Isolation MAX2430ISE MAX2430IEE MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver 4 _______________________________________________________________________________________ _____________________________Typical Operating Characteristics (continued) (MAX2430EVKIT-SO, f = 915MHz, VCC = 3.6V, SHDN = VCC, output matched to 50Ωresistive load, output measurements taken after matching network, TA= +25°C, unless otherwise noted.) 1V/div MAX2430-10 5µs/div RF OUTPUT ENVELOPE CHARACTERISTICS vs. SHUTDOWN CONTROL VCC = 3.0V BIAS CAPACITOR = 1nF POUT = 20.4dBm (110mW) tON ≈ tOFF = 5µs 3V 0V SHDN 3V 0V 25 20 15 10 5 0 -5 -10 -15 200 175 150 125 100 75 50 25 0 0.4 0.8 1.2 1.6 2.0 2.4 BIAS PIN VOLTAGE (V) OUTPUT POWER AND SUPPLY CURRENT vs. EXTERNAL CONTROL VOLTAGE OUTPUT POWER (dBm) ICC (mA) TA = -20°C TA = +25°C TA = -20°C TA = +85°C PIN = -12dBm VCC = 3.6V TA = +85°C ICC POUT TA = +25°C – – – – – – – – 30 20 10 0 -10 -20 -30 -40 -50 -60 123456 MAX2430-07 HARMONIC NUMBER OUTPUT POWER AND HARMONICS OUTPUT SPECTRUM (dBm) VCC = 3.0V VCC = 3.6V VCC = 4.5V VCC = 5.5V +20.4dBm -4.93dBm -16.7dBm-47.6 dBm -35.3dBm -54.0 dBm f1 = 915MHz POUT = +20.4dBm -20 -25 -30 -35 -40 -45 -50 -55 -60 -65-15 -10 -5 0 5 10 15 20 MAX2430-08 OUTPUT POWER PER TONE (dBm) INTERMODULATION DISTORTION vs. OUTPUT POWER AND TEMPERATURE INTERMODULATION DISTORTION (dBc) VCC = 3.6V f1 = 915MHz f2 = 916MHz IM3 IM5 TA = -20°C TA = -20°C TA = +25°C TA = +85°C TA = +25°C TA = +85°C -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75-10 -5 0 5 10 15 20 MAX2430-09 OUTPUT POWER PER TONE (dBm) INTERMODULATION DISTORTION vs. OUTPUT POWER AND VCC INTERMODULATION DISTORTION (dBc) 3.0V 3.6V 3.0V 3.6V 5.5V 5.5V IM3 IM5 MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver _______________________________________________________________________________________ 5 _____________________Pin Description NAME FUNCTION 1, 15, 16 GND3 Driver Stage Ground. Connect directly to ground plane. 2SHDN Shutdown Input (TTL/CMOS) PIN 3, 5 GND2 Input Stage Ground. Connect directly to ground plane. 4 RFIN RF Input. Internally matched to 50Ω. Requires series DC-blocking capacitor. 9 RFOUT Output Transistor. Open Collector. 8 VCC2 Driver Stage Output. Connect to supply through inductor (see Applications Information ). 7 VCC1 Bias Circuitry Supply. Connect to supply. Bypass with 1000pF capacitor. 6 GND1 Bias Circuitry Ground. Connect directly to ground plane. 11–14 GND4 Output Stage Ground. Connect directly to ground plane. 10 BIAS Output Stage Bias Pin. Connect capacitor to GND to control start-up power envelope. Drive directly for power control (see Applications Information ). Detailed Description The MAX2430 consists of a large power output transistor driven by a capacitively coupled driver stage (see Functional Diagram ). The driver and front-end gain stages are DC-connected and biased on-chip from the master bias cell. The master bias cell also controls the output stage bias circuit. The input impedance at the RFIN pin is internally matched to 50Ω, while the output stage must be tuned and filtered externally for any narrow-band frequency range of interest between 800MHz and 1000MHz. The driver amplifier requires an external inductor at the VCC2 pin to provide DC bias and proper matching to the output stage. This inductor’s value depends on the package type and frequency range of operation; typically it will vary between 5nH and 22nH. The output transistor at the RFOUT pin requires an external RF choke inductor connected to the supply for DC bias, and a matching network to transform the desired external load impedance to the optimal internal load impedance of approximately 15Ω. The MAX2430 includes a unique shutdown feature. The TTL/CMOS-compatible SHDN input allows the device to be shut down completely without the use of any external components. Also, the RF output power envelope ramp time can be programmed with a single external capacitor connected between the BIAS pin and ground. Pulling the shutdown pin (SHDN) high powers on the master bias circuit, which in turn charges the external capacitor tied to the BIAS pin using a controlled current. The voltage at BIAS controls the output power level, which ramps until the BIAS pin is internally clamped to approximately 2.2V. The envelope rampdown time is controlled in a similar manner when the SHDN pin is pulled low. Variable output power control over a 15dB range is also possible by forcing the voltage on the BIAS pin externally from 0.6V to 2.4V. During the on state (SHDN = high), the power-supply bias current is typically 52mA with no RF applied to the input. During the off state (SHDN = low), the supply current is typically reduced to less than 1µA. Note: MAX2430IEE (PwrQSOP package) underside metal slug must be soldered to PCB ground plane. MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver 6 _______________________________________________________________________________________ __________Applications Information Output Matching The optimum internal load impedance seen by RFOUT is approximately 15Ω. This on-chip low drive impedance provides maximum power transfer and best efficiency under low (3V) supply conditions where the voltage-swing headroom is limited. For example, driving an output power of 21.3dBm (135mW) into 50Ω translates to a 7.35Vp-p swing at the output. An RF amplifier would require at least a 4.5V supply to drive a 50Ωload directly. However, driving 21.3dBm into 15Ω translates to 4.02Vp-p. The MAX2430 can achieve a voltage swing of 4.02Vp-p or 2.01Vp from a 3V supply voltage without saturating the output transistor. Figure 1 shows the MAX2430 configured for 800MHz to 1000MHz operation. The output matching circuitry converts the desired 50Ωload impedance to the 15Ωopti- mal load seen by the output transistor’s collector. This configuration uses a low-loss, controlled-Q inductor network. Starting from the RFOUT pin, this network consists of a series L (which includes the 5nH package parasitic inductance), series C, and shunt C. The design equations for this network are as follows: R1 = Output resistance as seen by the collector ~15Ω RL= Desired load resistance The controlled-Q inductor network requires that RL> R1 and Q > . Choose Q and compute matching components as given below: where ωequals the center frequency in radians/second. Recommended starting values for L1 and L2 are given in Table 1. Let A R x R1 R1 X Q x R1 X X A X R x R1 / A L1 = X / - 5nH of package inductance C = 1 X C = 1 X L2 L Co L Csh L L OCo SH Csh =− () = =− = ω ω ω R / R1 1 L − () MAX2430 OUTPUT BIAS GAIN 50Ω ˜50Ω GND2 GND3 VCC1 VCC VCC 1nF 1nF 2.2nF VCC2 BIAS GND4 RFOUT THREE-ELEMENT MATCHING NETWORK CO AND CSH TUNED FOR MAXIMUM POWER OUTPUT AT THE DESIRED FREQUENCY BETWEEN 800MHz AND 1000MHz. MAX2430IEE (PwrQSOP) UNDERSIDE METAL SLUG MUST BE SOLDERED TO PCB GROUND PLANE. L2 = 8nH FOR NARROW SO PACKAGE (MAX2430ISE) L2 = 12nH FOR PwrQSOP PACKAGE (MAX2430IEE) * 9 5nH LC 47nH RC 470Ω L2* RF OUTPUT CSH CO L1 8nH SHDN ON OFF GND1 RFIN CIN 1nF DRIVER MASTER BIAS ˜15Ω RF INPUT RL Figure 1. Typical Application Circuit L1(nH) 400 to 600* 22 800 to 1000 8 Table 1. Recommended L1 and L2 Starting Values *Not characterized f = ω/ 2π (MHz) 600 to 800* 15 MAX2430ISE L2(nH) 8 12 8 MAX2430IEE L2(nH) 12 18 12 MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver _______________________________________________________________________________________ 7 An overall loaded Q ≤5 can be achieved with readily available surface-mount components. This network absorbs the parasitic elements of the surface-mount components in such a way that they do not negatively impact the stopband characteristics; in fact, they can improve the overall stopband attenuation with properly chosen components. High-Q components (Q > 100) that have self-resonance near the 3rd harmonic of the intended output frequency should provide good passband characteristics with low loss, while offering good attenuation of the undesired 2nd and 3rd harmonics that are generated. Note that most applications will require extra filtering components and good shielding after the matching network to ensure absolute attenuation of out-of-band signals in order to meet out-of-band spurious suppression requirements. Output Mismatch Considerations The MAX2430 will typically withstand an output load mismatch of VSWR = 6:1 at any electrical phase without exhibiting oscillatory behavior over the entire supply voltage range of 3V to 5.5V. Resistor RCenhances stability under load mismatch conditions and does not affect normal operation of the circuit. BIAS Pin The voltage at the BIAS pin controls the output power transistor biasing. At BIAS = 0.6V, the output transistor is biased to Class C, resulting in low gain and relatively nonlinear power. Above 2V, the output stage is biased to Class AB. Note that changing the bias voltage may degrade the output transistor’s stability. The shutdown pin (SHDN) controls the master bias circuit, which in turn provides a control current of approximately ±500µA to the external capacitor connected to the BIAS pin. When SHDN transitions from low to high, the BIAS pin capacitor charges up and clamps at approximately 2.2V. When SHDN transitions from high to low, the BIAS pin capacitor is discharged to nearly ground. This results in a power-up/power-down ramping of the RF envelope, which can be approximated by the following equation: tramp ≅CBIAS x 2.2V / 0.5mA = 4400Ωx CBIAS Therefore, a 2.2nF capacitor will give approximately 10µs ramp time. The BIAS pin can also be used to control the final output power and gain over a 15dB range, by forcing the BIAS pin voltage externally between 0.6V and 2.4V. Note that the BIAS pin driver must be able to source/sink 700µA. Forcing the BIAS pin directly in this manner disrupts the RF envelope timing function. To avoid this, place a diode in series with the BIAS pin control circuit, as shown in Figure 2. Note that when using the BIAS pin for power control, linearity is much degraded at the lower power levels. Operating Frequency Range The MAX2430 has been characterized for operation in the 800MHz to 1000MHz range. Operation outside this range is possible, but the following issues must be considered: • Gain increases substantially at lower frequencies, possibly causing stability problems. • Useful gain and output power levels drop rapidly above 1000MHz. MAX2430 BIAS 10 0V TO 2.0V POWER CONTROL 2 CBIAS SHDN MASTER BIAS 2.2V CLAMP OUTPUT BIAS Figure 2. Power-Control Application Using BIAS Pin MAX2430 Low-Voltage, Silicon RF Power Amplifier/Predriver 8 _______________________________________________________________________________________ ________________________________________________________Package Information PSSOPPS.EPS