Home

Memoria (spa)

image

Contents

1. ee 40 magun PUSO LE er NEL E euenbze 1371111 mE pm s Cul ch LE DUCI Li TIF LIT d E E iE E TIF LIT dl p 20 gt E rm uL in a El 2 c LE OUT LII T Ln E m A gt Gl d TI e JL ra m ES qe na Esquema del circuito 8 2 Manual de instrucciones J DIGILENT BEYOND THEORY Copa 7007 Switches y pulsadores de la FPGA Tal y como aparecen en la imagen los switches est n desactivados e SW70lLIM Disable tiene que estar activado la imagen aparece desactivado a n no se ha comprobado su funcionamiento e SW6 o FC Disable desactivado para que los finales de carrera sean reconocidos e SWbnoseusa e SWA o BUCLE si est tal como se indica en la imagen el control del motor se realiza en bucle abierto Si por el contrario est arriba el control se realiza en bucle cerrado Para el control en bucle abierto se usan el resto de los switches y de los pulsadores Mediante los pulsadores se define la velocidad a la que se mover el motor Esta velocidad se refleja en el visualizador de 7 segmentos situado por encima de P1 Tiene 10 velocidades desde la 0 en la que no se mueve hasta la 9 que es la m s r pida e P3oreset inicializa todas las variables de la FPGA e P2nose usa e
2. signal nCNT std logic vector 15 downto 0 ANADO 1 MAS signal OPERACION1 OPERACION2 signed 13 downto 0 signal POS_DESEADA OPERACION3 OPERACIONA signed 14 downto 0 1 signal DIFERENCIA ERROR ERROR_ACOTADO signed 15 downto 0 1 signal FINS CNT nFINS ENC std logic vector 15 downto 0 1 signal FINB std_logic_vector 15 downto 0 1 type TIPO IU ESTADO is ESPERAR RESETBC BAJAR TOPE AJUSTAR CONTROL RESET INI CICLO PARO SUBIDA S BAJADA A adidos signal IU ESTADO ESTADO TIPO IU ESTADO type TIPO UART ESTADO is LEERUNAVEZ NADA LEERDATOS ACABANDATOSRX STOP MANDARPOSENC ON MANDARPOSE NC OFF PARAR signal UART ESTADO nUART ESTADO TIPO UART ESTADO signal BCD std logic vector 6 downto 0 MODIFICADO signal 10 100 100 200 EN_CLKTx EN_CLKRx RD std_logic signal FUP FDN PULSO CHA std logic signal SEPUEDEENVIAR nSEPUEDEENVIAR std_logic Para el envio serie de datos por la UART signal TX TX_RDY RX_RDY RX_RDY1 RX_RDY2 RX_RDY3 std logic INTRODUZCO RX_RDY signal DTX DRX std logic vector 7 downto 0 INTRODUZCO DRX type TIPO_TX_ESTADO is RESET ESPERA ENVIA INCREMENTA signal TX ESTADO nTX_ESTADO TIPO TX ESTADO t
3. lt 1 else CNTBIT lt others gt 0 end if end if end if end process Registro de desplazamiento process CLK RST begin if RST 1 then PS lt others gt 0 elsif CLK event CLK 1 then if EN 1 then if ESTADO STOP and WR 1 then PS lt DIN elsif ESTADO DATOS then PS lt 0 amp PS DWL1 downto 1 end if end if end if end process Generacion de paridad process CLK RST begin if RST 1 then PARIDAD lt 0 elsif CLK event CLK 1 then if EN 1 then if ESTADO DATOS then BIT_PARIDAD lt BIT_PARIDAD xor 5 0 else PARIDAD lt 0 end if end if end if end process Salidas Tx lt 0 when ESTADOSINICIO else 5 0 when ESTADO DATOS else PARIDAD when ESTADO PARIDAD else 108 15 TxRDY lt 1 when ESTADO STOP else 0 end behavioral 8 3 4 UART RX library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity UART is port CLK in std logic EN instd logic RST instd logic Rx instd logic RD instd logic DOUT out std_logic_vector 7 downto 0 ERROR PARIDAD out std logic ERROR FORMATO out std_logic SOBRESCRITURA out std logic RxRDY out std logic end architecture behavioral of UART_RX is M quina de estados type TIPO ESTADO is INICIO DATOS PARIDAD STOP signal ESTADO ESTADO SIG TIPO ESTADO Contador de period
4. ENC 14 downto 0 multiplicaci n por la constante del regulador y extensi n del signo X0 5 para el motor suelto es decir quitar el ultimo bit dividir entre 2 0 125 para el motor con toda la estructura es decir quitar los 3 ltimos bits dividir entre 3 process DIFERENCIA begin if DIFERENCIA gt 0 then ERROR 000 amp DIFERENCIA 15 downto 3 else ERROR 111 amp DIFERENCIA 15 downto 3 end if end process Acotaci n del error para evitar desbordamiento process ERROR 101 begin if ERROR gt 100 then ERROR ACOTADO lt conv signed 100 16 elsif ERROR lt 100 then ERROR_ACOTADO lt conv_signed 100 16 else ERROR ACOTADO ERROR end if end process Condici n para PWM 1 o O process BUCLE2 CNT PWM CNT REF ERROR ACOTADO begin if BUCLE2 1 then if CNT PWM ABS ERROR ACOTADO then lt 1 else PWM lt 0 end if elsif BUCLE2 0 then if CNT PWM lt CNT REF then PWM lt 1 else PWM lt 0 end if end if end process M quina de estados del motor seg n bucle abierto o cerrado process IU ESTADO UART ESTADO FINS CNT ENC SW SUBE2 SW BAJA2 SW STEP2 FUP FDN SW CICLO2 FCS2 FCI2 ILIM2 BUCLE2 ERROR ACOTADO CONSIGNA SALIDA RAM CNT WRITE RAM ram block CNT13 CNT READ RAM LD3 LDA LD5 LD6 LD7 gt MODIFICADO begin INA lt 0 INB lt 0 nlU ESTADO lt IU ESTADO nFINS CNT ENC lt FINS CNT
5. 1 500 1 000 500 a a a a Li a E a en a cu a a ca a a 20 20 e e e hi e rs e E a e e cu e e ca e xu 2 000 1 500 1 000 500 0 Ganancia del regulador 0 5 vacio la de hacer pruebas se usado el motor en vacio por lo que los valores son los de la siguiente tabla k 0 064 0 0015 R 0 6 Jm 0 000075 Inercia del rotor del motor Datasheet GR63X55 0 Inercia de partes m viles del actuador respecto del motor JMoranchel tau em 0 011 Constante de tiempo electromec nica del motor suelto para estimar el rozamiento J Jm Ja Momento de inercia estimado de todo el actuador b J tau_em Rozamiento Gpwm 24 100 Genc 360 2 pi Ganancia del encoder pulsos rad Gc 0 5 Datos utilizados en la simulacion con scilab vacio 18 Para el actuador los valores son los siguientes k 0 064 L 0 0015 0 6 Jm 0 000075 Inercia del rotor del motor Datasheet GR63X55 Ja 0 0002709 Inercia de partes moviles del actuador respecto del motor JMoranchel J Jm Ja Momento de inercia estimado de todo el actuador tau_em 11e 2 Constante electromec nica estimada de todo el actuador b J tau_em Rozamiento Gpwm 24 100 Genc 360 2 pi Ganancia del encoder pulsos rad Gc 0 5 Datos utilizados en la simulacion con scilab con el actuador 2 000 1 500
6. nSALIDA RAM lt S5INCRONIZADOR RAM SALIDA_RAM se actualiza con el valor anterior si se produce un STOP lo que permite la parada nSALIDA RAM lt SALIDA RAM Despu s de SALIDA RAM se calcula el vector CONSIGNA que depende de IU ESTADO process SALIDA RAM IU ESTADO CONSIGNAx256 CONSIGNABAJARx256 CNT13 UART ESTADO begin nCONSIGNABAJARx2 56t CONSIGNABAJARXZI5D6 nCONSIGNAx2 56 lt CONSIGNAx256 nCNT13 lt CNT13 if ESTADO BAJAR then nCNT13 lt CNT13 1 if UART ESTADO STOP then nCONSIGNABAJARx2Z56 CONSIGNABAJARxZ56 else nCONSIGNABAJARx256 CONSIGNABAJARxZ56 205 end if CONSIGNA CONSIGNABAJARx256 21 downto 4 1 elsif IU ESTADOESPERAR then nCNT13 CNT13 41 CONSIGNA others 0 POSICION 0 elsif IU ESTADOSAJUSTAR then 1 i UART ESTADO STOP then nCONSIGNAx256 CONSIGNAx256 else nCONSIGNAx256X CONSIGNAx256t SALIDA RAM end if CONSIGNA X CONSIGNAx256 21 downto 8 elsif IU ESTADO CONTROL then CONSIGNA lt SALIDA RAM else nCONSIGNAx256 others o nCONSIGNABAJARx256 lt 0010011110001000000000 2530 8ceros gt 111111111 CONSIGNA lt 00100111100010 2530 gt 200 2730 12 32760 ncNT13 lt others gt 0 end if end process Para el estado BAJAR si no hay ningun STOP en cuyo caso permanece con el mismo valor que en el estado anterior con un vector auxiliar llamado CONSIGNABAJARx256 se calcula una veloc
7. u Escuela de tae U iversidad 59 Ingenieria y Arquitectura 181 48 Zaragoza Universidad Zaragoza 1542 Provecto Fin de Carrera Control digital con FPGA de actuador lineal en lazo cerrado Autor Jos Luis Ruiz G mez Director Jos Ignacio Artigas Convocatoria Junio 2013 Titulacion Ingenieria T cnica Industrial Especialidad Electronica Industrial RESUMEN Este proyecto sigue con el desarrollo del control de un prototipo de actuador lineal para utilizarlo como emulador de equinoterapia que comenzo otro alumno como proyecto fin de carrera Hasta el momento ste constaba de un motor de continua alimentado por un puente en H mediante la t cnica PWM y controlado por una FPGA que le mandaba la se al de PWM y el sentido de giro Ahora el prop sito es continuar con la mejora del proyecto aplicando un control en bucle cerrado que seguir una trayectoria recibida mediante el env o en serie de datos a trav s del ordenador Adem s tambi n se ha mejorado la placa de potencia haci ndola m s compacta y estrecha debido a que aunque s lo se controle un motor el objetivo final es el movimiento de una silla de caballo con 6 motores Por tanto se configura pensando en su posible ampliaci n INDICE CAPITULO Dana arene ome 5 4 210 16 10 LOC 10 TEE UU aci 5 1 1 ODEO Saa leue Nod 5 1 2 Motivacion e iet
8. gt ULTIMA 5 lt WRITE RAM nUART ESTADO zNADA when STOP gt nSALIDA RAM SALIDA if DRX 7 downto 5 011 or IU ESTADO RESET then nUART_ESTADO lt NADA elsif DRX 7 downto 5 111 then nUART_ESTADO lt PARAR end if when MANDARPOSENC_ON gt nSEPUEDEENVIAR lt 1 nUART_ESTADO lt NADA when MANDARPOSENC_OFF gt nSEPUEDEENVIAR lt 0 nUART_ESTADO lt NADA when others gt nUART_ESTADO lt UART_ESTADO end case end process Control de ram we lt RX_RDY2 and not RX_RDY3 contadores process CNT WRITE RAM CNT READ RAM we IU ESTADO CE 100 UART ESTADO begin nCNT WRITE RAM CNT WRITE RAM nCNT READ RAM CNT READ RAM 98 CONTADOR ESCRITURA EN LA RAM if IU ESTADO RESET then nCNT_WRITE_RAM lt others gt 0 nCNT_READ_RAM lt others gt 0 elsif we 1 and UART_ESTADO LEERDATOS then if CNT_WRITE_RAM lt 2 ADDRESS WIDTH 1 then evitamos desbordamiento nCNT WRITE RAM CNT WRITE 1 else nCNT WRITE RAM CNT WRITE RAM end if end if CONTADOR LECTURA DE LA RAM if IU ESTADO CONTROL then if READ RAM CNT WRITE RAM 1 then if UART ESTADO STOP then nCNT_READ_RAM lt CNT_READ_RAM lt 1 frecuencia de 100 hz 10 ms end if else nC
9. 1 end if 95 end process Contador de referencia del pwm 0 90 Aumentamos de 10 en 10 en vez de en1en1 process FUP FDN CNT REF SW STEP2 begin if FUP 1 and FDN 0 and CNT REF 100 then UP nCNT REF lt CNT REF 10 elsif FUP 0 and FDN 1 and CNT_REF gt 0 then DOWN nCNT_REF lt CNT_REF 10 else nCNT_REF lt CNT_REF Asignacion por defecto end if if SW_STEP2 1 then Deshabilita FUP y FDN para la referencia nCNT_REF lt CNT_REF end if end process Comparador de PWM en el bucle cerrado BCD lt CNT_REF Decodificador de 7 segmentoS Modificado al haber aumentado de 10 en 10 SSEG lt 0000001 when BCD 0 else 1001111 when BCD 10 else 0010010 when BCD 20 else 0000110 when BCD 30 else 1001100 when BCD 40 else 0100100 when BCD 50 else 0100000 when BCD 60 else 0001111 when BCD 70 else 0000000 when BCD 80 else 0000100 AN lt 1110 DP lt 1 ENCODER e Encoder 360 pulsos revoluciA n y actuador 3 mm de paso gt 120 pulsos mm gt 12 pulsos d cima de mm process PULSO CHA CNT ENC CHB3 IU ESTADO FCI2 begin nCNT ENC lt ENC 96 if IU ESTADO RESET IU ESTADO RESETBC then tambien RESETBC por posibles desbordamiento debido a la inercia del motor ya que por RESET pasa en un momento nCNT_ENC lt 01111111111111
10. ase el cap tulo de programaci n en MATLAB En la FPGA se ha dise o una UART de recepci n para captar esta trayectoria Los datos de la trayectoria son almacenados en una memoria RAM donde se almacenan hasta que recibe el ltimo El actuador lineal tiene una carrera de 10 cm y por criterio propio se ha elegido que la resoluci n entre posici n y posici n del mismo sea de una d cima de mil metro Por lo que los 10 cm del v stago equivalen a 1000 posiciones del actuador El motor tiene solidario al eje un encoder que permite conocer la posici n de ste Antes de realizar el control en bucle cerrado hay que adaptar los datos de la trayectoria almacenada en la RAM dados en d cimas de mil metro para poder comparar con la posici n del encoder que viene dada en pulsos del encoder Finalmente para comprobar la respuesta del motor a la trayectoria enviada tambi n hay implementada una UART para enviar los datos del encoder desde la FPGA al ordenador que tambi n son procesados mediante MATLAB 12 ENCODER UART ENV O BUCLE ABIERTO PWM BUCLE CERRADO INB ORDENADOR UART_RECEPCI N FPGA Esquema del proyecto 1 4 Estructura del presente documento En este apartado se explica la estructura de la memoria dando una peque a introducci n de cada uno de los apartados de los que consta La memoria est formada por 8 cap tulos e Cap tulo 1 introducci n En este apartado se da una visi n general de
11. end end for 1 datosaleer for h 1 sizebuffer if mod h 6 1 if mod h 2 1 numerocompleto bitconcat binary h binary h 1 disp bin numerocompleto intnumerocompleto bin2dec bin numerocompleto posreal intnumerocompleto 12 200 z l posreal end end end datos fread PS sizebuffer uchar binary fi datos 0 8 0 end fid fopen archivoencoder txt w fprintf fid 96i Xn z load archivoencoder txt figure plot archivoencoder fclose fid clear z fclose PS end estado input INTRODUZCA EL NUMERO 1 stop 2 start 3 mandar posicion on 4 mandar posicion off 5 volver a mandar 6 salir 7 ver posici n if estado enviar 224 ASI TERMINA EL ESTADO EN EL QUE ESTE Y EMPIEZA EN RESET fopen PS Abre objeto fwrite PS enviar fclose PS estado 8 end 121 fclose PS delete PS clear PS fprintf ok enviar 001 32 010 64 stop 100 128 start 011 96 madarposon 101 160 mandarposoff 110 192 122 8 5 Bibliografia ELECTRONICA DIGITAL APLICACIONES PROBLEMAS Jos Ignacio Artigas Luis Angel Barragan Carlos Orrite Isidro Urriza Apuntes de Microelectr nica Manual de ayuda de MATLAB Memoria proyecto fin de carrera control con FPGA de actuador lineal para emulador de equinoterapia Javier Marco Estruc 8 6 Programas utilizados ISE 14 3 Matlab 2010 Realterm Hyperterminal Scilab 5 4 0 Adept Eagle 6 1 0 123
12. nCNT WRITE RAM CNT READ RAM nCNT READ RAM CNT ENVIAR nCNT ENVIAR ULTIMA POS std logic vector ADDRESS WIDTH 1 DOWNTO 0 signal E PARIDAD E FORMATO E SOBRESCRITURA std logic No se usan signal FCI1 FCI2 FCS1 FCS2 ILIM1 ILIM2 std logic signal CHA1 2 1 CHB2 CHB3 std logic signal SW SUBE2 SW SUBE1 SW BAJA2 SW 1 std logic 86 signal SW_STEP2 SW STEP1 SW CICLO2 SW 1 std logic signal DIV 10K nDIV 10K std logic vector 12 downto 0 CE 10K de 10 kHz signal DIV 100K nDIV 100K std logic vector 8 downto 0 Genera CE 100K de 100 kHz signal DIV 100 nDIV 100 std logic vector 6 downto 0 Genera CE 100 de 100 Hz a partir de CE 10K signal DIV 200 nDIV 200 std logic vector b downto 0 Genera CE 200 de 200 Hz a partir de CE 10K signal DIV TX nDIV TX std logic vector 9 downto 0 Genera EN CLKTx de 115200 Hz 57600 Hz signal DIV RX nDIV RX std logic vector 5 downto 0 Genera CLKRx 16 veces m s r pido que 115200 Hz 57600 Hz signal CNT TIME nCNT TIME std logic vector 14 downto 0 Contador de periodos de 100 Hz desde el reset 5 min signal CNT REF nCNT REF std logic vector 6 downto 0 MODIFICADO MAS GRANDE signal CNT PWM nCNT std logic vector 6 downto 0 ESTE TAMBIEN
13. 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 RX lt O wait for 17600 RX lt O wait for 17600 ns RX lt 1 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns wait for 46000 us RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 01100000 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO 75 wait for 17600 ns wait for 46000 us RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 11010110 NO ENVIAR POS ENCODER RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 0
14. 1 000 500 2 000 1 500 1 000 500 Ganancia del regulador 0 5 con sobreoscilacion la respuesta 19 2 000 1 500 1 000 500 c e a a a 4 a C a cu e a oo a Y a oa 20 o e ce o LS ce 4 o eC ce eu e e wa o L 2 000 1 500 1 000 500 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 5 0 8 Ganancia del regulador 0 125 2 000 1 500 1 000 500 a ce a Fi a La a a e a a ce ca ce e y F3 20 0 1 0 2 0 3 0 4 0 5 0 6 0 8 0 9 1 1 2 000 1 500 1 000 500 0 D D 1 D 2 D 3 0 4 05 0 5 07 0 9 Ganancia del regulador 0 05 CAPITULO 3 3 Dise o digital VHDL 3 1 Introduccion A la hora de abordar el dise o en VHDL se ha dividido la estructura 5 grandes bloques e UART emisor env a la posici n del encoder al ordenador cada 10 milisegundos e UART receptor recibe la trayectoria senoidal o escal n del ordenador e Memoria RAM almacena la trayectoria recibida e Adaptaci n de los datos almacenados en la RAM al bucle cerrado e Control bucle cerrado permite que el actuador siga la trayectoria almacenada en la RAM mediante las tres salidas INA INB y PWM A parte de sus respectivas m quinas de estado y de la programaci n en VHDL ya implementada La trayectoria a seguir por el actuador se env a discretizada con una frecuencia de mues
15. 24 voltios 100 esto supone que a la hora de programar el l mite es 100 y no 24 ERROR POS DESEADA ACOTADO CNT_ENCODER El proceso de calcular la posici n deseada POS_ DESEADA desde la RAM se explica continuaci n Utilizando un vector auxiliar llamado SINCRONIZADOR_RAM se une la parte alta y la parte baja del mismo dato que provienen de la RAM usando una operaci n MOD 2 Si el resultado es 1 es decir es impar el bloque de RAM anterior 1 que contiene los 5 bits m s significativos se introducen en los 5 bits de la parte alta del vector SINCRONIZADOR RAM y los del bloque impar en la parte baja Para ello CNT_READ_RAM tiene que ser mayor que 0 process data CNT READ RAM SINCRONIZADOR RAM IU ESTADO begin nSINCRONI ZADOR RAM lt S INCRONIZADOR RAM if CNT READ RAM then if CONV INTEGER CNT READ RAM mod 2 1 then nSINCRONIZADOR RAM 9 downto 5 SIGNED ram block CONV INTEGER CNT READ RAM 1 nSINCRONIZADOR RAM 4 downto 0 lt SIGNED ram block CONV INTEGER CNT READ RAM end if end if end process 34 En la maquina de estados UART_ESTADO se controla el valor de otro vector llamado SALIDA_RAM Asi en el caso del estado STOP SALIDA RAM permanece invariable y se consigue la parada del motor Este vector se actualiza cada 10 ms que es el tiempo en el que esta troceada la trayectoria a seguir por el motor SALIDA_RAM se actualiza con el valor de SINCRONIZADOR_RAM que contiene el dato completo
16. 256 10ms mm 8 0078125 S 36 Esto lo unico que supone es que vez de en 12 segundos y medio que tarda el peor caso en bajar desde arriba del todo hasta abajo es decir en recorrer los 100 mm que mide el vastago tardara 100mm 8 0078125 Lo que supone un error muy peque o 12 48 segundos Como previamente se ha multiplicado por 256 a la hora de dar valor a CONSIGNA los 8 bits menos significativos de CONSIGNABAJARx256 no se tienen en cuenta CONSIGNABAJARx256 se inicializa con el valor 10011110001000000000 Este valor es debido a que para que equivalga a 111111111111 que vale el contador encoder Como CONSIGNA antes de llegar a POS_ DESEADA se le suma 200 y se multiplica por 12 deshaciendo el camino 111111111111 32 767 que dividido entre 12 es 2730 menos 200 es 2530 que en binario es 100111100010 que con 8 bits que se a aden a la derecha es 10011110001000000000 es decir que para que POS_DESEADA sea todo 1 y por lo tanto igual a CNT_ENCODER y as que no se produzca ninguna diferencia CONSIGNABAJARx256 tiene que ser 10011110001000000000 Aun as se produce un ligero error debido a que 2530 200 12 es 32 760 111111111111000 y no 32 767 111111111111111 que es valor del que se part a El contador llamado CNT13 se utiliza para llevar la cuenta de los segundos que le cuesta bajar al motor Como se ha mencionado antes el caso en el que tarda m s en bajar es
17. P10DN pulsado disminuye 1 la velocidad del visualizador de 7 segmentos si es no disminuye m s e POOUP si es pulsado aumenta en 1 la velocidad del visualizador de 7 segmentos si es 9 no aumenta m s Los switches SW3 SW2 SW1 y SWO se utilizan en bucle abierto es decir con SW4 BUCLE abajo Si SW4 est arriba es indiferente la posici n de stos 62 e SW30CICLO repite un ciclo consistente en subir y bajar 20 mm continuamente La velocidad de subida y bajada es la representada en el visualizador e 5 2 STEP realiza una subida o bajada de 10 mm cada vez que se pulsa UP pulsador PO o DN pulsador P1 e SW10 BAJA hace bajar al actuador hasta que se desactiva o se alcanza a la velocidad elegida con los pulsadores e SWO SUBE hace subir al actuador hasta que se desactiva o se alcanza FCS a la velocidad elegida con los pulsadores Para el control en bucle cerrado se usa el programa de MATLAB Se elige la trayectoria del motor si es escal n o senoide Se copia y pega el contenido en la interfaz de MATLAB Si es una senoide aparecer el siguiente mensaje ingrese el valor de amplitud de la senoide ingrese el n mero de divisiones ingrese el punto de inicio de 0 a 1000 Cuantas m s divisiones tenga la senoide mejor se representar pero m s lento ir el motor Cada divisi n es un dato y stos son mandados como consigna al motor cada 10 ms por lo que indirectamente se
18. RI s V s Ks0 s 0 Despejando de 2 _ V s Ks0 s lis HR Ls Sustituyendo en 1 Js 6 s bs6 s KV K sels R Ls El diagrama de bloques queda Armature Load Voltage Velocity Angle V s e T s l S 1 S Js b 5 Vs K Back emf En funci n de la posici n angular s K o de la velocidad angular w s K R Ls Js b ER 16 2 3 Bucle cerrado Llegados este punto debido a que el encoder env a la se al de la posici n en la que se encuentra el motor tendremos que hacer un control de posici n y no de velocidad a s K rals FG RF Is 0 K 0 064 5 0 000000518s 0 000212256s 0 0059827s 0 064Kr Adem s debemos considerar otros elementos adicionales del sistema como son e Ganancia del encoder 360 2 pi ya que el encoder genera 360 pulsos para cada vuelta del motor e Saturaci n de 24 24 voltios que es el m ximo de la fuente de alimentaci n e Ganancia de la etapa PWM que cuenta de a 100 para la alimentaci n de O a 24 por tanto Gowm 100 24 Se ha simulado el sistema en bucle cerrado con un regulador proporcional usando Scilab para varias ganancias del regulador Esquema de simulaci n con Scilab Los resultados se muestran en las figuras siguientes en las que se observa en la primera gr fica la entrada en escal n en la segunda gr fica la tensi n y en la tercera la respuesta 17 2 000
19. Uncomment the following library declaration if using arithmetic functions with Signed or Unsigned values USE ieee numeric std ALL ENTITY TOPmotor DC IS END TOPmotor DC ARCHITECTURE behavior OF TOPmotor DC IS Component Declaration for the Unit Under Test UUT 65 COMPONENT motor_DC PORT CLK IN std logic RST IN std logic UP IN std logic DN IN std logic ILIM IN std logic IN std logic FCS IN std logic CHA IN std logic IN std logic SW SUBE IN std logic SW BAJA IN std logic SW STEP IN std logic SW CICLO IN std logic SW FC DISABLE IN std logic SW ILIM DISABLE IN std logic BUCLE IN std logic RX IN std logic PWM OUT std logic INA OUT std logic INB OUT std logic LED FCI OUT std logic LED FCS OUT std logic SSEG OUT std logic vector 6 downto 0 AN OUT std logic vector 3 downto 0 DP OUT std logic TX OUT std logic END Inputs signal CLK std logic 0 signal RST std logic 0 signal UP std logic 0 signal DN std logic 0 signal ILIM std logic 0 signal std logic 0 signal FCS std logic 0 signal CHA std logic 0 signal std logic 0 signal SW SUBE std logic 0 signal SW BAJA std logic 0 signal SW STEP std logic 0 signal SW CICLO std logic 0 signal SW FC DISABLE std logic 0 signal SW ILIM DIS
20. adimos 001 como bits m s significativos fopen PS Abre objeto fwrite PS enviar enviar bin2dec bin partebajabyte fwrite PS enviar end if i gt 1 partebajabyte bitget binario 5 1 1 disp bin partebajabyte partealtabyte bitget binario 10 1 6 disp bin partealtabyte enviar bin2dec bin partealtabyte fwrite PS enviar enviar bin2dec bin partebajabyte fwrite PS enviar end end fid fopen archivoconsigna txt w fprintf fid 96i n t load archivoconsigna txt figure plot archivoconsigna fclose fid enviar 64 fwrite PS enviar fclose PS elseif estado 1 119 enviar 128 fopen PS Abre objeto fwrite PS enviar fclose PS elseif estado 2 enviar 96 fopen PS Abre objeto fwrite PS enviar enviar 0 fwrite PS enviar fclose PS elseif estado 3 enviar 160 fopen PS Abre objeto fwrite PS enviar fclose PS elseif estado enviar 192 fopen PS Abre objeto fwrite PS enviar fclose PS elseif estado 7 fopen PS sizebuffer 6 0 n 0 datosaleer input ingrese el n mero de datos que quiere leer intnumerocompleto 2 while intnumerocompleto 1 datos fread PS sizebuffer uchar binary fi datos 0 8 0 for h 1 sizebuffer if mod h 6 3 if mod h 2 1 numerocompleto bitconcat binary h binary h 1 disp bin numerocompleto 120 intnumerocompleto bin2dec bin numerocompleto end end
21. anteriormente si ha habido un estado STOP START antes lo ultimo que el registro DRX contiene es 011 es decir se le manda que pare estado STOP pero al mismo tiempo como no se ha borrado el registro DRX se le manda que continue lo que debido a la frecuencia a la que trabaja la FPGA al ojo humano es como si no parase Por lo tanto en el programa de MATLAB en el momento que se envia 011 START inmediatamente despu s se envia 000 para limpiar el registro y asi evitar problemas 001 enviar empieza la trama de datos a recibir Los 5 bits menos significativos enviados junto a 001 tambi n son validos se guardan en la memoria RAM 010 terminar la trama de datos finaliza Los 5 bits menos significativos enviados junto a 010 no son validos no se guardan en la memoria RAM 011 start solo puede darse tras el estado STOP si se envia pero no estaba previamente en ese estado no pasa nada 100 stop para el motor pero el control en bucle cerrado sigue esto se consigue manteniendo la misma consigna de posici n todo el tiempo El siguiente estado s lo puede ser el de continuar con 011 o el de PARAR 111 parar el estado PARAR es s lo una transici n que permite cambiar al estado RESET del motor Est pensado para cuando el estado STOP es debido a que se llega a un fin de carrera si no existiera despu s del STOP vendr a el START y el motor seguir a realizando l
22. cuando tiene que recorrer todo el v stago con 12 48 segundos Como en este proyecto la idea es de controlar no s lo un motor si no m s de uno el primero que llega al final de carrera inferior de su v stago tiene que esperar al resto Por lo tanto la condici n para que se inicie el nuevo estado AJUSTAR es que el contador CNT13 sea 10100010100 1300 por que tiene un reloj de 10 ms lo que equivale a 13 segundos Tras este tiempo todos los motores habr n llegado abajo A CONSIGNA se le asigna el valor de O en el estado ESPERAR como referencia El estado AJUSTAR es parecido a BAJAR_TOPE De la RAM se extrae la primera posici n a la que tiene que llegar el motor Se utiliza un vector auxiliar llamado CONSIGNAx256 que de la misma manera que CONSIGNABAJARx256 se le ha a adido 8 bits m s CONSIGNAx256 empieza con el valor O y se le suma la primera posici n de la memoria RAM es decir se le a ade SALIDA_RAM Como luego los 8 bits menos significativos se desprecian la consecuencia es que el incremento es de SALIDA RAM 256 Como este vector tiene un reloj de 10ms tras 2 56 segundos o 256 iteraciones se llega a la primera posici n SALIDA RAM 256 SALIDA RAM j 37 2 5ALIDA_RAM 256 L SALIDA RAM 256 256 2 56 segundos En el estado CONTROL CONSIGNA directamente SALIDA RAM CONSIGNA contiene el valor deseado en d cimas de milimetro mientras que CNT ENCODER se mide en pulsos del encoder Antes de poder compa
23. dato cada 10 ms por lo que 50 divisiones por ejemplo equivalen a 0 5 segundos El punto de inicio equivale a la altura donde empieza el movimiento de la senoide la posici n de O a 10 cm del v stago a input ingrese el valor de amplitud de la senoide amplitud input ingrese el numero de divisiones divisiones puntoinicio input ingrese el punto de inicio de 0 a 1000 puntoinicio x linspace 0 2 pi d linspace se crea una recta divisiones para con sin una senoide para j round y i qli j Se redondea el valor de y En q se guarda todos los valores de j que son los que se env an a la FPGA binario fi j 0 10 0 El valor de se transforma binario con 10 bits para ser dividido en 2 vectores de 5 bits 43 if i partebajabyte bitget binario 5 1 1 disp bin partebajabyte partealtabyte bitget binario 10 1 6 disp bin partealtabyte enviar 32 bin2dec bin partealtabyte 32 gt a adimos 001 como bits mds significativos fopen PS Abre objeto fwrite PS enviar enviar bin2dec bin partebajabyte fwrite PS enviar end Si es el primer dato a enviar se le suma 32 que equivale a sumar 00100000 con lo que UART_ESTADO entiende que es el primer dato Si no se envia el resto if i gt 2 partebajabyte bitget binario 5 1 1 disp bin partebajabyte partealtabyte bitget binario 10
24. del vastago Estado 3 equivale a MANDAR POS ON y se suma 160 que es 10100000 Estado 4 equivale a MANDAR_POS_OFF y se suma 192 que es 11000000 Estado 5 inicializa las variables de la FPGA como son contador encoder y las consignas de bajar tope y de ajustar para que no se produzcan errores 45 fopen PS sizebuffer 6 0 n 0 datosaleer input ingrese el n mero de datos que quiere leer intnumerocompleto 2 while intnumerocompleto 1 datos fread PS sizebuffer uchar binary fi datos 0 8 0 for h 1 sizebuffer if mod h 6 3 if mod h 2 numerocompleto bitconcat binary h binary h 1 disp bin numerocompleto intnumerocompleto bin2dec bin numerocompleto end end end end Para leer los datos de la FPGA desde sta se envia de la siguiente manera Registro de datos a enviar por la UART nREG DTX 0 lt 00 ncNT ENC 13 downto 8 nREG DTX 1 lt nCNT ENC downto 0 nREG DTX 2 lt OO00 amp nCNT READ 11 downto 8 nREG DTX 3 lt nCNT READ 7 downto 0 nREG DTX 4 lt 0000000 NLD7 nREG DTX 5 lt 00000000 Se leen de 6 en 6 datos de la misma manera que se manda desde la FPGA de 6 en 6 Con datosaleer se indica cuantos datos se quieren leer Haciendo la operaci n mod h 6 3 se lee nREG_DTX 2 y se concatena con el siguiente vector nREG DTX 3 Intnumerocompleto equivale al CNT_READ_RAM si ste es 1 es porque se inicializa la lectura de la RAM y por lo ta
25. downto 8 nREG DTX 3 lt nCNT READ RAM 7 downto 0 nREG DTX 4 lt 0000000 amp NLD7 nREG DTX 5 lt 00000000 Multiplexor del dato a enviar por la UART DTX lt REG DTX 0 when REG DTX 0 else REG DTX 1 when CNT REG DTX 1 else REG DTX 2 when CNT DTX 2 else 94 REG_DTX 3 when REG DTX 3 else REG_DTX 4 when REG DTX 4 else REG DTX 5 M quina de estados para controlar UART TX process TX ESTADO CE 100 CLKTx TX RDY CNT REG DTX SEPUEDEENVIAR begin nTX ESTADO lt TX ESTADO WR lt 0 case 5 is when RESET gt if CE_100 1 and SEPUEDEENVIAR 1 then nTX ESTADO lt ESPERA end if when ESPERA gt if TX_RDY 1 then nTX ESTADO lt ENVIA end if when ENVIA gt WR_TX lt 1 if EN_CLKTx 1 then nTX_ESTADO lt INCREMENTA end if when INCREMENTA gt if 5 then nTX_ESTADO lt RESET else nTX_ESTADO lt ESPERA end if when others gt nTX_ESTADO lt RESET end case end process Detector flancos de subida de los pulsadores FUP lt UP2 and not UP3 FDN lt DN2 and not DN3 PULSO_CHA lt 2 and not Contador del periodo del pwm periodo 0 1 ms MODIFICADO process CNT_PWM begin 90 then nCNT lt others gt 0 else PWM lt CNT PWM
26. el dibujo que son Si ILIM2 es 0 entonces nlU_ESTADO ser RESET es decir que si hay una sobrecorriente no se siga con el programa Si UART_ESTADO PARAR entonces nlU_ESTADO sera RESET Esta condici n se cumple cuando y FCS se ponen a O y permite que el motor se pare en bucle cerrado lo que es lo mismo no permite que el motor se pase del final de carrera debido a la inercia propia de ste Si BUCLE2 0 esto significa que queremos acabar con el bucle cerrado para un control por bucle abierto y por tanto el siguiente estado es RESET Un switch permite elegir entre control en bucle cerrado y bucle abierto partiendo siempre del mismo estado de inicio RESET 32 En el estado RESETBC se esta la espera de recibir la trama de datos que contienen las posiciones que marcan la trayectoria que debe seguir el motor Y hasta que no se recibe el ultimo dato no se puede cambiar de estado Dependiendo de si el motor se encuentra abajo del todo 0 o de si est en alguna posici n intermedia arriba el siguiente estado ser ESPERAR si ya est abajo o BAJAR TOPE si no lo est El estado ESPERAR se ha implementado con la idea de que el control sirva para m s de un motor es decir dado el caso de tener dos motores o m s si uno est en una posici n intermedia y otro est en una posici n superior o inferior el primero que llegue abajo tendr que esperar al otro para empezar el siguiente estado AJUSTAR a l
27. el ciclo CE 100 se activa cada 100 Hz lo que implica que este bucle se ejecuta cada 10 ms todo el tiempo por lo que se ordena con SEPUEDEENVIAR si se quiere enviar o no 3 3 UART receptor El bloque receptor recibir el dato por Rx y una vez convertido en paralelo pasar a la salida DOUT indic ndose mediante la activaci n de la se al RxRDY Se compone de varios bloques sincronizador de la l nea de entrada m quina de estados contador de reloj que permita situarnos en el punto medio del nivel de la sefial de recepci n contador del bit de dato generador de paridad registro de desplazamiento serie paralelo generaci n de salida de datos y sefiales referentes al estado de la comunicaci n 24 En la siguiente tabla se muestra el conjunto se ales de entrada salida de este m bloque Lectura del dato recibido Dato en paralelo recibido Salida Indica que un nuevo dato ha sido recibido y est listo para ser le do ERROR_FORMATO Salida El formato no se corresponde con el RS232 SOBRESCRITURA Ha llegado un dato sin haber le do el anterior Se ales de entrada salida del bloque receptor ERROR_PARIDAD Error en paridad Al ser una se al asincrona el primer bloque ser un sincronizador compuesto por dos biestables Rx REG y Rx REG2 en cascada Al igual que hemos visto en la transmisi n en recepci n podemos distinguir tambi n cuatro estados Un primer estado de reposo que denominaremos S
28. end if end if end process Elecci n de consigna dependiendo de IU ESTADO process SALIDA_RAM IU_ESTADO CONSIGNAx256 CONSIGNABAJARx256 CNT13 UART_ESTADO begin nCONSIGNABAJARx256 lt CONSIGNABAJARx256 nCONSIGNAx256 lt CONSIGNAx256 nCNT13 lt CNT13 if IU ESTADO BAJAR then nCNT13 lt CNT13 1 if VART_ESTADO STOP then nCONSIGNABAJARx256 lt CONSIGNABAJARx256 else nCONSIGNABAJARx256 lt CONSIGNABAJARx256 205 end if CONSIGNA lt CONSIGNABAJARx256 21 downto 8 elsif IU ESTADO ESPERAR then nCNT13 lt CNT13 1 100 CONSIGNA lt others gt 0 POSICION 0 elsif IU ESTADO AJUSTAR then if VART_ESTADO STOP then nCONSIGNAx256 lt CONSIGNAx256 else nCONSIGNAx256 lt CONSIGNAx256 SALIDA_RAM end if CONSIGNA lt CONSIGNAx256 21 downto 8 elsif IU ESTADO CONTROL then CONSIGNA lt SALIDA_RAM else nCONSIGNAx256 lt others gt 0 nCONSIGNABAJARx256 lt 0010011110001000000000 2530 8ceros gt 111111111111111 32767 12 2730 200 2530 gt Deshaciendo el bucle CONSIGNA lt 00100111100010 2530 gt 200 2730 12 32760 nCNT13 lt others gt 0 end if end process Calculos para la diferencia entre la posicion deseada y el encoder OPERACION 1 lt conv_signed CONSIGNA 14 OPERACION 2 lt 0OPERACION1 200 OPERACION3 OPERACION2 10 downto 0 8 0000 OPERACION4 lt OPERACION2 12 downto 0 amp 00 POS DESEADA lt OPERACION3 OPERACIONG4 DIFERENCIA lt SIGNED 0 amp POS DESEADA SIGNED O amp
29. indica el periodo de la senoide El punto de inicio refleja la altura donde comienza el movimiento senoidal O es en el final de carrera inferior y 1000 10 cm por encima es decir en el final de carrera superior Si es un escal n ingrese el valor de la altura del escal n ingrese el n mero de divisiones ingrese el punto de inicio Cuyo tiempo arriba y tiempo abajo es la mitad del periodo y el periodo es el n mero de divisiones multiplicado por 10 milisegundos Tras introducir los datos se crea un archivo llamado archivoconsigna txt con las posiciones generadas que se mandan al motor Despu s de ser enviados todos los datos al motor se genera el siguiente mensaje INTRODUZCA EL NUMERO 1 stop 2 start 3 mandar posicion on 4 mandar posicion 011 5 volver a mandar 6 salir ver posici n 63 Seg n el numero introducido se ejecutara una orden otra Es recomendable esperar a que el motor se encuentre en el estado de CONTROL tras haberse ejecutado los anteriores estados para introducir el numero e 1STOP para el motor en la posici n en la que se encuentre La parada se realiza en bucle cerrado por lo que el motor no puede moverse debido al peso o por cualquier otra circunstancia e 2 START tras el estado STOP pone en marcha al motor siguiendo la misma trayectoria que ten a antes de parar e 3MANDAR_POS_ON no se usa e 4MANDAR POS OFF no se usa El punto 3 y 4 est n implementados por lo tanto funcion
30. la caracterizaci n posterior del actuador 10 1 2 Motivacion del proyecto Se busca la mejora de un proyecto ya hecho cuya finalidad es la equinoterapia como tratamiento m dico para pacientes con enfermedades neurodegenerativas y traumatol gicas Para mas informacion v ase beneficios de la equinoterapia en la memoria del proyecto CONTROL CON FPGA DE ACTUADOR LINEAL PARA EMULADOR DE EQUINOTERAPIA de JAVIER MARCO ESTRUC La finalidad del proyecto es que el actuador describa trayectorias prefijadas transmitidas desde un ordenador Motor la estructura final En la imagen se observa la FPGA conectada al ordenador mediante su cable de alimentacion y un cable adaptador USB puerto serie USB al ordenador y puerto serie a la FPGA La placa marr n es la de potencia del proyecto anterior que se conecta a la FPGA mediante un header y del motor salen cuatro grupos de cables correspondientes a los dos finales de carrera y al encoder y los cables negro y rojo de la placa de potencia 11 1 3 Diagrama de bloques del proyecto ALIMENTACI N ALIMENTACI N ALIMENTACI N 5 V USB 24V M ACTUADOR LINEAL FPGA ETAPA DE MOTOR ENCODER CONTROL POTENCIA ewe FINALES DE CARRERA ORDENADOR Diagrama de bloques general Con el ordenador se env a a trav s de un programa realizado en MATLAB la trayectoria que el motor debe seguir Para este proyecto se ha implementado una trayectoria senoidal y otra en escal n V
31. los pasos dados en el desarrollo de este proyecto y de las tres grandes funciones que lo componen e Cap tulo 2 control en bucle cerrado Caracterizaci n del sistema f sico compuesto por el motor y su estructura y por el encoder y de las inercias y rozamientos propios del sistema as como de su control en bucle cerrado y de la estrategia seguida e Cap tulo 3 dise o digital en VHDL e Cap tulo 4 programaci n en MATLAB Programaci n de dos trayectorias el motor una senoide y un escal n e Cap tulo 5 conexi n del actuador Se detalla tanto el interfaz de usuario como los pines de los finales de carrera y del encoder e Cap tulo 6 simulaciones Simulaciones del dise o en VHDL e Capitulo 7 Mejoras y reducci n de la placa de potencia e Cap tulo 8 anexos 13 CAPITULO 2 2 Control en cerrado 2 1 Motor de corriente continua El motor que se usa el modelo GR63x55 de ELMEQ que se caracteriza por ser de excitaci n independiente y tener imanes permanentes en vez de devanados Los principales motivos por los que se eligi fueron e Control muy sencillo e Requieren poca electronica para su manejo e Elevada eficiencia eram TE 39 WA 3000 2000 8120 1000 010 GR 63x55 24V Motor GR63x55 y curva caracter stica 2 2 Sistema f sico Representaci n esquem tica del motor DC Al aplicar una tensi n en los bornes del motor se genera u
32. puntos adicionales P1 para el flanco de subida del escal n y p2 para el flanco de bajada Para leer datos como en la senoide simplemente se lee el contador encoder desde el momento en el que CNT_READ_RAM es 1 se elige 1 y no O porque el CNT_READ_RAM se actualiza cada 5 ms mientras que los datos se env an cada 10 ms por lo que CNT_READ_RAM siempre es impar al ser enviado 48 CAPITULO 5 5 del actuador 5 1 utilizada La placa con la que se ha trabajado es una Nexys2 1200 de DIGILENT 4911 5 pons e gt E gt gt s s Lr i B E DIGILE JE BEYOND THEO 0 SWITCHES 2 u TIN Ri 4 zc F 35235 rw se gt B A trav s del puerto serie se reciben los datos del ordenador En los conectores PMOD van las placas de potencia Los switches y pulsadores se explican a continuaci n 5 2 Interfaz de usuario de la FPGA 555 LEDs os 2756 eqmaentdisplay dio bios dios ol t EIE SW7 SW6 SW5 SW4 SW3 SW2 SW1 SWO AES dE o lle BTN3 BTN BIN1 BTNO A LCA amp 3 slide switehes A ustrbtittons 49 ILIM BUCLE CICLO STEP RST DN Disable Disable ILIM Disable desactiva la limitaci n de instensidad FC Disable desactiva los finales
33. que reciba una orden B nconsignabajan256 21 0 m n NI NN B En el estado BAJAR cada 10 ms CONSIGNABAJARx256 se reduce en 205 como se ha explicado anteriormente if IU ESTADOSBAJAR TOPE then nCNT13 CNT13 41 if UART ESTADO SGTOP then nCONSIGNABAJARxZ564 CONSIGNABAJARx2956 else nCONSIGNABAJARxZ56 CONSIGNABAJARx256 205 end if consigna 13 0 Cuando se activa el final de carrera inferior el siguiente estado es ESPERAR donde tras 13 segundos seguir con el estado AJUSTAR A CONSIGNA se le asigna el valor de referencia O esperar ajustar 2 cnti3 10 0 10100010100 10100010101 En el estado CONTROL sincronizador ram recoge el dato de la memoria RAM cada vez que CNT_READ_RAM es impar a la frecuencia de 50 MHz por lo que el cambio se produce al instante mientras que SALIDA_RAM se actualiza cada 10 ms 53 usc JE 1 lu_estado control uart estado tam_block 0 4095 01111 10101 0114 01111 10101 01111 11010 01111 11111 01111 110 10 JUUQU UUUUU JUUUU QUUUU UUUUU UU A drxf7 0 I Tome o o po A 0000011111111 0000111111010 0000011111111 00000111111010 J 0000011110101 0000001111100 nsalida_ram 13 0 00000111111111 salida_ram 13 0 00000111111010 11 0 cnt_write_ram 11 0 MA operacion1 13 0 i POS_DESEADA depender del valor de CONSIGNA en este caso valdr 32760 por que CONSIGNA e
34. set PS StopBits 1 se configura bit de parada a uno set PS DataBits 8 se configura que el dato es de 8 bits set PS Parity even 96 se configura sin paridad set PS FlowControl none Sin control de hardware estado 8 while estado 6 if estado a input ingrese el valor de amplitud de la senoide amplitud d input ingrese el n mero de divisiones divisiones puntoinicio input ingrese el punto de inicio de O a 1000 puntoinicio x linspace 0 2 pi d y a sin x puntoinicio d d 1 for i 1 d j round y i q i j binario fi j 0 10 0 if i 1 partebajabyte bitget binario 5 1 1 disp bin partebajabyte partealtabyte bitget binario 10 1 6 disp bin partealtabyte enviar 32 bin2dec bin partealtabyte 32 gt a adimos 001 como bits m s significativos fopen PS Abre objeto fwrite PS enviar enviar bin2dec bin partebajabyte fwrite PS enviar 114 end if i gt 2 partebajabyte bitget binario 5 1 1 disp bin partebajabyte partealtabyte bitget binario 10 1 6 disp bin partealtabyte enviar bin2dec bin partealtabyte fwrite PS enviar enviar bin2dec bin partebajabyte fwrite PS enviar end end fid fopen archivoconsigna txt w fprintf fid 96i n q load archivoconsigna txt figure plot archivoconsigna fclose fid 64 fwrite PS enviar fclose PS elseif estado 1 enviar 128 fopen PS Abre
35. siguiente estado RESET BUCLE lt 0 FCl lt 0 wait for 0 1 ms volvemos a RESETBC con el fin de carrera activado BUCLE lt 1 wait for 0 1 ms volvemos a CONTROL pasando por ajuste wait for 0 1 ms wait for 100 ns wait for CLK_period 10 wait end process END 84 8 3 2 MOTOR DC Control en bucle abierto UART de 8 bits datos 57600 baudios A 115200 scilab no llega library IEEE use IEEE STD_LOGIC_1164 ALL use IEEE STD LOGIC ARITH ALL use IEEE STD LOGIC UNSIGNED ALL use IEEE STD LOGIC SIGNED ALL entity motor DC is Port CLK in STD LOGIC RST in STD LOGIC UP in STD LOGIC DN in STD LOGIC ILIM in STD LOGIC FCl in STD LOGIC ESTADOS FCS in STD LOGIC DE ESTADOS CHA in STD LOGIC ENCODER CHB in STD LOGIC ENCODER SW_SUBE in STD LOGIC SW_BAJA in STD LOGIC SW_ STEP in STD LOGIC SW_CICLO in STD LOGIC FSUBBLOQUE DETECTOR DE FLANCOS SUBBLOQUE DETERTOR DE FLANCOS CORRIENTE EXCESIVA activo L MAQUINA DE ESTADOS FINAL DE CARRERA INFERIOR activo L MAQUINA DE FINAL DE CARRERA SUPERIOR activo L MAQUINA CANAL A ENCODER SUBBLOQUE CANAL ENCODER SUBBLOQUE Sube hasta FCS Baja hasta FCI e inicializa CNT_ENC al llegar Sube o baja una distancia fija al pulsar UP o DN para test Ciclo de subidas y bajadas sin fin SW FC DISABLE in STD LOGIC Deshabilita los finales de carrera MUY PELIGROSO SW I
36. sistema en reposo sin envio de datos Por ello se ha elegido un nico estado denominado STOP que represente ambas situaciones correspondiente al bit de stop y al estado de reposo Rx_REG2 1 CNTCLK T AST INICIO CATCLIE 15 15 CNTBIT 7 CNTCLK 15 El bloque receptor genera tres se ales de salida que permiten comprobar el estado de la comunicacion La se al ERROR_PARIDAD indica al receptor de la recepci n de un dato al comprobar la paridad ERROR PARIDAD lt 1 when ESTADO PARIDAD and CNTCLK 7 and BIT PARIDAD Rx REG2 else PEE e La se al ERROR FORMATO indica que el formato de recepci n no se corresponde con el RS232 Una forma f cil de comprobarlo consiste en verificar que el bit de STOP sea 1 ERROR FORMATO lt 1 when ESTADO STOP and CNTCLK 7 and Rx REG2 0 else 0 Por ltimo la se al SOBRESCRITURA indica si se ha recibido un nuevo dato sin haber llegado a leer el dato previamente recibido SOBRESCRITURA lt 1 when ESTADO PARIDAD and CNTCLK 7 and IGUAL PARIDAD 1 and RxRDY REG 1 else 0 Aunque estas se ales no se usan El registro que almacena el dato recibido en el programa principal es DRX No hace falta una m quina de estados adicional en el programa principal 26 3 4 Habilitaci n del reloj del emisor y receptor La velocidad de recepci n y env o
37. 0111111 RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO 76 wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00011010 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt T wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00011111 RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O 77 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 1
38. 1 6 disp bin partealtabyte enviar bin2dec bin partealtabyte fwrite PS enviar enviar bin2dec bin partebajabyte fwrite PS enviar end fid fopen archivoconsigna txt w fprintf fid i n q load archivoconsigna txt figure plot archivoconsigna fclose fid En el archivoconsigna txt se guarda los valores enviados a la FPGA contenidos en q y se dibuja enviar 64 fwrite PS enviar fclose PS Si no es el primer dato se env a sin sumar nada Cuando se acaban los datos se suma 64 que equivale a 1000000 que se interpreta como ltimo dato 44 elseif estado 1 enviar 128 fopen PS Abre objeto fwrite PS enviar fclose PS elseif estado enviar 96 fopen PS Abre objeto fwrite PS enviar enviar 0 fwrite PS enviar fclose PS elseif estado 3 enviar 160 fopen PS Abre objeto fwrite PS enviar fclose PS elseif estado 4 enviar 192 fopen PS Abre objeto fwrite PS enviar fclose PS if estado enviar 224 ASI TERMINA EL ESTADO EN EL QUE ESTE Y EMPIEZA EN RESET fopen PS Abre objeto fwrite PS enviar fclose PS estado 8 end Estado 1 equivale a STOP y se suma 128 que es 10000000 Estado 2 equivale a START y se suma 96 que es 01100000 se envia otro dato adicional porque DRX guardara el valor de 01100000 si se produce un STOP por los finales de carrera como se queda guardado el START no parara Si no se envia se saldra
39. 11 elsif IU ESTADO ESPERAR 2 0 then nCNT ENC 0000100101100000 posicion 0 200 12 20 mm desde pos abajo para que no desborde elsif PULSO CHA 1 then if CHB3 0 then nCNT ENC lt CNT ENC 1 sube else nCNT_ENC lt CNT ENC 1 baja end if end if end process PWM BUCLE CERRADO M quina de estados para el control del motor seg n las instrucciones recibidas process DRX UART ESTADO SINCRONIZADOR RAM SEPUEDEENVIAR SALIDA RAM CNT WRITE RAM FCS2 FCI2 IU ESTADO begin nSALIDA RAM zSINCRONIZADOR RAM nUART ESTADO UART ESTADO nSEPUEDEENVIAR lt SEPUEDEENVIAR case UART_ESTADO 5 when LEERUNAVEZ gt if DRX 7 downto 5 001 then nUART_ESTADO lt LEERDATOS end if when NADA gt case DRX 7 downto 5 is when 001 gt nUART_ESTADO lt LEERDATOS when 100 gt nUART ESTADO STOP when 101 gt nUART ESTADO MANDARPOSENC when 110 gt nUART ESTADO MANDARPOSENC OFF when 111 gt nUART ESTADO PARAR when others gt 97 2 0 or 52 0 and IU ESTADO CONTROL then nUART ESTADO lt STOP elsif FCS2 0 and IU ESTADO AJUSTAR then nUART ESTADO STOP else nUART ESTADO lt UART ESTADO end if end case when PARAR nUART ESTADO zNADA when LEERDATOS gt nSALIDA RAM SALIDA if DRX 7 downto 5 010 then nUART ESTADO ACABANDATOSRX end if when ACABANDATOSRX
40. 224 ASI TERMINA EL ESTADO EN EL QUE ESTE Y EMPIEZA EN RESET fopen PS Abre objeto fwrite PS enviar fclose PS estado 8 end end fclose PS delete PS clear PS fprintf ok 117 enviar 001 32 010 64 stop 100 128 start 011 96 101 160 mandarposoff 110 192 111 224 8 4 2 ESCALON clear all close all PS serial COM set PS Baudrate 57600 se configura la velocidad a 57600 Baudios set PS StopBits 1 96 se configura bit de parada a uno set PS DataBits 8 se configura que el dato es de 8 bits debe estar entre 5 y 8 set PS Parity even 96 se configura sin paridad set PS FlowControl none 96Sin control de hardware o software to estado 8 while estado 6 if estado al input ingrese el valor de la altura del escal n altura d input ingrese el n mero de divisiones divisiones puntoinicio input ingrese el punto de inicio punto de inicio referencia puntoinicio p1 round d 10 p2 round 6 d 10 for i 1 d 0 d puntoinicio al 1 puntoinicio al 1 t i puntoinicio if 1 puntoinicio puntoinicio al elseif i p2 puntoinicio puntoinicio al end binario fi puntoinicio 0 10 0 if 1 partebajabyte bitget binario 5 1 1 disp bin partebajabyte partealtabyte bitget binario 10 1 6 118 disp bin partealtabyte enviar 32 bin2dec bin partealtabyte 32 gt a
41. 6 DATO 00010010 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00010110 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O 78 wait for 17600 RX lt 0 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00010010 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt T wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DA
42. ABLE std logic 0 signal BUCLE std logic 1 signal RX std logic 0 Outputs signal PWM std logic signal INA std logic signal INB std logic signal LED FCI std logic signal LED FCS std logic signal SSEG std logic vector 6 downto 0 signal AN std logic vector 3 downto 0 signal DP std logic signal TX std logic Clock period definitions constant CLK period time 20 ns BEGIN Instantiate the Unit Under Test UUT uut motor DC PORT MAP CLK gt CLK RST gt RST UP gt UP DN gt DN ILIM gt ILIM gt 5 gt 5 gt CHB gt SW SUBE gt SW SUBE SW BAJA gt SW BAJA SW STEP gt SW STEP SW CICLO gt SW CICLO SW FC DISABLE gt SW FC DISABLE SW ILIM DISABLE gt SW ILIM DISABLE BUCLE BUCLE RX gt RX PWM gt PWM INA gt INA 67 INB gt INB LED FCI gt LED LED_FCS gt LED FCS SSEG gt SSEG AN gt AN DP gt DP TX gt TX Clock process definitions CLK_ process process begin CLK lt 0 wait for CLK_period 2 CLK lt 1 wait for CLK_period 2 end process RST lt 1 0 after 20 ns Stimulus process stim_proc process begin UP lt 0 DN lt 0 ILIM lt 1 FCI lt 1 FCS lt 1 CHA lt 0 lt 0 SW SUBE lt 0 SW BAJA lt 0 SW STEP lt 0 SW CICLO lt 0 S
43. AJA2 lt SW BAJA1 SW BAJA1 lt SW BAJA SW STEP2 lt SW STEP1 SW STEP1 lt SW STEP SW CICLO2 lt SW CICLO1 SW CICLO1 lt SW CICLO DIV 100 nDIV 100 200 lt nDIV 200 end if if CE 100 1 then Registros con habilitacion de 100 Hz 91 13 lt 13 lt REG_DTX lt nREG DTX end if if CE_200 1 then Registros con habilitacion de 200 Hz end if end process Clock enable 10 kHz process DIV_ 10K begin if DIV_10K 4999 then nDIV 10K lt gt 0 else nDIV_10K lt DIV_10K 1 end if end process CE_10K lt 1 when DIV 10K 4999 else 0 Clock enable 100 kHz process DIV 100K begin if DIV_100K 499 then nDIV_100K lt others gt 0 else nDIV_100K lt DIV_100K 1 end if end process CE 100K lt 1 when DIV_100K 499 else 0 de 100 KHz Clock enable 100 Hz DIV_100 se habilita con CE_10K process DIV_ 100 NN Afiadido para la frecuencia 92 begin if DIV_100 99 then nDIV 100 lt others gt 0 else nDIV_100 lt DIV_100 1 end if end process CE_100 lt 1 when DIV_100 99 CE_10K 1 else 0 Clock enable 200 Hz DIV_200 se habilita con CE_10K 5 ms process DIV_200 begin if DIV_200 49 then nDIV 200 lt others gt 0 else nDIV 200 lt DIV 200 1 end if end process CE 200 lt 1
44. En este proyecto se trabaja con uno de los actuadores que esta formado por un motor de corriente continua una FPGA para el control del mismo una placa de potencia y una fuente de alimentaci n El punto de partida es el proyecto final de carrera de Javier Marco Estruc llamado CONTROL CON FPGA DE ACTUADOR LINEAL PARA EMULADOR DE EQUINOTERAPIA en el cual con el dise o digital en VHDL en una FPGA se manejaba el actuador lineal mediante un puente en H en bucle abierto Diagrama de bloques general del proyecto de Javier Marco Proyecto final de carrera de Javier Marco la derecha se encuentra el actuador lineal la placa verde es la FPGA la placa marron es la placa de potencia y la fuente de alimentacion es lo de la izquierda El actuador lineal tiene un rango de 10 cm de carrera a ambos extremos se encuentran dos finales de carrera el superior y el inferior Solidario al eje del motor se situa un encoder que permite conocer la posici n de ste Tanto el encoder como los finales de carrera se conectan a la FPGA Para el control del actuador lineal se necesita dos circuitos el de control dise ado en VHDL en la FPGA y el de potencia La t cnica para el control de la velocidad del motor es la de PWM que se explica posteriormente comparador de intensidad sensor de corriente cambiador de nivel e TITLE esquema Date 10 01 2012 1 38 47 Sheet 1 1 Esquema de la placa de potencia de Javier Marco La placa de
45. IGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00011010 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns 70 RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00001111 RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00011111 RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns 71 RX lt 0
46. LD3 lt 0 LD4 lt 0 LD5 lt 0 LD6 lt 0 LD7 lt 0 elsif CLK event and 17 then Registros CNT ENVIAR lt nCNT ENVIAR FCI2 FCI1 FCI1 lt FCI or SW FC DISABLE FCS2 FCS1 FCS1 FCS or SW FC DISABLE ILIM2 lt ILIM1 ILIM1 lt ILIM or SW ILIM DISABLE 90 lt 2 2 lt 1 1 lt CHB3 lt CHB2 2 lt 1 1 lt RDY3 RX RDY2 RX RDY2 RX RDY1 RX RDY1 RX RDY 10K lt nDIV DIV_100K lt nDIV 100K DIV TX lt nDIV TX DIV_RX lt nDIV REG lt nCNT REG DTX TX ESTADO lt nTX ESTADO IU ESTADO lt nIU ESTADO UART ESTADO nUART ESTADO lt FINS CNT ENC lt nFINS CNT Limite de la subida CNT ENC lt nFINB CNT Limite de la bajada SINCRONIZADOR _RAM lt nSINCRONIZADOR SEPUEDEENVIAR lt nSEPUEDEENVIAR LD3 lt NLD3 LD4 lt NLD4 LD5 zNLD5 LD6 lt NLD6 LD7 lt NLD7 if CE_100K 1 then Registros con habilitacion de 100 kHz Modificado lt end if if CE 10 1 then Registros con habilitacion de 10 kHz CNT REF lt nCNT REF UP3 UP2 UP2 UP1 UP1 UP BUCLE2 BUCLE1 BUCLE1 lt BUCLE DN3 DN2 DN2 DN1 DN1 DN SW SUBE2 lt SW SUBE1 SW SUBE1 lt SW SUBE SW B
47. LIM DISABLE in STD LOGIC Deshabilita limitacion de intensidad BUCLE in STD_LOGIC Elegir bucle abierto 0 o cerrado 1 RX in STDs LOGIC RECepclOn int es PWM out STD_ LOGIC INA out STD_LOGIC INB out STD_ LOGIC LED out STD LOGIC LED_FCS out STD_ LOGIC LEDO out STD LOGIC LED1 out STD LOGIC LED2 out STD LOGIC LED3 out STD LOGIC LED4 out STD_LOGIC SALIDA PWM FSENTIDO DE GIRO DEL MOTOR FSENTIDO DE GIRO DEL MOTOR 85 LED5 out STD LOGIC LED6 out STD LOGIC LED7 out STD LOGIC SSEG out STD LOGIC VECTOR 6 downto 0 out STD LOGIC VECTOR 3 downto 0 DP out STD LOGIC TX out STD LOGIC end motor DC architecture Behavioral of motor DC is signal UP1 UP2 UP3 DN1 DN2 DN3 std logic signal BUCLE1 BUCLE2 std CONSTANT ADDRESS WIDTH integer 12 14 1minuto gt 60segundos gt a 10ms gt 6000posiciones gt 1 posicion con dos vectores de 5bit gt 12000 gt 2414 CONSTANT WIDTH integer 5 signal data std logic vector DATA WIDTH 1 DOWNTO 0 signal we std logic TYPE MRAM IS ARRAY 0 TO 2 ADDRESS WIDTH 1 OF std logic vector DATA WIDTH 1 DOWNTO 0 SIGNAL ram block MRAM signal nCNT13 CNT13 std logic vector 10 DOWNTO 0 13 segundos signal CNT WRITE RAM
48. MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00001111 MAS SIGNIFICATIVA DE 1001 mm EL PRIMER BIT SE DESPRECIA RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt T wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT ESTE ES EL ULTIMO QUE LEE LOS DOS ULTIMOS NO LOS LEE wait for 17600 ns 1100 16 DATO 00011010 MENOS SIGNIFICATIVA DE 1001 mm EL PRIMER BIT SE DESPRECIA RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 72 wait for 17600 RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 01000000 MENOS SIGNIFICATIVA DE 1001 mm EL PRIMER BIT SE DESPRECIA RX lt 0 MENOS SIG
49. NB CNT lt CNT ENC 1200 Subir 10 mm desde posicion actual elsif SW CICLO2 1 and 52 1 then nIU ESTADO lt INI CICLO end if end if when INI CICLO gt nFINS lt 2400 Subir 20 mm desde posicion actual nFINB CNT lt CNT Luego bajar hasta posicion actual nlU ESTADO lt I when PARO gt if SW CICLO2 1 then nIU ESTADO lt SUBIDA else nIU ESTADO lt RESET end if when SUBIDA INA 1 if ILIM2 0 or 52 0 then nIU ESTADO lt RESET elsif SW_SUBE2 0 and SW 5 2 0 and SW CICLO2 0 then nIU ESTADO lt RESET elsif SW STEP2 1 and CNT ENC FINS CNT then nIU ESTADO lt RESET elsif SW CICLO2 1 ENC FINS then nIU ESTADO lt PARO S end if when PARO S gt 105 if SW_CICLO2 1 then nlU_ ESTADO lt else nIU ESTADO lt RESET end if when BAJADA gt INB lt 1 if ILIM2 0 or FCI2 0 then nIU ESTADO lt RESET elsif SW_BAJA2 0 SW_STEP2 0 and SW_CICLO2 0 then nlU_ESTADO lt RESET elsif SW_STEP2 1 and CNT ENC FINB CNT then nlU_ ESTADO lt RESET elsif SW_CICLO2 1 and CNT ENC FINB ENC then nlU ESTADO lt PARO I end if when others gt nlU ESTADO lt RESET end case end process end Behavioral 8 3 3 UART_TX Bits datos parametrizable 1 bit STOP paridad impar library ieee use
50. NIFICATIVO wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 01000000 ENVIAR POS ENCODER RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns 73 RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns wait for 156000 us CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns CHB lt 0 wait for 50 ns lt 0 wait for 50 ns CHB lt 1 wait for 50 ns lt 1 wait for 50 ns CHB lt 0 wait for 50 ns lt 0 wait for 50 ns CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns CHB lt 0 wait for 50 ns lt 0 wait for 50 ns FCI lt 0 RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 10000000 74 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt
51. NING Xst 1336 More than 100 of Device resources are used WARNING Pack 266 The function generator EN CLKEx cmp eq0000 failed to merge with FS multiplexer Inst Rx RxRDY REG not00011 f5 There a conflict for the FXMUX The design will exhibit suboptimal timing RAM con 2 Por eso en este proyecto se trabaja con 277 porque para minimizar el tama o que ocupa hacen falta herramientas de las que no se dispone 2 equivale a 4096 vectores y se necesitan 2 vectores para formar un dato El m ximo de datos que se puede almacenar con este tama o es de 2048 Para acceder a la memoria se dispone de dos contadores CNT WRITE RAM y CNT READ RAM que como indica su nombre uno es para escribir en la Ram y otro para leer de la Ram 29 3 6 Maquina de estados el control del motor segun las instrucciones recibidas Este apartado junto con el siguiente son los mas importantes y explican el funcionamiento del motor desde una perspectiva a nivel usuario y desde dentro DRX 7 downto 5 110 DP LEERUNAVEZ NADA E ENC_ON O DRX 7 downto swoon DRX 7 downto 5 001 Ver downto 5 110 EMPIEZAN MANDARPOS DATOSRX ENC_OFF i DRX 7 downto 5 111 LEERDATOS PARAR DRX 7 downto 5 011 or IU_ESTADO RESET DRX 7 downto DRA 7 downto 5 100 DRX 7 downto 5 111 ACABAN DATOSRX Llegados este punto se plantea el control del motor a nivel de usuario UART_ESTADO Empieza en el es
52. NLD5 lt 0 NLD6 lt 1 NLD7 lt 0 if ERROR ACOTADO O0 then INA lt 1 lt 0 elsif ERROR ACOTADO O then INA lt 0 lt 1 else lt 0 lt 0 end if if ILIM2 0 then nlU_ESTADO lt RESET elsif CONSIGNA SALIDA_RAM then nlU_ ESTADO lt CONTROL elsif UART_ESTADO PARAR then nlU_ESTADO lt RESET elsif BUCLE2 0 then nlU_ESTADO lt RESET else nlU_ESTADO lt AJUSTAR end if escribir algo when CONTROL gt NLD3 lt 0 NLD4 lt 0 NLD5 lt 0 NLD6 lt 0 NLD7 lt 1 if ERROR ACOTADO O0 then INA lt 1 lt 0 elsif ERROR_ACOTADO lt O then INA lt 0 lt 1 else 104 lt 0 lt 0 end if if ILIM2 0 then nlU_ESTADO lt RESET elsif BUCLE2 0 then nIU ESTADO RESET elsif UART_ESTADO PARAR then nlU_ESTADO lt RESET end if Bucle abierto sin modificar when RESET gt if BUCLE2 1 then nlU_ESTADO lt RESETBC else nFINS CNT lt 0111111111111111 nFINB CNT ENC lt others gt 0 if SW SUBE2 1 and FCS2 1 then nIU ESTADO lt SUBIDA elsif SW BAJA2 1 and 2 1 then nIU ESTADO lt BAJADA elsif SW 5 2 1 and FUP 1 and FCS2 1 then nlU ESTADO SUBIDA nFINS ENC lt CNT ENC 1200 Subir 10 mm desde posicion actual elsif SW 5 2 1 and FDN 1 and 2 1 then nlU ESTADO BAJADA nFI
53. NT_READ_RAM lt others gt 0 end if elsif IU ESTADO RESETBC then nCNT READ lt 4 gt 07 elsif IU ESTADO ESPERAR or IU ESTADO BAJAR then if READ RAM 1 and WRITE gt 0 then solo para sacar el primer dato nCNT READ RAM CNT READ 1 a frecuencia de 100 hz 10 ms else nCNT READ RAM CNT READ RAM end if end if end process Confirmacion de la recepci n del dato y guardado en memoria process CLK DRX IU ESTADO EN CLKRx we UART ESTADO CNT WRITE RAM begin if CLK event and CLK 1 then Registros 99 if EN CLKRx 1 then RD lt 0 elsif we 1 then RD lt 1 end if if we 1 and UART_ESTADO LEERDATOS then ram_block conv_integer CNT_WRITE_RAM lt DRX 4 downto 0 end if end if end process Uni n de los 4 bits m s significativos con los menos significativos en un registro para su posterior utilizaci n process data CNT_READ_RAM SINCRONIZADOR_RAM IU_ESTADO begin nSINCRONIZADOR_RAM lt SINCRONIZADOR_RAM if CNT_READ_RAMS gt 0 then if CONV_INTEGER CNT_READ_RAM mod 2 1 then nSINCRONIZADOR_RAM 9 downto 5 lt SIGNED ram_block CONV_INTEGER CNT_READ_RAM 1 nSINCRONIZADOR_RAM 4 downto 0 lt SIGNED ram_block CONV_INTEGER CNT_READ_RAM
54. P2 lt 0 lt 0 DN1 lt 0 DN2 lt 0 DN3 lt 0 BUCIETOSID BUCEO oe CNT_ENVIAR lt OTHERS gt 0 SALIDA_RAM lt others gt 0 CONSIGNABAJARx256 lt 0010011110001000000000 2530 8ceros gt 111111111111111 32767 12 2730 200 2530 gt Deshaciendo el bucle CNT13 lt others gt 0 FCI lt 0 FCI2 lt 0 89 FCS1 lt 0 FCS2 lt 0 ILIM1 lt 0 ILIM2 lt 0 1 lt 0 2 lt 0 CHA3 lt 0 CHB1 lt 0 2 lt 0 CHB3 lt 0 RX RDY1 lt 05RX RDY2 lt ee SW_SUBE2 lt 0 SW_SUBE1 lt 0 SW BAJA2 0 SW_BAJA1 lt 0 SW STEP2 0 SW_STEP1 lt 0 SW 2 lt 0 SW_CICLO1 lt 0 10K lt others gt 0 DIN TOOK s Others ne DIV 100 lt others gt 0 DIV 200 21010166 0 ee TX lt others gt 0 DIV_RX lt others gt 0 CNT_TIME lt others gt 0 CNT REF lt others gt 0 lt others gt 0 CNT_ENC lt 0111111111111111 DespuA s del reset descender actuador hasta empieza en O para que no se desborde por arriba FINS_CNT_ENC lt 0111111111111111 FINB_CNT_ENC lt others gt 0 REG DTX 0 TX ESTADO RESET IU ES TADOS NES ee UART ESTADO LEERUNAVEZ SEPUEDEENVIAR lt 1
55. PL PEN CIE 11 1 3 Diagrama de bloques del proyecto ss 12 1 4 Estructura del presente documento setius vcn eii eoa bte end es pr ieee 13 cure inet a ae 14 2 qu uit pet RE e RE Y E 14 2 1 Motor de Corriente conbiFdtld tesi au ei noses 14 2 2 14 2 3 UA ooo E E 17 CAPITULO 21 3 Dise o digital en ViDa riada caia 21 3 1 EE 21 3 2 A 22 3 3 UART TECOS Ona 24 3 4 Habilitaci n del reloj del emisor y receptor ss 27 3 5 Memoria rc 28 3 6 M quina de estados para el control del motor seg n las instrucciones recibidas 30 3 7 M quina de estados del motor seg n si es bucle abierto o bucle cerrado 32 3 8 Preparaci n del dato de referencia desde la memoria RAM hasta el bucle cerrado 33 e Ner Ss esti EE O de Sees 41 4 Programaci n en MATLAB para el envio y recepci n de datos desde el ordenador a la FPGA 4 1 4 2 A M M A A UM E ME E em 41 SCM ONGC eR ETT 43 o ea eae EO IC LM DILE UR d RM IR LEE EC 48 RENE LS 49 5 Connexion del al ar A 49 5 1 FP GA UTILE 49 5 2 Interfaz de usu
56. TO 00000000 5 SIGNIFICATIVA DE 1001 mm EL PRIMER BIT SE DESPRECIA RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns 79 RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI ESTE ES EL ULTIMO QUE LEE LOS DOS ULTIMOS NO LOS LEE wait for 17600 ns 1100 16 DATO 00001001 MENOS SIGNIFICATIVA DE 1001 mm EL PRIMER BIT SE DESPRECIA RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt O wait for 17600 RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 0 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 01000000 MENOS SIGNIFICATIVA DE 1001 mm EL PRIMER BIT SE DESPRECIA RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt O 80 wait for 17600 RX lt 0 wait for 17600 ns RX lt O wait for 17600 RX lt O wait for 17600 ns RX
57. TO PWM BUCLE CERRADO INB ORDENADOR UART_RECEPCI N FPGA 3 2 UART emisor Este dise o ha sido extra do del libro ELECTR NICA DIGITAL APLICACIONES Y PROBLEMAS de Jos lgnacio Artigas Luis ngel Barrag n Carlos Orrite e Isidro Urriza referenciado en la bibliograf a del proyecto El bloque emisor es el encargado de recoger la palabra de 8 bits y transmitirla por la l nea serie Tx siguiendo el protocolo serie as ncrono El conjunto de se ales que llegan y salen de este bloque aparece descrito en la tabla siguiente Habilitaci n del reloj de entrada WR Habilitaci n para escribir un nuevo dato en el emisor DIN Dato en paralelo para ser transmitido Transmisi n serie Listo para enviar un nuevo dato Se ales de entrada salida del emisor 22 Tanto emisor como receptor van a trabajar con este formato de env o recepci n de datos reposo start reposo El emisor se compone de varios bloques un controlador basado en una m quina de estados un contador CNTBIT que lleva la cuenta del bit de datos transmitido un registro de desplazamiento paralelo serie y un generador de paridad impar En lo que respecta al controlador podemos distinguir cuatro estados en la transmisi n En un primer estado que denominaremos STOP el emisor permanece en reposo a la espera de un nuevo dato a transmitir La llegada de dicho dato se informa al emisor mediante la activaci n de la se al WR momento en el que pasamos al e
58. TOP en el que el receptor espera la llegada de un nuevo dato por la l nea serie Al detectar el flanco de bajada pasamos al estado NICIO donde se procede a la sincronizaci n Para ello utilizamos el contador CNTCLK que nos permita leer en el punto medio del bit recibido Cada bit recibido equivale a 16 pulsos de la se al de habilitaci n del reloj de recepci n EN CLKRx por tanto debemos situarnos en el pulso octavo del reloj y a partir de aqu cada diecis is pulsos de reloj leer la linea serie Al situarnos en el octavo pulso en el estado INICIO comprobaremos de nuevo si la se al REG2 permanece en nivel bajo Si no es as supondremos que la comunicaci n ha sido generada por ruido en la l nea y volveremos al estado STOP Tras el estado NICIO pasamos al estado DATOS donde leeremos el bit presente en Rx y lo iremos colocando en el registro de desplazamiento interno Para llevar la cuenta de los bits de datos recibidos utilizaremos el contador CNTBIT nicamente habilitado en este estado Cuando dicho contador alcanza el valor 7 el siguiente bit corresponder al bit de paridad transmitido En este momento ya tendremos calculada la paridad del byte recibido y podremos comparar ambos valores cargando en el registro de salida DOUT el dato desplazado si stas son iguales al tiempo que activaremos la se al RxRDY El ltimo bit del protocolo RS232 debe 25 ser un nivel alto equivalente al valor que toma la linea serie cuando el
59. W_FC_DISABLE lt 0 SW ILIM DISABLE lt 1 BUCLE lt 1 RX lt 1 BUCLE lt 1 wait for 1000 us 68 RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00101111 RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00010101 RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns 69 RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 00001111 RX lt 1 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 MAS S
60. X lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD 82 wait for 17600 RX lt 1 ESTADO REPOSO wait for 17600 ns motor descendiendo CHB lt 1 wait for 50 ns lt 1 wait for 50 ns CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns CHB lt 1 wait for 50 ns lt 1 wait for 50 ns CHB lt 1 wait for 50 ns CHA lt 1 wait for 50 ns wait for 10 us FCI lt 0 wait for 100000 us 83 BUCLE lt 0 BUCLE2 0 gt ESTADO RESET BUCLE2 1 gt ESTADO RESETBC BUCLE lt 1 wait for 0 1 ms volvemos a RESET BUCLE lt 0 lt 1 wait for 0 1 ms volvemos RESETBC con el final de carrera inferior sin activar por lo que iremos BAJARTOPE BUCLE lt 1 wait for 0 1 ms Llegamos abajo por lo que se activa el final de carrera y vamos a AJUSTAR FCl lt 0 wait for 0 1 ms Despu s del numero de divisiones para ajustar vamos a CONTROL wait for 0 1 ms BUCLE 0 gt
61. a pero no se recomienda su utilizaci n e 5VOLVER MANDAR para el motor y espera que los nuevos datos sean introducidos Se repite el programa y se muestra otra vez el mensaje de introducir datos para la senoide o para el escal n e 6SALIR se termina el programa e 7 ver posici n aparece el siguiente mensaje ingrese el n mero de datos que quiere leer Si se quiere leer s lo un periodo de la senoide o del escal n se introduce el mismo n mero que se puso en el n mero de divisiones Si no se pueden leer tantos datos como se deseen Al final se genera un archivo donde se guardan llamado archivoencoder txt 64 8 3 Codigo VHDL 8 3 1 Company Engineer Create Date 17 56 21 12 15 2012 Design Name Module Name C Users J Desktop vhdl motordcproyect TOPmotor_DC vhd Project Name motordcproyect Target Device Tool versions Description VHDL Test Bench Created by ISE for module motor_DC Dependencies Revision Revision 0 01 File Created Additional Comments Notes This testbench has been automatically generated using types std logic and std logic vector for the ports of the unit under test Xilinx recommends that these types always be used for the top level 1 0 of a design in order to guarantee that the testbench will bind correctly to the post implementation simulation model LIBRARY ieee USE ieee std logic 1164 ALL
62. a trayectoria que ten a antes de parar pudiendo sobrepasar los finales de carrera Para ello es necesaria la alternativa de PARAR definitivamente que permite empezar en el estado RESET sin continuar el movimiento Los bits m s significativos 111 se env an justo antes de mandar una nueva trama de datos en el programa de MATLAB Desde que el motor alcanza el final de carrera hasta que el usuario introduce la nueva trama de datos el motor ya ha parado 101 mandar posici n del encoder Por defecto est activada 110 no mandar posici n del encoder No se utiliza Debido a que cada 10 milisegundos se recibe la posici n del encoder al ordenador y a que se han utilizado programas que los recib an constantemente se pens en la posibilidad de anular el env o Finalmente con la utilizaci n de MATLAB de que s lo recibe los datos cuando hace la llamada de lectura del puerto no se ha utilizado pero se ha dejado 31 3 7 Maquina de estados del motor seg n si es bucle abierto o bucle cerrado Se ha realizado una m quina de estados IU_ESTADO para el control de la posici n de referencia en bucle cerrado y para la salida PWM e INA e INB ABIERTO POLE AJUSTAR CONTROL Donde el control el bucle abierto ya ven a implementado del proyecto anterior Los estados BAJAR_TOPE ESPERAR AJUSTAR y CONTROL adem s tienen otras condiciones comunes que no se contemplan en la m quina de estados para no complicar
63. a vez Por eso se ha creado un contador que tras 13 segundos la explicaci n de porqu este tiempo y no otro se da m s adelante permita la transici n de un estado a otro En el estado AJUSTAR s lo es necesaria la primera posici n de la trayectoria que sigue el motor que tras un tiempo es alcanzada por el motor a una velocidad constante En el estado CONTROL se env a toda la trama de datos almacenada en la memoria RAM para que el motor la siga 3 8 Preparaci n del dato de referencia desde la memoria RAM hasta el bucle cerrado En el apartado 2 de esta memoria el sistema f sico se representaba en este diagrama de bloques Donde el control se realiza mediante programaci n A la FPGA llega la informaci n del encoder que se guarda en un contador llamado CNT_ENCODER Este contador se incrementa o decrementa dependiendo del sentido de giro del motor 33 elsif PULSO CHA 1 then if CHB2 0 then nCNT ENC lt CNT ENC 1 sube else nCNT ENC CNT ENC 1 ba 1 end if end if Y de la FPGA salen tres senales que son INA que indica que el motor tiene que girar para subir INB que indica que el motor tiene que girar para bajar y PWM INA e INB solo marcan el sentido de giro mientras que la se al PWM dice con qu velocidad tiene que girar Por lo tanto en la FPGA se implementa la ganancia del regulador y la saturaci n hasta 24 voltios que es lo que puede dar la fuente Como Gpwm hace la conversion de
64. acotado limita el error a 100 lo que equivale a 24 en la fuente de alimentaci n process CNT PWM begin if CNT EWM 50 then nCNT PWM lt others gt 0 else nCNT PWM lt CNT PWM 1 end if end process Para la salida PWM se compara el valor absoluto porque el signo del error se usa solo para el sentido del giro no para esto con el contador CNT_PWM de frecuencia 0 1ms que se usaba en bucle abierto Para el sentido de giro si el error es positivo es porque el motor tiene que subir Si el error es negativo tiene que bajar y si no es ni positivo ni negativo no tiene nada que hacer 39 ERROR ACOTADO gt C then lt 1 INB lt 0 elsif ERROR ACOTADO lt 0 then INA O INB i else INA lt 0 INB O end if s Las salidas de sentido de giro s lo se producen en alg n estado de movimiento del motor es decir en el estado BAJAR_TOPE AJUSTAR y CONTROL 40 4 4 Programaci n MATLAB para el env o y recepci n de datos desde el ordenador a la FPGA Se han programado dos trayectorias para el motor La primera es una senoide para simular un movimiento de vaiv n suave La segunda es un escal n con el que se comprueba el tiempo de respuesta y la posibilidad o no de sobreoscilaci n Para la senoide los valores que se introducen son la amplitud el n mero de divisiones y el punto de inicio Mientras que para el escal n son la altura de
65. ario de la FPGA x ias 49 5 3 Conexion delende Rua os e UA Dep 51 5 4 Finalesde carreras FCI 51 O ee EA 52 52 N M 55 7 PCB e eios 55 7 1 REQUECION AS CAIMAN Dades 55 7 2 MES AAN 58 CAPITOL PPP 60 oN ANEKO ui uU RP eGR ENN eo ENT Ud Re MM TM M 60 8 1 PISOS ES ab 60 8 2 Manual d instrucciones dc acid daa 62 8 3 COMICO rice 65 8 3 1 nei 65 8 3 2 MOTOR DCE a de es 85 8 3 3 UART TA 106 8 3 4 BIN Apis der Er P de ER 109 8 4 Programaci n MATLAB vd 114 8 4 1 SENOIDE E EE 114 Bu SESCALON 118 8 5 A 123 8 6 Programas utilizados eec bo 123 CAPITULO 1 1 Introduccion 1 1 Objetivos El objetivo es avanzar en el desarrollo de un emulador de equinoterapia que estara compuesto por varios actuadores lineales controlados de forma sincronizada desde un PC de forma que el asiento del emulador pueda seguir la trayectoria deseada Emulador dise o realizado en Solid Edge de la plataforma completa
66. ca de potencia a la FPGA vem n B 4 i LAK T f lilii i d ry EET Conexion de placa potencia FPGA 55 En este el objetivo es minimizar el tama o de la placa para que se puedan aprovechar los otros 3 conectores libres que se ven en la imagen Con esta FPGA solo se podrian manejar 4 motores utilizando esos 4 conectores Para utilizar los 6 motores habra que elegir una placa con mas AN eL A dh VT ul 443 Acron y rs v 1 b Las bo yq 39 7r Ls y ue QU on 1 at 9 7 FLN Sd 2 NN A 1 Ww 4 La t p t y T7 As 454 14 n c 7 La anchura m xima de las placas de potencia es de 3 cm como se indica en la imagen Y la anchura minima tiene que ser mayor que el ancho de este componente y de sus pistas que disipan calor y que mide poco menos de 3 cm 56 Por lo que ala hora de resolverlo se ha optado por una disposici n como se indica continuaci n Donde con 4 tornillos queda una estructura m s compacta y se resuelve el problema de tama o Los pines del header que se conecta a la FPGA se ir n alternando y unas veces ir n en la cara de arriba y otras en la de abajo dependiendo de la disposici n de la placa de potencia seg n la imagen anterior En
67. de carrera muy peligroso para el actuador Se encienden los leds LD1 y LDO BUCLE para elegir control en bucle abierto o bucle cerrado 1 Cuando se trabaja en bucle cerrado no se utilizan los dem s interruptores y pulsadores de la placa Para trabajar en bucle abierto se utilizan los siguientes e UPyDN sube y baja la referencia del PWM 0 9 que se visualiza en 7 segmentos excepto cuando se activa STEP e SUBE hace subir el actuador hasta que se desactiva o se alcanza FCS e BAJA hace bajar el actuador hasta que se desactiva o se alcanza e STEP realiza una subida o bajada de 10 mm cada vez que se pulsa UP o DN e CICLO repite continuamente el consistente en subir 20 mm y luego bajar 20 mm El circuito lleva una UART que env a una trama de datos del actuador cada periodo de muestreo TS 10 ms La trama de 6 datos DTX O to 5 consiste en DTX 0 Byte alto del contador del encoder DTX 1 Byte bajo del contador del encoder DTX 2 Byte alto del contador de lectura de la RAM DTX 3 Byte bajo del contador de lectura de la RAM DTX 4 Registro de pruebas sin uso DTX 5 Registro de pruebas sin uso El contador del encoder es usado para verificar que el motor sigue la trayectoria enviada El contador de lectura de la RAM se usa para saber cu ndo empieza la lectura de la trayectoria almacenada en la memoria RAM 50 5 3 Conexion del encoder El encoder montado inicialmente es u
68. de datos se ha elegido de 57600 baudios por lo que si la FPGA funciona 50 MHz 50 000 000 57 600 868 para el emisor ya que el receptor tiene que producir 16 pulsos por cada bit lo que implica que tiene que ser 16 veces m s r pido que el emisor EN_CLKRx Face LPL PATA EN_CLKTx Lj te 868 x Tcik FPGA Por lo tanto partiendo de la habilitaci n del reloj de recepci n que es la m s r pida se genera la del emisor 265 54 16 Con un contador de que cuenta de 0 a 53 se crea la habilitaci n del receptor y con otro de 16 la del emisor Las operaciones anteriores no son exactas por lo que se produce un error debido al redondeo Esta es la velocidad a la que se programa 30 000 000 TEF 57 870 b s Cuya diferencia con la anterior es 0 081us por bit 1 57 870 5 57 600 b s 17 361 5 17 361us 17 280us 0 081us 27 Cada serie de datos esta compuesta por 11 bits 8 bits del dato start paridad y reposo Por lo que se puede producir un desfase de 0 081us 11 0 9us Lo cual comparado con el tiempo de un bit 17 361 us no supone ningun problema a la hora de hacer coincidir los bits con el tiempo de bit 17 361uS BIT START 3 5 Memoria RAM En la memoria RAM se guardan todos los valores recibidos a trav s de la UART La resoluci n con la que se trabaja es de 0 1 mm y la carrera del actuador lineal es de 10 cm lo que significa que hay 1000 posici
69. el hueco que queda delimitado por el conector de la FPGA entre placa de potencia y placa de potencia que est n a la misma altura 1 y 3 en la figura es donde se encajan todos los componentes THD que abultan como son los condensadores los MOSFET etc Por este motivo es por lo que queda tan alargada 57 7 2 Mejoras En el proyecto anterior el esquema del circuito habia quedado de la siguiente manera TITLES esquema Document Number Date 14 01 2912 11 37 52 Sheet 4 1 Hab a una errata en el circuito de protecci n contra inversi n de polaridad el transistor MOSFET ten a que estar al rev s es decir Drenaje a masa y Source conectada a GND del VNH3SP 30 E que ya est corregida Para minimizar el tama o la alimentaci n de 5 voltios se realiza con una fuente externa en vez de con un regulador como ven a implementado 58 Para hacerla mas compacta los finales de carrera y el encoder se conectan a la FPGA trav s de la placa de potencia Y se a ade una resistencia de pull up de 2K7 ohmios a s GNO DIR L 1 1 tjt 1 1 1 Cn Es Y finalmente se introducen unos puntos de TEST para comprobar el funcionamiento del limitador de corriente que por desgracia no funcion con la primera placa del proyecto anterior 54 R9 AK GND py 200K 59 CAPITULO 8 8 Anexos 8 1 Planos Cara top Cara bottom 60 2905 See ab
70. f end process Determina las salidas DOUT y RxRDY process CLK RST begin if 5 1 then DOUT_REG lt others gt 0 RxRDY REG lt 0 elsif CLK event and CLK 1 then if EN 1 then DOUT_REG lt DOUT_SIG RxRDY REG lt RxRDY SIG end if end if 112 end process Determina las salidas DOUT y RxRDY process CNTCLK ESTADO REG DESP IGUAL PARIDAD DOUT REG begin if ESTADO PARIDAD and CNTCLK 7 then if IGUAL PARIDAD 1 then DOUT SIG lt REG DESP else DOUT SIG lt others gt 0 end if else DOUT SIG DOUT REG end if end process Determina las salidas DOUT y RxRDY process RD CNTCLK ESTADO IGUAL PARIDAD RxRDY_REG begin if RD 1 then RxRDY SIG lt 0 elsif ESTADO PARIDAD and CNTCLK 7 then if IGUAL PARIDAD 1 then RxRDY SIG lt 1 else RxRDY SIG lt 0 end if else RxRDY_ SIG lt RxXRDY REG end if end process Salidas RxRDY lt RxXRDY REG DOUT DOUT REG SOBRESCRITURA lt 1 when ESTADO PARIDAD and CNTCLK 7 and IGUAL PARIDAD 1 and RxRDY_REG 1 else 0 ERROR_PARIDAD lt 1 when ESTADO PARIDAD and CNTCLK 7 and PARIDAD Rx REG2 else 0 ERROR FORMATO lt 1 when ESTADO STOP and CNTCLK 7 and 2 0 else 0 end behavioral 113 8 4 Programacion MATLAB 8 4 1 SENOIDE clc clear all close all PS serial COM4 set PS Baudrate 57600 96 se configura la velocidad a 57600 Baudios
71. gin if DIV TX 16 then nDIV TX lt others gt 0 elsif EN CLERx 1 then nDIV TX lt DIV TX 1 else nDIV TX lt DIV TX end if end process EN CLETx lt 1 when DIV TX 15 and EN CLERx 1 else 0 52 ram_block 0 4095 01111 UUUUU DON UUUUU x 01111 UUUUU 01111 10101 5 01111 10101 0 01111 10101 0 00010101 00000000 00101111 00010101 10001111 00011010 e AMEN Cuando DRX recibe 001 en los 3 bits m s significativos se empiezan a guardar los 5 bits menos significativos de los datos recibidos Mientras CNT WRITE RAM aumenta por cada dato guardado y CNT READ RAM permanece invariable M ram block 0 4095 O 01111 10101 01111 11010 01111 11111 01111 1101 D 4 00011010 Finalmente cuando los 3 bits m s significativos de DRX son 010 se termina la recepci n de datos lis rx E iu estado bajar tope bajar tope nada ES i nada 01111 10101 0111 ERES ES ALA X 01111 19101 01111 11010 01111 11111 01111 11010 uart estado MA ram_block 0 4095 mA drx 7 0 01000000 UART_ESTADO comienza en el estado LEERUNAVEZ cuando RX recibe los datos trav s de DRX se almacenan en la RAM En este caso IU_ESTADO es RESETBC y no cambia a BAJAR_TOPE hasta que no se ha terminado de leer hasta el ultimo dato Como UART_ESTADO no tiene nada que hacer permanece en el estado NADA hasta
72. idad fija de bajada de la siguiente manera 35 El motor baja una velocidad constante desde cualquier punto en el que se encuentre hasta el final de carrera inferior No se sabe la posici n en la que se encuentra el motor en ese instante lo que implica que se desconoce el valor del contador del encoder Por lo tanto se le asigna un valor al contador del encoder que podria ser cualquiera pero como en bucle abierto tiene asignado 111111111111111 32 767 del proyecto anterior se aprovecha este valor para cuando se haga la transici n de bucle abierto a bucle cerrado no sea un problema La trayectoria que sigue para bajar es una recta representada en la siguiente figura 32707 lt 10 ms Donde se calcula la cada 10 ms el nuevo punto Por criterio propio se eligi una velocidad constante de 8 mm s que como m ximo tardar 12 segundos y medio en bajar desde la posici n m s elevada que es de 100 mm o sea los 10 cm que mide el v stago 0 08mm Ss 10 lt Para no trabajar con decimales se a aden 8 bits a la derecha en el vector de ah el nombre CONSIGNABAJARx256 porque anadir 8 bits a la derecha es lo mismo que multiplicar por 256 0 08mm equivalen a 0 8 d cimas de mil metro que es la precisi n con la que se trabaja 0 8 d cimas de mil metros multiplicadas por 256 son 204 8 Como no se trabaja con decimales se redondea a 205 Cuya velocidad ser 205 0 80078 125 d cimas de milimetro
73. ieee std logic 1164 all use ieee std logic unsigned all entity TX is generic DWL1 integer range O to 7 7 DWLS Data Width Less 1 port CLK in std logic EN instd logic RST in std_logic WR instd logic DIN instd logic vector DWL1 downto Tx outstd logic TxRDY out std logic end architecture behavioral of UART TX is M quina de estados type TIPO ESTADO is INICIO DATOS PARIDAD STOP signal ESTADO nESTADO TIPO ESTADO Registro de desplazamiento signal PS std logic vector DWL1 downto 0 Bit de paridad generado signal BIT PARIDAD std logic Contador bit de dato 106 signal CNTBIT std_logic_vector 2 downto 0 begin Proceso secuencial para ESTADO process CLK RST begin if RST 1 then ESTADO lt STOP elsif CLK event and CLK 1 then if EN 1 then ESTADO lt nESTADO end if end if end process Proceso combinacional para ESTADO process ESTADO WR CNTBIT begin nESTADO lt ESTADO case ESTADO is when INICIO gt nESTADO lt DATOS when DATOS gt if CNTBIT DWL1 then 7 nESTADO lt PARIDAD end if when PARIDAD gt nESTADO lt STOP when STOP gt if WR 1 then nESTADO lt INICIO end if end case end process Contador que determina el bit de DATOS process CLK RST begin if RST 1 then CNTBIT lt others gt 0 elsif CLK event and CLK 1 then if EN 1 then if ESTADO DATOS then 107
74. l metro Con el programa MATLAB no se ha tenido en cuenta este impedimento por lo que puede darse que con la suficiente amplitud de la senoide o altura del escal n sumado a la altura del punto de inicio se activen los finales de carrera Queda en manos del usuario la elecci n de los valores que no sobrepasen los 10 cm Al correr el programa se obtienen dos archivos uno llamado archivoconsigna txt que contiene la trayectoria enviada y otro llamado archivoencoder txt que contiene la trayectoria real medida por el encoder 42 4 1 Senoide Se define el puerto de escritura lectura PS PS serial COMA set PS Baudrate 57600 se configura la velocidad 57600 Baudios set PS StopBits 1 se configura bit de parada a uno set PS DataBits 8 se configura que el dato es de 8 bits set PS Parity even se configura sin paridad set PS FlowControl none 6Sin control de hardware Con una variable llamada estado se controla todos los estados de UART ESTADO estado input INTRODUZCA EL NUMERO 1 stop 2 start 3 mandar posicion on 4 mandar posicion off 5 volver mandar 6 salir 7 ver posici n Al principio del programa se le asigna un 8 a esta variable y con un bucle while con la condici n de que si estado no es 6 se permanezca en el bucle condici n de salida Para generar la senoide se pide la amplitud de sta el n mero de divisiones que indirectamente es el per odo de sta Cada divisi n equivale a un
75. l escal n el n mero de divisiones y el punto de inicio 520 515 510 505 500 495 490 488 480 0 10 20 30 40 50 60 70 80 90 100 ingrese el valor de amplitud de la senoide 20 ingrese el n mero de divisiones 100 ingrese el punto de inicio de 0 a 1000 500 El punto de inicio indica la altura a la que empieza el movimiento senoidal en este caso 500 d cimas de mil metro que son 5 cm El n mero de divisiones indica indirectamente el periodo de la senoide Cada divisi n es un dato que se env a a la FPGA y cada 10 milisegundos sale hacia el motor Por lo que el periodo es de 10ms xN mero de divisiones 41 Asi pues en el ejemplo el periodo sera de 100 10 ms que equivale 1 segundo 505 504 5 504 503 5 503 502 5 502 501 5 501 500 5 500 0 10 20 30 40 50 60 70 80 90 100 ingrese el valor de la altura del escal n 5 ingrese el n mero de divisiones 100 ingrese el punto de inicio 500 En el caso del escal n el punto de inicio sirve para lo mismo que para el de la senoide El n mero de divisiones permite darle tiempo entre flancos de subida y bajada La subida se produce por criterio propio cuando ha transcurrido N mero de divisiones 10 y la bajada cuando ha pasado N mero de divisiones 6 10 As el tiempo en el que est arriba y el que est abajo es el mismo El m ximo recorrido que tiene el motor viene delimitado por los finales de carrera superior e inferior y es de 1000 d cimas de mi
76. lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 01000000 RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 0 wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 wait for 17600 ns RX lt 0 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns FCI lt 0 wait for 26000 us 81 RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 10000000 STOP RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt O wait for 17600 RX lt O wait for 17600 ns RX lt O wait for 17600 ns RX lt 1 MAS SIGNIFICATIVO wait for 17600 ns RX lt 1 PARIDAD wait for 17600 ns RX lt 1 ESTADO REPOSO wait for 17600 ns wait for 26000 us RX lt 0 BIT INI wait for 17600 ns 1100 16 DATO 01000000 START RX lt 0 MENOS SIGNIFICATIVO wait for 17600 ns RX lt 0 wait for 17600 ns RX lt 0 wait for 17600 ns R
77. n HEDS 5645 G13 de 360 pulsos por vuelta Tiene montado un cable con los colores de la tabla Requiere alimentacion entre 4 5 y 5 5 Vy resistencias de pull up de 2 7k en CHA y CHB amarillo ba gris VCC 5 4 Finales de carreras FCI y FCS Constituidos por sensores Hall A3214 que se alimentan entre 2 5 y 3 5 V Son omnidireccionales con salida activa en bajo El tiempo de respuesta va entre 60 y 90 ms porque estan dormidos la mayoria del tiempo dc 0 1 Sus conectores van al conector de arriba de los conectores JC FCS y JD Cambiado el FCI por A3245 cuyo rango de alimentacion va de 3 6 a 24 V Ojo cambiar el jumper del PMOD de la FPGA para alimentarlo a 5V 51 CAPITULO 6 6 Simulaciones en 0 En esta imagen se observa que por cada enable de la UART para enviar dato en clktx se producen 16 pulsos del enable del receptor en clkrx lo que significa que es 16 veces m s r pido este ltimo debido a que as se ha elegido en clkrx en clktx div tx B 0 W div_rx 5 0 Como se describe en el programa cuando DIV_RX es 0 EN_CLKRx se activa y cuando este se activa y DIV_TX es 15 EN_CLKTx se activa process DIV RX begin if DIV RX 53 then nDIV RX lt others 0 else nDIV RX lt DIV RX 1 end if end process EN CLER lt 1 when DIV RX 0 else 0 Clock enable TX 16 veces mas lento que el de RX process DIV TX EN CLERx be
78. nFINB CNT lt CNT NLD3 lt 0 NLD4 lt 0 NLD5 lt 0 NLD6 lt 0 NLD7 lt 0 102 case IU ESTADO is Bucle cerrado when RESETBC NLD3 lt 1 NLD4 lt 0 NLD5 lt 0 NLD6 lt 0 NLD7 lt 0 if BUCLE2 0 then nlU_ESTADO lt RESET else if UART ESTADO ACABANDATOSRX then if 2 1 then nIU ESTADO lt BAJAR_TOPE else nlIU ESTADO lt ESPERAR end if end if end if when BAJAR_TOPE gt NLD3 lt 0 NLD4 lt 1 NLD5 lt 0 NLD6 lt 0 NLD7 lt 0 if ERROR ACOTADO gt 0 then INA lt 1 lt 0 elsif ERROR ACOTADO O then INA lt 0 INB lt 1 else INA lt 0 INB lt 0 end if if ILIM2 0 then nlU_ESTADO lt RESET elsif FCI2 0 then nlU_ESTADO lt ESPERAR elsif UART_ESTADO PARAR then nlU_ESTADO lt RESET elsif BUCLE2 0 then nlU_ESTADO lt RESET end if when ESPERAR gt ESTADO ESPERA PARA QUE HASTA QUE NO SE LLEGUE A 2 56 SEGUNDOS NO SE INICIALICE EL SIGUIENTE ESTADO NLD3 lt 0 NLD4 lt 0 NLD5 lt 1 103 NLD6 lt 0 NLD7 lt 0 if ILIM2 O then nIU ESTADO lt RESET elsif CNT13 10100010100 then nlU_ESTADO lt AJUSTAR 10100010100 then nlU_ESTADO lt AJUSTAR 1300 cada 10 ms 13 segundos elsif UART_ESTADO PARAR then nlU_ESTADO lt RESET elsif BUCLE2 0 then nlU_ESTADO lt RESET end if when AJUSTAR gt NLD3 lt 0 NLD4 lt 0
79. na corriente en el devanado del inducido que al estar en un campo magn tico generado por los imanes producen una 14 fuerza proporcional a la corriente los conductores que hace que el motor gire Esta fuerza es el par motor Representada en la figura como T motor torque T Ki donde K es la constante del Par Motor e es la corriente del inducido Al mismo tiempo se genera una fuerza contraelectromotriz que se opone al giro del motor Vb en la figura d V Kw b 4 LU di donde K es igual a la constante del par motor al ser un motor de imanes permanentes y w es la velocidad angular Adem s el motor presenta otra serie de datos que han sido estimados por un alumno de ingenier a industrial y otros se han extra do de la hoja de caracter sticas del fabricante k 0 064 0 0015 R 0 6 Jm 0 000075 Inercia del rotor del motor Datasheet GR63X55 Ja 0 0002709 Inercia de partes moviles del actuador respecto del motor JMoranchel J Jm Ja Momento de inercia estimado de todo el actuador tau_em 11e 2 Constante electromec nica estimada de todo el actuador b J tau_em Rozamiento Datos utilizados en la simulaci n con scilab del motor y las partes m viles Combinando las leyes de Newton con las leyes de Kirchhoff 120 d J b Ki TE 1 d di d L LR V K dt 15 Usando la transformada de Laplace Js 6 s bs0 s K I s 1 LsI s
80. ntador CNT_PWM el tiempo en ON de la se al en PWM e Subbloque encoder que permite conocer el numero de pulsos recibidos desde el encoder e Maquina de estados para el control del sentido de giro del motor y que tiene implementado 4 movimientos uno de subida otro de bajada otro de subida o bajada en escal n de 10mm y otro movimiento que repite el ciclo de subida y bajada de 20 mm El interfaz de usuario se realiza mediante los pulsadores y switches de la FPGA Copuright 2 SW6 SW SWA4 SW SWD BTN3 BTN2 BTNI ae w3 BTN FC CICLO STEP BAJA SUBE Disable Disable Las se ales m s importantes para la placa de potencia son INA INB y PWM que se generan en la FPGA INA indica que el sentido de giro para el motor tiene que ser hacia arriba INB indica que el sentido de giro tiene que ser hacia abajo y PWM es la t cnica de control utilizada en este dise o que marca la velocidad con la que gira el motor Los pulsadores UP y DN aumentan o disminuyen el contador CNT PWM que almacena el tiempo en ON de la sefial PWM y se refleja en el visualizador de 7 segmentos Cuanto m s alto sea m s velocidad tendr actuador lineal Para O la velocidad es nula con 9 se consigue la velocidad m s alta El SWO y SW1 fija el sentido de bajada y de subida respectivamente Para SW2 primero se indica la velocidad con DN y UP despu s con el switch activado si se vuelve a pulsar UP el motor subir 10 mm y si se pula DN el m
81. nto a partir de aqu se leer el CNT ENC empezando a describir la senoide 46 for l 1 datosaleer for h 1 sizebuffer if mod h 6 if mod h 2 1 numerocompleto bitconcat binary h binary h 1 disp bin numerocompleto intnumerocompleto bin2dec bin numerocompleto posreal intnumerocompleto 12 200 z I posreal end end end datos fread PS sizebuffer uchar binary fi datos 0 8 0 end fid fopen archivoencoder txt w fprintf fid 2 load archivoencoder txt figure plot archivoencoder fclose fid clear z fclose PS A partir de la inicializaci n del contador de la lectura de la RAM se almacenan los datos recibidos del encoder en archivoencoder txt en d cimas de mil metro Por lo que al final se tiene dos archivos uno llamado archivoconsigna txt que contiene los datos en d cimas de mil metro que se env an y archivoencoder txt que contiene los datos en d cimas de mil metro que se reciben en sincronismo con la consigna 47 4 2 Escalon al input ingrese el valor de la altura del escal n altura input ingrese el n mero de divisiones divisiones puntoinicio input ingrese el punto de inicio punto de inicio referencia puntoinicio p1 round d 10 p2 round 6 d 10 Para el escal n se introduce la altura del escal n el n mero de divisiones que como la senoide cada divisi n equivale a 10 ms el punto de inicio de O a 1000 d cimas de mil metro y se calculan dos
82. objeto fwrite PS enviar fclose PS elseif estado 2 enviar 96 fopen PS Abre objeto fwrite PS enviar 115 enviar 0 fwrite PS enviar fclose PS elseif estado 3 enviar 160 fopen PS Abre objeto fwrite PS enviar fclose PS elseif estado enviar 192 fopen PS Abre objeto fwrite PS enviar fclose PS elseif estado 7 fopen PS sizebuffer 6 0 n 0 datosaleer input ingrese el n mero de datos que quiere leer intnumerocompleto 2 while intnumerocompleto 1 datos fread PS sizebuffer uchar binary fi datos 0 8 0 for h 1 sizebuffer if mod h 6 3 if mod h 2 1 numerocompleto bitconcat binary h binary h 1 disp bin numerocompleto intnumerocompleto bin2dec bin numerocompleto end end end end for 1 datosaleer for h 1 sizebuffer if mod h 6 1 if mod h 2 1 116 numerocompleto bitconcat binary h binary h 1 disp bin numerocompleto intnumerocompleto bin2dec bin numerocompleto posreal intnumerocompleto 12 200 z l posreal end end end datos fread PS sizebuffer uchar binary fi datos 0 8 0 end fid fopen archivoencoder txt w fprintf fid 96i n z load archivoencoder txt figure plot archivoencoder fclose fid clear 2 fclose PS end estado input INTRODUZCA EL NUMERO 1 stop 2 start 3 mandar_posicion_on 4 mandar_posicion_off 5 volver_a_mandar 6 salir 7 ver posici n if estado enviar
83. ones intermedias a lo largo del vastago con esa resolucion Es decir para codificar estas 1000 posibles posiciones se necesita un vector de ese tama o o mayor Con 2 1024 se cumple esta condici n El dato recibido a trav s de la UART es de 8 bits los tres mas significativos son utilizados para enviar las instrucciones al actuador Los 5 restantes son los que contienen el dato Por lo que ste se recibe en dos partes primero los 5 bits mas significativos y despu s los menos significativos La memoria RAM se estructura en bloques de 5 bits cada dos se tiene un dato completo Cada 10 milisegundos se lee un dato completo de la RAM 10 bits Con un tiempo elegido de un minuto para realizar un movimiento completo del actuador se tiene 60 segundos 6000 posiciones 10 milisegundos 28 6000 posiciones y cada posici n son 2 vectores de 5 bits esto implica que son necesarios 12 000 vectores La potencia de dos m s cercana a este n mero y por encima es 14 2 16 384 Con la FPGA usada con 279 da el siguiente error Warnings WARNING Pack 266 The function generator CLERx cmp eq0000 failed to merge with F5 multiplexer Inst UART Rx RxRDY REG not00011 5 There a conflict for the FAMUX The design will exhibit suboptimal timing Pero como el motor trabaja a una frecuencia baja no hay problema Sin embargo a partir de 279 la FPGA se queda peque a y no es capaz de almacenar los datos Warnings WAR
84. os de reloj signal CNTCLK std logic vector 3 downto 0 Contador del bit de dato signal CNTBIT std logic vector 2 downto 0 Sincronizadores signal REG Rx REG2 std logic Confirmaci n de dato recibido signal RXRDY SIG RXRDY REG std logic Registro de desplazamiento serie paralelo signal DESP std logic vector 7 downto 0 Registro de salida signal DOUT SIG DOUT std_ logic vector 7 downto 0 Bit de paridad generado signal BIT PARIDAD std logic 109 Se al de igual paridad signal IGUAL_PARIDAD std_ logic begin Sincronizador para evitar metaestabilidad process CLK RST begin if RST 1 then Rx REG lt 1 Rx REG2 lt 1 elsif CLK event and CLK 1 then Rx_REG2 lt Rx_REG Rx REG lt Rx end if end process Proceso secuencial para ESTADO process CLK RST begin if RST 1 then ESTADO lt STOP elsif CLK event and CLK 1 then if EN 1 then ESTADO lt ESTADO SIG end if end if end process Proceso combinacional para ESTADO process ESTADO CNTBIT Rx_REG2 CNTCLK begin ESTADO_SIG lt ESTADO valor por defecto case ESTADO is when INICIO gt if CNTCLK 7 and Rx REG2 1 then ESTADO SIG lt STOP elsif CNTCLK 15 then ESTADO SIG DATOS end if when DATOS gt if CNTCLK 15 and 7 then ESTADO SIG PARIDAD end if 110 when PARIDAD gt if CNTCLK 15 then ESTADO SIG lt STOP end if
85. otor bajar 10 cm Con la activaci n del SW3 se consigue un movimiento repetitivo de subida y bajada de 20 mm Hasta aqui se explicado el proyecto de partida Las mejoras a realizar para el nuevo proyecto son principalmente 3 Control en bucle cerrado del motor partiendo del control en bucle abierto ya realizado Comunicacion en serie de la FPGA con el ordenador de donde recibira las ordenes Compactar la placa de potencia para que se pueda conectar mas de una placa a la misma placa de FPGA Para llevar a cabo el proyecto se han completado los siguientes objetivos Realizaci n de un estudio previo del proyecto de partida para su posterior modificacion Realizaci n de un estudio previo del sistema f sico a controlar que engloba al encoder motor y el resto del actuador lineal Simulaci n del sistema f sico y su estructura de control mediante simulink y matlab Reestructuraci n de la placa de potencia sustituyendo algunos de los componentes limitando su tama o y corrigiendo algunos errores Montaje y verificaci n de la placa Dise o digital en VHDL de la etapa de control en bucle cerrado y del env o y recepci n de datos sobre una FPGA Simulaciones del dise o para comprobar su correcto funcionamiento Pruebas del motor con el encoder primero fuera del actuador lineal y luego con el sistema completo Programa en matlab para el env o de una trayectoria sinusoidal y otra escal n para permitir
86. potencia consta de e Un puente en que permite cambiar el giro del motor encapsulado en el circuito SMD VNH3SP30 E e Una protecci n contra la inversi n de polaridad para que en el caso de inversi n de polaridad de la fuente no se rompa el integrado VNH3SP30 E e sensor de corriente que junto con el comparador de intensidad permite actuar frente a una sobrecorriente e Un cambiador de nivel que permite adaptar el est ndar de 3V3 con que trabaja la FPGA a 5V con la que trabaja el puente en H e Una fuente de alimentaci n de 5V para alimentar todos los integrados que funcionan con cinco voltios Con la FPGA se controla el giro del motor con las dos sefiales INA para que gire hacia arriba e INB para que gire hacia abajo y la velocidad del motor mediante la t cnica PWM que se refleja en la salida PWM RST UP DN ILIM POSICION 1 POSICION 2 Y SSEG i AN PWM DP INA a mg INB Diagrama de bloques del dise o en VHDL de Javier Marco El dise o en VHDL consta de Bloque PWM ste se implementa mediante dos contadores uno de referencia que cuenta de 0 a 10 con 10 kHz de frecuencia y otro que fija el tiempo en ON de la se al PWM de 0 a 9 Ambos se comparan para generar la se al PWM V 0 V average V V average Ov t V V average Ov t CNT_PWM CNT_REF e Detector de flancos mediante dos pulsadores UP y DN se fija en el co
87. rarlos y sacar el error es necesario que CONSIGNA tenga las mismas unidades Para ello se le suma 200 y se multiplica por 12 Se le suma 200 para que no se desborde el contador encoder Si ste fuera O y por la inercia del motor en movimiento se le restase 1 al vector esto implicar a que su valor ser a de todo unos e inmediatamente con el control en bucle cerrado el motor intentar a alcanzar esta posici n causando un pico de corriente Se multiplica por 12 porque una d cima de mil metro equivale a 12 pulsos del encoder Para ello se multiplica por 16 y por 4 mediante dos vectores auxiliares y se realiza la resta As las operaciones son sencillas con dos desplazamientos hacia la izquierda para realizar la multiplicaci n y una resta 12xConsigna 16xConsigna 4xConsigna Con todo esto se tiene la posici n deseada lista para ser comparada con el contador encoder Solo queda implementar el bucle cerrado 38 CNT_ENCODER Para calcular el regulador proporcional se han utilizado valores multiplos de dos para que la multiplicaci n por la constante sea un desplazamiento del registro hacia la izquierda o la derecha En este caso para el motor en vac o la constante del regulador es de 0 5 lo que equivale a dividir entre 2 Para el motor en su estructura es de 0 125 o lo que es lo mismo dividir entre 8 Cuando se calcula el error se tiene en cuenta la extensi n de signo porque ste puede ser positivo o negativo Error
88. s 2530 que tras pasar por la suma de 200 y la multiplicaci n por 12 da los 32760 de POS DESEADA Si por ejemplo hubi semos tomado como consigna 2531 saldr a 32772 y se desbordar a Por este motivo desde el principio se produce una diferencia de 7 32760 32767 cuyo error diferencia tras ser dividida entre 2 es la mitad en este caso 4 debido al redondeo Como el error es inferior a 100 y superior a 100 no se satura 1 M4 consignal 3 0 00000111110101 2 1 o estado em MA ram_block 0 4095 01111 10101 011 DPI 121021 MA drp 4j 109 Me sincronizador ram 13 0 00000111110101 00000 100000 00000 00000 MP nsalida_ram 13 0 00000111110101 m 00000 Jo on ENEL 77 NN E salida_ram 13 0 00000111111010 00000 00000 00000 400000 MA cnt read ram 11 0 hae Ed Y NED ER Aa po 6 BA cnt write ram 11 0 Cuando los 3 bits m s significativos de DRX son 100 se produce el estado STOP en UART_ESTADO donde la SALIDA_RAM y CNT_READ_RAM mantienen los valores hasta que se recibe 011 en los 3 bits superiores de DRX momento en el cual siguen actualiz ndose los valores porque sigue el movimiento del motor 54 CAPITULO 7 7 PCB 7 1 Reduccion de tamano La placa de potencia se habia dise ado para un solo motor controlado con la FPGA ejer VNH3SP30 PCB dise o del proyecto anterior No se habia tenido cuenta la posibilidad de conectar mas de una pla
89. stado INICIO donde el byte presente en DIN pasa al registro de desplazamiento Tras este estado pasamos a DATOS donde se enviar n en serie los 8 bits Un contador CNTBIT determina qu bit se transmite por Tx Una vez se ha enviado el bit m s significativo pasamos al estado PARIDAD donde se transmite el bit de paridad del conjunto para terminar con el env o del bit de stop en el estado STOP Obs rvese que el estado STOP corresponde tanto al env o del bit de stop como a la situaci n de reposo a la espera de enviar un nuevo dato WR FR m RST STOP INICIO CNTBIT lt 7 CNTBIT 7 PARIDAD paros J Cu Diagrama de estados del emisor 23 Para controlar el envio de datos desde el programa principal se ha implementado otra maquina de estados con cuatro estados 100 RESET ESPERA REG DTX 5 CNT REG DTX 5 TX RDY amp SEPUEDEENVIAR EN CLKTx p INCREMENTA EL ENVIA Diagrama de estados del control del emisor Se dispone de 5 registros que abarcan desde REG DTX 0 hasta REG DTX 5 que se han utilizado para diferentes pruebas en el env o de datos Cuando la UART est disponible se indica con la activaci n de TX RDY se manda el primer registro se incrementa el contador en el estado INCREMENTA que hace referencia al numero del registro y se env a el siguiente registro hasta completar el env o de los 5 Momento en el cual se repite
90. tado LEERUNAVEZ porque si no hay datos el motor no puede moverse una vez introducidos los datos tras haber pasado por los estados LEERUNAVEZ EMPIEZANDATOSRX LEERDATOS y ACABANDATOSR x se habr le do la trama de datos y no se volver al estado LEERUNAVEZ El siguiente estado es NADA donde no se manda ninguna instrucci n Existen otras condiciones que no aparecen en la imagen para no complicar el esquema que son Si FCl 0 o 52 0 es decir el motor llega al final de carrera superior o inferior y el estado de control del motor es AJUSTAR o CONTROL se explica en el siguiente apartado es decir el motor est en movimiento el siguiente estado de control sea STOP esto lo que permite es parar en motor en bucle cerrado o sea que no avance m s debido a las inercias propias del motor En el estado BAJAR_TOPE tambi n se ha implementado pero s lo para el final de carrera superior por que el inferior es utilizado para la transici n al siguiente estado En el apartado anterior a la hora de recibir datos s lo 5 de los 8 bits recibidos eran utilizados Por ello en este otro apartado se aprovecha los tres bits m s significativos para recibir las instrucciones que son las siguientes 30 000 pasa nada sirve para borrar el registro DRX debido a que este registro no cambia hasta no recibir un nuevo dato Se da el supuesto de que por ejemplo al llegar al estado STOP a causa de un final de carrera el caso comentado
91. treo de 100 Hz y cuantificada en d cimas de mil metro es decir si el recorrido m ximo del actuador lineal es de 10 cm significa que son 1000 posiciones las que se puede abarcar Estas 1000 posiciones se codifican en 10 bits 2 1024 y el env o de datos se realiza de 8 en 8 bits Como los 10 bits no pueden ser enviados juntos se separan en 2 vectores de 5 bits cada uno y se env an como los bits menos significativos Los otros 3 que sobran se utilizan para mandar instrucciones al motor desde realizar una parada hasta volver a enviar los datos Esto permiterealizar el interfaz de usuario desde el ordenador sin tener que interactuar con las teclas de la placa de la FPGA Los datos de la trayectoria se almacenan en memoria RAM dentro de la FPGA cada dato en dos vectores de 5 bits y cuando se inicia el movimiento del actuador van introduci ndose como consigna del bucle cerrado cada 10 ms Para el control en bucle cerrado se compara la posici n del motor que se recibe del encoder con la posici n a la que tiene que estar el motor que ha sido almacenada en la RAM Como la posici n viene en d cimas de mil metro y la informaci n del encoder en pulsos hace falta su adaptaci n sabiendo que una d cima de mil metro equivale a 12 pulsos Del control en bucle cerrado se obtienen las salidas INA INB y PWM INA para el sentido de subida INB para el sentido de bajada y PWM para la velocidad 21 ENCODER UART ENV O BUCLE ABIER
92. when DIV_200 49 CE_10K 1 else 0 Clock enable RX process DIV_RX begin if DIV_RX 53 then nDIV_RX lt gt 0 else nDIV_RX lt DIV_RX 1 end if end process EN CLKRx lt 1 when DIV_RX 0 else 0 Clock enable TX 16 veces mas lento que el de RX process DIV_TX EN_CLKRx begin if DIV_TX 16 then nDIV TX lt others gt 0 elsif EN CLKRx 1 then nDIV TX lt DIV_TX 1 else nDIV TX DIV TX end if end process 93 CLKTx lt 1 when DIV_TX 15 1 else 0 Contador de tiempo ciclos de 100 Hz modulo 30000 5 min para serie del instante actual process CNT TIME begin if CNT TIME 29999 then nCNT TIME lt others gt 0 else nCNT TIME lt TIME 1 end if end process Indice del registro REG DTX a enviar por la UART process CNT REG DTX TX ESTADO CNT ENVIAR ULTIMA POS begin if TX ESTADO RESET then nCNT REG DTX lt 0 elsif TX ESTADO INCREMENTA then nCNT REG DTX lt CNT REG DTX 1 if ENVIAR ULTIMA POS then nCNT_ENVIAR lt others gt 0 else nCNT_ENVIAR lt CNT_ENVIAR 1 end if else nCNT_REG_DTX lt DTX nCNT_ENVIAR lt CNT_ENVIAR end if end process Registro de datos a enviar por la UART nREG DTX 0 lt 00 amp nCNT ENC 13 downto 8 nREG DTX 1 lt nCNT ENC 7 downto 0 nREG DTX 2 lt 0000 amp nCNT READ RAM 11
93. when STOP gt if Rx_REG2 0 then ESTADO_ SIG lt INICIO end if end case end process Contador de reloj process CLK RST begin if RST 1 then CNTCLK lt others gt 0 elsif CLK event and CLK 1 then if EN 1 then if ESTADO STOP and Rx_REG2 1 then CNTCLK lt others gt 0 else CNTCLK lt CNTCLK 1 end if end if end if end process Contador del bit de dato process CLK RST begin if RST 1 then CNTBIT lt others gt 0 elsif CLK event CLK 1 then if EN 1 and CNTCLK 15 then if ESTADO DATOS then CNTBIT lt others gt 0 else CNTBIT lt CNTBIT 1 end if end if end if end process Determina el bit de paridad 111 process CLK RST begin if RST 1 then PARIDAD lt 0 elsif CLK event CLK 1 then if ESTADO STOP then MODIFICADO BIT_ PARIDAD lt 0 elsif ENZ 1 and CNTCLK 7 then if ESTADO PARIDAD then BIT_ PARIDAD lt BIT_ PARIDAD else BIT_ PARIDAD lt BIT_PARIDAD xor Rx_REG2 end if end if end if end process Se al de error de paridad IGUAL PARIDAD lt 1 when ESTADO PARIDAD and BIT_PARIDAD Rx_REG2 else 0 Rellena el registro de desplazamiento process CLK RST begin if RST 1 then REG DESP lt others gt 0 elsif CLK event CLK 1 then if EN 1 and ESTADO DATOS and CNTCLK 7 then REG DESP lt Rx_REG2 amp REG DESP 7 downto 1 end if end i
94. ype TIPO REG DTX is array natural range lt gt of std logic vector 7 downto 0 signal REG DTX NREG_DTX TIPO REG DTX 0 to 5 87 signal CNT REG DTX nCNT REG DTX integer range to 5 signal LD3 LD4 LD5 LD6 LD7 NLD3 NLD4 NLD5 NLD6 NLD7 std logic COMPONENT TX generic DWL1 integer range O to 7 7 UART con 8 bits de datos PORT CLK IN std logic EN IN std_logic RST IN std_logic WR IN std_logic DIN IN std_logic_vector DWL1 downto 0 Tx OUT std_logic TxRDY OUT std_logic END COMPONENT COMPONENT UART_RX PORT CLK in std_logic EN instd logic RST in std_logic Rx in std_logic RD instd logic DOUT out std_logic_vector 7 downto 0 ERROR PARIDAD out std logic ERROR_FORMATO out std_logic SOBRESCRITURA out std_logic RxRDY out std_logic END COMPONENT begin Inst_UART_Tx UART_TX PORT MAP CLK gt CLK EN gt EN_CLKTx RST gt RST WR gt WR_TX DIN gt DTX Tx gt TX TXRDY gt TX_RDY Inst_UART_Rx UART_RX PORT MAP gt gt EN_CLKRx RST gt RST gt RX RD gt RD DOUT gt DRX ERROR PARIDAD gt E PARIDAD ERROR FORMATO gt FORMATO SOBRESCRITURA gt E SOBRESCRITURA RxRDY gt RX RDY LED FCI FCI2 LED FCS FCS2 LED3 LD3 LED4 lt LD4 LED5 lt LD5 LED6 lt LD6 LED7 lt LD7 Proceso secuencial process CLK RST begin if RST 1 then UP1 lt 0 U

Download Pdf Manuals

image

Related Search

Related Contents

C&K – 238/238i User Manual  Steiner Optik Steiner Nighthunter XP User's Manual  gehts zum  取扱説明書 [PDF形式]  AES-75VL - 日本電興株式会社  Sega DVD Player 200-5017-01 User's Manual  

Copyright © All rights reserved.
Failed to retrieve file