Anda di halaman 1dari 11

Laboratorio de Sistemas Digitales Avanzados

Antonio Calomarde

Generador de pulsos
4.1 Objetivos
Este laboratorio cubre un diseo sencillo que utiliza bloques digitales bsicos. De los cursos anteriores, debe estar familiarizado con registros, contadores, comparadores, etc. En esta prctica se realizar un modulador de ancho de pulso que permita controlar los motores del brazo Lynx. Cuando finalice esta prctica habr desarrollado un mdulo que ser utilizado en las prcticas posteriores.

4.2 Descripcin del diseo


La caractersticas tcnicas, as como las especificaciones temporales necesarias para generar el tren de pulsos se encuentran en el documento Especificaciones brazo. Se recomienda leer este documento antes de seguir con la realizacin de la prctica. El diagrama de bloques para uno de los motores ser el mostrado en la figura 17. Como puede verse se sugiere que se divida en dos bloques bsicos:
q Posici: Bsicamente es un registro de 8 bits que se encarga de guardar el

valor actual de la posicin del motor asociado. El valor que ha de tomar despus de un reset asncrono es la mitad del rango total, es decir 128.

36

Descripcin del diseo

Drive_motor

posici

nova_posicio

dades_posicio

gen_polsos

pwm_motor

load clock reset

Figura 17: Diagrama de bloques para un motor del brazo.

q Gen-polsos: Traslada el valor actual del valor dades_posicio a una secuencia de

pulsos tal y como se muestra en el documento Especificaciones brazo. Para la realizacin de este bloque se sugiere que intente realizarlo con una estrategia similar a como lo realizan los PWM analgicos convencionales, es decir, generar una rampa de duracin 2.1 ms, que se repite cada 20 ms, y con las siguientes condiciones para el valor de dades_posicio: Valor dades_posicio 0 128 255 Anchura de pulso 0.9 ms 1.5 ms 2.1 ms

A modo de ejemplo, en la figura 18 se muestra una sugerencia para el diseo de la unidad Gen_polsos, y donde Gen_rampa es un generador de rampa (es decir un contador) que genera una secuencia al ritmo del reloj, y que se inicia cada 20 ms.

4.2.1 frecuencia del reloj


Para la determinacin de la frecuencia del reloj hemos de tener en cuenta: Se tendr que enviar un pulso cada 20 ms (50 Hz).

Descripcin del diseo

37

gen_polsos
247

comparador

dades_posicio

pwm_motor

clock reset

gen_rampa

rampa

Figura 18: Esquema sugerido para el generador de pulsos.

La anchura del pulso estar comprendida entre 1ms y 2ms aproximadamente. Por tanto y teniendo en cuenta que la resolucin de la posicin es de 254 valores diferentes (no se incluyen los valores extremos), tenemos que la mnima resolucin del reloj ha de ser: f = Maxima_ anchura_ pulso Minima_ anchura_ pulso 2 ,008 ms 0 ,988 ms = = 4s n posiciones 255

Para saber la anchura de pulso que se obtendr en funcin del valor tenemos: Anchura_ pulso = 0 ,004( valor + 247 ) ms El valor de 247 corresponde al offset que es necesario para conseguir que con un valor 0 el periodo sea de 0,988 ms. Comprobar que con un valor de 128 (posicin de reposo) el periodo es de 1,5 ms. Teniendo en cuenta las especificaciones dadas por el fabricante, el ngulo de giro ser para el servo HS-422: angulo = 0 ,45 ( valor 128 ) Y tendremos en este caso un ngulo mximo y mnimo de 57 . y para el resto: angulo = 0 ,4 ( valor 128 ) Y en ste caso el ngulo mximo y mnimo ser de 51

38 SPARTAN3

Notas adicionales sobre el reloj en la placa

4.3 Tareas a realizar


q Disear una una interface tal y cmo se muestra en el apartado anterior. q La seal de reloj ha de ser programada a 250 KHz. (divisor por 400, si se utiliza la

placa XESS), que corresponde a un periodo de 4 s.

q Respetar las seales de salida de cada uno de los pines conectados a los motores

del brazo, tal y como se especifica en el documento Especificaciones brazo.


q Antes de verificar vuestro diseo con el brazo, se pedir la verificacin de las

seales de control generadas monitorizadas en el osciloscopio.


q Para poder verificar vuestro diseo sobre el brazo, se pide que implementis un

nico Drive_motor, y que conectis el bus nova_posici a los 8 interruptores que dispone la placa, y la seal load a uno de los pulsadores disponibles. Para conocer que pines corresponden a cada uno consultar el manual de la placa.

4.4 Notas adicionales sobre el reloj en la placa SPARTAN3


La placa SPARTAN3 posee un reloj fijo de 50 MHz, de tal manera que no se puede obtener directamente una frecuencia de 250 KHz. Para su solucin se aconseja utilizar un divisor de reloj que consiga la frecuencia deseada. Existen diversas posibilidades para obtener un divisor de reloj, quizs las mas sencilla es utilizar un contador que cuente hasta el valor que se desee dividir la seal de reloj inicial, por ejemplo, en nuestro caso partimos de una frecuencia de 50 MHz y deseamos una frecuencia final de 250 KHz, es decir necesitamos dividir el reloj por 200 (o disear un contador de 200 pulsos de reloj), para lo cual necesitaramos al menos un contador de 8 bits.

Notas adicionales sobre el reloj en la placa SPARTAN3 39

En la figura 20 se muestra la relacin temporal entre las seales de salida de un contador binario y la seal de reloj.

x(n)

Contador
Figura 20: Salidas de un contador.
Reg. Desplazamiento

x(2) x(1) x(0) clock

Una segunda posibilidad es utilizar un registro de desplazamiento de tal manera que el MSB es invertido y realimentado al LSB, tal y cmo se muestra en la figura 19. Esta opcin tiene la ventaja de no necesitar lgica combinacional adicional, como seria en el caso del contador, pero requiere ms elementos de memoria (flip-flops D) que el contador.

x(n)

n*TCLK

x(2) x(1) x(0) clock

Figura 19: Divisor de reloj con registro de desplazamiento.

Otro factor a tener en cuenta, es que las FPGAs de la familia SPARTAN3 y Virtex II tienen un elemento dedicado que puede conseguir obtener mltiplos o fracciones de la frecuencia de reloj. La ventaja de utilizar este elemento (Digital Clock Manager o DCM) es que el clock skew es menor que en las soluciones anteriores, y adems es un recurso de la FPGA que ya existe, por lo que no reducimos el nmero de CLBs disponibles.

40 SPARTAN3

Notas adicionales sobre el reloj en la placa

Para utilizar este elemento, deberis crear un nuevo fichero fuente, y seleccionar el tipo IP coregen & Architecture Wizard, tal y cmo se muestra en la figura 22.

Figura 22: Crear una IP.

A continuacin aparecern todas las IP (Intellectual Property) disponibles, y en nuestro caso seleccionaremos Single DCM v8.2i, tal y como se muestra en la figura 21.

Figura 21: Seleccionar una IP.

Obsrvese que a parte de la seleccin realizada, existen otras alternativas que permiten configurar diferentes posibilidades para obtener seales de reloj.

Notas adicionales sobre el reloj en la placa SPARTAN3 41

A continuacin aparecer la pantalla principal de configuracin de la IP seleccionada. Seleccionar los parmetros indicados en la figura 23.

Figura 23: Configuracin del DCM

En la siguiente pantalla, aparecer la configuracin de los buffers para cada una de las entradas/salidas. Seleccionar Use Global Buffers for all selected clock outputs, que es la configuracin por defecto, y pasamos a la siguiente pantalla, para configurar la frecuencia de salida del bloque DCM. En ste caso, en la parte superior de la nueva ventana tenemos una tabla que recoge la informacin de las restricciones del sintetizador digital de frecuencia para la FPGA que utilizamos. En esta tabla se observa que hay dos modos de funcionamiento, el modo high y el modo low, y para ambos la frecuencia de entrada es la misma, en cambio la frecuencia ms baja que permite generar el sintetizador es de 18 MHz. Como deseamos obtener una frecuencia de 250 KHz, no es suficiente con utilizar el DCM, as, se propone una estrategia, que es

42 SPARTAN3

Notas adicionales sobre el reloj en la placa

utilizar el DCM para poder ajustar a una frecuencia que sea potencia de 2 de la frecuencia deseada, y que est dentro del rango de frecuencia de salida del DCM, que para nuestro caso podra ser 32 MHz, y posteriormente utilizaremos un divisor de los mencionados anteriormente, pero en ste caso dividiremos por 128. La ventaja de dividir por 128 es que no necesitamos realizar ninguna comparacin si utilizamos un contador de 7 bits, ya que el MSB da directamente la divisin por ste valor. As, la configuracin de esta parte del DCM queda como se muestra en la figura24

Figura 24: Seleccionando la frecuencia de salida del DCM.

Para acabar, aparecer una pantalla donde se da un resumen de las opciones seleccionadas, y que nos permite generar el DCM con los parmetros seleccionados. En cualquier caso, si se hubiera cometido algn error, ISE nos permite modificar los parmetros del mdulo en cualquier momento, basta con seleccionar el nuevo mdulo DCM generado en la ventana Sources.

Notas adicionales sobre el reloj en la placa SPARTAN3 43

El ltimo paso para incorporar el mdulo DCM a nuestro diseo es instanciarlo en un componente VHDL. Para ello basta con seleccionar el DCM en la ventana Sources y crear la plantilla de instanciacin pulsando la opcin View HDL Instantiation Template. Antes de realizar ste paso, comprobar que generar una instanciacin en VHDL, y no en Verilog. Recordar que para instanciarlo, no todas las salidas son utilizadas, en ellas basta con poner la palabra clave de VHDL open, para que tanto el sintetizado como el simulador no nos de mensajes de error. Es posible que el sintetizador (depende de las opciones) nos enve un mensaje informandonos de que existen salidas sin conectar. A modo de ejemplo, se da un detalle de la instanciacin de un mdulo DCM
Inst_dcm1: dcm1 PORT MAP( CLKIN_IN => clock, RST_IN => reset, CLKFX_OUT => clock32M, CLKIN_IBUFG_OUT => open, CLK0_OUT => open, LOCKED_OUT => open );

En ste ejemplo, como se desea la seal de clock de 32 MHz, se ha seleccionado la salida CLKFX_OUT, que es la correspondiente al sintetizador de frecuencia.

Anda mungkin juga menyukai