Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Automatizacion Del Proceso de Diseno y e
Automatizacion Del Proceso de Diseno y e
CIRCUITOS IMPRESOS
Asesor
Ingeniero Electrónico
Antonio José Albarracín Ramírez
________________________________
________________________________
________________________________
________________________________
________________________________
__________________________________
Firma del presidente del jurado
______________________________
Firma del jurado
_____________________________
Firma del jurado
Le doy gracias a DIOS por darme la oportunidad de vivir, por regalarme una
familia maravillosa y por ser mi fuerza y mi guía en todo momento. A mis
padres y hermanos por llenar mi vida de tanto amor y por apoyarme
incondicionalmente. A Wernher por su amor, su comprensión y por ser mi
mayor apoyo. Aquí esta la materialización de lo que un día soñé.
Esta tesis esta dedicada a mis Padres, a quienes agradezco de todo corazón
por su amor, cariño y compresión. En todo momento los llevo conmigo.
A mis compañeras, que dieron lo mejor, a esa dedicación y perseverancia que
con ayuda de Dios las llevara a cumplir todas sus metas. Especialmente a
Camilo, mi amigo para siempre.
A Dios.
Por habernos permitido llegar hasta este punto y habernos dado salud, y
sabiduría para lograr nuestros objetivos, además de su infinita bondad y amor.
A Mis Maestros.
Agradecemos a nuestros tutores, el Ingeniero Antonio José Albarracín y la
Licenciada Patricia Carreño, quienes nos orientaron oportunamente e hicieron
posible este proyecto, gracias por su gran apoyo y motivación para la
culminación de nuestros estudios profesionales y para la elaboración de este
trabajo de grado.
A Nuestros Amigos.
INTRODUCCIÓN ................................................................................................1
1.3 JUSTIFICACIÓN...........................................................................................6
2. MARCO DE REFERENCIA...........................................................................10
3. METODOLOGÍA ...........................................................................................35
3.5 HIPÓTESIS.................................................................................................36
6. CONCLUSIONES………………………………………………………………..103
7. RECOMENDACIONES………………………………………………………….106
BIBLIOGRAFÍA……………………………………………………………….…… 108
LISTA DE FIGURAS
Pág.
Figura 30. Tarjetas para control de los motores paso a paso y los sensores.. 46
Figura 32. PCB de la tarjeta para el control de los motores paso a paso…… 48
Figura 81. En el menú “File” opción “Printer Out”, de CIRCAD 98, imprimir
el fotolito……………………………………………………………...… 81
Pág.
Pág.
LCD: pantalla de cristal líquido o LCD (acrónimo del inglés Liquid crystal
display) es una pantalla delgada y plana formada por un número de píxeles en
color o monocromos colocados delante de una fuente de luz o reflectora. A
menudo se utiliza en dispositivos electrónicos de pilas, ya que utiliza
cantidades muy pequeñas de energía eléctrica.
Son pocas las técnicas para trazar circuitos impresos de alta calidad que se
encuentran hoy día, debido al costo del equipo y los materiales que se
requieren para implementar un proceso sofisticado de los mismos. Las
diferentes técnicas que existen actualmente para la elaboración de los circuitos
impresos, generalmente demandan mucho tiempo, son incómodas de trabajar y
en muchos casos poco eficientes.
1
1. PLANTEAMIENTO DEL PROBLEMA
Hay programas que se denominan PCB MAKER que sirven para diseñar los
caminos eléctricos; entre los más utilizados están EAGLE Layout Editor (de los
mejores por su completa librería), PROTEUS, ORCAD y el Express PCB.
Existe otros como TARGET 3001 que no son muy comerciales o como
CIRCAD que es bastante sencillo.
2
• Proyecto: Software para el control en red de un Sistema de perforación
Automática de Circuitos Impresos1.
Institución: INICTEL
____________
1
CARBO BUSTINZA Boris P. y MAMANI ALBURQUEQUE Jeo M. Software para el control en
red de un Sistema de perforación Automática de Circuitos Impresos. Lima: Inictel, 2004, p1.
2
ÁVILA MEZA Juan G. y COY Luis V. Control numérico computarizado aplicado a la
perforación de tarjetas para circuitos impresos. Bogotá: Fundación Universitaria Los
Libertadores, 1991, p.1.
3
Figura 1. Manipulador Cartesiano
4
• Proyecto: “TALADRO PCB” 3.
____________
3
GILDEMEISTER Alex y González Juan. TALADRO PCB. Santiago de Chile: Pontificia
Universidad Católica de Chile, 2002, p.2.
5
1.2 DESCRIPCIÓN Y FORMULACIÓN DEL PROBLEMA
1.3 JUSTIFICACIÓN
• Seleccionar la técnica más adecuada para cada una de las etapas del
proceso de diseño y construcción de circuitos impresos, tomando como
base aspectos como aplicabilidad y costos.
8
La precisión del sistema depende en gran medida, del punto de partida del
taladro (posición 0,0) y la adecuada posición de la placa al momento de iniciar
la perforación, ya que se hace de forma manual. La desviación en la precisión
del perforador es de 0.01mm, teniendo 68 pasos por milímetro.
9
2. MARCO DE REFERENCIA
10
Al realizar pistas y rutas de material conductor sobre una base o soporte
aislante se pueden realizar diseños de circuitos electrónicos específicos, en los
cuales la corriente conducirá únicamente por las rutas y caminos establecidos,
permitiendo de esta manera que cada elemento del circuito electrónico pueda
conducir.
Trazado de los circuitos impresos Entre las diferentes técnicas para trazar
circuitos impresos que se encuentran al alcance de estudiantes, algunas
permiten obtener tarjetas de muy buena calidad a bajo costo. Una de estas es
la técnica tradicional de serigrafía.
11
capa fotosensible. La capa fotosensible posee dos propiedades fundamentales:
es resistente a los ácidos y vulnerable a los rayos UV, tiene un espesor
aproximado de 4~6µm (micras), sirve para la protección del cobre frente al
agente de grabado que es un ácido. La capa de cobre tiene un espesor que
puede oscilar entre 0,025 y 0,07mm y los materiales más usados son la
baquelita y la fibra de vidrio, aunque también existen otros materiales como:
poliamidas de vidrio, kevlar, compuestos de cuarzo, aluminas (cerámicas),
invar-cobre.
Circuitos impresos su estructura y fabricación. [En Línea]. Estructura de una placa fotosensible
positiva. (Consulta: 20 septiembre, 2008. h.1:52).
12
Primero: un diagrama del circuito del que se desea fabricar (Ver Figura 5).
13
Figura 7. Marcador permanente
Quinto: Recipiente plástico o de vidrio para poner allí suficiente percloruro para
que la placa de circuito impreso quede cubierta totalmente.
14
Sexto: taladro liviano para abrir los agujeros. Adicional Broca de 1 mm. o de
1.5mm. Martillo y punzón o un clavo acerado delgado. Estas herramientas
sirven para hacer una guía para la broca en los puntos donde se insertarán los
pines de los diferentes componentes electrónicos.
Posteriormente se debe quitar la pintura negra con una lija fina para que
queden las pistas de cobre. Por último, el tiempo estimado para la corrosión es
de unos 15 a 20 minutos con una solución nueva. Con solución usada oscila
entre 40 y 60 minutos.
Segundo: Una vez que ha secado la mezcla esparcida sobre la seda y que se
cuenta ya con el fotolito del diseño, este se fija en el cristal (con cinta
transparente). Se cuida que la parte frontal del fotolito se coloque hacia el
cristal. Una vez hecho esto se coloca el cristal sobre la seda y se coloca del
lado donde la seda se encuentra sujeta al marco.
Se coloca la tinta para metal por el otro lado de la seda, se traza con el mismo
rasero el diseño del circuito impreso sobre la superficie de las tarjetas.
1. Un frasco de revelador.
18
2. Un frasco de sensibilizador.
3. Dos vidrios de 20x20x0.5 cms.
4. Un pincel suave.
5. Dos clips.
6. 1 bola de fibra metálica.
7. Una botella de cloruro férrico.
8. Dos palitos de madera.
Circuitos impresos elaborados mediante proceso fotográfico. Archivo pdf. [En Línea].
http://www.udistrital.edu.co/comunidad/profesores/jruiz/jairocd/texto/circuitosimpr/cirimpresos.p
df
19
Cuarto: Exponer la tablilla al sol por un minuto aproximadamente.
Séptimo: Retirar la tabla del liquido revelador con los palos de madera y
meterla en el recipiente con agua jabonosa agitando la tabla.
Octavo: Encender la luz o salir del cuarto oscuro y limpiar la tabla con un
chorro de agua y dejar secar. Revisar el estado de las pistas plásticas en la
superficie de la tabla y si es necesario retocar las que lo requieran.
Circuitos impresos elaborados mediante proceso fotográfico. Archivo pdf. [En Línea].
http://www.udistrital.edu.co/comunidad/profesores/jruiz/jairocd/texto/circuitosimpr/cirimpresos.p
df
Décimo: Una vez trazadas las tarjetas se procede a bañar las mismas en
Cloruro Férrico, con lo cual la acción corrosiva del cloruro férrico actuará sobre
20
las superficies descubiertas de la tinta metálica, obteniendo así el Circuito
impreso.
Circuitos impresos elaborados mediante proceso fotográfico. Archivo pdf. [En Línea].
http://www.udistrital.edu.co/comunidad/profesores/jruiz/jairocd/texto/circuitosimpr/cirimpresos.p
df
21
Pasos del proceso de diseño y elaboración de circuitos impresos
22
y seis partes de agua. Esta solución es muy lenta para grabar circuitos
impresos, pero tiene un grado de peligrosidad bajo y no causa severos daños a
las personas. Su manejo debe hacerse con mucho cuidado y guates de látex.
Fuente: Ataque químico con Cloruro férrico HClFe3. [En línea]. Tutorial de serigrafía, planograf
y estampado. http://planograf.com.ar/2008/07/mtodo-de-serigrafa-para-la-impresin-de.html.
(Consulta: 21 Octubre, 2008. h: 15:06).
23
La perforación se puede realizar de diferentes maneras, una de las técnicas es
utilizando maquinaria automatizada, controlada por una cinta de perforaciones
o archivo de perforaciones. Estos archivos generados por computador son
también llamados taladros controlados por computador (NCD – Network
Controlled Dirll) o archivos Excellon. El archivo de perforaciones describe la
posición y tamaño de cada perforación taladrada.
Las paredes de los orificios, para tarjetas con dos o más capas, son
metalizadas con cobre para formar, orificios metalizados, que conectan
eléctricamente las capas conductoras del circuito impreso4.
__________
4
[En línea]. España. http://es.wikipedia.org/wiki/Circuito_impreso. (Consulta: 19 septiembre,
2007. h: 17:34)
24
fotográfico y con la imagen del circuito impreso en positivo se curan
aquellas áreas de la emulsión que fueron expuesta a la luz y se remueve por
completo la emulsión de aquellas áreas que no fueron atacadas por la luz.
Fuente: Método de serigrafía para la impresión de circuito impreso. [En línea]. Tutorial de
serigrafía, planograf y estampado. http://planograf.com.ar/2008/07/mtodo-de-serigrafa-para-la-
impresin-de.html. (Consulta: 16 octubre, 2008. h: 20:28).
25
Figura 16. Imagen del circuito impreso marcado con tinta.
Fuente: Método de serigrafía para la impresión de circuito impreso. [En línea]. Tutorial de
serigrafía, planograf y estampado. http://planograf.com.ar/2008/07/mtodo-de-serigrafa-para-la-
impresin-de.html-. (Consulta: 16 octubre, 2008. h: 21:09).
En los PCs hay conectores DB9 macho, de 9 pines, por el que se conectan los
dispositivos al puerto serie (Ver figura 17). Los conectores hembra que se
enchufan tienen una colocación de pines diferente, de manera que se conectan
el pin 1 del macho con el pin 1 del hembra, el pin2 con el 2, etc. Cada pin tiene
una función diferente (Ver Tabla 1).
Fuente: Comunicación serie. [En línea]. Cuaderno técnico I: Comunicaciones serie (HW).
ttp://www.iearobotics.com/proyectos/cuadernos/ct1/ct1.htm. (Consulta: 20 octubre, 2008. h:
15:24).
26
Tabla 1. Función de cada Pin del DB-9.
Pin Función
TXD (Transmitir Datos)
RXD (Recibir Datos)
DTR (Terminal de Datos Listo)
DSR (Equipo de Datos Listo)
RTS (Solicitud de Envío)
CTS (Libre para Envío)
DCD (Detección de Portadora)
Fuente: Comunicación serie. [En línea]. Cuaderno técnico I: Comunicaciones serie (HW).
ttp://www.iearobotics.com/proyectos/cuadernos/ct1/ct1.htm. (Consulta: 20 octubre, 2008. h:
16:14).
27
través de las bobinas en la secuencia apropiada para realizar un
movimiento.
Fuente: Tutorial sobre Motores Paso a Paso (Stepper motors). [En línea]
Argentina.http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm.
Todorobot – Argentina.
0 TERMINALES
A B C D
1 +V -V +V -V
2 +V -V -V +V
3 -V +V -V +V
4 -V +V +V -V
Fuente: Tutorial sobre Motores Paso a Paso (Stepper motors). [En línea] Argentina.
http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm.
Todorobot – Argentina.
28
Secuencia del tipo medio paso. En esta secuencia se activan las bobinas
de tal forma que se logre un movimiento igual a la mitad del paso real. Para ello
se activan primero dos bobinas y luego solo una y así sucesivamente. La
secuencia completa consta de 8 movimientos en lugar de 4 (Ver figura 20).
Fuente: Tutorial sobre Motores Paso a Paso (Stepper motors). [En línea] Argentina.
http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm.
Todorobot – Argentina. (Consulta: 20 octubre, 2008. h: 17:53).
29
Temporizador Los temporizadores son mecanismos que funcionan o hacen
una operación por cierto tiempo donde el tiempo es ajustado de acuerdo con el
uso dado. Entre los temporizadores existen algunos muy pequeños que son
incorporados en un IC (circuito integrado) y otros grandes empleados en
circuitos de potencia; pueden ser digitales o análogos cuando portan
implementos básicos.
30
automáticamente detecta que se ha removido la energía en el circuito principal
y se conectan las baterías de respaldo cuando es requerido.
31
2.2 MARCO LEGAL O NORMATIVO
32
Figura 21. Aspectos de diseño de un circuito electrónico.
33
El universo de conocimiento y criterios tanto de manufactura como de diseño
electrónico que proporcionan los estándares IPC es enorme, pero es posible
presentar algunas de las normas que nos permiten ver su utilidad e
importancia:
• Entre los estándares IPC también están los de "aceptabilidad". Tal es el caso
del IPC-A-610, "Aceptabilidad de Ensambles Electrónicos" (disponible en
español). Este estándar muestra, con fotografías en colores y textos
explicativos, qué se considera universalmente como "lo ideal", "lo aceptable" y
"lo defectuoso" en la industria del ensamblado de componentes electrónicos y
otros elementos. Esta norma entrega además consejos y buenas prácticas para
evitar errores en el armado y lograr ensambles electrónicos fiables, verificables
y robustos.
Las normas del IPC son una herramienta imprescindible para adoptar
rápidamente prácticas de diseño y fabricación de electrónica de alta calidad sin
tener que pasar por años de pruebas y errores. Conocerlas nos otorga criterios
relevantes a la hora de evaluar la calidad de los circuitos electrónicos.
Aplicarlas nos deja un paso más cerca de alcanzar un nivel de calidad
comparable al de los países líderes de la industria electrónica, y lo mejor de
todo, sin aumentar nuestros costos.
34
3. METODOLOGÍA
35
Campo temático: Microelectrónica, Control.
El proyecto abarca este campo temático puesto que su objetivo primordial fue
lograr la construcción de un dispositivo que controla una serie de mecanismos
y procesos, que hacen más sencilla la forma de producir circuitos impresos.
Sin embargo, el proyecto también está dirigido a todas aquellas personas que
estén interesadas en la fabricación de circuitos impresos, ya sean profesores,
estudiantes, ingenieros, técnicos o comerciantes o simplemente aficionados a
la electrónica.
3.5 HIPÓTESIS
36
Dicho mecanismo será un elemento educativo que ilustrará y servirá como
punto de referencia para prácticas de laboratorio y aprendizaje alrededor de la
elaboración de tarjetas electrónicas.
3.6 VARIABLES
Espacio mínimo entre PADS y caminos. Esta medida debe ser milimétrica
cuidando de no hacer corto y está dada por las características de los
componentes mecánicos que se utilicen para construir el dispositivo.
Número de pads. Esta variable está dada únicamente por el diseño específico
que se quiera trabajar.
37
Tiempo de elaboración del circuito impreso. Depende finalmente de la
complejidad del diseño del circuito impreso, principalmente del número de
PADS, que determinan el tiempo de trabajo en el módulo de perforación. El
tiempo de insolación, revelado y atacado es el mismo para todas las placas,
independientemente de su tamaño.
38
4. DESARROLLO INGENIERIL
Una vez se tiene el diseño PCB, iniciamos la segunda etapa, que corresponde
a la impresión de las plantillas o fotolitos; desde el software CIRCAD 98, se
imprime el fotolito correspondiente al plano electrónico y diseño PCB deseado.
Para este proyecto se usa fotolitos negativos puesto que se usa placas
fotosensibles negativas, en caso contrario, el fotolito se imprime positivo. Estas
39
plantillas ofrecen mejores resultados imprimiendo en acetato aunque también
es posible usar papel vegetal; en cualquier caso es recomendable usar un alto
nivel de tinta.
Una vez se obtiene el diseño PCB y las plantillas, empieza el trabajo en cada
uno de los cuatro módulos.
Cuando la tarjeta ha sido perforada, ya está lista para plasmar en ella el diseño
PCB, para ello se usan los fotolitos impresos en la segunda etapa. Se debe
insolar la tarjeta haciendo coincidir los PADs marcados en el fotolitos con los
agujeros hechos en el módulo de perforado.
Luego de ser insolada, la tarjeta está lista para ser revelada; este proceso se
hace con una disolución cáustica, y se obtiene el diseño PCB revelado (visible)
en la placa en muy pocos minutos.
A continuación se describe con mayor detalle cada uno de los cuatro módulos.
41
Figura 25. Diagrama de bloques del módulo de perforado.
El módulo de perforado consta de una estructura con tres motores paso a paso,
acoplados cada uno a un tornillo sinfín, para desplazarse en el eje X e Y, y para
subir y bajar (eje Z) el dispositivo de perforado (Ver figura 26). También posee
una base con una guía de fijación de la tarjeta (Ver figura 27), para ajustarla en
el punto (0,0) e impedir que se mueva y una serie de sensores usados como fin
de carrera en cada uno de los ejes (dos para cada eje, uno en cada extremo)
(Ver figura 28). El dispositivo de perforado fue construido con un motor DC
acoplado a un mandril que sujeta las brocas (Ver figura 29). El taladro se
desplazará a lo largo y ancho de esta base según las posiciones XY como se
describió anteriormente y en el eje Z conservando un límite superior y bajando
cada vez que se ubique un nuevo punto a perforar. El taladro que conforma el
módulo es controlado por motores paso a paso a través de un microcontrolador
y un PC (Ver figura 25).
42
Figura 26. Modulo perforador.
43
Figura 28. Sensores para el fin de carrera.
44
Para controlar la estructura del módulo de perforado se diseñaron dos tarjetas
(Ver figura 30). Como ya se dijo la primera controla los tres motores paso a
paso para los ejes X, Y, y Z, a través del puerto paralelo. En el circuito se
utilizan tres bloques de drivers iguales, uno para cada motor; estos driver se
componen de cuatro conjuntos de elementos. Cada conjunto se compone de
un TIP 122 (Ver Anexo M), un optoacoplador 4N33 (Ver Anexo O) y un
TIP3055 (Ver Anexo N), así tenemos cuatro conjuntos iguales de elementos,
uno para cada bobina de cada uno de los tres motores.
Además el circuito contiene tres conectores (uno para cada motor), de seis
salidas cada uno que corresponden a cuatro bobinas y dos comunes (salidas
conectadas a 5V); estos conectores son el acople entre los tres bloques de
drivers y los motores paso a paso.
Para que cada motor establezca comunicación con la interfase, se requiere que
la entrada de ésta, reciba 2 bits de datos, un dato representa movimiento a la
derecha, y el otro a la izquierda, ambos bits en cero representan estado
inactivo.
Para controlar los tres motores paso a paso, se necesitan 4 pines de control
para las bobinas de cada motor; por lo tanto, se utilizan en total 12 pines para 3
motores de 4 bobinas cada uno. La conexión mediante puerto paralelo se hace
utilizando los pines de control del 2 al 13 del conector DB25. Los pines del 18 al
25 se conectan a tierra.
Las señales digitales que provienen del PC, activan el diodo led del opto
acoplador 4N33 correspondiente. Una vez activado, éste envía el pulso al foto
detector tipo Darlington, el cual lo envía a la base de un transistor de propósito
general. Este transistor es del tipo NPN para el giro a la derecha, mientras que
para el giro a la izquierda se utiliza un transistor tipo PNP.
45
Cada motor es conectado al colector de ambos transistores, para así recibir los
voltajes tanto positivo como negativo, dependiendo del sentido de giro.
En caso de que se active los dos bits al mismo tiempo para un motor, la
resistencia de 330Ω con retroalimentación de los cátodos del diodo led del opto
acoplador, anulan el paso de corriente al opto-acoplador complementario,
evitando el riesgo de corto circuito. Por lo tanto, si se presenta el caso en que
las entradas reciban un “1” lógico, el motor permanece en estado inactivo.
La dirección de puerto LPT 0x378 es usada para enviar y recibir los datos que
permiten el control de los tres motores paso a paso a través del puerto paralelo.
Figura 30. Tarjetas para control de los motores paso a paso y los sensores.
46
Figura 31. Circuito electrónico de control de motores paso a paso y
comunicación con el PC por puerto paralelo.
47
Figura 32. PCB de la tarjeta para el control de los motores paso a paso.
48
Figura 34. Motor paso a paso de imán permanente.
.
Fuente: Motor paso a paso. [En línea]. 49Inform Cataloga.
http://www.datasheetcatalog.net/s/datasheets_pdf/L/2/9/7/L297_1.shtml. (Consulta: 28 agosto,
2008. h: 11:29).
Para los motores utilizados en el diseño del circuito del perforador hay tres
posibles secuencias. La primera es para dinamizar las bobinas en la secuencia
AB / CD / BA / DC. Esta secuencia se conoce como una fase de plena ola de
paso o modo unidad. Sólo es una fase de energía en un momento dado.
La tercera opción es para dinamizar una fase, luego dos, entonces uno, etc., de
manera que el motor se mueva en incrementos de mitad de paso. Esta
secuencia, es conocida como un modo medio paso (Ver Figura 35).
49
Figura 35. Secuencia del motor.
51
Figura 37. PCB de la tarjeta que controla los sensores.
El código del software que controla los motores fue desarrollado en Visual
Studio 6.0, generando una interfaz de usuario en una ventana con una serie de
menús, botones y gráficos que permiten al usuario manejar el software de
perforación de una manera muy sencilla y visualmente ilustrativa.
53
La ventana principal del software de interfaz de usuario “MESA XYZ”, se divide
en los menús “Archivo”, “Edición”, “Mover”, “Configuración” y “Ayuda” (Ver
figura 39).
Dentro del menú “Archivo”, encontramos las opciones “Abrir” (para abrir un
archivo de CIRCAD 98) Y “Salir”. En el menú “Edición”, encontramos las
opciones “Procesar”, “Dibujar” y “Taladrar” (los puntos a perforar del archivo
PCB). En el menú “Mover”, están las opciones “Origen”, “Final” (mueven los
motores de los ejes X y Y al origen o final de la estructura) y “Taladro” (mueve
el taladro o motor DC a los límites superior o inferior del eje Z). Dentro del
menú “Configuración” se encuentran las opciones “PuertoCOM”, “PuertoLPT”
(seleccionan los puertos a trabajar), “Motor X”, “Motor Y” y “Motor Z” (se
configuran pasos/mm, velocidad y número de bobinas para cada motor
respectivamente). Por último está el menú “Ayuda”, donde se encuentran las
opciones “Calibración Eje X”, “calibración Eje Y” y “Calibración Eje Z” (allí es
posible configurar la precisión de los motores según el número de bobinas y el
número de pasos/mm).
55
Pasos para usar el módulo de perforado:
56
Figura 41. Ajustando la broca al mandril.
Tercero: Verificar que la base de fijación esté correctamente puesta según las
guías (Ver figura 42).
57
Figura 43. Origen respecto al diseño de CIRCAD 98.
58
Figura 45. Conexión del módulo a los puertos serial y paralelo.
Sexto: Conectar el módulo a una toma (AC) y encenderlo (Ver figura 47).
59
Figura 47. Módulo conectado y encendido.
60
Octavo: En el menú “Configuración”, en las opciones correspondientes a
“Motor X”, “Motor Y”, y “Motor Z” (Ver figura 49), verificar que en el campo
“Pasos/mm”, esté configurado a 68. En el campo “Velocidad” elegir un valor
cualquiera para X desde 8, para Y desde 9 y para Z desde 7, hasta 100,
teniendo en cuenta que a menor número en este campo, mayor velocidad. De
igual forma en el campo “Nº de bobinas”, elegir la opción 1 ó 2 bobinas, siendo
1 bobina configuración del motor a paso completo y 2 bobinas configuración
medio paso (Ver figura 50). Tener en cuenta que lo ideal es que la
configuración de “Nº de bobinas” y “Pasos/mm” para los tres ejes sea la misma.
61
Noveno: En el menú “Configuración”, en la opción correspondiente a “Puerto
COM” (Ver figura 51), verificar que esté configurado en 1 (Ver figura 52). De
igual forma en el menú “Configuración”, en la opción correspondiente a “Puerto
LPT” (Ver figura 53), verificar que esté configurado en 0x378 (Ver figura 54).
62
Figura 54. Ventana de configuración puerto LPT.
Décimo. Cargar el diseño de CIRCAD 98 que se desea perforar (Ver figura 55).
En el menú “Archivo”, pulsar la opción “Abrir” y seleccionar el archivo elegido
(Ver figura 56), también es posible hacerlo desde la ventana principal en el
icono correspondiente (Ver figura 57). A continuación en la ventana principal,
en la pestaña “Archivo”, aparecerá el archivo extraído de CIRCAD 98, que
contiene todas las características del diseño PCB incluyendo las coordenadas
correspondientes a los pads del diseño a trabajar (Ver figura 58).
63
Figura 56. Icono para la opción “Abrir”.
64
Figura 58. Archivo extraído de CIRCAD 98.
65
Figura 59. Menú “Edición”, opción “Procesar”.
66
Figura 61. Puntos ordenados en la ventana principal, pestaña “Proceso”.
67
Figura 62. Menú “Edición”, opción “Dibujar”.
69
Figura 67. Mensaje de finalización del proceso de perforado.
70
Figura 69. Retirando la tarjeta de la guía de fijación.
La tarjeta está lista para pasar al módulo de insolación (Ver figura 70).
71
Previo a la insolación de la tarjeta, se requiere un fotolito (impreso con alto nivel
de tinta, preferiblemente en acetato) que sirva como plantilla para plasmar el
diseño PCB, exactamente en la tarjeta (Ver Figura 71).
73
El módulo está dotado de un temporizador que permite controlar el tiempo de
exposición a la luz UV de la placa fotosensible.
El DS1307 ofrece una alta precisión a lo largo del tiempo, se maneja mediante
el bus I2C del microcontrolador. En su pin SQW/OUT proporciona una onda
cuadrada programable.
Para la programación del RTC se emplea el bus I2C para comunicarse con un
dispositivo "maestro", que en este caso es el microcontrolador. El bus I2C usa
dos líneas, una de reloj: SCL y una de datos: SDA. La comunicación siempre la
inicia un dispositivo “de inteligencia”, en este caso el micro, y funciona como un
"maestro". El periférico que se controla actúa como "esclavo" y responde al
llamado del maestro. Las líneas SCL es controlada por el micro pues el manda
los pulsos de sincronía, y el flujo de información en la línea SDA es
determinado por el dispositivo que solicita o envía informacion.
Este tipo de bus no hace uso de un "chip select" puesto que el primer byte que
uno transmite es la dirección del periférico a controlar. Se transmiten octetos o
grupo de 8 bits acompañados de la señal de reloj, que también son 8 pulsos
mas uno de ACK; en total serían 9 pulsos de reloj para 8 bits de data mas uno
de ACK. Se transfiere el bit más significativo primero.
Para liberar el bus, el micro debe restablecer las líneas SCL y SDA a nivel HI
(1) con un bit de STOP. Dicha condición se cumple después de revisar el último
bit ACK; SCL debe llegar primero a nivel HI, y se hace válido cuando SDA hace
la transición de LO a HI.
76
Figura 76. Circuito electrónico del módulo de insolación.
77
Figura 77. Diagrama de pines RTC DS1307.
78
Una pantalla LCD de 2 X 16 es la que permite la visualización del contador de
tiempo descendente (tiempo de operación del módulo insolador), así como
también muestra las opciones del menú para aumento o disminución del tiempo
de exposición de la tarjeta y la programación de inicio o pausa del proceso.
79
El Anexo K contiene el código de programación necesario para el manejo del
display (LCD). Éste código fue desarrollado en Borland Builder 6.0.
80
resultados. Usar preferiblemente una impresora láser con el máximo nivel de
tinta, entre más oscuro sea el fotolito mayor calidad de insolación (Ver figura
83).
Figura 81. En el menú “File” opción “Printer Out”, de CIRCAD 98, imprimir el
fotolito.
81
Figura 82. Configuración de las opciones de impresión en la ventana “Printer
Output Setup”.
82
Figura 84. Quitando el film protector.
83
Figura 85. Fotolito sobre el cristal de la insoladora.
84
Figura 87. Placa fotosensible sobre el fotolito.
85
Sexto: Se baja la tapa de la insoladora y se selecciona el tiempo de exposición
(Ver figuras 89 y 90), se recomienda programar a 10 minutos. Una vez los
tubos se enciendan (Ver figura 91), solo queda esperar a que el tiempo
programado se cumpla para ver los resultados.
86
Figura 91. Insoladora actuando.
87
Figura 93. Placa lista para ser revelada.
El módulo tiene una base en la que se fija el contenedor para evitar posibles
derrames de solución durante el proceso. Además se debe disponer de otro
contenedor de similares características pero conteniendo agua, la cual es
utilizada para quitar los excesos de químicos e impurezas entre procesos (Ver
figura 95).
89
Pasos para usar el módulo de revelado.
90
Figura 97. Preparando la solución cáustica.
91
que el material fotosensible que ha sido expuesto a la luz en el proceso de
insolación se haya desprendido por completo (Ver figura 100).
92
Cuarto: Al poco tiempo de sumergir la placa en la disolución, va apareciendo el
dibujo de las pistas, formando lentamente el circuito completo. Cuando el dibujo
aparece claramente, el revelado está completado, entonces se debe retirar la
placa del contenedor (Ver figura 101).
Quinto: Se lava la placa con abundante agua para detener el revelado (Ver
figura 102) y finalmente está lista para pasarla al módulo de atacado, en este
punto es posible ver todo bien definido (pistas y pads) cubiertas por el material
fotosensible de la tarjeta, el resto de la tarjeta ha quedado con el cobre al
descubierto (Ver figura 103).
93
Figura 102. Lavando la placa que ha sido revelada.
94
En el módulo de atacado es posible trabajar con el llamado atacador lento:
cloruro férrico (FeCl3) que viene en terrones, o con el atacador rápido, el cual
está compuesto por dos líquidos, ácido clorhídrico y agua oxigenada, para
retirar el cobre de aquellas partes de la placa que no están protegidas por las
pistas trazadas en el módulo de insolación.
95
Para obtener el resultado final se debe eliminar el barniz fotosensible que ha
quedado en la placa. Para esto se puede sumergir o limpiar suavemente la
placa con acetona o secar la placa y ponerla sin fotolitos en la insoladora por 5
minutos. Luego se pone otros 5 minutos por el otro lado, incluso si es de cara
simple (por su proceso de fabricación, la mayoría de las placas llevan barniz
fotosensible por las dos caras, aunque sólo tengan una cara de cobre). Luego
se introduce unos minutos en el revelador (solución cáustica) que había
quedado y se elimina todo el barniz, ya que todo él ha estado expuesto a la luz
ultravioleta. Además, la placa queda totalmente limpia por el efecto detergente
de la sosa. Sólo queda lavarla con agua y secarla para tener el circuito
impreso.
96
Segundo: Se introduce la placa en el contenedor del módulo (Ver figura 107) y
se cierra el contenedor, pasando el seguro (Ver figura 108).
97
Cuarto: Una vez se ha eliminado el cobre innecesario (de aquellas partes de la
tarjeta que no son pistas o pads y que no estaban protegidas por el material
fotosensible de la tarjeta) se retira el seguro y se abre el módulo para retirar la
tarjeta del contenedor del módulo atacador (Ver figura 109).
98
Sexto: Para obtener el resultado final se debe eliminar el material fotosensible
que ha quedado sobre las pistas y pads en la placa. Para esto se sumerge o se
limpia suavemente la placa con acetona (Ver figura 111) y se obtiene la placa
lista para ensamblar en ella los componentes (Ver figura 112).
100
5. PRESENTACIÓN DE ANÁLISIS Y RESULTADOS
5. Las pruebas del módulo de revelado muestran que este proceso toma
aproximadamente de uno a tres minutos dependiendo del tamaño del
circuito y de la concentración (dos o tres escamas de sosa cáustica en
una tasa de agua, es una mezcla suficiente para una tarjeta pequeña de
aproximadamente 10cm2) y temperatura de la solución. Se recomienda
no calentar la solución cáustica dado que al elevar su temperatura,
puede emitir gases que son perjudiciales para la salud.
102
6. CONCLUSIONES
3. Las placas vírgenes para circuitos impresos suelen ser de fibra de vidrio,
baquelita, teflón, etc. y están recubiertas por una o por las dos caras por
un baño de cobre que es elemento por el que circula la corriente en los
circuitos. En el diseño se utilizan placas fotosensibilizadas las cuales
son sensibles a luz. Durante el proceso se protege unas zonas de la luz
fluorescente y otras no, con lo que se consigue que el circuito quede
estampado en la placa fotosensibilizada. En este proyecto se trabajo con
fibra fenólica sensibilizada por ser estas las tarjetas fotosensibles más
comerciales en el mercado colombiano, además de ser de menor costo
y de ofrecer resultados de mejor calidad dentro de las fibras de este tipo.
4. Para transferir las pistas del diseño PCB a la placa no se utiliza ninguna
de las técnicas comunes como la serigrafía o el grabado con tinta
indeleble, si no que se realiza mediante el método de calor producido
por tubos de neón. Esta técnica permite tener unos acabados casi
profesionales con unos costos reducidos, razón por la cual se seleccionó
esta técnica.
104
10. El módulo del revelado es de acrílico; donde la disolución utilizada
eliminará el exceso de material fotosensible en muy poco tiempo sin
necesidad de calentarla o agitarla.
105
7. RECOMENDACIONES
106
9 En el modulo de atacado se sugiere utilizar guantes de látex, tapabocas,
pinzas plásticas (no utilizar material metálico, puesto que reacciona con
el ácido). Se recomienda cubrir la ropa y superficies vecinas debido a
que los ácidos utilizados en este modulo pueden manchar y ocasionar
daños en la piel, además de tener un olor muy fuerte que puede llegar a
ser perjudicial para la salud.
9 Una vez iniciados los procesos en cada uno de los módulos, estos no
deben ser interrumpidos. Se recomienda respetar los tiempos
establecidos para cada uno de ellos. Si se presenta alguna falla, se debe
esperar a que termine el proceso y repetir nuevamente. Lo anterior como
pautas de seguridad para el usuario.
107
BIBLIOGRAFÍA
108
CURSOS. Diseño de PCB. [En línea]. Argentina. http://www.pablin.com.ar
/109nformac /cursos/pcb/index.htm (Consulta: 3 septiembre. 2007. h: 20:58)
HILLAR Gaston. Diseño de circuitos impresos con PC. Argentina: Hasa, 2004.
96 p. (Consulta: 23 junio, 2008. h: 13:12)
RELOJ DE TIEMPO REAL. Reloj de Tiempo Real para Datalogger. [En Línea].
http://www.clubse.com.ar/DIEGO/NOTAS/notas19/nota31.htm. (Consulta: 30
septiembre, 2007. h: 12:54)
109
TUTORIALES. Motores Paso a Paso (Stepper motors). [En línea]. Argentina.
http://www.todorobot.com.ar/110nformación/tutorial%20stepper/stepper-
tutorial.ht m (Consulta: 11 agosto, 2008. h: 10:48)
110
ANEXO A
111
ANEXO B
112
ANEXO C
PROCESSOR 16F628A
INCLUDE <P16F628A.INC>
__CONFIG H'1F01'
CBLOCK 20
DATO_RECE, WREG_TEMP, STAT_TEMP
PCLA_TEMP, REG1, REG2
ENDC
ORG 00
GOTOPRINCIPAL
ORG 04
GOTOINTERRUPC
PRINCIPAL MOVLW 07
MOVWF CMCON
BSF STATUS, RP0
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'11111011'
MOVWF TRISB
MOVLW .12 ; 19200
MOVWF SPBRG
MOVLW B'00100100'
MOVWF TXSTA
BSF INTCON, GIE
BSF INTCON, PEIE
BSF PIE1, RCIE
113
BCF STATUS, RP0
CLRF PORTA
CLRF PORTB
MOVLW B'10010000'
MOVWF RCSTA
;============================================================
==================
; RUTINAS DE TX Y RX
114
;============================================================
==================
INTERRUPC BCF INTCON, GIE
MOVWF WREG_TEMP
SWAPF STATUS, W
MOVWF STAT_TEMP
SWAPF PCLATH, W
MOVWF PCLA_TEMP
MOVF RCREG, W
MOVWF DATO_RECE
MOVF DATO_RECE, W
XORLW "1"
BTFSC STATUS, Z
GOTOON_110
MOVF DATO_RECE, W
XORLW "0"
BTFSC STATUS, Z
GOTOOFF_110
TRANSMITIR
BSF STATUS, RP0
BTFSS TXSTA, TRMT
GOTO$-1
BCF STATUS, RP0
MOVWF TXREG
RETURN
;============================================================
==================
; FIN DEL PROGRAMA
;============================================================
==================
END
116
ANEXO D
'Retardos
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
'Constantes
Public Const MAX_PTOS = 1000
Public Const PTO_X = 1
Public Const PTO_Y = 2
'Variables
Public guiax, guiay, guiaz As Integer
Public factor(1 To 3) As Integer
Public tipopaso(1 To 3) As Integer
Public velocidad(1 To 3) As Integer
Public sensoresInicio(1 To 3) As Integer
Public sensoresFinal(1 To 3) As Integer
Public iContador(1 To 3) As Integer
Public sCadena As String
Public iPuertoCOM As Integer
Public iPuertoLPT As Integer
117
Public Puntos(1 To MAX_PTOS, 1 To 2) As Double
Public TotalPuntos As Integer
Public bPanico As Boolean
'
Public Sub LimpiarPuntos()
Dim i, j As Integer
For i = 1 To maxptos
For j = 1 To 2
Puntos(i, j) = 0
Next
Next
TotalPuntos = 0
End Sub
sCadena = ""
iContador(1) = 0
iContador(2) = 0
iContador(3) = 0
iPuertoCOM = 1
iPuertoLPT = &H378
End Sub
Escribir iPuertoLPT, 0
Escribir iPuertoLPT + 2, 11
End Sub
guiax = 0
guiay = 0
guiaz = 0
tipopaso(1) = 1
tipopaso(2) = 1
tipopaso(3) = 1
End Sub
End Function
End Sub
End Sub
End Sub
End Sub
End Sub
End Sub
End Sub
End Sub
fac = factor(eje)
valor = (posicion * 25.4000508) ' en milimetros
CalcularPasos = Round(valor * fac, 0)
End Function
124
ANEXO E
Dim i, j As Integer
Grafica.Cls
Grafica.ScaleMode = 5
Grafica.DrawWidth = 7
Grafica.PSet (0, 0), vbGreen
For i = 0 To R2.ListCount - 1
Grafica.PSet (punto(R2.List(i), PTO_X), punto(R2.List(i), PTO_Y)), vbGreen
Next
End Sub
Dim i As Integer
i = InStr(1, s, "-")
If i > 0 Then
If p = PTO_X Then
punto = Val(Mid(s, 1, i - 1))
Else
punto = Val(Mid(s, i + 1, Len(s)))
End If
Else
punto = 0
End If
End Function
125
Private Sub InicializarForma()
Dim i, j As Integer
On Error Resume Next
'Barra de status
j = Int(Me.Width / StatusBar.Panels.Count)
For i = 1 To StatusBar.Panels.Count
StatusBar.Panels(i).Width = j
Next
Frame.Left = 0
Frame.Top = ToolBar.Top + ToolBar.Height + 10
Frame.Width = Me.Width
MultiPage.Width = Me.Width
MultiPage.Height = Me.Height - StatusBar.Height - ToolBar.Height -
Frame.Height
MultiPage.Left = 0
MultiPage.Top = Frame.Top + Frame.Height + 50
i = MultiPage.Value
MultiPage.Value = 1
MultiPage.Value = 0
MultiPage.Value = i
GraficarPuntos
End Sub
If MSComm.PortOpen Then
MSComm.Output = "1"
End If
End Sub
If MSComm.PortOpen Then
MSComm.Output = "0"
End If
End Sub
bMueveX = False
bMueveY = False
CerrarPuertoLPT
TmrMotores.Enabled = False
bPanico = True
End Sub
InicializarPuertoLPT
InicializarSistema
CerrarPuertoLPT
MSComm.CommPort = iPuertoCOM
MSComm.PortOpen = True
Exit Sub
errLoad:
MsgBox Err.Description
127
Err.Clear
End Sub
InicializarForma
End Sub
Dim s As String
CommonDialog.ShowOpen
If CommonDialog.FileName <> "" Then
StatusBar.Panels(1).Text = CommonDialog.FileName
R1.Clear
Open CommonDialog.FileName For Input As #1
While Not EOF(1)
Line Input #1, s
R1.AddItem (s)
Wend
Close #1
R2.Clear
Grafica.Cls
End If
End Sub
CerrarPuertoLPT
If MSComm.PortOpen Then MSComm.PortOpen = False
End
End Sub
FrmCalibracion.iMotor = CMOTOR_EJEX
FrmCalibracion.Show 1
End Sub
128
FrmCalibracion.iMotor = CMOTOR_EJEY
FrmCalibracion.Show 1
End Sub
FrmCalibracion.iMotor = CMOTOR_EJEZ
FrmCalibracion.Show 1
End Sub
FrmConfigMotor.iMotor = CMOTOR_EJEX
FrmConfigMotor.Show 1
Open App.Path & "\motorx.dat" For Input As #1
Input #1, s 'Factor desplazamiento
factor(CMOTOR_EJEX) = Val(s)
Input #1, s 'Velocidad ms
velocidad(CMOTOR_EJEX) = Val(s)
Input #1, s 'No bobinas
tipopaso(CMOTOR_EJEX) = Val(s)
Close #1
End Sub
FrmConfigMotor.iMotor = CMOTOR_EJEY
FrmConfigMotor.Show 1
Open App.Path & "\motory.dat" For Input As #1
Input #1, s 'Factor desplazamiento
factor(CMOTOR_EJEY) = Val(s)
Input #1, s 'Velocidad ms
velocidad(CMOTOR_EJEY) = Val(s)
Input #1, s 'No bobinas
tipopaso(CMOTOR_EJEY) = Val(s)
Close #1
End Sub
FrmConfigMotor.iMotor = CMOTOR_EJEZ
FrmConfigMotor.Show 1
129
Open App.Path & "\motorz.dat" For Input As #1
Input #1, s 'Factor desplazamiento
factor(CMOTOR_EJEZ) = Val(s)
Input #1, s 'Velocidad ms
velocidad(CMOTOR_EJEZ) = Val(s)
Input #1, s 'No bobinas
tipopaso(CMOTOR_EJEZ) = Val(s)
Close #1
End Sub
bPuerto = False
iAnterior = MSComm.CommPort
If MSComm.PortOpen Then
MSComm.PortOpen = False
bPuerto = True
End If
FrmConfigPuertoCOM.Show 1
MSComm.CommPort = iPuertoCOM
If bPuerto Then MSComm.PortOpen = True
Exit Sub
ErrItmConfig_PuertoCOM:
MsgBox "Número de error: " & Err.Number & vbNewLine & _
"Descripción del error: " & Err.Description, vbCritical
MSComm.CommPort = iAnterior
MSComm.PortOpen = True
End Sub
CerrarPuertoLPT
FrmConfigPuertoLPT.Show 1
Open App.Path & "\puertolpt.dat" For Input As #1
Input #1, s
Close #1
130
If Val(s) = 1 Then
iPuertoLPT = &H378
Else
iPuertoLPT = &H278
End If
End Sub
GraficarPuntos
End Sub
Dim i, j, z As Integer
Dim s, p, x, y As String
Dim temp(1 To 2) As Double
R2.Clear
LimpiarPuntos
z=1
'Leer puntos
For i = 0 To R1.ListCount - 1
s = R1.List(i)
If Mid(s, 1, 1) = "3" Then
p = Trim(Mid(s, 2, Len(s)))
'Layer
j = InStr(1, p, " ")
p = Trim(Mid(p, j + 1, Len(p)))
'Type
j = InStr(1, p, " ")
p = Trim(Mid(p, j + 1, Len(p)))
'X0
j = InStr(1, p, " ")
x = Mid(p, 1, j - 1)
p = Trim(Mid(p, j + 1, Len(p)))
'Y0
j = InStr(1, p, " ")
y = Mid(p, 1, j - 1)
p = Trim(Mid(p, j + 1, Len(p)))
R2.AddItem (x & " - " & y)
Puntos(z, PTO_X) = Val(x)
Puntos(z, PTO_Y) = Val(y)
z=z+1
131
End If
Next
TotalPuntos = z - 1
'Ordenar puntos por ejex
For i = 1 To TotalPuntos - 1
For j = i To TotalPuntos
If Puntos(j, PTO_X) < Puntos(i, PTO_X) Then
temp(PTO_X) = Puntos(j, PTO_X)
temp(PTO_Y) = Puntos(j, PTO_Y)
Puntos(j, PTO_X) = Puntos(i, PTO_X)
Puntos(j, PTO_Y) = Puntos(i, PTO_Y)
Puntos(i, PTO_X) = temp(PTO_X)
Puntos(i, PTO_Y) = temp(PTO_Y)
j=i
End If
Next
Next
' volver a mostrar puntos
R2.Clear
For i = 1 To TotalPuntos
R2.AddItem (Str(Puntos(i, PTO_X)) & " - " & Str(Puntos(i, PTO_Y)))
Next
End Sub
Dim i As Integer
bPanico = False
MoverseOrigen
'Moverse a los puntos
iContX = velocidad(CMOTOR_EJEX)
iContY = velocidad(CMOTOR_EJEY)
iActual = 1
dAntesX = 0
dAntesY = 0
'Calculos en X
bMueveX = True
iPasosX = CalcularPasos(Abs(Puntos(iActual, CMOTOR_EJEX) - dAntesX),
CMOTOR_EJEX)
If Puntos(iActual, CMOTOR_EJEX) < dAntesX Then
iDirX = CDIR_DERECHA
ElseIf Puntos(iActual, CMOTOR_EJEX) > dAntesX Then
iDirX = CDIR_IZQUIERDA
Else
132
bMueveX = False
End If
dAntesX = Puntos(iActual, CMOTOR_EJEX)
'Calculos en Y
bMueveY = True
iPasosY = CalcularPasos(Abs(Puntos(iActual, CMOTOR_EJEY) - dAntesY),
CMOTOR_EJEY)
If Puntos(iActual, CMOTOR_EJEY) < dAntesY Then
iDirY = CDIR_DERECHA
ElseIf Puntos(iActual, CMOTOR_EJEY) > dAntesY Then
iDirY = CDIR_IZQUIERDA
Else
bMueveY = False
End If
dAntesY = Puntos(iActual, CMOTOR_EJEY)
TmrMotores.Enabled = True
End Sub
bPanico = False
MoverseFinal
End Sub
bPanico = False
MoverseOrigen
Exit Sub
End Sub
End Sub
Dim s As String
s = MSComm.Input
sCadena = sCadena & s
End Sub
End Sub
'Siguiente punto
If Not bMueveX And Not bMueveY Then
BajarTaladro
iActual = iActual + 1
If iActual <= TotalPuntos Then
'Calculos en X
bMueveX = True
iPasosX = CalcularPasos(Abs(Puntos(iActual, CMOTOR_EJEX) -
dAntesX), CMOTOR_EJEX)
If Puntos(iActual, CMOTOR_EJEX) < dAntesX Then
iDirX = CDIR_DERECHA
ElseIf Puntos(iActual, CMOTOR_EJEX) > dAntesX Then
iDirX = CDIR_IZQUIERDA
Else
bMueveX = False
End If
dAntesX = Puntos(iActual, CMOTOR_EJEX)
'Calculos en Y
bMueveY = True
135
iPasosY = CalcularPasos(Abs(Puntos(iActual, CMOTOR_EJEY) -
dAntesY), CMOTOR_EJEY)
If Puntos(iActual, CMOTOR_EJEY) < dAntesY Then
iDirY = CDIR_DERECHA
ElseIf Puntos(iActual, CMOTOR_EJEY) > dAntesY Then
iDirY = CDIR_IZQUIERDA
Else
bMueveY = False
End If
dAntesY = Puntos(iActual, CMOTOR_EJEY)
Else
CerrarPuertoLPT
TmrMotores.Enabled = False
MsgBox "Proceso Finalizado !!", vbInformation
End If
End If
If bPanico Then
CerrarPuertoLPT
TmrMotores.Enabled = False
End If
End Sub
'Revisar x
If bMueveX Then
iContX = iContX - 1
If iContX = 0 Then
iContX = velocidad(CMOTOR_EJEX)
If sensoresInicio(CSENSOR_X) = 0 And Not bPanico Then
MoverX 1, CDIR_DERECHA
Else
bMueveX = False
End If
End If
End If
'Revisar y
If bMueveY Then
iContY = iContY - 1
If iContY = 0 Then
iContY = velocidad(CMOTOR_EJEY)
If sensoresInicio(CSENSOR_Y) = 0 And Not bPanico Then
MoverY 1, CDIR_DERECHA
Else
136
bMueveY = False
End If
End If
End If
End Sub
Dim s As String
End Sub
'Subir Z
While sensoresInicio(CSENSOR_Z) = 0 And Not bPanico
MoverZ 1, CDIR_DERECHA
Sleep velocidad(CMOTOR_EJEZ)
DoEvents
Wend
CerrarPuertoLPT
'Mover Y
While sensoresInicio(CSENSOR_Y) = 0 And Not bPanico
MoverY 1, CDIR_DERECHA
Sleep velocidad(CMOTOR_EJEY)
DoEvents
Wend
CerrarPuertoLPT
'Mover X
While sensoresInicio(CSENSOR_X) = 0 And Not bPanico
MoverX 1, CDIR_DERECHA
Sleep velocidad(CMOTOR_EJEX)
DoEvents
Wend
CerrarPuertoLPT
End Sub
'Subir Z
While sensoresInicio(CSENSOR_Z) = 0 And Not bPanico
138
MoverZ 1, CDIR_DERECHA
Sleep velocidad(CMOTOR_EJEZ)
DoEvents
Wend
CerrarPuertoLPT
'Mover Y
While sensoresFinal(CSENSOR_Y) = 0 And Not bPanico
MoverY 1, CDIR_IZQUIERDA
Sleep velocidad(CMOTOR_EJEY)
DoEvents
Wend
CerrarPuertoLPT
'Mover X
While sensoresFinal(CSENSOR_X) = 0 And Not bPanico
MoverX 1, CDIR_IZQUIERDA
Sleep velocidad(CMOTOR_EJEX)
DoEvents
Wend
CerrarPuertoLPT
End Sub
'Bajar Z
While sensoresFinal(CSENSOR_Z) = 0 And Not bPanico
MoverZ 1, CDIR_IZQUIERDA
Sleep velocidad(CMOTOR_EJEZ)
DoEvents
Wend
CerrarPuertoLPT
'Subir Z
While sensoresInicio(CSENSOR_Z) = 0 And Not bPanico
MoverZ 1, CDIR_DERECHA
Sleep velocidad(CMOTOR_EJEZ)
DoEvents
Wend
CerrarPuertoLPT
End Sub
139
ANEXO F
Unload Me
End Sub
Dim i, b As Integer
i = Val(TxtPasos.Text)
If i < 1 Then
MsgBox "Escriba el número de pasos", vbInformation, "CALIBRACIÓN"
Exit Sub
End If
b = tipopaso(iMotor)
If Option1.Value Then
tipopaso(iMotor) = 1
Else
tipopaso(iMotor) = 2
End If
While i > 0
Select Case iMotor
Case CMOTOR_EJEX: MoverX 1, CDIR_IZQUIERDA
Case CMOTOR_EJEY: MoverY 1, CDIR_IZQUIERDA
Case CMOTOR_EJEZ: MoverZ 1, CDIR_IZQUIERDA
End Select
Sleep VScroll1.Value
i=i-1
DoEvents
Wend
tipopaso(iMotor) = b
CerrarPuertoLPT
MsgBox "Proceso Finalizado !!!", vbInformation, "Calibración"
140
End Sub
Dim i, b As Integer
i = Val(TxtPasos.Text)
If i < 1 Then
MsgBox "Escriba el número de pasos", vbInformation, "CALIBRACIÓN"
Exit Sub
End If
b = tipopaso(iMotor)
If Option1.Value Then
tipopaso(iMotor) = 1
Else
tipopaso(iMotor) = 2
End If
While i > 0
Select Case iMotor
Case CMOTOR_EJEX: MoverX 1, CDIR_DERECHA
Case CMOTOR_EJEY: MoverY 1, CDIR_DERECHA
Case CMOTOR_EJEZ: MoverZ 1, CDIR_DERECHA
End Select
Sleep VScroll1.Value
i=i-1
DoEvents
Wend
tipopaso(iMotor) = b
CerrarPuertoLPT
MsgBox "Proceso Finalizado !!!", vbInformation, "Calibración"
End Sub
VScroll1.Value = 1
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
141
End Sub
End Sub
142
ANEXO G
End Sub
Unload Me
End Sub
errLoad:
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
Text1.Text = "1"
Text2.Text = "100"
Option1.Value = True
End Sub
144
ANEXO H
iPuertoCOM = VScroll.Value
Open App.Path & "\puertocom.dat" For Output As #1
Write #1, Text.Text
Close #1
Unload Me
End Sub
Unload Me
End Sub
Dim s As String
End Sub
Text.Text = Str(VScroll.Value)
End Sub
145
ANEXO I
End Sub
Unload Me
End Sub
Dim s As String
errLoad:
VScroll.Value = 1
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
End Sub
146
Private Sub VScroll_Change()
End Sub
147
ANEXO J
//#include <18F452.h>
#include <16F887.h>
#include <16F886.h>
#device adc=10
#define ARRIBA 1
#define ABAJO 0
int bcd_to_int(int);
void leer_rtc();
void configurar();
void iniciar_rtc();
void mostrar_hora();
148
void check_sw();
void pintar_flecha(void);
void cuenta_regresiva(void);
void mostrar_seleccion(void);
// INTERRUPCIONES
#int_TIMER1
TIMER1_isr()
{
return(0);
}//
// SUB-RUTINAS
int bcd_to_int(int x){
//===========================================================
==================
//Convierte los valores BDC del DS1307 a valores enteros
//===========================================================
==================
int y, y1=0, y2=0, cont=1;
//--------------Nibble unidades
for(i=0;i<4;i++)
{
if(bit_test(x,i)){y1 = y1+(cont);}cont=cont*2;
}
//--------------Nibble decenas
cont=1;
for(i=4;i<8;i++)
{
if(bit_test(x,i)){y2 = y2+(cont);}cont=cont*2;
}
y=(y2*10)+y1;
return(y);
}//
int int_to_bcd(int x){
int dato_bcd;
dato_bcd=((x/10)<<4)+(x%10);
return(dato_bcd);
}//
void leer_rtc(){
//===========================================================
==================
//Lee los valores desde el DS1307
//===========================================================
==================
i2c_start();
i2c_write(0xd0);
i2c_write(0);
149
i2c_start();
i2c_write(0xd1);
ss = i2c_read();
mm= i2c_read(0);
i2c_stop();
delay_ms(10);
}//
void configurar(){
//===========================================================
==================
// Establece las opciones iniciales del micro
//===========================================================
==================
port_b_pullups(TRUE);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_32);
//setup_psp(PSP_DISABLED);
// setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
//setup_timer_2(T2_DIV_BY_16,255,1);
// setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_ccp2(CCP_OFF);
setup_timer_2(T2_DIV_BY_16,255,4);
//setup_ccp1(CCP_PWM);
//setup_ccp2(CCP_PWM);
lcd_init();
//enable_interrupts(INT_TIMER1);
//enable_interrupts(GLOBAL);
//setup_oscillator(False);
}//
void iniciar_rtc(){
//===========================================================
==================
// Configura el DS1307 y establece la hora en 12:00 horas formato 24h
//===========================================================
==================
i2c_start(); // Condicion de inicio
i2c_write(0xd0); // Direcion del DS1307
i2c_write(0); // Direccion inicial de escritura
i2c_write(0b00000000); // Segundos
i2c_write(0b00000000); // Minutos
i2c_write(0b00000000); // Horas (Bit6, 0=24h 1=12h)
i2c_write(0b00000000); // Dia de la semana
i2c_write(0b00000001); // Dia del mes
i2c_write(0b00000001); // Mes
150
i2c_write(0b00000001); // Year
i2c_write(0b10010000); // Control
i2c_stop(); // Condicion de parada
}//
void mostrar_cuenta(){
lcd_gotoxy(1,1); lcd_putc("Tiempo Restante");
lcd_gotoxy(1,2); printf(lcd_putc, "%2u",minutos);
lcd_gotoxy(3,2); lcd_putc("min.");
lcd_gotoxy(8,2); printf(lcd_putc, "%2u",segs);
lcd_gotoxy(10,2); lcd_putc("seg..");
}//
void check_sw(){
//===========================================================
==================
// Establece valores a la variable global selector, para seleccionar en que
// rutina de incubacion actua
//===========================================================
==================
if(!input(up)){
}//
if(!input(down)){
}//
if(!input(ent)){
}//
if(!input(esc)){
}//
}//
void mostrar_seleccion(void){
lcd_putc("\f AJUSTAR TIEMPO");
lcd_gotoxy(1,2); printf(lcd_putc, "%2u min %2u seg",minutos,segundos);
}//
void cuenta_regresiva(void){
segs=segundos-ss;
if(segs==255){
segs=59;
minutos--;
if (minutos==255){
151
lcd_putc("\f INSOLADO \nCOMPLETADO");
delay_ms(1500);
reset_cpu();
}
}
//-------------------------------------------------------------------------
}//
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// MAIN
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void main()
{
PRINCIPAL:
configurar();
iniciar_rtc();
lcd_putc("\f INSOLADORA V1.0 ");
lcd_gotoxy(1,2); lcd_putc(" U.S.B. ");
delay_ms(2000);
minutos=0;segundos=0;
while(TRUE){
INICIO:
if(!input(ent)){
while(!input(ent));
lcd_putc("\f AJUSTAR TIEMPO");
lcd_gotoxy(1,2); printf(lcd_putc, "%2u min %2u
seg",minutos,segundos);
lcd_gotoxy(2,2);lcd_send_byte(0,0X0F);//titileo cursor
bandera=0;
AJUSTE_HORA:
{
delay_ms(250);
switch(bandera){
case 0:{
if (!input(up)){
minutos++;
mostrar_seleccion();
if(minutos>59)minutos=0;
lcd_gotoxy(2,2);lcd_send_byte(0,0X0F);
}
if (!input(down)){
minutos--;
if(minutos==255)minutos=59;
152
mostrar_seleccion();
lcd_gotoxy(2,2);lcd_send_byte(0,0X0F);
}
if (!input(ent)){
delay_ms(250);
bandera++;
lcd_gotoxy(8,2);
lcd_send_byte(0,0X0F);
}
if (!input(esc)){
delay_ms(250);
goto INICIO;
}
break;
}//End Case0
//*******************
case 1:{
if (!input(up)){
segundos++;
if(segundos>59)segundos=0;
mostrar_seleccion();
lcd_gotoxy(9,2);lcd_send_byte(0,0X0F);
}
if (!input(down)){
segundos--;
if(segundos==255)segundos=59;
mostrar_seleccion();
lcd_gotoxy(9,2);lcd_send_byte(0,0X0F);
}
if (!input(ent)){
delay_ms(250);
bandera=0;
lcd_gotoxy(1,1);
lcd_send_byte(0,0X0C);
iniciar_rtc();
setup_ccp2(CCP_PWM);
goto CUENTA;
}
if (!input(esc)){
delay_ms(250);
goto INICIO;
}
break;
153
}//End Case1
//*******************
}//
goto AJUSTE_HORA;
}//
//*************************************************************
CUENTA:{
leer_rtc();
cuenta_regresiva();
mostrar_cuenta();
}
goto CUENTA;
}
}//
}//
154
ANEXO K
///////////////////////////////////////////////////////////////////////////
//// LCDD.C ////
//// Driver for common LCD modules ////
//// ////
//// lcd_init() Must be called before any other function. ////
//// ////
//// lcd_putcI Will display c on the next position of the LCD. ////
//// The following have special meaning: ////
//// \f Clear display ////
//// \n Go to start of second line ////
//// \b Move back one position ////
//// ////
//// lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1) ////
//// ////
//// lcd_getc(x,y) Returns character at position x,y on LCD ////
//// ////
///////////////////////////////////////////////////////////////////////////
//// I Copyright 1996,2003 Custom Computer Services ////
//// This source code may only be used by licensed users of the CCS C ////
//// compiler. This source code may only be distributed to other ////
//// licensed users of the CCS C compiler. No other use, reproduction ////
//// or distribution is permitted without written permission. ////
//// Derivative programs created using this software in object code ////
//// form are not restricted in any way. ////
///////////////////////////////////////////////////////////////////////////
155
// Un-comment the following define to use port B
// #define use_portb_lcd TRUE
Struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins
are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins
are in
BYTE lcd_read_byte() {
BYTE low,high;
set_tris_lcd(LCD_READ);
156
lcd.rw = 1;
delay_cycles(4);
lcd.enable = 1;
delay_cycles(4);
high = lcd.data;
lcd.enable = 0;
delay_cycles(4);
lcd.enable = 1;
delay_us(1);
low = lcd.data;
lcd.enable = 0;
set_tris_lcd(LCD_WRITE);
return( (high<<4) | low);
}
lcd.rs = 0;
while ( bit_test(lcd_read_byte(),7) ) ;
lcd.rs = address;
delay_cycles(4);
lcd.rw = 0;
delay_cycles(4);
lcd.enable = 0;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
void lcd_init() {
BYTE I;
set_tris_lcd(LCD_WRITE);
lcd.rs = 0;
lcd.rw = 0;
lcd.enable = 0;
delay_ms(15);
157
for(i=1;i<=3;++i) {
lcd_send_nibble(3);
delay_ms(5);
}
lcd_send_nibble(2);
for(i=0;i<=3;++i)
lcd_send_byte(0,LCD_INIT_STRING[i]);
}
if(y!=1)
address=lcd_line_two;
else
address=0;
address+=x-1;
lcd_send_byte(0,0x80|address);
}
lcd_gotoxy(x,y);
while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low
lcd.rs=1;
value = lcd_read_byte();
lcd.rs=0;
return(value);
}
158
ANEXO L
159
160
161
162
163
164
ANEXO M
Datasheet TIP122
165
166
ANEXO Ñ
Datasheet TIP3055
167
168
ANEXO O
Datasheet 4N33
169
170
ANEXO P
Datasheet MAX232
171
172
173
174
175
ANEXO Q
Datasheet PIC16F628A
176
177
178
ANEXO R
Datasheet PIC16F886A
179
180
181
182
ANEXO S
Datasheet DS1307
183
184
185