ndice general - 148.206.53.231

84
UNIVERSIDAD AUTÓNOMA METROPOLITANA ________________________________________________________________________ - 1 - UNIDAD IZTAPALAPA C B I REPORTE DE PROYECTO TERMINAL DE LA LIC. DE INGENIERÍA ELECTRÓNICA MINI-ROBOT RECOLECTOR DE OBJETOS E INTERFAZ USB ALUMNOS: BRAVO INFANTE ADRIÁN CERVANTES PALACIOS JAVIER Aprobado por: _________________________________________________________ ASESOR DE PROYECTO: ING. JOEL RICARDO JIMÉNEZ CRUZ FECHA: 7- DICIEMBRE – 2006

Transcript of ndice general - 148.206.53.231

Page 1: ndice general - 148.206.53.231

UNIVERSIDAD AUTÓNOMA METROPOLITANA

________________________________________________________________________

- 1 -

UNIDAD IZTAPALAPA C B I

REPORTE DE PROYECTO TERMINAL DE LA LIC. DE INGENIERÍA ELECTRÓNICA

MINI-ROBOT RECOLECTOR DE OBJETOS E INTERFAZ USB

ALUMNOS: BRAVO INFANTE ADRIÁN

CERVANTES PALACIOS JAVIER

Aprobado por:

_________________________________________________________ ASESOR DE PROYECTO: ING. JOEL RICARDO JIMÉNEZ CRUZ

FECHA: 7- DICIEMBRE – 2006

Page 2: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 2 -

Resumen. Nuestro proyecto consiste en el diseño e implementación de un mini-robot recolector de objetos y la interfaz para poder comunicarnos con éste, por medio del puerto USB, con estas premisas de desarrollo y configuración se llegó a la conclusión de que la mejor forma de implementar este dispositivo era hacerlo mediante microcontroladores, puesto que son dispositivos programables caracterizados principalmente por su reducido tamaño, sencillez de programación y gran diversidad de aplicaciones de control de sistemas. Para ser capaz de trabajar eficazmente el mini-robot cuenta con varias partes que describimos a continuación: sensores que utilizan señales infrarrojas instalados en dos ubicaciones, en el seguidor de línea, que es un foto detector que recibe la señal luminosa reflejada por las marcas de color negro que se encuentren en el piso, y en la parte media de la pinza de recolección. Esta pinza esta hecha en baquelita y se encuentra controlada por 1 servomotor, el cual le da el soporte necesario para realizar el esfuerzo mecánico para abrir o cerrar la pinza. El brazo up-down, también controlado por 1 servomotor, se utiliza para subir y bajar la pinza de recolección, permitiendo al descender que la pinza detecte el objeto y lo sujete, inmediatamente el brazo up-down eleva al objeto. Se cuenta con 2 detectores de obstáculos colocados en los costados delanteros del robot para evitar choques que lo desestabilicen, por último, el circuito de control se encuentra alimentado con una batería de 9V, ubicada en la parte superior del mini-robot. Al mismo tiempo se proporciona una alimentación de energía para el circuito de potencia, refiriéndose a la parte donde intervienen los motores que generan el desplazamiento. Debido a sus características tanto de programación como de aplicación, la unidad recolectora de objetos puede ajustarse a desempeñar una diversa gama de aplicaciones, mediante pequeñas variaciones en la programación y la sustitución de los transductores para trabajar con diferentes variables de control. La implementación de la interfaz USB del proyecto, pretende mostrar como enviar/recibir datos por el puerto USB desde el PIC al PC, el programa fue hecho de tal manera que fuera sencillo y entendible, por lo que sirve de introducción al uso del puerto USB. La principal línea de continuación en proyectos futuros es la preparación de software específico de comunicación vía puerto USB. A partir de este software se podrá finalizar el desarrollo de más circuitos que utilicen la comunicación vía puerto USB.

Page 3: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 3 -

Índice general Título __Página INTRODUCCIÓN.................................................................................................................6 DESARROLLO.....................................................................................................................7 Capítulo 1: Microcontroladores: Características generales............................................8

1.1. Definición............................................................................................................81.2. Recursos comunes a todos los microcontroladores.............................................8

1.2.1. Arquitectura básica...............................................................................81.2.2. Procesador CPU ...................................................................................81.2.3. Memoria ...............................................................................................91.2.4. Puertas de Entrada y Salida............................................................... 101.2.5. Reloj Principal................................................................................... 10

1.3. Recursos especiales.......................................................................................... 111.4. Lenguajes de programación ............................................................................. 121.5. Fabricantes ....................................................................................................... 12

Capítulo 2: Microcontroladores PIC............................................................................. 14

2.1. Las gamas PIC ................................................................................................. 142.1.1. Gama baja.......................................................................................... 142.1.2. Gama media....................................................................................... 152.1.3. Gama alta y gama mejorada .............................................................. 15

2.2. Microcontroladores 18F2XXX ........................................................................ 162.2.1. Características generales ................................................................... 162.2.2. Detalles individuales de la familia PIC18 ......................................... 172.2.3. Diagrama de conexionado del PIC18F2550...................................... 18

2.3. PIC18F2XXX: Características Relevantes ...................................................... 202.3.1. Organización de la memoria ............................................................. 20

2.3.1.1. Memoria de programa ........................................................ 202.3.1.2. Direccionamiento ............................................................... 212.3.1.3. Banco de registros y memoria de datos.............................. 22

2.3.2. Oscilador principal ............................................................................ 232.3.3. Perro guardián WDT ......................................................................... 232.3.4. Reset .................................................................................................. 232.3.5. Modo de reposo Sleep ....................................................................... 242.3.6. Interrupciones.................................................................................... 25

Page 4: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 4 -

Título __Página 2.4. Periféricos ........................................................................................................ 26

2.4.1. Modulación por anchura de pulsos (PWM) ...................................... 272.4.1.1 Periodo PWM...................................................................... 282.4.1.2 Ciclo de trabajo del PWM ................................................... 282.4.1.3 Implementación del PWM................................................... 28

2.4.2. Interfaz de comunicaciones USB ...................................................... 292.4.2.1 Características del modulo USB de los PIC18.................... 292.4.2.2 Control y estatus del USB ................................................... 30

2.5. Lectura y escritura de la memoria de datos EEPROM .................................... 312.5.1. Lectura de la memoria de datos......................................................... 312.5.2. Escritura de la memoria de datos ...................................................... 31

Capítulo 3: Diseño del mini-robot recolector de objetos .............................................. 32 3.1. Descripción de los componentes usados en el mini-robot ............................... 32 3.1.1. Sensores usados .................................................................................... 32 3.1.1.1. Sensor Reflexivo IS471F ................................................... 32 3.1.1.2. Sensor Reflexivo CNY70 .................................................. 33 3.1.1.3. Sensor Mecánico Bumper.................................................. 34 3.1.2. Servomotores ........................................................................................ 34

3.1.3. Circuito de prueba para ver el funcionamiento de los motores del mini-robot ........................................................................................ 35 3.1.4. Sistema de Actuación............................................................................ 38 3.1.4.1. Control de Motores ............................................................ 38 3.1.4.2. Control de Motores por Medio de Microcontrolador ........ 40

3.1.4.3. Giro de dos motores en un único sentido........................... 41 3.1.5. Montaje del Driver L293B con el Microcontrolador PIC...................... 42

3.1.6. Etapa de Potencia .................................................................................. 43 3.1.7. Etapa de Control.................................................................................... 44 3.1.7.1. Placa del sensor de color negro.......................................... 45

Capítulo 4: Implementación del mini-robot recolector de objetos ............................... 46

4.1. El seguidor....................................................................................................... 464.2. La pinza recolectora......................................................................................... 464.3. El detector de obstáculos ................................................................................. 474.4. El brazo up-down............................................................................................. 484.5. Suministro de energía y movimiento............................................................... 484.6. Diagrama de flujo ............................................................................................ 494.7. Funcionamiento del mini-robot ....................................................................... 504.8. Programa “PFinal.asm” del mini-robot recolector de objetos ........................ 53

Page 5: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 5 -

Título __Página

Capítulo 5: Implementación de la interfaz de comunicación USB ............................... 57

5.1. Funcionamiento de la interfaz USB ................................................................. 585.2. Programa “PicUSB.C” para la interfaz de comunicación USB ....................... 61

Anexo 1: Software de programación y lenguaje C ............................................................. 64 Anexo 2: Ideas y mejoras para el mini-robot ..................................................................... 79 Bibliografía y Referencias .................................................................................................. 83

Page 6: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 6 -

Introducción. Para el diseño e implementación del mini-robot recolector de objetos y la interfaz USB, es necesario seguir una serie de pautas o fases que se detallan a continuación. La primera fase comprende un estudio general de los microcontroladores. En esta etapa se definen con detalle todas las características fundamentales y sus aplicaciones principales, así como los lenguajes de programación de los mismos. Todo ello para tener un conocimiento de los microcontroladores en general y de los microcontroladores PIC de la casa MICROCHIP en particular, centrando el estudio en una familia de gama alta-mejorada muy comercial en estos días. Los dos primeros capítulos del desarrollo están dedicados a los fundamentos teóricos de los microcontroladores, tal y como se comenta en el párrafo anterior. El primer capítulo describe de manera general los microcontroladores hablando de sus recursos comunes, aplicaciones y fabricantes. El segundo capítulo está dedicado a la gama alta-mejorada de los microcontroladores PIC, especialmente a la familia 18FXXXX, ya que el PIC que escogimos para nuestro proyecto, el 18F2550, pertenece a esta familia. Aquí se hace un estudio detallado de todos sus recursos y aplicaciones, la organización de la memoria, sus periféricos, etc. La segunda fase del proyecto abarca la totalidad del tercer capítulo donde se encuentra la descripción detallada del diseño del mini-robot, explicando el funcionamiento de los componentes utilizados, los circuitos usados para prueba y los esquemas de las placas, con la explicación de sus conexiones, para las etapas de potencia y control. Con lo anterior se pretende que se entienda claramente, la parte del ensamblado de los circuitos en el mini-robot, todo ello gobernado por el microcontrolador PIC18F2550. La tercera fase del proyecto abarca los dos últimos capítulos, en el cuarto capítulo, tenemos la explicación del armado e implementación de todos los circuitos en el mini-robot, el diagrama de flujo a utilizar para el programa que gobierna al mini-robot, la descripción de su funcionamiento, con imágenes que detallan claramente cada uno de los pasos que constituyen su operación, al final encontraran su respectivo programa “.asm” comentado. Por ultimo, en el quinto capítulo, se encuentra la descripción de los pasos a seguir para la implementación de la interfaz USB en los microcontroladores, lo que ofrece una visión mas clara sobre el detalle que entraña este tipo de comunicación, se describe el funcionamiento de la interfaz USB y se incluye su programa “.c” comentado. Además de todo lo comentado anteriormente, en este proyecto se añade al final del mismo dos anexos. El primer anexo describe de manera práctica el software MPLAB, que es la herramienta necesaria para llevar acabo la programación de los PICS, incluye un resumen de las directivas empleadas por el compilador CCS que trabaja en lenguaje C. El segundo anexo es de ideas y mejoras a futuro, estas podrían ser implementadas en el mini-robot recolector de objetos, para un mejor funcionamiento ó para asignarle diferentes características de operación.

Page 7: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 7 -

DESARROLLO

Page 8: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 8 -

Capítulo 1. Microcontroladores: Características generales.

1.1 Definición

Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de uno o varios procesos. Aunque el concepto de controlador ha permanecido invariable a través del tiempo, su implementación física ha variado frecuentemente. Hace tres décadas, los controladores se construían exclusivamente con componentes de lógica discreta, posteriormente se emplearon los microprocesadores, que se rodeaban con chips de memoria y E/S sobre una tarjeta de circuito impreso. En la actualidad, todos los elementos del controlador se han podido incluir en un chip, el cual recibe el nombre de microcontrolador. Realmente consiste en un sencillo pero completo computador contenido en el chip de un circuito integrado.

1.2 Recursos comunes a todos los microcontroladores

Al estar todos los microcontroladores integrados en un chip, su estructura fundamental y sus características son muy parecidas. Todos deben disponer de los bloques esenciales: procesador, memoria de datos e instrucciones, líneas de entrada y salida, oscilador de reloj y módulos controladores de periféricos. Sin embargo, cada fabricante intenta enfatizar los recursos idóneos para las aplicaciones a las que se destintan preferentemente.

1.2.1 Arquitectura básica

Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clásica de Von Neumann, en el momento presente se impone la arquitectura Harvard.

La arquitectura de Von Neumann se caracteriza por disponer de una sola memoria

principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control).

La arquitectura Harvard dispone de dos memorias independientes: una, que contiene

sólo instrucciones y otra, sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias

1.2.2 Procesador Es el elemento más importante del microcontrolador y determina sus principales características, tanto a nivel hardware como a nivel de software. Se encarga de direccionar la memoria de instrucciones, recibir el código de la instrucción en curso, su decodificación y la ejecución de la operación que implica la instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores actuales:

Page 9: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 9 -

CISC: Computadores de Juego de Instrucciones Complejo: Disponen de más de 80 instrucciones máquina en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecución. RISC: Tanto la industria de los computadores comerciales como la de los microcontroladores están decantándose hacia la filosofía RISC (Computadores de Juego de Instrucciones Reducido). En estos procesadores el repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo.La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador. SISC: En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, además de ser reducido, es “específico”, o sea, las instrucciones se adaptan a las necesidades de la aplicación prevista. Esta filosofía se ha bautizado con el nombre de SISC (Computadores de Juego de Instrucciones Específico).

1.2.3 Memoria En los microcontroladores la memoria de instrucciones y datos está integrada en el propio chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener el programa de instrucciones que gobierna la aplicación. Otra parte de memoria será tipo RAM, volátil, y se destina a guardar las variables y los datos. La RAM en estos dispositivos es de poca capacidad pues sólo debe contener las variables y los cambios de información que se produzcan en el transcurso del programa. Por otra parte, como sólo existe un programa activo, no se requiere guardar una copia del mismo en la RAM pues se ejecuta directamente desde la ROM. Según el tipo de memoria ROM que dispongan los microcontroladores, la aplicación y utilización de los mismos es diferente. Se describen las cinco versiones de memoria no volátil que se pueden encontrar en los microcontroladores del mercado. 1º. ROM con máscara Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del chip. El elevado coste del diseño de la máscara sólo hace aconsejable el empleo de los microcontroladores con este tipo de memoria cuando se precisan cantidades superiores a varios miles de unidades. 2ª. OTP El microcontrolador contiene una memoria no volátil de sólo lectura “programable una sola vez” por el usuario. OTP (One Time Programmable). La versión OTP es recomendable cuando es muy corto el ciclo de diseño del producto, o bien, en la construcción de prototipos y series muy pequeñas.

Page 10: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 10 -

3ª EPROM Los microcontroladores que disponen de memoria EPROM (Erasable Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La grabación se realiza, como en el caso de los OTP, con un grabador controlado desde una PC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que se somete a la EPROM a rayos ultravioleta durante varios minutos. 4ª EEPROM Se trata de memorias de sólo lectura, programables y borrables eléctricamente EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la programación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el control programado de una PC. Es muy cómoda y rápida la operación de grabado y la de borrado. Los microcontroladores dotados de memoria EEPROM una vez instalados en el circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito. Para ello se usan “grabadores en circuito” que confieren una gran flexibilidad y rapidez a la hora de realizar modificaciones en el programa de trabajo. Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona de memoria EEPROM en los circuitos programables para guardar y modificar cómodamente una serie de parámetros que adecuan el dispositivo a las condiciones del entorno. 5ª FLASH Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña. A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es más rápida y de mayor densidad que la EEPROM. La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de escritura/borrado. Las memorias EEPROM y FLASH son muy útiles al permitir que los microcontroladores que las incorporan puedan ser reprogramados “en circuito”, es decir, sin tener que sacar el circuito integrado de la tarjeta.

1.2.4 Puertos de Entrada y Salida La principal utilidad de las patitas que posee la cápsula que contiene un microcontrolador es soportar las líneas de E/S que comunican al procesador interno con los periféricos exteriores.

Page 11: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 11 -

1.2.5 Reloj principal Todos los microcontroladores disponen de un circuito oscilador que genera una onda cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la sincronización de todas las operaciones del sistema. Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo se necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a elementos pasivos o bien un resonador cerámico o una red R-C.

1.3 Recursos especiales Cada fabricante oferta numerosas versiones de una arquitectura básica de microcontrolador. En algunas amplía las capacidades de las memorias, en otras incorpora nuevos recursos, en otras reduce las prestaciones al mínimo para aplicaciones muy simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfaga todos los requerimientos de su aplicación. De esta forma, minimizará el coste, el hardware y el software. Los principales recursos específicos que incorporan los microcontroladores son: 1. Temporizadores o “Timers”: Se emplean para controlar periodos de tiempo y para llevar la cuenta de acontecimientos que suceden en el interior. 2. Perro guardián o “Watchdog”: Es un temporizador que cuando se desborda y pasa por 0 provoca un reset automáticamente en el sistema. 3. Protección ante fallo de alimentación o “Brownout”: Se trata de un circuito que genera un reset cuando el voltaje de alimentación VDD es inferior a un voltaje mínimo establecido. 4. Estado de reposo o de bajo consumo: Es un estado del sistema donde se detiene el reloj principal y sus circuitos asociados con el objetivo de ahorrar energía en periodos de tiempo donde el microcontrolador se mantiene en espera de instrucciones. 5. Conversor A/D: Procesa señales analógicas convirtiéndolas en señales digitales. 6. Comparador analógico: Algunos modelos de microcontroladores disponen internamente de un Amplificador Operacional que actúa como comparador entre una señal fija de referencia y otra variable

Page 12: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 12 -

que se aplica por una de las patitas de la cápsula. La salida del comparador proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor que la otra. 7. Modulador de anchura de impulsos o PWM: Son circuitos que proporcionan en su salida impulsos de anchura variable, que se ofrecen al exterior a través de las patitas del encapsulado. 8. Puertos de comunicación: Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de redes y poder adaptarlos con otros elementos bajo otras normas y protocolos. Algunos modelos disponen de recursos que permiten directamente esta tarea, entre los que destacan:

- UART, adaptador de comunicación serie asíncrona. - USART, adaptador de comunicación serie síncrona y asíncrona -Puerta paralela esclava para poder conectarse con los buses de otros microprocesadores. - USB (Universal Serial Bus), que es un moderno bus serie para la PC. - Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips. -CAN (Controller Area Network), para permitir la adaptación con redes de conexionado multiplexado desarrollado conjuntamente por Bosch e Intel para el cableado de dispositivos en automóviles.

1.4 Lenguajes de programación Se han desarrollado todo tipo de lenguajes para los microcontroladores, pero los más usados son el Ensamblador, el BASIC y el C. Los programas escritos en Ensamblador son compactos y rápidos, sin embargo, utiliza mnemónicos inteligibles y si no están bien confeccionados resultarán de gran tamaño y lentos. Los lenguajes de alto nivel como el BASIC y el C son más fáciles de comprender y por tanto de diseñar. Pero como toda máquina digital, el microcontrolador es capaz de entender exclusivamente el lenguaje binario grabado en la memoria. Los compiladores son programas que se encargan de traducir el programa de trabajo escrito en cualquier lenguaje a código máquina para luego grabarlo en la memoria del microcontrolador y ejecutarlo.

1.5 Fabricantes En la actualidad, gran parte de los fabricantes de circuitos integrados disponen de su propia línea de microcontroladores. Así tendremos Intel, que ha ido siempre por delante presentando nuevos productos, así por ejemplo el 8048 se considera el primer microcontrolador de 8 bits y lo fabricó Intel en la década de los 70.

Page 13: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 13 -

Otra de las principales empresas del mundo de los dispositivos programables es Motorola y los microcontroladores PIC de la empresa americana Microchip han sido conocidos en los últimos años. Su popularidad avanza día a día, siendo incluidos en la mayoría de proyectos debido a su bajo coste, reducido consumo, pequeño tamaño, fácil programación y abundancia de herramientas económicas de soporte. En la Tabla 1.1 se muestra el avance de Microchip respecto de las otras compañías fabricantes de microcontroladores. Todos los microcontroladores que se fabrican en el presente son buenos y el mejor no siempre es el mismo. Cambian el modelo y fabricante según la aplicación y las circunstancias que lo envuelven.

Tabla 1.1

Page 14: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 14 -

Capítulo 2. Microcontroladores PIC. Para la realización de este proyecto se eligió la familia PIC de Microchip por diversos motivos: 1. Por la cantidad de información disponible sobre estos microcontroladores, y es que para las aplicaciones más habituales la elección de una versión adecuada de PIC es la mejor solución. 2. Por su sencillez de manejo, tienen un juego de instrucciones reducido, de 35 en la gama media, 75 en la gama alta-mejorada. 3. Por la facilidad de obtener muestras gratuitas. 4. Por su velocidad y promedio de parámetros en consumo, tamaño, etc. 5. Porque posee gran variedad de herramientas, tanto de software como de hardware, baratas y fáciles de utilizar. Una de las razones del éxito de los PIC se basa en su utilización. Cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su repertorio de instrucciones, es muy fácil emplear otro modelo.

2.1 Las gamas PIC Para resolver aplicaciones sencillas se precisan pocos recursos; en cambio, las aplicaciones grandes requieren numerosos y potentes. Siguiendo esta filosofía, Microchip construye diversos modelos de microcontroladores orientados a cubrir, de forma óptima, las necesidades de cada proyecto. Así, hay disponibles microcontroladores sencillos y baratos para atender las aplicaciones simples y otros complejos y más costosos para las de mucha envergadura. Con las gamas de PIC se dispone de gran diversidad de modelos y encapsulados, pudiendo seleccionar el que mejor se acople a las necesidades de acuerdo con el tipo y capacidad de las memorias, el número de líneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las versiones están construidas alrededor de una arquitectura común, un repertorio mínimo de instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen del voltaje de alimentación.

2.1.1 Gama Baja La gama baja de los PIC encuadra nueve modelos fundamentales en la actualidad. A muchos de estos microcontroladores de gama baja se les llama “enanos” porque solamente disponen de 8 patillas. La memoria de programa puede contener 512, 1 k. y 2 k palabras de 12 bits, y ser de tipo ROM, EPROM aunque también hay modelos con memoria OTP. La memoria de datos puede tener una capacidad comprendida entre 25 y 73 bytes. Sólo disponen de un temporizador (TMR0), un repertorio de 33 instrucciones. El voltaje de alimentación admite un valor muy flexible comprendido entre 2 y 6,25 V, lo cual posibilita el funcionamiento mediante pilas corrientes teniendo en cuenta su bajo consumo (menos de 2 mA a 5 V y 4 MHz ).

Page 15: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 15 -

2.1.2 Gama Media En esta gama sus componentes añaden nuevas prestaciones a las que poseían los de la gama baja, haciéndoles más adecuados en las aplicaciones complejas. Admiten interrupciones, poseen comparadores de magnitudes analógicas, convertidores A/D, puertos serie y diversos temporizadores. Algunos modelos disponen de una memoria de instrucciones del tipo OTP que resulta mucho más económica en la implementación de prototipos y pequeñas series. Otros en cambio, disponen de una memoria de instrucciones tipo EEPROM, que, al ser borrables eléctricamente, son mucho más fáciles de reprogramar que las EPROM, que tienen que ser sometidas a rayos ultravioleta durante un tiempo determinado para realizar dicha operación.

2.1.3 Gama Alta y Gama Mejorada Los dispositivos de la gama alta PIC17C4X responden a microcontroladores de arquitectura abierta pudiéndose expansionar en el exterior al poder sacar los buses de datos, direcciones y control. Así se pueden configurar sistemas similares a los que utilizan los microprocesadores convencionales, siendo capaces de ampliar la configuración interna del PIC añadiendo nuevos dispositivos de memoria y de E/S externas. Esta facultad obliga a estos componentes a tener un elevado número de patitas comprendido entre 40 y 44. Admiten interrupciones, poseen puerto serie, varios temporizadores y mayores capacidades de memoria, que alcanza los 8k palabras en la memoria de instrucciones y 454 bytes en la memoria de datos. En 2002, Microchip lanzaba la gama alta-mejorada, varios modelos de microcontroladores de gran potencia y velocidad (PIC18FXXX), y se destinan a aplicaciones muy avanzadas. Con un patillaje que llega desde las 28 hasta las 84 patillas, la memoria de código alcanza las 64k palabras y una frecuencia de 40 MHz. El PIC elegido para realización de las prácticas, el 18F2550, pertenece a esta gama y en lo sucesivo, las explicaciones se centrarán en él. En la figura 2.1 se representan las gamas disponibles de PICS.

Fig. 2.1. Gamas de PICS.

Page 16: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 16 -

2.2 Microcontroladores PIC18F2XXX

2.2.1 Características generales. 1º La arquitectura del procesador sigue el modelo Harvard: En esta arquitectura, la CPU se conecta de forma independiente y con buses distintos con la memoria de instrucciones y con la de datos y así permitir su acceso simultaneo. PIC18: Arquitectura Harvard. (Fig. 2.2)

• Espacios separados de memoria de instrucciones y datos. • Incremento de Rendimiento. • Ancho del bus de datos y del programa pueden ser diferentes.

Fig. 2.2

2º Se aplica la técnica de segmentación (“pipe-line”) en la ejecución de las instrucciones: La segmentación permite al procesador realizar al mismo tiempo la ejecución de una instrucción y la búsqueda del código de la siguiente. De esta forma se puede ejecutar cada instrucción en un ciclo (un ciclo de instrucción equivale a 4 ciclos del reloj) excepto las instrucciones de salto (p.e. GOTO, CALL o escribir a PC) que ocupan dos ciclos al no conocer la dirección de la siguiente instrucción hasta que no se haya completado la de bifurcación. (Fig. 3.2 ).

BI3 BI2 BI1

EI3 EI2 EI3

cicloCLK

Fin INSTR0Fin INSTR1

Fin INSTR2 Fig. 2.3

Page 17: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 17 -

3º El formato de todas las instrucciones es de la misma longitud: Las instrucciones de los microcontroladores de la gama media tienen una longitud de 14 bits. Las de la gama alta tienen 1000014 bits y más las de la gama alta. Esta característica es muy ventajosa en la optimización de la memoria de instrucciones y facilita enormemente la construcción de ensambladores y compiladores. 4º Procesador RISC (Computador de Juego de instrucciones reducido): Los modelos de la gama media disponen de un repertorio de 35 instrucciones y 75 los de la gama alta-mejorada. 5º Todas las instrucciones son ortogonales: Cualquier instrucción puede manejar cualquier elemento de la arquitectura como fuente o como destino. 6º Arquitectura basada en un banco de registros: Esto significa que todos los objetos del sistema (puertas de E/S, temporizadores, posiciones de memoria, etc.) están implementados físicamente como registros.

2.2.2 Detalles individuales de los miembros de la familia PIC18. Los PIC de la familia 18FXXXX (gama mejorada) tienen las siguientes diferencias respecto a los microcontroladores de la gama alta: 1. Flash program memory (hasta 32 Kbytes). 2. Canales A/D (10). 3. Puertos I/O (3 puertos bidireccionales y 1 puerto de solo entrada). 4. CCP y CCP mejorado (tiene 2 módulos CCP estándar). Todas las demás características individuales de la familia 18FXXXX; incluyendo al microcontrolador utilizado en este proyecto (PIC18F2550); se resumen en la tabla 3.1.

Page 18: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 18 -

Tabla 2.1. Características de la familia PIC18.

2.2.3 Diagrama de conexionado del PIC 18F2550 (Fig. 2.4)

Fig. 2.4: Diagrama de conexionado del PIC 18F2550

En la figura 2.4 se muestra el diagrama de conexionado de un PIC 18F2550. A continuación se nombran las funciones de todas las patitas:

- MCLR/VPP: Reset externo. Por esta patita se aplica también la tensión / VPP usada en la grabación del programa.

- RA0/AN0: E/S digital o entrada analógica

Page 19: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 19 -

- RA1/AN1: E/S digital o entrada analógica - RA2/AN2/VREF: E/S digital, entrada analógica o salida de la tensión de

referencia - RA3/AN3/ VREF: E/S digital, analógica o entrada externa de VREF - RA4/TOCKI: E/S digital o entrada del reloj para TMR0 - RA5/AN4/SS: E/S digital, analógica o selección del puerto serie síncrono - RB0/INT-RB7: E/S digitales del Puerto B. RB0/INT puede actuar como entrada

de interrupción externa. RB4-RB7 pueden provocar interrupción cuando cambian de estado

- RE0/RD/AN5: E/S digital del Puerto E. Señal de lectura del Puerto paralelo esclavo. Entrada analógica.

- RE1/WR/AN6: E/S digital. Señal de escritura del Puerto paralelo esclavo. Entrada analógica.

- RE2/CS/AN7: E/S digital. Señal de activación del Puerto paralelo esclavo. Entrada analógica.

- VDD: Entrada del positivo de la alimentación - OSC1/CLKIN: Entrada al cristal cuarzo o reloj externo - OSC2/CLKOUT: Salida del cristal. En modo R-C por esta patita sale ¼ FOSC1 - RC0/T1OSO/T1CL1: E/S digital del Puerto C. Conexión del oscilador externo

para el temporizador TMR1 o entrada de reloj para el TMR1 - RC1/T1OSI/CCP2: E/S digital del Puerto C. Conexión del oscilador externo

para TMR1 o salida del modulo 2 de captura/comparación - RC2/CCP1: E/S digital del Puerto C. Salida del modulo 1 de

captura/comparación - RC3/SCK/SCL: E/S digital. E/S de reloj para el Puerto serie síncrono (SSP) de

los módulos SPI a I2C - RC4/SDI/SDA: E/S digital. Entrada de datos serie en el modo USB. E/S de

datos serie en modo I2C - RC5/SD0: E/S digital del Puerto C. Salida de datos serie en el modo USB - RC6/TX/CK: E/S digital. Transmisión serie asíncrona. Entrada de reloj para

comunicación serie síncrona - RC7/RX/DT: E/S digital. Recepción serie asíncrona. Línea de datos en la

comunicación serie síncrona. - RD0/PSP0-RD7/PSP7: E/S digitales del Puerto D. Este Puerto puede trabajar

como Puerto paralelo esclavo para interconexión con un bus de datos de 8 bits de otro microprocesador

Una vez explicado el funcionamiento de cada patita del PIC18F2550, en la figura 2.5 se muestra su arquitectura interna, un diagrama de bloques donde se muestran los periféricos y las líneas de entrada y salida.

Page 20: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 20 -

Fig. 2.5: Arquitectura interna del 18F2550

2.3 PIC18F2XXX: Características Relevantes. Arquitectura PIC18.

• Alto desempeño de 8-bit RISC CPU. • 40 MHz / 10 MIPs de operación sostenida • Operación de 2.0V a 5.5V • Direccionamiento de memoria de programa lineal de hasta 2MB • Direccionamiento de memoria de datos lineal de hasta 4KB • 3 punteros de datos con 5 modos de direccionamiento. • Instrucciones relativas de brinco condicional. • Hasta 10MIPS @ 10MHz con 4X PLL • Flash memory mejorada:

o 2 Segundos de tiempo de programación o Bajo costo del soporte MPLAB-ICD-II o Protección flexible de la memoria del programa.

2.3.1 Organización de la memoria.

2.3.1.1 Memoria de programa Los microcontroladores de la familia PIC18F2XX implementan un contador de programa de 21-bit el cual es capaz de direccionar un espacio de 2-Mbyte de memoria de programa. Si se accesa a una locacion sobre el limite de la memoria implementada físicamente en los 2-Mbyte de direcciones, el CP regresa solamente ‘0’s (instrucción NOP).

Page 21: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 21 -

El PIC18F2550 y el PIC18F4550 tienen cada uno 32 Kbytes de memoria Flash y pueden almacenar hasta 16,384 instrucciones de una palabra. Los PIC18 tienen dos vectores de interrupción. El vector Reset esta en la dirección 0000h y los vectores de interrupción están en las direcciones 0008h y 0018h. El mapa de memoria del PIC18FX550 se muestra en la figura 2.6.

Fig. 2.6. Mapa de memoria del PIC18FX550.

2.3.1.2 Direccionamiento de memoria de programa. En los PICs 18F2550, el contador de programa (CP) del microcontrolador tiene un tamaño de 21 bits, con lo que es posible direccionar un tamaño total de memoria de programa hasta 2M. El contador del programa, al estar formado por 21 bits, está compuesto por tres registros de 8 bits cada uno tal y como se muestra en la figura 2.7. El byte bajo viene del registro de PCL que puede ser leído y escrito, PCL<0> es forzado a ‘0’. El byte alto (PC<15:8>), está alojado en el registro PCH, sobre el que no se puede leer ni escribir, pero se puede acceder a él indirectamente a través del registro PCLATH. El byte superior (PC<20:16>) está alojado en el registro PCU, sobre el que no se puede leer ni escribir, pero se puede acceder a él indirectamente a través del registro PCLATU.

Fig. 2.7: Contador de programa.

Page 22: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 22 -

2.3.1.3 Banco de registros y memoria de datos, EEPROM. La memoria de datos en los PIC18 se implementa como una RAM estática. Cada registro en la memoria de datos es una dirección de 12-bit , permitiendo hasta 4096 bytes de memoria de datos. El espacio de memoria es dividido en 16 bancos de registros que contienen cada uno 256 bytes . Los PIC18F2455/2550/4455/4550 tienen implementados 8 bancos completos para un total de 2048 bytes. La Fig. 2.8 muestra la organización de la memoria de datos para los PIC18. La memoria de datos contiene Registros de Función Especial(SFRs) y Registros de Propósito General (GPRs). Los SFRs son usados para control y estatus del controlador y para funciones de los periféricos, mientras que los GPRs son usados para almacenamiento de datos y operaciones de aplicación de usuario. Cualquier lectura de una locacion no implementada debe ser leida como 0’s. La instrucción set y la arquitectura permiten operaciones a través de los bancos. El total de los datos en la memoria puede ser accesado en los modos de direccionamiento Directo, Indirecto o Indexado.

Fig. 2.8: Banco de registros del PIC 18F2550

La memoria de datos EEPROM de 256 bytes en el PIC18F2550 puede almacenar de forma indefinida cualquier dato que se desee retener cuando se apague la alimentación. Esta memoria es de 8 bits y no forma parte del espacio normal direccionable, y sólo es accesible en lectura y escritura a través de dos registros.

Page 23: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 23 -

2.3.2 Oscilador principal Los PIC18 tienen una estructura de Oscilador Flexible: • Cuatro formas de cristales incluido un PLL de alta precisión para USB. • Dos modos de reloj externo, sobre los 48 MHz • Bloque de oscilador interno: - 8 frecuencias a seleccionar por el usuario, desde 31 kHz hasta 8 MHz • Oscilador secundario usando el Timer1 @ 32 kHz • El microcontrolador permite una opción de doble oscilador y modulo USB corriendo a diferentes velocidades de reloj. La tabla 2.2 muestra los diferentes modos del oscilador del PIC18F2550:

Tabla 2.2

2.3.3 Perro guardián (WDT) El Perro guardián vigila que el programa no deje de ejecutarse según las instrucciones secuénciales del mismo tal como lo ha previsto el diseñador. Para realizar esta labor de vigilancia, el perro guardián da un paseo por la CPU cada cierto tiempo y comprueba si el programa se ejecuta normalmente; en caso contrario, el perro provoca un reset, y reinicia el sistema. Este temporizador está controlado por un oscilador interno independiente, con una temporización nominal de 18 ms, que puede aumentarse asignando el divisor de frecuencia al perro guardián, con el cual, trabajando en el rango mayor, puede alcanzar hasta 3 segundos. Para evitar que se desborde el WDT y genere un reset, hay que recargar o refrescar su cuenta antes de que llegue el desbordamiento. Este refresco, que en realidad consiste en ponerle a 0 para iniciar la temporización, se consigue por software con las instrucciones CLRWDT y SLEEP.

2.3.4 Reset El reset de los microcontroladores puede ser originado por alguna de las siguientes causas: 1ª Conexión de la alimentación (POR: Power-On-Reset) 2ª Activación de la patita MCLR (Master Clear Reset) durante una operación normal.

Page 24: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 24 -

3ª Activación de MCLR en el estado de Reposo o SLEEP. 4ª Desbordamiento del Perro guardián. 5° Instrucción RESET. Como se aprecia en el esquema de la figura 2.9, cualquiera de estas posibilidades introduce un nivel bajo en la entrada S del flip-flop y pone en marcha un temporizador propio que, al cabo de 18 ms, origina un flanco ascendente en la salida Q que supone la generación del reset interno. El bloque temporizador de la figura produce un retraso en la generación del reset para dar tiempo a que se estabilice la tensión VDD de alimentación y la frecuencia del oscilador principal. Este temporizador está gobernado por un oscilador RC independiente.

Fig.2.9: Diagrama de bloques del circuito de Reset

2.3.5 Modo de reposo (Sleep) Este modo especial de funcionamiento ocasiona un consumo de energía muy bajo y se entra en él con la ejecución de la instrucción SLEEP. Con esta instrucción ocurren las siguientes acciones: 1. Si el perro guardián está activado, se refrescara su valor (se borra) pero sigue funcionando normalmente. 2. El oscilador principal del sistema deja de funcionar. 3. Los puertos de E/S mantienen el mismo estado que tenían antes de ejecutar SLEEP.

Page 25: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 25 -

4. Los bits TO y PD del registro de estado toman los valores 1 y 0, respectivamente. Para salir del estado de Reposo hay dos posibilidades: 1ª Se activa la patita MCLR y se genera un reset. 2ª El Perro guardián que estaba activo cuando se ejecuto SLEEP se desborda y genera un reset. Para conocer la causa por la que se ha salido del Estado de Reposo se analizan los bits TO y PD.

2.3.6 Interrupciones. Una interrupción consiste en una detención del programa en curso para realizar una determinada rutina que atienda la causa que ha provocado la interrupción. Es como una llamada a subrutina, que se origina por otra causa que por una instrucción del tipo CALL. Tras la terminación de la rutina de interrupción, se retorna al programa principal en el punto en que se abandono. Las causas que originan una interrupción pueden ser externas, como la activación de una patita con el nivel lógico apropiado, e internas, como las que pueden producirse al desbordarse un temporizador, como el TMR0. En las aplicaciones industriales, las interrupciones son un producto muy potente para atender los acontecimientos físicos en tiempo real. Las interrupciones evitan que la UCP explore continuamente el nivel lógico de una patita o el valor de un contador. Los PIC18F2XXX tienen múltiples fuentes de interrupción, sus prioridades son asignadas respecto a su fuente . los vectores de alta prioridad están en la dirección 000008h y los vectores de baja prioridad están en 000018h. Hay diez registros para la operación de control de las interrupciones, estos son:

RCON INTCON INTCON2 INTCON3 PIR1, PIR2 PIE1, PIE2 IPR1, IPR2

Cada fuente de interrupción tiene tres bits de control y operación. La función de estos bits es : • El bit de bandera indica que un evento de interrupción ha ocurrido. • El bit de habilitación permite brincar en la ejecución de un programa a la dirección del vector de interrupción cuando el bit de bandera esta en set. • El bit de prioridad informa si es de alta o baja prioridad.

Page 26: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 26 -

En la figura 2.10 se ofrece el esquema lógico que controla la generación de la interrupción, cuando aparece un nivel alto en su línea INT de salida.

Fig. 2.10: Lógica de control para la generación de la interrupción

Cada causa de interrupción esta controlada mediante dos líneas o señales. Una de ellas actúa como una bandera de señalización que indica si se ha producido o no el acontecimiento, mientras que la otra es el permiso o prohibición de la interrupción en si.

2.4 Periféricos. Las patitas de comunicación de los microcontroladores se agrupan en conjuntos llamados puertos porque dejan entrar y salir la información al procesador o pines. Dichos puertos deben soportar las líneas que precisan los distintos periféricos que hay integrados en la cápsula. Cuantos más periféricos dispone el modelo, exige más líneas de comunicación y mayor numero de patitas, con más multiplexado de señales. Esto es lo más destacado de los periféricos de los PIC18: • Alta corriente de alimentación /25 mA • Tres interrupciones externas • Cuatro módulos de Timer (Timer0 a Timer3) • Módulos de Capture/Compare/PWM (CCP) : - Capture es de 16-bit, máx. resolución 6.25 ns (TCY/16)

Page 27: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 27 -

- Compare es de 16-bit, máx. resolución 100 ns (TCY) - Salida de PWM : su resolución es 1 a 10-bit • Modulo de Capture/Compare/PWM (ECCP) - Múltiples modos de salida - Polaridad seleccionable - Programación de tiempo muerto - Auto-cerrado y Auto-Restaurado • Modulo USART mejorado: - Soporta bus LIN • Modulo Master Synchronous Serial Port (MSSP) soporta 3-cables SPI™ ( 4 modos) y modo maestro –esclavo de I2C™ • 10-bit, hasta 13-canales del modulo convertidor Análogo-a-Digital (A/D) • Doble comparador análogo con entrada multiplexada. Ya que el Modulo de Anchura de Pulsos (PWM), lo ocupamos para mover los servomotores del mini-robot, explicaremos con mas detalle el funcionamiento del mismo.

2.4.1 Modulo de Anchura de Pulsos (PWM) En el modo de Pulse-Width Modulation (PWM) , el pin CCPx produce hasta 10-bit de resolucion PWM de salida. Desde el pin CCP2 es multiplexado con el seguro de datos del PORTB o PORTC, el bit apropiado del TRIS debe ser limpiado para hacer del pin CCP2 una salida. La Figura 2.11 muestra el diagrama de bloques simplificado del modulo CCP en el modo PWM.

Fig. 2.11

La salida PWM (Figura 2.11.1) tiene un tiempo base (periodo) y un tiempo en el que la salida se mantiene en un nivel alto (duty cycle). La frecuencia del PWM es el inverso del periodo (1/periodo).

Page 28: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 28 -

Fig. 2.11.1

2.4.1.1 Período PWM. El período del PWM se especifica escribiendo en el registro PR2. El período PWM puede ser calculado usando la siguiente ecuación:

La frecuencia PWM es definida como 1/ [PWM periodo]. Cuando el TMR2 es igual a PR2, tres eventos pueden ocurrir en el siguiente ciclo de reloj: • TMR2 es limpiado • El pin CCPx se pone a set (exceptuando: si el ciclo de trabajo de PWM = 0%)

2.4.1.2 Ciclo de Trabajo del PWM. El ciclo de trabajo del PWM se especifica escribiendo en el registro CCPRxL y en el CCPxCON<5:4> bits. Arriba de 10-bit de resolución estan disponibles. El CCPRxL contiene los ocho bits MSbs y el CPxCON<5:4> contiene los dos bits LSbs. El valor de los 10-bit es representado por CCPRxL:CCPxCON<5:4>. La siguiente ecuación es usada para calcular el ciclo de trabajo del PWM en tiempo:

CCPRxL y CCPxCON<5:4> pueden ser escritos en cualquier tiempo, pero el valor del ciclo de trabajo no esta asegurado dentro del CCPRxH hasta que una comparación entre PR2 y TMR2 ocurra (i.e., se complete un periodo). En modo PWM, CCPRxH es un registro de solo lectura.

2.4.1.3 Implementación del PWM. Los siguientes pasos deben ser tomados en cuenta, cuando configuremos el registro (modulo) CCP para la operación del PWM: 1. Asignar el periodo del PWM escribiendo en el registro PR2 . 2. Asignar el ciclo de trabajo del PWM escribiendo en el registro CCPRxL y en el CCPxCON<5:4> bits.

Page 29: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 29 -

3. Hacer del pin CCPx una salida, limpiando adecuadamente el bit TRIS. 4. Asignar el valor de preescalamiento del TMR2, luego habilitar el Timer2 escribiendo al registro T2CON. 5. Configurar el modulo CCPx para la operación del PWM. La tabla 2.3 muestra los registros relacionados con el Modulo de Anchura de Pulsos y con el Timer 2.

Tabla 2.3: Registros asociados con el PWM y el TIMER2.

2.4.2 Interfaz de comunicación Universal Serial Bus (USB).

2.4.2.1 Características del modulo USB (Universal Serial Bus) de los PIC18. • Cumple con los parámetros USB V2.0 • Baja velocidad (1.5 Mb/s) y alta velocidad (12 Mb/s) • Soporta transferencias de lotes de Control, interrupción y sincronización. • Soporta hasta 32 endpoints (16 bidireccionales) • 1-Kbyte dual de acceso a RAM para USB • Circuito interno USB de transmisión-recepción con regulador de voltaje • Interfaz para un circuito externo USB de transmisión-recepción Los PIC18FX455/X550 incorporan un completo modulo de comunicación compatible con el USB Serial Interface Engine (SIE) esto permite una rápida comunicación entre cualquier host USB y el microcontrolador PIC. El SIE puede ser una interfaz directa al puerto USB utilizando el transceptor interno, o puede ser conectado a través de un transceptor externo. Un regulador interno de 3.3V también esta disponible para alimentar al transceptor interno en aplicaciones que necesiten 5V.

Page 30: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 30 -

Algunas características especiales de hardware están incluidas para un mejor desempeño. La Memoria de doble puerto en el espacio de la memoria de datos (USB RAM) provee el acceso directo a memoria entre el microcontrolador y el SIE. Descriptores de buffer también están disponibles permitiendo al usuario programar los endpoint usando el espacio de la USB RAM . Un SPP(Streaming Parallel Port) provee el soporte para una transferencia ininterrumpida de un gran volumen de datos, tales como datos asíncronos a buffer externos de memoria. La Fig. 2.12 presenta una perspectiva general del periférico USB .

Fig. 2.12. Perspectiva general del puerto periférico USB en el PIC 18F2550.

Los PIC18F2550 incorporan un completo modulo de comunicación USB (Universal Serial Bus), el cual cumple con la especificación USB 2.0, este modulo soporta los tipos de transferencia de datos de baja y alta velocidad. La operación asíncrona del reloj dual, permita al modulo USB de los PIC18 trabajar a alta frecuencia, mientras que el resto de los microcontroladores solo tienen un reloj que proviene de un oscilador interno de bajo poder. Además de que esta disponible como fuente de reloj, el bloque de oscilador interno provee una estable referencia de reloj, esto da a la familia PIC18 la característica de operación robusta.

2.4.2.2 Control y estatus del USB. La operación del modulo USB es configurada y manejada a través de tres registros de control. En suma, un total de 19 registros son usados para el manejo de transferencias vía USB. Estos registros son: • USB Control register (UCON) • USB Configuration register (UCFG) • USB Transfer Status register (USTAT)

Page 31: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 31 -

• USB Device Address register (UADDR) • Frame Number registers (UFRMH:UFRML) • Endpoint Enable registers 0 through 15 (UEPn)

2.5 Lectura y escritura de la memoria de datos EEPROM. En la familia de microcontroladores 18F2XXX tanto la memoria EEPROM de datos como la memoria de programa FLASH puede ser modificada sin necesidad de utilizar un programador exterior. Además para controlar el proceso de lectura y escritura de la memoria EEPROM y FLASH se dispone de dos registros: el EECON1 y el EECON2.

2.5.1 Lectura de la memoria de datos. Para leer un dato de la EEPROM, el registro EEADR es cargado con la dirección de la EEPROM donde se encuentra el dato y luego el microcontrolador copia el dato de dicha posición a EEDATA. A continuación hay que poner a 0 el bit EEPGD (EECON1<7>), para apuntar a la memoria de datos EEPROM. Una vez que se ponga a 1 la bandera RD (EECON1<0>), el dato estará disponible en el registro EEDATA, donde permanecerá hasta la siguiente escritura o lectura.

2.5.2 Escritura de la memoria de datos La escritura, que es en realidad una programación, es más compleja por razones de seguridad. Antes de escribir un dato en la EEPROM, debe ponerse a 1 la bandera de activación de escritura WR (EECON1<1>). Para transferir el dato desde el registro EEDATA a la dirección de la EEPROM a la que apunta EEADR, debe ejecutarse una secuencia obligatoria indicada por el fabricante. Posteriormente, cuando se ha realizado con éxito la operación de la bandera EEIF (PIR1<7>) se pone a 1. Si no lo hace, el almacenamiento ha sido incorrecto y no se ha realizado. Datos en la memoria EEPROM:

Tamaño de rangos entre 64 a 1024 bytes. Ciclos de borrado/escritura de 1 M (típicamente) Retención de datos >40 años. Lectura y escritura de limite un byte Borrar antes de escribir Automático Protección de código y de escritura interna Acceso vía los registros EEADR, EEDATA y EECON’s.

Page 32: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 32 -

Capítulo 3. Diseño del mini-robot recolector de objetos. En la actualidad la automatización de procesos se ha convertido en una necesidad para aumentar la eficiencia de estos, por ello el sustituir personal humano por autómatas dentro de las líneas de proceso es cada vez mas importante, dando como resultado la reubicación del personal humano en áreas de mantenimiento y supervisión de los mecanismos automáticos, además de proveer mayores ganancias a la empresa el equipo automático ofrece mayor seguridad a cada proceso donde se le asigna. Orientados a la automatización de un proceso de recolección de objetos y atendiendo los requerimientos que este conlleve. Se pretende diseñar un robot que genere tal propósito elevando así la eficiencia del proceso y reduciendo la presencia del hombre. Basados en el uso de un microprocesador se pretende analizar las diferentes variables de posición para que mediante el principio del seguidor de línea, se siga una ruta en la cual se encontraran los objetos que mediante detección infrarroja se localizará y efectuará un proceso mecánico de obtención para su transporte y posterior almacenamiento, evitando por completo la presencia de personal humano. Tomando en cuenta las limitaciones económicas se pretende efectuar en primera instancia un modelo a escala con el fin de obtener resultados y si fuesen los deseados se planeara la construcción de varios equipos al final.

3.1 Descripción de los componentes usados en el mini-robot

3.1.1 Sensores usados

3.1.1.1 Sensor Reflexivo IS471F

Descripción: Sensor basado en el dispositivo SHARP IS471F (Fig. 3.1) inmune a interferencias de luz normal. Este sensor incorpora un modulador/demodulador integrado en su carcasa y a través de su patilla 4 controla un diodo LED de infrarrojos externo, modulando la señal que este emitirá, para ser captada por el IS471F que contiene el receptor. Cuando un objeto se sitúa enfrente del conjunto emisor/receptor parte de la luz emitida es reflejada y demodulada para activar la salida en la patilla 2 que pasará a nivel bajo si la señal captada es suficientemente fuerte. El uso de luz IR modulada tiene por objeto hacer al sensor relativamente inmune a las interferencias causadas por la luz normal de una bombilla o la luz del sol.

Fig. 3.1

Funcionamiento: Como puede verse en el esquema, el sensor se alimenta por sus patitas 1 y 3 y estas corresponden a Vcc y Gnd respectivamente, la patita 2 es la salida del detector y la patita 4 es la salida que modula al led emisor externo. Mediante el potenciómetro P1 se varía la distancia a la que es detectado el objeto. Contra mas baja sea la resistencia de este potenciómetro, mas intensa será la luz emitida por el diodo de IR y por lo tanto mayor la distancia a la que puede detectar el objeto.

Page 33: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 33 -

En la figura 3.2 vemos el circuito necesario para hacer funcionar al sensor.

Fig. 3.2

Usos: Para detección de obstáculos por reflexión. Ideas y mejoras: En el circuito anterior lo que vemos es un detector de distancia fija ajustable por un potenciómetro, pero seria posible hacerlo de varias distancias o incluso un detector gradual de distancias. Para varias distancias se podría conmutar varias resistencias y así calcular la distancia del objeto haciendo pruebas antes, y creando una tabla de equivalencias. Para el detector gradual también seria posible controlando la corriente que le llega al diodo emisor mediante un conversor D/A y un circuito de potencia basado en algún transistor, todo esto controlado por un microcontrolador, que para nuestro proyecto es el PIC 18F2550.

3.1.1.2 Sensor Reflexivo CNY70 Descripción: El CNY70 es un pequeño dispositivo con forma de cubo y cuatro patitas (fig. 3.3) que aloja en su interior un diodo emisor de infrarrojos que trabaja a una longitud de onda de 950 nm. y un fototransistor (receptor) estando ambos dispuestos en paralelo y apuntando ambos en la misma dirección, la distancia entre emisor y receptor es de 2.8 mm., están separados del frontal del encapsulado por 1 mm.

Fig. 3.3

El la figura 3.4 vemos la disposición interna del CNY70 mirando el encapsulado desde arriba, así pues tenemos el diodo emisor de infrarrojos a la izquierda y el fototransistor a la derecha.

Fig. 3.4

Page 34: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 34 -

Funcionamiento: El fototransistor conducirá más, mientras más luz reflejada del emisor capte por su base. La salida de este dispositivo es analógica y viene determinada por la cantidad de luz reflejada, así pues para tener una salida digital se podría poner un disparador Trigger Schmitt y así obtener la salida digital pero esto tiene un problema, y es que no es ajustable la sensibilidad del dispositivo.

Usos: Comúnmente utilizado en los robots rastreadores (Sniffers) para detección de líneas pintadas sobre el suelo, debido principalmente a su baja distancia de detección.

3.1.1.3 Sensor Mecánico Bumper

Descripción: El bumper es un conmutador de 2 posiciones con muelle de retorno a la posición de reposo y con una palanca de accionamiento con tamaño según el modelo elegido (Fig. 3.5). Funcionamiento: En estado de reposo la patita común (C) y la de reposo (R) están en contacto permanente hasta que la presión aplicada a la palanca del bumper hace saltar la pequeña pletina acerada interior y entonces el contacto pasa de la posición de reposo a la de activo (A), se puede escuchar cuando el bumper cambia de estado, porque se oye un pequeño clic, esto sucede casi al final del recorrido de la palanca.

Fig. 3.5

Usos: Se usan para detección de obstáculos por contacto directo. No son adecuados para robots de alta velocidad ya que cuando detectan el obstáculo ya están encima y no da tiempo a frenar el robot. Ideas y mejoras: Pocas mejoras puede tener un dispositivo tan simple pero una buena idea seria utilizar un multiplexor para poner mas bumpers de control en nuestro robot y usar el mínimo de líneas de control.

3.1.2 Servomotores

Descripción: El servo es un pequeño pero potente dispositivo que dispone en su interior de un pequeño motor con un reductor de velocidad y multiplicador de fuerza, también dispone de un pequeño circuito que gobierna el sistema (Fig. 3.6). El recorrido del eje de salida es de 180º en la mayoría de ellos, pero puede ser fácilmente modificado para tener un recorrido libre de 360º y actuar así como un motor.

Fig. 3.6

Funcionamiento: El control de posición lo efectúa el servo internamente mediante un potenciómetro que va conectado mecánicamente al eje de salida y controla un PWM (modulador de anchura de pulsos) interno para así compararlo con la entrada PWM externa del servo, mediante un sistema diferencial, y así modificar la posición del eje de salida hasta que los valores se igualen y el servo pare en la posición indicada, en esta posición el motor del servo deja de consumir corriente y tan solo circula una pequeña corriente hasta

Page 35: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 35 -

el circuito interno, si forzamos el servo (moviendo el eje de salida con la mano) en este momento el control diferencial interno lo detecta y envía la corriente necesaria al motor para corregir la posición.

Para controlar un servo tendremos que aplicar un pulso de duración y frecuencia específicas. Todos los servos disponen de tres cables dos para alimentación (Vcc, Gnd) y otro cable para aplicar el tren de pulsos de control que harán que el circuito de control diferencial interno ponga el servo en la posición indicada por la anchura del pulso.

En la tabla 3.1 están indicados los valores de control y disposición de cables de varias marcas que comercializan servos.

Duración pulso (ms) disposición de cables Fabricante min. neutral. máx.. Hz + batt -batt pwm.

Futaba 0.9 1.5 2.1 50 rojo negro blanco Hitech 0.9 1.5 2.1 50 rojo negro amarillo

Graupner/Jr 0.8 1.5 2.2 50 rojo marrón naranja Multiplex 1.05 1.6 2.15 40 rojo negro amarillo

Robbe 0.65 1.3 1.95 50 rojo negro blanco Simprop 1.2 1.7 2.2 50 rojo azul negro

Tabla 3.1 La figura 3.7 muestra la posición del servo con los diferentes anchos de pulso del PWM.

Fig. 3.7

3.1.3 Circuito de prueba para ver el funcionamiento de los motores del mini-robot Ahora que describimos los componentes utilizados, veremos como está formado el conjunto de sensores, así como los sistemas básicos para su manejo. Vamos a construir un sistema de control para conseguir un móvil reactivo, que no está controlado por un micro controlador, pero que nos servirá como paso previo para obtener conocimientos sobre cómo hacer funcionar estos “circuitos”.

Page 36: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 36 -

Comenzaremos de una manera sencilla, construyendo un circuito que dependiendo de una señal de entrada “0” o “1” haga girar un motor de corriente continua hacia delante o hacia atrás, es decir en sentido horario o en sentido antihorario. El circuito que utilizamos para el primer robot reactivo no utiliza ningún microcontrolador y lo hemos diseñado así para empezar a comprender el funcionamiento de los sensores de infrarrojos CNY7O, cuyas características se incluyen en este mismo reporte y el circuito de control de potencia para los motores. El primer circuito que hemos utilizado ha sido el de la figura 3.8, que no es más que un puente en H de transistores controlado por los sensores CNY7O y unos inversores Schmitt Trigger, que se encargan de conformar las señales del sensor a niveles lógicos más estables.

Fig. 3.8

Para los sensores CNY70 son típicos los dos montajes que se indican en la figura 3.9. Los valores de las resistencias comúnmente son: RT = 10KΩ para el fototransistor, mientras que para el diodo emisor es RD = 220Ω.

Fig. 3.9

Page 37: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 37 -

El circuito por el que nos hemos inclinado en el diseño es el de la opción “a”, de manera que cuando el sensor esté sobre el fondo negro la luz es absorbida y el fototransistor se mantiene en corte, por lo que a la salida el circuito entrega un nivel bajo, mientras que cuando el sensor esté sobre el fondo blanco que refleja la luz, el fototransistor se satura y a la salida del circuito obtenemos un nivel alto. El funcionamiento del circuito “b” es justamente al contrario, cuando el sensor está sobre la línea negra, el fototransistor permanece en corte y entregando a la salida un nivel alto en el colector, mientras que si se encuentra sobre un fondo blanco, el haz infrarrojo se refleja y el fototransistor se satura entregando, a la salida del circuito, un nivel bajo. Para obtener señales “digitales” desde estos sensores utilizamos compuertas inversoras Schmitt Trigger, el chip que utilizamos es el CD40106 que tiene la ventaja de que cuenta con seis inversores de este tipo. Estos dispositivos tienen una característica de transferencia, como la que se muestra en la figura 3.10.

Fig. 3.10

En esta curva se aprecia que si la tensión de entrada asciende desde 0V hasta un nivel alto, la transición se produce siguiendo la curva A y se produce para el valor VT+ denominado umbral ascendente. Por el contrario, si la entrada está a un nivel alto y se va disminuyendo hasta 0V, la transición se produce siguiendo la curva B, cuando se alcanza el denominado umbral descendente VT-. Los valores de VT+ y de VT- para las compuertas de tecnología TTL, son de 4,7V y 0,9V respectivamente, pero para el caso del CD40106 depende de la tensión de alimentación y puede tomar los valores de la tabla 3.2.

Tabla 3.2.

Page 38: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 38 -

Estas compuertas son de gran utilidad cuando se desea controlar un circuito digital con señales provenientes de sensores como los infrarrojos. En la figura 3.11 se muestra cómo actúa un circuito no inversor, el circuito frente a una señal que no es puramente digital. Cuando la señal V1 alcanza el valor VT+ la salida V0 cambia a un nivel alto, y no vuelve a tomar un nivel bajo hasta que la entrada no llegue a VT-.

Fig. 3.11

3.1.4 Sistema de Actuación.

3.1.4.1 Control de Motores En nuestro mini-robot, los motores están controlados por un puente en H (Fig. 3.8), formado por cuatro transistores de potencia montados en antiparalelo. Los transistores trabajan en conmutación y se comportan como interruptores controlados por la señal que les llega desde el sensor a través del inversor. Su funcionamiento es el siguiente: en la figura 3.12 vemos el puente de transistores controlado por el sensor y su inversor asociado.

Fig. 3.12.

Si el sensor con su puerta inversora entrega un nivel alto, a la base de los transistores TR3 y TR2 (NPN y PNP) les llega respectivamente un nivel alto y un nivel bajo, lo que les hace entrar simultáneamente en saturación mientras que a TR1 y TR4 que les llegan las mismas señales se quedan en corte por ser de signo contrario (PNP y NPN respectivamente), en estas condiciones el motor gira en un sentido como puede verse en la figura 3.13(a). Cuando cambian el valor de la señal que entrega el sensor, los transistores que se saturan

Page 39: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 39 -

son TR1 y TR4, mientras que los que pasan al estado de corte son TR3 y TR2, como puede verse en la figura 3.13 (b).

Fig. 3.13(a) Fig. 3.13(b) El problema de este tipo de circuitos es la caída de tensión real que hay en los transistores y que habrá que compensarla con la batería, que por supuesto va disminuyendo en la medida que ésta se va agotando. Para evitar estos problemas en el diseño final hemos utilizado un puente integrado, el LM293B. Este circuito es un driver de 4 canales, capaz de proporcionar una corriente de salida de hasta lA por canal. Cada canal es controlado por señales de entrada compatibles TTL y cada pareja de canales dispone de una entrada de habilitación que desconecta las salidas de los mismos. El circuito dispone, además, de una patita para la alimentación de las cargas que se están controlando, de forma que dicha alimentación es independiente de la lógica de control. En la figura 3.14 se muestran su encapsulado de 16 pines.

Fig. 3.14

La tabla 3.3 muestra su distribución de patillas y la descripción de las mismas.

Page 40: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 40 -

Tabla 3.3.

3.1.4.2 Control de Motores por Medio de Microcontrolador.

Al construir el mini-robot se observa que enseguida toma velocidad, ya que tiene poco coeficiente de reducción de los motores. Haciendo un análisis detallado del funcionamiento del driver L293 para el manejo de motores de corriente continúa, gobernado por un PIC microcontrolador, hemos elegido el P1C18F2550.

Las salidas OUT se asocian con las correspondientes IN. Las señales de salida son amplificadas respecto a las de entrada tanto en tensión, como en corriente (máximo lA), la tabla 3.4 es la de funcionamiento para cada uno de los drivers.

Tabla 3.4

En la tabla 3.5 se describen los valores absolutos máximos del driver L293B.

Tabla 3.5

Page 41: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 41 -

Veamos, seguidamente, algunas formas de conectar los motores de corriente continua al driver del L293B.

3.1.4.3 Giro de dos motores en un único sentido En la figura 3.15 se muestra el modo de funcionamiento de dos motores de corriente continua que giran en un único sentido: • El motor M1 se activa al poner a nivel bajo la entrada de control A. • El motor M2 se activa al poner a nivel alto la entrada de control B

Fig. 3.15

En la figura anterior vemos la conexión de dos motores de continua, M1 activo por “0” y M2 por “1”. En la tabla 3.6 vemos el modo de funcionamiento del circuito. Los diodos Dl y D2, están conectados para proteger el circuito cuando se generan los picos de arranque de los motores. Si no se trabaja a máxima potencia de trabajo, pueden eliminarse del circuito.

Tabla 3.6.

3.1.5 Montaje del Driver L293B con el Microcontrolador PIC Para comprobar el funcionamiento del driver L293B con el de un microcontrolador, utilizamos el P1C16F84A. También usamos un motor de los que ya hemos empleado, un inversor tipo Schmitt Trigger del chip CD40106 y nuestro driver.

Page 42: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 42 -

El circuito utilizado es el de la figura 3.16, que muestra el esquema del montaje para el control de motores con el driver L293B y el P1C16F84A, para el proyecto solamente se sustituyo el PIC16F84A por el PIC 18F2550, ya que la conexión a las patillas es prácticamente la misma.

Fig. 3.16

Enseguida se encuentran los esquemas de las placas usadas en el mini-robot para la etapa de potencia y la de control, así como la explicación de sus conexiones.

Page 43: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 43 -

3.1.6 Etapa de Potencia. Placa en donde se controla la etapa de potencia del mini-robot (Fig. 3.17 (a) y (b)), en este circuito reducimos el voltaje de 9V de la pila a 5V, que es el voltaje que necesitamos para alimentar todo el circuito.

(a) (b)

Fig. 3.17. Placa para la etapa de potencia: (a) Diseño del circuito. (b) Circuito armado.

Alimentación Principal de la pila de 9V. Switch para alimentar el circuito; este se encuentra colocado en la parte inferior del mini-robot. Cabezal colocado para conectar un led y así ver que el circuito esta activado. (En el circuito final no se coloco el led, porque al encender el mini-robot tiene ya cargado una determinada secuencia a realizar, por lo cual si no se realiza esta secuencia es claro que hay problemas con la alimentación) Alimentación para los otros 2 circuitos del mini-robot. Cabezales para la conexión de los motores IN3, IN4 Se usan para el motor de arranque, las señales de control se dan por medio del puerto C del PIC es decir de RC1 y RC0. IN1, IN2 Se usan para el motor de dirección, las señales de control se dan por medio del puerto C del PIC es decir de RC6 y RC7.

Page 44: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 44 -

3.1.7 Etapa de Control. Placa que controla todas las actividades (Fig. 3.18 (a) y (b)), es decir es el cerebro del mini-robot; aquí se encuentra colocado el PIC 18F2550 que contiene el programa que se encargara de dar todas las instrucciones para el correcto funcionamiento.

(a) (b)

Fig. 3.18. Placa para la etapa de control: (a) Diseño del circuito. (b) Circuito armado. Cabezal que se conecta a la mano del mini-robot, el potenciómetro es para variar la distancia de detección del sensor de proximidad que se encuentra colocado en este mismo. Cabezales en los que se conectan los 2 servomotores, que se usan para controlar el brazo y la mano, estos reciben las señales de control PWM de los puertos C y B

C RC2 para el servo de la mano B RB3 para el servo del brazo

Jumpers colocados para la alimentación de los servomotores; se colocaron estos previendo el consumo de corriente, es decir se puede realizar una conexión externa de alimentación independiente a la que alimenta a todo el circuito; reduciendo considerablemente el consumo de corriente. Conector colocado para programar el PIC sin necesidad de retirarlo del circuito Puerto A del PIC usado para controlar los sensores estos son:

• RA0 Controla el sensor de choque izquierdo • RA1 Controla el sensor de choque derecho • RA2 Controla el sensor detector de color negro • RA3 Controla el sensor detector de objetos

Conectores de los sensores de choque.

Page 45: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 45 -

3.1.7.1 Placa del sensor de color negro. En esta placa se instalo el sensor de color negro (Fig. 3.19 (a) y (b)) y con la conexión del chip CD40106 obtenemos mayor sensibilidad en la detección del color; mismo que se usa para el sensor de localización de objetos colocado en la pinza del mini-robot.

(a) (b)

Fig. 3.19. Placa del sensor de color negro: (a) Diseño del circuito. (b) Circuito armado.

Page 46: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 46 -

Capítulo 4. Implementación del mini-robot. Para la implementación del mini-robot recolector de objetos es necesario definir exactamente todas y cada una de las partes que componen el mini-robot y que vamos a utilizar para controlar el proceso, recordando que los sensores que utilizan señales infrarrojas se encuentran en dos ubicaciones: en el seguidor de línea y en la pinza de recolección.

4.1 El seguidor La detección de la marca del piso esta basada en la capacidad de los colores para reflejar la luz, basándose en eso se ha decidido utilizar el CNY70 que es un sensor de proximidad, constituido principalmente de una fuente emisora de luz y un foto detector que recibe la señal luminosa reflejada por las marcas de color negro que se encuentren en el piso, la principal problemática será la calibración para que pueda detectar las marcas de color negro brindando una señal lógica 0 o 1 (0 y 5V respectivamente) dependiendo si esta presente la marca o no para poder acoplarla directamente al PIC que se encargara de efectuar el proceso de toma de decisiones necesario para controlar los motores que se encargaran de la realización del desplazamiento de la unidad, figuras (4.1(a) y (b)).

(a) (b)

Fig. 4.1(a) y (b). Circuito seguidor ya implementado en el mini-robot .

4.2 La pinza recolectora Esta hecha en baquelita y se encuentra controlada por 1 servomotor, figuras (4.2(a) y (b)), el cual le dará el soporte necesario para realizar el esfuerzo mecánico con el que podrá abrir o cerrar la pinza, dependiendo si ha encontrado o no un objeto en su trayecto, cuando la unidad motriz se detenga procederá a la sujeción y carga de dicho objeto. Contara con un sensor reflexivo IS471F, el cual estará conformado por una fuente infrarroja y un fototransistor que crearan una barrera que al ser interrumpida indique que se ha encontrado con algún objeto el cual deberá recolectar para después continuar su trayecto.

Page 47: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 47 -

(a) (b) Fig. 4.2(a) y (b). Pinza recolectora implementada en el mini-robot .

4.3 El detector de obstáculos os en los que se podrá encontrar el motor que se

(b) l mini-robot .

Tabla 4.1. Sentido de l ores seg obstá ulos.

Detector1 Detector2 Motor1 Motor2

Está basado en los diferentes estadencargan de la tracción: adelante y atrás para controlar el desplazamiento en línea recta y dirección derecha y dirección izquierda para los giros a la derecha e izquierda respectivamente. Se cuenta con 2 detectores colocados en los costados delanteros del robot, figuras (4.3(a) y (b)), cada uno dará una señal que se procesara de acuerdo a la tabla 4.1:

(a)

Fig. 4.3(a) y (b). Detector de obstáculos implementado en e

0 0 Atrás ---- 0 1 Atrás

Derecha

1 0

A delante Izquierda 1 1 Adelante ----

os mot ún la presencia de c

Page 48: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 48 -

4.4 El brazo up-down andara la señal de interrupción que inhibirá el funcionamiento

n espera , hasta que el proceso de recolección haya concluido,

(a) (b)Fig. 4.4(a) y (b). El brazo up

4.5 Suministro dn un batería de 9V, la cual estará ubicada ) y (b)). Al mismo tiempo se proporciona

Fig. 4.5(a) y (b). Circuito para el suminist

El sensor detector de color mde los motores dejándolos eeste consiste en lo siguiente: al detenerse el mini-robot, el brazo up-down, también hecho en baquelita y gobernado por 1 servomotor, siempre al inicio se encuentra en su posición más alta, desciende a la posición mas baja, permitiendo a la pinza la detección del objeto y su sujeción, inmediatamente el brazo up-down comienza a elevar el objeto sujetado por la pinza, por encima del chasis del robot hasta quedar en su posición más alta, en este momento se activa una señal que accionara el proceso de continuar.

-down implementado en el mini-robot .

e energía y movimiento El circuito de control se encontrara alimentado coen la parte superior del mini-robot (Figuras 4.5(auna alimentación de energía para el circuito de potencia, refiriéndose así a la parte donde estarán interviniendo los motores que generan el desplazamiento así como los servomotores. Debido a sus características tanto de programación como de aplicación, la unidad recolectora de objetos puede ajustarse a desempeñar una diversa gama de aplicaciones, mediante pequeñas variaciones en la programación y la sustitución de los transductores para trabajar con diferentes variables de control.

(a) (b) ro de energía implementado en el mini-robot.

Page 49: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 49 -

4.6 Diagrama de flujo

.6) muestra los pasos a seguir para la elaboración del programa or de objetos

Fig. 4.6. Diagrama de flujo del comportamiento del mini-robot recolector.

El diagrama de flujo (Fig. 4final del mini-robot recolect Inicio Detecto

Marca

Interrupción del des

Avanza de frente plazamiento

Coloca brazo en su posición mas baja

Detecta el objeto y lo levanta

Detecto marca

Brazo en su posición más

alta

No

Si

No Si

No

Avanza de frente

Si

Page 50: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 50 -

4.7 Funcionamiento del mini-robot. Estos son los pasos del funcionamiento del mini-robot recolector de objetos, de acuerdo al

l inicio del funcionamiento del mini-robot recolector de objetos, el brazo up-down se posición más alta, como lo muestra la figura 4.7.

diagrama de flujo: Paso 1: Aeleva a su

Fig. 4.7.

Paso 2:

l mini-robot avanza hasta detectar la marca de color negro, en donde se detiene, como lo a figura 4.8.

Emuestra l

Fig. 4.8.

Page 51: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 51 -

Paso 3:

l brazo up-down se mueve hacia su posición mas baja, permitiendo al sensor instalado en e en medio de la pinza, detectar el objeto, tal como lo muestra la figura 4.9.

Ela parte d

Fig. 4.9.

aso 4:

l sensor de la pinza detecta el objeto y manda una señal al microcontrolador, el cual ecuencia para cerrar la pinza y sujetar el objeto, como lo muestra la figura 4.10.

P Einicia la s

Fig. 4.10.

Page 52: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 52 -

Paso 5:

l sujetar la pinza el objeto, el brazo up-down se eleva hasta su posición más alta, como lo a figura 4.11.

Amuestra l

Fig. 4.11.

Paso 6 El mini-robot recolector continua su recorrido con el objeto sujetado por la pinza, como lo

la figura 4.12. muestra

Fig. 4.12.

De acuerdo a la información antes descrita, nuestro programa “PFinal.asm” para el control del mini-robot recolector de objetos se m ntinuación:

uestra a co

Page 53: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 53 -

4.8 Programa “PFinal.asm” del mini-robot recolector de objetos:

======================================================================== ; Nombre del Archivo: Proyecto Final

bits que se utilizaran pa a M2.

;

; Descripcion del programa: ;Este programa se encarga de controlar los motores del carro los cuales son el Motor de arranque (M1) y el Motor de direccion (M2), estos motores seran controlados por medio del puerto C, losseran RC<0:1> para M1 y RC<6:7> r; Se utiliza RC2 para control r a el servo de la mano recolectora, y RB3 para controlar el servo del brazo. Los bits del registro RA contendran el sensor de choque izquierdo (RA0), el sensores de choque derecho (RA1),el sensor detector de color negro (RA2) y el sensor detector de objetos (RA3). ; ; Version de Archivo: 1.06 ; ; Autores: Adrian Bravo Infante - Javier Cervantes Palacios ;

dor.

PO

put is multiplexed

it: F ;Single-Supply ICSP disabled

EnablNST ;In

==== ==>

===== == icio cada que haya un reset =================>

00h ; Inicio del codigo cada

ORG 30H ; Inicio del programa.

; Escuela: UAM-I ; ;======================================================================== LIST P=18F2550 ; Directiva que define el procesa #include <P18F2550.INC> ; Directiva para definir el procesador y el formato del archivo. RADIX HEX ; Valores por default hexadecimales. ;<===================== Configuracion de los bits ================> ; Oscillator Selection bits: CONFIG FOSC = XT_XT ;XT oscillator, XT used by USB ; Watchdog Timer Enable bit: CONFIG WDT = OFF ;HW Disabled ; RTB A/D Enable bit: CONFIG PBADEN = OFF ;PORTB<4:0> pins are configured as digital I/O on Reset ; CCP2 MUX bit: CONFIG CCP2MX = OFF ;CCP2 input/outwith RB3 ; Single-Supply ICSP Enable b CONFIG LVP = OF; Extended Instruction Set e bit: CONFIG XI = OFF struction set extension and IndexedAddressing mode disabled ;< ================ Definicion e variables ==================d PDel0 EQU 0X40 PDel1 EQU 0X41 PDel2 EQU 0X42 VAR EQU 0X43 ;<===== ==== == In ORG que ocurra un reset. GOTO PUERTOS ; Salta a la configuracion de los puertos.

Page 54: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 54 -

;<================= Configuracion de los puertos ================= PUERTOS CLRF P

=>

ORTA ; Inicializa puerto A poniendo

CLRF PORTB ; Inicializa puerto B poniendo

0FH ; Configuracion digital I/O

3FH ; Configurando puerto A <5:0>

entradas.

0FFH ; Se establece el valor para el

MOVWF PR2

MOVLW 0FH ; se cargan los bits del ciclo

ON ;

el brazo TINA MOVLW 02H ; Carga el valor para

Activamos M1. r de

Q

todas sus salidas en 0. todas sus salidas en 0. CLRF PORTC ; Inicializa puerto C poniendo todas sus salidas en 0. MOVLW MOVWF ADCON1 ; para los pines de los puertos MOVLW MOVWF TRISA ; como entradas. MOVLW 00H ; Configurando puerto B <7:0> MOVWF TRISB ; como salidas. MOVWF TRISC ; Configurando puerto C <2:0>, <7:6> como salidas ; los pines C <5:4> por no tener relacion con TRISC ; solo funcionan como ;<=============== Configuracion para usar el PWM =======================> MOVLW periodo del PWM MOVLW 7H ; Activamos el TIMER2 y

reescalamiento seleccionamos un p MOVWF T2CON ; de 16 de trabajo MBL <1:0> MOVWF CCP2CON ; y se establece el modo de PWM MOVWF CCP1C ;=================== Inicio programa principal ================== INICIO CALL SERVOOP ; Abre la mano CALL SERVOUP ; Sube RUmover el carro hacia enfrente. MOVWF LATC ; el motor BTFSC PORTA,0 ; Verifica sensochoque izquierdo CALL SENIZ ; Llama a subrutina de sensor izquierdo BCF LATC,6 BTFSC PORTA,1 ; Verifica sensor de choque derecho CALL SENDER ; Llama a subrutina de sensor derecho BCF LATC,7 BTFSS PORTA,2 ; Verifica sensor detector color negro CALL SENCN ; Llama a subrutina detectora de color negro BTFSS PORTA,3 GOTO RUTINA

Page 55: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 55 -

SIGUE BTFSC PORTA,0 ; Verifica sensor de choque izquierdo CALL SENIZQ ; Llama a subrutina de

; El carro toma la

; Verifica si el sensor

GOTO SENIZQ N

Verifica si el sensor

N

CALL SERVOLOW ; Bajamos el brazo Avanza el carro

; Verifica si el sensor detecto

L SERVOUP ; Levantamos el brazo ATC,1 ; Avanza el carro

MOVWF CCPR1L ; estos son los bits MSB <9:2>

RETURN

en la ón 18

l valor para establecer el

MOVWF CCPR1L ; estos son los bits MSB <9:2>

RETURN

sensor izquierdo BCF LATC,6 BTFSC PORTA,1 ; Verifica sensor de choque derecho CALL SENDER ; Llama a subrutina de sensor derecho BCF LATC,7 GOTO SIGUE ;<=================== Subrutinas para los sensores ===================> SENIZQ BSF LATC,6 dirección izquierda BTFSC PORTA,0 sigue activado RETUR SENDER BSF LATC,7 ; El carro toma la dirección derecha BTFSC PORTA,1 ;sigue activado

GOTO SENDER RETUR SENCN BCF LATC,1 ; Detenemos el carro BSF LATC,1 ; BTFSC PORTA,3 el objeto CALL SENOBJ ; Llama a la subrutina que detecta el objeto RETURN SENOBJ BCF LATC,1 CALL SERVOCL ; Cerramos la mano CAL BSF L RETURN ;<================ Subrutinas de control de los servos ===============> ; Aqui accionamos el servo1 en la posicion 0° es desir abrimos la mano SERVOOP MOVLW 1FH ; Carga el valor para establecer el ciclo de trabajo CALL RETARDO1 ; Aquí ponemos al servo1 posici 0° es decir cerramos la mano SERVOCL MOVLW 9CH ; Carga eciclo de trabajo CALL RETARDO1

Page 56: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 56 -

; Aqui ponemos al servo2 posici es decir bajamos el brazo

en la on 0°

arga el valor para

MOVWF CCPR2L ; estos son los bits MSB <9:2>

sicion 180° es decir subimos el brazo

l valor para establecer el

; estos son los bits MSB <9:2>

RETURN

Retardo de 2 segundos ======================

; 1 | oop0 movlw .41 ; 1 set numero de repeticion (B)

oop1 movlw .72 ; 1 set numero de repeticion (A)

loop

loop po 0 ? (C)

== =============

repetición (C)

oop0 movlw .72 ; 1 set numero de repeticion (B)

oop1 movlw .247 ; 1 set numero de repeticion (A)

loop

loop po 0 ? (C)

ay

== =

SERVOLOW MOVLW 1FH ; Cestablecer el ciclo de trabajo CALL RETARDO1 RETURN ; Aqui ponemos al servo en la po SERVOUP MOVLW 9CH ; Carga eciclo de trabajo

MOVWF CCPR2L CALL RETARDO1 ;=================

umero de repeticion (C) RETARDO1 movlw .167 ; 1 set n movwf PDel0 PL movwf PDel1 ; 1 | PL movwf PDel2 ; 1 |

ar watchdog PLoop2 clrwdt ; 1 cle decfsz PDel2,1 ; 1 + (1) es el tiempo 0 ? (A) goto PLoop2 ; 2 no, decfsz PDel1,1 ; 1 + (1) es el tiempo 0 ? (B) goto PLoop1 ; 2 no, decfsz PDel0,1 ; 1 + (1) es el tiem goto PLoop0 ; 2 no, loop PDelL1 goto PDelL2 ; 2 ciclos delay PDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin. ;========= ====== Retardo de 1 segundo ========= RETARDO2 movlw .14 ; 1 set numero de movwf PDel0 ; 1 | RL movwf PDel1 ; 1 | RL movwf PDel2 ; 1 | RLoop2 clrwdt ; 1 clear watchdog decfsz PDel2,1 ; 1 + (1) es el tiempo 0 ? (A) goto RLoop2 ; 2 no, decfsz PDel1,1 ; 1 + (1) es el tiempo 0 ? (B) goto RLoop1 ; 2 no, decfsz PDel0,1 ; 1 + (1) es el tiem goto RLoop0 ; 2 no, loop RDelL1 goto RDelL2 ; 2 ciclos delRDelL2 clrwdt ; 1 ciclo delay return ; 2+2 Fin. ;========= ===================================== END ; Fin del programa. ;=================================================

Page 57: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 57 -

Capítulo 5. Implementación de la interfaz de comunicación

el puerto USB desde el PIC al PC, el programa fue hecho de tal manera que fuera tendible, por lo que realmente no tiene ninguna utilidad mas que servir de introducción

dos operandos.

rcuito. (b) Circui armado.

USB. La implementación de la interfaz USB del proyecto, pretende mostrar como enviar/recibir datos porenal uso del puerto USB. Este programa es usado sobre la placa que se diseño para usar el puerto USB (PicUSB), puesto que el funcionamiento del PicUSB se limita a encender/apagar cada uno de los led, a realizar una suma dey

El diseño de la placa para la interfaz USB y el circuito armado se muestran en las figuras 5.1(a) y (b):

(a) (b)

Fig. 5.1. Placa para la interfaz USB: (a) Diseño del ci to

Page 58: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 58 -

La implementación de la interfaz USB consta de tres partes: - Programación de la aplicación para PC.

PIC se optó por usar el compilador extendido se puede encontrar en Internet. El código cUSB_CCS, así como el archivo con

z para el puerto USB, pero puede usarse

- Programación de la aplicación para el PIC. - Edición del Driver suministrado por Microchip. Para la programación de la aplicación para elCCS, utilizando para ello la versión 3.227, el cualde la aplicación se encuentra en la carpeta Piextensión .hex para ser programado en el PIC. Tanto el PicUSB.c, como el PicUSB.h están basados en el ex_usb_scope.c suministrado por CCS (Documentación en Ingles). Se decidió usar el PIC 18F2550 ya que este es uno de la familia PIC que tiene integrada la interfacualquiera de la serie 18Fxx5x que incorporan el USB 2.0. Para la programación de la aplicación para PC se optó por usar el Visual C# Express 2005, actualmente va por la versión beta 2 y puede ser descargado gratuitamente de la página de Microsoft, aquí agregamos el link:

http://lab.msdn.microsoft.com/express/vcsharp/default.aspx Se decidió usar este lenguaje por su sencillez de programación. Es un lenguaje con

uchísimas posibilid Para poder tar el prog si no se cuenta

onada por Microchip, creemos que no hay problema para entender el

USB.inf, a continuación se explica como instalar el

l conectar el PicUSB por primera vez, nos saldrá el asistente para la instalación de nuevo esde una lista o ubicación específica”,

m ades y es relativamente fácil empezar a trabajar con él.rama PicUSB.exe se necesita el programa de Visual C#; ejecu

con el se necesitara tener instalada la última versión del .NET Framework, para poder ejecutar el programa. Se puede encontrar el código fuente en la carpeta PicUSB_CCS, donde también se encuentran funciones_dll.txt en el que se detalla el uso de las funciones contenidas en la mpusbapi.dll proporciuso de las funciones mas habituales. El último paso ha sido la edición del Driver suministrado por Microchip para ser usado junto con la DLL, encontraran un documento (leer.txt) dentro de la carpeta PicUSB_Driver donde se explica como editar el Picdriver para que no exista ningún problema.

5.1 Funcionamiento de la interfaz USB. Ahardware, marcamos la opción de “instalar doprimimos el botón de siguiente, (figura 5.2).

Page 59: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 59 -

Fig. 5.2

En la siguiente pantalla marcamos la opción de “Buscar el controlador más adecuado en estas ubicaciones”, presionamos sobre “Incluir esta ubicación en la búsqueda”, le damos a Examinar, y seleccionamos la carpeta PicUSB_Driver, le damos Siguiente, (figura 5.3).

Fig. 5.3

Enseguida, nos saldrá una pantalla de advertencia, le damos Continuar, (figura 5.4).

Fig. 5.4

Page 60: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 60 -

La instalación del Driver estará terminada y el dispositivo listo para ser usado (figura 5.5).

Fig. 5.5

Dentro de la carpeta PicUSB_VisualC se podrá encontrar la aplicación PicUSB.exe así como la dll necesaria suministrada por Microchip, para poder ejecutar el programa una vez instalado el driver del PicUSB. Al ejecutarlo nos reconoce inmediatamente el nuevo hardware encontrado y podemos empezar a trabajar con el (figura 5.6).

Fig. 5.6 Interfaz USB funcionando.

Más a detalle, la figura 5.7 muestra la interfaz USB en la parte superior podemos encontrar el sumador, introducimos dos números del 00 hasta el 99 en cada uno de los sumandos, hacemos click sobre PIC Suma!, estos dos operandos serán enviados al PIC, el cual realizará la suma, devolviendo el resultado que se mostrará en la tercera casilla. Por otro lado tenemos los botones, Leds Off, Led Verde On y Led Rojo On, que envían el código correspondiente para cada uno de los casos. Al hacer click sobre la imagen del logo de la UAM-I se abrirá el explorador de Internet y nos enviara a la pagina principal de la UAM-I.

Fig. 5.7 Interfaz USB.

Page 61: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 61 -

5.2 Programa “PicUSB.C” para la interfaz de comunicación USB. ///////////////////////////////////////////////////////////////////////// //// PicUSB.c //// //// //// //// Este ejemplo muestra como desarrollar un sencillo dispositivo //// //// USB con el PIC18F2550, aunque puede ser fácilmente adaptado //// //// para la serie 18Fxx5x. Se suministra el PicUSB.exe, así como //// //// su código fuente para Visual C# 2005. //// //// //// //// Cuando el dispositivo sea conectado al PC, saldrá el asistente //// //// para la instalación del driver. Instala el suministrado junto //// //// a este ejemplo, lo encontraran dentro de la carpeta Driver. //// //// Una vez instalado podran usar el PicUSB.exe para encender o //// //// apagar los leds del PicUSB, y para realizar la suma de dos //// //// números introducidos. //// //// //// //// Realizado con el compilador CCS PCWH 3.227 //// //// //// //// Por: Adrian Bravo Infante - Javier Cervantes Palacios //// //// //// ///////////////////////////////////////////////////////////////////////// #include <18F2550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN #use delay(clock=48000000) ///////////////////////////////////////////////////////////////////////////// // // CCS Library dynamic defines. For dynamic configuration of the CCS Library // for your application several defines need to be made. See the comments // at usb.h for more information // ///////////////////////////////////////////////////////////////////////////// #define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID #define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers #define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers #define USB_EP1_TX_SIZE 1 //size to allocate for the tx endpoint 1 buffer #define USB_EP1_RX_SIZE 3 //size to allocate for the rx endpoint 1 buffer ///////////////////////////////////////////////////////////////////////////// // // If you are using a USB connection sense pin, define it here. If you are // not using connection sense, comment out this line. Without connection // sense you will not know if the device gets disconnected. // (connection sense should look like this: // 100k

Page 62: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 62 -

// VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC) // | // +----/\/\/\/\/\-----GND // 100k // (where VBUS is pin1 of the USB connector) // ///////////////////////////////////////////////////////////////////////////// //#define USB_CON_SENSE_PIN PIN_B2 //CCS 18F4550 development kit has optional conection sense pin ///////////////////////////////////////////////////////////////////////////// // // Include the CCS USB Libraries. See the comments at the top of these // files for more information // ///////////////////////////////////////////////////////////////////////////// #include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver #include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo #include <usb.c> //handles usb setup tokens and get descriptor reports ///////////////////////////////////////////////////////////////////////////// // // Al conectar el PicUSB al PC encendemos el Led Rojo hasta que el dispositivo // halla sido configurado por el PC, en ese momento encederemos el Led Verde. // Esperaremos hasta que se reciba un paquete proveniente del PC. Comprobaremos // el primer byte del paquete recibido para comprobar si queremos entrar en el // modo Suma, donde se realizará una suma de dos operandos, que corresponderan // con los dos bytes restantes del paquete recibido; una vez realizada la suma // enviaremos el paquete con el resultado de vuelta al PC. Si entramos en el // modo Led comprobaremos el segundo byte del paquete recibido para comprobar // si deberemos apagar los leds, encender el verder o el rojo. // ///////////////////////////////////////////////////////////////////////////// #define LEDV PIN_B6 #define LEDR PIN_B7 #define LED_ON output_high #define LED_OFF output_low #define modo recibe[0] #define param1 recibe[1] #define param2 recibe[2] #define resultado envia[0]

Page 63: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 63 -

void main(void) int8 recibe[3]; //declaramos variables int8 envia[1]; LED_OFF(LEDV); //encendemos led rojo LED_ON(LEDR); usb_init(); //inicializamos el USB usb_task(); //habilita periferico usb e interrupciones usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host LED_OFF(LEDR); LED_ON(LEDV); //encendemos led verde while (TRUE) if(usb_enumerated()) //si el PicUSB está configurado if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host usb_get_packet(1, recibe, 3); //recojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe if (modo == 0) // Modo_Suma resultado = param1 + param2; //hacemos la suma usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC if (modo == 1) // Modo_Led if (param1 == 0) LED_OFF(LEDV); LED_OFF(LEDR); //apagamos los leds if (param1 == 1) LED_ON(LEDV); LED_OFF(LEDR); //encendemos led verde if (param1 == 2) LED_OFF(LEDV); LED_ON(LEDR); //encendemos led rojo

Page 64: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 64 -

ANEXO 1.

Software de programación y lenguaje C. MPLAB IDE es un conjunto de herramientas que permite el desarrollo completo de proyectos siguiendo las siguientes fases:

1) Editar el programa: Estas prácticas serán diseñadas en lenguaje C en el editor de textos de MPLAB, pero se pueden realizar en cualquier otro lenguaje, ya sea de bajo nivel como el ensamblador u otros de alto nivel como el Visual Basic etc.

2) Compilar o ensamblar el programa fuente, es decir, convertir a código máquina ejecutable el programa fuente editado en la fase anterior. Para poder compilar el programa será necesario tener instalado el Plug-in de CCS y para ensamblarlo habrá que emplear el programa MPASWIN que incluye MPLAB IDE.

3) Simular el programa: Antes de grabar el programa en la memoria del PIC, conviene comprobar si el funcionamiento del programa es correcto. Para ello se puede simular por software con el simulador que incluye MPLAB. No es una fase obligatoria, es opcional pero conveniente.

4) Grabación del PIC: Para la grabación del microcontrolador se utilizará el grabador de PICS conectado al PC.

Cómo usar MPLAB

Creación de proyectos MPLAB es un Entorno de Desarrollo Integrado (IDE) fácil de aprender y fácil de usar. La característica IDE proporciona a los desarrolladores de software para aplicaciones la flexibilidad para editar, compilar, emular, simular, desarrollar y depurar su propio software para las familias de microcontroladores PIC18 de Microchip.

Para crear un nuevo proyecto se debe ir a Project>Project Wizard, tal y como se indica en la figura siguiente. Una vez ahí, se abrirá un asistente de creación de proyectos donde habrá que seguir unos pasos sencillos para la configuración del proyecto.

Page 65: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 65 -

1) Selección del modelo de microcontrolador a emplear de una lista. En el caso de estas prácticas se elegirá el PIC18F2550.

2) Selección del lenguaje y compilador a emplear así como la ubicación de este en la PC, en este caso, se utilizará el compilador de Ccs tal y como se indica en la figura.

Si el programa se realiza en otro lenguaje habrá que seleccionar otro compilador. Por ejemplo si se ha realizado en lenguaje ensamblador, en este paso habrá que seleccionar “MPASM Assembler” que se encuentra en la carpeta donde se ha instalado el MPLAB IDE.

3) Dar un nombre al proyecto y elegir la carpeta donde se desea guardar.

4) Seleccionar los archivos de código fuente y las librerías necesarias para llevar a cabo el proyecto.

Page 66: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 66 -

En caso de no haber creado todavía el código fuente, no habría más que crearlo en el editor de textos del propio programa o en cualquier otro editor de textos. En MPLAB sería File>New, una vez escrito se guarda pulsando File>Save. Después de seguir todos los pasos el programa realiza un resumen, ahí se pulsa Finalizar y se sale del asistente. En este punto cabe destacar que lo realizado hasta ahora es simplemente la creación del código fuente y la configuración de las aplicaciones que se van a emplear. El siguiente paso es la compilación.

Compilación del programa Una vez realizado el proyecto es tan sencillo como darle al botón de compilar tal y como se indica en la figura de la página siguiente.

Si el programa no tiene fallos nos saldrá un mensaje de que se ha compilado con éxito “Build Sucedded”, si tiene algún error saldrá un mensaje e indicará en que línea o parte del programa se ha producido, habrá que corregirlo y volver a compilar. Una vez compilado correctamente se habrá generado en la carpeta previamente seleccionada un archivo de igual nombre al código fuente pero con extensión .hex. Este archivo es el mismo pero traducido a código máquina, de tal forma que el PIC pueda comprender las ordenes indicadas en el programa.

Page 67: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 67 -

Si el programa ha sido realizado en lenguaje ensamblador en vez de en lenguaje C simplemente en vez de aparecer la opción “Compile” aparecerá la opción “Assemble” y todo lo demás será exactamente igual a lo explicado para el lenguaje C.

Programación Una vez generado el archivo en código máquina solamente queda pasarlo de la PC al microcontrolador. Para ello será necesario un programador que, en este caso, será el MPLAB ICD 2 de Microchip. Una vez conectado vía USB a la PC y después al grabador de PICS. Habrá que seleccionarlo y conectarlo en el MPLAB IDE tal y como se ve en la figura: Programmer>Select Programmer>Mplab Icd 2

Una vez seleccionado habrá que pulsar el icono “Program tarjet device” y el programa quedará grabado en el PIC.

Page 68: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 68 -

Lenguaje C. En este punto de proyecto no se pretende explicar cómo se programa en este lenguaje, sino hacer un listado de las directivas y funciones permitidas por el compilador PCW de CCS, compilador específico para microcontroladores de la casa Microchip. Así pues, se parte de la idea de que el lector posee conocimientos básicos de este lenguaje u otros lenguajes de alto nivel.

Operadores y expresiones Una expresión de asignación tradicional es de la forma expr1 = expr1 operador expr2, pero también puede ser representada por otra más corta expr1 operador = expr2. En la siguiente tabla se resumen los operadores de asignación compuesta y su significado:

Los operadores aritméticos empleados para realizar operaciones matemáticas son:

La misión de los operadores relacionales es comparar dos operandos y dar un resultado entero, 1 si es verdadero y 0 si es falso:

Page 69: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 69 -

Los operadores lógicos, al igual que los operadores relacionales, devuelve 1 o 0 tras la evaluación de sus operandos. En la tabla siguiente se ilustran estos operadores:

Los operadores de manejo de bits permiten actuar sobre los operandos a nivel de bits y sólo pueden ser de tipo entero (incluyendo el tipo char). Son los que siguen:

Las expresiones empleadas se exponen en la siguiente tabla:

Directivas del preprocesador Todas las directivas del preprocesador comienzan con el carácter # seguido por un comando específico. Algunas de estas directivas son extensiones del C estándar. El C proporciona una directiva del preprocesador, que los compiladores aceptan, y que permite ignorar o actuar sobre los datos que siguen. El compilador de CCS admite cualquier directiva del preprocesador que comience con PRAGMA, lo que asegura la compatibilidad con otros compiladores. A continuación se describen algunas directivas del compilador que se emplearán para programar los microcontroladores PIC en estas prácticas.

Control de memoria #BIT identificador = x.y Esta directiva creará un identificador "id" que puede utilizarse como cualquier SHORT INT (entero corto; un bit). El identificador hará referencia a un objeto en la posición de memoria x más el bit de desplazamiento y.

Page 70: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 70 -

#BYTE identificador = X Esta directiva creará un identificador “id” que puede utilizarse como cualquier INT (un byte). El identificador hará referencia a un objeto en la posición de memoria x, donde x puede ser una constante u otro identificador. Si x es otro identificador, entonces éste estará localizado en la misma dirección que el identificador “id”. #RESERVE Permite reservar posiciones de la RAM para uso del compilador. #RESERVE debe aparecer después de la directiva #DEVICE, de lo contrario no tendrá efecto. Directivas del C estándar #DEFINE identificador CADENA Se utiliza simplemente para reemplazar el identificador (ID) con CADENA #IF expresión_constante #ELSE #ENDIF El preprocesador evalúa la expresión_constante y si es distinta de cero procesará las líneas hasta el #ELSE o en su defecto hasta el #ENDIF. #INCLUDE <Nombre_Fichero> #INCLUDE "Nombre_Fichero" Esta directiva hace que el compilador incluya en el fichero fuente el texto que contiene el archivo especificado en <Nombre_Fichero>. Especificación de dispositivos #FUSES opciones Esta directiva define qué fusibles deben activarse en el dispositivo cuando se programe. Esta directiva no afecta a la compilación; sin embargo, esta información es necesaria para algunos programadores de dispositivos. Algunas de las opciones más usadas son:

LP, XT, HS, RC WDT, NOWDT

PROTECT, NOPROTECT PUT, NOPUT (Power Up Timer) BROWNOUT, NOBROWNOUT

SWAP Librerías incorporadas #USE DELAY (CLOCK=frecuencia)

Page 71: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 71 -

Esta directiva indica al compilador la frecuencia del procesador, en ciclos por segundo, a la vez que habilita el uso de las funciones DELAY_MS() y DELAY_US(). #USE FAST_IO (puerto) Esta directiva afecta al código que el compilador generará para las instrucciones de entrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro de dirección. #USE I2C (master/slave, SDA=Pin, SCL=Pin opciones) La librería I2C contiene funciones para implementar un bus I2C. La directiva #USE I2C permanece efectiva para las funciones I2C_START, I2C_STOP, I2C_READ, I2C_WRITE e I2C_POLL hasta que se encuentre otra directiva #USE I2C. Las opciones son:

#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...) Esta directiva le dice al compilador la velocidad en baudios y los pines utilizados para la I/O serie. Esta directiva tiene efecto hasta que se encuentra otra directiva RS232. La directiva #USE DELAY debe aparecer antes de utilizar #USE RS232. Esta directiva habilita el uso de funciones tales como GETCH, PUTCHAR y PRINTF. Las opciones son:

Page 72: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 72 -

#USE STANDARD_IO (puerto) Esta directiva afecta al código que el compilador genera para las instrucciones de entrada y salida. El método estándar de hacer I/O causará que el compilador genere código para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza. En los procesadores de la serie 5X esto necesita un byte de RAM para cada puerto establecido como I/O estándar.

Funciones Funciones de i/o serie rs232 c = GETC() c = GETCH() c = GETCHAR() Estas funciones esperan un carácter por la patilla RCV del dispositivo RS232 y retorna el carácter recibido. Es preciso utilizar la directiva #USE RS232 antes de la llamada a esta función para que el compilador pueda determinar la velocidad de transmisión y la patilla utilizada. La directiva #USE RS232 permanece efectiva hasta que se encuentre otra que anule la anterior. Los procedimientos de I/O serie exigen incluir #USE DELAY para ayudar a sincronizar de forma correcta la velocidad de transmisión. PUTC() PUTCHAR() Estas funciones envían un carácter a la patilla XMIT del dispositivo RS232. Es preciso utilizar la directiva #USE RS232 antes de la llamada a esta función para que el compilador pueda determinar la velocidad de transmisión y la patilla utilizada. La directiva #USE RS232 permanece efectiva hasta que se encuentre otra que anule la anterior. PUTS(string) Esta función envía cada carácter de string a la patilla XMIT del dispositivo RS232. Una vez concluido el envío de todos los caracteres la función envía un retorno de carro CR o RETURN (ASCII 13) y un avance de línea LF o LINE-FEED (ASCII 10). PRINTF([function], string, [values]) La función de impresión formateada PRINTF saca una cadena de caracteres al estándar serie RS-232 o a una función especificada. El formato está relacionado con el argumento que ponemos dentro de la cadena (string). Cuando se usan variables, string debe ser una constante. El carácter % se pone dentro de string para indicar un valor variable, seguido de uno o más caracteres que dan formato al tipo de información a representar.

Page 73: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 73 -

Si ponemos %% obtenemos a la salida un solo %. El formato tiene la forma genérica %wt, donde w es optativo y puede ser 1,2,...,9. Esto es para especificar cuántos carácteres son representados; si elegimos el formato 01,...,09 indicamos ceros a la izquierda, o también 1.1 a 9.9 para representación en punto flotante. t es el tipo de formato y puede ser uno de los siguientes:

SET_UART_SPEED(baud) Esta función cambia la velocidad de transmisión de la UART (Universal Asynchronous Receiver Transmitter) en tiempo de ejecución. SETUP_ADC(mode) Esta función configura (permite establecer los parámetros) del conversor analógico/digital. Los modos son los siguientes: ADC_OFF ADC_CLOCK_DIV_2 ADC_CLOCK_DIV_8 ADC_CLOCK_DIV_32 ADC_CLOCK_INTERNAL Funciones de I/O discreta INPUT(pin) Devuelve el estado '0' o '1' de la patilla indicada en pin. El método de acceso de I/O depende de la última directiva #USE *_IO utilizada. El valor de retorno es un entero corto. OUTPUT_BIT(pin, value) Esta función saca el bit dado en value(0 o 1) por la patilla de I/O especificada en pin. El modo de establecer la dirección del registro, está determinada por la última directiva #USE *_IO.

Page 74: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 74 -

OUTPUT_HIGH(pin) Pone a 'uno' el pin indicado. El método de acceso de I/O depende de la última directiva #USE *_IO utilizada. OUTPUT_LOW(pin) Pone a 'cero' el pin indicado. El método de acceso de I/O depende de la última directiva #USE *_IO. SET_TRIS_A(value) SET_TRIS_B(value) SET_TRIS_C(value) SET_TRIS_D(value) SET_TRIS_E(value) Estas funciones permiten escribir directamente los registros tri-estado para la configuración de los puertos. Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como si fueran memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de value representa una patilla. Un '1' indica que la patilla es de entrada y un '0' que es de salida. Funciones de retardos DELAY_CYCLES(count) Esta función realiza retardos según el número de ciclos de instrucción especificado en count; los valores posibles van desde 1 a 255. Un ciclo de instrucción es igual a cuatro periodos de reloj. DELAY_MS(time) Esta función realiza retardos del valor especificado en time. Dicho valor de tiempo es en milisegundos y el rango es 0-65535. Es preciso utilizar la directiva #use delay(clock=frecuencia) antes de la llamada a esta función, para que el compilador sepa la frecuencia de reloj. DELAY_US(time) Esta función realiza retardos del valor especificado en time. Dicho valor es en microsegundos y el rango va desde 0 a 65535. Es necesario utilizar la directiva #use delay antes de la llamada a esta función para que el compilador sepa la frecuencia de reloj. Funciones de control del procesador DISABLE_INTERRUPTS(level)

Page 75: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 75 -

Esta función desactiva la interrupción del nivel dado en level. El nivel GLOBAL prohíbe todas las interrupciones, aunque estén habilitadas o permitidas. Los niveles de interrupción son:

ENABLE_INTERRUPTS(level) Esta función activa la interrupción del nivel dado en level. Queda a cargo del técnico definir un procedimiento o rutina de atención, para el caso que se produzca la interrupción indicada. El nivel GLOBAL permite todas las interrupciones que estén habilitadas de forma individual. SLEEP() Esta función pone al micro en un estado de REPOSO.

Contadores/Temporizadores GET_RTCC() GET_TIMER0() GET_TIMER1() i=GET_TIMER2() Estas funciones devuelven el valor de la cuenta de un contador en tiempo real. RTCC y Timer0 son el mismo. Timer1 es de 16 bits y los otros son de 8 bits. RESTART_WDT() Esta función reiniciará el timer del watchdog. Si habilitamos el timer del watchdog, debe llamarse periódicamente a RESTART_WDT() para prevenir el reseteo del procesador. SET_RTCC(value) SET_TIMER0(value) SET_TIMER1(value) SET_TIMER2(value) Estas funciones activan el timer o temporizador al valor especificado. RTCC y Timer0 son el mismo. Timer1 es de 16 bits y los otros son de 8 bits. SETUP_TIMER_1(mode)

Page 76: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 76 -

Esta función inicializa el timer1. Los valores de mode deben ordenarse juntos, tal como se muestra en el ejemplo. El valor del timer puede leerse y puede escribirse utilizando GET_TIMER1() y SET_TIMER1(). Los valores de mode son:

SETUP_TIMER_2(mode, period, postscale) Esta función inicializa el timer2; mode especifica el divisor del reloj del oscilador. Period es un número comprendido entre 0-255, y determina el momento en el que el valor del reloj se resetea a 0. postscale es un número de 0 a 15, que determina cuántos reset del timer se han producido antes de una interrupción. 0 significa 1 reset, 1 significa 2 reset, y así sucesivamente. El valor del timer puede leerse y puede escribirse utilizando GET_TIMER2() y SET_TIMER2(). Los valores de mode son: - T2_DISABLED - T2_DIV_BY_1 - T2_DIV_BY_4 - T2_DIV_BY_16 Funciones de entrada A/D SETUP_ADC_PORTS(value) Esta función configura los pines del ADC para que sean analógicos, digitales o alguna combinación de ambos. SETUP_ADC(mode) Esta función prepara o configura el conversor A/D. Los modos de funcionamiento son: - ADC_OFF - ADC_CLOCK_DIV_2 - ADC_CLOCK_DIV_8 - ADC_CLOCK_DIV_32 - ADC_CLOCK_INTERNAL SET_ADC_CHANNEL(canal) Especifica el canal a utilizar por la función READ_ADC(). El número de canal empieza en 0. Es preciso esperar un corto espacio de tiempo después de cambiar el canal de adquisición, antes de que se puedan obtener lecturas de datos válidos.

Page 77: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 77 -

i=READ_ADC() Esta función lee el valor digital del conversor analógico digital. Deben hacerse llamadas a SETUP_ADC() y SET_ADC_CHANNEL() en algún momento antes de la llamada a esta función. Funciones CCP SETUP_CCP1(mode) SETUP_CCP2(mode) Estas funciones inicializa el contador CCP. Para acceder a los contadores CCP se utilizan las variables CCP_1 y CCP_2. Los valores para mode son:

CCP_OFF CCP_CAPTURE_FE CCP_CAPTURE_RE

CCP_CAPTURE_DIV_4 CCP_CAPTURE_DIV_16

CCP_COMPARE_SET_ON_MATCH CCP_COMPARE_CLR_ON_MATCH

CCP_COMPARE_INT CCP_COMPARE_RESET_TIMER

CCP_PWM CCP_PWM_PLUS_1 (sólo si se utiliza un ciclo de trabajo de 8 bits) CCP_PWM_PLUS_2 (sólo si se utiliza un ciclo de trabajo de 8 bits) CCP_PWM_PLUS_3 (sólo si se utiliza un ciclo de trabajo de 8 bits)

SET_PWM1_DUTY(value) SET_PWM2_DUTY(value) Estas funciones escriben los 10 bits de value al dispositivo PWM para establecer el ciclo de trabajo. Se puede usar un valor de 8 bits si no son necesarios los bits menos significativos.

Funciones para el manejo de la Eeprom interna READ_EEPROM(address) Esta función lee un byte en la dirección (address) de Eeprom especificada. La dirección puede ser 0-63. WRITE_EEPROM(address, value) Esta función escribe un byte de datos en la dirección de memoria Eeprom especificada. Value es el byte de datos a escribir.

Page 78: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 78 -

Definición de datos Si TYPEDEF se pone delante de la definición de un dato, entonces no se asigna espacio de memoria al identificador a menos que sea utilizado como un especificador de tipo en otras definiciones de datos. Si delante del identificador ponemos CONST entonces, el identificador es tratado como constante. Las constantes deben ser inicializadas y no pueden cambiar en tiempo de ejecución. typedef [calificador_tipo] [especificador_tipo] [identificador] Especificadores de tipo: unsigned define un número de 8 bits sin signo unsigned int define un número de 8 bits sin signo int define un número de 8 bits sin signo char define un número de 8 bits sin signo long define un número de 16 bits sin signo long int define un número de 16 bits sin signo signed define un número de 8 bits con signo signed int define un número de 8 bits con signo signed long define un número de 16 bits con signo float define un número de 32 bits en punto flotante short define un bit short int define un bit

Definición de una función El formato de la definición de una función es como sigue: [calificador_tipo] identificador ([[especificador_tipo identificador]) [cuerpo de la función] El calificador_tipo para una función pueden ser void o un especificador de tipo (véase la lista de la página anterior) La definición de una función puede ir precedida por una de las siguientes directivas del preprocesador (calificadores de función) para identificar una característica especial de la función: #separate #inline #int_... Cuando utilizamos una de las directivas mencionadas y la función tiene un prototipo (declaración anterior a la definición de la función, y colocada al principio del fichero fuente) hay que incluir la misma #directiva en el prototipo y en la definición de la función. Una función que tiene un parámetro de tipo char aceptará una constante de cadena. El compilador generará un bucle que llama a la función una vez para cada carácter de la cadena.

Page 79: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 79 -

ANEXO 2

IDEAS Y MEJORAS PARA EL MINI-ROBOT El siguiente sensor puede ser utilizado en lugar del sensor mecánico bumper que usamos en nuestro mini-robot para evitar los choques.

Sensor Reflexivo GP2Dxx

Descripción: El sensor GP2DXX (Fig. 1) de SHARP es un dispositivo de reflexión por infrarrojos con medidor de distancia proporcional al ángulo de recepción del haz de luz que incide en un sensor lineal integrado, dependiendo del modelo utilizado, la salida puede ser analógica ó digital (Tabla 1).

Fig. 1 Funcionamiento: El dispositivo emite luz infrarroja por medio de un led emisor de IR, esta luz pasa a través de una lente que concentra los rayos de luz formando un único rayo lo mas concentrado posible para así mejorar la dirección del sensor, la luz viaja recta hacia delante y cuando encuentra un obstáculo reflejante rebota y retorna con cierto ángulo de inclinación dependiendo de la distancia, la luz que retorna es concentrada por otra lente y así todos los rayos de luz inciden en un único punto del sensor de luz infrarroja que contiene en la parte receptora del dispositivo (Fig. 2). Este sensor es un CCD lineal y dependiendo del ángulo de recepción de la luz incidirá esta en un punto u otro del sensor pudiendo de esta manera obtener un valor lineal y proporcional al ángulo de recepción del haz de luz. Dependiendo del modelo elegido leeremos de una manera u otra la salida de este con lo cuál tendremos que remitirnos al datasheet del modelo elegido para ver su funcionamiento interno.

• En los modelos analógicos la salida es un voltaje proporcional a la distancia medida.

• En los modelos digitales la lectura será de 8 bits serie con reloj externo.

En los modelos Booleanos la salida será de 1 bit y este marcara el paso por la zona de histéresis del sensor con lo cual solo tendremos una medición de una distancia fija. Fig. 2

Page 80: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 80 -

Modelos Rango de medida Tipo de salida GP2D-02 10 a 80 cm. Digital 8 bits

GP2D-05 10 a 80 cm.(adj, micro pot.) Lógica 1 bit

GP2D-12 10 a 80 cm Analógica (0-3V)

GP2D-15 adj. a 24cm de fabrica Lógica 1 bit

GP2D-120 4 a 30 cm. Analógica (0-3V)

Tabla 1 Usos: Debido a su gran rango de medida este sensor es adecuado para detectar obstáculos reflectantes como paredes, usados en robots de exploradores para los de laberintos entre otros. Ideas y mejoras: Debido a su gran dirección se puede montar un sensor GPD2 en un servo y así tener un radar de IR cubriendo de esta manera un radio de 180º aprox. Descripción de uso del GP2D02: Este sensor proporciona una salida en serie digital con un valor de un byte proporcional al ángulo de recepción del haz de luz, este valor no es lineal a la distancia medida así que hay que usar un cálculo para saber la medida de distancia en centímetros. En el ejemplo mostrado mas abajo se usa otro método, que es simplemente una tabla de conversión de valores conocidos. En la figura 3 vemos la disposición de pines en el conector de salida del GP2D02: 1.-GND 2.-Vin 3.-Vcc 4.-Vout El dispositivo se alimenta poniendo a +5V el pin VCC y GND a 0V (masa). El pin Vout es la salida de datos en serie con lógica positiva y niveles TTL.

Fig. 3 Vin es la entrada con la que comandaremos el funcionamiento del sensor, hay que tener muy en cuenta una característica de este pin y es que la salida es a drenador abierto y esta prohibido poner esta entrada a una salida TTL o CMOS ya que esto provocaría la destrucción de la entrada, solo acepta niveles bajos y por lo tanto para acoplarla a la salida de un microcontrolador es necesario poner un diodo (p.ej.: 1N4148) tal como se muestra a continuación en la figura 4:

Fig. 4

Page 81: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 81 -

Una vez que se tenga conectado el sensor, nos queda mandarle hacer una captura y leer el resultado, para conseguir esto hay que seguir unos sencillos pasos:

1. La entrada Vin en reposo a de ser nivel lógico alto con lo que el diodo bloqueara este estado y solo cuando se ponga un nivel lógico bajo será cuando el sensor reciba la orden, sabido esto, indicamos al sensor que inicie una captura poniendo a nivel lógico bajo el pin Vin y mantendremos el estado bajo un tiempo de 70mS, transcurridos los cuales volveremos a poner Vin a nivel lógico alto. Ahora el sensor ya tiene el dato listo para ser transmitido y como el bus de salida es serie tenemos que sincronizar para saber cuando salen los bits, el sensor lo consigue poniendo cada bit en Vout por cada flanco de bajada de la señal Vin.

2. Espera de 0,2mS o menos para iniciar el primer flanco de bajada. 3. Poner Vin a nivel lógico bajo con lo cual iniciamos el primer flanco de bajada de la

señal y el sensor nos responde poniendo el bit de mayor peso "MSB" en Vout. 4. Leer el bit de Vout y almacenarlo debidamente para completar el byte

correspondiente al dato de salida. 5. Poner Vin a nivel lógico alto. 6. Repetir 7 veces más, los pasos de 3 a 5 teniendo en cuenta que hay que tardar un

mínimo de 1mS para leer los 8 bits con lo que si lo hacemos muy rápido el sensor no responderá debidamente.

7. Una vez leídos los 8 bits tenemos que esperar un mínimo de 1,5mS o más para poder ordenar al sensor otra captura de distancia.

Se puede acelerar la medida comprobando cuando pasa a nivel alto la señal Vout, mientras se mantiene a nivel bajo Vin, en los 70mS de inicio de medición aunque es mejor esperar los 70mS.

Page 82: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 82 -

Para mejorar el desempeño del mini-robot, en la parte inferior se dejo el espacio necesario para que sea colocado un paquete de pilas recargables el cual proporcionara de mejor forma, la corriente necesaria para todos los circuitos y motores, (Figura 5).

Fig. 5

Previendo que el consumo de corriente sea demasiado, se decidió colocar dos jumpers en la placa de control (Figura 6), los cuales controlan la alimentación de los 2 servomotores usados; al desconectarlos se puede realizar la conexión de otra fuente de alimentación exclusiva para los servos, logrando con esto mejorar el desempeño del mini-robot.

Fig. 6

Por ultimo, como mencionamos en la introducción, la principal línea de continuación en proyectos futuros es la preparación de software específico de comunicación vía puerto USB. A partir de este software se podrá finalizar el desarrollo de más circuitos que utilicen la comunicación vía puerto USB. Se podría implementar en el mini-robot la interfaz USB y conectarle cualquier dispositivo que utilice este puerto, como por ejemplo, las nuevas tarjetas bluetooh para comunicación inalámbrica, al contar con uno o más mini-robots, estos se podrían comunicar con la PC por este medio.

Page 83: ndice general - 148.206.53.231

Bravo Infante Adrián --- Cervantes Palacios Javier Proyecto de Ingeniería Electrónica Universidad Autónoma Metropolitana

________________________________________________________________________

- 83 -

BIBLIOGRAFÍA Y REFERENCIAS. Libros:

- MICROCONTROLADORES PIC, LA CLAVE DEL DISEÑO. Martín Cuenca, Angulo Usategui y Angulo Martínez. Ed Thomson, 2003.

- MICROCONTROLADORES PIC, DISEÑO PRÁCTICO DE APLICACIONES. Angulo Usategui y Angulo Martínez. Ed Mc Graw Hill, 2003.

Datasheet:

- PIC18F2550: 28/40-Pin 8-Bit CMOS FLASH Microcontrollers

Páginas Web:

- http://www.microchip.com: página de la empresa Microchip.

Page 84: ndice general - 148.206.53.231