arduino serial read and matlab

15
Caracterizaci´ on de circuitos integrados utilizando MATLAB y Arduino 26 de enero de 2015 1. Introducci´ on La medici´ on de circuitos digitales es una tarea tediosa debido a la gran cantidad de datos que deben ser tomados para caracterizar un chip. En este trabajo, se describe el funcionamiento de un sistema de adquisici´ on e inter- pretaci´ on de datos. ´ Este opera de forma autom´ atica utilizando una interfaz entre MATLAB y Arduino para caracterizar circuitos integrados digitales. Adem´ as, almacena los datos en diferentes formatos para su posterior visuali- zaci´ on y procesamiento. El documento est´ a dividido de la siguiente manera: en la secci´ on 2 se presentan las caracter´ ısticas principales de la tarjeta de pruebas (Arduino) y Script de MATLAB. En la secci´ on 3 se describe bre- vemente el la configuraci´ on y el funcionamiento general del sistema. En la secci´ on 4 se muestran algunos resultados del sitema en operaci´ on. Finalmen- te, en la secci´ on 5 se presentan las conclusiones. 2. Caracteristicas princiapales de tarjeta Ar- duino y Scrip de MATLAB La velocidad y resoluci´ on de las mediciones son limitadas por las carac- ter´ ısticas del ADC embebido en la tarjeta de adquisici´ on de datos, en este caso la tarjeta Arduino UNO. Las principales caracter´ ısticas del convertidor anal´ ogico-digital se muestran en la Tabla 1. 1

Upload: chester-zaid-rd

Post on 08-Nov-2015

51 views

Category:

Documents


4 download

DESCRIPTION

Arduino data acquisition and MATLAB

TRANSCRIPT

  • Caracterizacion de circuitos integradosutilizando MATLAB y Arduino

    26 de enero de 2015

    1. Introduccion

    La medicion de circuitos digitales es una tarea tediosa debido a la grancantidad de datos que deben ser tomados para caracterizar un chip. En estetrabajo, se describe el funcionamiento de un sistema de adquisicion e inter-pretacion de datos. Este opera de forma automatica utilizando una interfazentre MATLAB y Arduino para caracterizar circuitos integrados digitales.Ademas, almacena los datos en diferentes formatos para su posterior visuali-zacion y procesamiento. El documento esta dividido de la siguiente manera:en la seccion 2 se presentan las caractersticas principales de la tarjeta depruebas (Arduino) y Script de MATLAB. En la seccion 3 se describe bre-vemente el la configuracion y el funcionamiento general del sistema. En laseccion 4 se muestran algunos resultados del sitema en operacion. Finalmen-te, en la seccion 5 se presentan las conclusiones.

    2. Caracteristicas princiapales de tarjeta Ar-

    duino y Scrip de MATLAB

    La velocidad y resolucion de las mediciones son limitadas por las carac-tersticas del ADC embebido en la tarjeta de adquisicion de datos, en estecaso la tarjeta Arduino UNO. Las principales caractersticas del convertidoranalogico-digital se muestran en la Tabla 1.

    1

  • Caractersticas de operacion de ADC Arduino

    6 Canales de lectura (input analog pins between 0-5).

    10-bits de resolucion (integer values between 0 and 1023).

    Resolucion maxima 4.9 mV por unidad.

    Permite un maximo de 10,000 lecturas por segundo.

    Tabla 1: Caractersticas principales de convertidor analogico-digital embebidoen tarjeta Arduino UNO.

    Ademas de las caractersticas presentadas en la Tabla 1 la tarjeta Arduinocuenta con 14 terminales digitales configurables I/O que permiten la imple-mentacion de multiples sistemas digitales. La distribucion de terminales enla tarjeta Arduino se muestran en la Figura 1

    Figura 1: Distribucion de pines en tarjeta Arduino UNO.

    2

  • El Arduino UNO cuenta ademas con un emulador USB de puerto serial(protocolo RS232) que permite una sencilla comunicacion con PCs.

    3. Configuracion del sistema

    En este trabajo se presenta una configuracion muy sencilla y generaldel sistema. La tarjeta arduino tiene la tarea principal de adquirir senalesanalogicas del chip de prueba. Estas senales son digitalizadas gracias a unADC embebido en la tarjeta y posteriormente son enviados al PC para suvisualizacion y procesamiento en MatLab. El PC y la tarjeta Arduino soncomunicados mediante el protocolo RS232 que permite envo y recepcion dedatos entre ambos dispositivos. En la Figura 2 se muestra la configuraciongeneral del sistema implementado.

    Figura 2: Configuracion del sistema utilizado para caracterizar circuitos deprueba.

    Los voltajes de operacion entre dispositivo no son compatibles, por lotanto, es necesario un circuito de acondicionamiento de senales entre la tarjetaArduino y el circuito de prueba. Este acondicionamiento de senales se realizautilizando buffers que garantizan 1.8 V en las senales digitales de entrada delcircuito de prueba, as como, senales TTL hacia la tarjeta arduino. En estetrabajo se miden algunas de las caracteristicas de operacion del circuito decalibracion de offset tomado de [1].

    La comunicacion serial entre la tarjeta Arduino y el PC con MATLABopera con una tasa de 9600 bits/sec. Debido a la pobre velocidad de trasfe-rencia de datos no es posible visualizar en tiempo real el comportamiento de

    3

  • dispositivos a muy alta frecuencia (cientos de kHz). En la Tabla 2 se el fun-cionamiento general del Script de MATLAB. De manera similar en la Tabla3 se presenta la descripcion del algoritmo implementado en el Arduino.

    Script implementado en MATLAB

    *Inicializa vectores de datos y comunicacion serial.

    *Enva senal para comenzar comunicacion.

    *Selecciona el numero de datos y senales por recibir.

    *Espera por un dato.

    *Mapea en el grafico el dato recibido y se guarda en vector.

    *Detiene comunicacion una vez que el numero de datos de interes es alcanzado..

    *Cierra el puerto serial.

    *Escribe archivo de texto en el cual almacena mediciones.

    Tabla 2: Descripcion del Script implementado en MATLAB.

    4

  • Algoritmo de control implementado tarjeta ArduinoInicializacion de variables y puerto serialif(comunicacion establecida){if(senal de inicio recibida){contador=000 signo=senal de signo;while(signo==signo and contador
  • vs Voltaje. El script de Matlab puede almacenar datos en formato .txt o.dat para su analisis en diferente software. Los datos son almacenados en unarchivo de texto como se muestra en la Figura 4.

    Figura 3: Configuracion del sistema utilizado para caracterizar circuitos deprueba.

    Figura 4: Datos de salida almacenados en archivo de texto.

    Para el ejemplo que se muestra en la Figura 3 se utilizo una Rref = 3k locual equivale a un incremento de aproximadamente 57.1 mV por escalon [1].En esta figura se observa que el proceso se detiene cuando la senal de salidaes menor que la senal de referencia, es decir, el sigo de la diferencia pasa de

    6

  • ser positivo a negativo. Esta condicion de cambio de signo es contempladaen el algoritmo de control mostrado en la Tabla 3.

    5. Conclusiones

    En este trabajo se presenta las caractersticas principales de un sistemadesarrollado para automatizar la caracterizacion de circuitos bajo prueba.Las limitaciones del protocolo RS232 restringen el sistema para ser usadoen caracterizacion de circuitos de prueba que operan en baja frecuencia. Sinembargo, este cuenta con otras caractersticas que pueden ser explotadas.Los 6 canales analogicos y el ADC de 10 bits de resolucion embebidos enel Arduino nos permiten caracterizar el dispositivo con un bajo margen deerror. Ademas, la comunicacion con MATLAB permite la visualizacion, al-macenamiento y procesamiento de datos para una mejor interpretacion.

    Apendice A

    Script de MatLab

    numero muestras=input ( numero de muestras : ) ;s i g n a l s=input ( numero de s e n a l e s : )port=input ( PORT: )close a l l ;clc ;y1=zeros (1 ,10000) ; %Vector donde se guardaran l o s dato sy2=zeros (1 ,10000) ; %Vector donde se guardaran l o s dato sy3=zeros (1 ,10000) ; %Vector donde se guardaran l o s dato scontador=zeros (1 ,10000) ;%I n i c i a l i z o e l puer to s e r i a ldelete ( i n s t r f i n d ({ Port } ,{ COM7 }) ) ;p u e r t o s e r i a l=s e r i a l ( COM7 ) ;p u e r t o s e r i a l . BaudRate=9600;warning ( o f f , MATLAB: s e r i a l : f s c a n f : unsuccess fu lRead ) ;

    %Abrir puer to s e r i a l

    7

  • fopen ( p u e r t o s e r i a l ) ;%contador demuestrascontador muestras=1;%ventana para l a g r a f i c af igure ( Name , S e r i a l t e s t )t i t l e ( MATLAB+ARDUINO ) ;xlabel ( Numero de muestras ) ;ylabel ( Vo l ta j e (V) ) ;grid on ;hold on ;// Bucle while para que tome y d ibu j e l a s muestras que

    queremoswhile contador muestras

  • plot ( contador muestras , y1 ( contado r muestras ) , b , LineWidth ,4 ) ;

    plot ( contador muestras , y2 ( contado r muestras ) , xr , LineWidth ,4 ) ;

    plot ( contador muestras , y3 ( contado r muestras ) , og , LineWidth ,4 ) ;

    legend ( Vref , Vout , Signo )otherwi s e

    plot ( contador muestras , y1 ( contado r muestras ) , b , LineWidth ,4 ) ;

    legend ( Vref )end

    fprintf ( contador= %d\n , cont )drawnow ;contador muestras=contado r muestras+1;end%Cierro l a conexi on con e l puer to s e r i a l y e l imino l a s

    v a r i a b l e sfc lose ( p u e r t o s e r i a l ) ;delete ( p u e r t o s e r i a l ) ;

    f igure ;switch s i g n a l scase 1

    plot ( contador ( 1 : contador muestras 1) , y1 ( 1 :contador muestras 1) , b , LineWidth ,4 ) ;

    hold on ;legend ( Vref )

    case 2plot ( contador ( 1 : contador muestras 1) , y1 ( 1 :

    contador muestras 1) , b , LineWidth ,4 ) ;hold on ;plot ( contador ( 1 : contador muestras 1) , y2 ( 1 :

    contador muestras 1) , xr , LineWidth ,4 ) ;hold on ;legend ( Vref , Vout )

    9

  • case 3plot ( contador ( 1 : contador muestras 1) , y1 ( 1 :

    contador muestras 1) , b , LineWidth ,4 ) ;hold on ;plot ( contador ( 1 : contador muestras 1) , y2 ( 1 :

    contador muestras 1) , xr , LineWidth ,4 ) ;hold on ;plot ( contador ( 1 : contador muestras 1) , y3 ( 1 :

    contador muestras 1) , og , LineWidth ,4 ) ;hold on ;legend ( Vref , Vout , Signo )

    otherwi s eplot ( contador ( 1 : contador muestras 1) , y1 ( 1 :

    contador muestras 1) , b , LineWidth ,4 ) ;hold on ;legend ( Vref )

    end

    %guarda datos en t x tf i d=fopen ( data . txt , w ) ;fpr intf ( f i d , n . data s i g n a l 1 s i g n a l 2

    s i g n a l 3 ) ;fpr intf ( f i d , \n ) ;for k=1:1: numero muestrasc contador=mat2str ( contador (k ) ) ;c s i g n a l 1=mat2str ( f loor ( y1 (k ) 1 0 0 0 0 0 ) /100000)

    ;c s i g n a l 2=mat2str ( f loor ( y2 (k ) 1 0 0 0 0 0 ) /100000)

    ;c s i g n a l 3=mat2str ( f loor ( y3 (k ) 1 0 0 0 0 0 ) /100000)

    ;c s i g n a l s=s t r c a t ( c contador , \ t , \ t ,

    c s i gna l 1 , \ t , \ t , c s i gna l 2 , \ t , \ t ,c s i g n a l 3 ) ;

    fpr intf ( f i d , c s i g n a l s ) ;fpr intf ( f i d , \n ) ;

    endfc lose ( f i d ) ;

    10

  • save ( data .mat ) ;clear a l l ;

    Apendice B

    Algoritmo en Arduino

    int s i g n a l p i n 1=A0 ; //Analog 0int s i g n a l p i n 2=A1 ; //Analog 1int s i g n a l p i n 3=A2 ; //Analog 2int outPin1= 7 ;int outPin2= 6 ;int outPin3= 5 ;int outPin4= 4 ;

    int inPin1= 3 ;

    int s i g n a l 1 =0;int s i g n a l 2 =0;int s i g n a l 3 =0;int s igno1 ;int s igno2 ;int cont=0;int i ;void setup ( ){S e r i a l . begin (9600) ;pinMode ( outPin1 , OUTPUT) ;pinMode ( outPin2 , OUTPUT) ;pinMode ( outPin3 , OUTPUT) ;pinMode ( outPin4 , OUTPUT) ;pinMode ( inPin1 , INPUT) ;}

    11

  • void loop ( ) {

    d i g i t a lWr i t e ( outPin1 , LOW) ; // contador en cero sd i g i t a lWr i t e ( outPin2 , LOW) ;d i g i t a lWr i t e ( outPin3 , LOW) ;de lay (500) ;s i gno1=d ig i ta lRead ( inPin1 ) ;s i gno2=s igno1 ;d i g i t a lWr i t e ( outPin4 , s igno1 ) ;

    //envio de dato ss i g n a l 1=analogRead ( s i g n a l p i n 1 ) ;S e r i a l . p r i n t l n ( s i g n a l 1 ) ;de lay (50) ;s i g n a l 2=analogRead ( s i g n a l p i n 2 ) ;S e r i a l . p r i n t l n ( s i g n a l 2 ) ;de lay (50) ;s i g n a l 3=analogRead ( s i g n a l p i n 3 ) ;S e r i a l . p r i n t l n ( s i g n a l 3 ) ;de lay (50) ;S e r i a l . p r i n t l n ( cont ) ;de lay (50) ;//contador f r e c ap ro x= 1 Hz

    while ( s igno1==s igno2 ){s igno2=d ig i ta lRead ( inPin1 ) ;

    s i g n a l 1=analogRead ( s i g n a l p i n 1 ) ;S e r i a l . p r i n t l n ( s i g n a l 1 ) ;de lay (50) ;s i g n a l 2=analogRead ( s i g n a l p i n 2 ) ;S e r i a l . p r i n t l n ( s i g n a l 2 ) ;de lay (50) ;s i g n a l 3=analogRead ( s i g n a l p i n 3 ) ;S e r i a l . p r i n t l n ( s i g n a l 3 ) ;de lay (50) ;S e r i a l . p r i n t l n ( cont ) ;

    12

  • delay (50) ;

    i f ( i ==10){

    cont=cont+1;i =0;

    }

    i=i +1;

    i f ( cont>=7){

    cont=7;}

    //cont b inar ioswitch ( cont ) {

    case 1 :d i g i t a lWr i t e ( outPin1 , HIGH) ;d i g i t a lWr i t e ( outPin2 , LOW) ;d i g i t a lWr i t e ( outPin3 , LOW) ;break ;

    case 2 :d i g i t a lWr i t e ( outPin1 , LOW) ;d i g i t a lWr i t e ( outPin2 , HIGH) ;d i g i t a lWr i t e ( outPin3 , LOW) ;break ;

    case 3 :d i g i t a lWr i t e ( outPin1 , HIGH) ;d i g i t a lWr i t e ( outPin2 , HIGH) ;d i g i t a lWr i t e ( outPin3 , LOW) ;break ;

    case 4 :d i g i t a lWr i t e ( outPin1 , LOW) ;d i g i t a lWr i t e ( outPin2 , LOW) ;d i g i t a lWr i t e ( outPin3 , HIGH) ;break ;

    13

  • case 5 :d i g i t a lWr i t e ( outPin1 , HIGH) ;d i g i t a lWr i t e ( outPin2 , LOW) ;d i g i t a lWr i t e ( outPin3 , HIGH) ;break ;

    case 6 :d i g i t a lWr i t e ( outPin1 , LOW) ;d i g i t a lWr i t e ( outPin2 , HIGH) ;d i g i t a lWr i t e ( outPin3 , HIGH) ;break ;

    case 7 :d i g i t a lWr i t e ( outPin1 , HIGH) ;d i g i t a lWr i t e ( outPin2 , HIGH) ;d i g i t a lWr i t e ( outPin3 , HIGH) ;break ;

    }}

    while (1 ){

    s i g n a l 1=analogRead ( s i g n a l p i n 1 ) ;S e r i a l . p r i n t l n ( s i g n a l 1 ) ;de lay (50) ;s i g n a l 2=analogRead ( s i g n a l p i n 2 ) ;S e r i a l . p r i n t l n ( s i g n a l 2 ) ;de lay (50) ;s i g n a l 3=analogRead ( s i g n a l p i n 3 ) ;S e r i a l . p r i n t l n ( s i g n a l 3 ) ;de lay (50) ;S e r i a l . p r i n t l n ( cont ) ;de lay (50) ;}

    }

    14

  • Referencias

    [1] E. Guerrero, L. Carrillo-MartAnez, M. Sanz-Pascual, J. Molina, N. Me-drano, and B. Calvo, Offset and gain calibration circuit for mim-isfetdevices, Analog Integrated Circuits and Signal Processing, vol. 76, no. 3,pp. 321333, 2013.

    15