Informe Final de Gusano

120
INSTITUTO SUPERIOR PEDRO P. DÍAZ ELECTRÓNICA INDUSTRIAL Proyecto: “ROBOT EN FORMA DE GUSANO” Presentado por: Jesús Francisco Arce Moreno 1

Transcript of Informe Final de Gusano

Page 1: Informe Final de Gusano

INSTITUTO SUPERIOR

PEDRO P. DÍAZ

ELECTRÓNICA INDUSTRIAL

Proyecto:

“ROBOT EN FORMA DE GUSANO”

Presentado por:

Jesús Francisco Arce Moreno

AREQUIPA – PERÚ

2009

1

Page 2: Informe Final de Gusano

DEDICATORIA

Dedico el presente trabajo a mí laptop

y a mi gata Minina, por todas aquellas

horas de compañía y de apoyo

brindado.

2

Page 3: Informe Final de Gusano

AGRADECIMIENTOS

Agradezco la confianza y apoyo que me brindo el grupo de investigación y

desarrollo “GRID” de la Universidad Alas Peruanas, que fueron los únicos que se

atrevieron a apoyar y financiar el presente trabajo.

3

Page 4: Informe Final de Gusano

RESUMEN

Un robot es una entidad virtual o mecánica artificial. En la práctica, esto es por lo general

un sistema electro-mecánico que, por su apariencia o sus movimientos, ofrece la sensación

de tener un propósito propio. La palabra robot puede referirse tanto a mecanismos físicos

como a sistemas virtuales de software, aunque suele aludirse a los segundos con el término

de bots.

No hay un consenso sobre qué máquinas pueden ser consideradas robots, pero sí existe un

acuerdo general entre los expertos y el público sobre que los robots tienden a hacer parte o

todo lo que sigue: moverse, hacer funcionar un brazo mecánico, sentir y manipular su

entorno y mostrar un comportamiento inteligente, especialmente si ése comportamiento

imita al de los humanos o a otros animales.

La idea de la construcción de un robot en forma de gusano, surge al querer investigar y

desarrollar software de inteligencia artificial y aplicarlo en una entidad física.

El robot desarrollado en el presente trabajo está dotado de un grado de inteligencia

artificial, ya que posee en su procesador central una red neuronal Perceptron.

El sentido de aplicar una red neuronal Perceptron es que debido a su sencillez es muy fácil

comprenderlo, y también ya que solo se controla el avance o retroceso de la maquina, y al

ser estas variables independientes, el uso de una red Perceptron es optimo y muy útil.

4

Page 5: Informe Final de Gusano

INDICE GENERAL

Pág.Dedicatoria 2

Agradecimientos 3 Resumen 4

Índice General 5

Índice de Figuras 6

Índice de tablas 7

Índice de Anexos 8

Introducción 9 Capítulo 1 - Planteamiento Teórico 10

Capítulo 2 - Marco de Referencia 19

Capítulo 3 - Planteamiento Operacional 43

Capítulo 4 - Discusión de Resultados 66

Capítulo 5 - Conclusiones y Recomendaciones 67

Bibliografía Consultada 68

Anexos 69

5

Page 6: Informe Final de Gusano

ÍNDICE DE FIGURAS

Pág.

Figura 1. Función AND 15

Figura 2. Función OR 15

Figura 3. Función XOR 15

Figura 4. Red Neuronal Perceptron Multicapa 16

Figura 5. Esquema de un microcontrolador 19

Figura 6. Diagrama de bloques 43

Figura 7. Detector infrarrojo de proximidad 44

Figura 8. LM567 44

Figura 9. Diagrama esquemático de los sensores 45

Figura 10. IRF 540n 46

Figura 11. Diagrama esquemático del circuito de potencia 47

Figura 12. PBC de circuito de potencia 47

Figura 13. PCB para el PIC 16f877a 49

Figura 14. Red tipo Perceptron 52

Figura 15. Herramientas e instrumentos 55

Figura 16. Alambre galvanizado 56

Figura 17. Estructura del robot 56

Figura 18. Vectores tomados en consideración 57

Figura 19. Posición de la batería 57

Figura 20. Posición de las placas 58

6

Page 7: Informe Final de Gusano

ÍNDICE DE TABLAS

Pág.

Tabla 1. Comportamiento del robot 50

Tabla 2. Comportamiento del robot 2 51

Tabla 3. Valores iniciales de la red 52

Tabla 4. Valores finales de la red 53

Tabla 5. Simulación de la red para los Patrones de Entrenamiento 54

Tabla 6. Simulación de la red para las nuevas combinaciones 54

7

Page 8: Informe Final de Gusano

ÍNDICE DE ANEXOS

Pág.

Anexo - PIC 16f877a 70

Anexo - LM567 73

Anexo - PN2N2222 76

Anexo - BC547 79

Anexo - BC556 81

Anexo - IRF 540 83

8

Page 9: Informe Final de Gusano

INTRODUCCIÓN

El presente trabajo lo desarrollo en cinco capítulos, los mismos que se detallan a

continuación:

En el Capítulo 1, Planteamiento Teórico, me refiero a la explicación de los sistemas

que utilizan microprocesadores en general.

En el Capítulo 2, Marco de Referencia, realizo una descripción detallada de los

componentes que intervienen en el circuito electrónico, explicando los tipos de dispositivos

y componentes electrónicos, la forma de probarlos, y sus características técnicas más

saltantes.

En el Capítulo 3, Planteamiento Operacional, explico el funcionamiento del circuito,

en una explicación detallada de todas las partes constituyentes del mismo.

En el Capítulo 4, Discusión de Resultados, explico características como montaje y

precauciones ha tener en cuenta por parte de los usuarios y técnicos.

En el Capítulo 5 detallo las Conclusiones y Recomendaciones a las cuales he

llegado después de haber realizado prolongados análisis sobre mi trabajo. Finalmente,

presento la bibliografía consultada, en la cual detallo los textos utilizados y las páginas web

a las cuales he recurrido para la obtención de información técnica, conocida como Data

sheets. Culminando con la presentación con una serie de Anexos principalmente de

carácter técnico informativo para las personas que se dignen investigar en este modesto

trabajo.

Gracias

9

Page 10: Informe Final de Gusano

CAPÍTULO 1

PLANTEAMIENTO TEÓRICO

ROBOT

Un robot es una entidad virtual o mecánica artificial. En la práctica, esto es por lo

general un sistema electro-mecánico que, por su apariencia o sus movimientos,

ofrece la sensación de tener un propósito propio. La palabra robot puede referirse

tanto a mecanismos físicos como a sistemas virtuales de software, aunque suele

aludirse a los segundos con el término de bots.[]

No hay un consenso sobre qué máquinas pueden ser consideradas robots, pero sí

existe un acuerdo general entre los expertos y el público sobre que los robots

tienden a hacer parte o todo lo que sigue: moverse, hacer funcionar un brazo

mecánico, sentir y manipular su entorno y mostrar un comportamiento inteligente,

especialmente si ése comportamiento imita al de los humanos o a otros animales.

Aunque las historias sobre ayudantes y acompañantes artificiales, así como los

intentos de crearlos, tienen una larga historia, las máquinas totalmente autónomas

no aparecieron hasta el siglo XX. El primer robot programable y dirigido de forma

digital, el Unimate, fue instalado en 1961 para levantar piezas calientes de matel de

una máquina de tinte y colocarlas.

Por lo general, la gente reacciona de forma positiva ante los robots con los que se

encuentra. Los robots domésticos para la limpieza y mantenimiento del hogar son

cada vez más comunes en los hogares. No obstante, existe una cierta ansiedad sobre

el impacto económico de la automatización y la amenaza del armamento robótico,

una ansiedad que se ve reflejada en el retrato a menudo perverso y malvado de

robots presentes en obras de la cultura popular. Comparados con sus colegas de

ficción, los robots reales siguen siendo torpes y cortos de entendederas.

10

Page 11: Informe Final de Gusano

La robótica es la ciencia y la tecnología de los robots. Se ocupa del diseño,

manufactura y aplicaciones de los robots.[][] La robótica combina diversas

disciplinas como son: la mecánica, la electrónica, la informática, la inteligencia

artificial y la ingeniería de control[] Otras áreas importantes en robótica son el

álgebra, los autómatas programables y las máquinas de estados.

Historia de la robótica

La historia de la robótica ha estado unida a la construcción de "artefactos", que

trataban de materializar el deseo humano de crear seres a su semejanza y que lo

descargasen del trabajo. El ingeniero español Leonardo Torres Quevedo (GAP)

(que construyó el primer mando a distancia para su torpedo automóvil mediante

telegrafía sin hilo, el ajedrecista automático, el primer transbordador aéreo y otros

muchos ingenios) acuñó el término "automática" en relación con la teoría de la

automatización de tareas tradicionalmente asociadas a los humanos.

Karel Čapek, un escritor checo, acuñó en 1921 el término "Robot" en su obra

dramática "Rossum's Universal Robots / R.U.R.", a partir de la palabra checa

robota, que significa servidumbre o trabajo forzado. El término robótica es acuñado

por Isaac Asimov, definiendo a la ciencia que estudia a los robots. Asimov creó

también las Tres Leyes de la Robótica. En la ciencia ficción el hombre ha

imaginado a los robots visitando nuevos mundos, haciéndose con el poder, o

simplemente aliviando de las labores caseras.

Fecha ImportanciaNombre del

robotInventor

Siglo I a. C. y antes

Descripciones de más de 100 máquinas y autómatas, incluyendo un artefacto con fuego, un órgano de viento, una máquina operada mediante una moneda, una máquina de vapor, en Pneumatica y Automata de Herón de Alexandria

Ctesibius de Alexandria, Filón de Bizancio, Herón de Alexandria, y otros

1206 Primer robot humanoide programable Barco con Al-Jazari

11

Page 12: Informe Final de Gusano

cuatro músicos robotizados

c. 1495 Diseño de un robot humanoideCaballero mecánico

Leonardo da Vinci

1738Pato mecánico capaz de comer, agitar sus alas y excretar.

Digesting Duck Jacques de Vaucanson

1800sJuguetes mecánicos japoneses que sirven té, disparan flechas y pintan.

Juguetes Karakuri

Hisashige Tanaka

1921Aparece el primer autómata de ficción llamado "robot", aparece en R.U.R.

Rossum's Universal Robots

Karel Čapek

1930sSe exhibe un robot humanoide en la World's Fairs entre los años 1939 y 1940

ElektroWestinghouse Electric Corporation

1948Exhibición de un robot con comportamiento biológico simple[4] Elsie y Elmer William Grey Walter

1956Primer robot comercial, de la compañía Unimation fundada por George Devol y Joseph Engelberger, basada en una patente de Devol[5]

Unimate George Devol

1961 Se instala el primer robot industrial Unimate George Devol

1963 Primer robot "palletizing"[6] Palletizer Fuji Yusoki Kogyo

1973 Primer robot con seis ejes electromecánicos Famulus KUKA Robot Group

1975Brazo manipulador programable universal, un producto de Unimation

PUMA Victor Scheinman

12

Page 13: Informe Final de Gusano

RED NEURONAL PERCEPTRON SIMPLE

El perceptrón es un tipo de red neuronal artificial desarrollado por Frank

Rosenblatt, también puede entenderse como perceptrón la neurona artificial y

unidad básica de inferencia en forma de discriminador lineal, que constituye este

modelo de red neuronal artificial, esto debido a que el perceptrón puede usarse

como neurona dentro de un perceptrón más grande u otro tipo de red neuronal

artificial.

Definición

El perceptrón usa una matriz para representar las redes neuronales y es un

discriminador terciario que traza su entrada x (un vector binario) a un único valor

de salida f(x) (un solo valor binario) a través de dicha matriz.

Donde w es un vector de pesos reales y es el producto punto (que computa

una suma ponderada). u es el 'umbral', el cual representa el grado de inhibición de

la neurona, es un término constante que no depende del valor que tome la entrada.

El valor de f(x) (0 o 1) se usa para clasificar x como un positivo o un caso

negativo, en el caso de un problema de la clasificación binario. El umbral puede

pensarse de cómo compensar la función de activación, o dando un nivel bajo de

actividad a la neurona del rendimiento. La suma ponderada de las entradas debe

producir un valor mayor que u para cambiar la neurona de estado 0 a 1.

Aprendizaje

El algoritmo de aprendizaje es el mismo para todas las neuronas, todo lo que sigue

se aplica a una sola neurona en el aislamiento. Nosotros definimos algunas

variables primero:

el x(j) denota el elemento en la posición j en el vector de la entrada

el w(j) el elemento en la posición j en el vector de peso

el y denota la salida de la neurona

el δ denota la salida esperada

el α es una constante tal que 0 < α < 1

13

Page 14: Informe Final de Gusano

Los pesos son actualizados después de cada entrada según la regla de actualización

siguiente:

Por lo cual, el aprendizaje es modelado como la actualización del vector de peso

después de cada iteración, lo cual sólo tendrá lugar si la salida y difiere de la salida

deseada δ. Para considerar una neurona al interactuar en múltiples iteraciones

debemos definir algunas variables más:

xi denota el vector de entrada para la iteración i

wi denota el vector de peso para la iteración i

yi denota la salida para la iteración i

denota un periodo de aprendizaje de m

iteraciones

En cada iteración el vector de peso es actualizado como sigue:

Para cada pareja ordenada (x,y) en

Pasar (xi,yi,wi) a la regla de actualización w(j)' = w(j) + α(δ − y)x(j)

El periodo de aprendizaje Dm se dice que es separable linealmente si existe un

valor positivo γ y un vector de peso w tal que: para

todos los i.

Novikoff (1962) probo que el algoritmo de aprendizaje converge después de un

número finito de iteraciones si los datos son separables linealmente y el número de

errores está limitado a: .

Sin embargo si los datos no son separables linealmente, la línea de algoritmo

anterior no se garantiza que converja.

Ejemplo

Considere las funciones AND y OR, estas funciones son linealmente separables y

por lo tanto pueden ser aprendidas por un perceptrón.

14

Page 15: Informe Final de Gusano

Figura 1. Función AND Figura 2. Función OR

La función XOR no puede ser aprendida por un único perceptrón puesto que

requiere al menos de dos líneas para separar las clases (0 y 1). Debe utilizarse al

menos una capa adicional de perceptrones para permitir su aprendizaje.

Figura 3. Función XOR

Perceptrón multicapa

El perceptrón multicapa es una red neuronal artificial (RNA) formada por

múltiples capas, esto le permite resolver problemas que no son linealmente

separables, lo cual es la principal limitación del perceptrón (también llamado

perceptrón simple). El perceptrón multicapa puede ser totalmente o localmente

conectado. En el primer caso cada salida de una neurona de la capa "i" es entrada

de todas las neuronas de la capa "i+1", mientras que el segundo, cada neurona de

la capa "i" es entrada de una serie de neuronas (región) de la capa "i+1".

15

Page 16: Informe Final de Gusano

Figura 4. Red Neuronal Perceptron Multicapa

Las capas pueden clasificarse en tres tipos:

Capa de entrada: Constituida por aquellas neuronas que introducen los patrones de

entrada en la red. En estas neuronas no se produce procesamiento.

Capas ocultas: Formada por aquellas neuronas cuyas entradas provienen de capas

anteriores y las salidas pasan a neuronas de capas posteriores.

Capa de salida: Neuronas cuyos valores de salida se corresponden con las salidas

de toda la red.

La propagación hacia atrás (también conocido como retropropagación del error o

regla delta generalizada), es un algoritmo utilizado en el entrenamiento de estas

redes, por ello, el perceptrón multicapa también es conocido como red de

retropropagación (no confundir con la red de contrapropagación).

Características

Las funciones de transferencia de los elementos de procesado (neuronas) han de

ser derivables.

Limitaciones

El Perceptrón Multicapa no extrapola bien, es decir, si la red se entrena mal o de

manera insuficiente, las salidas pueden ser imprecisas.

16

Page 17: Informe Final de Gusano

La existencia de mínimos locales en la función de error dificulta

considerablemente el entrenamiento, pues una vez alcanzado un mínimo el

entrenamiento se detiene aunque no se haya alcanzado la tasa de convergencia

fijada.

Cuando caemos en un mínimo local sin satisfacer el porcentaje de error permitido se

puede considerar: cambiar la topología de la red (número de capas y número de

neuronas), comenzar el entrenamiento con unos pesos iniciales diferentes, modificar

los parámetros de aprendizaje, modificar el conjunto de entrenamiento o presentar

los patrones en otro orden.

Aplicaciones

El perceptrón multicapa (de aquí en adelante MLP, MultiLayer Perceptron) se

utiliza para resolver problemas de asociación de patrones, segmentación de

imágenes, compresión de datos, etc.

Compresión de datos

Considerese un MLP de 3 capas, una de entrada, una oculta y la de salida. La capa

de entrada está formada por N neuronas, la capa oculta por M (M < N) neuronas y la

capa de salida posee N neuronas al igual que la capa de entrada. Se entrena dicho

MLP para que cuando se le de como entrada un vector de datos (x1, x2,..., xN)

devuelva ese mismo vector de datos como salida, con ello estamos aprendiendo al

MLP a transformar un vector de N componentes en uno de M componentes

(recordemos que M < N) y a recuperar el vector original a partir del vector

"comprimido".

Una vez que el MLP esté entrenado se procede de la siguiente forma:

Compresión: Para comprimir los datos utilizamos un MLP de dos capas, la

de entrada con N neuronas y la de salida con M, los pesos de estas dos capas

son los de la capa de entrada y oculta respectivamente, del MLP que

entrenamos anteriormente.

17

Page 18: Informe Final de Gusano

Descompresión: Para descomprimir los datos utilizamos un MLP de dos capas,

la de entrada con M neuronas y la de salida con N, los pesos de estas dos capas

son los de la capa oculta y la de salida respectivamente, del MLP que

entrenamos anteriormente.

El MLP no conseguirá (al menos normalmente) un error nulo durante el

entrenamiento, por lo que se trata de un sistema de compresión con pérdidas.

Obviamente cuanto mayor queramos que sea el factor de compresión, más error se

cometerá.

18

Page 19: Informe Final de Gusano

CAPÍTULO 2

MARCO DE REFERENCIA

MICROCONTROLADOR

Un microcontrolador es un circuito integrado o chip que incluye en su interior las

tres unidades funcionales de una computadora: CPU, Memoria y Unidades de E/S.

Características

Son diseñados para disminuir el costo económico y el consumo de energía de un

sistema en particular. Por eso el tamaño de la CPU, la cantidad de memoria y los

periféricos incluidos dependerán de la aplicación. El control de un electrodoméstico

sencillo como una batidora, utilizará un procesador muy pequeño (4 u 8 bit) por que

sustituirá a un autómata finito. En cambio un reproductor de música y/o vídeo

digital (mp3 o mp4) requerirá de un procesador de 32 bit o de 64 bit y de uno o más

Códec de señal digital (audio y/o vídeo). El control de un sistema de frenos ABS

(Antilock Brake System) se basa normalmente en un microcontrolador de 16 bit, al

igual que el sistema de control electrónico del motor en un automóvil.

Figura 5. Esquema de un microcontrolador

19

Page 20: Informe Final de Gusano

Los microcontroladores representan la inmensa mayoría de los chips de

computadoras vendidos, sobre un 50% son controladores "simples" y el restante

corresponde a DSPs más especializados. Mientras se pueden tener uno o dos

microprocesadores de propósito general en casa (Ud. está usando uno para esto),

usted tiene distribuidos seguramente entre los electrodomésticos de su hogar una o

dos docenas de microcontroladores. Pueden encontrarse en casi cualquier

dispositivo electrónico como automóviles, lavadoras, hornos microondas, teléfonos,

etc.

Un microcontrolador difiere de una CPU normal, debido a que es más fácil

convertirla en una computadora en funcionamiento, con un mínimo de chips

externos de apoyo. La idea es que el chip se coloque en el dispositivo, enganchado a

la fuente de energía y de información que necesite, y eso es todo. Un

microprocesador tradicional no le permitirá hacer esto, ya que espera que todas estas

tareas sean manejadas por otros chips. Hay que agregarle los modulos de

entrada/salida (puertos) y la memoria para almacenamiento de información.

Por ejemplo, un microcontrolador típico tendrá un generador de reloj integrado y

una pequeña cantidad de memoria RAM y ROM/EPROM/EEPROM/FLASH,

significando que para hacerlo funcionar, todo lo que se necesita son unos pocos

programas de control y un cristal de sincronización. Los microcontroladores

disponen generalmente también de una gran variedad de dispositivos de

entrada/salida, como convertidores de analógico a digital, temporizadores, UARTs y

buses de interfaz serie especializados, como I2C y CAN. Frecuentemente, estos

dispositivos integrados pueden ser controlados por instrucciones de procesadores

especializados. Los modernos microcontroladores frecuentemente incluyen un

lenguaje de programación integrado, como el BASIC que se utiliza bastante con este

propósito.

Los microcontroladores negocian la velocidad y la flexibilidad para facilitar su uso.

Debido a que se utiliza bastante sitio en el chip para incluir funcionalidad, como los

20

Page 21: Informe Final de Gusano

dispositivos de entrada/salida o la memoria que incluye el microcontrolador, se ha

de prescindir de cualquier otra circuitería.

Núcleo de un microcontrolador

Aún cuando el microcontrolador es una computadora embebida dentro de un

circuito integrado, se compone de un núcleo y un conjunto de circuitos adicionales.

Dentro del núcleo se encuentran el procesador y la memoria, todo ello estructurado

de forma tal que conforme una arquitectura de computadora.

Arquitecturas de computadora

Básicamente existen dos arquitecturas de computadoras, y por supuesto, están

presentes en el mundo de los microcontroladores: Von Neumann y Harvard. Ambas

se diferencian en la forma de conexión de la memoria al procesador y en los buses

que cada una necesita.

La arquitectura Von Neumann es la que se utiliza en las computadoras personales,

para ella existe una sola memoria, donde coexisten las instrucciones de programa y

los datos, accedidos con un bus de dirección, uno de datos y uno de control.

Debemos comprender que en una PC, cuando se carga un programa en memoria, a

éste se le asigna un espacio de direcciones de la memoria que se divide en

segmentos, de los cuales típicamente tenderemos los siguientes: código (programa),

datos y pila. Es por ello que podemos hablar de la memoria como un todo, aunque

existan distintos dispositivos físicos en el sistema (HDD, RAM, CD, FLASH).

En el caso de los microcontroladores, existen dos tipos de memoria bien definidas:

memoria de datos (típicamente algún tipo de SRAM) y memoria de programas

(ROM, PROM, EEPROM, FLASH u de otro tipo no volátil). En este caso la

organización es distinta a las de las PC, porque hay circuitos distintos para cada

memoria y normalmente no se utilizan los registros de segmentos, sino que la

memoria está segregada y el acceso a cada tipo de memoria depende de las

instrucciones del procesador.

21

Page 22: Informe Final de Gusano

A pesar de que en los sistemas embebidos con arquitectura Von Neumann la

memoria esté segregada, y existan diferencias con respecto a la definición

tradicional de esta arquitectura; los buses para acceder a ambos tipos de memoria

son los mismos, del procesador solamente salen el bus de datos, el de direcciones, y

el de control. Como conclusión, la arquitectura no ha sido alterada, porque la forma

en que se conecta la memoria al procesador sigue el mismo principio definido en la

arquitectura básica.

Esta arquitectura es la variante adecuada para las PC, porque permite ahorrar una

buena cantidad de líneas de E/S, que son bastante costosas, sobre todo para aquellos

sistemas como las PC, donde el procesador se monta en algún tipo de socket alojado

en una placa madre (motherboard). También esta organización les ahorra a los

diseñadores de motherboards una buena cantidad de problemas y reduce el costo de

este tipo de sistemas.

Algunas familias de microcontroladores como la INTEL-51 y la Z80 implementan

este tipo de arquitectura, fundamentalmente porque era la utilizada cuando

aparecieron los primeros microcontroladores.

La otra variante es la arquitectura Harvard, y por excelencia la utilizada en

supercomputadoras, en los microcontroladores, y sistemas embebidos en general.

En este caso, además de la memoria, el procesador tiene los buses segregados, de

modo que cada tipo de memoria tiene un bus de datos, uno de direcciones y uno de

control.

La ventaja fundamental de esta arquitectura es que permite adecuar el tamaño de los

buses a las características de cada tipo de memoria; además, el procesador puede

acceder a cada una de ellas de forma simultánea, lo que se traduce en un aumento

significativo de la velocidad de procesamiento, típicamente los sistemas con esta

arquitectura pueden ser dos veces más rápidos que sistemas similares con

arquitectura Von Neumann.

22

Page 23: Informe Final de Gusano

La desventaja está en que consume muchas líneas de E/S del procesador; por lo que

en sistemas donde el procesador está ubicado en su propio encapsulado, solo se

utiliza en supercomputadoras. Sin embargo, en los microcontroladores y otros

sistemas embebidos, donde usualmente la memoria de datos y programas comparten

el mismo encapsulado que el procesador, este inconveniente deja de ser un

problema serio y es por ello que encontramos la arquitectura Harvard en la mayoría

de los microcontroladores.

Procesador en detalle

Hace algún tiempo alguien me preguntaba cuales eran los dos inventos y los dos

descubrimientos más relevantes en el desarrollo de la humanidad y después de un

poco de reflexión llegamos a la siguiente conclusión; descubrimientos: el fuego, y la

electricidad; inventos: la rueda y el microprocesador. Claro que los más excelsos

eruditos pueden estar en desacuerdo con nosotros, pero no debemos estar lejos de la

verdad.

En los años 70 del siglo XX, la electrónica digital todavía andaba medio que en

pañales, pero dentro de la electrónica ya era una especialidad consagrada. En aquel

entonces las computadoras se diseñaban para que realizaran algunas operaciones

muy simples, y si se quería que estas máquinas pudiesen hacer cosas diferentes, era

necesario realizar cambios bastante significativos al hardware.

A principios de los años 70, una empresa japonesa le encargó a una joven compañía

norteamericana que desarrollara un conjunto de circuitos para producir una

calculadora de bajo costo. INTEL se dedicó de lleno a la tarea y entre los circuitos

encargados desarrolló uno muy especial, algo no creado hasta la fecha: el primer

microprocesador integrado.

El 4004 salió al mercado en 1971, es una máquina digital sincrónica compleja,

como cualquier otro circuito lógico secuencial sincrónico. Sin embargo, la ventaja

de este componente está en que aloja internamente un conjunto de circuitos digitales

que pueden hacer operaciones corrientes para el cálculo y procesamiento de datos,

23

Page 24: Informe Final de Gusano

pero desde una óptica diferente: sus entradas son una serie de códigos bien

definidos, que permiten hacer operaciones de carácter específico cuyo resultado está

determinado por el tipo de operación y los operandos involucrados.

Visto así, no hay nada de especial en un microprocesador; la maravilla está en que

la combinación adecuada de los códigos de entrada, su ejecución secuencial, el

poder saltar hacia atrás o adelante en la secuencia de códigos en base a decisiones

lógicas u órdenes específicas, permite que la máquina realice un montón de

operaciones complejas, no contempladas en los simples códigos básicos.

Hoy estamos acostumbrados a los sistemas con microprocesadores, pero en el

“lejano” 1971 esta era una forma de pensar un poco diferente y hasta escandalosa, a

tal punto que Busicom, la empresa que encargó los chips a INTEL, no se mostró

interesada en el invento, así que INTEL puso manos a la obra y lo comercializó para

otros que mostraron interés; y bueno, el resto de la historia: una revolución sin

precedentes en el avance tecnológico de la humanidad.

Es lógico pensar que el invento del microprocesador integrado no fue una

revelación divina para sus creadores, sino que se sustentó en los avances, existentes

hasta el momento, en el campo de la electrónica digital y las teorías sobre

computación. Pero sin lugar a dudas fue la gota que colmó la copa de la revolución

científico-técnica, porque permitió desarrollar aplicaciones impensadas o acelerar

algunas ya encaminadas. La conclusión es simple, el mundo era uno antes del

microprocesador y otro después de su invención, piense en un mundo sin

microprocesadores y se encontrará remontado a los años 70 del siglo XX.

Ahora comenzaremos a ver cómo es que está hecho un procesador, no será una

explicación demasiado detallada porque desde su invención éste ha tenido

importantes revoluciones propias, pero hay aspectos básicos que no han cambiado y

que constituyen la base de cualquier microprocesador. En la Figura 4 podemos ver

la estructura típica de un microprocesador, con sus componentes fundamentales,

claro está que ningún procesador real se ajusta exactamente a esta estructura, pero

24

Page 25: Informe Final de Gusano

aún así nos permite conocer cada uno de sus elementos básicos y sus

interrelaciones.

Registros

Son un espacio de memoria muy reducido pero necesario para cualquier

microprocesador, de aquí se toman los datos para varias operaciones que debe

realizar el resto de los circuitos del procesador. Los registros sirven para almacenar

los resultados de la ejecución de instrucciones, cargar datos desde la memoria

externa o almacenarlos en ella.

Aunque la importancia de los registros parezca trivial, no lo es en absoluto. De

hecho una parte de los registros, la destinada a los datos, es la que determina uno de

los parámetros más importantes de cualquier microprocesador. Cuando escuchamos

que un procesador es de 4, 8, 16, 32 ó 64 bits, nos estamos refiriendo a procesadores

que realizan sus operaciones con registros de datos de ese tamaño, y por supuesto,

esto determina muchas de las potencialidades de estas máquinas.

Mientras mayor sea el número de bits de los registros de datos del procesador,

mayores serán sus prestaciones, en cuanto a poder de cómputo y velocidad de

ejecución, ya que este parámetro determina la potencia que se puede incorporar al

resto de los componentes del sistema, por ejemplo, no tiene sentido tener una ALU

de 16 bits en un procesador de 8 bits.

Por otro lado un procesador de 16 bits, puede que haga una suma de 16 bits en un

solo ciclo de máquina, mientras que uno de 8 bits deberá ejecutar varias

instrucciones antes de tener el resultado, aún cuando ambos procesadores tengan la

misma velocidad de ejecución para sus instrucciones. El procesador de 16 bits será

más rápido porque puede hacer el mismo tipo de tareas que uno de 8 bits, en menos

tiempo.

25

Page 26: Informe Final de Gusano

Unidad de control

Esta unidad es de las menos importantes en el procesador, en ella recae la lógica

necesaria para la decodificación y ejecución de las instrucciones, el control de los

registros, la ALU, los buses y cuanta cosa más se quiera meter dentro del

procesador.

La unidad de control es uno de los elementos fundamentales que determinan las

prestaciones del procesador, ya que su tipo y estructura, determina parámetros tales

como el tipo de conjunto de instrucciones, velocidad de ejecución, tiempo del ciclo

de máquina, tipo de buses que puede tener el sistema, manejo de interrupciones y un

buen número de cosas más que en cualquier procesador van a parar a este bloque.

Por supuesto, las unidades de control, son el elemento más complejo de un

procesador y normalmente están divididas en unidades más pequeñas trabajando de

conjunto. La unidad de control agrupa componentes tales como la unidad de

decodificación, unidad de ejecución, controladores de memoria cache, controladores

de buses, controladores de interrupción, pipelines, entre otros elementos,

dependiendo siempre del tipo de procesador.

Unidad aritmética y lógica

Como los procesadores son circuitos que hacen básicamente operaciones lógicas y

matemáticas, se le dedica a este proceso una unidad completa, con cierta

independencia. Aquí es donde se realizan las sumas, restas, y operaciones lógicas

típicas del álgebra de Boole.

Actualmente este tipo de unidades ha evolucionado mucho y los procesadores más

modernos tienen varias ALU, especializadas en la realización de operaciones

complejas como las operaciones en coma flotante. De hecho en muchos casos le han

cambiado su nombre por el de “coprocesador matemático”, aunque este es un

término que surgió para dar nombre a un tipo especial de procesador que se conecta

directamente al procesador más tradicional.

26

Page 27: Informe Final de Gusano

Su impacto en las prestaciones del procesador es también importante porque,

dependiendo de su potencia, tareas más o menos complejas, pueden hacerse en

tiempos muy cortos, como por ejemplo, los cálculos en coma flotante.

Buses

Son el medio de comunicación que utilizan los diferentes componentes del

procesador para intercambiar información entre sí, eventualmente los buses o una

parte de ellos estarán reflejados en los pines del encapsulado del procesador.

En el caso de los microcontroladores, no es común que los buses estén reflejados en

el encapsulado del circuito, ya que estos se destinan básicamente a las E/S de

propósito general y periféricos del sistema.

Existen tres tipos de buses:

Dirección: Se utiliza para seleccionar al dispositivo con el cual se quiere

trabajar o en el caso de las memorias, seleccionar el dato que se desea leer o

escribir.

Datos

Control: Se utiliza para gestionar los distintos procesos de escritura lectura y

controlar la operación de los dispositivos del sistema.

Conjunto de instrucciones

Aunque no aparezca en el esquema, no podíamos dejar al conjunto o repertorio de

instrucciones fuera de esta fiesta, porque este elemento determina lo que puede

hacer el procesador.

Define las operaciones básicas que puede realizar el procesador, que conjugadas y

organizadas forman lo que conocemos como software. El conjunto de instrucciones

vienen siendo como las letras del alfabeto, el elemento básico del lenguaje, que

organizadas adecuadamente permiten escribir palabras, oraciones y cuanto

programa se le ocurra.

27

Page 28: Informe Final de Gusano

Existen dos tipos básicos de repertorios de instrucciones, que determinan la

arquitectura del procesador: CISC y RISC.

CISC, del inglés Complex Instruction Set Computer, Computadora de Conjunto de

Instrucciones Complejo. Los microprocesadores CISC tienen un conjunto de

instrucciones que se caracteriza por ser muy amplio y que permiten realizar

operaciones complejas entre operandos situados en la memoria o en los registros

internos. Este tipo de repertorio dificulta el paralelismo entre instrucciones, por lo

que en la actualidad, la mayoría de los sistemas CISC de alto rendimiento,

convierten las instrucciones complejas en varias instrucciones simples del tipo

RISC, llamadas generalmente microinstrucciones.

Dentro de los microcontroladores CISC podemos encontrar a la popular familia

INTEL -51 y la Z80, aunque actualmente existen versiones CISC-RISC de estos

microcontroladores, que pretenden aprovechar las ventajas de los procesadores

RISC a la vez que se mantiene la compatibilidad hacia atrás con las instrucciones de

tipo CISC.

RISC, del inglés Reduced Instruction Set Computer, Computadora con Conjunto de

Instrucciones Reducido. Se centra en la obtención de procesadores con las

siguientes características fundamentales:

Instrucciones de tamaño fijo

Pocas instrucciones

Sólo las instrucciones de carga y almacenamiento acceden a la memoria de

datos

Número relativamente elevado de registros de propósito general

Una de las características más destacables de este tipo de procesadores es que

posibilitan el paralelismo en la ejecución, y reducen los accesos a memoria. Es por

eso que los procesadores más modernos, tradicionalmente basados en arquitecturas

CISC implementan mecanismos de traducción de instrucciones CISC a RISC, para

aprovechar las ventajas de este tipo de procesadores.

28

Page 29: Informe Final de Gusano

Los procesadores de los microcontroladores PIC, que trataremos en este libro, son

de tipo RISC y veremos su arquitectura y repertorio de instrucciones en detalle.

Memoria

Anteriormente habíamos visto que la memoria en los microcontroladores debe estar

ubicada dentro del mismo encapsulado, esto es así la mayoría de las veces, porque

la idea fundamental es mantener el grueso de los circuitos del sistema dentro de un

solo integrado.

En los microcontroladores la memoria no es abundante, aquí no encontrará

Gigabytes de memoria como en las computadoras personales. Típicamente la

memoria de programas no excederá de 16 K-localizaciones de memoria no volátil

para instrucciones y la memoria RAM ni siquiera llegará a exceder los 5 Kilobytes.

La memoria RAM está destinada al almacenamiento de información temporal que

será utilizada por el procesador para realizar cálculos u otro tipo de operaciones

lógicas. En el espacio de direcciones de memoria RAM se ubican además los

registros de trabajo del procesador y los de configuración y trabajo de los distintos

periféricos del microcontrolador. Es por ello que en la mayoría de los casos, aunque

se tenga un espacio de direcciones de un tamaño determinado, la cantidad de

memoria RAM de que dispone el programador para almacenar sus datos es menor

que la que puede direccionar el procesador.

El tipo de memoria utilizada en las memorias RAM de los microcontroladores es

SRAM, lo que evita tener que implementar sistemas de refrescamiento como en el

caso de las computadoras personales, que utilizan gran cantidad de memoria,

típicamente alguna tecnología DRAM. A pesar de que la memoria SRAM es más

costosa que la DRAM, es el tipo adecuado para los microcontroladores porque éstos

poseen pequeñas cantidades de memoria RAM.

En el caso de la memoria de programas se utilizan diferentes tecnologías, y el uso

de una u otra depende de las características de la aplicación a desarrollar, a

29

Page 30: Informe Final de Gusano

continuación se describen las cinco tecnologías existentes, que mayor utilización

tienen o han tenido, hasta el momento de escribir este libro:

ROM de máscara. En este caso no se “graba” el programa en memoria sino

que el microcontrolador se fabrica con el programa, es un proceso similar al

de producción de los CD comerciales mediante masterización.

El costo inicial de producir un circuito de este tipo es alto, porque el diseño y

producción de la máscara es un proceso costoso, sin embargo, cuando se necesitan

varios miles o incluso cientos de miles de microcontroladores para una aplicación

determinada, como por ejemplo, algún electrodoméstico, el costo inicial de

producción de la máscara y el de fabricación del circuito se distribuye entre todos

los circuitos de la serie y, el costo final de ésta, es bastante menor que el de sus

semejantes con otro tipo de memoria.

TP One Time Programmable. Este tipo de memoria, también es conocida

como PROM o simplemente ROM.

Los microcontroladores con memoria OTP se pueden programar una sola vez, con

algún tipo de programador. Se utilizan en sistemas donde el programa no requiera

futuras actualizaciones y para series relativamente pequeñas, donde la variante de

máscara sea muy costosa, también para sistemas que requieren serialización de

datos, almacenados como constantes en la memoria de programas.

EPROM Erasable Programmable Read Only Memory. Los

microcontroladores con este tipo de memoria son muy fáciles de identificar

porque su encapsulado es de cerámica y llevan encima una ventanita de

vidrio desde la cual puede verse la oblea de silicio del microcontrolador.

Se fabrican así porque la memoria EPROM es reprogramable, pero antes debe

borrase, y para ello hay que exponerla a una fuente de luz ultravioleta, el proceso de

grabación es similar al empleado para las memorias OTP. Al aparecer tecnologías

menos costosas y más flexibles, como las memorias EEPROM y FLASH, este tipo

30

Page 31: Informe Final de Gusano

de memoria han caído en desuso, se utilizaban en sistemas que requieren

actualizaciones del programa y para los procesos de desarrollo y puesta a punto.

EEPROM Electrical Erasable Programmable Read Only Memory. Fueron el

sustituto natural de las memorias EPROM, la diferencia fundamental es que

pueden ser borradas eléctricamente, por lo que la ventanilla de cristal de

cuarzo y los encapsulados cerámicos no son necesarios.

Al disminuir los costos de los encapsulados, los microcontroladores con este tipo de

memoria se hicieron más baratos y cómodos para trabajar que sus equivalentes con

memoria EPROM. Otra característica destacable de este tipo de microcontrolador es

que fue en ellos donde comenzaron a utilizarse los sistemas de programación en

circuito o ICSP (In Circuit Serial Progamming) que evitan tener que sacar el

microcontrolador de la tarjeta que lo aloja para hacer actualizaciones al programa.

FLASH. En el campo de las memorias reprogramables para

microcontroladores, son el último avance tecnológico en uso a gran escala, y

han sustituido a los microcontroladores con memoria EEPROM.

A las ventajas de las memorias FLASH se le adicionan su gran densidad respecto a

sus predecesoras lo que permite incrementar la cantidad de memoria de programas a

un costo muy bajo. Pueden además ser programadas con las mismas tensiones de

alimentación del microcontrolador, el acceso en lectura y la velocidad de

programación es superior, disminución de los costos de producción, entre otras. Lo

más habitual es encontrar que la memoria de programas y datos está ubicada toda

dentro del microcontrolador, de hecho, actualmente son pocos los

microcontroladores que permiten conectar memoria de programas en el exterior del

encapsulado. Las razones para estas “limitaciones” están dadas porque el objetivo

fundamental es obtener la mayor integración posible y conectar memorias externas

consume líneas de E/S que son uno de los recursos más preciados de los

microcontroladores. A pesar de lo anterior existen familias como la INTEL 51

cuyos microcontroladores tienen la capacidad de ser expandidos en una variada

gama de configuraciones para el uso de memoria de programas externa. En el caso

31

Page 32: Informe Final de Gusano

de los PIC, estas posibilidades están limitadas sólo a algunos microcontroladores de

la gama alta, la Figura 5 muestra algunas de las configuraciones para memoria de

programa que podemos encontrar en los microcontroladores. La configuración (a) es

la típica y podemos encontrarla casi en el 100% de los microcontroladores. La

configuración (b) es poco frecuente y generalmente se logra configurando al

microcontrolador para sacrificar la memoria de programas interna, sin embargo el

8031 de INTEL es un microcontrolador sin memoria de programas interna. La

configuración (c) es la que se encuentra habitualmente en los microcontroladores

que tienen posibilidades de expandir su memoria de programas como algunos PIC

de gama alta.

Cuando se requiere aumentar la cantidad de memoria de datos, lo más frecuente es

colocar dispositivos de memoria externa en forma de periféricos, de esta forma se

pueden utilizar memorias RAM, FLASH o incluso discos duros como los de las PC,

mientras que para los cálculos y demás operaciones que requieran almacenamiento

temporal de datos se utiliza la memoria RAM interna del microcontrolador. Esta

forma de expandir la memoria de datos está determinada, en la mayoría de lo casos,

por el tipo de repertorio de instrucciones del procesador y porque permite un

elevado número de configuraciones distintas, además del consiguiente ahorro de

líneas de E/S que se logra con el uso de memorias con buses de comunicación serie.

Interrupciones

Imagine que está esperando la visita de un amigo, al que llamaremos Juan. Usted y

Juan han acordado que cuando él llegue a su casa esperará pacientemente a que le

abra la puerta. Juan no debe tocar a la puerta porque alguien en la casa duerme y

no quiere que le despierten.

Ahora usted ha decidido leer un libro mientras espera a que Juan llegue a la casa, y

para comprobar si ha llegado, cada cierto tiempo detiene la lectura, marca la

página donde se quedó, se levanta y va hasta la puerta, abre y comprueba si Juan

32

Page 33: Informe Final de Gusano

ha llegado, si éste todavía no está en la puerta, esperará unos minutos, cerrará la

puerta y regresará a su lectura durante algún tiempo.

Como verá este es un método poco eficiente para esperar a Juan porque requiere que

deje la lectura cada cierto tiempo y vaya hasta la puerta a comprobar si él ha

llegado, además debe esperar un rato si todavía no llega. Y por si fuera poco,

imagine que Juan no llega nunca porque se le presentó un problema, tuvo que

cancelar la cita y no pudo avisarle a tiempo, o peor, que Juan ha llegado a la puerta

un instante después que usted la cerraba. Juan, respetando lo acordado, espera un

tiempo, pero se cansa de esperar a que le abran y decide marcharse porque cree que

ya usted no está en la casa o no puede atenderlo. A este método de atender la

llegada de Juan lo llamaremos encuesta.

Veamos ahora otro método. En esta ocasión simplemente se recuesta en el sofá de la

sala y comienza a leer su libro, cuando Juan llegue debe tocar el timbre de la puerta

y esperar unos momentos a que le atiendan. Cuando usted oye sonar el timbre,

interrumpe la lectura, marca la página donde se quedó y va hasta la puerta para

atender a la persona que toca el timbre. Una vez que Juan o la persona que ha

tocado el timbre, se marcha, usted regresa a su asiento y retoma la lectura justo

donde la dejó. Este último es un método más eficiente que el anterior porque le deja

más tiempo para leer y elimina algunos inconvenientes como el de que Juan nunca

llegue o se marche antes de que usted abra la puerta. Es, en principio, un método

simple pero muy eficaz y eficiente, lo llamaremos atención por interrupción.

El primero de ellos, la encuesta, es un método eficaz, pero poco eficiente porque

requiere realizar lecturas constantes y muchas veces innecesarias del estado del

proceso que queremos atender. Sin embargo, es muy utilizado en la programación

de microcontroladores porque resulta fácil de aprender, la implementación de

código con este método es menos compleja y no requiere de hardware especial para

llevarla adelante. Por otra parte, la encuesta, tiene muchas deficiencias que con

frecuencia obligan al diseñador a moverse hacia otros horizontes

33

Page 34: Informe Final de Gusano

El mundo está lleno de situaciones; de las cuales no podemos determinar ni cuando,

ni cómo ni por qué se producen, en la mayoría de los casos lo único que podemos

hacer es enterarnos de que determinada situación, asociada a un proceso, ha

ocurrido. Para ello seleccionamos alguna condición o grupo de condiciones que nos

indican que el proceso que nos interesa debe ser atendido, a este fenómeno, en el

cual se dan las condiciones que nos interesa conocer, lo llamaremos evento. En el

segundo ejemplo vemos que para atender a Juan, éste debe tocar el timbre, por

tanto, la llegada de Juan es el proceso que debemos atender y el sonido del timbre es

el evento que nos indica que Juan ha llegado.

El método de atención a procesos por interrupción, visto desde la óptica del ejemplo

que utilicé para mostrarlo, es más simple que el de la encuesta, pero no es cierto, el

método se complica porque requiere que el microprocesador incorpore circuitos

adicionales para registrar los eventos que le indican que debe atender al proceso

asociado y comprender estos circuitos y su dinámica no es una tarea sencilla.

Los circuitos para la atención a las interrupciones y todas las tareas que debe

realizar el procesador para atender al proceso que lo interrumpe son bastante

complejos y requieren una visión diferente de la que estamos acostumbrados a tener

de nuestro mundo.

Los seres humanos no estamos conscientes de las interrupciones, en nuestro

organismo existen mecanismos que nos interrumpen constantemente, para ello

tenemos a nuestro sistema sensorial, pero no somos conscientes del proceso de

interrupción, aunque sí de la atención a las interrupciones. Eso es porque

incorporamos mecanismos que nos sacan rápidamente de la tarea que estemos

haciendo para atender una situación que no puede o no debe esperar mucho tiempo.

Bien, esa misma es la idea que se incorpora en los microprocesadores para atender

procesos que no pueden esperar o que no sabemos cuándo deben ser atendidos

porque ello depende de determinadas condiciones.

La cosa se complica en la secuencia de acciones a realizar desde el momento en que

se desencadena el proceso de interrupción, hasta que se ejecuta el programa que lo

34

Page 35: Informe Final de Gusano

atiende, y en la secuencia de acciones posteriores a la atención. Piense en cuantas

cosas debe hacer su organismo ante una interrupción, utilicemos el segundo ejemplo

para atender la llegada de Juan. Piense en cuantas cosas su cerebro hace a espaldas

de su conciencia, desde el momento en que suena el timbre hasta que usted se

encuentra listo (consciente de que es probable que Juan ha llegado) para abrir la

puerta, y todo lo que su cerebro debe trabajar para retomar la lectura después que

Juan se ha marchado. Todo eso, excepto abrir la puerta y atender a Juan, lo hacemos

de forma “inconsciente” porque para ello tenemos sistemas dedicados en nuestro

organismo, pero en el mundo de los microcontroladores debemos conocer todos

esos detalles para poder utilizar los mecanismos de interrupción.

Los procesos de atención a interrupciones tienen la ventaja de que se implementan

por hardware ubicado en el procesador, así que es un método rápido de hacer que el

procesador se dedique a ejecutar un programa especial para atender eventos que no

pueden esperar por mecanismos lentos como el de encuesta.

En términos generales, un proceso de interrupción y su atención por parte del

procesador, tiene la siguiente secuencia de acciones.

1. En el mundo real se produce el evento para el cual queremos que el

procesador ejecute un programa especial, este proceso tiene la característica

de que no puede esperar mucho tiempo antes de ser atendido o no sabemos

en que momento debe ser atendido.

2. El circuito encargado de detectar la ocurrencia del evento se activa, y como

consecuencia, activa la entrada de interrupción del procesador.

3. La unidad de control detecta que se ha producido una interrupción y

“levanta” una bandera para registrar esta situación; de esta forma si las

condiciones que provocaron el evento desaparecen y el circuito encargado

de detectarlo desactiva la entrada de interrupción del procesador, ésta se

producirá de cualquier modo, porque ha sido registrada.

35

Page 36: Informe Final de Gusano

4. La unidad de ejecución termina con la instrucción en curso y justo antes de

comenzar a ejecutar la siguiente comprueba que se ha registrado una

interrupción

5. Se desencadena un proceso que permite guardar el estado actual del

programa en ejecución y saltar a una dirección especial de memoria de

programas, donde está la primera instrucción de la subrutina de atención a

interrupción.

6. Se ejecuta el código de atención a interrupción, esta es la parte “consciente”

de todo el proceso porque es donde se realizan las acciones propias de la

atención a la interrupción y el programador juega su papel.

7. Cuando en la subrutina de atención a interrupción se ejecuta la instrucción

de retorno, se desencadena el proceso de restauración del procesador al

estado en que estaba antes de la atención a la interrupción.

Como podemos observar, el mecanismo de interrupción es bastante complicado, sin

embargo tiene dos ventajas que obligan a su implementación: la velocidad y su

capacidad de ser asincrónico. Ambas de conjunto permiten que aprovechemos al

máximo las capacidades de trabajo de nuestro procesador.

Los mecanismos de interrupción no solo se utilizan para atender eventos ligados a

procesos que requieren atención inmediata sino que se utilizan además para atender

eventos de procesos asincrónicos.

Las interrupciones son tan eficaces que permiten que el procesador actúe como si

estuviese haciendo varias cosas a la vez cuando en realidad se dedica a la misma

rutina de siempre, ejecutar instrucciones una detrás de la otra.

Periféricos

Cuando vimos la organización básica de un microcontrolador, señalamos que dentro

de este se ubican un conjunto de periféricos, cuyas salidas están reflejadas en los

36

Page 37: Informe Final de Gusano

pines del microcontrolador. A continuación describiremos algunos de los periféricos

que con mayor frecuencia encontraremos en los microcontroladores.

Entradas salidas de propósito general

También conocidos como puertos de E/S, generalmente agrupadas en puertos de 8

bits de longitud, permiten leer datos del exterior o escribir en ellos desde el interior

del microcontrolador, el destino habitual es el trabajo con dispositivos simples como

relés, LED, o cualquier otra cosa que se le ocurra al programador.

Algunos puertos de E/S tienen características especiales que le permiten manejar

salidas con determinados requerimientos de corriente, o incorporan mecanismos

especiales de interrupción para el procesador.

Típicamente cualquier pin de E/S puede ser considerada E/S de propósito general,

pero como los microcontroladores no pueden tener infinitos pines, ni siquiera todos

los pines que queramos, las E/S de propósito general comparten los pines con otros

periféricos. Para usar un pin con cualquiera de las características a él asignadas

debemos configurarlo mediante los registros destinados a ello.

Temporizadores y contadores

Son circuitos sincrónicos para el conteo de los pulsos que llegan a su entrada de

reloj. Si la fuente de conteo es el oscilador interno del microcontrolador es común

que no tengan un pin asociado, y en este caso trabajan como temporizadores. Por

otra parte, cuando la fuente de conteo es externa, entonces tienen asociado un pin

configurado como entrada, este es el modo contador.

Los temporizadores son uno de los periféricos más habituales en los

microcontroladores y se utilizan para muchas tareas, como por ejemplo, la medición

de frecuencia, implementación de relojes, para el trabajo de conjunto con otros

periféricos que requieren una base estable de tiempo entre otras funcionalidades. Es

frecuente que un microcontrolador típico incorpore más de un

temporizador/contador e incluso algunos tienen arreglos de contadores. Como

37

Page 38: Informe Final de Gusano

veremos más adelante este periférico es un elemento casi imprescindible y es

habitual que tengan asociada alguna interrupción. Los tamaños típicos de los

registros de conteo son 8 y 16 bits, pudiendo encontrar dispositivos que solo tienen

temporizadores de un tamaño o con más frecuencia con ambos tipos de registro de

conteo.

Conversor A/D

Como es muy frecuente el trabajo con señales analógicas, éstas deben ser

convertidas a digital y por ello muchos microcontroladores incorporan un conversor

A/D, el cual se utiliza para tomar datos de varias entradas diferentes que se

seleccionan mediante un multiplexor.

Las resoluciones más frecuentes son 8 y 10bits, aunque hay microcontroladores con

conversores de 11 y 12 bits, para resoluciones mayores es preciso utilizar

conversores A/D externos. Los conversores A/D son uno de los periféricos más

codiciados en el mundo de los microcontroladores y es por ello que muchísimos PIC

los incorporan, siendo esta una de las características más destacables de los

dispositivos que fabrica Microchip.

Puerto serie

Este periférico está presente en casi cualquier microcontrolador, normalmente en

forma de UART (Universal Asynchronous Receiver Transmitter) o USART

(Universal Synchronous Asynchronous Receiver Transmitter) dependiendo de si

permiten o no el modo sincrónico de comunicación.

El destino común de este periférico es la comunicación con otro microcontrolador o

con una PC y en la mayoría de los casos hay que agregar circuitos externos para

completar la interfaz de comunicación. La forma más común de completar el puerto

serie es para comunicarlo con una PC mediante la interfaz EIA-232 (más conocida

como RS-232), es por ello que muchas personas se refieren a la UART o USART

como puerto serie RS-232, pero esto constituye un error, puesto que este periférico

38

Page 39: Informe Final de Gusano

se puede utilizar para interconectar dispositivos mediante otros estándares de

comunicación.

Puerto serie sincrónico

Este tipo de periférico se utiliza para comunicar al microcontrolador con otros

microcontroladores o con periféricos externos conectados a él, mediante las

interfaces SPI (Serial Peripheral Interface) o I2C (Inter-Integrated Circuit).

A pesar de que es también un tipo de puerto serie, es costumbre tratarlo de forma

diferenciada respecto a la UART/USART porque las interfaces SPI e I2C

aparecieron mucho después que la UART/USART, su carácter es únicamente

sincrónico y no están diseñadas para interconectar al sistema con otros dispositivos

independientes como una PC, sino para conectar al microcontrolador dispositivos

tales como memorias, pantallas LCD, conversores A/D o D/A.

Otros puertos de comunicación

En un mundo cada vez más orientado a la interconexión de dispositivos, han

aparecido muchas interfaces de comunicación y los microcontroladores no se han

quedado atrás para incorporarlas, es por ello que podemos encontrar algunos

modelos con puertos USB (Universal Serial Bus), CAN (Controller Area Network),

Ethernet, puerto paralelo entre otros.

Comparadores

Son circuitos analógicos basados en amplificadores operacionales que tienen la

característica de comparar dos señales analógicas y dar como salida los niveles

lógicos ‘0’ o ‘1’ en dependencia del resultado de la comparación. Es un periférico

muy útil para detectar cambios en señales de entrada de las que solamente nos

interesa conocer cuando está en un rango determinado de valores.

39

Page 40: Informe Final de Gusano

Modulador de ancho de pulsos

Los PWM (Pulse Width Modulator) son periféricos muy útiles sobre todo para el

control de motores, sin embargo hay un grupo de aplicaciones que pueden realizarse

con este periférico, dentro de las cuales podemos citar: la conversión digital

analógica D/A, el control regulado de luz (dimming) entre otras.

Memoria de datos no volátil

Muchos microcontroladores han incorporado este tipo de memoria como un

periférico más, para el almacenamiento de datos de configuración o de los procesos

que se controlan. Esta memoria es independiente de la memoria de datos tipo RAM

o la memoria de programas, en la que se almacena el código del programa a ejecutar

por el procesador del microcontrolador.

Muchos de los microcontroladores PIC, incluyen este tipo de memoria, típicamente

en forma de memoria EEPROM, incluso algunos de ellos permiten utilizar parte de

la memoria de programas como memoria de datos no volátil, por lo que el

procesador tiene la capacidad de escribir en la memoria de programas como si ésta

fuese un periférico más.

Familias de microcontroladores

Los microcontroladores más comunes en uso son:

Empresa 8 bits

12

bit

s

14

bit

s

16 bits 32 bits

64

bit

s

Observaciones

Atmel

AVR

ATmega8,89Sxxxx

familia similar

8051

ATmega16

40

Page 41: Informe Final de Gusano

Freescale

(antes

Motorola)

68HC05, 68HC08,

68HC11, HCS08x x

68HC12,

68HCS12,

68HCSX12,

68HC16

683xx, PowerPC

Architecture,ColdFirex x

Hitachi, Ltd H8 x x x x x x

Holtek HT8

Intel

MCS-48 (familia

8048)

MCS51 (familia

8051)

8xC251

x xMCS96,

MXS296x x x

National

SemiconductorCOP8 x x x x x x

Microchip

Familia 10f2xx

Familia 12Cxx

Familia 12Fxx,

16Cxx y 16Fxx

18Cxx y 18Fxx

dsPIC30FX

X y

dsPIC33F de

16 bits

PIC32 x x

NEC 78K

Parallax

ST ST 62,ST 7

41

Page 42: Informe Final de Gusano

Texas

InstrumentsTMS370, MSP430

Zilog Z8, Z86E02

Silabs C8051

Observación: Algunas arquitecturas de microcontrolador están disponibles por tal

cantidad de vendedores y en tantas variedades, que podrían tener, con total

corrección, su propia categoría. Entre ellos encontramos, principalmente, las

variantes de 8051 y Z80.

42

Page 43: Informe Final de Gusano

Sensores PIC Potencia Motores

Batería

CAPÍTULO 3

PLANTEAMIENTO OPERACIONAL

Diagrama de bloques

Como se observa en la Figura 6, el diagrama de bloques del robot, ayudara a entender como

fue desarrollado y de qué forma.

Figura 6. Diagrama de bloques

Como se observa en la Figura 6, el PIC es la parte más importante ya que en él se cargara el

programa que hará posible que nuestro robot funcione.

Otra etapa importante es la de los sensores, esta etapa tiene la tarea de recoger los datos del

mundo y entregárselos al PIC para que este los procese y decida qué acción tomar.

El PIC manda el resultado a la etapa de potencia, esta etapa es la que se encarga de

controlar los motores que accionan el mecanismo del robot.

- Sensores.

Los sensores recogen información del mundo para mandarla el PIC, en este caso solo

envían un 1 o 0 dependiendo si encontraron un objeto en frente o no.

Se ha diseñado un total de 3 sensores, que funcionan con un diodo infrarrojo como

emisor y un fototransistor de receptor.

El funcionamiento del circuito se basa en emitir una ráfaga de señales luminosas

infrarrojas las cuales al rebotar contra un objeto cercano se reciben por otro

componente. Al ser recibidas el sistema detecta proximidad con lo que envía un 1 por

el emisor del transistor.

43

Page 44: Informe Final de Gusano

Figura 7. Detector infrarrojo de proximidad

El circuito integrado LM567 es un generador/decodificador de tonos que bien cumple

con las necesidades de este diseño. Tanto el fotodiodo como el fototransistor deberán

estar situados con unidades de enfoque adecuadas para mejorar el alcance. Con simples

reflectores de LED's se pueden obtener alcances del orden del metro. Con lentes

convexas se pueden cubrir distancias de cinco metros. Es conveniente sacrificar algo

de rango pero colocar filtros UV y SUNLIGHT los cuales no dejan entrar al

fototransistor (elemento receptor) los rayos del sol.

Como tenemos que usar 3 sensores corremos el riesgo de que por rebote alguna ráfaga

llegue erróneamente a un sensor, para solucionar este problema recurrimos al datasheet

del LM567.

Figura 8. LM567

44

Page 45: Informe Final de Gusano

Como se observa en la Figura 8. Entre las patillas 5 y 6 del integrado van el resistor y

el capacitor de timing, esto significa que si variamos los valores de estos componentes,

entonces podemos hacer que emitan ráfagas distintas cada uno de los sensores, y con

esto solucionaríamos el problema de que puedan cruzarse y censar erróneamente.

La patilla 8 del integrado es la que entrega la salida, pero usa lógica inversa, es decir

que cuando no hay objeto cerca, entrega un 1 y cuando si lo hay entrega un 0, de eso la

necesidad de usar un transistor PNP para la interfaz con el PIC, claro que también se

aprovecha su factor de amplificación.

Figura 9. Diagrama esquemático de los sensores

45

Page 46: Informe Final de Gusano

En la Figura 9. Tenemos el diagrama esquemático completo de los sensores, pero

observamos un componente más, una compuerta lógica NAND 7402, el uso de esta

compuerta es indispensable, ya que el valor entregado por el transistor PNP de salida

de cada uno de los circuitos no alcanza el 1 lógico (5v.), claro que también podemos

usar un buffer para asegurarnos de que sea entregado un 0 o 1 lógico.

- Potencia.

El circuito de potencia en una primera instancia estuvo conformado por los drivers para

motores PAP L293b, este driver según especificaciones técnicas soporta una intensidad

de 900mA, al momento de realizar la prueba, estos drivers se quemaron, ya que los

motores que se usan consumen un total de 1.2A.

Por tal razón fue necesario pensar en otra forma de controlar esta potencia con solo la

salida de 5v. del PIC; se pensó en usar relés y transistores en configuración Darlington

pero esa idea fue descartada por el consumo de corriente que estos demandan.

Se investigo sobre los llamados MOSFET y fueron la solución óptima al problema, se

decidió usar el MOSFET IRF540n que es según sus especificaciones técnicas soporta

hasta 33A.

Figura 10. IRF 540n

Usar un MOSFET requeriría de un nuevo diseño de la placa de control y del programa

de control de PIC, este problema fue solucionado rápidamente, ya que el IRF 540n no

requiere de más componentes que una resistencia en el Gate.

46

Page 47: Informe Final de Gusano

Figura 11. Diagrama esquemático del circuito de potencia

Como se observa en la Figura 11. Se usan un total de 12 MOSFET, 4 para cada motor

PAP, y simplemente una resistencia de 1K en cada Gate de los IRF540n, basta con una

alimentación de 12v. para energizar las bobinas de los motores.

La aplicación de los MOSFET es solo cerrar el circuito de GND cada vez que el PIC le

entregue un bit 1 y abrir el circuito cuando le llegue un 0.

Figura 12. PBC de circuito de potencia

47

Page 48: Informe Final de Gusano

En la Figura 12. Claramente se aprecia cómo es que se colocan los MOSFET para

controlar cada uno de los motores, son tres motores ya que el gusano llevara dos en la

cabeza y uno en la cola, eso para poder lograr el movimiento “˄”

- Motores.

En la etapa de los motores no requiere mayor explicación ya que solo se usan motores

PAP unipolares, de 1.2A

- Batería.

Esta etapa está conformada solo de una batería de 12v. y 1.2Ah.

Esta medida expresa cuántos amperes puede entregar una batería en una cantidad de

horas específica (usualmente el ciclo es de 20 horas). Por ejemplo, una batería marcada

como de 100 Ah (Amperes/hora), puede entregar 5 Amperes durante 20 horas (5 x 20

= 100 Ah).

Si se quiere que nuestro robot tenga una autonomía por varias horas, solo será

necesario reemplazar la batería por una de mayor potencia.

- PIC.

Es en esta etapa en la que se colocara el programa y toda la lógica de control, es este el

cerebro del robot.

Se decidió usar un PIC 16f877a debido a su cantidad de patillas ya que para cada motor

usamos 4, también se usan 3 para los sensores de proximidad y 2 más para saber si esta

comprimido o expandido el cuerpo del robot.

El PIC 16f877a es actualmente uno de los más usados, pero, para usarlo como cerebro

de un robot tiene una deficiencia, y es su consumo de potencia, sería ideal usar un PIC

de bajo consumo.

MICROCHIP empresa fabricadora de los PIC, tiene una gama de PIC diseñados para

poco consumo, sería ideal reemplazar el 16f877a por alguno de esta gama, así

estaríamos ahorrando energía.

48

Page 49: Informe Final de Gusano

Figura 13. PCB para el PIC 16f877a

Fue necesario diseñar una placa que contenga el circuito mínimo para poder usar el

PIC 16f877a, este circuito solo contiene un regulador 7805, un cristal de cuarzo para el

oscilador que en este caso es de 4Mhz, y un pulsador para el reset.

- Software.

Como se explico en los objetivos de este proyecto, uno de ellos es poder experimentar

en redes neuronales para el control.

Se decidió usar una red neuronal Perceptron, porque es la más simple y además

contamos con variables linealmente independientes.

Primero hay que analizar cada una de las variables a tener en cuenta y también el

movimiento del robot.

Partimos con la definición de que un robot es un dispositivo automático que realiza

acciones especificas, que dependen de las necesidades del proceso en que se encuentre

involucrado, en este caso se tiene un robot que cuenta con tres sensores de proximidad

en distintas ubicaciones que permanentemente detectan si hay objetos que se

encuentren a una distancia superior o inferior a la preestablecida, con base en esto se

decide si dar marcha adelante o atrás a cada uno de los tres motores que posee; en las

lecturas de los sensores podrían darse 8 posibles combinaciones (8=23) y para cada

combinación cada uno de los tres motores podría dar marcha adelante o marcha atrás.

El comportamiento del robot lo describe a continuación en la Tabla 1, cuando los

sensores detecten un objeto que se encuentra a una distancia inferior a la

49

Page 50: Informe Final de Gusano

predeterminada se dirá que el objeto se encuentra cerca y esto se representa por medio

de un 1 y cuando se detecte un objeto que se encuentra a una distancia mayor que la

predeterminada se dirá que el objeto está lejos lo cual se indica con un 0.

Las variables de entrada son S1, S2, S3, siendo S1 el sensor delantero, S2 el sensor

derecho y S3 el sensor izquierdo.

Separaremos el sentido de giro por dos variables, las llamaremos G1, G2, siendoM1 el

movimiento hacia adelante, G1 el giro a la derecha y G2 el giro a la izquierda.

S1 S2 S3 M1 G1 G2

0 0 0 1 0 00 0 1 1 0 00 1 0 1 0 00 1 1 1 0 01 0 0 0 1 01 0 1 0 1 01 1 0 0 0 11 1 1 0 0 0

Tabla 1. Comportamiento del robot

Este tipo de problema generalmente es resuelto suministrándole al robot una base de

datos que contiene todas las posibles situaciones que se podrían presentarse y sus

respectivas soluciones, en este caso se necesitaría almacenar las respuestas para ambos

motores ante las 8 posibles combinaciones en las lecturas de los sensores, cuando el

número de variables de entrada y el número de salidas es mucho mayor, la cantidad de

datos necesarios para especificar cada posible situación crece indefinidamente, debido

a esto se requerirían dispositivos con gran capacidad de almacenamiento; en contraste

una red neuronal puede entrenarse con un número representativo de patrones y

aprender el comportamiento del sistema utilizando dispositivos de menos capacidad de

almacenamiento y costo.

Una red tipo Perceptrón puede ser entrenada con patrones de cualquier dimensión en la

entrada y en la salida con datos binarios, por la simplicidad del problema este tipo de

red es la más adecuada.

Para garantizar que el problema puede ser resuelto por una red neuronal tipo

Perceptrón se debe comprobar que los patrones de entrenamiento son linealmente

50

Page 51: Informe Final de Gusano

separables, para esto se deben plantear las desigualdades generadas por cada patrón de

entrenamiento, en este caso cada patrón de cuatro dimensiones generara dos

desigualdades (una por cada salida), estas desigualdades no deben contradecirse, si esto

ocurriera el problema no podría ser resuelto por una red tipo Perceptrón de una sola

capa y deberá buscarse otro tipo de solución.

Debido a la naturaleza de la salida, la función transferencia a utilizar es una hardlim,

pero para nuestro caso de estudio, no sería optima, esto debido a lo que tarda en ser

entrenada, así que se realizara una aproximación a la función hardlims, de este modo

quedaría un 1 para indicar el estado lógico 1 y un -1 para el estado lógico 0 y la tabla

sería la siguiente:

S1 S2 S3 M1 G1 G2

-1 -1 -1 1 -1 -1-1 -1 1 1 -1 -1-1 1 -1 1 -1 -1-1 1 1 1 -1 -11 -1 -1 -1 1 -11 -1 1 -1 1 -11 1 -1 -1 -1 11 1 1 -1 -1 -1

Tabla 2. Comportamiento del robot 2

Como ahora usamos una función hardlims, esta se rige por las siguientes condiciones.

La salida de la red está dada por la siguiente ecuación

Aplicando esta ecuación a cada patrón de entrenamiento se tienen las siguientes

desigualdades, las cuales se satisfacen plenamente, lo que implica que el problema es

linealmente separable y puede ser resuelto por una red tipo Perceptron

51

Page 52: Informe Final de Gusano

Luego de armar la red, quedaría como lo muestra la Figura 14.

Figura 14. Red tipo Perceptron

Se creará una red de 3 entradas con una neurona tipo Perceptrón para cada salida,

teniendo así una salida bidimensional, los pesos iniciales aleatorios de la red se

muestran en la Tabla 3.

S1 S2 S3 M1 0.8636 -0.1627 0.0503 M1 1G1 -0.0680 0.1627 -0.5947 G1 1G2 0.1627 0.1627 0.8636 G2 1

Tabla 3. Valores iniciales de la red

52

Page 53: Informe Final de Gusano

El siguiente código crea una red tipo Perceptrón con función de transferencia hardlims,

dos neuronas en la salida, utiliza como patrones de entrenamiento las lecturas de los

cuatro sensores almacenados en p y como patrones objetivo o salidas deseadas las

acciones de ambos motores almacenados en el vector t.

net=newp([-1 1;-1 1;-1 1;-1 1],2,'hardlims');

net.adaptParam.passes=200;

Wi;

[net,a,e]=adapt(net,P,t);

Wf=net.IW{1,1};

bf=net.b{1};

Los pesos finales de la red entrada que satisface todos los patrones de entrada y salida

son:

S1 S2 S3M1 0.8636 -4.1627 0.0503 M1 1G1 -4.0680 0.6924 -4.5947 G1 1G2 0.8636 -4.1627 0.0503 G2 1

Tabla 4. Valores finales de la red

La red fue simulada para la totalidad de combinaciones posibles de entrada para

comprobar que no exista error en el aprendizaje de los patrones de entrenamiento y

para observar su capacidad de generalización en los casos restantes.

S1=[1 -1]; S2=[1 -1]; S3=[1 -1]; S4=[1 -1];

P=combvec(S1,S2,S3,S4)

net=newp([-1 1;-1 1;-1 1;-1 1],2,'hardlims');

Wf;

t=sim(net,P);

La respuesta de la red a todos los patrones de entrenamiento fue exitosa, como puede

observarse en la Tabla 5.

53

Page 54: Informe Final de Gusano

S1 S2 S3 M1 G1 G2

-1 -1 -1 1 -1 -1-1 -1 1 1 -1 -11 1 -1 -1 -1 11 1 1 -1 -1 -1Tabla 5. Simulación de la red para los

Patrones de Entrenamiento

La red fue simulada para las posibles combinaciones restantes obteniéndose los

siguientes resultados:

S1 S2 S3 M1 G1 G2

-1 -1 -1 1 -1 -1-1 -1 1 1 -1 -1-1 1 -1 1 -1 -1-1 1 1 1 -1 -11 -1 -1 -1 1 -11 -1 1 -1 1 -11 1 -1 -1 -1 11 1 1 -1 -1 -1Tabla 6. Simulación de la red para las

nuevas combinaciones

Las combinaciones que no hacían parte del set de entrenamiento, al ser presentadas a la

red fueron aproximadas al patrón del set de entrenamiento aprendido con menor

distancia euclidiana.

Una red tipo Perceptrón de una sola capa es una buena solución a un problema que

involucre patrones linealmente separables, en el caso de contar con patrones que no son

linealmente separables se tiene la alternativa de utilizar una red Perceptrón multicapa o

cambiar definitivamente de red, nótese que una red Perceptrón multicapa puede

solucionar el problema de separabilidad lineal a medida que aumenta el número de

capas de la red.

La capacidad de generalización de las redes neuronales juega un papel importante

cuando las posibles combinaciones de patrones de entrada son tantas que resultaría

imposible especificarle a un dispositivo que hacer en cada caso, puesto que la red se

entrena con un número de patrones representativo y no con la totalidad de ellos,

ahorrando tiempo de cómputo en la solución del problema.

54

Page 55: Informe Final de Gusano

En las aplicaciones desarrolladas con redes neuronales juega un papel importante la

tolerancia a fallas que las caracteriza, pues en caso de fallar uno o varios sensores

(como en este caso) la red siempre producirá una salida que en la mayoría de los casos

es la más acertada, debido a que la red después de un proceso de aprendizaje exitoso

está en capacidad de generalizar el comportamiento del sistema.

Mecánica del sistema

Como todo sistema, primero se parte de una idea, pero es necesario contar con los

instrumentos y herramientas necesarias para hacerlo posible.

Figura 15. Herramientas e instrumentos

En una primera instancia se pensó en usar como material el alambre de cobre N° 10, pero

esa idea fue descartada debido al elevado costo, entonces se decidió usar alambre

galvanizado y resulto siendo la opción optima debido a su bajo costo y dureza, pero para

unirlo se usara la soldadura de estaño, por ser la más barata y simple.

55

Page 56: Informe Final de Gusano

Figura 16. Alambre galvanizado

Para el desarrollo de la mecánica del sistema, se diseño e implemento todo un sistema

mecánico, que consta de 4 eslabones, de los cuales 2 son soporte para placas y batería y los

otros 2 son para ruedas y motores.

Figura 17. Estructura del robot

56

Page 57: Informe Final de Gusano

Fue necesario aplicar un poco de física y de algebra de vectores para poder situar

correctamente cada uno de los componentes, de lo que se deducen los siguientes vectores:

Figura 18. Vectores tomados en consideración

De este modo obtenemos la mejor posición para los componentes de mayor peso, que en

este caso sería la batería, por tanto debe ir en la cabeza.

Figura 19. Posición de la batería

La posición de las demás placas esta dependiendo del uso que les daremos, por esa razón se

decidió colocar las placa de los sensores después de la batería, ya que de esta forma se

evitara usar mas cable y así tendremos menos posibilidades de tener lecturas falsas, luego

colocar la placa del PIC por que estaría ubicada justo al medio de todo, después de esta

colocar la placa de los IRF para que controle el motor trasero y por medio de uno cables

controlar a los motores delanteros

57

Page 58: Informe Final de Gusano

Figura 20. Posición de las placas

De este modo tenemos terminado el robot y la lógica de control es el siguiente paso en

nuestro desarrollo.

Lógica de control

Antes de aplicar al robot la red neuronal, se aplicara una programación estructurada, con

una tabla en la que se detallara cada uno de los movimientos del robot dependiendo de la

lectura de los sensores, luego de que se haya logrado completar con éxito esta experiencia

recién se aplicara la red neuronal.

El programa para el PIC 16f877a esta desarrollado en lenguaje C.

//

*******************************************************************

*********

#include <16f877a.h> //llamo a la libreria del pic

#fuses XT,NOWDT,NOPROTECT,PUT //declaro las ocpciones de compilacion

58

Page 59: Informe Final de Gusano

#use delay(clock=4000000) //el reloj que voy a usar

#use standard_io(B) //inicializo los puertos

#use standard_io(A)

//

*******************************************************************

*********

void motor_adelante();

void avanzar();

void bobina_derecha();

void bobina_izquierda();

void freno();

int t_adelante=50; //para darle tiempo en la bobina de adelante

int t_atraz=40; //pata el tiempo en la bobina de atras

int estado=0; //para saber en que esta

void main()

{

while (true)

{

if((input(PIN_E0)==0)&&(input(PIN_E1)==0)&&(input(PIN_E2)==0))

{

avanzar();

//motor_adelante();

}

else

{

freno();

}

}

}

59

Page 60: Informe Final de Gusano

void motor_adelante()

{

output_high(PIN_B4); //pasos para la bobina de la derecha

output_high(PIN_C7); //pasos para la bobina de la izquierda

output_high(PIN_B5); //pasos para la bobina de la derecha

output_high(PIN_C6); //pasos para la bobina de la izquierda

output_low(PIN_B6); //pasos para la bobina de la derecha

output_low(PIN_C5); //pasos para la bobina de la izquierda

output_low(PIN_B7); //pasos para la bobina de la derecha

output_low(PIN_C4); //pasos para la bobina de la izquierda

delay_ms(t_atraz); //tiempo para el cambio de bobinas

output_low(PIN_B4); //pasos para la bobina de la derecha

output_low(PIN_C7); //pasos para la bobina de la izquierda

output_high(PIN_B5); //pasos para la bobina de la derecha

output_high(PIN_C6); //pasos para la bobina de la izquierda

output_high(PIN_B6); //pasos para la bobina de la derecha

output_high(PIN_C5); //pasos para la bobina de la izquierda

output_low(PIN_B7); //pasos para la bobina de la derecha

output_low(PIN_C4); //pasos para la bobina de la izquierda

delay_ms(t_atraz); //tiempo para el cambio de bobinas

output_low(PIN_B4); //pasos para la bobina de la derecha

60

Page 61: Informe Final de Gusano

output_low(PIN_C7); //pasos para la bobina de la izquierda

output_low(PIN_B5); //pasos para la bobina de la derecha

output_low(PIN_C6); //pasos para la bobina de la izquierda

output_high(PIN_B6); //pasos para la bobina de la derecha

output_high(PIN_C5); //pasos para la bobina de la izquierda

output_high(PIN_B7); //pasos para la bobina de la derecha

output_high(PIN_C4); //pasos para la bobina de la izquierda

delay_ms(t_atraz); //tiempo para el cambio de bobinas

output_high(PIN_B4); //pasos para la bobina de la derecha

output_high(PIN_C7); //pasos para la bobina de la izquierda

output_low(PIN_B5); //pasos para la bobina de la derecha

output_low(PIN_C6); //pasos para la bobina de la izquierda

output_low(PIN_B6); //pasos para la bobina de la derecha

output_low(PIN_C5); //pasos para la bobina de la izquierda

output_high(PIN_B7); //pasos para la bobina de la derecha

output_high(PIN_C4); //pasos para la bobina de la izquierda

delay_ms(t_atraz); //tiempo para el cambio de bobinas

}

void freno()

{

delay_ms(t_adelante);

}

61

Page 62: Informe Final de Gusano

void avanzar()

{

if((input(PIN_A0)==1)&&(input(PIN_A1)==1))

{

if(estado==0)

{

bobina_derecha();

}

if(estado==1)

{

bobina_derecha();

}

if(estado==2)

{

bobina_izquierda();

}

}

if((input(PIN_A0)==1)&&(input(PIN_A1)==0))

{

estado=1;

bobina_derecha();

}

if((input(PIN_A0)==0)&&(input(PIN_A1)==1))

{

estado=2;

bobina_izquierda();

}

}

void bobina_derecha()

62

Page 63: Informe Final de Gusano

{

output_high(PIN_C4); //freno para la bobina de la izquierda

output_high(PIN_B4); //pasos para la bobina de la derecha

output_high(PIN_B5); //pasos para la bobina de la derecha

output_low(PIN_B6); //pasos para la bobina de la derecha

output_low(PIN_B7); //pasos para la bobina de la derecha

delay_ms(t_adelante); //tiempo para el cambio de bobinas

output_low(PIN_B4); //pasos para la bobina de la derecha

output_high(PIN_B5); //pasos para la bobina de la derecha

output_high(PIN_B6); //pasos para la bobina de la derecha

output_low(PIN_B7); //pasos para la bobina de la derecha

delay_ms(t_adelante); //tiempo para el cambio de bobinas

output_low(PIN_B4); //pasos para la bobina de la derecha

output_low(PIN_B5); //pasos para la bobina de la derecha

output_high(PIN_B6); //pasos para la bobina de la derecha

output_high(PIN_B7); //pasos para la bobina de la derecha

delay_ms(t_adelante); //tiempo para el cambio de bobinas

output_high(PIN_B4); //pasos para la bobina de la derecha

output_low(PIN_B5); //pasos para la bobina de la derecha

output_low(PIN_B6); //pasos para la bobina de la derecha

output_high(PIN_B7); //pasos para la bobina de la derecha

output_low(PIN_C4); //quito el freno para la bobina de la izquierda

63

Page 64: Informe Final de Gusano

delay_ms(t_adelante); //tiempo para el cambio de bobinas

}

void bobina_izquierda()

{

output_high(PIN_B4); //freno para la bobina de la derecha

output_high(PIN_C7); //pasos para la bobina de la izquierda

output_high(PIN_C6); //pasos para la bobina de la izquierda

output_low(PIN_C5); //pasos para la bobina de la izquierda

output_low(PIN_C4); //pasos para la bobina de la izquierda

delay_ms(t_atraz); //tiempo para el cambio de bobinas

output_low(PIN_C7); //pasos para la bobina de la izquierda

output_high(PIN_C6); //pasos para la bobina de la izquierda

output_high(PIN_C5); //pasos para la bobina de la izquierda

output_low(PIN_C4); //pasos para la bobina de la izquierda

delay_ms(t_atraz); //tiempo para el cambio de bobinas

output_low(PIN_C7); //pasos para la bobina de la izquierda

output_low(PIN_C6); //pasos para la bobina de la izquierda

output_high(PIN_C5); //pasos para la bobina de la izquierda

output_high(PIN_C4); //pasos para la bobina de la izquierda

delay_ms(t_atraz); //tiempo para el cambio de bobinas

output_high(PIN_C7); //pasos para la bobina de la izquierda

output_low(PIN_C6); //pasos para la bobina de la izquierda

output_low(PIN_C5); //pasos para la bobina de la izquierda

64

Page 65: Informe Final de Gusano

output_high(PIN_C4); //pasos para la bobina de la izquierda

output_low(PIN_B4); //quito el freno para la bobina de la derecha

delay_ms(t_atraz); //tiempo para el cambio de bobinas

}

Y este es el programa que se grabara en el PIC para realizar las primeras pruebas, luego de

que estas sean satisfactorias, recién se le aplicara red neuronal.

65

Page 66: Informe Final de Gusano

CAPÍTULO 4

DISCUSIÓN DE RESULTADOS

La teoría de Redes Neuronales Artificiales, presenta grandes ventajas con respecto a otros

modelos típicos de solución de problemas de Ingeniería, una de ellas es su inspiración en

modelos biológicos del funcionamiento del cerebro, lo que facilita su estudio debido a las

analogías que pueden introducirse para su análisis.

Los modelos matemáticos en que han sido desarrollados los algoritmos para todos los tipos

de redes son modelos sencillos, que aunque exigen cierto grado de conocimientos de

cálculo diferencial, pueden ser asimilados y desarrollados en cualquier lenguaje de

programación.

La red tipo Perceptrón es una red que puede implementarse exitosamente para resolver

problemas de clasificación de patrones que sean linealmente separables, la red responderá

mejor entre más sencillos sean los patrones que debe clasificar. A pesar de que cuenta con

serias limitaciones, esta red conserva su importancia ya que sirvió como inspiración para

otros tipos de redes, como por ejemplo las redes multicapa.

En las aplicaciones desarrolladas con redes neuronales juega un papel importante la

tolerancia a fallas que las caracteriza, pues en caso de fallar uno o varios sensores (como en

este caso) la red siempre producirá una salida que en la mayoría de los casos es la más

acertada, debido a que la red después de un proceso de aprendizaje exitoso está en

capacidad de generalizar el comportamiento del sistema.

66

Page 67: Informe Final de Gusano

CAPÍTULO 5

CONCLUSIONES Y RECOMENDACIONES

CONCLUSIONES

La inteligencia artificial y la robótica son ciencias muy interesantes y fascinantes.

El PIC 16F877 es uno de los más usados en la actualidad.

Los PICs cada vez se han extendido más en cuanto a su aplicación.

La red neuronal usada es la más simple y sencilla de implementar.

El circuito propuesto no requiere calibraciones ni ajustes posteriores a su montaje.

Es importante utilizar una tensión de alimentación estabilizada.

Es muy importante considerar los consumos de potencia de los componentes para

poder calcular correctamente la potencia de la fuente de alimentación.

RECOMENDACIONES

Debe tenerse cuidado al realizarse el montaje de los componentes.

Se debe tener un profundo conocimiento matemático para poder aplicar

correctamente una red neuronal.

Debe realizarse una correcta soldadura de los componentes y limpieza final de la

placa impresa.

Se recomienda realizar primero un modelamiento matemático para diseñar el chasis y

demás mecánica del robot.

Debe utilizarse una carcasa o chasís convenientes para mayor seguridad.

67

Page 68: Informe Final de Gusano

BIBLIOGRAFÍA CONSULTADA

Principios de Electrónica Malvino, Albert Paúl

Saber Electrónica Revista Argentina de Colección

Microcontroladores PICs Angulo Usátegui, José María.

http://es.wikipedia.org/wiki/Perceptr%C3%B3n

http://es.wikipedia.org/wiki/Perceptr%C3%B3n_multicapa

http://es.wikipedia.org/wiki/Microcontrolador

68

Page 69: Informe Final de Gusano

ANEXOS

69

Page 70: Informe Final de Gusano

70

Page 71: Informe Final de Gusano

71

Page 72: Informe Final de Gusano

72

Page 73: Informe Final de Gusano

73

Page 74: Informe Final de Gusano

74

Page 75: Informe Final de Gusano

75

Page 76: Informe Final de Gusano

76

Page 77: Informe Final de Gusano

77

Page 78: Informe Final de Gusano

78

Page 79: Informe Final de Gusano

79

Page 80: Informe Final de Gusano

80

Page 81: Informe Final de Gusano

81

Page 82: Informe Final de Gusano

82

Page 83: Informe Final de Gusano

83

Page 84: Informe Final de Gusano

84

Page 85: Informe Final de Gusano

85