76
Pr´acticas de Dise˜ no de Robots M´oviles Dr. Jes´ us Savage Carmona Ing. Rub´ en Anaya Garc´ ıa

evasor de obstaculo

Embed Size (px)

Citation preview

Page 1: evasor de obstaculo

Practicas de Diseno de Robots Moviles

Dr. Jesus Savage CarmonaIng. Ruben Anaya Garcıa

Page 2: evasor de obstaculo

Contenido

1 Introduccion general 3

1.1 Duracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.3.1 Actividad 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.3.2 Actividad 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3.3 Actividad 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.3.4 Actividad 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.3.5 Actividad 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2 Sistema mınimo del microcontrolador PIC16F877 9

2.1 Duracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3.1 Actividad 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3.2 Actividad 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3.3 Actividad 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.4 Actividad 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.5 Actividad 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

i

Page 3: evasor de obstaculo

ii CONTENIDO

3 Control de puertos paralelos 13

3.1 Duracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.2 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.3 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.1 Actividad 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.2 Actividad 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.3 Actividad 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4 Operacion de un robot movil usando el microcontrolador PIC16F877 17

4.1 Duracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.2 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.2.1 Actividad 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.2.2 Actividad 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.2.3 Actividad 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.2.4 Actividad 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5 Generacion de Modulacion de Ancho de Pulso ”PWM” 27

5.1 Duracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

5.2 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

5.3 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.3.1 Actividad 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.3.2 Actividad 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6 Temporizadores 33

6.1 Duracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6.2 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6.2.1 Encoders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6.2.2 Interrupcion (TIMER2) . . . . . . . . . . . . . . . . . . . . . 34

6.3 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

6.3.1 Actividad 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

6.3.2 Actividad 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Page 4: evasor de obstaculo

CONTENIDO iii

6.3.3 Actividad 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

6.3.4 Actividad 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

7 Controlador PID 43

7.1 Duracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

7.2 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

7.2.1 Actividad 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Page 5: evasor de obstaculo

iv CONTENIDO

Page 6: evasor de obstaculo

Lista de figuras

1.1 Diagrama por trayectoria . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2 Robot movil que evade obstaculos . . . . . . . . . . . . . . . . . . . . 6

1.3 Algoritmo de un robot movil evasor de obstaculos . . . . . . . . . . . 7

4.1 Robot movil que evade obstaculos . . . . . . . . . . . . . . . . . . . . 24

4.2 Algoritmo de un robot movil evasor de obstaculos . . . . . . . . . . . 25

5.1 Modulacion de ancho de pulso . . . . . . . . . . . . . . . . . . . . . . 28

6.1 Captura de pulsos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

6.2 Encoders usando sensores reflectivos . . . . . . . . . . . . . . . . . . . 38

1 Terminales L293 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

2 Control con tres senales . . . . . . . . . . . . . . . . . . . . . . . . . 51

3 Control con dos senales . . . . . . . . . . . . . . . . . . . . . . . . . . 51

4 Uso de optoacopladores . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5 Entorno PIC C Compiler . . . . . . . . . . . . . . . . . . . . . . . . . 53

6 Compilacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

7 Ventana de estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

8 Entorno MPLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

9 Configuracion Ccsc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

v

Page 7: evasor de obstaculo

vi LISTA DE FIGURAS

10 Seleccion Ccsc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

11 Seleccion del dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . 57

12 Creacion de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 58

13 Creacion de un archivo nuevo . . . . . . . . . . . . . . . . . . . . . . 58

14 Agregar archivo al proyecto . . . . . . . . . . . . . . . . . . . . . . . 59

15 Opciones de configuracion del proyecto . . . . . . . . . . . . . . . . . 59

16 Configuracion del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 60

17 Compilar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

18 Resultado de la compilacion . . . . . . . . . . . . . . . . . . . . . . . 61

19 Entorno PICDOWNLOADER . . . . . . . . . . . . . . . . . . . . . . 62

20 Proceso de programacion . . . . . . . . . . . . . . . . . . . . . . . . . 63

21 Sistema mınimo del microcontrolador PIC . . . . . . . . . . . . . . . 64

22 Terminal para comunicacion serie . . . . . . . . . . . . . . . . . . . . 65

23 Configuracion de la terminal . . . . . . . . . . . . . . . . . . . . . . . 66

24 Entorno de la hyperterminal . . . . . . . . . . . . . . . . . . . . . . . 67

Page 8: evasor de obstaculo

Lista de Tablas

3.1 Puertos paralelos PIC16F877 . . . . . . . . . . . . . . . . . . . . . . 13

3.2 Control a traves del puerto serie . . . . . . . . . . . . . . . . . . . . . 14

3.3 Control de motores de CD . . . . . . . . . . . . . . . . . . . . . . . . 15

4.1 Lectura de dos sensores de contacto . . . . . . . . . . . . . . . . . . . 18

1 Control de motores de CD . . . . . . . . . . . . . . . . . . . . . . . . 49

vii

Page 9: evasor de obstaculo

viii LISTA DE TABLAS

Page 10: evasor de obstaculo

Introduccion

El manual de practicas para el laboratorio de Diseno de robots moviles servira comoapoyo y guıa a los alumnos que cursen la materia del mismo nombre, ası como dematerias afines, los objetivos se centran en encaminar al estudiante a comprendercon mayor profundidad el marco practico que involucra el uso de los robots moviles.

Construira el robot movil que sera utilizado durante el semestre, ası mismoaprender a programar en lenguaje de alto nivel usando el compilador CCS para lafamilia de microcontroladores PIC; conocera y programara los perifericos mas uti-lizados en el control de robots moviles.

1

Page 11: evasor de obstaculo

2

Page 12: evasor de obstaculo

Practica 1

Introduccion general

Objetivo: Familiarizar al alumno en los comportamientos de los robots empleandomaquinas de estados. Diseno de la estructura basica del robot movil que se usaradurante el semestre.

1.1 Duracion

Dos semanas

1.2 Introduccion

Un robot movil es un dispositivo que permite realizar tareas de manera autonoma,que pueden variar su complejidad dependiendo de la aplicacion que se quiera dar;en general, un robot esta compuesto basicamente de tres etapas:

1. Etapa mecanica

• Distribucion diferencial

• Distribucion tipo omnidireccional

• Distribucion tipo bicicleta

• Distribucion tipo triciclo

2. Etapa electronica

• Microcontrolador

3

Page 13: evasor de obstaculo

• Sensores

• Driver de potencia

• Pilas

• Reguladores de voltaje

3. Software

• Agoritmos de control implantados

Es necesario adaptar a los motores un sistema de transmision que proporcionela potencia con la que finalmente se desplazaran en el piso; pudiendo ser atraves deengranes, poleas o bandas.

Existen sistemas que tienen integrado un mecanismo de reduccion; en estos seencuentran los motoreductores y los llamados servomotores; los ultimos requierenser modificados para operar como motoreductores.

El microcontrolador o cualquier otro dispositivo de control no entrega lacorriente suficiente para mover los motores, por lo que se requiere de sistemas depotencia externos que proporcionen esta corriente; para efectos del curso se re-comienda el uso de los circuitos integrados L293 (B/D) o el L298.

En el apendice de esta practica se encontrara la informacion requerida para elcorrecto desarrollo de la misma.

1.3 Desarrollo

Para cada uno de los siguientes apartados, realizar los circuitos electronicos y lastareas que se piden.

1.3.1 Actividad 1

Leer detalladamente la informacion del apendice A; construir el diagrama electronicopara controlar dos motores de CD en una protoboard y colocarlo sobre la base delrobot.

4

Page 14: evasor de obstaculo

1.3.2 Actividad 2

El direccionamiento por trayectoria guarda el estado siguiente y las salidas de cadaestado de una carta ASM en una localidad de memoria. La porcion de la memo-ria que indica el estado siguiente es llamada la liga, mientras que la porcion queindica las salidas es llamada la parte de las salidas, como se muestra en la figura 1.1.

Figura 1.1: Diagrama por trayectoria

Concatenando la liga del estado presente junto con las entradas se forma la di-reccion de memoria que contiene la direccion del estado siguiente. Esta direccion seguarda en un registro que esta concatenando a las lıneas de direccion de la memoria,como se muestra en la figura 1.1. La seal de reloj conectada a los registros es la queindica la velocidad de la maquina de estados.

Usando un direccionamiento por trayectoria, construya una maquina de es-tados que ejecute el algoritmo de un robot movil que evada obstaculos, como semuestra en la figura 1.2.

5

Page 15: evasor de obstaculo

Figura 1.2: Robot movil que evade obstaculos

6

Page 16: evasor de obstaculo

En la figura 1.3 se muestra el algoritmo de un robot movil que evade obstaculos,cuando los sensores Si y Sd sensan un obstaculo son iguales a cero, en caso contrarioes uno.

Figura 1.3: Algoritmo de un robot movil evasor de obstaculos

1.3.3 Actividad 3

Usando dos sensores de contacto pruebe la maquina de estados, observando la se-cuencia de los estados y las salidas con leds.

7

Page 17: evasor de obstaculo

1.3.4 Actividad 4

Conecte la etapa de potencia con las salidas de la maquina de estados.

1.3.5 Actividad 5

Pruebe el algoritmo que evade los obstaculos con el robot construıdo.

8

Page 18: evasor de obstaculo

Practica 2

Sistema mınimo delmicrocontrolador PIC16F877

Objetivo: Conocer la estructura y caracterısticas de la tarjeta del microcontroladorPIC que se dispone en el laboratorio, la programacion en lenguaje C, programaciondel microcontrolador y la ejecucion en tiempo real.

2.1 Duracion

Una semanas

2.2 Introduccion

El sistema de desarrollo del microcontrolador PIC se representa en el figura 21 delapendice B; se distingue el circuito del sistema mınimo (fuente de reloj, sistema dereset y el microcontrolador). Este se comunica al circuito convertidor RS232-TTL(MAX232) a traves de la USART interna, lo que permite enviar y recibir informacioncon formato serie asıncrono con una computadora personal.

2.3 Desarrollo

Realizar las siguientes actividades.

9

Page 19: evasor de obstaculo

2.3.1 Actividad 1

Leer las notas anexas, que describen el uso del ambiente de desarrollo integradoMPLAB y el PIC C COMPILER

2.3.2 Actividad 2

Usando el entorno de su eleccion (MPLAB o el PIC C Compiler), escribir el siguienteprograma en C y compilarlo.

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

#fuses HS,NOPROTECT

#use delay(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#org 0x1F00, 0x1FFF void loader16F877(void){}

void main(){

int i,j;

char buffer[20];

float x;

i=0;

while(1) {

printf("\n\r type an integer ->");

gets(buffer);

j=atoi(buffer);

printf("\n\r type a float number ->");

gets(buffer);

x=atof(buffer);

printf("\n\r type a string ->");

gets(buffer);

printf("\n %d %d %f %s\n\r",i,j,x,buffer);

i++;

}

}

10

Page 20: evasor de obstaculo

2.3.3 Actividad 3

Cargue este programa en la tarjeta de desarrollo del PIC usando el PICDOWN-LOADER, como se indica en el anexo.

2.3.4 Actividad 4

Usando un programa de emulacion de una terminal (hyperterminal) vea el texto queenvıa el programa por el puerto serie e introduzca los datos que se piden.

2.3.5 Actividad 5

Escriba un programa en C que instrumente un contador; en el cual se ingrese el valorinicial, final y el incremento deseado; este ultimo puede ser positivo o negativo.

Mostrar los valores del contador en una terminal.

11

Page 21: evasor de obstaculo

12

Page 22: evasor de obstaculo

Practica 3

Control de puertos paralelos

Objetivo: Emplear los puertos paralelos que tiene el microcontrolador PIC paraobtener datos de dispositivos externos y controlar la operacion de dos motores decorriente directa.

3.1 Duracion

Dos semanas

3.2 Introduccion

El microcontrolador PIC16F877 tiene 5 puertos paralelos, la tabla 3.1 indica ladisposicion de ellos.

Puerto Tamano en bits FuncionA 6 BidireccionalB 8 BidireccionalC 8 BidireccionalD 8 BidireccionalE 3 Bidireccional

Tabla 3.1: Puertos paralelos PIC16F877

13

Page 23: evasor de obstaculo

3.3 Desarrollo

Realizar las siguientes actividades.

3.3.1 Actividad 1

Empleando el puerto paralelo B del microcontrolador; realizar las acciones de controlindicadas por la tabla 2. Donde x es un dato que es ingresado a traves de unaterminal externa hyperterminal.

Valor x Accion puerto B0 000000001 11111111

Tabla 3.2: Control a traves del puerto serie

3.3.2 Actividad 2

Empleando el puerto paralelo del microcontrolador, configurado como entrada; conec-tar un dip-switch a este.

Modificar el siguiente programa, de tal forma que el dato actual del puerto Asea transmitido a una terminal, ademas de ser mostrado en el puerto B.

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

#fuses HS,NOPROTECT

#use delay(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#org 0x1F00, 0x1FFF void loader16F877(void){}

void main(){

int var1;

while(1) {

var1=input_a();

output_b(var1);

}

}

14

Page 24: evasor de obstaculo

3.3.3 Actividad 3

De acuerdo a la asignacion reservada para las senales de control de la etapa depotencia de los motores; realizar un programa que permita controlar el funcionamientoy sentido de giro de estos por separado. La senal que indica el sentido de giro delos motores se realiza por medio del puerto A y las seales de control al driver por elpuerto B; la tabla 3.3 presenta los requerimientos.

Entrada puerto A Motor izquierdo Motor derecho Operacion del robot000000 Parado Parado Parado000010 Adelante Adelante Adelante000100 Atras Atras Atras001000 Adelante Atras Gira a la derecha010000 Atras Adelante Gira a la izquierda

Tabla 3.3: Control de motores de CD

15

Page 25: evasor de obstaculo

16

Page 26: evasor de obstaculo

Practica 4

Operacion de un robot movilusando el microcontrolador

PIC16F877

Objetivo: Controlar la operacion del robot movil construıdo en las practicasanteriores empleando maquinas de estados en un microcontrolador.

4.1 Duracion

Tres semanas

4.2 Desarrollo

Para cada uno de los siguientes apartados, realizar los disenos electronicos y progra-mas que se piden.

4.2.1 Actividad 1

Configurando el puerto A del PIC como entrada, conecte dos sensores de contacto ados pines de este. Muestre el valor leıdo de los sensores en una hyperterminal cada10 segundos.

17

Page 27: evasor de obstaculo

SWIizquierdo SWDderecho Salida a la terminalOFF OFF SWI ABIERTO SWD ABIERTOOFF ON SWI ABIERTO SWD CERRADOON OFF SWI CERRADO SWD ABIERTOON ON SWI CERRADO SWD CERRADO

Tabla 4.1: Lectura de dos sensores de contacto

4.2.2 Actividad 2

Escriba una funcion en C que controle los movimientos de un robot movil, en el seindicara el angulo en radianes que el robot primero girara y la distancia que despuesavanzara. La funcion debera tener el siguiente formato:

move_robot(float distancia, float angulo)

{

}

4.2.3 Actividad 3

Escriba una funcion en C que regrese el valor del sensor indicado. La funcion deberatener el siguiente formato:

float show_sensor(char *sensor, int num_sensor)

{

float x;

return(x);

}

4.2.4 Actividad 4

Cargue el siguiente programa en C , este ejecuta el algoritmo de un robot movilque evade obstaculos, como el que se muestra en la figura 4.1, en su robot. En lafigura 4.2 se muestra el algoritmo de un robot movil que evade obstaculos, cuando

18

Page 28: evasor de obstaculo

los sensores de tacto Si y Sd sensan un obstaculo sus valores son igual a cero, encaso contrario es uno.

19

Page 29: evasor de obstaculo

Programa en C para un robot movil que evade obstaculos.

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

#fuses HS,NOPROTECT

#use delay(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#org 0x1F00, 0x1FFF void loader16F877(void){}

// Constantes

#define ADELANTE move_robot(AVANCE, 0.0f);

#define ATRAS move_robot(-AVANCE, 0.0f)

#define GIRO_IZQ move_robot(0.0f, 0.7854f)

#define GIRO_DER move_robot(0.0f, -0.7854f)

#define SENSOR_IZQ 1

#define SENSOR_DER 2

#define SECURE 5.0f

move_robot(float distancia, float angulo)

{

}

float show_sensor(char *sensor, int num_sensor)

{

float x;

return(x);

}

// Esta funcion lee el sensor indicado

int lee_sensor(int num_sensor){

float sensor;

int valor_sensor;

char buffer[20];

char nombre_sensor[20];

20

Page 30: evasor de obstaculo

strcpy(nombre_sensor,"contacto");

sensor = show_sensor(nombre_sensor, num_sensor);

if (sensor > SECURE)valor_sensor=0;

else valor_sensor=1;

return(valor_sensor);

}

// Funcion que evade obstaculos

void evade()

{

float AVANCE=10.;

int estado;

int Si, Sd;

char buffer[20];

// Estado inicial

estado = 0;

// Loop infinito

while(1)

{

printf("Estado presente: %d\n\r",estado);

// Acciones

switch ( estado )

{

case 0: // est0

// Lee sensores

Sd = lee_sensor(SENSOR_DER);

Si = lee_sensor(SENSOR_IZQ);

printf("\n\rLectura sensores Si %d Sd %d\n\r",Si,Sd);

if (Si == 0)

if (Sd == 0) ADELANTE;

break;

case 1: // est1

ATRAS;

break;

21

Page 31: evasor de obstaculo

case 2: // est2

GIRO_IZQ;

break;

case 3: // est3

ATRAS;

break;

case 4: // est4

GIRO_DER;

break;

case 5: // est5

ATRAS;

break;

case 6: // est6

GIRO_IZQ;

break;

case 7: // est7

GIRO_IZQ;

break;

case 8: // est8

ADELANTE;

break;

case 9: // est9

ADELANTE;

break;

case 10: // est10

GIRO_DER;

break;

case 11: // est11

GIRO_DER;

break;

}

// Transiciones

switch ( estado )

{

case 0: if (Si == 0)

if (Sd == 0) estado = 0;

else estado = 1;

else

if (Sd == 0) estado = 3;

else estado = 5;

22

Page 32: evasor de obstaculo

break;

case 1: estado= 2;

break;

case 2: estado = 0;

break;

case 3: estado = 4;

break;

case 4: estado = 0;

break;

case 5: estado = 6;

break;

case 6: estado = 7;

break;

case 7: estado = 8;

break;

case 8: estado = 9;

break;

case 9: estado = 10;

break;

case 10:estado = 11;

break;

case 11:estado = 0;

break;

}

}

}

void main(){

// Ejecuta el algoritmo evasor de obstaculos

evade();

}

23

Page 33: evasor de obstaculo

Figura 4.1: Robot movil que evade obstaculos

24

Page 34: evasor de obstaculo

Figura 4.2: Algoritmo de un robot movil evasor de obstaculos

25

Page 35: evasor de obstaculo

26

Page 36: evasor de obstaculo

Practica 5

Generacion de Modulacion deAncho de Pulso ”PWM”

Objetivo: Utilizar el modulo de PWM de un microcontrolador para controlar laoperacion de los motores de un robot.

5.1 Duracion

Dos semanas

5.2 Introduccion

Se genera una senal a un perıodo constante y se modula el tiempo en alto de lamisma; con lo que se obtendra un ciclo de trabajo variable, en respuesta a estaaccion el robot se podra desplazar a diferentes velocidades.

Es usado el TIMER2 y los modulos CCP del microcontrolador PIC para fijarla senal y controlar el PWM; el perıodo esta dado por (5.1):

(5.1) T = (Tosc int)(PR2 + 1)(PREDIV ISOR)

donde Tosc int es el ciclo de maquina de procesador y es el inverso del reloj externodividido por cuatro; PR2 valor cargado en un registro interno de ocho bits y el

27

Page 37: evasor de obstaculo

Figura 5.1: Modulacion de ancho de pulso

PREDIV ISOR es el valor seleccionado para que el registro TMR2 se incrementecada cantidad de ciclos de reloj configurados por este parametro, pudiendo ser de 1,4 o 16.

El oscilador externo es de 20 MHz, con lo cual se obtiene un ciclo de maquinade 0.2µs; considerando un predivisor de uno y un valor en PR2 de 255, al usar laecuacion (5.3) se tendra:

T = (0.2µs)(PR2 + 1)(1) = 51.2µs

por lo tanto la frecuencia de la senal sera:

f = 19.531KHz

Para ser programado usando el compilador CCS se usa la funcian:

SETUP TIMER 2(T2 DIV BY 1, 255, 10);

T2 DIV BY 1 indica el predivisor de uno, 255 el valor que tendra PR2 y el numero

28

Page 38: evasor de obstaculo

10 es usado para generar peticiones de interrupcion.

El tiempo de la senal en alto, es calculado con la ecuacion 5.2 cuando seaempleado una resolucion de 8 bits.

(5.2) TON = (V ALOR)(1

XTAL)(4)(PREDIV ISOR)

Para una resolucion de 10 bits se usara 4.8.

(5.3) TON = (V ALOR)(1

XTAL)(PREDIV ISOR)

5.3 Desarrollo

Para cada uno de los siguientes apartados, realizar los disenos electronicos y progra-mas que se piden.

5.3.1 Actividad 1

Busque en la ayuda del compilador CCS C informacion sobre las siguientes funcioneslas cuales configuran pines del puerto C del PIC como salidas PWM:

setup_ccp1(CCP_PWM)

setup_ccp2(CCP_PWM)

set_pwm1_duty(duty)

set_pwm2_duty(duty)

setup_timer_2(T2_DIV_BY_1, 127, 10)

enable_interrupts(INT_TIMER2)

29

Page 39: evasor de obstaculo

5.3.2 Actividad 2

Tomando como base el programa en C que se muestra a continuacion, controlela velocidad de los motores del robot movil que se ha construido en las practicasanteriores. Conecte las lıneas de la etapa de potencia que controlan los motoresizquierdo y derecho a los pines 1 y 2 del puerto C los cuales generan las salidasPWM.

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

#fuses HS,NOPROTECT

#use delay(clock=20000000)

#use rs232(baud=19200,xmit=PIN_C6, rcv=PIN_C7)

#org 0x1F00, 0x1FFF

void loader16F877(void){}

// Inicializa puertos

inicializa_puertos(){

setup_ccp1(CCP_PWM);

setup_ccp2(CCP_PWM);

}

// Inicializa interrupciones

inicializa_temporizadores(){

// The cycle time will be (1/clock)*4*t2div*(period+1)

// In this program clock=10000000 and period=127 (below)

setup_timer_2(T2_DIV_BY_1, 127, 10);

}

// Se indica el ancho del periodo positivo del PWM

mv(long duty){

30

Page 40: evasor de obstaculo

// Se indica la direccion de movimiento de las llantas

output_d(0x0a);

// Se indican los tiempos del pwm

set_pwm1_duty(duty);

set_pwm2_duty(duty);

}

// Programa principal

void main(){

char linea[20];

long duty;

// Se inicializan las interrupciones

inicializa_temporizadores();

// Se inicializan los puertos

inicializa_puertos();

// Loop infinito

while(TRUE){

// Se lee el valor del periodo positivo

printf("\n\r-> ");

gets(linea);

duty=atol(linea);

// Actualiza el ciclo de trabajo

mv(duty);

}

}

31

Page 41: evasor de obstaculo

32

Page 42: evasor de obstaculo

Practica 6

Temporizadores

Objetivo: Utilizar el sistema de temporizadores de un microcontrolador, paracapturar las formas de onda generadas por los encoders de los motores de un robotmovil.

6.1 Duracion

Dos semanas

6.2 Introduccion

6.2.1 Encoders

La lectura de los pulsos se realiza con las funciones del TIMER0 y TIMER1; estostemporizadores pueden se configurados como temporizadores o como acumuladoresde eventos externos; en esta La lectura de los pulsos se realiza con las funcionesdel TIMER0 y TIMER1; estos temporizadores pueden se configurados como tem-porizadores o como acumuladores de eventos externos; en estaultima modalidad, lainformacion que generan los encoders permitiran conocer la velocidad de rotacionde los motores. Con el valor de los encoders y el radio de la llanta serviran paraestimar la distancia recorrida por el robot y la velocidad angular de las llantas.

En ambos temporizadores se requiere configurar el tipo de flanco que incre-mentar los registros internos asociados a estos, la figura 6.1 muestra la adecuacionde los encoders al microcontrolador.

33

Page 43: evasor de obstaculo

Figura 6.1: Captura de pulsos

La funcion de configuracion empleada para la deteccion de flancos de subidaen el motor izquierdo es:

SETUP TIMER 1(T1 EXTERNAL|T1 DIV 1);

Para la configurar la deteccion del mismo tipo de pulsos en el motor derechose emplea:

SETUP TIMER 0(RTCC EXTERNAL L TO H|T1 DIV 1);

La lectura del encoder izquierdo sera adquirida con:

CntLeft = get timer0();

y para el derecho:

CntRight = get timer1();

6.2.2 Interrupcion (TIMER2)

El perıodo de interrupcion es controlado por el TIMER2, este sera usado paragenerar el tiempo de muestreo para la actualizacion de la lectura de los encoders;ademas de las configuraciones descritas en el PWM se utiliza un POSTESCAL-ADOR, el cual indicar el periodo de la peticion de interrupcion del TIMER2; laexpresion quedara ahora como:

(6.1) T = (Toscint)(PR2)(PREDIV ISOR)(POSTESCALADOR)

34

Page 44: evasor de obstaculo

Cuando el valor del registro TMR2 sea igual a PR2 entonces se genera unacomparacion exitosa; cuando se han cumplido la cantidad de comparaciones indi-cadas en el POSTESCALADOR, entonces se genera una solicitud de interrupcion.Para configurar el perıodo de interrupcion se usa la funcion:

SETUP TIMER 2(T2 DIV BY 1, 255, 10);

Con estos datos se especifica que se usara un predivisor de uno, el valor dePR2 es 255 y el postescalador de 10; con lo que se obtiene un tiempo de 512µs.

6.3 Desarrollo

Para cada uno de los siguientes apartados, realizar los disenos electronicos y progra-mas que se piden.

6.3.1 Actividad 1

1. Busque en la ayuda del compilador CCS C informacion sobre las siguientesfunciones de los temporizadores:

setup_timer_0()

setup_timer_1()

setup_timer_2()

enable_interrupts()

6.3.2 Actividad 2

Tomando como base el programa en C que se encuentra en el programa 1 varıe lostiempos en los cuales ocurren las interrupciones de los temporizadores.

Programa 1

35

Page 45: evasor de obstaculo

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

#fuses HS,NOPROTECT #use delay(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#org 0x1f00, 0x1FFF

void loader16F877(void){}

// Esta interrupcion es llamada en forma automatica por el TIMER0.

#INT_TIMER0

void timer0() {

static long i=0,j=0;

set_timer0(0x00);

i++;

if(i>1024){

j++;

printf("T0 %ld\n\r",j);

i=0;

if(j>100)j=0;

}

}

// Esta interrupcion es llamada en forma automatica por el TIMER1.

#INT_TIMER1

void wave_timer1() {

static long i=0,j=0;

set_timer1(0xF000);

i++;

if(i>1024){

j++;

printf("T1 %ld\n\r",j);

i=0;

if(j>100)j=0;

}

36

Page 46: evasor de obstaculo

}

// Esta interrupcion es llamada en forma automtica por el TIMER2.

#INT_TIMER2

void wave_timer2() {

static long i=0,j=0;

i++;

if(i>4096){

j++;

printf("T2 %ld\n\r",j);

i=0;

if(j>100)j=0;

}

}

// Inicializa interrupciones

incializa_interrupciones(){

setup_timer_0(T1_INTERNAL|T1_DIV_BY_1); // setup interrupt 0

enable_interrupts(INT_TIMER0);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // setup interrupt 1

enable_interrupts(INT_TIMER1);

setup_timer_2( T2_DIV_BY_1, 128, 10); // setup interrupts 2

enable_interrupts(INT_TIMER2);

enable_interrupts(GLOBAL);

}

void main() {

incializa_interrupciones();

37

Page 47: evasor de obstaculo

while(TRUE);

}

6.3.3 Actividad 3

Coloque a un lado de las llantas un fondo negro y lıneas blancas para detectar cuantohan girado usando sensores infrarrojos, como se muestran en la figura 6.1. Conecteestos encodificadores a las pines C0 y A4 del PIC. Programe los temporizadores T0y T1 con contador de eventos externos dados por las lıneas de los encodificadores. Elprograma 2 captura los pulsos detectados en las transiciones de los encoders usandointerrupciones.

Figura 6.2: Encoders usando sensores reflectivos

Programa 2

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

38

Page 48: evasor de obstaculo

#fuses HS,NOPROTECT

#use delay(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#org 0x1F00, 0x1FFF void loader16F877(void){}

// Definicion de Constantes

#define NUM_PULSES_0 0xFF

#define NUM_PULSES_1 0xFFFF

//Variables Globales

static long CntRight=0,CntLeft=0;

// Esta interrupcion es llamada en forma automatica por el TIMER0.

#INT_TIMER0

void timer0() {

static long i=0;

CntLeft++;

printf("T0 %x\n\r",CntLeft);

set_timer0(NUM_PULSES_0);

}

// Esta interrupcion es llamada en forma automatica por el TIMER1.

#INT_TIMER1

void wave_timer1() {

static long i=0;

CntRight++;

printf("T1 %ld\n\r",CntRight);

set_timer1(NUM_PULSES_1);

}

// Inicializa interrupciones

inicializa_interrupciones(){

set_timer1(NUM_PULSES_1);

setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);

39

Page 49: evasor de obstaculo

enable_interrupts(INT_TIMER1);

set_timer0(NUM_PULSES_0);

setup_timer_0(RTCC_DIV_1|RTCC_EXT_L_TO_H);

enable_interrupts(INT_TIMER0);

enable_interrupts(GLOBAL);

}

void main(){

inicializa_interrupciones();

while(TRUE);

}

6.3.4 Actividad 4

Utilice el temporizador T2 para mostrar los contadores de los temporizadores T0 yT1; como se muestra en el programa 3.

Programa 3

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

#fuses HS,NOPROTECT

#use delay(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#org 0x1FFF, 0x1FFF void loader16F877(void){}

// Definicion de Constantes

#define NUM_TIMES_T2 256

#define NUM_SECOND 14

40

Page 50: evasor de obstaculo

// Esta interrupcion es llamada en forma automatica por el TIMER2.

#INT_TIMER2

void wave_timer2() {

static long k=0,l=0,m=0;

long i,j;

k++;

i=get_timer0();

j=get_timer1();

if(k>NUM_TIMES_T2){

set_timer0(0);

set_timer1(0);

k=0;

l++;

if(l>NUM_SECOND){

printf("T2 Temp. %ld motor Iz. %lu De. %lu\n\r",m,i,j);

l=0;

m++;

}

}

}

/* Inicializa interrupciones*/

incializa_interrupciones(){

set_timer1(0);

setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);

set_timer0(0);

setup_timer_0(RTCC_DIV_1|RTCC_EXT_L_TO_H);

setup_timer_2(T2_DIV_BY_1, 127, 10);

enable_interrupts(INT_TIMER2);

enable_interrupts(GLOBAL);

}

41

Page 51: evasor de obstaculo

// Programa Principal

void main(){

char linea[20];

long duty;

incializa_interrupciones();

while(TRUE);

}

42

Page 52: evasor de obstaculo

Practica 7

Controlador PID

Objetivo: Controlar la velocidad de los dos motores del robot construido en laspracticas anteriores usando un controlador PID

7.1 Duracion

Dos semanas

7.2 Desarrollo

Realizar la actividad indicada.

7.2.1 Actividad 1

1. 1. Tomando como base el siguiente programa, varie las constantes Kp, Ki yKd del controlador PID y modifique el codigo, si es necesario, para controlar lasvelocidades de los motores de su robot.

/********************************************

* robot_pid.c *

* *

* v. 1.0 *

* *

43

Page 53: evasor de obstaculo

* Este programa controla la *

* velocidad de dos motores *

* usando un control PID *

* *

* Jesus Savage *

* Ruben Anaya *

* Carlos Munive *

* *

* FI-UNAM, Nov-2007 *

* *

*********************************************/

// Definiciones PIC

#include <16f877.h>

#device ADC=8

#include <stdlib.h>

#fuses HS,NOPROTECT

#use delay(clock=20000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#org 0x1FFF, 0x1FFF void loader16F877(void){}

// Definicion de Constantes

#define CNT_T2 3

#define NUM_TIMES_T2 64*CNT_T2

#define NUM_SECOND 80/CNT_T2

#define SIZE_DATA 50

#define ADELANTE 0x0a

// Constantes de acondicionamiento motor izquierdo

#define Kci 0.2

#define Kci1 Kci*2.7

#define Kci2 Kci*2.2

#define Kci3 Kci*2.0

#define Kci4 Kci*1.6

#define Kci5 Kci*1.2

// Constantes de acondicionamiento motor derecho

#define Kcd 0.18

#define Kcd1 Kcd*2.7

#define Kcd2 Kcd*2.2

#define Kcd3 Kcd*2.0

44

Page 54: evasor de obstaculo

#define Kcd4 Kcd*1.6

#define Kcd5 Kcd*1.2

// Constantes del control PID

#define Kp 0.7 //1.7

#define Ki 0.0 //0.35

#define Kd 0.000 //0.005

//Variables Globales

long CntRight=0,CntLeft=0;

int flag=0;

long wi=0,wd=0;

float fCntRight,fCntLeft;

// Control PID

mv_pid(){

long rni=0,rnd=0;

float frni=0.0,frnd=0.0;

float ewi=0,ewd=0;

static float prev_rni=0,prev_rnd=0,prev_ewi=0,prev_ewd=0;

static float prev2_ewi=0,prev2_ewd=0;

float cntder,cntizq;

//Acondiciona los valores de las entradas (encoders)

if(wd<=62)cntder=wd*Kcd1;

else if(wd<125)cntder=wd*Kcd2;

else if(wd<250)cntder=wd*Kcd3;

else if(wd<350)cntder=wd*Kcd4;

else cntder=wd*Kcd5;

if(wi<=62)cntizq=wi*Kci1;

else if(wi<125)cntizq=wi*Kci2;

else if(wi<250)cntizq=wi*Kci3;

else if(wi<350)cntizq=wi*Kci4;

else cntizq=wi*Kci5;

cntizq=cntizq/1024.0;

cntder=cntder/1024.0;

// Calcula el error

ewd=cntder-fCntRight;

45

Page 55: evasor de obstaculo

ewi=cntizq-fCntLeft;

// Calcula el control para cada motor

frni= prev_rni + Kp*(ewi-prev_ewi)+ Ki*(ewi-prev_ewi)+

Kd*(ewi-2*prev_ewi+prev2_ewi);

frnd= prev_rnd + Kp*(ewd-prev_ewd)+ Ki*(ewd-prev_ewd)+

Kd*(ewd-2*prev_ewd+prev2_ewd);

// Guarda valores para la siguiente iteracion

prev_rni=frni;

prev_rnd=frnd;

prev_ewi=ewi;

prev_ewd=ewd;

//Acondiciona los valores de las salidas

if(frni<0)frni=0;

else if(frni>1.0)frni=1.0;

if(frnd<0)frnd=0;

else if(frnd>1.0)rnd=1.0;

rni=2048.0*frni;

rnd=2048.0*frnd;

// Coloca los valores para generar los PWM

set_pwm1_duty(rni);

set_pwm2_duty(rnd);

}

// Rutina para la interrupcion del TIMER2.

#INT_TIMER2

void wave_timer2() {

static long k=0;

static int i=0;

k++;

if(k>NUM_TIMES_T2){

k=0;

CntLeft=get_timer0();

CntRight=get_timer1();

fCntRight=CntRight/1024.0;

fCntLeft=CntLeft/1024.0;

46

Page 56: evasor de obstaculo

// Muestra los datos

if(flag==1){

i++;

if(i > SIZE_DATA)flag=0;

printf("%f %f\n\r",fCntLeft,fCntRight);

}

else i=0;

// Ejecuta el algoritmo de control PID

mv_pid();

// Inicializan los contadores de los temporizadores de nuevo

set_timer0(0);

set_timer1(0);

}

}

/* Inicializa puertos */

inicializa_puertos(){

// Se inicializan los pines para generar los pwms

setup_ccp1(CCP_PWM);

setup_ccp2(CCP_PWM);

// Se indica la dirrecion de los motores

output_d(ADELANTE);

}

// Inicializa interrupciones y temporizadores

inicializa_interrupciones(){

// Se inicializan los temporizadores 0 y 1 como encoders

set_timer1(0);

setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);

set_timer0(0);

setup_timer_0(RTCC_DIV_1|RTCC_EXT_L_TO_H);

// Se inicializa el temporizador 2 para generar el PWM

setup_timer_2(T2_DIV_BY_1, 127, 10);

// Se habilitan las salidas

enable_interrupts(INT_TIMER2);

enable_interrupts(GLOBAL);

}

/* Programa principal */

void main(){

47

Page 57: evasor de obstaculo

char linea[5];

inicializa_interrupciones();

inicializa_puertos();

while(TRUE){

// lee las velocidades de los motores

gets(linea);

wi=atol(linea);

flag=1;

gets(linea);

wd=atol(linea);

flag=1;

}

}

48

Page 58: evasor de obstaculo

Apendice A

Circuito L293 B/D

El L293 es un circuito integrado disenado para manejar motores hasta de 1 A.Entre las aplicaciones tıpicas, incluye manejo de cargas inductivas como solenoides,relevadores, motores de corriente directa y motores a pasos, emplea internamentelos transistores de potencia y utiliza un buffer para senales de nivel bajo.

Algunas de sus caracterısticas son:

• Salida por canal de 1 A.

• Reemplazo directo L293B y L293D

• Empaquetado DIP de 16 terminales

• Cero logico hasta 1.5 volts

• Cuatro senales de control independientes

• Dos puentes H independientes

• Dos senales de habilitador para cada puente H

• Alimentacion independiente al motor (0 a 32 volts)

• Alimentacion al circuito de 5 volts

La distribucion de pines se muestra en la figura 1 y la asignacion de ellos enla tabla 4.

Terminal Funcion16 Alimentacion al circuito 5 volts8 Alimentacion independiente al motor (0V a 32 V)

3, 4, 12, 13 0 Volts2, 7, 10, 15 Control de direccion de los motores3, 6, 11, 14 Salida a motores

2, 9 Habilitadores

Tabla 1: Control de motores de CD

49

Page 59: evasor de obstaculo

Figura 1: Terminales L293

Algunas de las configuraciones mas usadas se numeran a continuacion:

1. Control directo usando tres senales de para cada motor (figura 2)

2. Control directo usando dos senales para cada motor (figura 3)

3. Control usando optoacopladores en cada senal (figura 4)

50

Page 60: evasor de obstaculo

Figura 2: Control con tres senales

Figura 3: Control con dos senales

51

Page 61: evasor de obstaculo

Figura 4: Uso de optoacopladores

Es recomendable contar con una fuente de alimentacion para el circuito con-trolador y otra para el driver para evitar el efecto de las cargas inductivas. Para losdos primeros casos es necesario conectar la tierra de ambos sistemas con la finalidadde cerrar el circuito; mientras que en la tercera se contara con independencia totalen la alimentacion de ambos sistemas.

52

Page 62: evasor de obstaculo

Apendice B

Compilador CCS

El compilador CCS permite programar los algoritmos empleando programacion enlenguaje C, es posible la implantacion de estos usando el entorno de desarrollointegrado del PIC C Compiler o el IDE del MPLAB. Se recomienda consultar laayuda del compilador para conocer las funciones especıficas que vienen integradasen este.

IDE PIC C Compiler

Es un entorno facil de usar, permite editar los programas, compilar y cuenta con unaterminal que es util en la comunicacion serie asıncrona; una vez que se ha compiladoun programa y se desea trabajar con otro, es necesario cerrar este, para continuartrabajando con el nuevo; en caso contrario seguira compilado el codigo original.

Al ejecutar el PIC C Compiler, presenta su entorno, como se muestra en lafigura 5.

Figura 5: Entorno PIC C Compiler

53

Page 63: evasor de obstaculo

Una vez terminado el programa, se debe seleccionar la opcion Microchip 14bits, para configurar las versiones compatibles con los PIC16F877; una vez hechoesto se procede a compilar; tal como se muestra en la figura 6.

Figura 6: Compilacion

En caso de no existir error en el programa, presenta los mensajes que se indicanen la figura 7; generando el codigo de maquina *.HEX y se proceder a programarel dispositivo mediante las opciones que se describen ms adelante. En caso de tenererror en el programa, indicara el tipo de este y la lınea donde se encuentra.

54

Page 64: evasor de obstaculo

Figura 7: Ventana de estado

MPLAB

Usar este entorno para compilar programas escritos en C, requiere un proceso maslargo; se necesita crear un proyecto, agregar un programa fuente a este y compilar,de igual manera generara un programa*.HEX.

El entorno de tabajo se muestra en la figura 8.

La configuracion de la heramienta empleada para compilar los programas; se-leccionar Project y despues select languaje toolsuite; debera seleccionar CCS CCompiler PIC12/14/16/18 (figura 9).

55

Page 65: evasor de obstaculo

Figura 8: Entorno MPLAB

Figura 9: Configuracion Ccsc

56

Page 66: evasor de obstaculo

Comprobar la ubicacion del compilador; nuevamente seleccionar project, setlanguaje Tool locations, ubicar el compilador Ccsc.exe; tal como se indica en lafigura 10.

Figura 10: Seleccion Ccsc

Seleccionar la version del microcontrolador (figura 11).

Figura 11: Seleccion del dispositivo

57

Page 67: evasor de obstaculo

Para crear un proyecto nuevo, en el menu Project seleccionar new; indicar elnombre y la ubicacion del proyecto (figura 12).

Figura 12: Creacion de un proyecto

Se debe abrir el entorno para escribir el programa fuente, seleccionar File yposteriormente New; se abrira la ventana de captura sin nombre, una vez terminadoindicar el nombre y ubicacion donde se almacenara el programa, debe tener extencian*.C (figura 13).

Figura 13: Creacion de un archivo nuevo

58

Page 68: evasor de obstaculo

El programa recien creado se debera agregar al proyecto, siguiendo el pro-cedimiento de la figura 14.

Figura 14: Agregar archivo al proyecto

Es necesario configurar el proyecto; por lo que se debe posicionar en el archivoagregado, presionar el boton izquierdo del mouse y seleccionar Build Option (figura15).

Figura 15: Opciones de configuracion del proyecto

59

Page 69: evasor de obstaculo

Deshabilitar la opcion Symbol F ile en Others F iles y habilitar None en debug(figura 16).

Figura 16: Configuracion del proyecto

Una vez realizado todo el procedimiento anterior, se iniciara la compilacion;accediendo a Project del menu principal y seleccionar build all; o en su caso usarel cono de compilacion (figura 17).

Figura 17: Compilar

60

Page 70: evasor de obstaculo

En caso de no existir error, mostrara la pantalla de la figura 18. Se tendraentonces el codigo de maquina requerido para programar al microcontrolador.

Figura 18: Resultado de la compilacion

61

Page 71: evasor de obstaculo

PICDOWNLOADER

Una vez generado el codigo *.HEX, se programara en el PIC, este proceso se podrahacer utilizando un programador externo (hardware) o un pequeno codigo que seprograma previamente al microcontrolador llamado Bootloader y que permitira porsoftware la programacion del mismo.

Al jecutar el programa PICDOWNLOADER, mostrara la figura 19; se de-bera seleccionar el programa deseado, configurar la velocidad a la cual transmitiralos datos, (informacin del bootloader dependiente de la version del microcontroladory del valor del cristal usado), ası mismo indicar el puerto serie (COM) donde se haconectado.

Figura 19: Entorno PICDOWNLOADER

Una vez seleccionado el programa, presionar Write, el ambiente solicitara sepresione el boton de reset del sistema; una vez hecho esto se inicia de programaciondel microcontrolador; la barra de estado representa el avance del proceso.

En el momento que se ha concluıdo la programacion, despliega el texto AllOK; en caso contrario se debera revisar problemas en el sistema de desarrollo o enla configuracion realizada. El programa recien cargado iniciara automaticamente laejecucion (figura 20).

62

Page 72: evasor de obstaculo

Figura 20: Proceso de programacion

63

Page 73: evasor de obstaculo

Sistema mınimo

Figura 21: Sistema mınimo del microcontrolador PIC

64

Page 74: evasor de obstaculo

Hyperterminal

Para establecer esta terminal debe de acceder a Programas, accesorios y comunicacionespara ubicar a la terminal; la primer pantalla que presenta, es para ingresar el nombrede la conexion (figura 22); posteriormente solicitara el numero de COM donde seeste conectando.

Figura 22: Terminal para comunicacion serie

Configurar la terminal; esto incluye la velocidad del programa, el protocolo yel tipo de control de los datos; la figura 23 muestra la configuracion tıpica.

65

Page 75: evasor de obstaculo

Figura 23: Configuracion de la terminal

66

Page 76: evasor de obstaculo

Una vez que se ha tecleado aplicar y posteriormente aceptar, se tendra abiertala terminal para la comunicacion serie asıncrona entre una computadora personal yel microcontrolador. Tal vez requiera presionar el boton de reset a procesador parareiniciar el programa; en caso de requerir reprogramar al procesador mediante elbootloader, debera desconectarse de la hyperterminal para liberar el puerto.

Figura 24: Entorno de la hyperterminal

67