PROYECTO: Velocista y coche teledirigido

Transcripción

PROYECTO: Velocista y coche teledirigido
PROYECTO:
Velocista y coche teledirigido
Departamento de Electricidad y Electrónica
Ciclo Formativo de Grado Superior:
Desarrollo de Productos Electrónicos
Alumno:
Daniel García Bravo
Profesores:
Pedro Alonso Sanz
Juan Dongil García
Alfonso García Gallego
Instituto:
I.E.S. Joan Miró
Localidad:
San Sebastián de los Reyes
Curso:
2008 / 2009
Ciclo Superior de Desarrollo de Productos Electrónicos
Índice de contenido:
1.- Introducción
5
2.- Diagrama en bloques del robot
7
3.- Esquema eléctrico del robot
8
4.- Análisis de los Bloques
9
4.1.- Placa de alimentación-adaptador de señales PC-UC 7
4.1.1.- Fuente de alimentación
4.1.1.1.- Esquema eléctrico de la fuente de alimentación
4.1.2.- Adaptador de señales PC-UC
4.1.2.1.- Esquema eléctrico del adaptador de señales PC-UC
9
9
10
10
11
4.2.- Placa de control
4.2.1.- Esquema eléctrico de la placa de control
12
13
4.3.- Placa de potencia
4.3.1.- Esquema eléctrico de la placa de potencia
14
17
4.4.- Placa de sensores
4.4.1.- Esquema eléctrico de la placa de sensores
18
19
4.5.- Mando
4.5.1.- Esquema eléctrico del mando
20
21
5.- Esquema eléctrico de simulación con Proteus
22
5.1.- Simulación del robot velocista
5.2.- Simulación del robot teledirigido
6.- Programas
6.1.- Programas de prueba
6.1.2.- Programas de prueba de los leds
6.1.2.1.- Diagrama de flujo
6.1.2.2.- Programa
6.1.3.- Programas de prueba de los sensores
6.1.3.1.- Programas de prueba de los sensores OP1 Y OP2
6.1.3.1.1.- Diagrama de flujo
6.1.3.1.2.- Programa
6.1.3.2.- Programas de prueba de los sensores Op3 y Op4
6.1.3.2.1.- Diagrama de flujo
6.1.3.2.2.- Programa
6.1.3.3.- Programas de prueba de los sensores Op5 y Op6
6.1.3.3.1.- Diagrama de flujo
6.1.3.3.2.- Programa
Daniel García Bravo
I.E.S. Joan Miró
22
23
24
24
24
24
25
26
26
26
27
29
29
29
31
31
31
2
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.3.4.- Programas de prueba de los sensores OP7 Y OP8
6.1.3.4.1.- Diagrama de flujo
6.1.3.4.2.- Programa
33
33
33
6.1.4.- Programas de pruebas de control de giro de los motores
6.1.4.1.- Programa de prueba del motor derecho
6.1.4.1.1.- Diagrama de flujo
6.1.4.1.2.- Programa
6.1.4.2.- Programa de prueba del motor izquierdo
6.1.4.2.1.- Diagrama de flujo
6.1.4.2.2.- Programa
35
35
36
36
37
38
38
6.1.5.- Programas de pruebas de control de velocidad de los motores
6.1.5.1.- Programa de control de velocidad del motor derecho
6.1.5.1.1.- Diagrama de flujo
6.1.5.1.2.- Programa
6.1.5.2.- Programa de control de velocidad del motor izquierdo
6.1.5.2.1.- Diagrama de flujo
6.1.5.2.2.- Programa
39
39
40
40
43
43
43
6.2.- Programas de funcionamiento del robot
6.2.1.- Programa del robot velocista
6.2.1.1.- Diagramas de flujo
6.2.1.2.- Programa
6.2.2.- Programa del coche teledirigido
6.2.2.1.- Diagrama de flujo
6.2.2.2.- Programa
7.- Fabricación de placas
46
46
46
50
61
61
61
62
7.1.- Fabricación de la fuente de alimentación-adaptador de señales PC-UC
7.1.1.- Esquema eléctrico
7.1.2.- Cara de componentes
7.1.3.- Cara de pistas bottom copper
63
63
64
65
7.2.- Fabricación de la placa de control
7.2.1.- Esquema eléctrico
7.2.2.- Componentes
7.2.3.- Cara de componentes y de pistas top copper
7.2.4.- Cara de pistas bottom copper
66
66
67
68
69
7.3.- Fabricación de la placa de potencia
7.3.1.- Esquema eléctrico
7.3.2.- Componentes
7.3.3.- Cara de componentes y de pistas top copper
7.3.4.- Cara de pistas bottom copper
70
70
71
72
73
7.4.- Fabricación de la placa de sensores
7.4.1.- Esquema eléctrico
7.4.2.- Medidas
74
74
75
Daniel García Bravo
I.E.S. Joan Miró
3
Ciclo Superior de Desarrollo de Productos Electrónicos
7.4.3.- Componentes
7.4.4.- Cara de componentes y de pistas top copper
7.4.5.- Cara de pistas bottom copper
75
75
76
7. 5.- Fabricación del mando a distancia
7.5.1.- Esquema eléctrico
7.5.2.- Medidas
7.5.3.- Componentes
7.5.4.- Cara de componentes y de pistas top copper
7.5.5.- Cara de pistas bottom copper
77
77
77
78
78
79
8.- Carrocería
80
9.- Lista de Componentes y coste económico
81
10.- Coste económico total
85
11.- Referencias
86
12.- Anexos técnicos
87
Daniel García Bravo
I.E.S. Joan Miró
4
Ciclo Superior de Desarrollo de Productos Electrónicos
1.- Introducción
El proyecto consiste en diseñar y fabricar un robot velocista, de tal forma que sea
capaz de seguir una línea negra lo más rápidamente sin salirse de ella, y además que
tenga la posibilidad de ser controlado con un mando a distancia, por medio de vía
radiofrecuencia.
El robot consta de una placa con la fuente de alimentación y el adaptador de señales
PC-UP, de la placa de control, la placa que controla los motores y la placa de sensores.
Todas las placas, a excepción de esta última, tienen las mismas medidas: 75 x 70.
Se busca que tanto la fuente de alimentación y el adaptador de señales PC-UP y la
placa de potencia, sean comunes para todos los proyectos, haciendo que, en caso de que
una placa se averíe, sea posible sustiturila por otra de otro robot, sin tener que hacer una
nueva. Las placas de control, donde se sitúa el PIC, y la placa de sensores, son
diferentes en cada proyecto.
El robot se controla por un PIC16F876A, en el cual se ubica el programa que hace que
el robot funcione como un velocista. Por medio del cambio de un jumper, el robot pasa
a funcionar como coche teledirigido.
El robot consta de dos motores que son controlados por la placa de potencia, que a su
vez son dependientes de la placa de control, dónde está situado el PIC. Mediante una
señal de PWM hacemos que a nuestro robot le sea posible ir más rápido o más lento,
según las circunstancias que deseemos. Esto lo hacemos según la velocidad que
imprimamos a los dos motores. Si la velocidad es igual en ambos motores, el robot irá
recto, si un motor gira más rápido que otro, hará que nuestro robot gire. También
conseguiremos determinar la dirección del coche, hacia delante o hacia atrás.
Para poder hacer que nuestro robot sea velocista le instalaremos 8 sensores CNY70,
para localizar la línea o evitarla, según deseemos con nuestro programa. También
corregiremos la posición, por medio de la variación de velocidad en los motores.
Daniel García Bravo
I.E.S. Joan Miró
5
Ciclo Superior de Desarrollo de Productos Electrónicos
Para hacer que nuestro robot sea teledirigido, tenemos que crear una comunicación
entre el PIC y el mando, con el que controlamos nuestro robot. Dado que lo hacemos
vía radiofrecuencia, le “instalamos” un receptor y un mando a distancia que será el
emisor. Esto lo conseguimos por medio de dos módulos: un emisor CEBEK C-0503 y
un receptor CEBEC C-0504. Ambos trabajan en modulación AM con una frecuencia
portadora de 433,92 MHz que poseen un ancho de banda de 4 KHz.
El lenguaje de programación para los programas del robot se realiza mediante el
lenguaje C.
El software, utilizado para el desarrollo y fabricación de nuestro robot, ha sido el
programa Proteus, que nos permite simular el software y el hardware al mismo tiempo.
A su vez nos es posible trabajar con C y desarrollar las placas de nuestro robot, con la
posibilidad de realizar también la carrocería.
Para cargar los programas desde el ordenador al PIC, se ha utilizado el grabador
PICdownloader
En todas las placas que se realizan, y a modo de facilitar la toma de medidas, se pone
un conector de masa, este nos ayuda en la toma de medidas, colocando la punta de masa
de nuestro, por ejemplo, polímetro; y la otra punta, para tomar medidas, y así poder
trabajar solo con una mano.
Daniel García Bravo
I.E.S. Joan Miró
6
Ciclo Superior de Desarrollo de Productos Electrónicos
2.- Diagrama en bloques del robot
Daniel García Bravo
I.E.S. Joan Miró
7
Ciclo Superior de Desarrollo de Productos Electrónicos
3.- Esquema eléctrico del robot
Daniel García Bravo
I.E.S. Joan Miró
8
Ciclo Superior de Desarrollo de Productos Electrónicos
4.- Análisis de los bloques
4.1.- Placa de alimentación-adaptador de señales PC-UC
En esta placa se sitúa la parte que distribuye la tensión necesaria para el
funcionamiento de todos los integrados, sensores y para los motores.
También esta en esta placa la parte que sirve para cargar programas a nuestro PIC, por
medio del integrado MAX 232.
4.1.1.- Fuente de alimentación
La fuente de alimentación es un circuito que se encarga de obtener una tensión de 5V
continua a partir de una tensión de entrada de aproximadamente 9V. Para realizar esto
nos serviremos del regulador de tensión LM350K. Este integrado es capaz de regular la
tensión de salida de 3 a 35 voltios. También obtenemos una tensión de 9 voltios
aproximadamente, para alimentar a los motores, pero estos no los obtenemos a partir del
LM350K.
Como se puede observar en el esquema eléctrico de la fuente, C1 y C3, son
condensadores de filtrado de la señal, que se encargan de eliminar la parte alterna de la
tensión, para hacerla lo más continua posible. Los condensadores C2 y C4, por su parte,
se encargan de filtrar las posibles señales que el circuito absorba, ya que las pistas de la
placa actúan como una antena y estos condensadores filtran esas señales, llevándolas a
masa.
El diodo D1 tiene la misión de proteger el circuito en caso de invertir la polaridad de
la batería. El diodo D2 sirve para proteger el LM350K, para hacer que las tensiones que
entran por la salida pasen por el diodo hasta la entrada del LM350K, evitando así que se
introduzcan por la salida del integrado. El diodo D4 se utiliza para proteger el LM350K,
en caso de que hayamos conectado la batería a la salida de 5 voltios, el polo positivo a
la masa y el polo negativo a la salida de 5 voltios. Y el D3, es un diodo led y nos indica
que nuestra tiene tensión a la salida, va acompañado con su resistencia correspondiente,
R1; para limitar la corriente que pase por el diodo y evitar que se averíe.
La resistencia R38, el potenciómetro RV1 y el condensador C15, son los que nos
permiten hacer una fuente regulable de tensión. La R38 nos fija una corriente para el
potenciómetro. Con el potenciómetro variamos la tensión de salida y con el
condensador hacemos que, al variar la tensión de referencia, no vaya dando saltos, sino
que varíe lentamente. Entre la salida del LM350K y la masa tiene que existir la tensión
de salida que hayamos regulado. Entre la patilla 3 y 1 del regulador de tensión hay una
diferencia de potencial de 5 voltios y una caída de tensión en RV1 es la diferencia entre
la salida regulada y la tensión entre la patilla 3 y 1
Pondremos dos conectores: J1A que es el conector encargado de llevar los 5 voltios, y
su masa, necesarios para el funcionamiento de los integrados, el PIC y los sensores,
también lleva las conexiones necesarias para comunicar el PC y el PIC y así poder
cargar los programas, RC71 y RC61. El conector JP1 es el encargado de llevar los 9
voltios a los motores y al L298 directamente y con una masa, directa de la batería.
Daniel García Bravo
I.E.S. Joan Miró
9
Ciclo Superior de Desarrollo de Productos Electrónicos
A la hora de fabricar la placa, hay que tener en cuenta que es necesario colocar un
disipador al LM350K. La solución adoptada es que el disipador sea el propio cobre de
la placa que utilizamos, lo cual significa ahorrar en espacio y en materiales sin
desperdiciar el cobre de la placa.
Antes de conectar cualquier otra placa, debemos comprobar que a la salida haya 5
voltios aproximadamente, si no tenemos dicha tensión, podemos regularla por medio del
potenciómetro.
4.1.1.1.- Esquema eléctrico de la fuente de alimentación
VP => salida de 9 voltios.
VDD3 => salida de 5 voltios.
4.1.2.- Adaptador de señales PC-UC
Este circuito nos servirá para cargar programas en el PIC a través del integrado
MAX232.
Este integrado intercambia niveles de TTL a RS-232 y de RS-232 a TTL. Un 0 lógico
es un 0 en RS-232 y un 1 lógico es un 1 en RS-232.
Un 0 lógico en TTL es igual a 0v, en RS-232 es una tensión comprendida entre +3v y
+12v. Un 1 lógico en TTL es igual a +5v y en RS-232 es una tensión comprendida entre
-3v y -12v
Daniel García Bravo
I.E.S. Joan Miró
TTL
1 = +5v
RS-232
1 = -3v hasta -15v
0 = 0v
0 = +3v hasta +15
10
Ciclo Superior de Desarrollo de Productos Electrónicos
4.1.2.1.- Esquema eléctrico del adaptador de señales PC-UC
VP: 9 voltios
VDD3: 5 voltios
VCC: alimentación del integrado MAX232
RC61: comunicación PIC – PI
RC71: comunicación PC - PIC
Daniel García Bravo
I.E.S. Joan Miró
11
Ciclo Superior de Desarrollo de Productos Electrónicos
4.2.- Placa de control
En esta placa está situado el microcontrolador PIC16F876A, que es el encargado del
control del robot por medio de los programas que realicemos y que le carguemos.
En nuestra placa de control el componente principal es el PIC. Este nos sirve para
leer los datos que lleguen de los sensores por el conector J2 y, dependiendo de nuestro
programa, actuar sobre los motores en el sentido de giro y su control de velocidad.
Nuestro PIC trabaja a 1Mhz, esto se consigue mediante el cristal de cuarzo X1, que
genera la frecuencia de trabajo actuando conjuntamente con los condensadores C12 y
C13, variando la capacidad de estos últimos consigue modificar la frecuencia de trabajo
del PIC.
Las resistencias R18 y R19, el condensador C14 y el pulsador de RESET, hacen que
el PIC se resetee y empiece con el programa desde el principio.
El JUMPER3 nos sirve para cargar el programa en el PIC a través de un PC. Si se le
cambia de posición nos hace recibir los datos del receptor de radio frecuencia. En la
posición del jumper en RC7(BL) nos permite cargar programas y en la posición de
RC7(RF) hace que el PIC obedezca a las instrucciones que lleguen de la tarjeta de
radiofrecuencia.
El JUMPER4 nos ayuda a elegir el modo de funcionamiento, de acuerdo con la
elección: si queremos que nuestro robot se comporte como un velocista o como un
coche teledirigido. Este jumper posee un diodo led, RA; con su correspondiente
resistencia limitadora de corriente, R17; que nos indica el modo de funcionamiento de
nuestro robot. De tal modo que si el diodo se enciende en nuestro robot, es un coche
teledirigido y si el led está apagado quiere decir que nuestro robot funciona como un
velocista.
En esta placa hay dos diodos leds: D13 y D15, que sirven para indicar la dirección
del coche en modo „coche teledirigido‟, aunque dependiendo de lo que queremos hacer
podremos poner otras utilidades a los leds, como señalizar cuando lea líneas negras en
modo velocista. Estos dos diodos van acompañados por sus respectivas resistencias
limitadoras de corriente: R14 y R15.
También disponemos de un botón de inicio. Su función se basa en que, una vez
situado el robot en modo velocista correctamente sobre la pista, pulsemos dicho botón y
el robot empiece a funcionar. Pero también puede tener otras funciones, dependiendo
del programa cargado en el PIC.
Disponemos también de varios conectores BUS I2C: J4, J5, J6 y J7. Las patillas del
PIC: RC3 y RC4, son las que utiliza para controlarlo. A la salida de estas dos patillas
del PIC hay dos resistencias de 4.7K necesarias para el funcionamiento del BUS I2C.
El receptor de datos AM, CEBEK-C-0504, es un circuito híbrido necesario para
poder controlar el robot a través de un mando a distancia. Es el encargado de recibir, vía
radiofrecuencia, los datos que llegan del mando a distancia.
Daniel García Bravo
I.E.S. Joan Miró
12
Ciclo Superior de Desarrollo de Productos Electrónicos
El conector J1 es el que trae de la placa, de la fuente de alimentación, los 5 voltios,
la masa y las dos conexiones necesarias para poder comunicar el PIC con un PC.
El conector J2 es el encargado de comunicar los sensores con el PIC y también lleva
la alimentación de 5 voltios y su masa.
Y el conector J3 es el que comunica el PIC con la placa de potencia, que hace que el
PIC controle el giro y la velocidad de los motores, este conector lleva su masa y sus 5
voltios.
4.2.1.- Esquema eléctrico de la placa de control
VDD: 5 voltios
RA0: conexión sensor - PIC
RA1: conexión sensor - PIC
RA2: conexión sensor - PIC
RA3: conexión sensor - PIC
RA4: conexión sensor - PIC
RA5: conexión sensor - PIC
RB0: jumper modo de funcionamiento
RB1: inicio
RB2: conexión PIC - diodo led D15
RB3: conexión PIC - diodo led D13
RB4: conexión PIC - optoacoplador U3
RB5: conexión PIC - optoacoplador U4
Daniel García Bravo
I.E.S. Joan Miró
RB6: conexión PIC - optoacoplador U5
RB7: conexión PIC - optoacoplador U6
RC0: conexión sensor - PIC
RC1: conexión PIC - optoacoplador U8
RC2: conexión PIC - optoacoplador U7
RC3: conexión BUS I2C
RC5: conexión sensor - PIC
RC4: conexión BUS I2C
RC61: comunicación PIC - PI
RC7 (BL): comunicación PC - PIC
RC7 (RF): comunicación PIC - Cebek
Antena: receptor de los datos emitidos
por el mando.
13
Ciclo Superior de Desarrollo de Productos Electrónicos
4.3.- Placa de potencia
Esta placa se encarga de hacer posible el control de velocidad de los motores y de su
correspondiente sentido de giro.
Con el integrado L298 controlamos el sentido de giro y la velocidad de los motores.
Las patillas 5 y 7, IN1 e IN2, se ocupan del sentido de giro del motor izquierdo. Los
pines de entrada 10 y 12, IN3 e IN4, se encargan de controlar el giro del motor derecho.
Los terminales 1 y 15, SENSA y SENSB, son las masas de la patilla 9. Las patillas 6 y
11, ENA y ENB, son activaciones para las salidas 2, 3, 13 y 14, OUT1, OUT2, OUT3 y
OUT4; la patilla 9 VCC, es la alimentación del integrado; la patilla 4, VS, es la
alimentación de los motores, y la patilla 8, es la masa.
Los optoacopladores U3, U4, U5, U6, U7 y U8, sirven para separar la parte de
potencia de la parte de control. Lo que separa la potencia de las señales es un haz de luz
del diodo interno de los optoacopladores. Haciendo que en caso de avería en la parte de
potencia no afecte a las partes encargadas de las señales.
Por medio de los optoacopladores U3, U4, U5 e U6, controlamos el sentido de giro
de los motores, U3 y U4 para el motor izquierdo; U5 y U6 para el control del motor
derecho.
Para el control de velocidad utilizamos los transistores Q1, Q2, Q3 y Q4, y los
optoacopladores U7 y U8. Los transistores solo funcionan en corte y saturación. U7, Q1
y Q4 controlan el motor izquierdo y U8, Q2 y Q3 controlan el motor derecho.
Los motores son de corriente continua. Cada motor se protege por medio de cuatro
diodos. Cuando los motores se paren, dichos diodos alivian la fuerza
contraelectromotriz que puedan generar.
Los condensadores C10 y C11, que están situados en cada extremo de los motores,
sirven para filtrar posibles ruidos que los motores produzcan. Son filtros paso bajo para
rechazar el ruido. El filtro atenúa los ruidos generados por el motor a frecuencias
superiores a 50 Hz.
Para atacar a los transistores Q1, Q2, Q3 y Q4, dado que no sabemos con seguridad
cual es la tensión necesaria para hacer que estos trabajen en corte o saturación, con los
JUMPER1 y JUMPER2, llevaremos ó 5 ó 9 voltios. Tras realizar las pruebas de
funcionamiento, los jumpers tienen que estar a 5 voltios para que el par Darlington
funcione correctamente.
Los motores giran siempre y cuando se haya activado las entradas y salidas del
L298, y que exista una diferencia de potencial en los extremos de estos, suficiente para
que giren. En caso de que las tensiones en los extremos del motor sean iguales este no
gira.
Se recomienda poner los chasis de los motores a masa para filtrar los ruidos que
generan los motores en el espectro de radiofrecuencia, creando una Jaula de Faraday.
Así evitaremos que se produzcan ruidos en los cables o en las pistas próximas de
nuestros circuitos.
Daniel García Bravo
I.E.S. Joan Miró
14
Ciclo Superior de Desarrollo de Productos Electrónicos
Para controlar la velocidad de los motores lo hacemos con la PWM. La PWM
consiste en hacer que el ciclo de trabajo de una señal cuadrada sea mas o menos ancho,
podemos hacer que el ciclo de trabajo sea de un 90% para ir a mucha velocidad o de un
5% para ir lentos.
Para explicar el control de giro de los motores, nos ayudaremos del esquema
inferior. Estamos controlando el sentido de giro del motor izquierdo por medio de los
optoacopladores U3 y U4.
A GIRO1 le llevamos un 1 lógico por medio del PIC, así hacemos que el diodo del
optoacoplador no luzca, el fototransistor trabaja en corte. Como el fototransistor está en
corte, la tensión que proviene de R2 no pasa del colector al emisor para ir a masa, y por
lo tanto va hacia el terminal de entrada del L298, que se introduce un 1 lógico, lo que
supone que por la patilla OUT1 salgan 9 voltios.
Por GIRO2, introducimos un 0 lógico, el diodo emisor de infrarrojos luce y ataca la
base del fototransistor de U4, este empieza a trabajar en saturación y lleva la tensión
VDD, la que procede de R4, en vez de a la patilla 7 del L298, la lleva a masa por medio
del transistor interno del integrado U4. Hemos llevado un 0 lógico a la patilla 7 del
L298.
Ya tenemos un 1 en la patilla 5 y un 0 en la 7 del L298, esto hace que en la patilla de
salida 2 haya 9 voltios y en la patilla de salida 3 haya 0. Lo cual significa que, en los
extremos del motor, haya una diferencia de potencial y el motor gira a un lado.
El control de giro del motor derecho tiene la misma filosofía que el control de giro
del motor izquierdo, hacemos que los transistores de los integrados U5 y U6 trabajen en
corte y saturación para llevar un 0 ó 1 lógico a las patillas correspondientes del L298.
Demostración del giro del motor.
Daniel García Bravo
I.E.S. Joan Miró
15
Ciclo Superior de Desarrollo de Productos Electrónicos
Para controlar la velocidad de los motores, actuaremos sobre las patillas 1 y 15 del
integrado L298.
En el esquema inferior se explica el control de velocidad. La entrada Velocidad es la
conexión que lleva la PWM generada por el PIC. Cuando por Velocidad hay un nivel
bajo de la señal de PWM; el diodo emisor del optoacoplador U8; lucirá, atacando la
base del fototransistor, este se satura y hace que la tensión de base de Q2 vaya a masa.
Q2 se pone en corte y Q4 también y la patilla 1 del L298, no se pone a masa. Por lo
tanto el motor no puede girar, al no existir circulación de corriente. Si la patilla 1 y 15
del L298 no esta a masa, el motor no puede realizar ningún giro.
Si por el contrario por la entrada Velocidad llega un nivel alto de la señal de PWM;
el diodo de U8 no luce, el fototransistor interno de U8 trabaja en corte y por lo tanto la
tensión de base del transistor Q2 no va a masa por el optoacoplador, sino que ataca la
base de Q2, trabajando en saturación, inmediatamente después se ataca la base del
transistor Q4 haciendo que también trabaje en saturación, por lo tanto la patilla 1 y 15
del L298 esta a masa, haciendo posible el giro del motor.
En la siguiente tabla se hace un resumen del control de giro y del control de
velocidad.
Entradas al Inversor L298N
GIRO1 GIRO2
X
X
0
0
Salidas del Inversor
L298N
OUT1
OUT2
1v
1v
Velocidad
0
1
SENSA
alta impedancia
0v
1
0v
0
1
1v
9v
1
0v
1
0
9v
1v
1
0v
1
1
1v
1v
Motor
Parado
Parado
Sentido
antihorario
Sentido
horario
Parado
Demostración del control de velocidad de un motor.
Explicación de la PWM en la pagina 109.
Daniel García Bravo
I.E.S. Joan Miró
16
Ciclo Superior de Desarrollo de Productos Electrónicos
4.3.1.- Esquema eléctrico de la placa de potencia
VDD: 5 voltios
VP: 9 voltios
U3: patilla RB4 del PIC
U4: patilla RB5 del PIC
Daniel García Bravo
I.E.S. Joan Miró
U5: patilla RB6 del PIC
U6: patilla RB7 del PIC
U8: patilla RC1 del PIC
U7: patilla RC2 del PIC
17
Ciclo Superior de Desarrollo de Productos Electrónicos
4.4.- Placa de sensores
En esta placa están situados lo sensores del robot velocista. Los sensores utilizados
son los CNY70. Las señales que salen de los sensores, llegan a nuestro PIC, para poder
controlar el robot mediante el programa que nosotros previamente hayamos cargado en
el PIC.
Otros componentes que se encuentran en esta placa son los integrados 74HC14,
inversores de señales; si a la entrada tenemos un 0 lógico, a la salida tendremos un 1
lógico. También son conocidos como Trigger Smith, ya que a su vez es un circuito
comparador, ya que nos vale para asegurarnos de que una superficie gris clara pase a
blanca y una superficie gris oscura sea negra. Podemos decir que los utilizamos para
acondicionar la señal del sensor.
Las resistencias R23, R25, R27, R29, R31, R33, R35, R37; se encargan de dar
tolerancia al sensor. Variando el valor de estas resistencias se puede separar más o
menos los sensores de la superficie. El valor de las resistencias puede variar desde 10k
hasta 47k. En los esquemas eléctricos se ha puesto el valor de estas resistencias de 10k,
pero hay que ir probando que valor es el definitivo.
Los sensores CNY70 tienen en su interior un diodo emisor de infrarrojos y un
fototransistor. Cuando el diodo emita más luz hacia la base del fototransistor este, a su
vez, conducirá más.
El funcionamiento de este sensor es parecido al funcionamiento de los
optoacopladores. Se basa en atacar la base de un fototransistor por medio de un emisor
de luz, al hacer que el fototransistor trabaje en corte o saturación. El emisor emite un
haz de luz, si esta luz se refleja, rebota sobre una superficie, se ataca a la base del
fototransistor y hace que el transistor trabaje en saturación. A medida que la superficie
refleje mas la luz, se producirá una mayor corriente en la base del fototransistor, y así se
obtiene una mayor tensión a la salida. Esto nos es muy útil para digitalizar las señales
que obtengamos de los sensores, para diferenciar la superficie oscura de una clara.
Daniel García Bravo
I.E.S. Joan Miró
18
Ciclo Superior de Desarrollo de Productos Electrónicos
Cuando la superficie es blanca, el haz de luz se refleja y ataca a la base del
fototransistor, este se satura, llevando la tensión del colector a masa, e introduciendo un
0 lógico a la entrada del 74HC14, y a la salida tenemos un 1 lógico, que es lo que le
llega al PIC. Cuando la superficie es negra, la luz es absorbida por la superficie, y hace
que el transistor trabaje en corte. Esto nos hará tener 1 a la entrada del 74HC14, o sea,
que a la salida hay un 0 lógico.
Superficie
Negra
Blanca
Estado lógico antes de la
Trigger Smith
1
0
Estado lógico después de la
Trigger Smith
0
1
4.4.1.- Esquema eléctrico de la placa de sensores
VDD: 5 voltios
OP1: conexión sensor - PIC
OP2: conexión sensor - PIC
OP3: conexión sensor - PIC
Daniel García Bravo
I.E.S. Joan Miró
OP4: conexión sensor - PIC
OP5: conexión sensor - PIC
OP6: conexión sensor - PIC
OP7: conexión sensor - PIC
OP8: conexión sensor - PIC
19
Ciclo Superior de Desarrollo de Productos Electrónicos
4.5.- Mando
El mando no forma parte del proyecto por falta de tiempo, aunque se deja abierta la
esta posibilidad para que en cualquier momento se pueda adjuntar.
El mando se fabrica aparte de las placas de nuestro robot, ya que este es un
complemento del proyecto.
El mando tiene la misión de transmitir un código asociado a cada pulsador, para
poder controlar el robot.
El microcontrolador PIC16F876A lee los pulsadores y transmite los códigos vía
serie a la tarjeta transmisora de radiofrecuencia, a una velocidad de 1562,5 baudios por
segundo. Es una transmisión asíncrona: 1 bit de comienzo, 8 bit de datos, 1 bit de
parada sin bit de paridad.
El microcontrolador PIC16F876A trabaja a una frecuencia de 4 MHz y ejecuta una
instrucción en 1uS.
La alimentación procede de un regulador 7805 que suministra 5 voltios continuos a
todos los circuitos.
El transistor Q1E tiene la misión de deshabilitar la tarjeta de radiofrecuencia cuando
esta no transmite datos.
La tarjeta emisora CEBEK C-0503 es un circuito híbrido encargado de transmitir
vía radiofrecuencia, los datos digitales procedentes del microprocesador. Se modula en
AM cuya frecuencia portadora es de 433,92 MHz. Estas señales salen por la patilla 11
del emisor de datos CEBEK C-0503.
El diodo led D7E nos indica que el mando está encendido, tiene su correspondiente
resistencia limitadora de corriente.
El resto de los leds se iluminan cuando activamos su pulsador correspondiente.
El diodo D6E tiene la misión de proteger el circuito en cado de invertir la batería.
Los condensadores C1 y C2 son filtros.
Daniel García Bravo
I.E.S. Joan Miró
20
Ciclo Superior de Desarrollo de Productos Electrónicos
4.5.1.- Esquema eléctrico del mando
CON1E: salida de los datos emitidos
VDD: 5 voltios
Daniel García Bravo
I.E.S. Joan Miró
21
Ciclo Superior de Desarrollo de Productos Electrónicos
5.- Esquema eléctrico de simulación con Proteus
5.1.- Simulación del robot velocista
Daniel García Bravo
I.E.S. Joan Miró
22
Ciclo Superior de Desarrollo de Productos Electrónicos
5.2.- Simulación del robot teledirigido
Daniel García Bravo
I.E.S. Joan Miró
23
Ciclo Superior de Desarrollo de Productos Electrónicos
6.- Programas
La programación tiene una parte importante en nuestro robot, ya que, por muy bien
diseñado que esté, sin programas no haremos nada.
Los programas primero se simulan en el ISIS y tienen el primer objetivo de ver que,
las diferentes partes del robot, funcionan adecuadamente. Una vez que se haya visto que
funciona correctamente, se podrá pasar a programar ya el funcionamiento del robot.
6.1.- Programas de prueba
Por medio de estos programas se puede averiguar si hay fallos en los componentes
que monta nuestro robot o en las conexiones electrónicas.
6.1.2.- Programas de prueba de los leds
Este programa tiene como función probar el correcto funcionamiento de los dos
diodos leds que hay en la placa de control.
Para encender los diodos leds necesitaremos sacar, por la patilla del PIC que esté
conectado, al diodo led un 0 lógico. Para apagar el diodo led necesitaremos un 1 lógico.
6.1.2.1.- Diagrama de flujo
Daniel García Bravo
I.E.S. Joan Miró
24
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.2.2.- Programa
// Pruebas de los leds
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
#BIT rb2 = 0x06.2
#BIT rb3 = 0x06.3
// RB2 en 0x06 patilla 2.
// RB3 en 0x06 patilla 3.
// ****************** Función principal o programa principal ******************
void main()
{
TRISB = 0B00000000;
while(1){
}
Daniel García Bravo
I.E.S. Joan Miró
// Defines Puerto B como salida
// de datos.
// Bucle infinito
rb2 = 0 ;
// Enciendo el led D14
rb3 =0;
// Enciendo el led D13
delay_ms(500);
// Retardo de 500 ms
rb2 = 1 ;
// Apago el led D14
rb3 =1;
// Apago el led D13
delay_ms(500);
// Retardo de 500 ms
}
// Cierro el While
// Cierro el programa
25
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.3.- Programas de prueba de los sensores
Estos programas tienen la función de comprobar el correcto funcionamiento de
todos los sensores de nuestro robot. También comprobaremos que la comunicación
entre el PIC y los sensores son las correctas y que no hay fallos de comunicación.
Comprobaremos los sensores de dos en dos y nos ayudaremos de los diodos led que
hay en la placa de control, para controlar si los sensores y sus respectivas
comunicaciones son correctas.
Cuando el sensor lea una superficie blanca llegará un 0 lógico al PIC, después del
integrado Trigger Smith. Cuando el sensor lea una superficie negra llegará un 1 lógico
al PIC.
Superficie
Negra
Blanca
Estado lógico que llega al PIC
0
1
6.1.3.1.- Programas de prueba de los sensores OP1 Y OP2
Este programa tiene la función de comprobar el correcto comportamiento de los
sensores OP1 y OP2.
6.1.3.1.1.- Diagrama de flujo
Daniel García Bravo
I.E.S. Joan Miró
26
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.3.1.2.- Programa
// Pruebas de los sensores OP1 y OP2
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
#BYTE TRISA = 0x85
#BYTE portA = 0x05
// TRISA en 85h.
// PORTB en 05h.
#BIT ra0 = 0x05.0
// RA0 en 0x05 patilla 0
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
#BIT rb2 = 0x06.2
#BIT rb3 = 0x06.3
// RB2 en 0x06 patilla 2.
// RB3 en 0x06 patilla 3.
#BYTE TRISC = 0x87
#BYTE portC = 0x07
// TRISC en 87h.
// PORTC en 07h.
#BIT rc0 = 0x07.0
// RC0 en 0x07 patilla 0
// ****************** Función principal o programa principal ******************
void main()
{
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos
TRISB = 0B00000000;
// Defines Puerto B como salida
// de datos.
TRISC = 0B10110001;
// Defines rc6, rc2 y rc1 como salidas y rc7,
// rc5 y rc0 como entradas; rc4 y rc3 no
// tocar
Daniel García Bravo
I.E.S. Joan Miró
27
Ciclo Superior de Desarrollo de Productos Electrónicos
while(1){
// Bucle infinito
if (rc0 == 1)
rb2 = 0;
else {
// Cierro el else
if (ra0 == 1)
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
else {
}
// Enciende el led D13
// Si el sensor lee negro, ejecuta la siguiente
// instrucción
rb3 = 1;
Daniel García Bravo
I.E.S. Joan Miró
// Apaga el led D14
}
rb3 = 0;
}
// Enciende el led D14
// Si el sensor lee negro, ejecuta la siguiente
// instrucción
rb2 = 1;
}
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
// Apaga el led D13
// Cierro el else
// Cierro el while
// Cierro el programa
28
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.3.2- Programas de prueba de los sensores OP3 y OP4
Este programa tiene la función de comprobar el correcto comportamiento de los
sensores OP3 y OP4.
6.1.3.2.1.- Diagrama de flujo
6.1.3.2.2.- Programa
// Pruebas de los sensores OP3 y OP4
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
Daniel García Bravo
I.E.S. Joan Miró
29
Ciclo Superior de Desarrollo de Productos Electrónicos
#BYTE TRISA = 0x85
#BYTE portA = 0x05
// TRISA en 85h.
// PORTB en 05h.
#BIT ra1 = 0x05.1
#BIT ra2 = 0x05.2
// RA1 en 0x05 patilla 1
// RA2 en 0x05 patilla 2
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
#BIT rb2 = 0x06.2
#BIT rb3 = 0x06.3
// RB2 en 0x06 patilla 2.
// RB3 en 0x06 patilla 3.
// ****************** Función principal o programa principal ******************
void main()
{
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos
TRISB = 0B00000000;
// Defines Puerto B como salida de datos
while(1){
// Bucle infinito
if (ra1 == 1)
rb2 = 0;
else {
// Si el sensor lee negro, ejecuta la siguiente
// instrucción
rb2 = 1;
}
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
rb3 = 0;
else {
}
Daniel García Bravo
I.E.S. Joan Miró
// Enciende el led D13
// Si el sensor lee negro, ejecuta la siguiente
// instrucción
rb3 = 1;
}
// Apaga el led D14
// Cierro el else
if (ra2 == 1)
}
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
// Enciende el led D14
// Apaga el led D13
// Cierro el else
// Cierro el while
// Cierro el programa
30
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.3.3.- Programas de prueba de los sensores OP5 y OP6
Este programa tiene la función de comprobar el correcto comportamiento de los
sensores OP5 y OP6.
6.1.3.3.1.- Diagrama de flujo
6.1.3.3.2.- Programa
// Pruebas de los sensores OP5 y OP6
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
#BYTE TRISA = 0x85
// Define la frecuencia del reloj de 1 MHz
// TRISA en 85h.
Daniel García Bravo
I.E.S. Joan Miró
31
Ciclo Superior de Desarrollo de Productos Electrónicos
#BYTE portA = 0x05
// PORTB en 05h.
#BIT ra3 = 0x05.3
#BIT ra4 = 0x05.4
// RA3 en 0x05 patilla 3
// RA4 en 0x05 patilla 4
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
#BIT rb2 = 0x06.2
#BIT rb3 = 0x06.3
// RB2 en 0x06 patilla 2.
// RB3 en 0x06 patilla 3.
// ****************** Función principal o programa principal ******************
void main()
{
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos
TRISB = 0B00000000;
// Defines Puerto B como salida de datos
while(1){
// Bucle infinito
if (ra3 == 1)
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
rb2 = 0;
else {
// Si el sensor no lee blanco, ejecuta la
// siguiente instrucción
rb2 = 1;
}
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
rb3 = 0;
else {
}
Daniel García Bravo
I.E.S. Joan Miró
// Enciende el led D13
// Si el sensor no lee blanco, ejecuta la
// siguiente instrucción
rb3 = 1;
}
// Apaga el led D14
// Cierro el else
if (ra4 == 1)
}
// Enciende el led D14
// Apaga el led D13
// Cierro el else
// Cierro el while
// Cierro el programa
32
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.3.4.- Programas de prueba de los sensores OP7 Y OP8
Este programa tiene la función de comprobar el correcto comportamiento de los
sensores OP7 y OP8.
6.1.3.4.1.- Diagrama de flujo
6.1.3.4.2.- Programa
// Pruebas de los sensores OP7 y OP8
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
Daniel García Bravo
I.E.S. Joan Miró
33
Ciclo Superior de Desarrollo de Productos Electrónicos
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
#BYTE TRISA = 0x85
#BYTE portA = 0x05
// TRISA en 85h.
// PORTB en 05h.
#BIT ra5 = 0x05.5
// RA5 en 0x05 patilla 5
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
#BIT rb2 = 0x06.2
#BIT rb3 = 0x06.3
// RB2 en 0x06 patilla 2.
// RB3 en 0x06 patilla 3.
#BYTE TRISC = 0x87
#BYTE portC = 0x07
// TRISC en 87h.
// PORTC en 07h.
#BIT rc5 = 0x07.5
// RC5 en 0x07 patilla 5
// ****************** Función principal o programa principal ******************
void main()
{
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos
TRISB = 0B00000000;
// Defines Puerto B como salida
// de datos.
TRISC = 0B10110001;
// Defines rc6, rc2 y rc1 como salidas y rc7,
// rc5 y rc0 como entradas; rc4 y rc3 no
// tocar
while(1){
// Bucle infinito
if (ra5 == 1)
rb2 = 0;
else {
// Enciende el led D14
// Si el sensor lee negro, ejecuta la siguiente
// instrucción
rb2 = 1;
// Apaga el led D14
}
// Cierro el else
if (rc5 == 1)
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
rb3 = 0;
Daniel García Bravo
I.E.S. Joan Miró
// Si el sensor lee blanco ejecuta la
// siguiente instrucción
// Enciende el led D13
34
Ciclo Superior de Desarrollo de Productos Electrónicos
else {
// Si el sensor lee negro, ejecuta la siguiente
// instrucción
rb3 = 1;
}
// Apaga el led D13
// Cierro el else
}
// Cierro el while
}
// Cierro el programa
6.1.4.- Programas de pruebas de control de giro de los motores
Con estos programas comprobaremos que los motores están en perfecto estado y las
conexiones que controlan los motores también lo están.
6.1.4.1- Programa de prueba del motor derecho
Con este programa controlaremos que el motor derecho gira en ambos sentidos,
controlando las patillas rb6 y rb7 del PIC.
El sentido de giro dependerá del estado lógico de las patillas rb6 y rb7 y de cómo
conectemos el motor derecho a la placa de potencia.
RB6
0
0
1
1
Daniel García Bravo
I.E.S. Joan Miró
RB7
0
1
0
1
Sentido de giro
Motor parado
En movimiento
En movimiento
Motor parado
35
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.4.1.1.- Diagrama de flujo
6.1.4.1.2.- Programa
// Pruebas de control de giro del motor derecho
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
Daniel García Bravo
I.E.S. Joan Miró
36
Ciclo Superior de Desarrollo de Productos Electrónicos
#BIT rb6 = 0x06.6
#BIT rb7 = 0x06.7
// RB1 en 0x06 patilla 1.
// RB2 en 0x06 patilla 2.
// ****************** Función principal o programa principal ****************
void main()
{
TRISB = 0B00000000;
// Defines Puerto B como SALIDA de datos
portB = 0B00000000;
// Reseteas el puerto B
while(1){
// Bucle infinito
rb6 = 0;
rb7 = 0;
// Las patillas RB6 y RB7 desactivadas,
// motor parado
delay_ms(500);
// Retardo de 500 ms
rb6 = 1;
// Activamos la patilla RB6, motor gira
delay_ms(500);
// Retardo de 500 ms
rb6 = 0;
rb7 = 0;
// Las patillas RB6 y RB7 desactivadas,
// motor parado
delay_ms(500);
// Retardo de 500 ms
rb7 = 1;
// Activamos la patilla RB7, el motor gira
delay_ms(500);
// Retardo de 500 ms
}
// Cierro el While
}
// Cierro el programa principal
6.1.4.2.- Programa de prueba del motor izquierdo
Con este programa controlaremos que el motor izquierdo gira en ambos sentidos,
controlando las patillas rb4 y rb5 del PIC.
El sentido de giro dependerá del estado lógico de las patillas rb4 y rb5 y de cómo
conectemos el motor derecho a la placa de potencia.
RB4
0
0
1
1
Daniel García Bravo
I.E.S. Joan Miró
RB5
0
1
0
1
Sentido de giro
Motor parado
En movimiento
En movimiento
Motor parado
37
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.4.2.1.- Diagrama de flujo
6.1.4.2.2.- Programa
// Pruebas de control de giro del motor izquierdo
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
Daniel García Bravo
I.E.S. Joan Miró
38
Ciclo Superior de Desarrollo de Productos Electrónicos
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
#BIT rb4 = 0x06.4
#BIT rb5 = 0x06.5
// RB4 en 0x06 patilla 4.
// RB5 en 0x06 patilla 5.
// ****************** Función principal o programa principal ****************
void main()
{
TRISB = 0B00000000;
portB = 0B00000000;
while(1){
}
}
// Defines Puerto B como SALIDA de datos.
// Reseteas el puerto B
// Bucle infinito
rb4 = 0;
rb5 = 0;
// Las patillas RB4 y RB5 desactivadas,
// motor parado
delay_ms(500);
// Retardo de 500 ms
rb4 = 1;
// Activamos la patilla RB4, motor gira
delay_ms(500);
// Retardo de 500 ms
rb4 = 0;
rb5 = 0;
// Las patillas RB4 y RB5 desactivadas,
// motor parado
delay_ms(500);
// Retardo de 500 ms
rb5 = 1;
// Activamos la patilla RB5, el motor gira
delay_ms(500);
// Retardo de 500 ms
// Cierro el While
// Cierro el programa principal
6.1.5.- Programas de pruebas de control de velocidad de los motores
Con estos programas probaremos que el PIC genera la PWM. También que esta
llega a nuestros motores y que estos modifican su velocidad de acuerdo con la PWM
que llegue del PIC.
6.1.5.1- Programa de control de velocidad del motor derecho
Probamos la velocidad del motor derecho.
Daniel García Bravo
I.E.S. Joan Miró
39
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.5.1.1.- Diagrama de flujo
6.1.5.1.2.- Programa
// Prueba de control de velocidad motor derecho
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
#BYTE TRISB = 0x86
// TRISB en 86h.
#BYTE portB = 0x06
// PORTB en 06h.
Daniel García Bravo
I.E.S. Joan Miró
40
Ciclo Superior de Desarrollo de Productos Electrónicos
#BIT rb6 = 0x06.6
#BIT rb7 = 0x06.7
// RB6 en 0x06 patilla 6.
// RB7 en 0x06 patilla 7.
int16 TH = 65535;
// Variable para la PWM
// ************* Función principal o programa principal *****************
void main()
{
TRISB = 0B00000010;
// Defines Puerto B como salidas de datos.
portB = 0B00001100;
// Reseteas el puerto B, los dos LEDS a 1
setup_timer_2(T2_DIV_BY_16,249,1);
// setup_timer(Prescaler,PR2,Postscaler)
// Configuracion timer2. Si el Periodo = 16mS ----> T = 16000uS
// T = [PR2+1] x Tcm x Postscaler x Prescaler
// PR2 puede valer de 0 a 255.
// Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000 hz = 4uS.
// Prescaler puede valer 1,4,16
// Postscaler puede valer 1.
// 16000uS = [PR2+1] x 4 x 16 x 1
// PR2 =[T/(Tcm x Preescaler x Postscaler)]-1
// PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249
(en C 249)
setup_ccp2(CCP_PWM);
while(1){
Daniel García Bravo
I.E.S. Joan Miró
// CCP2 en modo PWM (Salida por
// RC1)
// Bucle infinito
rb7 = 0;
rb6 = 1;
// Desactivamos la patilla RB7
// Activamos la patilla RB6
// El motor empezara a moverse en un
// sentido
TH = 0;
// No meto PWM, motor parado
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 64;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 500;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 1000;
// Cambiamos el valor de la PWM
41
Ciclo Superior de Desarrollo de Productos Electrónicos
}
}
Daniel García Bravo
I.E.S. Joan Miró
delay_ms(2000);
// Tiempo que el motor estará girando
rb7 = 0;
rb6 = 1;
// Desactivamos la patilla RB7
// Activamos la patilla RB6
// El motor empezara a moverse en
// sentido contrario
TH = 0;
// No meto PWM, motor parado
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 64;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 500;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 1000;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
// Cierro el While
// Cierro el programa principal
42
Ciclo Superior de Desarrollo de Productos Electrónicos
6.1.5.2.- Programa de control de velocidad del motor izquierdo
Probamos la velocidad del motor izquierdo.
6.1.5.2.1.- Diagrama de flujo
6.1.5.2.2.- Programa
// Prueba de control de velocidad izquierdo
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
Daniel García Bravo
I.E.S. Joan Miró
43
Ciclo Superior de Desarrollo de Productos Electrónicos
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// TRISB en 86h.
// PORTB en 06h.
#BIT rb4 = 0x06.4
#BIT rb5 = 0x06.5
// RB4 en 0x06 patilla 4.
// RB5 en 0x06 patilla 5.
int16 TH = 65535;
// Variable para la PWM
// ******************* Función principal o programa principal *****************
void main()
{
TRISB = 0B00000010;
// Defines Puerto B como salidas de datos.
portB = 0B00001100;
// Reseteas el puerto B, los dos LEDS a 1
setup_timer_2(T2_DIV_BY_16,249,1);
// setup_timer(Prescaler,PR2,Postscaler)
// Configuracion timer2. Si el Periodo = 16mS ----> T = 16000uS
// T = [PR2+1] x Tcm x Postscaler x Prescaler
// PR2 puede valer de 0 a 255.
// Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000 hz = 4uS.
// Prescaler puede valer 1,4,16
// Postscaler puede valer 1.
// 16000uS = [PR2+1] x 4 x 16 x 1
// PR2 =[T/(Tcm x Preescaler x Postscaler)]-1
// PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249
(en C 249)
setup_ccp1(CCP_PWM);
// CCP1 en modo PWM (Salida por RC2)
while(1){
// Bucle infinito
Daniel García Bravo
I.E.S. Joan Miró
rb4 = 0;
rb5 = 1;
// Desactivamos la patilla RB4
// Activamos la patilla RB5
// El motor empezara a moverse en un
// sentido
TH = 0;
// No meto PWM, motor parado
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 64;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
44
Ciclo Superior de Desarrollo de Productos Electrónicos
}
}
Daniel García Bravo
I.E.S. Joan Miró
TH = 500;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 1000;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
rb5 = 0;
rb4 = 1;
// Desactivamos la patilla RB5
// Activamos la patilla RB4
// El motor empezara a moverse en
// sentido contrario
TH = 0;
// No meto PWM, motor parado
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 64;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 500;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
TH = 1000;
// Cambiamos el valor de la PWM
delay_ms(2000);
// Tiempo que el motor estará girando
// Cierro el While
// Cierro el programa principal
45
Ciclo Superior de Desarrollo de Productos Electrónicos
6.2.- Programas de funcionamiento del robot
6.2.1.- Programa del robot velocista
Con este programa controlamos el robot en modo velocista.
Dado que por falta de tiempo no se puede adjuntar el programa del coche
teledirigido, este es el programa con el cual nuestro robot funciona.
6.2.1.1.- Diagramas de flujo
Daniel García Bravo
I.E.S. Joan Miró
46
Ciclo Superior de Desarrollo de Productos Electrónicos
Daniel García Bravo
I.E.S. Joan Miró
47
Ciclo Superior de Desarrollo de Productos Electrónicos
Daniel García Bravo
I.E.S. Joan Miró
48
Ciclo Superior de Desarrollo de Productos Electrónicos
Daniel García Bravo
I.E.S. Joan Miró
49
Ciclo Superior de Desarrollo de Productos Electrónicos
6.2.1.2.- Programa
// Velocista
// ************************ Directivas de procesado ************************
// (Controlan la conversión del programa a código máquina por parte del compilador)
#include <16F876A.h>
// Incluye el fichero 16F876A.h al programa tiene
// que estar en la misma carpeta del programa
// define funciones, patillas y registros.
#fuses XT,NOWDT
// Define la palabra de configuración del
// microcontrolador PIC
// Trabaja con un reloj tipo XT y no utiliza perro
// guardián Wathdog
#use delay( clock = 1000000 )
// Define la frecuencia del reloj de 1 MHz
#BYTE TRISA = 0x85
#BYTE portA = 0x05
// TRISA en 85h.
// PORTB en 05h.
#BIT ra0 = 0x05.0
#BIT ra1 = 0x05.1
#BIT ra2 = 0x05.2
#BIT ra3 = 0x05.3
#BIT ra4 = 0x05.4
// RA0 en 0x05 patilla 0.
// RA1 en 0x06 patilla 1.
// RA2 en 0x06 patilla 2.
// RA3 en 0x06 patilla 3.
// RA4 en 0x06 patilla 4.
Daniel García Bravo
I.E.S. Joan Miró
50
Ciclo Superior de Desarrollo de Productos Electrónicos
#BIT ra5 = 0x05.5
#BIT ra6 = 0x05.6
#BYTE TRISB = 0x86
#BYTE portB = 0x06
// RA5 en 0x06 patilla 5.
// RA6 en 0x06 patilla 6.
// TRISB en 86h.
// PORTB en 06h.
#BIT rb0 = 0x06.0
#BIT rb1 = 0x06.1
#BIT rb2 = 0x06.2
#BIT rb3 = 0x06.3
#BIT rb4 = 0x06.4
#BIT rb5 = 0x06.5
#BIT rb6 = 0x06.6
#BIT rb7 = 0x06.7
// RB0 en 0x06 patilla 0.
// RB1 en 0x06 patilla 1.
// RB2 en 0x06 patilla 2.
// RB3 en 0x06 patilla 3.
// RB4 en 0x06 patilla 4.
// RB5 en 0x06 patilla 5.
// RB6 en 0x06 patilla 6.
// RB7 en 0x06 patilla 7.
#BYTE TRISC = 0x87
#BYTE portC = 0x07
// TRISC en 87h.
// PORTC en 07h.
#BIT rc0 = 0x07.0
#BIT rc1 = 0x07.1
#BIT rc2 = 0x07.2
#BIT rc3 = 0x07.3
#BIT rc4 = 0x07.4
#BIT rc5 = 0x07.5
#BIT rc6 = 0x07.6
#BIT rc7 = 0x07.7
// RC0 en 0x06 patilla 0.
// RC1 en 0x06 patilla 1.
// RC2 en 0x06 patilla 2.
// RC3 en 0x06 patilla 3.
// RC4 en 0x06 patilla 4.
// RC5 en 0x06 patilla 5.
// RC6 en 0x06 patilla 6.
// RC7 en 0x06 patilla 7.
int16 TH = 65535;
// Variable para la PWM
// ******************** Declaración de funciones ***************************
void velocista();
// Subprograma del velocista
void Rec0 ();
void Rec1 ();
void Rec2 ();
void Rec3 ();
void Rec4 ();
void Rec5 ();
void Rec6 ();
void Rec7 ();
void Rec8 ();
void Rec9 ();
void Rec10 ();
void Rec11 ();
void Rec12 ();
void Rec13 ();
void Rec14 ();
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
// Subprograma de rectificación
Daniel García Bravo
I.E.S. Joan Miró
51
Ciclo Superior de Desarrollo de Productos Electrónicos
// ******************* Función principal o programa principal *****************
void main()
{
// ************ Configuración de todas las entradas y salidas y resetearlas *********
TRISA = 0B11111111;
// Defines Puerto A como entrada de datos.
TRISB = 0B00000011;
// Defines rb0 y rb1 como entradas y el resto
// del Puerto B como salidas
TRISC = 0B10110001;
// Defines rc6, rc2 y rc1 como salidas y rc7,
// rc5 y rc0 como entradas; rc4 y rc3 no tocar
rb4 = 0;
rb5 = 0;
rb6 = 0;
rb7 = 0;
rc3 = 0;
rc6 = 0;
// Reseteo todas estas salidas
setup_timer_2(T2_DIV_BY_16,249,1);
// setup_timer(Prescaler,PR2,Postscaler)
// Configuracion timer2. Si el Periodo = 16mS ----> T = 16000uS
// T = [PR2+1] x Tcm x Postscaler x Prescaler
// PR2 puede valer de 0 a 255.
// Tcm es el tiempo de Ciclo Maquina. Tcm = 4/Fosc = 4/1.000.000 hz = 4uS.
// Prescaler puede valer 1,4,16
// Postscaler puede valer 1.
// 16000uS = [PR2+1] x 4 x 16 x 1
// PR2 =[T/(Tcm x Preescaler x Postscaler)]-1
// PR2 =[16000uS/(4uS x 16 x 1)]-1 = 249
(en C 249)
setup_ccp1(CCP_PWM);
// CCP1 en modo PWM (Salida por RC2)
setup_ccp2(CCP_PWM);
// CCP2 en modo PWM (Salida por RC1)
TH = 0;
set_pwm1_duty(TH);
// Pongo la PWM a 0
// por la patilla RC2
TH = 0;
set_pwm2_duty(TH);
// Pongo la PWM a 0
// por la patilla RC1
velocista();
// Ejecutamos el subprograma de velocista
Daniel García Bravo
I.E.S. Joan Miró
52
Ciclo Superior de Desarrollo de Productos Electrónicos
// ******************* Subprograma del Velocista *************************
void velocista(void)
{
while (rb1 == 1 ){
// Mientras el botón de inicio no se pulse
// ejecuta lo siguiente
if (rc0 == 1 && ra0 == 1 && ra1 == 1 && ra2 == 1 && ra3 == 1 &&
ra4 == 1 && ra5 == 1 && rc5 == 1){
// Si todos los sensores leen blanco, ejecuta lo siguiente:
rb2 = 1;
rb3 = 0;
// Apago led D14
// Enciendo led D13
}
// Cierro el if
else {
// Si el if no es cierto, ejecuta lo siguiente
rb2 = 0;
rb3 = 0;
// Enciendo led D14
// Enciendo led D13
}
// Cierro el else
}
while (1){
rb2 = 1;
rb3 = 1;
// Cierro el While
// Bucle infinito del velocista
// Apago leds
if (rc0 == 1 && ra0 == 1 && ra1 == 1 && ra2 == 1 && ra3 == 1 &&
ra4 == 1 && ra5 == 1 && rc5 == 1)
Rec0();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra3 == 0)
Rec1();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra3 && ra4 == 0)
Rec2();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra4 == 0)
Rec3();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra4 && ra5== 0)
Rec4();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra5 == 0)
Rec5();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
Daniel García Bravo
I.E.S. Joan Miró
53
Ciclo Superior de Desarrollo de Productos Electrónicos
if (ra5 && rc5 == 0)
Rec6();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (rc5 == 0)
Rec7();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra2 == 0)
Rec8();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra2 && ra1 == 0)
Rec9();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra1 == 0)
Rec10();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra1 && ra0 == 0)
Rec11();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra0 == 0)
Rec12();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (ra0 && rc0 == 0)
Rec13();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
if (rc0 == 0)
Rec14();
// Si la condición es verdadera ejecuta el
// siguiente subprograma
}
}
// Cierro el while(1)
// Cierro el programa velocista
// ********************************* Rec0 *****************************
void Rec0(void)
{
// Subprograma de rectificado 0
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 1000;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
Daniel García Bravo
I.E.S. Joan Miró
54
Ciclo Superior de Desarrollo de Productos Electrónicos
delay_ms(20);
}
// Refresco de la PWM
// Cierro el subprogama
// ********************************* Rec1 *****************************
void Rec1(void)
// Subprograma de rectificado 1
{
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 500;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// *************************** Rec2 *******************************
void Rec2(void)
{
// Subprograma de rectificado 2
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 400;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
Daniel García Bravo
I.E.S. Joan Miró
// Cierro el subprogama
55
Ciclo Superior de Desarrollo de Productos Electrónicos
// **************************** Rec3 ***********************************
void Rec3(void)
{
// Subprograma de rectificado 3
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 300;
set_pwm2_duty(TH);
delay_ms(20);
// Valor de la PWM para el motor derecho
// Refresco de la PWM
}
// Cierro el subprogama
// **************************** Rec4 **********************************
void Rec4(void)
{
// Subprograma de rectificado 4
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 200;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// **************************** Rec5 ********************************
void Rec5(void)
{
rb4 = 1;
rb5 = 0;
Daniel García Bravo
I.E.S. Joan Miró
// Subprograma de rectificado 5
// Activamos la patilla RB4
// Activo el motor izquierdo
56
Ciclo Superior de Desarrollo de Productos Electrónicos
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 150;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// ******************************* Rec6 ********************************
void Rec6(void)
{
// Subprograma de rectificado 6
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 100;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// **************************** Rec7 ***********************************
void Rec7(void)
{
// Subprograma de rectificado 7
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 1000;
set_pwm1_duty(TH);
Daniel García Bravo
I.E.S. Joan Miró
// Valor de la PWM para el motor izquierdo
57
Ciclo Superior de Desarrollo de Productos Electrónicos
TH = 50;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// *************************** Rec8 ************************************
void Rec8(void)
{
// Subprograma de rectificado 8
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 500;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 1000;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// ****************************** Rec9 **********************************
void Rec9(void)
{
// Subprograma de rectificado 9
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 400;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 1000;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
Daniel García Bravo
I.E.S. Joan Miró
// Cierro el subprogama
58
Ciclo Superior de Desarrollo de Productos Electrónicos
// **************************** Rec10 **********************************
void Rec10(void)
{
// Subprograma de rectificado 10
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 300;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 1000;
set_pwm2_duty(TH);
delay_ms(20);
// Valor de la PWM para el motor derecho
// Refresco de la PWM
}
// Cierro el subprogama
// ***************************** Rec11 **********************************
void Rec11(void)
{
// Subprograma de rectificado 11
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 200;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 1000;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// ************************** Rec12 *********************************
void Rec12(void)
{
rb4 = 1;
rb5 = 0;
Daniel García Bravo
I.E.S. Joan Miró
// Subprograma de rectificado 12
// Activamos la patilla RB4
// Activo el motor izquierdo
59
Ciclo Superior de Desarrollo de Productos Electrónicos
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 150;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 1000;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// ******************************* Rec13 *******************************
void Rec13(void)
{
// Subprograma de rectificado 13
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 100;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
TH = 1000;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
// ******************************** Rec14 *****************************
void Rec14(void)
{
// Subprograma de rectificado 14
rb4 = 1;
rb5 = 0;
// Activamos la patilla RB4
// Activo el motor izquierdo
rb6 = 1;
rb7 = 0;
// Activamos la patilla RB6
// Activo motor derecho
TH = 50;
set_pwm1_duty(TH);
// Valor de la PWM para el motor izquierdo
Daniel García Bravo
I.E.S. Joan Miró
60
Ciclo Superior de Desarrollo de Productos Electrónicos
TH = 1000;
set_pwm2_duty(TH);
// Valor de la PWM para el motor derecho
delay_ms(20);
// Refresco de la PWM
}
// Cierro el subprogama
6.2.2.- Programa del coche teledirigido
Con este programa se lograra controlar el robot a través de un mando. Dado que no
ha dado tiempo, el proyecto se deja abierto para futuras modificaciones.
6.2.2.1.- Diagrama de flujo
6.2.2.2.- Programa
Daniel García Bravo
I.E.S. Joan Miró
61
Ciclo Superior de Desarrollo de Productos Electrónicos
7.- Fabricación de placas
Para fabricar las placas se ha empleado el mismo sistema:
1º Cortar la placa a medida.
2º Hacer los agujeros de la placa.
3º Positivarla.
4º Dejarla en el horno a 70ºC, durante 15 minutos.
5º Centrar los fotolitos en la placa e insolarla durante, aproximadamente, unos 230
segundos.
6º Revelarla en sosa.
7º Grabado de la placa.
Las placas que se muestran aquí no son el tamaño real. Todas las placas, menos la
placa de sensores, tienen el mismo tamaño, 75x70. A continuación se muestra el
esquema eléctrico que se ha utilizado para la fabricación y su placa correspondiente.
Las placas se han puesto por la cara de componentes, top copper y por la cara de
pistas, botton copper.
Se muestra el siguiente dibujo con las dimensiones de las placas de la fuente de
alimentación-adaptador de señales PC-UC, placa de control y placa de potencia, con las
distancias de los agujeros de sujeción.
Daniel García Bravo
I.E.S. Joan Miró
62
Ciclo Superior de Desarrollo de Productos Electrónicos
7. 1.- Fabricación de la fuente de alimentación-adaptador de señales PC-UC
7.1.1.- Esquema eléctrico
Daniel García Bravo
I.E.S. Joan Miró
63
Ciclo Superior de Desarrollo de Productos Electrónicos
7.1.2.- Cara de componentes
En esta placa no está colocada la disipación de cobre del LM350K, para que se
pueda distinguir bien la distribución de los componentes. Dicha disipación debe ocupar
todo el ancho del LM350K.
Daniel García Bravo
I.E.S. Joan Miró
64
Ciclo Superior de Desarrollo de Productos Electrónicos
7.1.3.- Cara de pistas bottom copper
Daniel García Bravo
I.E.S. Joan Miró
65
Ciclo Superior de Desarrollo de Productos Electrónicos
7. 2.- Fabricación de la placa de control
7.2.1.- Esquema eléctrico
Daniel García Bravo
I.E.S. Joan Miró
66
Ciclo Superior de Desarrollo de Productos Electrónicos
7.2.2.- Componentes
Daniel García Bravo
I.E.S. Joan Miró
67
Ciclo Superior de Desarrollo de Productos Electrónicos
7.2.3.- Cara de componentes y de pistas top copper
Daniel García Bravo
I.E.S. Joan Miró
68
Ciclo Superior de Desarrollo de Productos Electrónicos
7.2.4.- Cara de pistas bottom copper
Daniel García Bravo
I.E.S. Joan Miró
69
Ciclo Superior de Desarrollo de Productos Electrónicos
7. 3.- Fabricación de la placa de potencia
7.3.1.- Esquema eléctrico
Daniel García Bravo
I.E.S. Joan Miró
70
Ciclo Superior de Desarrollo de Productos Electrónicos
7.3.2.- Componentes
Daniel García Bravo
I.E.S. Joan Miró
71
Ciclo Superior de Desarrollo de Productos Electrónicos
7.3.3.- Cara de componentes y de pistas top copper
Daniel García Bravo
I.E.S. Joan Miró
72
Ciclo Superior de Desarrollo de Productos Electrónicos
7.3.4.- Cara de pistas bottom copper
Daniel García Bravo
I.E.S. Joan Miró
73
Ciclo Superior de Desarrollo de Productos Electrónicos
7. 4.- Fabricación de la placa de sensores
Esta placa siempre está en constante cambio, hasta que se da con la placa que mejor
nos convenga. Después de muchos prototipos, aquí se expone la que mejor hemos visto
que funciona. El ancho de las placas se intenta que tenga la misma medida, 48mm, para
que nuestro robot no sobrepase de las medidas, y también los taladros, que es por donde
sujetamos la placa a la carrocería del robot. Lo que sí que varía es el largo de la placa,
debido, en gran parte, a cómo se hayan distribuido los componentes por dicha placa.
El esquema eléctrico es para todas las placas el mismo, y como anteriormente se ha
comentado, el valor de las resistencias puede variar, siendo, el que aparece en los
esquemas eléctricos, el valor montado o no montado.
7.4.1.- Esquema eléctrico
Daniel García Bravo
I.E.S. Joan Miró
74
Ciclo Superior de Desarrollo de Productos Electrónicos
7.4.2.- Medidas
7.4.3.- Componentes
7.4.4.- Cara de componentes y de pistas top copper
Daniel García Bravo
I.E.S. Joan Miró
75
Ciclo Superior de Desarrollo de Productos Electrónicos
7.4.5.- Cara de pistas bottom copper
Daniel García Bravo
I.E.S. Joan Miró
76
Ciclo Superior de Desarrollo de Productos Electrónicos
7. 5.- Fabricación del mando a distancia
7.5.1.- Esquema eléctrico
7.5.2.- Medidas
Daniel García Bravo
I.E.S. Joan Miró
77
Ciclo Superior de Desarrollo de Productos Electrónicos
7.5.3.- Componentes
7.5.4.- Cara de componentes y de pistas top copper
Daniel García Bravo
I.E.S. Joan Miró
78
Ciclo Superior de Desarrollo de Productos Electrónicos
7.5.5.- Cara de pistas bottom copper
Daniel García Bravo
I.E.S. Joan Miró
79
Ciclo Superior de Desarrollo de Productos Electrónicos
8.- Carrocería
Daniel García Bravo
I.E.S. Joan Miró
80
Ciclo Superior de Desarrollo de Productos Electrónicos
9.- Lista de componentes y coste económico
LISTA DE COMPONENTES DEL VELOCISTA
Titulo: Velocista
Autor: Daniel García Bravo
Numero de componentes: 169
Cantidad
Referencia:
Valor:
Precio Precio
Unitario Total
38 Resistencias
18
16
1
2
1
R1, R3, R5, R7, R9, R11,
R13-R15, R17, R22, R24, R26,
R28, R30, R32, R34, R36
R2, R4, R6, R8, R10, R12,
R16, R18, R23, R25, R27, R29,
R31, R33, R35, R37
R19
R20, R21
R38
220
0,05
0,9
10k
0,05
0,8
100
4.7k
240
0,05
0,05
0,05
0,05
0,1
0,05
2200uF
100nF
220uF
1uF
15pF
10uF
0,5
0,05
0,2
0,1
0,05
0,05
0,5
0,3
0,2
0,4
0,1
0,05
15 Condensadores
1
6
1
4
2
1
C1
C2, C4, C9-C11, C14
C3
C5-C8
C12, C13
C15
12 Circuitos integrados
1
1
6
1
2
1
U1
U2
U3-U8
U9
U11, U12
U13
LM350K
MAX232
Optoacopladores
L298
74HC14
PIC16F876
Cantidad
Referencia:
Valor:
4
4
1,5
1,5
0,35
2,1
3,5
3,5
0,5
1
4,5
4,5
Precio Precio
Unitario Total
4 Transistores
4
Q1-Q4
BD139
0,35
1,4
1N4007
Led Verde
Led Amarillo
0,2
0,15
0,15
2,2
0,3
0,3
0,01
0,01
15 Diodos
11
2
2
D1, D2, D4-D12
D3, LED RASTREADOR
D13, D15
Otros Componentes
1
Daniel García Bravo
I.E.S. Joan Miró
ANTENA
Bornier1
81
Ciclo Superior de Desarrollo de Productos Electrónicos
1
2
6
4
1
3
4
4
2
1
8
1
1
1
4
10
1
3
1
2
4
18
2
BATERIA
INICIO, RESET
J1, J1A, J2, J2A, J3, J3A
J4-J7
J11
JP, JP1, JP21
JUMPER1-JUMPER4
MASA1-MASA4
MDE, MIZ
ON-OFF
OP1-OP8
RF1
RV1
X1
Br
T3
SP
Placas
Placas
Ruedas
Fajas
Separadores
Motores
Daniel García Bravo
I.E.S. Joan Miró
Bornier2
Pulsador
Conn-H10
Conn-Sil4
Conn-D9m
Bornier de 2
Conn-Sil3
Bornier de 1
Bornier de 2
Interruptor
CNY70
Cebek-C-0504
5k
Cristal
Bridas de Plástico
Tuercas de métrica 3
Soporte de plástico
Placas de C.I. de 70x75
Placa de C.I. de 148x48
Ruedas de espuma
Fajas
Separadores de plástico
Motores de C.C.
0,3
0,4
0,5
0,1
2,5
0,3
0,15
0,01
0,3
0,4
0,35
7
1
3
0,1
0,02
1
6
2
2,5
0,5
0,05
9
0,3
0,8
3
0,4
2,5
0,9
0,6
0,04
0,6
0,4
2,8
7
1
3
0,4
0,2
1
18
2
5
2
0,9
18
Total
95,1
82
Ciclo Superior de Desarrollo de Productos Electrónicos
LISTA DE COMPONENTES DEL MANDO
Titulo: Velocista
Autor: Daniel García Bravo
Numero de componentes: 46
Cantidad
Referencia:
Valor:
Precio Precio
Unitario Total
7 Resistencias
6
1
R1E-R6E
R7E
220
2.2k
0,05
0,05
0,3
0,05
0,2
0,05
0,4
0,1
4,5
1
4,5
1
BD136
0,35
0,35
Led Amarillo
Led Verde
Led Rojo
1N4007
0,15
0,15
0,15
0,2
0,3
0,3
0,3
0,2
4 Condensadores
2
2
C1E, C2E
C3E, C4E
220uF
15pF
2 Circuitos integrados
1
1
U1E
U2E
PIC16F876
7805
1 Transistor
1
Q1E
7 Diodos
2
2
2
1
Daniel García Bravo
I.E.S. Joan Miró
D1E, D5E
D2E, D3E
D4E, D7E
D6E
83
Ciclo Superior de Desarrollo de Productos Electrónicos
Cantidad
Referencia:
Valor:
Precio Precio
Unitario Total
Otros Componentes
1
1
1
5
1
1
1
4
4
4
1
1
ANTENA
Bornier1
BATERIA 9 VOLTIOS
Bateria
RF1
Cebek-C-0503
SW1E-SW5E
Pulsadores
SW6E
Interruptor
X1
Cristal
Placas
Placa de C.I. de 110x50
Separadores
Separadores metalicos
Tuercas
Tuercas M3
Tornillos
Tornillos M3 x 10 mm
Porta baterias
Porta baterias
SP
Soporte de plástico 110x50
Daniel García Bravo
I.E.S. Joan Miró
0,01
1
7
0,2
1
3
2
0,5
0,1
0,1
0,5
1
0,01
1
7
1
1
3
2
2
0,4
0,4
0,5
1
Total
27,11
84
Ciclo Superior de Desarrollo de Productos Electrónicos
10.- Coste económico total
Coste del Proyecto Rastreador
Tareas
Horas
Coste por hora (€)
Desarrollo Hardware
30
30
Desarrollo Software
25
30
Búsqueda de materiales
4
30
Montaje del prototipo
30
30
Pruebas del prototipo.
50
30
Componentes del velocista
Componentes del mando
Documentación
20
30
TOTAL
159
-
Daniel García Bravo
I.E.S. Joan Miró
Total (€)
900
750
120
900
1500
95,1
27,11
600
4892,21
85
Ciclo Superior de Desarrollo de Productos Electrónicos
11.- Referencias
Título: Compilador C CCS y simulador PORTEUS para Microcontroladores PIC.
Autor: Eduardo García Breijo.
Editorial: Marcombo.
Título: Tecnología de circuitos impresos.
Autores: Claudio Fernández González, José Luis Lázaro Galilea, Ignacio Fernández
Lorenzo, Jesús Ureña Ureña, Felipe Espinosa Zapata.
Editorial: Departamento de electrónica, Universidad de Alcalá
Título: Electrónica general.
Autores: A. Carretero, J. Ferrero, J.A. Sánchez-Infantes, P. Sánchez-Infantes.
Editorial: Editex.
Título: Lógica digital y microprogramable.
Autores: Fernando Remiro Domínguez, Antonio J.Gil Padilla, Luis M. Cuesta García.
Editorial: Mc Graw Hill.
Daniel García Bravo
I.E.S. Joan Miró
86
Ciclo Superior de Desarrollo de Productos Electrónicos
12.- Anexos técnicos
Características del microcontrolador PIC16F876A.
Características del LM350K.
Características eléctricas del inversor de giro L298.
Características de los sensores infrarrojos CNY70.
Características del MAX232.
Características eléctricas tarjeta emisora de datos CEBEK C-0503.
Características eléctricas tarjeta receptora de datos CEBEK C-504.
Curso de Robótica y otras aplicaciones en el aula de tecnología.
Daniel García Bravo
I.E.S. Joan Miró
87

Documentos relacionados