Implementaci on de un generador de funciones arbitrarias ... · de senales,~ entre los que se halla...

11
Implementaci´ on de un generador de funciones arbitrarias con FPGA Matias Risaro y Marcelo Luda 22 de diciembre de 2014 Resumen En el presente trabajo se detalla la construcci´ on de un generador de funciones arbitrarias digital de dos canales, utilizando una placa FPGA y electr´ onica de conversi´ ondigital-anal´ogica. Se desarroll´ o una interfaz serie para definir la frecuencia de trabajo y cargar los datos de las funciones arbitrarias. Adem´ as el dispositivo construido puede sincronizarse a una funci´ on TTL de referencia a trav´ es de un PLL digital dise˜ nado. Se incluye el dise˜ no de la electr´ onica de conversi´ on, la descripci´ on en bloques del dise˜ no FPGA y los ASM de los algoritmos principales implementados. 1. Introducci´ on Un generador de funciones es un dispositivo que permite generar se˜ nales de tensi´ on que var´ ıan de forma peri´ odica en funci´ on del tiempo. Es un elemento b´ asico de laboratorios de f´ ısica y de varias ingenier´ ıas en general. En particular, la generaci´ on de funciones arbitrarias permite extender sus aplicaciones. Adem´ as, poder sincronzar una se˜ nal generada a una se˜ nal de referencia permite implementar t´ ecnicas de medici´ on de alta precisi´ on, como el lock-in, o hacer an´ alisis espectrales de otras se˜ nales. En el siguiente informe se detalla el desarrollo de un generador de funciones arbitrarias con resoluci´ on en tensi´ on de 8 bits y en tiempo de 6 bits, con una frecuencia m´ axima de f = 156kHz. Este dispositivo se implementa utilizando una placa de desarrollo Nexys-3 y un DAC AD7545 de 12 bits. El dise˜ no permite controlar el generador desde un ordenador a trav´ es de una interfaz UART, pudiendo establecer la forma de la funci´ on de onda para dos canales diferentes y la frecuencia de operaci´ on. Dicha frecuencia tambi´ en puede ser definida con una se˜ nal externa de referencia de tipo TTL. Para ello se implement´ o un m´ odulo Phase Locked Loop (PLL) de detecci´ on de frecuencia y fase. 1.1. Generador de Funciones Un generador de funciones es un dispositivo capaz generar se˜ nales el´ ectricas peri´ odicas en el tiempo. Son utilizados generalmente para probar otros dispositivos electr´ onicos y para reali- zar an´ alisis espectrales. Las funciones de onda m´ as utilizadas son las ondas senoidales, las ondas cuadradas y las triangulares. Estas funciones se pueden construir utilizando elementos totalmente anal´ ogicos a partir de un oscilador electr´ onico de referencia, elementos que componen los generado- res de funciones m´ as b´ asicos del mercado. Los generadores de funciones m´ as sofisticados sintetizan la funci´ on de onda mediante procesamiento de se˜ nales digitales (DSP) y luego utilizan un conversor digital anal´ ogico (DAC) para producir una se˜ nal anal´ ogica. Esto permite ampliar la variedad de formas de onda y se los conoce como AWG (Arbitrary Waveform Generator ) Un DAC es un dispositivo electr´ onico capaz de convertir un dato de se˜ nal digital en se˜ nales de tensi´ on anal´ ogica. Dichos dispositivos son alimentados con una tensi´ on de referencia, V cc (t´ ıpica- mente 5 V), y generan una tensi´ on continua proporcional al dato que se le ingresa. Un DAC de 7 bits alimentado con 5 V, por ejemplo, discretiza en 128 valores las tensiones entre 0 y 5 Volts. Si se carga a la entrada el n´ umero 0100000, que corresponde al n´ umero decimal 64, a la salida se obtiene una tensi´ on continua de 2,5 V. El DAC que se utiliza en el presente trabajo es el AD7545, 1

Transcript of Implementaci on de un generador de funciones arbitrarias ... · de senales,~ entre los que se halla...

Implementacion de un generador de funciones arbitrarias con

FPGA

Matias Risaro y Marcelo Luda

22 de diciembre de 2014

Resumen

En el presente trabajo se detalla la construccion de un generador de funciones arbitrariasdigital de dos canales, utilizando una placa FPGA y electronica de conversion digital-analogica.Se desarrollo una interfaz serie para definir la frecuencia de trabajo y cargar los datos de lasfunciones arbitrarias. Ademas el dispositivo construido puede sincronizarse a una funcion TTLde referencia a traves de un PLL digital disenado. Se incluye el diseno de la electronica deconversion, la descripcion en bloques del diseno FPGA y los ASM de los algoritmos principalesimplementados.

1. Introduccion

Un generador de funciones es un dispositivo que permite generar senales de tension que varıande forma periodica en funcion del tiempo. Es un elemento basico de laboratorios de fısica y devarias ingenierıas en general. En particular, la generacion de funciones arbitrarias permite extendersus aplicaciones. Ademas, poder sincronzar una senal generada a una senal de referencia permiteimplementar tecnicas de medicion de alta precision, como el lock-in, o hacer analisis espectrales deotras senales.

En el siguiente informe se detalla el desarrollo de un generador de funciones arbitrarias conresolucion en tension de 8 bits y en tiempo de 6 bits, con una frecuencia maxima de f = 156kHz.Este dispositivo se implementa utilizando una placa de desarrollo Nexys-3 y un DAC AD7545 de 12bits. El diseno permite controlar el generador desde un ordenador a traves de una interfaz UART,pudiendo establecer la forma de la funcion de onda para dos canales diferentes y la frecuencia deoperacion. Dicha frecuencia tambien puede ser definida con una senal externa de referencia de tipoTTL. Para ello se implemento un modulo Phase Locked Loop (PLL) de deteccion de frecuencia yfase.

1.1. Generador de Funciones

Un generador de funciones es un dispositivo capaz generar senales electricas periodicas enel tiempo. Son utilizados generalmente para probar otros dispositivos electronicos y para reali-zar analisis espectrales. Las funciones de onda mas utilizadas son las ondas senoidales, las ondascuadradas y las triangulares. Estas funciones se pueden construir utilizando elementos totalmenteanalogicos a partir de un oscilador electronico de referencia, elementos que componen los generado-res de funciones mas basicos del mercado. Los generadores de funciones mas sofisticados sintetizanla funcion de onda mediante procesamiento de senales digitales (DSP) y luego utilizan un conversordigital analogico (DAC) para producir una senal analogica. Esto permite ampliar la variedad deformas de onda y se los conoce como AWG (Arbitrary Waveform Generator)

Un DAC es un dispositivo electronico capaz de convertir un dato de senal digital en senales detension analogica. Dichos dispositivos son alimentados con una tension de referencia, Vcc (tıpica-mente 5 V), y generan una tension continua proporcional al dato que se le ingresa. Un DAC de7 bits alimentado con 5 V, por ejemplo, discretiza en 128 valores las tensiones entre 0 y 5 Volts.Si se carga a la entrada el numero 0100000, que corresponde al numero decimal 64, a la salida seobtiene una tension continua de 2,5 V. El DAC que se utiliza en el presente trabajo es el AD7545,

1

que tiene una resolucion de 12 bits y un tiempo de respuesta de aproximadamente 100 ns. La cargade los datos se realiza en forma paralela, a traves de las 12 entradas que posee. En la figura 1 semuestra un esquema de las conexiones del AD7545.

19

16

17

20

1

2

3

18

AD7545 R

RFB

OUT 1

AGND

VDD

DGND

DB11–DB0(PINS 4–15)

12

12

12-BITMULTIPLYING DAC

INPUT DATA LATCHES

VREF

WR

CS

Figura 1: Esquema de E/S del DAC AD7545

La resolucion del AD7545 es de 12 bits, pero no se utiliza a su maxima resolucion. Se conectana tierra los 4 bits menos significativos y se tiene entonces un DAC de 8 bits, que nos permiteuna resolucion en tensiones de aproximadamente 2 mV. Esto es lo que se conoce como resolucionvertical de un generador de funciones.

Otra de las caracterısticas de un generador de funciones es la longitud de la forma de onda,que es la cantidad de puntos que definen la funcion a repetir periodicamente. En nuestro caso seopta por una longitud de 6 bits (64 puntos) para definir la funcion de onda. Cabe destacar que conesta eleccion, y considerando el tiempo de respuesta del DAC, se obtiene el mınimo perıodo quepuede tener la funcion de onda. Dicho perıodo es T = 100ns ∗ 64 = 6, 4µs, por lo tanto la maximafrecuencia a la que puede trabajar el generador de funciones es f = 1/T = 156kHz.

1.2. PLL

La sigla PLL (Phase-Locked Loop) se refiere a tecnica de control que permite sincronizar lafrecuencia y la fase de una senal generada por un oscilador controlable, a la de una senal de refe-rencia. Dicha tecnica representa un elemento basico para multiples aplicaciones en procesamientode senales, entre los que se halla la demodulacion de una senal de radio FM o la medicion de senalesdebiles por la tecnica de Lock-in.

La tecnica Lock-in permite hacer una analisis espectral de la respuesta de un sistema anteuna excitacion periodica. Para ello se utiliza una senal de referencia con la misma frecuencia yfase que la senal excitadora, normalmente generada bajo la norma TTL (onda cuadrada de 0 a5V). La tecnica de lock-in consiste en generar funciones de seno y coseno sincornizadas a la senalde referencia con un PLL, multiplicarlas por la senal de respuesta del sistema y filtrarlas con unfiltro pasa bajos. Con este procedimiento se obtiene una tension de salida, correspondiente a loscoeficientes de la serie de Fourier de la senal de respuesta del sistema.

Un PLL analogico consiste en un detector de fase con un filtro pasa bajos y un VCO (VoltageControlled Oscillator) vinculados en forma realimentada como muestra la figura 2. La salida delfiltro es una tension de error, que da cuenta de la diferencia entre la frecuencia de referencia yla del VCO. En este trabajo se implemento un PLL digital que puede lockearse a senales TTLhaciendo deteccion de flancos e induciendo la frecuencia de la senal de referencia.

2

Figura 2: Esquema de un PLL analogico

2. Implementacion en FPGA

El dispositivo fue desarrollado sobre una placa FPGA de desarrollo Nexys-3 programada enVerilog. A continuacion se realiza un analisis de la estructura modular de esta implementacion.

En la figura 3 se detallan las entradas y salidas del dispositivo y los perifericos asociados. Seincluye una interfaz de comunicacion con el ordenador (pines tx y rx), la senal de entrada signal

para la referencia, los bus de datos JC y JD para comunicacion con los DAC, algunas salidas parael control del display de siete segmentos (an y seg) y algunas entradas para el control de variablesinternas (NTau, PC_o_PLL y sw_mem). Se incluye una salida extra jb para debugging que sirve parausar de trigger externo en el osciloscopio al visualizar las senales de salida de los DAC.

rx

tx

Ntau[2]

PC_o_PLL

sw_mem

signal

JC[8]

JD[8]

jb

an[4]

seg[8]

main

Figura 3: Modulo principal del proyecto

Las principales partes del diagrama de bloques interno del generador de funciones se muestranen la figura 4. Cada una de las salidas que controla un DAC esta asociada a un modulo de memoria(memoria A y memoria B). Dichos modulos consisten en un banco de registros con un puntero delectura que avanza cıclicamente y de a un paso, cada vez que llega un 1’b1 al pin change_val.Ademas cuenta con una interfaz de escritura compuesta por las entradas mem_reset, mem_wr ymem_wr_dat. El modulo divisor_tau es un divisor de frecuencia programable, implementado conun contador de ciclos de reloj (10ns) y se reinicia cada vez que llega al valor freq emitiendo untick en la salida. Este modulo alimenta las entradas change_val que hacen avanzar el puntero delectura de las memorias.

El valor de freq es seleccionado entre cfreq o dfreq, dependiendo del valor del switch PC_o_PLL.En el primer estado la frecuencia se define con la interfaz UART, mientras que en el otro se calculala frecuencia de la senal de referencia con el modulo PLL. Es un valor de 32bit y los 16 bits massignificativos se muestran en valor hexadecimal utilizando el display de siete segmentos.

3

mem_reset

rd_val[8]

memoria A

mem_wr

mem_wr_dat[8]

change_val

rd_reset

mem_reset

rd_val[8]

memoria B

mem_wr

mem_wr_dat[8]

change_val

rd_reset

rx freq[32]UART

tx phase[32]

mem_reset

mem_wr

mem_wr_dat[8]

selector_mem

sw_mem

selector

PC_o_PLL

cfreq[32]

dfreq[32]

freq[32] freq[32]tick

divisor_tau

hex2seg

hex2seg

[31:28]

[27:24]

hex2seg[23:20]

hex2seg[19:16]

an[4]

disp_mux

seg[8]

Figura 4: Estructura de modulos del generador de funciones

El modulo UART, ademas de implementar la comunicacion con el ordenador incluye la interfazde escritura de las memorias. El switch sw_mem determina que memoria se esta programando enun instante dado. Tambien posee dos registros internos de 32 bits para guardar la informacion decfreq y phase que se le envıa desde el ordenador.

2.1. Banco de memoria para funciones arbitrarias

El modulo de memoria (figura 5) consiste en un banco de 64 registros de 8 bits. La unica salidaes rd_val que muestra el valor apuntado por el puntero rd_ptr en cada momento. En cada flancodel reloj en que el pin change_val esta en 1’b1 el puntero rd_ptr se incrementa en +1 y al llegara 64 vuelve a comenzar desde cero. De este modo, cada 64 ticks que llegan a change_val ocurreun periodo completo de la funcion de onda guardada en la memoria.

mem_reset

rd_val[8]

memoria

mem_wr

mem_wr_dat[8]

change_val

rd_reset

wr_ptr

rd_ptr

Figura 5: Modulo de memoria

Para llenar el contenido de la memoria se utiliza la interfaz de escritura mencionada en laseccion anterior. Cada vez que llega un tick a mem_wr se escribe el valor de mem_wr_dat en el registroapuntado por wr_ptr y se incrementa wr_ptr en +1. Cuando wr_ptr llega a 64 se deshabilita laescritura hasta que este vuelva a ser cero. El pin mem_reset sirve para reiniciar el puntero wr_ptr

a cero y habilitar nuevamente la escritura del banco completo.

4

2.2. Modulo UART modificado

Sobre la base del modulo UART proporcionado en el curso “Diseno de Sistemas con FPGA”DC-FCEN-UBA1 se programo un modulo de control que interpreta los caracteres enviados desdeun ordenador usando el protocolo RS-232. En la figura 6 se puede apreciar el diseno interno delmodulo modificado.

UART

rxdout[8]

uart_rx

rx_donestick

stick din[8]

uart_tx

tx_start

tx_done

tx

stick

baud_rate_gen

wrfifo_rx

wr_dat[8]

fifo_reset

empty

full

rd

rd_dat[8]

dinfifo_wr

uart_cpu

rx_tickfifo_wr_dat[8]

fifo_reset

fifo_empy

fifo_full

fifo_rd

fifo_rd_dat[8]

mem_wr

mem_wr_dat[8]

mem_reset

freq[32]

phase[32]

s_exito

s_fallo

r_data[8]

fifo_tx

empty

rd

wrw_data[8]

s_fallo

err_msg

msg_dat[8]

msg_tick s_exito

Figura 6: Modulo UART modificado para implementar el protocolo de control del dispositivo desdeun ordenador

El modulo uart_cpu es una FSM que procesa los caracteres que van llegando por rx e imple-menta diferentes algoritmos en funcion de ello. El principal se inicia con la llegada de un caracter’m’ cuando el FSM esta en estado idle. En ese caso, se reinicia el fifo_rx (con un tick en elpin fifo_reset) y los siguientes caracteres que lleguen se van a escribir directamente en el el fifohasta que este lleno (se active el pin fifo_full). El fifo tiene el mismo tamano que los modulos dememoria, por lo que se esta cargando un periodo completo de la funcion de onda a producir. Unavez lleno, el uart_cpu reinicia el modulo de memoria (con un tick en el pin mem_reset), lee de auno los registros del fifo y los escribe en el modulo de memoria utilizando la interfase de escrituraya descrita. Terminado el proceso de escritura, si no hubo errores, envıa un tick por s_exito quepermite enviar un caracter de confirmacion a traves del tx al ordenador.

En caso de que la FSM en estado idle reciba un caracter ’f’ o ’p’ en el bus din, el modulouart_cpu tomara los siguientes 4 bytes que lleguen y los guardara en el registro freq o phase

respectivamente. De este modo quedan cargados dos registros de 32 bits que sirven para fijar lafrecuencia de trabajo del generador de funciones (en el caso que la frecuencia se controla desde elordenador) y un valor que sirve para establecer una diferencia de fase entre la senal de referenciay la generada (en el caso donde se controla la frecuencia y la fase desde el PLL).

En la figura 7 se puede ver el diagrama ASM del FSM implementado por uart_cpu. No seincluye la rama de la escritura del valor de phase porque es equivalente al de freq.

1http://www.dc.uba.ar/materias/disfpga/2014/c2/descargas/UART.rar/view

5

reset_mem_f

rx_tick == 1

w_ptr_freq_next ← 2'b00

guardar1_f

w_en_freq_next ← 0

w_en_freq_next ← 1

F

T

w_en_freq_next ← 0

rx_tick == 1

w_ptr_freq_next ← 2'b01

guardar2_f

w_en_freq_next ← 0

w_en_freq_next ← 1

F

T

rx_tick == 1

w_ptr_freq_next ← 2'b10

guardar3_f

w_en_freq_next ← 0

w_en_freq_next ← 1

F

T

rx_tick == 1

w_ptr_freq_next ← 2'b11

guardar4_f

w_en_freq_next ← 0

w_en_freq_next ← 1

exito_f

F

T

idle

fifo_reset ← 0fifo_wr ← 0fif_rd ← 0

mem_reset ← 0mem_wr ← 0s_exito ← 0

fifo_full == 1

fifo_reset ← 1

fifo_reset ← 0fifo_wr ← rx_tick

mem_reset ← 1

din

s_exito ← 1fifo_rd ← 0mem_wr ← 0

reset_fifo_m

carga_fifo_m

reset_mem_m

fifo_rd ← 1mem_wr ← ~fifo_emptymem_reset ← 0

carga_mem_m

exito_m

'm'

F

T

~('m'|'p'|'f')

fifo_empty == 1

F

T

'f'

'p'

...

Figura 7: ASM del modulo

6

2.3. Sincronizacion en fase y frecuencia

Cuando el switch PC_o_PLL esta en 1’b1 el generador de funciones trabaja en una frecuenciacalculada a partir de la senal de referencia y con su fase lockeada a la esta senal. Para ello seimplementaron los tres modulos que se muestran en la figura 8.

signal fup_tick

flank_detector

fdw_tick

ftickfreq[32]

freq_detectorNtau[2]

dfreq[32]

PC_o_PLLfunc_reset

desfasadorftick

phase[32]

freq[32]

func_reset

Figura 8: Modulos que implementan el PLL

El modulo flank_detector es una maquina de estados con un flip-flop que detecta cambios enel valor de signal y envıa un tick por fup_tick cada vez que hay un flanco de subida y un tickpor fdw_tick cada vez que hay un flanco de bajada. Con una de estas dos salidas se alimentan losmodulos de freq_detector y desfasador.

El modulo freq_detector es un contador de ciclos de reloj que se reinicia cada vez que llegaun tick a ftick. Antes de reiniciarse guarda el ultimo valor, que representa el numero de ticks dereloj que entran en un perıodo de la senal. Debido a que este numero puede variar levemente entremedicion y medicion (por ruidos, jitter en la senal de referencia u otras fuentes de imprecision) seutilizo un algoritmo de integracion tipo “filtro pasa bajos” para actualizar el valor de freq. Enlugar de guardar directamente el valor q_reg relevado en cada medicion de flanco se guarda elvalor resultante de la formula (1).

freq next =q reg N + freq (256 −N)

256(1)

Con los switchs NTau se puede elegir que el valor N = 128, 64, 32, 16 segun se quiera convergeren pocos pasos a la frecuencia de relevada o en muchos pasos con una estabilidad mayor.

2.4. Electronica asociada

El dispositivo se completa con el desarrollo de la electronica de conversion digital-analogica dela senal de salida. Para ello se utilizo el DAC integrado AD7545, que funciona como una resistenciaprogramable, y un amplificador operacional (LF357) de salida para la adaptacion de impedancias.La eleccion del DAC radica en la disponibilidad de control por un bus directo de 12 cables, lo queevita la implementacion de algun protocolo de control como el I2C o el SPI. El LF357 fue elegidoen funcion de su gran ancho de banda, que permite operar el DAC a la maxima velocidad posible(100 ns). En la figura 9a se puede ver el esquema del circuito de conversion para un canal. En lafigura 9b se incluyo el diseno del circuito impreso utilizando dos canales de salida.

El circuito fue impreso en una placa PCB y se soldaron todos sus componentes para hacer laspruebas de generacion de funciones. Se utilizo una fuente partida de ±6V implementada a partirde una fuente de switching simple y un circuito a medida armado en una protoboard. Se armaronlos cables a medida para conectar la FPGA. Se puede ver una foto del dispositivo terminado en lafigura 10.

7

22-23-2031X3-1X3-2X3-3

V-

GND

V+

200

2k

33p

22-23-2021

AD7545123456789

10 11121314151617181920

LF3571234 5

678

SV

1

123456789101112

R1

R3

AE

S

C1

X1-1X1-2V-

GNDGND

GNDGNDGND

GND

V+ V+

V+

OUT1

OUT1 OUT

DB

5

DB

5

DB

6

DB

6

DB

7

DB

7

DB

8

DB

8

DB

9

DB

9

DB

10

DB

10

DB

11

DB

11

DB

4

DB

4

DB

3

DB

3

DB

2

DB

2

DB

1

DB

1

DB

0

DB

0

P19

P19

(a) Esquema para un canal

1

12

31

1

12

31

3

3

AD

7545

LF35

7

SV1

R1

R3C1

X3

AD

7545

_BIS

LF35

7_B

IS

C2

R2

SV2

R4

X1

X2

200

2k

33p

22-2

3-20

3133

p 200

2k

22-2

3-20

2122

-23-

2021

(b) Diseno impreso

Figura 9: Circuito de conversion digital-analogico para dos canales

Figura 10: Foto del circuito terminado que implementa los dos DAC

3. Caracterizacion y resultados

Para controlar el dispositivo se desarrollo un script en Python donde se definieron las funcionesmatematicas que el generador de funciones produce y las funciones necesarias para la comunicacion.En el apendice A se puede ver el codigo, disponible para ejecutar desde una consola IPhython.

En la figura 11 se pueden ver la funcion senoidal generada por el dispositivo relevada pormedio de un osciloscopio. Para bajas frecuencias la resolucion temporal del osciloscopio permitever los pasos de discretizacion. En la figura 12 se pueden apreciar diferentes funciones arbitrariasgeneradas con el dispositivo.

8

−10 −8 −6 −4 −2 0 2 4 6 8 10−6

−5

−4

−3

−2

−1

0

1

Tiempo (ms)

Te

ns

ión

(V

)Generador de funciones, Senoidal

(a) Baja frecuencia

−100 −80 −60 −40 −20 0 20 40 60 80 100−6

−5

−4

−3

−2

−1

0

1

Tiempo (us)

Ten

sió

n (

V)

Generador de funciones, Senoidal

(b) Alta frecuencia

Figura 11: Generacion de funcion senoidal a dos frecuencias diferentes.

−10 −8 −6 −4 −2 0 2 4 6 8 10−6

−5

−4

−3

−2

−1

0

1

Tiempo (ms)

Ten

siÃ

³n (

V)

Generador de funciones, Gauss

(a) Gaussiana

−25 −20 −15 −10 −5 0 5 10 15 20 25−6

−5

−4

−3

−2

−1

0

Tiempo (ms)

Ten

siÃ

³n (

V)

Generador de funciones, Rampa

(b) Rampa

−25 −20 −15 −10 −5 0 5 10 15 20 25−6

−5

−4

−3

−2

−1

0

1

Tiempo (ms)

Ten

siÃ

³n (

V)

Generador de funciones, Triangular

(c) Triangular

Figura 12: Generacion de funciones arbitrarias

Para caracterizar la precision en la generacion de la funciones se midio la dispersion en frecuenciamidiendo el jitter en el periodo de las funciones generadas. Para funciones senoidales la dispersionen diferentes frecuencias se puede ver en la tabla 1. Se incluyen otras funciones arbitrarias generadasen la tabla. Se puede ver que la dispersion hallada es del orden del ∼ 1/1000.

9

Funcion Frecuencia dispersionSeno lento 156.1 Hz 0.2 HzSeno medio 15.4 KHz 0.1 KHzSeno rapido 141.6 KHz 0.1 KHzGaussiana 15.4 KHz 0.1 KHzTriangular 156.3 KHz 0.6 KHzRampa 156.3 KHz 0.2 KHz

Tabla 1: Dispersiones en frecuencia para diferentes frecuencias y funciones generadas

Se pudo corroborar el funcionamiento del PLL sincronizando cada una de las funciones arbi-trarias generadas, a una senal cuadrada de referencia. La inferencia de la frecuencia de trabajodemostro una velocidad de adaptacion muy rapida, con tiempos del orden de 20 ciclos de reloj dela senal de referencia.

A modo de ejemplo, se probo la capacidad de generar funciones completamente arbitrariastratando de reproducir una imagen 2D arbitraria a partir de la generacion de las funciones co-rrespondientes a x(t) e y(t) en cada uno de los canales de salida. En la figura 13 se puede ver lapantalla del osciloscopio en modo xy representando una de las imagenes emuladas.

Figura 13: Ejemplo practico de la implementacion de funciones arbitrarias en dos canales si-multaneos

4. Conclusiones

La tecnologıa FPGA demostro ser perfectamente adecuada para la implementacion de un gene-rador de funciones arbitrarias digital. Las frecuencias logradas en este trabajo son suficientementealtas para su utilizacion en diversas aplicaciones de un laboratorio de fısica. Los lımites puedensuperarse utilizando electronica de alta velocidad y una placa FPGA de mayores prestaciones.

10

A. Programa de control en Python

# Control de generador de funciones en ipython

from numpy import *

from matplotlib.pyplot import *

import matplotlib.cm as cm

import Image

# Funcion para convertir un integer en un string de 4 bytes

def tau2str(tau):

t=uint32(tau)

cc=’’

for i in range (0,4):

cc=chr(mod(t,256))+cc

t=t/256

return cc

# Funcion para convertir una tira de numeros uint8 en chars

def array2str(fun):

ll=’’

for i in fun.tolist ():

ll=ll+chr(i)

return ll

# Abrimos el puerto Serie --------------

import serial

ser = serial.Serial(port=’/dev/ttyUSB2 ’,baudrate =19200)

# Configuramos frecuencia de operacion

freq =20000 # x10 ns entre punto y punto

cic=int (1/( freq*1e-8))

ciclos=tau2str(cic)

ser.write(’66’.decode(’hex’))

ser.write(ciclos)

# Generamos las funciones

xx=arange (0,64)

# Seno

fun= sin(xx*pi/32)

fun=fun -fun.min()

fun=fun/fun.max()*255

fsin=uint8(fun)

# Triangular

fun=abs(xx -32.)

fun=fun -fun.min()

fun=fun/fun.max()*255

ftrian=uint8(fun)

# Gaussiana

fun=exp(-((xx -32.) /8) **2)

fun=fun -fun.min()

fun=fun/fun.max()*255

fgauss=uint8(fun)

# Rampa

fun=xx

fun=fun -fun.min()

fun=fun/float(fun.max())*255

framp=uint8(fun)

# Batman

bat_x = array ([ 32, 52, 77, 69, 72, 88, 106, 112, 114, 122,

131, 140, 142, 146, 165, 183, 180, 176, 196, 214, 230, 241,

250, 255, 251, 244, 229, 218, 205, 211, 206, 193, 181, 173,

162, 152, 141, 133, 127, 120, 115, 105, 96, 86, 81, 70,

57, 47, 43, 46, 48, 31, 20, 8, 2, 0, 4, 10,

17, 22, 27, 31, 31, 31], dtype=uint8)

bat_y = array ([ 41, 24, 10, 38, 71, 90, 71, 32, 0, 26,

26, 0, 23, 71, 94, 65, 27, 9, 23, 37, 53, 71,

98, 130, 159, 186, 213, 231, 240, 206, 180, 180, 193, 207,

183, 180, 202, 227, 255,227, 207, 185, 177, 194, 204, 190,

178, 178, 198, 224, 237, 223, 206, 182, 157, 126, 95, 77,

65, 53, 49, 44, 44, 44], dtype=uint8)

# Comandos para comunicacion directa

def set_freq(ser ,freq):

ser.write(’f’+tau2str(freq))

def set_phase(ser ,phase):

ser.write(’p’+tau2str(phase))

def sext_fun(ser ,fun):

ser.write(’m’+array2str(fun))

control generador funciones.py

11