Picoblaze Microprocesador de 8 bits Empotrado en un FPGA Xilinx
Soft core Optimizado ocupa 200 celdas lógicas Menos del 5%
Spartan 3s200 Aplicaciones Debido a que el desarrollo del
software es usualmente mas fácil que crear hardware a la
medida, la opción de un microcontrolador es preferida para
aplicaciones no criticas en el tiempo. Picoblaze requiere 2
ciclos para completar una instrucción Si el reloj del
sistema es de 50 MHz, Picoblaze ejecuta 25 millones de
instrucciones por segundo
Diagrama de un fsmd y un microprocesador
Bus de datos de 8 bits ALU de 8 bits con banderas de acarreo e
indicación de cero 16 registros de propósito
general de 8 bits 64 byte de memoria de datos Formato de
instrucciones de 18 bits Bus de direcciones de 10 bits (1024
instrucciones) Stack de 31 palabras 256 puertos de entrada 256
puertos de salida 2 ciclos de reloj por instrucción 5
ciclos de reloj para respuesta de interrupcion
Organización básica
Diagrama a bloques de picoblaze
Top Level HDL modules Picoblaze es un sistema organizado en 2
módulos de alto nivel en HDL El modulo KCPSM3 es el
procesador Picoblaze
KCPSM3 clk (entrada 1 bit), señal de reloj del sistema
reset (entrada 1 bit), señal de reset address (salida 10
bits), dirección de la memoria de instrucciones,
especifica la localidad de donde se va a leer la
instrucción instruction ( entrada 18 bits),
instrucción port_id(salida 8 bits), dirección del
puerto de entrada o puerto de salida in_port(entrada 8 bits),
datos de entrada de los periféricos de entrada /salida
read_strobe(salida 1 bit), strobe asociado con la
operación de entrada
out_port( salida 8 bits), datos de salida hacia los
periféricos de entrada/salida write_strobe (salida 1 bit)
strobe asociado con las operaciones de salida interrupt ( entrada
1 bit) solicitud de interrupción de los periféricos
de entrada/salida interrupt_ack (salida 1 bit), reconocimiento de
la interrupción hacia los periféricos de
entrada/salida KCPSM3
El segundo modulo es para la memoria de instrucciones Durante el
desarrollo usualmente almacenamos el código ensamblado en
la memoria y se configura como una ROM en el lenguaje de
descripción de hardware.
CONJUNTO DE INSTRUCCIONES 57 INSTRUCCIONES Instrucciones del
tipo: Lógicas Aritméticas De prueba y
comparación Corrimiento y rotación Movimiento de
datos Control del flujo de programa Relacionadas con las
interrupciones MODELO DE PROGRAMACIÓN
FORMATO DE INSTRUCCIÓN
FORMATO DE INSTRUCCIÓN
Comparación y Test Comp: comparan 2 registros o bien reg
– cte y las banderas de Z y C se ponen a 1
FORMATO DE INSTRUCCIÓN
FORMATO DE INSTRUCCIÓN
FORMATO DE INSTRUCCIÓN
Instrucciones tipo lógicas
Aritméticas
De prueba y comparación
Corrimiento y rotación
Movimiento de datos
Control del flujo de programa
Relacionadas con las interrupciones
Directivas pblaze ide
Diferencias entre la sintaxis del kcpsm3 y Pblaze Ide
En matlab: Xlpb_as Otra manera de ensamblar un programa es a
través de MATLAB. Para esto, ejecutamos en la ventana de
comandos >> cd c:assembler; xlpb_as -p 'diego.psm' La
primera instrucción cd c:assembler es para ubicarnos en
la carpeta donde guardamos el programa y la segunda xlpb_as -p
'diego.psm' es para ensamblar el programa (se puede explorar en
detalle el comando xlpb_as ejecutando type xlpb_as en la ventana
de comandos de MATLAB). Si el programa no presenta errores, se
tiene la siguiente presentación en pantalla:
Servomotor Motor de DC Circuito de retroalimentación un
potenciómetro mide la posición del eje, para que el
control mantenga la salida con precisión Control de motor
en lazo cerrado Un controlador externo le dice al servo donde ir
con una señal conocida como modulación de pulso
proporcional (PPM). La modulación por ancho de pulso
permite un ciclo de trabajo ( el porcentaje de tiempo en alto
contra el tiempo en bajo) que es de 0 al 100 porciento del tiempo
del periodo La PPM usa de 1 a 2 ms de salida de los 20 ms
posibles de tiempo de periodo para codificar su
información La duración de los impulso indican el
Angulo del giro del motor, cada servo motor tiene su margen de
operación que corresponden con el ancho de impulso
máximo y mínimo que el servo entiende y que
mecánicamente no puede sobrepasar
Servomotor Futaba 3003
El periodo entre pulso y pulso no es critico Se suelen emplear
valores entre 10 ms y 30 ms, aunque es habitual utilizar 20 ms
que implican una frecuencia de 50 Hz Para que un servomotor
mantenga la misma posición es necesario enviarle
continuamente un pulso de ancho constante Si se deja de enviar
pulsos o el intervalo entre pulsos es mayor del máximo
permitido entonces el servomotor perderá fuerza y dejara
de intentar mantener su posición.
Algoritmo de Control Servomotor inicio Leer dato puerto de
entrada Contadores y banderas a 0 Poner a 1 el puerto de salida
Retardo de 300 µs ¿Puerto entrada = contador?
contador + 1 Retardo de 10 µs no Poner a 0 el puerto de
salida Cantidad bajo = 200 – dato puerto de entrada
Contador bajo + 1 Retardo de 10 µs ¿Cantidad bajo =
contador bajo? Retardo de 17.7 ms si no si