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.
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
Drive_motor
posici
nova_posicio
dades_posicio
gen_polsos
pwm_motor
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.
37
gen_polsos
247
comparador
dades_posicio
pwm_motor
clock reset
gen_rampa
rampa
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
q Respetar las seales de salida de cada uno de los pines conectados a los motores
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.
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
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
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
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.
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.
Obsrvese que a parte de la seleccin realizada, existen otras alternativas que permiten configurar diferentes posibilidades para obtener seales de reloj.
A continuacin aparecer la pantalla principal de configuracin de la IP seleccionada. Seleccionar los parmetros indicados en la figura 23.
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
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
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.
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.