facultad de ingenierÍa ingenierÍa electrÓnica informe

56
FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME FINAL TRABAJO DE GRADO número 1043 DESCRIPCIÓN Y USO DE INTERFACES LÓGICAS Y ELÉCTRICAS DEL ROBOT BOE-BOT™ DE PARALLAX INC ELOY FRANCISCO ALFONSO BUITRAGO Director: Ing. FRANCISCO VIVEROS BOGOTÁ Junio de 2012

Upload: others

Post on 12-Jul-2022

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

FACULTAD DE INGENIERÍA

INGENIERÍA ELECTRÓNICA

INFORME FINAL

TRABAJO DE GRADO número 1043

DESCRIPCIÓN Y USO DE INTERFACES LÓGICAS Y ELÉCTRICAS DEL ROBOT BOE-BOT™ DE PARALLAX INC

ELOY FRANCISCO ALFONSO BUITRAGO

Director:

Ing. FRANCISCO VIVEROS

BOGOTÁ

Junio de 2012

Page 2: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

2

NOTA DE ADVERTENCIA

“La Universidad no se hace responsable de los conceptos emitidos por algunos de sus alumnos en los proyectos de grado. Solo velará porque no se publique nada contrario al dogma y la moral católica y porque no contengan ataques o polémicas puramente personales. Antes bien, que se vea en ello el anhelo de buscar la verdad y la justicia.”

Artículo 23 de la Resolución No. 13, del 6 de julio de 1946, por la cual se reglamenta lo concerniente a Tesis y Exámenes de Grado en la Pontificia Universidad Javeriana.

Page 3: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

3

TABLA DE CONTENIDO

pág.

1.   INTRODUCCIÓN ............................................................................................................... 8  2.   MODO DE OPERACIÓN ................................................................................................. 10  3.   ESPECIFICACIONES ....................................................................................................... 11  3.1   SEÑALES DE ENTADA Y SALIDA DEL SISTEMA .................................................. 13  3.2   DESCRIPCIÓN GENERAL ............................................................................................ 14  3.3   DIAGRAMA DE BLOQUES .......................................................................................... 15  4.   DESARROLLO ................................................................................................................. 17  4.1   INSTRUCCIONES BÁSICAS DEL SISTEMA ............................................................. 17  4.2   INGRESO DE SEÑALES INI, ENTER Y CHOQ ........................................................... 20  4.3   SISTEMA DIGITAL ....................................................................................................... 21  4.4   UTILIZACIÓN DE RECURSOS .................................................................................... 24  5.   ANÁLISIS DE RESULTADOS ........................................................................................ 25  5.1   SIMULACIÓN DE LA EJECUCIÓN DE TAREA ......................................................... 25  5.2   OBSERVACIÓN Y MEDICIÓN DE SEÑALES Y ESTADOS ..................................... 31  5.2.1   Máquina De Estados ..................................................................................................... 32  5.2.2   Señales de Salida ........................................................................................................... 34  6.   DIFICULTADES EN EL DESARROLLO DEL PROYECTO ......................................... 40  7.   CONCLUSIONES ............................................................................................................. 41  8.   COSTOS ESTIMADOS ..................................................................................................... 42  FUENTES DE INFORMACIÓN .............................................................................................. 43  ANEXO A ................................................................................................................................. 44  Descripción AHPL .................................................................................................................... 44  Documentación de Descripción AHPL ..................................................................................... 46  ANEXO B ................................................................................................................................. 50  Guía De Inicio Rápido – Uso De Interfaces, Boe-Bot™ de Parallax Inc ................................. 50  ANEXO C ................................................................................................................................. 54  Programación PIC16F688, compilador MikroC ....................................................................... 54  ANEXO D ................................................................................................................................. 56  Layout – Circuito Impreso del Módulo de Ingreso de Instrucciones ........................................ 56  

Page 4: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

4

LISTA DE IMÁGENES

pág.

Imagen 1 - Boe-Bot® robot. ................................................................................................................. 8  

Imagen 2 - Módulo BASIC Stamp® 2. ................................................................................................. 8  

Imagen 3 - Parallax Continuous Rotation Servo ................................................................................ 13  

Imagen 4 - Circuito impreso – Interfaz de ingreso de instrucciones .................................................. 20  

Imagen 5 – Simulación - Inicio del proceso ....................................................................................... 26  

Imagen 6 – Simulación – Incremento en PC y cm ............................................................................. 27  

Imagen 7 – Simulación - choque ........................................................................................................ 28  

Imagen 8 – Simulación – Primera instrucción, sub-tarea choque ...................................................... 29  

Imagen 9 – Simulación – fin sub-tarea choque .................................................................................. 30  

Imagen 10 – Cubrimiento de la simulación ....................................................................................... 31  

Imagen 11 - Señales de salida ............................................................................................................ 31  

Imagen 12 – enter, toma de instrucciones .......................................................................................... 32  

Imagen 13 – máquina de estados, inicio de tarea ............................................................................... 33  

Imagen 14 – máquina de estados, choque .......................................................................................... 34  

Imagen 17 – inicio giro a la derecha .................................................................................................. 37  

Imagen 18 – fin sub-tarea ................................................................................................................... 37  

Imagen 19 – giro a la derecha ............................................................................................................ 37  

Imagen 20 – desplazamiento adelante ................................................................................................ 38  

Imagen 21 – giro a la izquierda .......................................................................................................... 38  

Imagen 22 – desplazamiento atrás ..................................................................................................... 39  

Imagen 23 – giro a la derecha ............................................................................................................ 39  

Imagen 24 – fin de la tarea ................................................................................................................. 40

Imagen B 1 - Boe-Bot® robot ............................................................................................................ 50  

Imagen B 2 - Módulo BASIC Stamp® 2 ............................................................................................ 50  

Page 5: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

5

Imagen B 3 - Board of Education® Carrier Board ........................................................................... 50  

Imagen B 4 - Ajuste de Servo ............................................................................................................ 51

Page 6: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

6

LISTA DE FIGURAS

pág.

Figura 1 - Giro contra el sentido del reloj .......................................................................................... 12

Figura 2 - Giro en el sentido del reloj ................................................................................................ 12  

Figura 3 - Diagrama de bloques ........................................................................................................ 15

Figura B 1 - Diagrama de Tiempos, señal para la calibración de los motores. .................................. 51  

Figura B 2 - Puerto de alimentación del Servo en Vin ....................................................................... 52  

Figura B 3 - Switch de encendido de 3 posiciones. ........................................................................... 52  

Figura B 4 - Giro contra el sentido del reloj ...................................................................................... 52  

Figura B 5 - Giro en el sentido del reloj. ............................................................................................ 52  

Page 7: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

7

LISTA DE TABLAS

pág.

Tabla 1 - Abreviaciones de Componentes ......................................................................................... 21  

Tabla 2 – Informe de utilización de recursos, dispositivo FPGA ...................................................... 24  

Tabla 3 - Estimación de costos ........................................................................................................... 42  

Tabla A 1 – Denominaciones AHPL .................................................................................................. 44

Page 8: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

8

1. INTRODUCCIÓN

El área de Técnicas Digitales del departamento de Electrónica de la Pontificia Universidad Javeriana, en sus asignaturas Diseño de Sistemas Digitales y Arquitectura de Procesadores, plantea una metodología de diseño en la que el estudiante conciba, diseñe, implemente y verifique un proyecto de mediana complejidad. Para el desarrollo de este tipo de proyectos pueden ser utilizados los robots Boe-Bot (imagen 1) con los que ya cuenta el laboratorio del departamento, planteando además un valor agregado al dejar abierta la posibilidad de integración del diseño digital con áreas como la robótica, en posteriores proyectos.

Imagen 1 - Boe-Bot® robot. *Disponible en: < http://www.parallax.com/Portals/0/Images/Prod/2/281/28132a-L.jpg >

Este robot cuenta con un sistema de operación que permite su programación para diferentes tareas, por medio del software de programación PBASIC, provisto por el fabricante. A través de este lenguaje es posible la programación del módulo BASIC Stamp 2, que incluye un micro-controlador. Este robot puede ser programado para controlar su movimiento, monitorear sensores, tomar decisiones con base en lo que detecte e intercambiar información. Este módulo se introduce en un socket y es removible (imagen 2). Por medio del presente proyecto se muestra que es posible y viable la operación del robot con otro sistema diferente a este módulo y así utilizarlo en el desarrollo de los cursos mencionados.

Imagen 2 - . Módulo BASIC Stamp® 2. *LINDSAY, Andy. Your Boe-Bot’s Brain. En: Robotics with the Boe-Bot. Student Guide. Version 2.2. p. 1

Se diseñó un sistema digital, que fue implementado en FPGA, el cual opera al robot Boe-Bot, generando las señales que accionan los motores de cada una de las dos ruedas independientes con las que cuenta el dispositivo. Esto se hace retirando el sistema de control del robot, el cual genera

!"#$%&'()*(+,-'(.,&/.,%01(.'#23(· Page 1(

Chapter 1: Your Boe-Bot’s Brain !"#$#%%#&'!()*+,!-./0-.12!$.3.1!4,!15/!6.*7,!.6!15/!#*148414/,'!9$.:/*1,'!#);!*.)1/,1,!4)!154,!3..<=! ! >5/! -./0-.1! #);! #! *%.,/079! .6! 41,! -?@(A! @1#B9C! D! 9$.E$#BB#3%/!B4*$.*.)1$.%%/$! 3$#4)! #$/! ,5.F)! 4)! G4E7$/! H0H=! ! >5/! -?@(A! @1#B9! D! B.;7%/! 4,! 3.15!9.F/$67%!#);!/#,I!1.!7,/'!/,9/*4#%%I!F415!#!$.3.1=!!!!

!!!!!!

Figure 1-1 .456!(5%#7$8(9(7,:-;&(,3(#(.,&/.,%<(',=,%>(

(

!>5/!#*148414/,!4)!154,!1/&1!F4%%!E74;/!I.7!15$.7E5!F$414)E!,4B9%/!9$.E$#B,!15#1!B#</!15/!-?@(A!@1#B9!#);!I.7$!-./0-.1!;.!6.7$!/,,/)14#%!$.3.14*!1#,<,J!!

H=( K.)41.$!,/),.$,!1.!;/1/*1!15/!F.$%;!#$.7);!41!D=( K#</!;/*4,4.),!3#,/;!.)!F5#1!41!,/),/,!L=( A.)1$.%!41,!B.14.)!M3I!.9/$#14)E!15/!B.1.$,!15#1!B#</!41,!F5//%,!17$)N!O=( P&*5#)E/!4)6.$B#14.)!F415!41,!Q.3.14*4,1!M15#1!F4%%!3/!I.7RN!

!

!

?"&($',@'#7723@(;#3@-#@&(A,-(B2;;(-1&(%,(#CC,7$;21"(%"&1&(%#1D1(21(C#;;&:(PBASICE(B"2C"(1%#3:1(F,'*(

•( G#'#;;#H(/(!,7$#3A(%"#%(23I&3%&:(#3:(7#D&1(.456!(5%#7$(72C',C,3%',;;&'1>(•( .&@233&'1(/(J#:&(F,'(=&@233&'1(%,(-1&(%,(;&#'3(",B(%,($',@'#7(C,7$-%&'1((•( 4;;/$-'$,1&(/(G,B&'F-;(#3:(-1&F-;(F,'(1,;I23@(7#3A(:2FF&'&3%(D23:1(,F($',=;&71(•( 5A7=,;2C(/(K123@(1A7=,;1(L%&'71(%"#%('&1&7=;&(M3@;21"(B,':N$"'#1&1O( (•( 631%'-C%2,3(/(?,(231%'-C%(#(C,7$-%&'(",B(%,(1,;I&($',=;&71(•( !,:&(/(63(%&'71(%"#%(A,-(#3:(%"&(C,7$-%&'(-3:&'1%#3:((

!!

Page 9: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

9

estas señales de operación; al remover este módulo se conecta a la infraestructura del robot el sistema digital implementado. De este modo se pueden producir en el robot desplazamientos hacia delante y atrás, y giros a la derecha e izquierda.

Además se utilizan sensores de contacto, aprovechando la disposición física del robot que permite montar diferentes tipos de sensores e incluirlos en su operación. De este modo se puede condicionar el movimiento del robot a la lectura de señales de entrada provenientes de estos sensores, haciendo que la tarea que el robot desempeñe sea dependiente de ciertas condiciones del entorno.

El sistema digital permite que el robot realice una tarea definida por el usuario, pues tiene un módulo para introducir una serie de instrucciones predeterminadas, las cuales se almacenan en la memoria del dispositivo FPGA y se ejecutan una a una cuando el usuario ordena el inicio de la tarea. Estas instrucciones están compuestas por un código dividido en dos partes: la primera correspondiente al tipo de movimiento, es decir si es desplazamiento o giro, y la dirección o sentido (adelante, atrás, giro a la derecha y giro a la izquierda); la segunda corresponde a la magnitud del movimiento, que indica un número de segmentos básicos de desplazamiento o giro a manera de unidades, cada una de estas unidades corresponde según el caso a 1 cm o 45º. De este modo el usuario define una tarea compuesta por desplazamientos con longitudes múltiplo de 1 cm y por giros de ángulos múltiplo de 45º.

El usuario puede definir las acciones a ejecutar en caso de que los sensores detecten un choque frontal y generen una señal de activación; estas acciones conforman una sub-tarea a ser ejecutada en el caso de un evento indicado por los sensores. Las instrucciones de esta sub-tarea se introducen de igual forma que las instrucciones de la tarea principal, indicando con un selector que se trata de instrucciones de esta sub-tarea.

El sistema permite al usuario operar el robot con un nivel mas alto de abstracción que el de su sistema original, pues se requiere pensar únicamente en términos de instrucciones sobre los movimientos del robot, según sean desplazamientos o giros; de este modo puede basarse únicamente en el código de las instrucciones básicas, sin necesidad de un computador ni de un lenguaje tradicional de programación, como es el caso de PBASIC, software de programación que provee el fabricante del robot.

Este desarrollo abre la opción de realizar proyectos similares en las asignaturas de diseño del área de Técnicas Digitales y sirve como ejemplo para el desarrollo de estos proyectos académicos.

Objetivo General

Desarrollar un sistema digital en FPGA que permita operar el robot Boe-Bot.

Objetivos Específicos

Diseñar e implementar un sistema digital basado en FPGA que opere el robot según una serie de acciones básicas predeterminadas.

Diseñar y ejecutar un protocolo de pruebas de la operación del robot basado en un conjunto de instrucciones básicas.

Page 10: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

10

Validar el diseño desarrollado mediante la ejecución por parte del robot de una tarea predeterminada.

En el presente documento se encontrará una descripción del modo de funcionamiento del robot y del sistema digital implementado. En la sección 3, Especificaciones, se detallan las especificaciones requeridas y obtenidas para proceder a describir el desarrollo en el diseño del sistema. Se describen los componentes que integran el sistema y sus funciones. En la sección 4, Desarrollo, se hace una descripción del funcionamiento del sistema digital, y en la sección 5, Análisis de Resultados, se presentan las mediciones y evaluaciones hechas al sistema, así como los resultados obtenidos. Finalmente, con base en el desarrollo y los hallazgos del proyecto realizado, se presentan las conclusiones teniendo en cuenta el objeto con que se realizó este proyecto, en la sección 7, Conclusiones.

2. MODO DE OPERACIÓN

El robot Boe-Bot cuenta con dos ruedas, cada una unida a un servo motor, de esta manera el movimiento en cada rueda es independiente al de la otra. El sistema digital implementado genera dos señales que entrega al robot, cada una de las cuales acciona a un motor, generando de esta forma desplazamientos y giros, según el movimiento y sentido de giro de las ruedas.

El sistema digital, por medio de estas señales, genera en el robot movimientos que constituyen una tarea, definida por una serie de instrucciones introducidas por el usuario. El sistema tiene un módulo de ingreso de instrucciones, por medio del cual el usuario ingresa una a una las instrucciones que conforman la tarea que el robot realizará. Cada una de estas instrucciones está predefinida como una palabra digital de 10 bits, de este modo el usuario introduce en el módulo de ingreso de instrucciones la palabra correspondiente a la instrucción que desea; este módulo de ingreso está compuesto por un “dip switch” de 10 posiciones para seleccionar el valor del bit correspondiente. Adicionalmente el sistema cuenta con un botón “enter” para que el sistema tome la instrucción que en ese momento se encuentra en el módulo de instrucciones, de este modo cada vez que el usuario presiona esta tecla se ingresa una instrucción. Cuando el usuario termina de introducir las instrucciones de la tarea a realizar, oprime un botón “inicio” para indicar que las instrucciones están completas y de esta manera el robot inicia la ejecución de esta tarea.

En la ejecución de la tarea se tiene en cuenta la lectura de sensores de contacto instalados en el frente del robot, haciendo la operación del robot dependiente de ciertas condiciones de su entorno, en este caso obstáculos. De este modo, es posible programar al robot para que cuando choque de frente con un obstáculo, realice una sub-tarea determinada por el usuario, que se ingresa de la misma manera que la tarea general; el usuario ingresa una a una las instrucciones que componen esa sub-tarea a ejecutar en caso de choque, pero en este caso mediante la activación de un selector que indica que las instrucciones corresponden a la sub-tarea para choques. Es decir que esta sub-tarea, es una tarea dentro de la tarea principal indicada por el usuario, a manera de una interrupción, pues es un conjunto de acciones a ejecutar, cuando la señal de los sensores de contacto indican la “interrupción” de la ejecución del programa.

Descripción de instrucciones:

Las instrucciones son palabras digitales de 10 bits.

Page 11: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

11

El bit mas significativo, o primer bit, indica el fin de la tarea; cuando este bit es “1” corresponde a la instrucción de terminación de tarea, es decir que el robot se detiene y el sistema vuelve a su estado inicial, la máquina de estados toma el estado “0”. En el caso de las instrucciones a realizar en caso de un choque, este bit corresponde al fin de la sub-tarea, es decir que si el sistema está ejecutando la sub-tarea ante un choque, esta instrucción indica que ha finalizado la acción producida por el choque y el sistema retorna a ejecutar la instrucción en la que estaba en el momento del choque.

El segundo y tercer bit indican el tipo de movimiento de la instrucción, si es un desplazamiento hacia delante o atrás, o un giro hacia la derecha o izquierda:

00: desplazamiento hacia delante.

11: desplazamiento hacia atrás.

01: giro a la derecha.

10: giro a la izquierda.

Los últimos 7 bits (menos significativos), indican la magnitud del desplazamiento, cuando la instrucción corresponda a este. Si la instrucción indica un giro, solo se toman en cuenta los últimos 2 bits.

La magnitud del desplazamiento tiene un valor máximo de 127, debido al número de bits y este valor corresponde a la cantidad de centímetros del desplazamiento.

La magnitud del giro corresponde a la cantidad de segmentos de 45º de giro, es decir que el robot gira en segmentos de 45º, así los posibles giros son 45º, 90º, 135º y 180º. Para un giro de 4 segmentos (180º) la magnitud a introducir por el usuario debe ser 00, pues para ingresar en notación binaria el número decimal 4, se requeriría un bit adicional, además no tiene sentido práctico una instrucción de un giro de 0 segmentos (0º).

3. ESPECIFICACIONES

El sistema digital genera las señales que activan los motores del modo requerido para que estos produzcan los desplazamientos y giros necesarios para la ejecución de la tarea deseada. Para que un motor gire requiere una señal de activación en forma de tren de pulsos, con un ancho de pulso y una duración en estado bajo determinados; según el ancho de ese pulso, o la duración en alto de la señal, el motor girará en uno u otro sentido. Así, el sistema digital opera al robot, produciendo en este las acciones que conforman una tarea ordenada por el usuario.

b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

fin Movimiento Magnitud del movimiento

Page 12: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

12

La velocidad de giro de los motores varía entre el rango de ancho de pulso de 1.3 ms a 1.7 ms, permaneciendo detenidos con un ancho de pulso de 1.5 ms; cuando el ancho de pulso es de 1.3 ms el motor gira en sentido del reloj, a velocidad máxima; cuando el ancho de pulso es 1.7 ms, gira en contra del sentido del reloj. De este modo, generando señales de 1.3 ms y 1.7 ms, se activan los motores en uno y otro sentido produciendo en el robot desplazamientos y giros. Además el tiempo de estado bajo, entre un pulso y otro debe ser aproximadamente de 20 ms. Dependiendo de la duración de cada uno de estos trenes de pulso, o visto de otra forma, del número de pulsos, el robot girará un determinado ángulo o se desplazará cierta distancia.

En la figura 1 se observa un diagrama de un tren de pulsos con 1.7 ms de ancho de pulso, el cual hace girar al motor en contra del sentido del reloj.

Figura 2 - Giro en el sentido del reloj. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 58

En la figura 2, el tren de pulsos de 1.3 ms de ancho de pulso, corresponde al giro en el sentido de las manecillas del reloj.

La velocidad máxima de giro, correspondiente a los anchos de pulso de 1.3 ms y 1.7 ms, se encuentra en un rango entre 50 y 60 RPM. Particularmente, en el robot usado en este trabajo de grado, aplicando estos anchos de pulso durante un minuto, los motores efectuaron 58 revoluciones.

El robot Boe-Bot cuenta con dos motores Parallax Continuous Rotation Servo (imagen 3) con las siguientes especificaciones:

Page 76 · !"#"$%&'()%$*($*+(,"+-,"$((!

"#$%! $%! &'! ()&*+,(! -.! %/0%1%2(*! 2(%2$'34! ! 5/0%1%2(*! 2(%2$'3! $%! &! 6-72#6#$,(! #&0$2! 2-!8(9(,-+:!0(;&/%(!$2!$%'<2!&'1!./'!2-!2&=(!&!7-0-2!0&;=!&+&72!>/%2!2-!.$)!&!+7-0,(*!2#&2!1-/!;-/,8!#&9(!-2#(76$%(!;&/3#2!0(.-7(!+/22$'3!$2!2-3(2#(7?!!!!

!

Subsystem testing(%'($*+(./0&$%&+("1($+'$%23($*+(%24%5%4607(&"8."2+2$'(#+1"/+($*+9(3"(%2$"($*+(70/3+/(4+5%&+:((;$<'(0(50760#7+('$/0$+39($*0$(&02(*+7.(9"6()%2(/"#"$%&'(&"2$+'$':((;$<'(07'"(02(+''+2$%07( '=%77( 6'+4(#9(+23%2++/'()"/74)%4+( $"(4+5+7".(+5+/9$*%23( 1/"8( $"9'>( &0/'>(024(5%4+"(308+'($"('.0&+('*6$$7+'(024(?0/'(/"5%23(/"#"$':((@'.+&%0779(%2(8"/+(&"8.7+A(4+5%&+'>(%$(&02(#+&"8+(2+0/79(%8."''%#7+($"(1%36/+("6$(0(./"#7+8(%1($*+(%24%5%4607(&"8."2+2$'(*05+2<$(#++2($+'$+4(#+1"/+*024:((;2(0+/"'.0&+(./"B+&$'>(1"/(+A08.7+>(4%'0''+8#7%23(0(./"$"$9.+($"(1%A(0(./"#7+8(&02(&"'$(*624/+4'("1($*"6'024'>("/(+5+2(8%77%"2'("1(4"770/':((;2($*"'+(=%24'("1(./"B+&$'>('6#'9'$+8($+'$%23(%'(/%3"/"6'(024($*"/"63*:(

Pulse Width Controls Speed and Direction @(;&,,! .7-*!;('2(7$'3! 2#(! %(79-%! 2#&2! &! %$3'&,!6$2#!&!+/,%(!6$82#!-.!A4B!*%!;&/%(8! 2#(!%(79-%!2-!%2&1!%2$,,4!!"#$%!6&%!8-'(!/%$'3!&!PULSOUT!;-**&'8!6$2#!&!Duration!-.!CBD4!!E#&2!6-/,8!#&++('!$.!2#(!%$3'&,<%!+/,%(!6$82#!$%!'-2!A4B!*%F!!!!G'! 2#(! H-/7! "/7'! %(;2$-'! -.! I;2$9$21! JK:! 1-/! +7-37&**(8! 2#(! LI5GM! 52&*+! 2-! %('8!%(7$(%!-.!A4N!*%!+/,%(%!2-!&'!OPQ4!!!O(2<%!2&=(!&!;,-%(7!,--=!&2!2#&2!%(7$(%!-.!+/,%(%!&'8!.$'8! -/2! #-6! $2! ;&'! 0(! /%(8! 2-! ;-'27-,! &! %(79-4! ! R$3/7(! KSKB! %#-6%! #-6! &! T&7&,,&)!M-'2$'/-/%!@-2&2$-'! %(79-! 2/7'%! ./,,! %+((8! ;,-;=6$%(!6#('!1-/! %('8! $2! A4N!*%!+/,%(%4!!R/,,!%+((8!7&'3(%!.7-*!BD!2-!UD!@TV4!!

C44(DE(CF

C''(DG(CF

H:I(8' H:I(8'

JG(8'

))):.0/0770A:&"8

'$0240/4('+/5"

!

Figure 2-25 K(H:I(8'(L67'+(M/0%2(M6/2'($*+(N+/5"(O677(N.++4(P7"&=)%'+((

(

!

!

What’s RPM?((!+5"76$%"2'(L+/(?%26$+:((;$<'($*+(268#+/("1(1677(&%/&7+'('"8+$*%23($6/2'(%2(0(8%26$+:(

What’s a pulse train?!!Q6'$(0'(0(/0%7/"04($/0%2(%'(0('+/%+'("1(&0/'>(0(.67'+($/0%2(%'(0('+/%+'("1(.67'+':((

!

Page 78 · !"#"$%&'()%$*($*+(,"+-,"$((!

√( "#$! %&'! ()*+),-! ,$.! /')012! %&,%! %&'! 3')/*! 4*$$'4%'.! %*! 567! 03! $*8! )*%,%0$+!9'%8''$!:;!,$.!<;!"5=!4>*4?803'@!!!

!' Robotics with the Boe-Bot – ServoP12Clockwise.bs2 ' Run the servo connected to P12 at full speed clockwise. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" DO PULSOUT 12, 650 PAUSE 20 LOOP

Example Program: ServoP12Counterclockwise.bs2 A*#!&,/'!()*9,9>2!,$%040(,%'.!%&,%!-,?0$+!%&'!PULSOUT!4*--,$.B3!Duration!,)+#-'$%!+)',%')!%&,$!C:;!80>>!4,#3'!%&'!3')/*!%*!)*%,%'!4*#$%')4>*4?803'@!D!Duration!*1!E:;!80>>!3'$.!6@C!-3!(#>3'3!,3! 3&*8$! 0$!F0+#)'!7G7<@! !H&03!80>>!-,?'! %&'! 3')/*! %#)$! 1#>>! 3(''.!4*#$%')4>*4?803'@!!

!

Figure 2-26 .(/01(2'(345'+(678%9(:8;+'($*+(<+7="(6479(>455(<?++@(A"49$+7&5"&;)%'+((

(

!√( I,/'!I')/*567J>*4?803'@937!,3!I')/*567J*#$%')4>*4?803'@937@!√( =*.012!%&'!()*+),-!92!4&,$+0$+!%&'!PULSOUT!4*--,$.B3!Duration!,)+#-'$%!

1)*-!<:;!%*!E:;@!√( "#$! %&'! ()*+),-! ,$.! /')012! %&,%! %&'! 3')/*! 4*$$'4%'.! %*! 567! 03! $*8! )*%,%0$+!

9'%8''$!:;!,$.!<;!"5=!4*#$%')4>*4?803'@!!!!' Robotics with the Boe-Bot – ServoP12Counterclockwise.bs2 ' Run the servo connected to P12 at full speed counterclockwise. ' {$STAMP BS2} ' {$PBASIC 2.5}

B@@(CD(BE!

B''(CF(BE!

/01(2'! /01(2'

GF(2'

)))0?878558H0&"2

'$89@87@('+7="

Figura 1 - Giro contra el sentido del reloj. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 60

Page 13: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

13

• Voltaje de alimentación: 4 – 6 VDC;

• Máximo consumo de corriente: 140 +/- 50 mA a 6 VDC operando sin carga, 15 mA en estado estático;

• Comunicación: Modulación por ancho de pulso;

• Señal de entrada: PWM, 3.3 – 5 V, < voltaje de alimentación + 0.2 V.

Imagen 3 - Parallax Continuous Rotation Servo. *Disponible en: < http://www.parallax.com/desktopmodules/catalookstore/ImageViewer.aspx?link=Images%2fProd%2f9%2f900%2f900-00008-

L.jpg&desc=&PortalID=0&viewerid=-1&mid=-1 >

3.1 SEÑALES DE ENTADA Y SALIDA DEL SISTEMA

Señales de entrada:

• reset: Refresca el sistema y lo fija en una posición inicial conocida, fija los bits de los registros en “0” y la máquina de estados en el estado “0”. El usuario activa esta señal por medio de un pulsador, ubicado en el mismo circuito de interfaz de ingreso de las instrucciones.

• inschoq: Indica que la señal a introducir corresponde a la sub-tarea de choque, si está en bajo, la instrucción pertenece a la tarea principal.

• instr: Bus de datos de 10 bits: Es la palabra digital de una instrucción; la instrucción que tome el sistema puede ser de la tarea principal o la sub-tarea de choque, según lo indique la señal inschoq.

• enter: Señal para la introducción de instrucciones. Cuando la señal pasa de “0” a “1” el sistema toma una instrucción, de la tarea principal o la tarea de choque según corresponda; esto cuando el sistema está listo para recibir instrucciones, es decir cuando no se encuentra en la ejecución de la tarea. El usuario activa esta señal por medio de un pulsador, ubicado en el mismo circuito de interfaz de ingreso de las instrucciones.

• ini: Señal de inicio de operación del robot. Con nivel alto inicia la tarea. El usuario activa esta señal por medio de un pulsador, ubicado en el mismo circuito de interfaz de ingreso de las instrucciones.

• choq: Señal proveniente de los sensores de choque, indica que el robot ha chocado. • ck: Señal de reloj del sistema.

Page 14: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

14

Señales de salida:

• outI: Señal de salida izquierda. Es la señal con la que se opera el motor de la rueda izquierda del robot. Esta señal debe tener la forma de tren de pulsos según se ha indicado anteriormente para activar el motor; si el valor de la señal es “0”, el motor no gira.

• outD: Señal de salida derecha: Señal con la que se opera el motor de la rueda derecha del robot. Para activar el motor debe ser de la forma del tren de pulsos descrita anteriormente.

Se utilizó la tarjeta de desarrollo TARDAC de la Pontificia Universidad Javeriana, con el dispositivo FPGA ALTERA® ACEX 1k100. Esta tarjeta, además del dispositivo ACEX 1k100 cuenta con un oscilador de 8 MHz; se conecta con el computador a través de un conector JTAG y un cable de programación, para su configuración. Cuatro regletas de 40 terminales para conexión externa permiten el acceso a los puertos del dispositivo FPGA. El oscilador de la tarjeta genera la señal de reloj del sistema digital.

3.2 DESCRIPCIÓN GENERAL

El usuario puede ordenar una tarea al robot, ingresando las instrucciones que conforman esta tarea. Una vez el usuario ha terminado de introducir estas instrucciones y con una señal ha solicitado el inicio de la ejecución, el sistema digital produce en el robot la ejecución de esa tarea.

El sistema digital implementado en FPGA almacena una serie de instrucciones que el usuario suministra; a través de un módulo de ingreso de instrucciones se generan las señales correspondientes en forma de palabras digitales de 10 bits, las cuales son enviadas al dispositivo FPGA. Estas instrucciones se almacenan en una memoria RAM interna, incluida en el diseño del sistema y configurada en el dispositivo FPGA.

Se eligió a la tarjeta de desarrollo TARDAC con el dispositivo FPGA, ACEX 1k100, debido a que cuenta con esta memoria interna y a su disposición en el laboratorio del departamento, con el propósito de identificar que un proyecto como este puede ser realizado e implementado en FPGA.

Una vez que el usuario ha ingresado las instrucciones de la tarea a desarrollar, por medio de una señal de entrada, ini, determina el inicio de la ejecución. A partir de este momento el sistema ejecuta una a una las instrucciones programadas, hasta encontrar la instrucción fin. De acuerdo a las instrucciones, el sistema genera dos señales de salida en forma de trenes de pulsos, las cuales ingresan al robot a través de su infraestructura actual; cada una de estas señales producen movimiento en cada una de las ruedas del robot. El ancho de los pulsos determina el sentido de giro de cada rueda; el tiempo en estado bajo, entre pulsos, es de 20 ms, como lo requieren los motores del robot.

Adicionalmente una señal de entrada indica si ha habido un choque frontal; cuando esto se presenta se ejecuta una sub-tarea que también ha sido determinada por el usuario a través del módulo de instrucciones. De igual forma que el programa principal, se ejecutan una a una las instrucciones, esta vez hasta llegar a la instrucción fin, la cual en este caso no indica la terminación de la operación sino el fin de la sub-tarea, ante lo cual regresa al paso del programa en donde se encontraba en el momento del choque, es decir que una vez que choque y ejecute la sub-tarea indicada para este caso, continúa ejecutando el programa. La instrucción que se estaba ejecutando en el momento del choque se volverá a ejecutar desde el principio; si por ejemplo se estaba ejecutando un desplazamiento de 30 cm y chocha en el centímetro 12, una vez se ejecute la sub-tarea de choque, se ejecutará el desplazamiento de 30 cm, completo, y continuará con las siguientes instrucciones.

Page 15: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

15

3.3 DIAGRAMA DE BLOQUES

El sistema está compuesto por una Unidad de Control, la Memoria, un Comparador, una serie de registros y un Sumador, como se observa en la figura 3, Diagrama de Bloques. El sumador suma 1 al número binario de su entrada, de esta manera, el conjunto de un registro con el sumador funciona como un contador.

Figura 3 - Diagrama de bloques

La instrucción que el usuario ingrese corresponde a la señal instr, que ingresa a Memoria para almacenar una a una las instrucciones a ejecutar. Las demás señales de entrada son señales de control que ingresan a Unidad de Control. Dos registros, RegInstruccion y RegInstruccionChoque, almacenan las instrucciones, leyéndolas de la memoria y almacenándolas durante su ejecución; desde estos registros se leen estas instrucciones para tomar la acción respectiva; un registro es para almacenar las instrucciones de la tarea principal (RegInstruccion), el otro para la sub-tarea de choque (RegInstruccionChoque), de este modo cuando se entra a esta sub-tarea, no se pierde la instrucción que estaba en proceso. Una serie de registros (contadores) llevan la cuenta del tiempo en alto de los pulsos que han de generarse como señales de salida (CLl), del tiempo en estado bajo (CP), del número de ciclos de pulso (Ciclos) y del número de centímetros (cm) o de segmentos de giro (Giro_45g), durante la ejecución de una instrucción. Un ciclo de pulso consiste en un pulso en cada una de las señales de salida y la espera en estado bajo antes del siguiente pulso.

Memoria

Unidad de Control

inschoq

ck

reset

PCCh ContadorPosición memoria

CLl Contador

enter

cm Contador

Ciclos Contadorciclos de pulso

PC ContadorPosición memoria

ini

instr

RegInstruccionChoqueRegistro

A Registroadelante

RegInstruccionRegistro

RutinaChoque

Comparador

I Nivel Llanta

D Nivel Llanta

choq

CP Contador

Sumador (+1)

Giro_45g Contador

outI

outD

10

10

10

7

7

18

7

2

7

2

4

4

2

7

18

1414

8

8

8

8

Page 16: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

16

Sumador incrementa en 1 el valor almacenado en los contadores para así llevar la cuenta de los correspondientes eventos y tiempos. Se encuentra también un comparador, que permite identificar si una instrucción se ha completado, comparando la magnitud de la instrucción con la magnitud de la acción en ejecución. Adicionalmente otros dos registros almacenan la dirección de memoria de la instrucción que se está guardando o que está en proceso, nuevamente uno para el caso de la tarea principal, PC, y otro para la sub-tarea de choque, PC. También hacen parte del sistema dos registros de un bit, uno que indica si el sistema está en proceso de ejecución de la sub-tarea de choque, RutinaChoque, y otro que determina la dirección de un desplazamiento, A, pues gracias a esto se puede ejecutar el mismo proceso, con los mismos recursos, para ambos tipos de desplazamiento (adelante y atrás). Por último, el sistema está compuesto por otros dos registros de un bit, D e I, los cuales generan cada una de las dos señales de salida del sistema.

A continuación se presenta una descripción de cada uno de estos bloques componentes del sistema digital:

Memoria: RAM, de 10 bits. Con un tamaño de dirección de memoria de 8 bits, puede almacenar 256 palabras de 10 bits, en este caso instrucciones. Allí se almacenan las instrucciones introducidas por el usuario, las cuales son leídas una por una mientras se van ejecutando. Las instrucciones de la tarea a desarrollar se almacenan a partir de la dirección 00000000. A partir de la dirección 10000000 se almacenan las instrucciones a ejecutar en el evento de un choque.

Unidad de Control: Genera las señales de estado de la máquina de estados y las señales de control de los demás componentes del sistema.

PC: Program Counter, Registro de 8 bits que contiene la dirección de memoria en donde se encuentra la instrucción en la que se encuentra el proceso, es decir que durante la operación indica el paso actual del programa que se está ejecutando.

PCCh: Program Counter Choque, Registro de 8 bits, funciona como Program Counter pero para el caso de la sub-tarea cuando haya choque. Inicialmente tendrá la dirección de memoria en la que se encontrará la primera instrucción de la sub-tarea de choque, 10000000; cuando haya un choque y esta primera instrucción se ejecute, se irá incrementando en “1”; cuando se termine de ejecutar la sub-tarea, volverá a tomar el valor de la posición de memoria de la instrucción inicial de la sub-tarea, 10000000.

RegInstruccion: Registro de 8 bits que almacena la instrucción a ejecutar, la cual es recibida de la memoria y permanece almacenada durante el tiempo que se esté ejecutando.

RegInstruccionChoque: Registro de 8 bits para almacenar la instrucción cuando se esté ejecutando la sub-tarea de choque.

A: Registro adelante, registro que indica la dirección cuando se ejecuta un desplazamiento, es decir que indica si este desplazamiento es hacia delante o hacia atrás, cuando su valor es “1” el desplazamiento es hacia delante.

RutinaChoque: Registro sub-tarea choque, registro que indica que la operación se encuentra en desarrollo de la sub-tarea de choque, es decir que ha habido un choque y el robot está ejecutando la sub-tarea programada para este caso.

CLl: Registro, 14 bits, lleva la cuenta del número de ciclos de reloj (T = 125ns); permite que el nivel de los registros de salida para cada rueda permanezca en nivel alto el tiempo necesario. Como

Page 17: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

17

los motores de las ruedas se activan mediante un tren de pulsos, con un ancho de pulso y un tiempo en nivel bajo determinados, este registro permite medir el tiempo de ancho de pulso, es decir el tiempo que esta señal de salida debe permanecer en nivel alto. Es de 14 bits para poder contar 13600 pulsos de reloj, correspondientes a un ancho de pulso de 1.7 ms, el mayor ancho de pulso requerido.

CP: Registro, 16 bits, lleva la cuenta del número de ciclos de reloj entre pulsos de las señales de salida. Permite contabilizar el tiempo después de que se han presentado los pulsos en las señales de salida de las ruedas, es decir el tiempo que las dos señales permanecen en nivel bajo. Este tiempo es 20 ms para el caso de los motores de este robot. Es de 16 bits para poder contar 160000 pulsos de reloj, correspondientes a 20 ms, el tiempo que debe transcurrir entre uno y otro pulso.

Ciclos: Registro, 4 bits, lleva la cuenta del número de ciclos de pulso de las señales de salida; cada ciclo es el evento de un pulso en cada señal de salida y el tiempo de espera en nivel bajo; de esta manera se puede llevar la cuenta de la magnitud del movimiento de cada rueda, y así de cada desplazamiento y giro.

cm: Registro, 7 bits, permite llevar la cuenta de los centímetros que va recorriendo el robot, según el número de ciclos de pulsos que ocurran. Se incrementa en uno cada vez que el robot recorre aproximadamente un centímetro en un desplazamiento, lo cual corresponde a dos pulsos en cada rueda, o dos ciclos de pulsos.

Giro_45g: Registro, 2 bits, permite llevar la cuenta de los segmentos de 45º realizados, es decir que en una instrucción de giro, se incrementa en uno cada vez que ocurra el número de ciclos de pulso correspondiente a un giro de 45º, en este caso, 8 ciclos de pulso.

Como los ciclos de pulsos de cada motor se llevan a cabo simultáneamente, es posible realizar la operación con solo un contador CP, cm y Ciclos.

I: registro de un bit. Genera la señal de salida para la rueda izquierda.

D: registro de un bit. Genera la señal de salida para la rueda derecha.

Comparador: Bloque combinatorio que compara dos números binarios de 7 bits. Permite comparar la cuenta de centímetros con la cantidad de centímetros de la instrucción, cuando una instrucción de desplazamiento esté en ejecución, de este modo se determina si el desplazamiento indicado está completo y si la instrucción está ejecutada. También permite hacer la misma comparación con la cuenta de segmentos de giro realizados y los indicados por una instrucción de giro. Tiene dos señales de entrada de 7 bits cada una y una señal de salida de 1 bit; cuando los dos números que compara son iguales la salida toma valor de “1”, de lo contrario toma “0”.

Sumador: de 18 bits, incrementa en “1” el número binario en su entrada.

4. DESARROLLO

4.1 INSTRUCCIONES BÁSICAS DEL SISTEMA

El sistema diseñado brinda la posibilidad al usuario de operar el robot sin la necesidad de un computador ni de un software de programación para ordenar las acciones a ejecutar. Según esto, se determinó un conjunto de instrucciones, como base para las tareas que puede ejecutar el robot. La estructura de las instrucciones se compone de dos partes: acción y magnitud.

Page 18: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

18

Acción:

Se definieron 5 acciones básicas, para 4 posibles movimientos y una instrucción de finalización. Para esto se asignaron 3 bits de la estructura de las instrucciones, los 3 “primeros” bits, o más significativos. El primer bit indica la instrucción fin, que quiere decir que la tarea ha terminado cuando la instrucción corresponde a la tarea principal; si esta instrucción hace parte de la sub-tarea a ejecutar en el caso de un choque, el significado de esta instrucción es que la sub-tarea ha finalizado y el robot debe regresar a continuar ejecutando la tarea principal, es decir que en este caso el robot no se detiene ni ha finalizado su tarea.

Adicionalmente se requieren 2 bits para indicar el movimiento, según sea movimiento hacia delante o atrás, o giro hacia derecha o izquierda. Retomando la definición de este código: 00, desplazamiento hacia delante; 11, desplazamiento hacia atrás; 01, giro a la derecha; 10, giro a la izquierda.

El sentido de giro de los motores depende del ancho de pulso aplicado, según este sea mayor o menor que 1.5 ms. Como en el robot estos motores van montados en posiciones opuestas, para así tener su eje hacia fuera del robot, para que el robot se desplace los motores deben girar en sentidos opuestos, de esta manera ambas ruedas estarían girando hacia delante o atrás del robot. De esta forma, el funcionamiento del sistema digital es el mismo en cualquier sentido de un desplazamiento, pues debe aplicarse a cada rueda un tren de pulsos, uno con un ancho de pulso mayor que el otro; el sistema fue diseñado de forma tal que primero aplica el pulso de mayor ancho y cuando se completa el tiempo en nivel alto se inicia el pulso corto en la otra señal de salida. Entonces, el sentido del desplazamiento del robot depende únicamente de a qué motor se aplica el primer pulso. Para esto se utiliza el registro A, para indicar si el desplazamiento es o no hacia delante y así aplicar los pulsos a cada rueda en uno u otro orden, según el sentido, pero ejecutando los mismos estados en la máquina de estados del sistema digital. Inicialmente la salida outI toma el valor en A; entonces si el desplazamiento es hacia delante, el pulso que ocurre primero, el de mayor duración, se aplica a la salida correspondiente a la rueda izquierda y el pulso de menor ancho a la rueda derecha o señal outD; así cuando el desplazamiento es hacia atrás, ocurre lo contrario, se aplica el tren de pulsos de menor ancho a la rueda izquierda.

Para el caso de los giros, los dos motores deben girar en el mismo sentido (desde el punto de vista del motor); el sentido de giro del robot entonces es determinado por el ancho de pulso aplicado a los dos motores.

Magnitud:

Se definieron unidades de movimiento correspondientes a la magnitud de la instrucción. Para el caso de los desplazamientos se eligió como unidad de desplazamiento, 1 centímetro, ya que si se escogía una unidad mayor (ej. 10 cm), aunque podría lograrse un mayor desplazamiento máximo, habría una muy baja precisión, lo cual puede ser un limitante en la ejecución de las tareas, pues el robot solo podría desplazarse de 10 en 10 centímetros; una precisión mayor, con una unidad menor, no es apropiada para el robot debido al tipo de motores, por lo tanto no sería práctica y las instrucciones estarían considerando una precisión mayor de la que entregan los motores. Para los giros se definió como unidad de giro del robot, 45º.

Page 19: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

19

Unidad de desplazamiento:

Se asignaron 7 bits de la instrucción para la magnitud del desplazamiento, entonces el desplazamiento máximo de una instrucción es 127 cm. Según especificaciones del robot, a velocidad máxima de rotación de los motores, la velocidad del robot es 9 in/s o 23 cm/s. Según la duración de cada ciclo de pulso y pausa, se requieren aproximadamente 90 pulsos para recorrer 51 cm; entonces se requieren aproximadamente 2 pulsos para recorrer 1 centímetro. En el laboratorio, al aplicar 200 pulsos, el robot se desplazó 94.5 cm; esto equivale a 0.945 cm para 2 pulsos, lo que corrobora que la mejor aproximación para un centímetro es 2 pulsos y que además la exactitud es bastante aceptable para el propósito del presente desarrollo, pero debe tenerse en cuenta para una aplicación específica que requiera de un mayor grado de exactitud.

Unidad de giro:

Como la unidad elegida es de 45º, solo se requieren 4 bits, pues con esto se cubre un giro de 180º y como puede girar en cualquier sentido, se cubren 360º. Según el manual de referencia del robot1, con 24 pulsos se efectúa un giro de 90º. Al aplicar 96 (24 * 4) pulsos el robot gira significativamente más de 360º, entre 450º y 495º, aproximadamente. Realizando varias pruebas y ajustes, se encuentra que al repetir los giros con diferentes números de pulsos, el número que produce giros de 360º con la menor desviación es 68 pulsos. Como parte de estas pruebas se efectuaron 6 giros de 68 pulsos. Entonces, para que el robot gire 90º se requieren 17 pulsos. Como 17 no es múltiplo de 2, un giro de 45º correspondería a 8 o 9 pulsos, aproximadamente. Se efectuaron 12 pruebas, con giros de 64 y 72 pulsos, y se encontró que los giros más cercanos a 360º se producen con 64 pulsos. Por consiguiente se elige un número de 8 pulsos para un segmento de giro de aproximadamente 45º. En consecuencia se ajusta el sistema digital diseñado con este valor de pulsos por unidad de giro para así conseguir una adecuada precisión en el desempeño, de acuerdo con las características del robot y del objeto de este desarrollo. Si se desea un giro de 4 unidades (180º) el número binario correspondiente requiere 3 bits y como no tiene sentido una instrucción de un giro de 0º, se asigna la palabra digital 00 para esta magnitud de giro, es decir que si el usuario requiere un giro de 180º, el código a introducir en la magnitud será 00.

Se implementó en un circuito impreso (Imagen 4), una interfaz para el ingreso de las instrucciones, por medio de 11 interruptores (“dip switch”) para el ingreso de las instrucciones; 10 bits para la instrucción y 1 bit para indicar si se trata de una instrucción de la tarea principal o de la sub-tarea a ejecutar tras un choque. También se incluyen en la interfaz 3 pulsadores para ingresar las señales enter, ini y reset. En este circuito se encuentra un puerto por el que se envían las señales de salida al robot y se recibe la señal choq, que indica que el robot ha chocado. En el Anexo D se encuentra el diagrama de Layout del circuito impreso.

1 LINDSAY, Andy. Boe-Bot Navigation. En: Robotics with the Boe-Bot text. Version 3.0. p 112.

Page 20: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

20

Imagen 4 - Circuito impreso – Interfaz de ingreso de instrucciones

4.2 INGRESO DE SEÑALES INI, ENTER Y CHOQ

En el circuito de interfaz (Imagen. 4) también fue implementado un circuito de disparo para adecuar las señales ini, enter, y choq, para corregir el rebote de los pulsadores y generar un pulso con una duración adecuada, independientemente de la duración con que el usuario oprima el botón de activación de las señales enter e ini.

Cuando se presenta un choque y el robot lo comunica poniendo en nivel bajo la señal choq, se genera un pulso que además de corregir el rebote tiene la duración adecuada, considerando el momento del proceso en el que el sistema digital revisa esta señal y la demora en volver a hacer una nueva observación. Por esto el pulso tiene una duración de 30 ms, levemente mayor a la ejecución de un ciclo de pulso en cada motor (23 ms), pues es al inicio de cada pulso que el sistema vuelve a revisar la señal de choque. Cuando el sistema detecta un choque, inicia la sub-tarea correspondiente y durante el primer centímetro de desplazamiento ignora esta señal de choque, mientras el robot se aleja del obstáculo, con el fin de que durante este tiempo no esté reiniciando una y otra vez la sub-tarea ante el choque. Una vez el robot haya ejecutado el desplazamiento de un centímetro, si vuelve a chocar, la sub-tarea vuelve a iniciar. Entonces, el pulso generado, que es la señal choq, debe tener una corta duración para reflejar con fidelidad si el robot aun está en contacto con el obstáculo o ya se ha separado; pero si la señal es demasiado corta, después de iniciarse ante un choque, puede terminar antes de que el sistema la haya detectado. Es por esto que la duración más adecuada para este pulso es 30 ms, pues una vez se presente un choque, antes de 30 ms el sistema estará revisando si se ha presentado choque. Si una vez terminado un pulso de 30 ms, el robot aun se encuentra en

ini

reset

enter

Circuito de disparo

Puerto al robot Puerto a FPGA

Ingreso instrucciones

Indicador instrucción de sub-tarea choque, inschoq 2º switch deshabilitado

Page 21: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

21

contacto con el obstáculo, se genera un nuevo pulso, para indicar esta situación. Debido a que estos sensores de choque están ubicados en el frente del robot, esta señal de choque solo se revisa durante un desplazamiento; si justo durante un giro, el robot tuviera un choque lateral, por la disposición de los sensores, este choque no sería detectado.

Para la señal enter se genera un pulso de 300 ms, un tiempo menor al estimado para que el usuario esté ingresando una instrucción luego de un previo ingreso, pues si la señal aun estuviera en alto, ingresaría esta segunda instrucción en lugar de la primera. Solo se puede generar un nuevo pulso enter, una vez que la señal del pulsador haya bajado, es decir que sin importar la duración con la que el usuario oprima el botón, solo se genera un pulso de 300 ms.

La señal ini, es generada como un pulso de 40 ms, menor al tiempo de ejecución de un centímetro, que es la menor duración posible de una tarea, pues en caso de que esta fuera la tarea (desplazarse 1 cm), una vez termine, el sistema detectaría la señal de inicio y volvería a ejecutar la tarea, como si se tratara de una nueva orden. Esto evita que si al terminar la tarea, el usuario aun tiene oprimido el botón de inicio, la tarea se repita.

Para generar estas señales se utilizó un micro-controlador PIC16F688, por tener la capacidad de manejar tres señales, por su disponibilidad, y por la posibilidad de su programación con el programador con que se contaba. El código de programación utilizado se encuentra en el Anexo C. Al usar este micro-controlador se ahorra espacio en el circuito y número de componentes, pues se producen 3 señales para las que se requerirían 3 circuitos de disparo, cada uno con varios componentes. Además las señales generadas con el micro-controlador son más “limpias” que las generadas con otros circuitos de disparo discretos.

4.3 SISTEMA DIGITAL

Se diseñó el sistema digital en el lenguaje de descripción de Hardware AHPL (A Hardware Programming Language) (Anexo A) el cual fue implementado en el dispositivo FPGA, el cual fue configurado con el software ALTERA Quartus II.

En esta descripción en AHPL se determina el proceso que ejecutará el sistema digital según su máquina de estados.

Por facilidad de lectura, debido a la extensión de los nombres, se ha usado un conjunto de abreviaciones en la descripción AHPL que se detalla a continuación; en la presente sección se hará referencia a los nombres abreviados usados en AHPL:

Tabla 1 - Abreviaciones de Componentes

AHPL Sistema, VHDL Ins RegInstruccion

Insch RegInstruccionChoque 45g Giro_45g rc RutinaChoque

Cicl Ciclos compa Comparador

A A Registro adelante

Page 22: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

22

Inicialmente el sistema está listo para que sean ingresadas las instrucciones; cada vez que se active la señal enter el sistema toma la instrucción en la entrada, instr, y la almacena en la memoria. La dirección en la cual se almacena esta instrucción se va incrementando en 1 para cada instrucción y se lleva esta cuenta en un registro PC, Program Counter. Cada vez que se ingresa una instrucción se verifica si esta pertenece a la tarea principal o a la sub-tarea de choque, lo cual se determina por la señal inschoq. El usuario determina de que tipo de instrucción se trata por medio de un interruptor, si está en la posición “on” entonces la instrucción hace parte de la sub-tarea a ejecutar cuando el robot choque. Cuando el usuario ingresa las instrucciones de este tipo, se almacenan en una sección de la memoria destinada para estas instrucciones, a partir de la dirección 10000000. La dirección en la cual debe almacenarse (y de la cual debe leerse) cada instrucción, se guarda en el registro PCCh, un Program Counter para llevar la cuenta de las posiciones de memoria de las instrucciones de la sub-tarea, sin perder la dirección de memoria de la instrucción actual de la tarea principal, almacenada en PC.

Segmento inicial, AHPL:

0. PCCh ← [10000000] PC ← [00000000] 1. (enter . inschoq’ . ini’) × 2 + (enter . inschoq . ini’) × 4 + (enter’ . ini) × 6 + (enter ⊕ ini)’ × 1 2. M(PC) ← instr → (enter × 2) + (enter’ × 3) 3. PC ← PC + 1 → 1 4. M(PCCh) ← instr → (enter × 4) + (enter’ × 5) 5. PCCh ← PCCh +1 → 1

El sistema, en el estado 1, está listo para recibir una instrucción, cuando lo indique enter; cuando se haya introducido una instrucción retorna a este estado (estados 5 ó 3).

Una vez que el usuario ha terminado de ingresar las instrucciones y oprime el botón ini, el sistema empieza a ejecutar la tarea. Si por error se ingresan al tiempo las señales enter e ini, el sistema permanece en el estado 1, solo cambiará de estado cuando solo una de las dos se active.

Cuando se inicia la tarea, se reinician los Program Counters para leer las instrucciones que se han almacenado en la memoria. Luego se almacena en el registro Ins la instrucción a ejecutar, según la dirección almacenada en PC. Cuando la instrucción está almacenada, es leída y el sistema pasa a un determinado estado según la acción.

Segmento AHPL de inicio de tarea:

6. PC ← [00000000] PCCH ← [10000000] 7. Ins ← M(PC) 8. → ( Ins(9)’ . Ins(8)’ . Ins(7)’ ) × 9 ) + ( Ins(9)’ . Ins(8) . Ins(7) ) × 10 ) +

Page 23: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

23

( Ins(9)’ . ( Ins(8) ⊕ Ins(7) ) ) × 21 ) + ( Ins(9) × 0 )

Si la instrucción es desplazamiento adelante, va al estado 9; si es hacia atrás, va al estado 10; si es un giro, va al estado 21; y si es fin, vuelve al estado 0, en donde se reinician los Program Counters y pasa al estado 1 nuevamente.

En el caso de un desplazamiento hacia delante, primero el registro A se carga con un “1”, para indicar que el movimiento es hacia delante; esto es muy útil para que el sistema ejecute los mismos estados en ambos tipos de desplazamiento, como se observa en el siguiente segmento AHPL:

9. A ← 1 → 11 10. A ← 0 11. cm ← cm + 1 12. Cicl ← Cicl + 1; I ← A; D ← A’

Inicialmente el registro I, para la salida izquierda, siempre tomará el valor en A, entonces si el movimiento es hacia delante, tomará 1. El sistema seguirá a un estado en el cual con cada pulso de reloj se incrementa un contador, CLl, para contabilizar el tiempo que la señal debe permanecer en alto. Este tiempo es el mayor ancho de pulso de los dos que deben producirse, 1.7 ms, que corresponde a 13600 pulsos de reloj; entonces siempre se aplicará en primer lugar el pulso más ancho, sea a la rueda que sea. Mientras tanto, la otra señal de salida está en nivel bajo.

Al alcanzar el tiempo de ancho de pulso, se reinicia el contador CLl, los dos registros de las salidas cambiarán de valor lógico y se contabilizará de nuevo el tiempo de ancho de pulso, esta vez el de menor ancho, 1.3 ms o 10400 pulsos:

14. I ← I’; D ← D’; CLl ← 0

Al completar el tiempo, los registros toman 0 y así las señales de salida, y se inicia la cuenta del tiempo que las señales deben permanecer en nivel bajo, 20 ms o 160000 pulsos de reloj.

Al iniciar este ciclo de generación de un pulso en cada salida y el tiempo en nivel bajo, se inició una cuenta de ciclos, la cual se almacena en el registro Cicl. Cada vez que finaliza un ciclo se revisa si se completaron los dos equivalentes a un centímetro de desplazamiento, si no se completaron se retorna al mismo estado de inicio de ciclo de pulsos; cuando se completan los dos ciclos, igualmente se revisa si la cuenta de centímetros, de la cual se ha llevado la cuenta de forma similar, corresponde a los centímetros de la instrucción; esto se hace mediante un comparador, que compara si la cuenta de centímetros es igual a la sección de la instrucción correspondiente, almacenada en el registro Ins.

Una vez completados los centímetros ordenados, el registro PC, Program Counter, se incrementa en 1 y se procede a leer la próxima instrucción y almacenarla en el registro correspondiente.

En caso de que la instrucción sea un giro, se inicia la cuenta de segmentos de 45º en el registro 45g, los dos registros de señal de salida se cargan con 1 y se inicia el contador de ciclos de pulso. Como en un giro, los dos motores deben girar en el mismo sentido (por estar ubicados en forma opuesta), el ancho de pulso debe ser el mismo para las dos señales de salida, de este modo las dos señales están en nivel alto al mismo tiempo y solo debe hacerse una cuenta, ahorrando bastante procesamiento, en comparación con un desplazamiento. Según el sentido del giro, se pasa a uno u

Page 24: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

24

otro estado, en donde se contabiliza el tiempo correspondiente de igual forma que en el caso de los desplazamientos. Al completar el tiempo, las señales toman valor bajo, se contabiliza el tiempo requerido, se revisa el número de ciclos de pulso ejecutados y el número de segmentos de 45º ejecutados, y al terminar se retorna para la lectura de la siguiente instrucción, igual que en el caso de los desplazamientos.

En un desplazamiento, al inicio de cada ciclo de pulsos, se revisa la señal de choque choq; hay un registro que indica si el proceso se encuentra en ejecución de la sub-tarea de choque, registro rc; si este registro indica que se está en esta sub-tarea, en el primer centímetro del desplazamiento se ignora la señal choq, pues de no ser así, mientras el robot se aleja del objeto, el sistema estaría iniciando una y otra vez la sub-tarea. En caso de que se presente un choque y el sistema no se encuentre en la sub-tarea de choque, el indicador de esta sub-tarea se activa, se inician los contadores de centímetros, grados y ciclos, y se carga en un registro la primera instrucción de la sub-tarea. Este registro es otro diferente al que almacena la instrucción que se estaba ejecutando, para no perder esta instrucción, de esta manera, cuando se termine la sub-tarea, la instrucción que estaba en ejecución ya está en el registro; cuando esto sucede se retoma esa instrucción desde el principio y así se continúa con la tarea. Si dentro de la ejecución de la sub-tarea de choque, después del primer centímetro de desplazamiento, se presenta un choque, el sistema lo detecta e inmediatamente reinicia la sub-tarea de choque.

El desarrollo en AHPL se encuentra en el Anexo A de este documento.

4.4 UTILIZACIÓN DE RECURSOS

A continuación se presenta el informe de los recursos utilizados por el sistema digital implementado en el dispositivo ACEX 1k100.

Tabla 2 – Informe de utilización de recursos, dispositivo FPGA

El número total de elementos lógicos, 248, corresponde al 5% de los recursos del sistema. Se usa una porción pequeña de los recursos del dispositivo, lo cual se esperaba considerando el número de

Page 25: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

25

componentes del sistema. Se buscó un diseño eficiente, que no necesitara procesos diferentes para hacer funciones similares; para esto se buscó optimizar la máquina de estados, utilizando una misma serie de estados para la ejecución de acciones diferentes por parte del robot, pero que para el procesamiento representaban un proceso similar. Con esto se utilizaron los mismos bloques para cumplir la misma función en la ejecución de diferentes acciones del sistema, por ejemplo, un mismo contador para el tiempo de los anchos de pulso de las dos ruedas, o la ejecución de la misma serie de estados para un desplazamiento, independientemente de la dirección.

5. ANÁLISIS DE RESULTADOS

El diseño realizado fue implementado en un dispositivo FPGA ACEX 1k100, el cual fue configurado con el diseño desarrollado mediante el software Quartus II, en lenguaje VHDL2.

Con el uso de Quartus II se realizaron varias simulaciones entre las cuales se observó el comportamiento simulado de la máquina de estados, se observaron las señales de salida según las instrucciones ordenadas y se observó también la respuesta ante un choque, tanto en la máquina de estados como en las señales de salida.

5.1 SIMULACIÓN DE LA EJECUCIÓN DE TAREA

Se hicieron simulaciones de un proceso completo del sistema digital, en la ejecución de una tarea, las cuales tuvieron un tiempo considerable de procesamiento, mayor de 2 horas, debido al tiempo extenso simulado. En estas simulaciones se puede observar en diferentes secciones, momentos relevantes de la máquina de estados, como el ingreso de instrucciones, el inicio de una instrucción y la respuesta ante un choque.

Se realizó una prueba con la siguiente tarea:

adelante 5 derecha 90 adelante 5 izquierda 180 atrás 9 derecha 45 fin sub-tarea de choque: atrás 10 derecha 45 fin

2 VHSIC hardware description language. VHSIC: very-high-speed integrated circuits.

Page 26: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

26

En la Imagen 5 se muestra la simulación del inicio del proceso; en esta, se observa la activación de la máquina de estados con la señal reset y cómo inicia su proceso una vez se desactiva esta señal.

Imagen 5 – Simulación - Inicio del proceso

Al recibir la señal enter, la máquina de estados sigue al estado 2 en donde almacena la instrucción en la memoria y una vez se desactiva enter pasa al estado 3 en donde se incrementa el valor en PC. Cuando se ingresan instrucciones con la señal inschoq activa, se almacenan en la memoria en el estado 4, pues como se ha tratado anteriormente, para estas instrucciones no se sigue la secuencia de direcciones de memoria de la tarea general, sino que se guarda en una sección destinada para estas instrucciones. Después continúa al estado 5, en donde se incrementa PCCh y regresa al estado 1. Así repite el proceso con cada instrucción hasta que recibe, en el estado 1, la señal ini, ante lo cual inicia la ejecución de la tarea. En este momento la máquina de estados recorre los estados del 6 al 8 en donde reinicia los Program Counters, almacena la primera instrucción en el registro Ins y según la acción pasa a un determinado estado. En este caso como la primera acción es un desplazamiento hacia delante, pasa al estado 9, en donde carga el registro A y sigue al estado 11 para el inicio de la generación del primer pulso. En el estado 11 se inicia la cuenta de centímetros; en el estado 12 se inicia la cuenta de ciclos, se cargan los valores en los registros I y D, y se revisa si hay un choque, teniendo en cuenta si se está dentro de la rutina de choque y en tal caso si se está en el primer centímetro. Después continúa con el estado 13 en el cual se cuenta el tiempo de duración del primer pulso, 1.7 ms.

En la Imagen 6 se observa como se va incrementando PC con el almacenamiento de cada instrucción y como se reinicia al iniciar la tarea. También se ve la cuenta de centímetros, inicialmente en 0 y al inicio de la instrucción, su incremento a 1.

Page 27: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

27

Imagen 6 – Simulación – Incremento en PC y cm

Al iniciar la tarea se observa el tren de pulsos correspondiente al desplazamiento hacia delante, hasta que ocurre un choque (Imagen7), cuando el sistema va al estado 30, en el cual se carga el registro rc, indicando que está ejecutando la sub-tarea de choque, también se reinician los contadores de ciclos de pulso, centímetros, segmentos de giro y se carga el registro Insch con la instrucción de la sub-tarea; de allí pasa al estado 31 en el que se lee la instrucción y en este caso pasa al estado 10 por tratarse de un desplazamiento hacia atrás.

Page 28: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

28

Imagen 7 – Simulación - choque

En la imagen 7 se observa que el sistema está en la ejecución de los pulsos correspondientes al desplazamiento; cuando se presenta un choque, en el momento en que va a iniciar un nuevo ciclo de pulsos, pasa al estado 30 como consecuencia del choque. A continuación inicia la ejecución de la sub-tarea de choque.

En la imagen 8 se visualiza, con un zoom alejado, que el sistema genera 20 ciclos de pulsos ante el choque, correspondientes a la primera instrucción de la sub-tarea; posteriormente se evidencia un giro, ya que los pulsos en las dos ruedas ocurren al tiempo, esta acción es el giro a la derecha de 45º.

Page 29: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

29

Imagen 8 – Simulación – Primera instrucción, sub-tarea choque

El sistema continua ejecutando la sub-tarea hasta la instrucción fin, cuando pasa al estado 33 para reiniciar PPCh, devolver a 0 el valor en rc y volver al estado 8, para leer de nuevo la instrucción de la tarea principal que se estaba ejecutando, la cual ha permanecido almacenada en el registro Ins. En la Imagen 9 se observa el cambio de acción y como, cuando termina de ejecutar el giro (8 ciclos de pulso), la máquina de estados pasa al estado 33 y se inicia un desplazamiento, correspondiente al desplazamiento en progreso cuando se presentó el choque.

Page 30: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

30

Imagen 9 – Simulación – fin sub-tarea choque

En adelante se observó en la simulación que toda la tarea es ejecutada correctamente, pues se producen todas las series de pulsos correspondientes a las instrucciones, con el orden y los anchos de pulso adecuados.

La simulación presenta un cubrimiento del 90 % (imagen 10), que resulta aceptable considerando la extensión en la duración del proceso y la participación de las señales de entrada. Cada proceso de simulación tuvo una duración mayor a 2 horas, ya que se simulaban 3.2 segundos de operación. Durante la mayor parte del tiempo las señales de entrada no cambian, permaneciendo en cero durante la ejecución de toda la tarea, pues así opera el sistema en condiciones normales. Las señales de entrada son relevantes al inicio del proceso, cuando se están ingresando las instrucciones y hasta que se da la señal de inicio. En adelante el desempeño del sistema no depende más de las señales de entrada (con excepción de choq), salvo que se presente reset. El tiempo en el que actúan las señales de entrada, al inicio, es de aproximadamente 12 us, que presentan una mínima porción de los 3.2 s del proceso. Además del corto lapso en el que se activan estas señales, lo hacen de forma ordenada en condiciones normales, por lo que en la simulación se consideró también este orden con que se aplicarían. Aunque en condiciones normales estas señales no requieren de activación y el sistema se diseñó para que no las tuviera en cuenta luego de iniciar la ejecución de la tarea, se consideró en la simulación la activación de estas señales, luego de haber ejecutado la mayor parte de la tarea; estas activaciones no produjeron ningún resultado inesperado, más allá de la acción de reset, que retorna al sistema al estado 0.

Page 31: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

31

Imagen 10 – Cubrimiento de la simulación

5.2 OBSERVACIÓN Y MEDICIÓN DE SEÑALES Y ESTADOS

Después de haber evaluado el comportamiento del sistema en las simulaciones se puso en marcha el sistema implementado y en primer lugar se observaron las dos señales de salida generadas según las instrucciones ingresadas.

Cuando el sistema está ejecutando un desplazamiento, genera pulsos con los dos anchos posibles. Esta señal fue observada y medida con un osciloscopio digital Tektronix TDS 2022B; en la Imagen 11, generada por el osciloscopio se presenta la señal medida.

Imagen 11 - Señales de salida

Las señales cumplen con exactitud los anchos de pulso estimados, ya que como se trató anteriormente, el sistema cuenta pulsos de 125 ns, según el reloj del sistema, por esto se logra este nivel de precisión para lograr la exactitud deseada. Esto es importante pues es el ancho del pulso el que determina el sentido y la velocidad de giro de las ruedas. La amplitud de los pulsos, que corresponde al nivel alto generado por el dispositivo FPGA, es de 3.4 V, lo cual está del rango requerido por los motores, de esta forma esta señal puede ser aplicada directamente como señal de entrada de los motores, como ocurre cuando el robot opera con el módulo con micro-controlador que incluye.

También se observa que la frecuencia corresponde a lo esperado:

Duración de los pulsos: 1.3 ms + 1.7 ms = 3 ms

Duración en estado bajo: 20 ms

Page 32: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

32

Período de cada señal: 23 ms

Frecuencia: (23 ms)-1 = 43.48 Hz

Se observaron las señales de salida del sistema digital así como el proceso de la máquina de estados en los segmentos relevantes, en el Analizador Lógico Tektronix TLA5201.

Se realizaron dos procesos de registro de señales, uno para observar el comportamiento de la máquina de estados y otro para visualizar las señales de salida y corroborarlas con las instrucciones ingresadas.

5.2.1 Máquina De Estados

En la imagen 12, se activa el registro del analizador lógico con el flanco de bajada de la señal enter. Los canales C3(0), C3(1) y C3(2) muestran los estados 1, 2 y 3 respectivamente. Se observa que con el flanco de bajada de enter la máquina pasa del estado 2 al 3. En el estado 2 es en el que el sistema toma una instrucción y la almacena en la memoria. En el estado 3 se incrementa en 1 el valor en PC y en seguida el sistema retorna al estado 1, pues este paso siempre dura 1 pulso de reloj.

Imagen 12 – enter, toma de instrucciones

En la imagen 13 se observa el proceso en la máquina de estados al inicio de una tarea, a partir de la activación de la señal ini, canal A2(1). Los canales C3(0) al C3(7) corresponden a los estados del 6 al 13; por lo tanto se comprueba como con la señal de inicio, la máquina va al estado 6 y sigue el proceso esperado hasta el estado 13, en el que hace la cuenta del tiempo del ancho del primer pulso de las señales de salida.

Page 33: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

33

Imagen 13 – máquina de estados, inicio de tarea

En la imagen 14 se observa la activación del estado 30 (C2(0)) al presentarse un choque. En este estado el sistema inicia la sub-tarea de choque, cargando el registro rc, reiniciando los contadores de centímetros, segmentos de giro y ciclos de pulso, y cargando la primera instrucción de la sub-tarea en el registro Insch. Después pasa al estado 31 en donde se hace una lectura de la instrucción y como en este caso es desplazamiento atrás, pasa al estado 10. En la imagen 14, los canales de A3(0) a A3(7) registran los estados del 6 al 13; así pues se comprueba la secuencia de estados desde el 10 hasta el 13, en el que realiza la cuenta del tiempo del ancho de pulso.

Page 34: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

34

Imagen 14 – máquina de estados, choque

5.2.2 Señales de Salida

Se realizaron pruebas conectando el sistema digital implementado al robot, observando las señales de salida con el analizador lógico. Se suministró la siguiente tarea y se ubicó un obstáculo en el camino del robot para así observar el efecto de este en las señales del sistema, además de comprobar que el robot, en efecto, realizara las acciones ordenadas y reaccionara al choque según se indicó:

adelante 50 derecha 90 adelante 5 izquierda 180 atrás 9 derecha 45 fin

Sub-tarea choque:

Atrás 10 Derecha 45 fin

A continuación se presentan las señales observadas con el analizador de estados lógicos.

Cuando se inicia la tarea, se observa el tren de pulsos correspondiente a la instrucción desplazamiento hacia delante (Imagen 15); la señal en A2(0) es la rueda izquierda, A2(1)

Page 35: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

35

corresponde a la rueda derecha. Se observan únicamente las dos señales de salida; en este caso no se utilizan los canales A(3) a A(7).

Imagen 15 – Inicio de ejecución de la tarea

Durante el primer desplazamiento, el robot choca con un obstáculo; a causa de esto se generan pulsos de señal choq, como se observa en el canal A2(3) en la Imagen 16, hasta que el robot se separe del obstáculo y la señal proveniente del robot así lo indique.

Page 36: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

36

Imagen 16 - choque

El robot reinicia la sub-tarea de choque mientras siga encontrando la señal choq (A2(3)); a partir del último pulso se inicia la primera instrucción de la sub-tarea, en este caso, desplazamiento hacia atrás, como se puede observar en la imagen 16, según la cual la primera señal, el pulso de mayor ancho, se aplica primero a A2(1), la rueda derecha.

Observando la parte superior izquierda, sobre el panel de visualización de las señales, se puede observar el tiempo entre los cursores. El cursor 1, corresponde al inicio del desplazamiento hacia atrás (ver imagen 16, cursor 1). En la imagen 17 se observa el momento en el que termina el desplazamiento e inicia el giro a la derecha; la duración de este desplazamiento de 460 ms corresponde a los 20 ciclos de pulso (10 cm) de 23 ms del desplazamiento hacia atrás.

Page 37: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

37

Imagen 15 – inicio giro a la derecha

El giro a la derecha termina a los 173.6 ms (8 *21.7 ms), es decir, 45º. En ese momento se regresa a la tarea que estaba en ejecución en el momento del choque, adelante 50 cm, como se observa en la Imagen 18.

Imagen 16 – fin sub-tarea

Estos 50 cm se completan a los 2.3 s (100 * 23 ms) como se observa en la Imagen 19; continúa un giro a la derecha.

Imagen 17 – giro a la derecha

Page 38: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

38

El giro termina a los 347.2 ms, correspondientes a 2 segmentos de giro de 8 pulsos, de 21.7 ms c/u (2*8*21.7 ms); estos dos segmentos son 90º. Continua un desplazamiento hacia delante (primero el pulso mayor, a la rueda izquierda). En la Imagen 20 se muestra la culminación del giro y el cambio a desplazamiento.

Imagen 18 – desplazamiento adelante

En la Imagen 21 se registra cuando se completa el desplazamiento a los 230 ms, consecuentes con los 10 ciclos de pulso de 23 ms, o 5 cm. Inicia un giro a la izquierda (pulsos de menor ancho).

Imagen 19 – giro a la izquierda

El giro culmina a los 681.6 ms, es decir 180º (4*8*21.3 ms). Sigue un desplazamiento hacia atrás. Esta transición se muestra en la Imagen 22.

Page 39: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

39

Imagen 20 – desplazamiento atrás

Continuando con la Imagen 23, el movimiento cambia a los 414 ms, que corresponden a 9 cm (9*2*23 ms). La siguiente acción es un giro a la derecha.

Imagen 21 – giro a la derecha

En la Imagen 24 se comprueba que este giro se compone de 8 ciclos de pulso, correspondientes a un giro de 45º. Después de este giro las señales permanecen en 0 y el robot se detiene, listo para recibir una nueva tarea o para iniciar de nuevo la tarea almacenada.

Page 40: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

40

Imagen 22 – fin de la tarea

La observación de esta prueba es consecuente con las instrucciones ordenadas y presenta el resultado que se esperaba, incluyendo el evento del choque con un obstáculo. Las señales observadas corresponden a la tarea suministrada y al comprobar que el robot ejecuta esta tarea, se valida el sistema diseñado, teniendo en cuenta los límites de precisión propios del robot y relativos al objeto del presente proyecto.

Como es evidente en la observación de las señales de salida y de estado del sistema, así como de las acciones ejecutadas por el robot, el sistema digital cumple con el objetivo para el que fue diseñado, produce en el robot la ejecución de las tareas ordenadas y puede operarlo de igual forma que lo hace el módulo con micro-controlador que hace parte del kit del robot. Se comprobó en el laboratorio el funcionamiento del robot, con resultados exitosos en la respuesta del robot según la tarea programada.

6. DIFICULTADES EN EL DESARROLLO DEL PROYECTO

Si bien el Robot es un dispositivo didáctico para robótica, con una construcción abierta que permite agregar componentes a su infraestructura, estas integraciones deben hacerse sobre un pequeño “protoboard” con que cuenta el robot. Este es un espacio insuficiente para la integración de un sistema adicional; en este caso se conectaron las señales de salida del sistema digital utilizando este “protoboard”, resultando en una conexión muy débil, además de que el robot queda dependiendo de un cable para su operación.

Para el objeto del presente proyecto, es válida esta configuración, pues se pretendía demostrar la posibilidad del uso del robot con un sistema digital diferente al propio; de este modo se expone la viabilidad de utilizar el robot como aplicación en el diseño de sistemas digitales y en este caso el robot cumpliría su objetivo completamente, en el ámbito académico. Sin embargo, si lo que se requiere en sí es la tarea en particular que desempeña el robot, lo más probable es que el módulo de control que provee el fabricante sea la forma más práctica de operación del robot. Con un sistema digital nuevo, esta ventaja solo se alcanzaría, diseñando un sistema digital implantado en un circuito que case en el socket en donde usualmente se instala el módulo propio del sistema. Esto tendría unos requerimientos de tamaño (en especial del circuito FPGA) y del tipo de montaje del circuito, sobrepasando el alcance de los cursos de diseño de la carrera. Además tendría que incluirse la tarea a ejecutar en el diseño del sistema, a menos que se adecúe un módulo de ingreso de instrucciones en el pequeño “protoboard” del robot.

Page 41: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

41

7. CONCLUSIONES

Se comprueba que es viable la operación del robot por medio de un sistema digital implementado en FPGA. Es factible suprimir el sistema de control con que cuenta el robot y reemplazarlo por este sistema digital.

El sistema digital implementado, si bien agrega un componente a la operación del robot, permite que el usuario ordene una tarea requerida sin la necesidad de programarlo a través de un computador.

De igual forma es posible diseñar el sistema de tal forma que ya incluya las acciones a ejecutar y así pueda operar directamente al robot, sin la necesidad de un módulo adicional de ingreso de instrucciones. De esta manera tendría una forma de manejo similar a la que el robot posee inicialmente, usando una tecnología diferente.

Debido a que el sistema digital debe interactuar con un sistema (robot) y con componentes externos, presenta un valor agregado para ser planteado como una aplicación académica en el diseño de sistemas digitales, ya que deben considerarse problemas prácticos externos al sistema digital en sí, que por lo general estarán presentes en una aplicación industrial.

Aunque el sistema digital puede alcanzar unos niveles relativamente altos de precisión, el robot no es una solución viable para una aplicación que demande una precisión superior a la manejada en este proyecto, en la que el robot se desempeña con desplazamientos en centímetros, giros en segmentos de 45 º y en donde no es relevante un nivel muy alto de exactitud; esto es consecuencia específicamente del robot en sí y de las características de sus motores.

Page 42: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

42

8. COSTOS ESTIMADOS

En la Tabla 3 se presenta una estimación de los costos del desarrollo del presente Trabajo de Grado.

Tabla 3 - Estimación de costos

Recursos Técnicos Fuente Recurso Costo PUJ Analizador de estados lógicos – Depreciación 3

meses $ 1.750.000

PUJ Robot Boe-Bot™ - Préstamo 2 años $ 270.000 PUJ Tarjeta de Desarrollo Tardac $ 50.000 PUJ Computador – Depreciación 3 meses $ 75.000 Propia Computador – Depreciación 1 año $ 350.000 PUJ Multímetro digital – Depreciación 3 meses $ 170.000 PUJ Fuente dual de poder – Depreciación 3 meses $ 25.000 PUJ Osciloscopio Digital – Depreciación 3 meses $ 150.000 Propia Componentes $ 60.000 PUJ Recursos físicos Universidad – 6 meses $ 1.800.000 Recursos Humanos Fuente Recurso Costo PUJ Director Trabajo de Grado – Tiempo parcial – 1

año $ 600.000

PUJ Asesor – Tiempo parcial – 1 año $ 300.000 Propia Estudiante – Medio tiempo, 1 año. $ 4.500.000 Costos Totales Estimados: $ 10.100.000

Page 43: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

43

FUENTES DE INFORMACIÓN

ALTERA. ACEX 1K Programmable Logic Device Family Data Sheet. May 2003, ver. 3.4.

ALTERA. RAM Megafunction – User Guide. Version 1.0. 2004.

ALTERA. Recommended HDL Coding Styles. En: Quartus II Handbook Version 11.0 Volume 1: Design and Synthesis. 2010.

LINDSAY, Andy. Robotics with the Boe-Bot. Student Guide. Version 3.0.

LINDSAY, Andy. Robotics with the Boe-Bot. Student Guide. Version 2.2.

MANUAL DE USUARIO - Tarjeta de desarrollo para ACEX 1K100 y memoria EPC2 – TARDAC. Bogotá. 2006. Revisión 002.

PARALLAX. Board of education Rev. C Manual. v2.0. 2010:

http://www.parallax.com/Portals/0/Downloads/docs/prod/boards/28150-BOE-Serial-v2.0.pdf

PARALLAX. Continuous Rotation Servo. v2.2. 2011: http://www.parallax.com/Portals/0/Downloads/docs/prod/motors/900-00008-CRServo-v2.2.pdf

PIC16F688 Data Sheet.

WAKERLY, John F. Diseño digital principios y prácticas 3a ed.

Page 44: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

44

ANEXO A

Descripción AHPL

En la tabla A1 1 – Denominaciones AHPL se describen las equivalencias entre registros del sistema y nombres usados en AHPL:

AHPL Sistema, VHDL Ins RegInstruccion Insch RegInstruccionChoque 45g Giro_45g rc RutinaChoque Cicl Ciclos compa Comparador A A Registro adelante Tabla A 1 – Denominaciones AHPL

0. PCCh ← [10000000] PC ← [00000000] 1. (enter . inschoq’ . ini’) × 2 + (enter . inschoq . ini’) × 4 + (enter’ . ini) × 6 + (enter ⊕ ini)’ × 1 2. M(PC) ← instr → (enter × 2) + (enter’ × 3) 3. PC ← PC + 1 → 1 4. M(PCCh) ← instr → (enter × 4) + (enter’ × 5) 5. PCCh ← PCCh +1 → 1 6. PC ← [00000000] PCCH ← [10000000] 7. Ins ← M(PC) 8. → ( Ins(9)’ . Ins(8)’ . Ins(7)’ ) × 9 ) + ( Ins(9)’ . Ins(8) . Ins(7) ) × 10 ) + ( Ins(9)’ . ( Ins(8) ⊕ Ins(7) ) ) × 21 ) + ( Ins(9) × 0 ) 9. A ← 1 → 11 10. A ← 0 11. cm ← cm + 1 12. Cicl ← Cicl + 1; I ← A; D ← A’ → ( ( (choq’) + (choq . cm(6)’ . cm(5)’ . cm(4)’ . cm(3)’ . cm(2)’ . cm(1)’ . cm(0) . rc) ) × 13 ) + \\\ choq y cm=1, y rc

Page 45: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

45

( (choq . ( cm(6)’ . cm(5)’ . cm(4)’ . cm(3)’ . cm(2)’ . cm(1)’ . cm(0) )’ . rc) × 34 ) + ( (choq . rc’) × 30 ) 13. CLl ← CLl + 1 → ( CLl(13) . CLl(12) . CLl(11)’ . CLl(10) . CLl(9)’ . CLl(8) . CLl(7)’ . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ × 14 ) + \\CLl=13600 ( ( CLl(13) . CLl(12) . CLl(11)’ . CLl(10) . CLl(9)’ . CLl(8) . CLl(7)’ . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ )’ × 13 ) \\CLl≠13600 14. I ← I’; D ← D’; CLl ← 0 15. CLl ← CLl + 1 → ( CLl(13) . CLl(12)’ . CLl(11) . CLl(10)’ . CLl(9)’ . CLl(8)’ . CLl(7) . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ × 16 ) + \\CLl=10400 ( ( CLl(13) . CLl(12)’ . CLl(11) . CLl(10)’ . CLl(9)’ . CLl(8)’ . CLl(7) . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ )’ × 15 ) \\CLl≠10400 16. D ← 0; CLl ← 0; I ← 0 17. CP ← CP + 1

→ ( CP(17) . CP(16)’ . CP(15)’ . CP(14) . CP(13) . CP(12) . CP(11)’ . CP(10)’ . CP(9)’ . CP(8) . CP(7)’ . CP(6)’ . CP(5)’ . CP(4)’ . CP(3)’ . CP(2)’ . CP(1)’ . CP(0)’ × 18 ) + \\CP=160000 ( ( CP(17) . CP(16)’ . CP(15)’ . CP(14) . CP(13) . CP(12) . CP(11)’ . CP(10)’ . CP(9)’ . CP(8) . CP(7)’ . CP(6)’ . CP(5)’ . CP(4)’ . CP(3)’ . CP(2)’ . CP(1)’ . CP(0)’ )’ × 17 ) \\CP≠160000

18. CP ← 0 → ( ( Cicl(1) . Cicl(0)’ )’ × 12 ) + ( Cicl(1) . Cicl(0)’ × 19 ) \\Cicl=2 → 19 19. Cicl ← 0 → ( ( compa(cm, Ins(6...0))’ . rc’ ) × 11 ) + ( ( compa(cm, Ins(6...0)) . rc’ ) × 20 ) + ( ( compa(cm, Insch(6...0))’ . rc ) × 11 ) + ( ( compa(cm, Insch(6...0)) . rc ) × 32 ) 20. cm ← 0; PC ← PC + 1 → 7 21. 45g ← 45g + 1 22. I ← 1; D ← 1; Cicl ← Cicl + 1 → ( ( Ins(8)’ . Ins(7) . rc’ ) × 23 ) + ( ( Ins(8) . Ins(7)’ . rc’ ) × 24 ) + ( ( Insch(8)’ . Insch(7) . rc ) × 23 ) + ( ( Insch(8) . Insch(7)’ . rc ) × 24 ) 23. CLl ← CLl + 1 → ( CLl(13) . CLl(12) . CLl(11)’ . CLl(10) . CLl(9)’ . CLl(8) . CLl(7)’ . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ × 25 ) + \\CLl=13600 ( ( CLl(13) . CLl(12) . CLl(11)’ . CLl(10) . CLl(9)’ . CLl(8) . CLl(7)’ . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ )’ × 23 ) \\CLl≠13600 24. CLl ← CLl + 1

Page 46: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

46

→ ( CLl(13) . CLl(12)’ . CLl(11) . CLl(10)’ . CLl(9)’ . CLl(8)’ . CLl(7) . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ × 25 ) + \\CLl=10400 ( ( CLl(13) . CLl(12)’ . CLl(11) . CLl(10)’ . CLl(9)’ . CLl(8)’ . CLl(7) . CLl(6)’ . CLl(5) . CLl(4)’ . CLl(3)’ . CLl(2)’ . CLl(1)’ . CLl(0)’ )’ × 24 ) \\CLl≠10400 25. D ← 0; CLl ← 0; I ← 0 26. CP ← CP + 1

→ ( CP(17) . CP(16)’ . CP(15)’ . CP(14) . CP(13) . CP(12) . CP(11)’ . CP(10)’ . CP(9)’ . CP(8) . CP(7)’ . CP(6)’ . CP(5)’ . CP(4)’ . CP(3)’ . CP(2)’ . CP(1)’ . CP(0)’ × 27 ) + \\CP=160000 ( ( CP(17) . CP(16)’ . CP(15)’ . CP(14) . CP(13) . CP(12) . CP(11)’ . CP(10)’ . CP(9)’ . CP(8) . CP(7)’ . CP(6)’ . CP(5)’ . CP(4)’ . CP(3)’ . CP(2)’ . CP(1)’ . CP(0)’ )’ × 26 ) \\CP≠160000

27. CP ← 0 → ( ( Cicl(3) . Cicl(2)’ . Cicl(1)’ . Cicl(0)’ )’ × 22 ) + ( Cicl(3) . Cicl(2)’ . Cicl(1)’ . Cicl(0)’ × 28 ) \\Cicl=8 28. Cicl ← 0 → ( ( compa(45g, Ins(1,0))’ . rc’ ) × 21 ) + ( ( compa(45g, Ins(1,0)) . rc’ ) × 29 ) + ( ( compa(45g, Insch(1,0))’ . rc ) × 21 ) + ( ( compa(45g, Insch(1,0)) . rc ) × 32 ) 29. 45g ← 0; PC ← PC + 1 → 7 30. rc ← 1; cm ← 0; 45g ← 0; Cicl ← 0; Insch ← M(PCCh) 31. → ( ( Insch(9)’ . Insch(8)’ . Insch(7)’ ) × 9 ) + ( ( Insch(9)’ . Insch(8) . Insch(7) ) × 10 ) + ( ( Insch(9)’ . ( Insch(8) ⊕ Insch(7) ) ) × 21 ) + ( Insch(9) × 33 ) 32. PCCh ← PCCh + 1 → 30 33. rc ← 0; PCCh ← [10000000] → 8 34. PCCh ← [10000000] → 30

Documentación de Descripción AHPL

A continuación se describe el funcionamiento del sistema digital, según cada estado de la máquina de estados:

El estado 0 es el estado inicial de la máquina de estados, el cual se activa con la señal reset. En este estado se cargan los Program Counters PC y PCCh con sus valores iniciales; estos valores iniciales son las direcciones de memoria en donde se almacenará la primera instrucción del programa y la primera instrucción de la subtarea de choque.

Page 47: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

47

0. El estado 0 es el estado inicial de la máquina de estados, el cual se activa con la señal reset. En este estado se cargan los Program Counters PC y PCCh con sus valores iniciales; estos valores iniciales son las direcciones de memoria en donde se almacenará la primera instrucción del programa y la primera instrucción de la subtarea de choque. 1. El sistema está listo para recibir instrucciones o para iniciar la ejecución de la tarea. Si se activa la señal enter pasa al estado 2 para la carga de la instrucción, que es la señal instr; si la señal inschoq indica que se trata de una instrucción de la subtarea de choque, cuando se activa enter se pasa al estado 4 para el almacenamiento de la instrucción en la correspondiente dirección de memoria. Si se activa la señal ini se pasa al estado 6 para el inicio de la ejecución de la tarea. Si no se activa enter ni ini, o si se activan al tiempo, el sistema permanece en el estado 1, a la espera de orden de inicio o de registro de una instrucción. 2. Se carga la memoria, en la dirección que indique el Program Counter PC, con la instrucción en la señal de entrada instr, es decir con la instrucción ingresada por el usuario; cuando se desactiva la señal enter se pasa al estado 3. 3. Después de la carga de una instrucción, se incrementa en uno el valor en el program counter PC y se retorna al estado 1. 4. Como en el estado 2, se carga en la memoria la instrucción ingresada por el usuario, pero esta vez corresponde a una instrucción de la subtarea de choque, por lo que la dirección de memoria se toma del Program Counter PCCh. Cuando la señal enter retorne a estado bajo, se pasa al estado 5. 5. Se incrementa en uno PCCh y se retorna al estado 1. 6. Se cargan los Program Counters con las direcciones de memoria iniciales, tanto del programa como de la subtarea de choque, para iniciar su lectura y ejecución. 7. Se carga el registro Ins con la instrucción en la dirección de memoria que indique PC, para iniciar su ejecución. 8. Lectura de la acción a ejecutar según los 3 bits más significativos. 000: desplazamiento hacia delante, pasa al estado 9. 011: desplazamiento hacia atrás, pasa al estado 10. 001 ó 010: giro, pasa al estado 21. Si el bit más significativo es 0, la instrucción es Pare, retorna al estado 0 para la carga de los Program Counters con las direcciones de memoria iniciales. 9. Se llega a este estado si la instrucción es un desplazamiento hacia delante, por lo tanto se carga el registro A con 1. 10. Se llega a este estado si la instrucción es un desplazamiento hacia atrás, por lo tanto se carga el registro A con 0. 11. Se incrementa en uno el valor en el registro cm, para así llevar la cuenta de los centímetros recorridos en la ejecución de una instrucción. 12. Se incrementa en uno la cuenta de ciclos de pulso, en el registro Cicl. Se carga el registro I con el valor en A y el registro D con el valor en A negado. Si el desplazamiento es hacia delante, la señal de la rueda izquierda inicia en nivel alto, si es hacia atrás, es la señal en la rueda derecha la que inicia en nivel alto.

Page 48: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

48

Es en este estado en el que se revisa la señal de choque: Si no hay un choque, o hay un choque pero se está recorriendo el primer centímetro (cm=1) y el sistema está en la ejecucion de la subtarea de choque (rc), se pasa al estado 13. Si hay un choque, la cuenta en cm es diferente de 1 y el sistema está en la ejecución de la subtarea de choque, pasa al estado 34. Si hay un choque y el sistema no está ejecutando la subtarea de choque, pasa al estado 30. 13. Con cada pulso de reloj se incrementa en uno el valor en CLl, hasta 13600 (1.7 ms). Al alcanzar este valor se pasa al estado 14. 14. Los registros I y D cambian de valor, se reinicia el contador CLl. 15. Como en el estado 13, se cuentan pulsos de reloj con el contador CLl, esta vez hasta 10400 (1.3 ms). Al alcanzar este valor se pasa al estado 16. Se reinicia el contador CLL y se carga 0 en los registros I y D. 17. Con las dos señales de salida en nivel bajo, se inicia la cuenta de pulsos de reloj por medio del contador CP, esta vez hasta 160000, correspondiente a 20 ms. Al alcanzar este valor se pasa al estado 18. 18. Se reinica el contador CP. Si la cuenta en el contador Cicl es 2, entonces con el ciclo de pulsos (pulsos y espera en estado bajo) que se acaba de completar se recorrió un centímetro, entonces se pasa al estado 19; en caso contrario se retorna al estado 12 para la ejecución de un nuevo ciclo de pulsos. 19. Se reinica la cuenta en Cicl. Si no se está ejecutando la subtarea de choque: Si el número de centímetros recorridos es igual al de centímetros de la instrucción (bits 6 a 0 en Ins), se pasa al estado 20, de lo contrario se retorna al estado 11 para recorrer un centímetro más. Si se está ejecutando la subtarea de choque: Si se completaron los centímetros indicados por la instrucción se pasa al estado 32, de lo contrario se regresa al estado 11 para el recorrido de un nuevo centímetro; en este caso la instrucción en ejecución se encuentra en el registro Insch. 20. Al completar la cantidad de centímetros de un desplazamiento, se reinicia el contador de centímetros y se incrementa en uno el valor en PC para la lectura de la siguiente instrucción. Se pasa al estado 7 para la carga en Ins de esta nueva instrucción. 21. Se incrementa en uno la cuenta de segmentos de 45º en un giro, para iniciar la ejecución de uno de estos segmentos. 22. Según se esté ejecutando la subtarea de choque o el programa principal, se lee la instrucción del registro Insch o Ins, respectivamente. Si el giro a ejecutar es hacia la derecha (01) se pasa al estado 23, si es hacia la izquierda se pasa al estado 24. 23. Para el caso de giro a la derecha, el ancho de pulso en las ruedas debe ser de 1.7 ms; por lo tanto se deben contar 13600 pulsos de reloj. Esta cuenta se hace con el contador CLl. Al completarse se pasa al estado 25. 24. Para el caso de giro a la izquierda, el ancho de pulso en las ruedas debe ser de 1.3 ms; por lo tanto se deben contar 104000 pulsos de reloj. Esta cuenta se hace con el contador CLl. Al

Page 49: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

49

completarse se pasa al estado 25. 25. Se cargan con 0 los registros I y D. Se reinicia el contador CLl. 26. En un giro, después de un pulso simultáneo en cada señal de salida, se cuenta el tiempo que deben permanecer en nivel bajo estas señales (20 ms) con el contador CP. Al completar lso 160000 pulsos de reloj necesarios, se pasa al estado 27. 27. Se reinica el contador CP. Si se realizaron 8 ciclos de pulsos entonces se completó un segmento de giro de 45º, en ese caso se pasa al estado 28; si no se han completado los 8 ciclos se regresa al estado 22 para la ejecución de un nuevo ciclo de pulsos. 28. Se reinicia la cuenta de ciclos de pulsos en Cicl. Si el número de segmentos de 45º ejecutados es diferente al que indica la instrucción, se pasa al estado 21. Si se completaron los segmentos indicados por la instruccción se pasa al estado 29 o 32, según si se está ejecutando la subtarea de choque. 29. Al completarse el giro indicado por la instrucción se reinicia el contador 45g y se incrementa en uno el Program Counter PC para la lectura de la siguiente instrucción. Se pasa al estado 7 para la carga de esta nueva instrucción. 30. Ante un choque, se carga con 1 el registro rc, para indicar la ejecución de la subtarea de choque. En este estado se reinician los contadores de centímetros y de segmentos de giro, cm y 45g; se reinicia el contador de ciclos de pulsos Cicl; y se carga en el registro Insch la instrucción en la dirección de memoria que indique el Program Counter PCCh, instrucción que pertenece a la subtarea de choque. 31. Si la instrucción de la subtarea de choque es desplazamiento hacia delante, se pasa al estado 9; si es desplazamiento hacia atrás, se pasa al estado 10; si se trata de un giro se pasa al estado 21; si la instrucción es Pare (bit más significativo = 1) pasa al estado 33. 32. PCCh ← PCCh + 1 → 30 33. El indicador de subtarea de choque rc se carga con valor 0; el Program Counter PCCh se carga con la dirección de memoria inicial; se retorna al estado 8 para continuar con la ejecución del programa, en la instrucción que estaba en proceso en el momento del choque. 34. Al presentarse un choque durante la ejecución de la subtarea de choque, se carga el Program Counter PCCH con la dirección de memoria de la instrucción inicial, para reiniciar la subtarea de choque; se pasa al estado 30 para el inicio nuevamente de la subtarea.

Page 50: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

50

ANEXO B

Guía De Inicio Rápido – Uso De Interfaces, Boe-Bot™ de Parallax Inc

Es factible operar el robot Boe-Bot con un sistema de procesamiento diferente al que trae consigo. El robot basa su control en un módulo denominado BASIC Stamp 2, el cual cuenta con un micro-controlador; usualmente este micro-controlador se programa conectando un computador directamente a la infraestructura del robot, a través de la plataforma Board of Education® Carrier Board. Esta programación se realiza mediante el software PBASIC, suministrado por el fabricante.

Imagen B 1 - Boe-Bot® robot. *Disponible en: < http://www.parallax.com/Portals/0/Images/Prod/2/281/28132a-L.jpg >

!"#$%&'()*(+,-'(.,&/.,%01(.'#23(· Page 3(

!

.,%"( %"21( %&4%( #35(What’s a Microcontroller?( 6,3%#23( 231%'-6%2,31( 7,'( 8&%%238( 1%#'%&5( 92%"(

.:;<!(;%#=$("#'59#'&(#35(1,7%9#'&(23(!"#$%&'()>((?"&1&(231%'-6%2,31(#'&(#@=,1%(25&3%26#@>(

Introducing the BASIC Stamp and Board of Education "!#"$%&!$'()*!+!),-./0!(1-!(!#,(2-!,3!4-.5('6,17!5(22602!8,(2-!(20!9:,;1!61!<6=.20!>?+@!!"9!)01'6,10-!0(2/602A!(!#"$%&!$'()*!),-./0!69!/6B0!(!C02D!9)(//!5,)*.'02@!!E:69!C02D!9)(//!5,)*.'02!*/.=9!61',!':0!#,(2-!,3!4-.5('6,1!5(22602!8,(2-@!!"9!D,.!;6//!9,,1!900A!':0!#,(2-!,3!4-.5('6,1!)(B09!6'!0(9D!',!5,1105'!(!*,;02!9.**/D!(1-!9026(/!5(8/0!',!':0! #"$%&! $'()*! ),-./0@! ! %1! /('02! (5'6C6'609A! D,.! ;6//! (/9,! 900! :,;! ':0! #,(2-! ,3!4-.5('6,1!)(B09!6'!0(9D!',!8.6/-!5625.6'9!(1-!5,1105'!':0)!',!':0!#"$%&!$'()*@!!!

!!!!!!!!!!!!!!!!!!! !!! !!

Figure 1-2 .:;<!(;%#=$A(B(C,5-@&(D@&7%E((.,#'5(,7(F5-6#%2,3A(!#''2&'(.,#'5(D'28"%E(

(

Introducing the BASIC Stamp HomeWork Board E:0!#"$%&!$'()*7!F,)0G,2B!#,(2-H!*2,I05'!*/('3,2)!69!9:,;1!80/,;!61!<6=.20!>?J@!!E:69!8,(2-!69!/6B0!(!#,(2-!,3!4-.5('6,1!;6':!':0!#"$%&!$'()*!+!)652,5,1'2,//02!8.6/'!61@!!K,.!5(1!.90!06':02!(!#"$%&!$'()*!+!),-./0!;6':!#,(2-!,3!4-.5('6,1!5(22602!8,(2-!,2!':0!#"$%&!$'()*!F,)0G,2B!#,(2-! (9! D,.2! *2,I05'! */('3,2)! 3,2! ':0! (5'6C6'609! 61! ':69!'0L'@!#0!9.20!',!3,//,;!':0!-6205'6,19!3,2!':0!9*056365!*2,I05'!*/('3,2)!D,.!(20!.961=A!96150!':0D!-63302!61!(!30;!*/(509@!!

!"#$%&'()*(+,-'(.,&/.,%01(.'#23(· Page 1(

Chapter 1: Your Boe-Bot’s Brain !"#$#%%#&'!()*+,!-./0-.12!$.3.1!4,!15/!6.*7,!.6!15/!#*148414/,'!9$.:/*1,'!#);!*.)1/,1,!4)!154,!3..<=! ! >5/! -./0-.1! #);! #! *%.,/079! .6! 41,! -?@(A! @1#B9C! D! 9$.E$#BB#3%/!B4*$.*.)1$.%%/$! 3$#4)! #$/! ,5.F)! 4)! G4E7$/! H0H=! ! >5/! -?@(A! @1#B9! D! B.;7%/! 4,! 3.15!9.F/$67%!#);!/#,I!1.!7,/'!/,9/*4#%%I!F415!#!$.3.1=!!!!

!!!!!!

Figure 1-1 .456!(5%#7$8(9(7,:-;&(,3(#(.,&/.,%<(',=,%>(

(

!>5/!#*148414/,!4)!154,!1/&1!F4%%!E74;/!I.7!15$.7E5!F$414)E!,4B9%/!9$.E$#B,!15#1!B#</!15/!-?@(A!@1#B9!#);!I.7$!-./0-.1!;.!6.7$!/,,/)14#%!$.3.14*!1#,<,J!!

H=( K.)41.$!,/),.$,!1.!;/1/*1!15/!F.$%;!#$.7);!41!D=( K#</!;/*4,4.),!3#,/;!.)!F5#1!41!,/),/,!L=( A.)1$.%!41,!B.14.)!M3I!.9/$#14)E!15/!B.1.$,!15#1!B#</!41,!F5//%,!17$)N!O=( P&*5#)E/!4)6.$B#14.)!F415!41,!Q.3.14*4,1!M15#1!F4%%!3/!I.7RN!

!

!

?"&($',@'#7723@(;#3@-#@&(A,-(B2;;(-1&(%,(#CC,7$;21"(%"&1&(%#1D1(21(C#;;&:(PBASICE(B"2C"(1%#3:1(F,'*(

•( G#'#;;#H(/(!,7$#3A(%"#%(23I&3%&:(#3:(7#D&1(.456!(5%#7$(72C',C,3%',;;&'1>(•( .&@233&'1(/(J#:&(F,'(=&@233&'1(%,(-1&(%,(;&#'3(",B(%,($',@'#7(C,7$-%&'1((•( 4;;/$-'$,1&(/(G,B&'F-;(#3:(-1&F-;(F,'(1,;I23@(7#3A(:2FF&'&3%(D23:1(,F($',=;&71(•( 5A7=,;2C(/(K123@(1A7=,;1(L%&'71(%"#%('&1&7=;&(M3@;21"(B,':N$"'#1&1O( (•( 631%'-C%2,3(/(?,(231%'-C%(#(C,7$-%&'(",B(%,(1,;I&($',=;&71(•( !,:&(/(63(%&'71(%"#%(A,-(#3:(%"&(C,7$-%&'(-3:&'1%#3:((

!!

Imagen B 2 - Módulo BASIC Stamp® 2. *LINDSAY, Andy. Your Boe-Bot’s Brain. En: Robotics with the Boe-Bot. Student Guide. Version 2.2. p. 1

Imagen B 3 - Board of Education® Carrier Board. *LINDSAY, Andy. Your Boe-Bot’s Brain. En: Robotics with the Boe-Bot. Student Guide. Version 2.2. p. 3

Page 51: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

51

Debido a su construcción, es viable remover el módulo BASIC Stamp 2 y reemplazarlo por algún otro sistema para operar el robot. Al remover este módulo queda a disposición toda la infraestructura del robot, para interactuar con un nuevo sistema. Es posible utilizar la infraestructura del robot para conectar sensores que interactúen con el sistema que se conectará al robot en reemplazo del módulo suprimido.

El sistema que se requiera para interactuar con la infraestructura del robot, puede ser un sistema digital que se conecte directamente, pues ya la plataforma de funcionamiento cuenta con su fuente de energía y manejo de potencia, de forma tal, que es posible ingresar directamente señales para el manejo de los dos motores con los que cuenta, en reemplazo de las señales que generaba el módulo con el micro-controlador.

En primer lugar, los motores del robot deben ser calibrados mediante un ajuste que centra su operación por medio de un potenciómetro. Esto se debe realizar ingresando al robot una señal de entrada en forma de tren de pulsos, con un ancho de pulso de 1.5 ms y un tiempo entre pulsos de 20 ms. Para el esquema de conexión, se invita al lector a remitirse al manual Robotics with the Boe-Bot, capítulo 2, Actividad # 3. Esta señal requerida puede ser generada con el módulo BASIC Stamp 2, a través del software que provee el fabricante.

Señal para la calibración de los motores:

Figura B 1 - Diagrama de Tiempos, señal para la calibración de los motores. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 49.

Al aplicar esta señal, el motor debe ajustarse hasta que su eje permanezca detenido; si el motor presenta un ruido interno quiere decir que no está centrado por completo. Para este ajuste debe girarse suavemente el potenciómetro de calibración del robot:

Imagen B 4 – Ajuste de Servo. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 51.

Your Boe-Bot’s Servo Motors · Page 49

ACTIVITY #4: CENTERING THE SERVOS In this activity, you will run a program that sends the servos a signal, instructing them to stay still. Because the servos are not pre-adjusted at the factory, they will instead start turning. You will then use a screwdriver to adjust them so that they stay still. This is called centering the servos. After the adjustment, you will test the servos to make sure they are functioning properly. The test programs will send signals that make the servos turn clockwise and counterclockwise at various speeds.

Servo Tools and Parts The Parallax screwdriver shown in Figure 2-21 is the only extra tool you will need for this activity. If needed, any Phillips #1 point screwdriver with a 1/8 (3.18 mm) shaft should do the trick.

Figure 2-21 Parallax Screwdriver

Sending the Center Signal Figure 2-22 shows the signal that has to be sent to the servo connected to P12 to calibrate it. This is called the center signal, and after the servo has been properly adjusted, this signal instructs it to stay still. The instruction consists of a series of 1.5 ms pulses with 20 ms pauses between each pulse.

P12

1.5 ms 1.5 ms

20 ms

Figure 2-22 Timing Diagram for CenterServoP12.bs2 The 1.5 ms pulses instruct the servo to remain still.

The program for this signal will be a PULSOUT command and a PAUSE command inside a DO…LOOP. Figuring out the PAUSE command from the timing diagram is easy; it's going to be PAUSE 20 for the 20 ms between pulses. Figuring out the PULSOUT command's Pin argument isn't that hard either; it's going to be 12, for I/O pin P12. Next, let's figure out what the PULSOUT command's Duration

Your Boe-Bot’s Servo Motors · Page 51

Example Program: CenterServoP12.bs2 ' Robotics with the Boe-Bot - CenterServoP12.bs2 ' This program sends 1.5 ms pulses to the servo connected to ' P12 for manual centering. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" DO PULSOUT 12, 750 PAUSE 20 LOOP If the servo has not yet been centered, its horn will start turning, and you will be able to hear the motor inside making a whining noise.

If the servo is not yet centered, use a screwdriver to gently adjust the potentiometer in the servo as shown in Figure 2-24. Adjust the potentiometer until you find the setting that makes the servo stop turning.

Caution: do not push too hard with the screwdriver! The potentiometer inside the servo is pretty delicate, so be careful not to apply any more pressure than necessary.

Figure 2-24 Center Adjusting a Servo

1) Insert tip of Phillips screwdriver into potentiometer access hole.

2) Gently turn screwdriver to adjust potentiometer until the servo stops moving.

Verify that the LED signal monitor circuit connected to P12 is showing activity.

It should be emitting light, indicating that the pulses are being transmitted to the servo connected to P12.

Page 52: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

52

Para el ensamblaje del robot, una vez calibrados los motores, remitirse al manual Robotics with the Boe-Bot, Capítulo 3, Actividad 2; desarrollar la actividad para el armado del robot.

El Board of Education cuenta con un jumper para determinar si la fuente de potencia de los Servo se conecta a la señal Vin o Vdd del Board. Este jumper está ubicado entre los dos puertos de los Servo. Si el robot se va a operar con el portador de baterías de 6V (4 * 1.5V) que viene con el kit Boe-Bot, el jumper debe ubicarse en la posición Vin:

Figura B 2 - Puerto de alimentación del Servo en Vin. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 43.

Si se va a utilizar una fuente DC, con plug de 2.1mm, con positivo en el centro, 7.5 V, 1000 mA; se debe ubicar el jumper en la posición Vdd.

Cuando el robot está armado, puede operarse sin necesidad de conectar el módulo BASIC Stamp2. Según la infraestructura del robot, los motores debieron haberse conectado a los puntos 12 y 13 del Board of Education. Se cuenta con acceso a estos puntos en dos lugares adicionales al socket para implantar el módulo; por estos tres puntos es posible ingresar las señales de entrada a los motores, pues estos puntos son una conexión directa al puerto de señal de entrada de los motores.

Para la operación de los motores, el switch de 3 posiciones en Board of Education debe estar en la posición 2. En la posición 1 el resto de la infraestructura cuenta con alimentación de energía pero solo en la posición 2 se alimentan los motores.

Figura B 3 - Switch de encendido de 3 posiciones. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 42.

El robot cuenta con dos motores Parallax Continuous Rotation Servo con las siguientes especificaciones:

• Voltaje de alimentación: 4 – 6 VDC;

• máximo consumo de corriente: 140 +/- 50 mA a 6 VDC operando sin carga, 15 mA en estado estático;

• comunicación: Modulación por ancho de pulso;

• señal de entrada: PWM, 3.3 – 5 V, < voltaje de alimentación + 0.2 V.

Para el movimiento de los motores, estos responderán a señales de entrada en forma de tren de pulsos, con ancho de pulso en el rango entre 1.3 ms y 1.7 ms, quedando estático en 1.5 ms, como se

Your Boe-Bot’s Servo Motors · Page 43

BlackRed

X4 X5

15 14 13 12Vdd

Vin

Select Vin if you are using the battery pack that comes with the Boe-Bot kits.

Select Vdd if you are using a DC supply that plugs into an AC outlet (AC adapter).

BlackRed

X4 X5

15 14 13 12Vdd

Vin

Figure 2-12 Selecting Your Servo Ports’ Power Supply on the Board of Education

All examples and instructions in this book will use the battery pack. Figure 2-13 shows the schematic of the circuit you will build on the Board of Education. The jumper is set to Vin.

Connect your servos to your Board of Education as shown in Figure 2-13.

Vin

Vss

P13 WhiteRedBlack

Vin

Vss

P12 WhiteRedBlack

WhiteRedBlack

BlackRed

X4 X5

15 14 13 12Vdd

WhiteRed

Black

Figure 2-13 Servo Connections for the Board of Education

How do I tell which servo is connected to P13 and which servo is connected to P12? You just plugged your servos into headers with numbers above them. If the number above the header where the servo is plugged in is 13, it means the servo is connected to P13. If the number is 12, it means it’s connected to P12.

When you are done assembling the system, it should resemble Figure 2-14

(LED circuits not shown).

Page 50 · Robotics with the Boe-Bot

argument has to be for 1.5 ms pulses. 1.5 ms is 1.5 thousandths of a second, or 0.0015 s. Remember whatever number is in the PULSOUT command's Duration argument, multiply that number by 2 s (2 millionths of a second = 0.000002 s), and you will know how long the pulse will last. You can also figure out what the PULSOUT command's Duration argument has to be if you know how long you want the pulse to last. Just divide 2 s into the time you want the pulse to last. With this calculation:

750s000002.0s0015.0

s2durationPulseargumentDuration

...we now know that the command for a 1.5 ms pulse to P12 will be PULSOUT 12, 750. It’s best to only center one servo at a time, because that way you can hear when the motor stops as you are adjusting it. This program will only send the center signal to the servo connected to P12, and these next instructions will guide you through adjusting it. After you complete the process with the P12 servo, you will repeat it with the servo connected to P13.

If you have a Board of Education, make sure to set the 3-position power switch to position-2 as shown in Figure 2-23.

0 1 2

Figure 2-23 Set the 3-Position Switch to Position-2

If you are using the HomeWork Board, check the power connections to both

your BASIC Stamp and your servos. The 9 V battery should be attached to the battery clip, and the 6 V battery pack should have all four batteries loaded.

If the servos start running (or twitching) as soon as you connect power:

It's probably because the BASIC Stamp is running a program you ran in a previous activity.

Make sure to enter, save, and run CenterServoP12.bs2 before continuing to the servo centering instructions that follow the example program.

Enter, save, and run CenterServoP12.bs2, then continue with the instructions that

follow the program.

Page 53: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

53

evidenció en el ajuste de los motores. Según el ancho de pulso sea mayor o menor que 1.5 ms, el motor girará en uno u otro sentido, según las siguientes figuras:

En la figura A2 - 6 se observa un diagrama de un tren de pulsos con 1.7 ms de ancho de pulso, el cual hace girar al motor en contra del sentido del reloj.

En la figura A2 - 7, el tren de pulsos de 1.3 ms de ancho de pulso, corresponde al giro en el sentido de las manecillas del reloj.

A medida que el ancho de pulso se acerque a 1.5ms, la velocidad de giro del motor disminuirá; la velocidad máxima de giro del motor se encuentra en el rango entre 50 y 60 RPM.

Los puntos en Board of Education, del P0 al P15, que no se hayan asignado a los motores (normalmente P12 y P13) quedan disponibles para conectar el socket, en caso de que se vaya a utilizar, con los otros dos puertos de conexión del Board.

Considerando estas características y considerando los requerimientos de la infraestructura del robot, en particular de los motores, es viable integrar el robot con un sistema digital diferente al módulo que hace parte del kit del robot. Es posible diseñar un sistema digital que maniobre este robot, según las características y funciones requeridas.

Page 78 · !"#"$%&'()%$*($*+(,"+-,"$((!

√( "#$! %&'! ()*+),-! ,$.! /')012! %&,%! %&'! 3')/*! 4*$$'4%'.! %*! 567! 03! $*8! )*%,%0$+!9'%8''$!:;!,$.!<;!"5=!4>*4?803'@!!!

!' Robotics with the Boe-Bot – ServoP12Clockwise.bs2 ' Run the servo connected to P12 at full speed clockwise. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" DO PULSOUT 12, 650 PAUSE 20 LOOP

Example Program: ServoP12Counterclockwise.bs2 A*#!&,/'!()*9,9>2!,$%040(,%'.!%&,%!-,?0$+!%&'!PULSOUT!4*--,$.B3!Duration!,)+#-'$%!+)',%')!%&,$!C:;!80>>!4,#3'!%&'!3')/*!%*!)*%,%'!4*#$%')4>*4?803'@!D!Duration!*1!E:;!80>>!3'$.!6@C!-3!(#>3'3!,3! 3&*8$! 0$!F0+#)'!7G7<@! !H&03!80>>!-,?'! %&'! 3')/*! %#)$! 1#>>! 3(''.!4*#$%')4>*4?803'@!!

!

Figure 2-26 .(/01(2'(345'+(678%9(:8;+'($*+(<+7="(6479(>455(<?++@(A"49$+7&5"&;)%'+((

(

!√( I,/'!I')/*567J>*4?803'@937!,3!I')/*567J*#$%')4>*4?803'@937@!√( =*.012!%&'!()*+),-!92!4&,$+0$+!%&'!PULSOUT!4*--,$.B3!Duration!,)+#-'$%!

1)*-!<:;!%*!E:;@!√( "#$! %&'! ()*+),-! ,$.! /')012! %&,%! %&'! 3')/*! 4*$$'4%'.! %*! 567! 03! $*8! )*%,%0$+!

9'%8''$!:;!,$.!<;!"5=!4*#$%')4>*4?803'@!!!!' Robotics with the Boe-Bot – ServoP12Counterclockwise.bs2 ' Run the servo connected to P12 at full speed counterclockwise. ' {$STAMP BS2} ' {$PBASIC 2.5}

B@@(CD(BE!

B''(CF(BE!

/01(2'! /01(2'

GF(2'

)))0?878558H0&"2

'$89@87@('+7="

Page 76 · !"#"$%&'()%$*($*+(,"+-,"$((!

"#$%! $%! &'! ()&*+,(! -.! %/0%1%2(*! 2(%2$'34! ! 5/0%1%2(*! 2(%2$'3! $%! &! 6-72#6#$,(! #&0$2! 2-!8(9(,-+:!0(;&/%(!$2!$%'<2!&'1!./'!2-!2&=(!&!7-0-2!0&;=!&+&72!>/%2!2-!.$)!&!+7-0,(*!2#&2!1-/!;-/,8!#&9(!-2#(76$%(!;&/3#2!0(.-7(!+/22$'3!$2!2-3(2#(7?!!!!

!

Subsystem testing(%'($*+(./0&$%&+("1($+'$%23($*+(%24%5%4607(&"8."2+2$'(#+1"/+($*+9(3"(%2$"($*+(70/3+/(4+5%&+:((;$<'(0(50760#7+('$/0$+39($*0$(&02(*+7.(9"6()%2(/"#"$%&'(&"2$+'$':((;$<'(07'"(02(+''+2$%07( '=%77( 6'+4(#9(+23%2++/'()"/74)%4+( $"(4+5+7".(+5+/9$*%23( 1/"8( $"9'>( &0/'>(024(5%4+"(308+'($"('.0&+('*6$$7+'(024(?0/'(/"5%23(/"#"$':((@'.+&%0779(%2(8"/+(&"8.7+A(4+5%&+'>(%$(&02(#+&"8+(2+0/79(%8."''%#7+($"(1%36/+("6$(0(./"#7+8(%1($*+(%24%5%4607(&"8."2+2$'(*05+2<$(#++2($+'$+4(#+1"/+*024:((;2(0+/"'.0&+(./"B+&$'>(1"/(+A08.7+>(4%'0''+8#7%23(0(./"$"$9.+($"(1%A(0(./"#7+8(&02(&"'$(*624/+4'("1($*"6'024'>("/(+5+2(8%77%"2'("1(4"770/':((;2($*"'+(=%24'("1(./"B+&$'>('6#'9'$+8($+'$%23(%'(/%3"/"6'(024($*"/"63*:(

Pulse Width Controls Speed and Direction @(;&,,! .7-*!;('2(7$'3! 2#(! %(79-%! 2#&2! &! %$3'&,!6$2#!&!+/,%(!6$82#!-.!A4B!*%!;&/%(8! 2#(!%(79-%!2-!%2&1!%2$,,4!!"#$%!6&%!8-'(!/%$'3!&!PULSOUT!;-**&'8!6$2#!&!Duration!-.!CBD4!!E#&2!6-/,8!#&++('!$.!2#(!%$3'&,<%!+/,%(!6$82#!$%!'-2!A4B!*%F!!!!G'! 2#(! H-/7! "/7'! %(;2$-'! -.! I;2$9$21! JK:! 1-/! +7-37&**(8! 2#(! LI5GM! 52&*+! 2-! %('8!%(7$(%!-.!A4N!*%!+/,%(%!2-!&'!OPQ4!!!O(2<%!2&=(!&!;,-%(7!,--=!&2!2#&2!%(7$(%!-.!+/,%(%!&'8!.$'8! -/2! #-6! $2! ;&'! 0(! /%(8! 2-! ;-'27-,! &! %(79-4! ! R$3/7(! KSKB! %#-6%! #-6! &! T&7&,,&)!M-'2$'/-/%!@-2&2$-'! %(79-! 2/7'%! ./,,! %+((8! ;,-;=6$%(!6#('!1-/! %('8! $2! A4N!*%!+/,%(%4!!R/,,!%+((8!7&'3(%!.7-*!BD!2-!UD!@TV4!!

C44(DE(CF

C''(DG(CF

H:I(8' H:I(8'

JG(8'

))):.0/0770A:&"8

'$0240/4('+/5"

!

Figure 2-25 K(H:I(8'(L67'+(M/0%2(M6/2'($*+(N+/5"(O677(N.++4(P7"&=)%'+((

(

!

!

What’s RPM?((!+5"76$%"2'(L+/(?%26$+:((;$<'($*+(268#+/("1(1677(&%/&7+'('"8+$*%23($6/2'(%2(0(8%26$+:(

What’s a pulse train?!!Q6'$(0'(0(/0%7/"04($/0%2(%'(0('+/%+'("1(&0/'>(0(.67'+($/0%2(%'(0('+/%+'("1(.67'+':((

!

Figura B 4 - Giro contra el sentido del reloj. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 60

Figura B 5 - Giro en el sentido del reloj. *LINDSAY, Andy. Your Boe-Bot’s Servo Motors. En: Robotics with the Boe-Bot. Student Guide. Version 3.0. p. 58

Page 54: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

54

ANEXO C

Programación PIC16F688, compilador MikroC

void main() {

ANSEL=0x00;

CMCON0=0xFF;

trisc0_bit=1;

trisc1_bit=1;

trisc2_bit=1;

trisc3_bit=0;

trisc4_bit=0;

trisc5_bit=0;

while(1){

if (rc0_bit==0){

rc5_bit=1;

Delay_ms(30);

rc5_bit=0;

}

if (rc1_bit==1){

rc4_bit=1;

Delay_ms(300);

rc4_bit=0;

while(rc1_bit==1);

}

if (rc2_bit==1){

Page 55: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

55

rc3_bit=1;

Delay_ms(40);

rc3_bit=0;

while(rc2_bit==1);

}

Delay_ms(10);

}

}

Page 56: FACULTAD DE INGENIERÍA INGENIERÍA ELECTRÓNICA INFORME

56

ANEXO D

Layout – Circuito Impreso del Módulo de Ingreso de Instrucciones