Beruflich Dokumente
Kultur Dokumente
Universidad de la Repu
Facultad de Ingeniera
Plataforma de posicionamiento
modular para impresion 3D, fresado y
otras aplicaciones
Memoria de proyecto presentada a la Facultad de
blica por
Ingeniera de la Universidad de la Repu
Tutor
Gabriel Eirea . . . . . . . . . . . . . . . . . . . . . . . . . Universidad de la Rep
ublica
Rafael Canetti . . . . . . . . . . . . . . . . . . . . . . . . Universidad de la Rep
ublica
Tribunal
Gabriel Eirea . . . . . . . . . . . . . . . . . . . . . . . . . Universidad
Rafael Canetti . . . . . . . . . . . . . . . . . . . . . . . . Universidad
Alvaro
Gomez . . . . . . . . . . . . . . . . . . . . . . . . Universidad
Julian Oreggioni . . . . . . . . . . . . . . . . . . . . . . Universidad
Montevideo
jueves 14 mayo, 2015
de
de
de
de
la
la
la
la
Rep
ublica
Rep
ublica
Rep
ublica
Rep
ublica
Agradecimientos
Nuestro principal agradecimiento es a nuestras familias, novias y amigos que
nos apoyaron a lo largo del todo el proyecto.
Tambien queremos darles las gracias a los funcionarios del instituto que nos
ayudaron, principalmente a Sergio (Sergio Beheregaray) y Tito (Roberto Rodrguez)
por la gran ayuda brindada con el trabajo en el taller.
Por u
ltimo agradecer a Jose Basualdo por el trabajo hecho en el proyecto de
SISEM, a Celmar Moreira por los trabajos de tornera y a Carlos Briozzo por ser
un apoyo moral en todo momento.
Esta p
agina ha sido intencionalmente dejada en blanco.
Resumen
El presente proyecto trata sobre el dise
no, implementacion y testeo de una
plataforma posicionadora de coordenadas cartesianas que pueda cumplir funciones
de impresi
on 3D y fresado. Las tematicas involucradas en el mismo involucran
conocimientos de mec
anica, electronica y software.
En particular, se realiz
o el dise
no y montaje de la estructura del posicionador
y se seleccionaron los actuadores mecanicos. Se eligio el hardware necesario y se dise
naron e implementaron aquellos circuitos necesarios para completar el diagrama
de la soluci
on general a nivel fsico.
A nivel de software, se dise
no y programo una arquitectura de software para obtener un firmware para controlar el prototipo y ademas se resolvio la comunicacion
con el usuario.
Como adelanto de los resultados, se puede mencionar que se logro cumplir con
las especificaciones de performance, en el posicionamiento, control de temperatura y volumen de trabajo.
Se realizaron simulaciones de impresion donde se verifico que la geometra del
modelo resultante se corresponda con la del modelo esperado.
Posteriormente, en cuanto a las aplicaciones del posicionador: se realizaron
tareas de calibraci
on e impresion. Se comprobo una correspondencia entre el patron
obtenido en la impresi
on del modelo de un cubo, con el resultado de una simulacion
previa del mismo. No se alcanzaron a realizar pruebas sobre la funcion de fresado.
Las lecciones aprendidas a la fecha han enriquecido a los integrantes del equipo
en el conocimiento en varias areas, como tambien en el actuar en grupo sorteando
constantemente distintas dificultades surgidas; con lo que se espera que los alumnos
encargados de realizar este proyecto se desempe
nen muy bien como profesionales.
Esta p
agina ha sido intencionalmente dejada en blanco.
Tabla de contenidos
Agradecimientos
Resumen
III
1. Introducci
on
1.1. Descripci
on del proyecto . . . . . . . . . . . . .
1.1.1. Motivaci
on . . . . . . . . . . . . . . . .
1.1.2. Objetivo general . . . . . . . . . . . . .
1.1.3. Definici
on del problema y antecedentes .
1.1.4. Objetivos especficos . . . . . . . . . . .
1.1.5. Alcance . . . . . . . . . . . . . . . . . .
1.1.6. Criterios de exito . . . . . . . . . . . . .
1.2. Estructura del Documento . . . . . . . . . . . .
.
.
.
.
.
.
.
.
1
1
1
1
2
2
2
3
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
9
10
12
14
15
15
17
17
18
19
19
22
24
3. Visi
on General del Proyecto
3.1. Descripci
on de la solucion . . . . . . . . . . . . . . . . . . . . . . .
27
27
2. Antecedentes
2.1. Introducci
on . . . . . . . . . . . . . . . . . . .
2.2. Tecnologas de posicionadores . . . . . . . . .
2.3. Tecnologas de impresion . . . . . . . . . . . .
2.4. Extrusores de impresion 3D . . . . . . . . . .
2.5. Materiales de construccion . . . . . . . . . . .
2.6. Esc
aneres 3D . . . . . . . . . . . . . . . . . .
2.7. Motores paso a paso (PAP) . . . . . . . . . .
2.7.1. Principio basico de funcionamiento . .
2.7.2. Modos de operacion . . . . . . . . . .
2.7.3. Par
ametros de los motores paso a paso
2.7.4. Ventajas y desventaja de motores paso
2.8. Software . . . . . . . . . . . . . . . . . . . . .
2.8.1. C
odigo de maquina . . . . . . . . . . .
2.8.2. Generadores de G-code y firmware . .
2.9. Electr
onica . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
a
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
paso
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tabla de contenidos
4. Mec
anica
4.1. Introducci
on . . . . . . . .
4.2. Criterios de dise
no . . . .
4.3. Dimensionado . . . . . . .
4.4. Extrusor de impresi
on 3D
4.5. Armado de un eje . . . . .
4.6. Interconexi
on entre ejes .
4.7. Problemas . . . . . . . . .
4.8. Conclusiones . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
31
34
36
38
43
44
45
5. Electr
onica
5.1. Introducci
on . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Controlador de los motores paso a paso . . . . . . . . . .
5.2.1. Introducci
on . . . . . . . . . . . . . . . . . . . . .
5.2.2. Descripci
on de los integrados . . . . . . . . . . . .
5.2.3. Funcionamiento general del driver de motores PAP
5.3. Interfaz con el usuario . . . . . . . . . . . . . . . . . . . .
5.3.1. Elecci
on de los elementos que componen la interfaz
5.4. Heated Bed Platform . . . . . . . . . . . . . . . . . . . . .
5.4.1. Condiciones de uso . . . . . . . . . . . . . . . . . .
5.4.2. Como se implementa . . . . . . . . . . . . . . . . .
5.4.3. An
alisis de funcionamiento . . . . . . . . . . . . .
5.4.4. Primer prototipo . . . . . . . . . . . . . . . . . . .
5.4.5. Dise
no heated bed . . . . . . . . . . . . . . . . . . .
5.5. Comentarios generales . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
47
47
50
50
50
57
71
72
73
73
73
76
76
76
77
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6. Software
6.1. Arquitectura general y descripcion . . . . . . . . . . . . . . . . . .
6.2. Raspberry Pi: Configuraci
on red inalambrica y comunicacion con
Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1. Comunicaci
on inal
ambrica . . . . . . . . . . . . . . . . . . .
6.3. Comunicaci
on Computador-Microcontrolador . . . . . . . . . . . .
6.3.1. Descripci
on general . . . . . . . . . . . . . . . . . . . . . . .
6.3.2. Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.3. Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.4. Robustez de la comunicacion . . . . . . . . . . . . . . . . .
6.4. Software para microcontrolador Arduino . . . . . . . . . . . . . . .
6.4.1. Control de bajo nivel de los motores PAP . . . . . . . . . .
6.4.2. Control de temperatura . . . . . . . . . . . . . . . . . . . .
6.4.3. Interprete de comandos . . . . . . . . . . . . . . . . . . . .
6.4.4. Ejecutador . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4.5. Interfaz con el usuario . . . . . . . . . . . . . . . . . . . . .
6.5. Simulador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.1. Descripci
on . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5.2. Funcionamiento l
ogico . . . . . . . . . . . . . . . . . . . . .
vi
79
79
81
81
84
84
85
86
87
87
87
106
108
112
121
125
125
126
Tabla de contenidos
7. Testeos y medidas
7.1. Introducci
on . . . . . . . . . . . . . . . . . .
7.2. Posicionador XYZ . . . . . . . . . . . . . .
7.2.1. Experimento de deteccion de perdida
7.2.2. Experimento de deteccion de perdida
7.2.3. Cuantificacion de la repetibilidad: .
7.3. Control de la temperatura . . . . . . . . . .
7.3.1. Heated Bed Platform . . . . . . . .
7.3.2. Extrusor . . . . . . . . . . . . . . . .
7.4. Simulaci
on Software e Impresion . . . . . .
7.4.1. Descripci
on . . . . . . . . . . . . . .
7.4.2. Resultados e interpretacion . . . . .
. . . . . . .
. . . . . . .
de Pasos 1
de pasos 2
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
129
129
129
129
131
131
146
146
147
152
152
153
163
163
B. Selecci
on de los motores paso a paso
B.1. Descripci
on del sistema . . . . . . . . . . . . . . . . . . . . . . . .
B.2. C
alculos te
oricos referentes a la seleccion del motor . . . . . . . . .
B.3. Resultados de la seleccion de los motores . . . . . . . . . . . . . . .
243
243
244
250
C. Gesti
on de tiempos
253
C.1. Cambios en la planificacion . . . . . . . . . . . . . . . . . . . . . . 253
C.2. Dedicaci
on mensual . . . . . . . . . . . . . . . . . . . . . . . . . . 254
D. Gesti
on de gastos
255
D.1. Distintos gastos previstos e imprevistos . . . . . . . . . . . . . . . 255
E. Manuales
E.1. Manual de uso y mantenimiento . . . . .
E.1.1. Impresi
on 3D . . . . . . . . . . . .
E.1.2. Movimiento Manual . . . . . . . .
E.1.3. Calibraci
on . . . . . . . . . . . . .
E.1.4. Mantenimiento . . . . . . . . . . .
E.2. Manual de construccion . . . . . . . . . .
E.2.1. Introducci
on . . . . . . . . . . . .
E.2.2. Piezas necesarias . . . . . . . . . .
E.2.3. Armado de un eje generico . . . .
E.2.4. Diferencias entre los distintos ejes
E.2.5. Interconexion . . . . . . . . . . . .
E.2.6. Cabezal de impresion . . . . . . .
E.2.7. Tensor . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
257
257
257
266
267
269
270
270
270
273
276
278
279
279
vii
Tabla de contenidos
E.3. Armado de driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Referencias
283
Glosario
289
Indice de tablas
290
Indice de figuras
292
Contenido del CD
294
Indice de temas
296
viii
Captulo 1
Introduccion
1.1. Descripcion del proyecto
1.1.1. Motivacion
El interes del grupo en realizar este proyecto surge con la gran tendencia que
hoy se est
a viviendo en el mundo en torno a la tecnologa de impresion 3D y el
uso que tienen los routers CNC en la industria. En el caso de las impresoras 3D,
se consideran como objetos que se podran encontrar en cualquier hogar en un
futuro cercano; estamos presenciando el auge de las impresoras 3D en el mundo y
es por eso que cada vez surgen mas y mas modelos. En el inicio de este proyecto no
existan m
aquinas que combinaran impresoras 3D y routers CNC, resultando en un
u
nico dispositivo capaz de realizar ambas tareas. Hoy en d`a se pueden encontrar
algunos ejemplos en internet, lo que demuestra el interes que existe en desarrollar
estas tecnologas.
Creemos que Uruguay no puede estar excluido de esto, por lo que incentivar
el desarrollo de estas tecnologas en la industria nacional es vital. Por lo tanto,
como se introdujo anteriormente, este proyecto busca resolver esa problematica de
integraci
on, implementando un prototipo con fines educativos que sirva de base.
Una vez all, la misma podra usarse para fabricar repuestos diversos, como un
pestillo, tapas, ganchos para pared, incluso llaves, ademas de modelos a escala de
cualquier objeto del cual se posea un modelo 3D.
A nivel m
as profesional, se podra usar la fresa para hacer el ruteo de un circuito
impreso, e incluso hay una clara incursion en el campo de la medicina [1], como
por ejemplo el posible uso de la impresion 3D para crear protesis. Cabe resaltar
que los usos mencionados son solo una muestra del gran potencial que encierran
estas tecnologas.
Captulo 1. Introduccion
1.1.5. Alcance
Se dise
nar
a y construir
a la mec
anica del posicionador XYZ.
Se construir
a el hardware necesario para el escaner 3D, mas no as el software
para procesar las im
agenes obtenidas.
Se evaluar
a la posibilidad de comprar algunos de los elementos que componen
la electr
onica del proyecto.
Se estudiar
a el c
odigo que ejecutara el sistema de control, de origen Open
Source, y se modificar
a a nuestro criterio.
Se evaluar
a la posibilidad de comprar los cabezales, tanto de impresion como
de fresado.
2
Captulo 1. Introduccion
En el septimo captulo se describen las pruebas realizadas y los diferentes
resultados obtenidos. Se hacen comparaciones con los criterios de exito.
Finalmente, en el captulo octavo, se resumen todas las conclusiones obtenidas
a lo largo del presente proyecto y puntos a atacar en trabajos futuros.
Captulo 2
Antecedentes
2.1. Introduccion
El presente proyecto enfoca su objetivo hacia un prototipo de una maquina
que permita desarrollar varias tareas en el mismo espacio, es decir, brindar la
posibilidad de tener una maquina multifuncion que realice trabajos en 3D.
El mercado en esta
area no presenta una maquina que permita la multifuncionalidad, debido a esto es que para poder dar informacion sobre cada modulo
funcional se comenzar
a con la familiarizacion tomando como tema la impresion
3D, para luego completar con aspectos referentes a las fresadoras (mas conocidas
en el
area por control numerico computarizado, CNC por sus siglas en ingles) y a
los esc
aners 3D.
Las impresoras 3D se presentan como una reciente innovacion. La evolucion en
el tiempo de esta tecnologa se puede apreciar en las Figuras 2.1 y 2.2, que en la
actualidad debido a su alto costo economico es accesible casi exclusivamente para
un p
ublico que se profesionalice en el area.
Captulo 2. Antecedentes
Figura 2.1: Historia de las impresoras 3D, primera parte. Imagen modificada de [3].
Figura 2.2: Historia de las impresoras 3D, segunda parte. Imagen modificada de [3].
Captulo 2. Antecedentes
Captulo 2. Antecedentes
Figura 2.7: Esquema de un cabezal de impresion 3D por deposicion fundida. Imagen extrada
de [9]
Captulo 2. Antecedentes
Figura 2.8: Estructura de impresora 3D que usa partes impresas y guas de acero pulido. Imagen
extrada de [10]
(a) Estructuras de fresado- (b) Estructuras de fresado- (c) Estructura de impresora en aluminio. Imagen ex- ra en aluminio. Imagen ex- ra en aluminio. Imagen extrada de [13]
trada de [14]
trada de [15]
Para impresoras 3D es conveniente usar los materiales presentados antes, pero para fresadoras o cuando el volumen de trabajo es
mayor s es una buena opcion el uso de aluminio. Es un material mas fuerte y robusto que los anteriores, tambien tiene una relacion favorable entre peso, precio y
fortaleza. Esto combinado a que da una estetica positiva a la maquina construida.
Otra ventaja es la gran variedad de perfiles de aluminio existentes que facilitan el
dise
no y posterior armado de la estructura. Las Figuras 2.11 muestran plataformas construidas con este material; pueden verse tanto para impresoras como para
fresadoras.
Como se ha podido ver en el analisis complementado con las imagenes, el dise
no
de la estructura de una impresora 3D y de una fresadora pueden verse similares, lo
que cambia son los materiales, que dependeran de la robustez que se le necesite dar
a cada m
aquina. Toda la etapa estructural se basa en el dise
no de una plataforma
consistente en un posicionador XYZ cuyos materiales son las variables entre la
impresora y la fresa.
13
Captulo 2. Antecedentes
2.6. Escaneres 3D
Vale la pena mencionar las distintas tecnologas usadas en la parte de hardware
de un escaner 3D. Es un
area en la cual se estan buscando alternativas, es decir,
se esta en una etapa de investigaci
on que se supone en poco tiempo abrira un gran
abanico de estrategias de dise
no. En la actualidad, casi la totalidad de los escaneres
se basan en la adquisici
on de im
agenes del perfil del objeto a escanear. Esto se logra
con la utilizaci
on de dos o m
as c
amaras de registro, un laser que ilumine al objeto
y un sistema de movimiento rotacional. De esta forma el objeto se hace girar, el
laser va iluminando de forma tal de ir remarcando el perfil del objeto instante a
instante, luego el registro de esto es adquirido por las camaras. Despues esta la
etapa de software que utiliza esta informacion para llegar al resultado final del
escaneo. Un ejemplo del sistema descrito, puede verse en la Figura 2.12.
14
Captulo 2. Antecedentes
Figura 2.14: Esquema de motores PAP (unipolares y bipolares). Imagen extrada de [18]
Figura 2.15: Principio de funcionamiento de un motor paso a paso. Imagen extrada de [19]
16
Captulo 2. Antecedentes
Par de detenci
on: Es un par de freno, producto de la accion del rotor cuando
se desenergizan las bobinas.
Angulo
de paso: Es la resoluci
on del movimiento angular.
N
umero de pasos por vuelta: Se define como la cantidad de pasos para completar un giro de 360 grados.
Frecuencia m
axima de pasos: Es la maxima cantidad de pasos que un motor
puede realizar en un segundo.
2.8. Software
Figura 2.17: Unas de las primeras maquinas de control numerico. Imagen extrada de [22].
2.8. Software
2.8.1. Codigo de maquina
El resultado obtenido con el uso de una maquina de control numerico computarizado (CNC), es la traduccion entendible por la maquina de un lenguaje llamado
c
odigo de maquina o lenguaje G-code, el cual representa el dise
no del usuario. El
presente lenguaje forma la base de la comunicacion con las maquinas CNC.
El control numerico en maquinas industriales data de la decada de 1950 [21].
En la Figura 2.17 puede apreciarse una ma
quina de esta epoca, la cual se programo
en base a tarjetas perforadas.
La invenci
on propiamente dicha del lenguaje surge alrededor del a
no 1958 en
el laboratorio de servomecanismos del MIT. En los a
nos 60 llego la estandarizacion
del lenguaje por la EIA (Electronic Industries Alliance). La version final de esta
fue aprobada en 1980 para el uso en EEUU, denominada RS274D [21].
Dicho est
andar que trabajaba con tarjetas perforadas, fue reemplazado por el
uso de computadoras y caracteres ASCII. En el a
no 2000, el NIST ( The National
Institute of Standards and Technology) lanzo un proyecto con el objetivo de crear
el sistema de control de una maquina CNC de codigo abierto. No coincidentemente
la estandarizaci
on NIST RS274N GC es la mas conocida en la actualidad para el
19
Captulo 2. Antecedentes
desarrollo propio de este tipo de m
aquinas. En particular, los firmwares presentados por la comunidad Reprap se encuentran basados en la estandarizacion recien
mencionada.
El lenguaje G-code est
a basado en un sistema de coordenadas cartesiano de
tres dimensiones. El c
odigo est
a formado por lneas de caracteres que poseen un
determinado formato, el cual se describira en breve. El codigo le informa a la
maquina a d
onde debe mover la herramienta (cabezal) y el trabajo a realizar en
cada punto que recorre.
Los datos referidos al movimiento en tres dimensiones pueden estar organizados tanto en un sistema absoluto como relativo. Las coordenadas absolutas estan
referidas al punto (0, 0, 0), siendo este un origen de coordenadas determinado, y en
coordenadas relativas (incremental) se miden las distancias desde el punto anterior.
Los G-codes est
an escritos en lneas de codigo que poseen un formato de maquina especfico. Originalmente y en su forma mas general, el codigo es escrito como
N (n
umero de una secuencia, 001 - 100+), G (funciones preparatorias), eje X, eje
Y , eje Z, F (velocidad de avance) y M (funciones variadas).
Las funciones de preparaci
on (G) son comandos de configuracion, las cuales
deben informar a la m
aquina antes de comenzar a trabajar. Por ejemplo, dan aviso
de si los valores de los par
ametros est
an en milmetros o pulgadas, y si se trabaja en
un sistema absoluto o en relativo. F indica la velocidad en milmetros o pulgadas
por minuto. Las funciones variadas (M ) dan las ordenes de encendido y apagado,
tanto del trabajo de la m
aquina como de dispositivos auxiliares (ventiladores y
partes calientes), entro otras acciones.
A continuaci
on se presentan una serie de instrucciones de este codigo en su
forma general a modo de ejemplo:
N000 M04
N001 G01
N002 G90 X3.73 Z2.5 F1
..
.
N056 X0 Z375 F6
N057 M02
Como se mencion
o existe un est
andar para maquinas CNC que tambien es
base para impresoras 3D y es en este que se basan los firmware que se sugieren
en la comunidad de Reprap (NIST RS274N GC). A continuacion se presenta una
parte de codigo de m
aquina generado por un programa cuya base es el mencionado
estandar, en los ; comienzan comentarios presentes en el codigo que sirven para
conocer el objetivo de cada instrucci
on y que no son interpretados por la maquina:
M140 S70.000000
M109 T0 S220.000000
M190 S70.000000
M190 S70 ;Uncomment to add your own bed temperature line
M109 S220 ;Uncomment to add your own temperature line
G21 ;metric values
G90 ;absolute positioning
20
2.8. Software
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F9000
;Put printing message on LCD screen
M117 Printing...
M107
G0 F3600 X139.48 Y141.20 Z0.30
;TYPE:SKIRT
G1 F2400 E0.00000
G1 F1200 X140.25 Y140.59 E0.01396
G1 X141.11 Y140.15 E0.02763
G1 X142.01 Y139.89 E0.04079
G1 X142.71 Y139.83 E0.05073
G1 X143.26 Y139.82 E0.05841
G1 X143.59 Y139.82 E0.06315
G1 X143.64 Y139.82 E0.06377
G1 X144.39 Y139.82 E0.07444
G1 X144.78 Y139.82 E0.07984
G1 X145.10 Y139.82 E0.08445
.................
En el extracto anterior, que corresponde al de un modelo a imprimir en 3D, se
aprecian una serie de G-codes y M-codes que realizan las configuraciones iniciales:
metrica a usar, sistema de coordenadas, configuracion de setpoints para las temperaturas del extrusor y cama caliente, llevar el puntero al origen de coordenadas.
Luego comienzan una serie de comandos para indicar las posiciones a las que
tiene que moverse el extrusor mientras extruye. Estas lneas pueden ser varios
miles, dependiendo del objeto a crear y de las caractersticas que se configuren en
el programa generador de G-code (Seccion 2.8.2) y terminan cuando se ejecuten
las lneas correspondientes a la finalizacion del proyecto.
Una diferencia notable de este estandar frente a la generalizacion presentada
anteriormente es que las funciones basicas de movimiento se enmarcan como otras
funciones G, es decir, X, Y y Z no representan acciones, sino que anticipan datos
a utilizar en la acci
on G1 (en este caso). Tampoco aparece la secuencia de n
umeros
precedida por la letra N .
B
asicamente este c
odigo describe los puntos que se deben ir recorriendo en
cada plano XY (en el total del codigo tambien aparecen incrementos en Z) junto
con una serie de configuraciones como las mencionadas y otras como la velocidad
de avance, necesarias para el correcto funcionamiento del sistema. Este hecho es
el que hace a los comandos G y M de tan valioso uso en este tipo de maquinas,
21
Captulo 2. Antecedentes
ya que con el estudio y comprensi
on de los mismos, se puede iniciar una etapa de
desarrollo de un software que deber
a entender cada uno de los codigos que reciba
para ejecutar las directivas necesarias y as comandar la maquina. Componiendo
de esta manera el firmware especfico de la maquina.
2.8. Software
Teacup: Al igual que en los casos anteriores apunta al manejo general de la
m
aquina. Su implementacion se llevo a cabo en lenguaje C que se enfoca en
la eficiencia, flexibilidad y de codigo limpio.
ReplicatorG: Es un firmware realizado a partir de Sprinter cuya version 0.91
se lanzo el 30/12/2013. Se implementa parcialmente en C++ y C. Implementa varias de las mismas caractersticas que los anteriormente mencionados.
Por m
as informaci
on sobre la anterior lista de firmwares y otros disponibles se
puede consultar la p
agina de Reprap [32].
23
Captulo 2. Antecedentes
2.9. Electronica
En la presente secci
on se da una idea global de los bloques de electronica que
son usuales en aplicaciones de impresi
on 3D y routers CNC. En la Figura 2.18 se
puede apreciar un diagrama de dichos bloques y como se relacionan para el caso
de una impresora. No difiere mucho del caso de un Router CNC, salvo por los bloques de control de temperatura. En primer lugar, se necesita un microcontrolador,
una interfaz con el usuario, drivers y motores para el movimiento. Los anteriores
bloques son b
asicos; la interfaz brinda al usuario un medio de comunicacion con
la maquina, en el microcontrolador se implementa el firmware para el funcionamiento logico, se reciben y se generan las se
nales necesarias para el funcionamiento
general. Los drivers de los motores manejan y dan potencia a estos para realizar
los movimientos.
La pieza fundamental de la electr
onica es la inteligencia (controlador), donde convergen todas las se
nales de entrada, salida y procesamiento necesario para
el adecuado funcionamiento de la m
aquina. En el rubro de las impresoras 3D son
ampliamente utilizadas las placas controladoras de la familia Arduino, destacandose en los modelos comerciales el Arduino Mega, probablemente porque se ajustan
perfectamente a las necesidades (ya sea capacidad de procesamiento, tama
no flash,
cantidad de puertos). En la siguiente lista se resumen estas y otras placas electronicas con utilidad en el
area.
Arduino: Mega 1280 [33], Mega 2560 [34], Mega ADK [35], DUE [36], TRE
[37]
BeagleBoard: BeagleBone Black [38]
24
2.9. Electronica
Raspberry Pi [39]
Recientemente modelos mas potentes como Arduino DUE ya se usan para
proyectos de este estilo, incluso el modelo TRE se proyecta con gran utilidad en
el
area. Adem
as, incluso modelos de otras empresas estan ganando terreno, como
ejemplo citamos a la BeagleBone Black [40] y Raspberry Pi [41] que son placas
capaces de ejecutar un sistema operativo del estilo Linux.
Dependiendo del tipo de motores que se utilicen surgen varias posibilidades en
cuanto a los drivers a utilizar. En general se utilizan motores paso a paso sobre
todo en el desarrollo de impresoras 3D, sin embargo los motores de tipo DC como
los servomotores tienen aplicacion en maquinas que requieran un posicionador [42]
de precisi
on.
Para el manejo de motores PAP con un microcontrolador Arduino es com
un el
uso de placas (shield ) que resuelven la generacion de fases para las bobinas de los
motores y la etapa de potencia [43]. Esta tendencia se repite con otras placas [44]
e incluso se ha ido m
as lejos con el dise
no de placas basadas en microcontrolador
Arduino o BeagleBone que integran la inteligencia con los drivers. Ejemplos de
esto son las placas que se listan a continuacion:
Alligator Board: basada en Arduino DUE [45]
Duet Board: basada en Arduino DUE [46]
Lo anterior tiene como ventaja la reduccion de espacio dedicado a la electronica.
Sin embargo, no es la u
nica posibilidad. Existen los conocidos Pololu [47] o EasyDriver [48], que resuelven el manejo de las bobinas de los motores. Pero siempre
est
a la opci
on de que el usuario dise
ne su propio controlador a partir de integrados: uno que genere las fases y/o un puente H para dar potencia. Un ejemplo es
la combinaci
on L297 con L298 [20], y otra opcion es usar el DRV8811 [49]que a
diferencia del anterior integra ambas funciones y permite microstepping.
En lo que refiere a la interfaz con el usuario, se puede encontrar desde equipos
conectados a un PC con un software host, que se utiliza para realizar la calibracion
y el seguimiento de un trabajo, por ejemplo el CURA [27], hasta opciones mas
b
asicas donde se cuente con una pantalla LCD y una botonera o joystick. En el
primer caso, el archivo .gcode se transmite desde el PC y en el segundo se carga
en una memoria SD de donde el firmware obtiene el mismo.
Hasta aqu tenemos una descripcion general de los distintos bloques basicos
para desarrollar una impresora 3D o router CNC.
Falta mencionar, sin embargo el uso de heated bed, la cual permite imprimir
las piezas en una superficie que se encuentre a una determinada temperatura,
permitiendo una mejor adherencia del material. El requerimiento de la misma
depende del material de impresion, que recordamos son PLA o ABS. En el primer
caso, se pueden encontrar opiniones diferentes respecto a la necesidad de usar
una heated bed. Entre los que sostienen que no es necesario se pueden encontrar
alternativas muy sencillas como por ejemplo emplear una lamina adhesiva o incluso
trabajar directamente sobre vidrio. En cambio, con el ABS es necesario tener una
25
Captulo 2. Antecedentes
heated bed que alcance alrededor de 110 C; ademas hay grupos que consideran
necesario agregar alg
un material adherente, como fijador de cabello o lamina que
soporte las temperaturas de trabajo.
Otro detalle que no se mencion
o pero es fundamental para el control y proteccion mecanica es el uso de alg
un mecanismo para determinar los lmites fsicos de
la maquina. Pueden ser mec
anicos u
opticos.
26
Captulo 3
Vision General del Proyecto
Como se mencion
o en el Captulo 1, el objetivo del proyecto es dise
nar y construir un posicionador en tres dimensiones, el cual mediante cabezales intercambiables cumplir
a con las funciones de fresado y de impresion 3D por deposicion
fundida. El objetivo de este captulo es presentar al lector un resumen de la solucion
propuesta, remarcando los conceptos claves para su desarrollo.
a un movimiento.
Los equipos basados en control numerico como los que se tratan en este proyecto basan su funcionamiento en comandos G-code provenientes de un archivo
.gcode que describe el recorrido que debe efectuar el posicionador y otras funciones necesarias que se describir
an. El archivo mencionado, se genera a partir de un
software denominado generador de G-code, que recibe como entrada un archivo
.stl que describe la geometra del objeto que se pretende sea el producto final de
una impresi
on o fresado. El proyecto descrito tiene como punto de partida el archivo .gcode, pero no descuida el uso de herramientas como CURA o Slic3r para
la obtencion de los mismos.
El flujo de trabajo en la Figura 3.2 comienza con el archivo .gcode. El primer
paso es alojar el archivo en la memoria SD de placa Raspberry PI conectandose
mediante una red inal
ambrica a la misma. Luego de esto, la placa Raspberry Pi
auspicia como transmisora de cada lnea del archivo anterior que corresponde a un
G-code.
El Arduino Mega 2560 y la placa anterior entablan una comunicacion serial
donde el microcontrolador solicita al Raspberry Pi una lnea y este la enva al
receptor. En el Arduino se implementan todos los bloques de software necesarios
para realizar un correcto funcionamiento de la maquina. Para ello es necesario
realizar una interpretaci
on de cada comando G-code y tomar acciones de control
que deriven en la generaci
on de se
nales apropiadas a los drivers de los motores
paso a paso. El software que corre sobre la plataforma de Arduino se le denominara
firmware. Para fijar ideas en la Figura 3.3 se observa un esquema cuya intencion
es mostrar un poco m
as de detalle, resaltando las funciones mas importantes que
se deben llevar a cabo.
Es importante mencionar en este punto que en el caso de impresoras 3D se
tiene un cabezal de impresi
on como los descritos en el Captulo 2. Estos cabezales
de impresion utilizan un motor PAP para traccionar el filamento de PLA o ABS
y ademas requieren un control de temperatura. Por otro lado se implemento una
heated bed, la utilizaci
on de la misma requiere de electronica adicional para el
28
control de temperatura.
Para la implementaci
on de la fresadora es necesario agregar el control de un
motor DC por lo que se necesita un controlador de motor distinto al de los motores
stepper. Una posibilidad es realizar un control PWM para la velocidad del motor
DC. El Arduino ser
a el encargado del manejo de estos elementos. En la Figura 3.4
se aprecia la ubicaci
on del cabezal de impresion o de fresado. La idea es que sean
intercambiables.
29
30
Captulo 4
Mecanica
4.1. Introduccion
En el corriente captulo se describe el proceso de dise
no y fabricacion de la
estructura mec
anica. Se detalla la eleccion de los criterios de dise
no en los que
se bas
o para llegar a la solucion, las dimensiones para cumplir con los objetivos
del proyecto y el armado. Se comentan los diferentes problemas y sus respectivas
soluciones.
on mayor a lo estandar.
Adem
as, el cabezal debera trabajar en el centro de dicha superficie, por lo
cual su ubicaci
on y la del mecanismo encargado de su movimiento presentara una
complicaci
on a la hora de implementarse. Como solucion se decidio que la mesa
efectuara un solo movimiento, dejando los restantes dos para el cabezal.
Captulo 4. Mecanica
La segunda gran pauta fue que las partes de la maquina seran dise
nadas por
quienes suscriben, comprando piezas a medida o encargandoselas a un tornero. Se
penso que la opci
on de utilizar grandes laminas de aluminio dobladas seg
un criterio
propio permitira implementar de buena forma la estructura. Esto atentara contra
uno de los objetivos del proyecto, m
as precisamente el de dise
nar un prototipo que
sea, dentro de lo posible, f
acil de replicar. Por esto se opto por utilizar piezas
con caractersticas est
andar y se considero con fuerza la opcion de usar perfiles de
aluminio. Los perfiles seleccionados inicialmente son de una forma determinada y
se muestran en la Figura 4.1.
Estos perfiles presentaban dos ventajas interesantes, la primera es que el uso de los mismos le
hubiera proporcionado al prototipo un buen acabado desde el punto de vista estetico. Y como segunda ventaja la facilidad que presentaban para la
conexion, tanto entre ellos como a otros partes que
tendra el prototipo. A la hora de buscar la disponibilidad en el mercado local se encontro que estos Figura 4.1: Perfil de uso comun
en router CNC. Imagen extrada
perfiles no se comercializan en el Uruguay, y bajo
de [50].
la posibilidad de comprarlos en el exterior se dieron
con precios demasiado altos para el presupuesto del
presente proyecto. Debido a esto se opto por una
nueva opcion: trabajar con perfiles de aluminio que se encuentren en el mercado
local, mas precisamente perfiles de seccion cuadrada o rectangular. Esto amplio el
margen econ
omico pero agreg
o una etapa extra en el dise
no debido a la dificultad
de conectar las partes de la estructura. El uso de estos perfiles brindo una ventaja
a la hora de ubicar los cables, los cuales se pueden colocar por dentro de estos,
dado que son huecos.
Ademas, para ser coherentes se decidio que la gran mayora, y en caso de ser
posible todas las piezas, fuesen de car
acter estandar, y que se posean datos tecnicos
de las mismas para que ante la incapacidad de encontrar tales piezas se pueda optar
por otras equivalentes.
Para efectuar los movimientos mecanicos del posicionador se utilizaron motores, los tipos de motores que emplean la mayora de los routers CNC e impresoras
3D son motores paso a paso o motores servo. Vale la pena aclarar que ambos motores pueden cumplir con las tareas deseadas, y en diversos foros de routers CNC
y de impresoras 3D se encontraron discusiones sobre la eleccion de los motores,
existiendo simpatizantes de ambas opciones. Las ventajas que presentan los motores paso a paso son que son m
as baratos, como tambien son mas sencillos de
controlar, principalmente porque se pueden utilizar en lazo abierto, haciendo mas
barata la electr
onica necesaria para su uso.
Una de las principales decisiones que se tuvo que tomar fue elegir que tipo de
mecanismo se encargara de trasladar el movimiento que efect
uan los motores. De
esto podran encargarse tornillos sin fin o correas dentadas, la eleccion se decanto
por los tornillos sin fin dado que estos presentan una mayor inercia, lo que resulta
beneficioso para la tarea del fresado por ejemplo. Como contrapartida los tornillos
32
33
Captulo 4. Mecanica
Elemento
Aluminio
Partes moviles
Tornillo
Perfiles
Estructura modular
Dise
no rectangular
Ventajas
Bajo costo
Facil manipulacion
Repartidos los esfuerzos
Mitad de superficie de impresion que si
la mesa se moviera en 2 dimensiones
Alta precision
Buena inercia
Ubicacion de los cables
Permite implementacion independiente
Desventajas
Baja resistencia
mecanica
Baja velocidad
Efecto paralelogramo
4.3. Dimensionado
Antes de empezar con la construccion del primer eje se debieron elegir las
especificaciones tecnicas de los materiales, para esto se debieron elegir por ejemplo
las dimensiones de todo el modelo.
Las dimensiones totales del prototipo se eligieron basicamente con el cometido
de cumplir con el requisito del volumen de impresion marcado como objetivo. Para
34
4.3. Dimensionado
esto se sabe que la mesa debe ocupar aproximadamente el doble del largo objetivo
y un ancho similar al objetivo. En cuanto a las dimensiones de los restantes ejes
estos deben diferir de los objetivos el espacio no u
til que determinan las mesas que
se mueven a traves de estos. Teniendo en cuenta esto se decidio realizar los ejes de
aproximadamente las medidas mostradas en la Tabla 4.2.
Eje
X
Y
Z
Largo u
til (cm)
60
35
50
Ancho u
til (cm)
40
20
30
De las medidas totales se deducen las de los distintos elementos que componen
los ejes, as como lo son los perfiles, las guas de acero o los tornillos. En lo que
respecta a los perfiles de seccion cuadrada se encontro en el mercado local una
gran variedad de secciones, concluyendo que las mas sencillas de obtener son las
de 4cm 4cm o las de 3cm 3cm. Se opto por estas u
ltimas debido a que eran
m
as peque
nas y adem
as poseen un espesor menor lo que se traduce en una menor
resistencia mec
anica.
El largo de los tornillos no presento una limitante debido a que se comercializan por unidad con un
metro de largo, permitiendo luego cortarlos del largo necesario. Fue necesario decidir el paso de los tornillos, entendiendo esto como la distancia entre las
crestas, o como la distancia que recorre una tuerca
al dar una vuelta completa (Figura 4.3). Esta caracterstica determina la precision en los movimientos,
esto es porque una vuelta consta de un determinado n
umero de pasos (N ) entonces la precision va
Figura 4.3: Paso de un tornillo.
a ser: paso delNtornillo . Los motores de paso de hoy Imagen modificada de [51].
en da poseen como valores usuales 1,8 por paso, o
sea que se llega a N = 400 trabajando en modo half
step, lo cual se explicar
a en el Captulo 5. Por esta
raz
on y por la estandarizacion de la relacion entre diametro y paso de los tornillos
sin fin se concluy
o utilizar tornillos de media pulgada de diametro y de 12 pasos
por pulgada. Se decidi
o utilizar tornillos iguales para todos los ejes con el objetivo
de mantener la relaci
on entre n
umero de vueltas y avance.
Para las guas no se calculo en profundidad los esfuerzos que deberan soportar,
sino que se eligi
o guas de acero pulido que posean un diametro que facilite encontrar cojinetes que sirvan en estas, y que se pudiera encontrar una buena oferta por
el conjunto de todas las guas necesarias. Se opto por guas de 8mm de diametro y
como confirmaci
on de que cumpliran los requisitos mecanicos se tomo la opinion
de los tutores, los cuales constan de una experiencia mayor que los integrantes.
35
Captulo 4. Mecanica
Para la selecci
on adecuada de los motores PAP se realizo un script de matlab,
por mas detalles Apendice B. Los valores de las medidas con las que se construyeron
los ejes se pueden apreciar en la Figura 4.4.
Dicho cabezal presenta como ventajas que la traccion del filamento la realiza
un motor de pasos con caractersticas similares (tension de alimentacion, angulo
por paso, etc) a los utilizados para implementar los movimientos. Ademas entre
el motor y el filamento no se utilizan engranajes intermedios, sino que se hace de
forma directa, con esto se evita introducir backlash en el movimiento.
Tambien la resistencia de potencia encargada de calentar el hot end se alimenta
en 24V.
Otra de las caractersticas que impulso la compra del cabezal es la capacidad de
trabajar tanto con ABS como con PLA, esto es debido a la capacidad de manejar
las temperaturas necesarias de ambos materiales.
Otras caractersticas del extrusor son:
36
(a) Eje X.
(b) Eje Y.
(c) Eje Z.
Figura 4.4: Medidas reales de los ejes (cm).
37
Captulo 4. Mecanica
Grosor del filamento soportado: 1,75mm.
Diametro del extrusor: 0,3mm.
Sensor de temperatura: termocupla tipo K.
Potencia de calentamiento: 40W.
Maxima temperatura de trabajo: 255 C.
Por mas informaci
on sobre el cabezal adquirido ver [52].
En la presente secci
on se detallar
a el armado de un eje, el cual se ve en la
Figura 4.6, que como ya se explic
o es practicamente analoga para todos los demas.
Ademas se explicar
a el dise
no de las mesas que se deslizan por los ejes, y el detalle
de todas las piezas de invenci
on propia que fueron necesarias para efectuar el
armado.
Para colocar las guas en el rect
angulo se realizaron en los perfiles cortos, que
componen los anchos, perforaciones de 8mm de diametro y se cortaron las guas a
la medida de forma tal que el largo de la varilla Lv cumpliera: Lv = Lext eperf il ,
siendo Lext los largos exteriores del rectangulo, y eperf il el espesor de las caras del
perfil.
La colocaci
on de las guas es sencilla dado que las guas tienen un movimiento
bastante acotado. Pero para los tornillos no se puede optar por la misma solucion
38
debido a que el tornillo tiene un movimiento rotatorio que es la base de su funcionalidad, por esto debe fijarse el mismo de forma tal que se le permita efectuar
dicho movimiento, mediante un ruleman. Por esto se realizo una pieza, que se puede apreciar en la Figura E.19, con una plancha de hierro con el mismo espesor que
los rulemanes, donde se encastrara el ruleman a fuerza, y luego se fija dicha placa
al lado interior del rect
angulo. Para realizar esta pieza se necesito de la ayuda de
un tornero que llevara el diametro del tornillo al diametro interno del ruleman.
La altura a la que se ubican las guas y el tornillo se ve en la Figura 4.8, la
diferencia se explica en que la distancia que imponen los cojinetes entre las guas
y la mesa y la que impone la tuerca entre el tornillo y la mesa no son iguales, para
compensar esta diferencia se agrega una placa de aluminio de 4mm como ajuste
grueso y el ajuste fino se realiza colocando a distintas alturas las guas y el tornillo
en el perfil corto.
Los motores se acoplaron a los tornillos de formas distintas dependiendo de la
ubicaci
on m
as conveniente de estos seg
un se proyecto en el dise
no general. Como se
ve en la Figura 4.9 en el eje X se coloca a continuacion del tornillo pero en el Z y en
el Y esto no es posible. En el caso del eje X se debe acoplar el tornillo directamente
al eje del motor mediante un acople como el que se ve en la Figura 4.10(a), para
esto se debe fijar una distancia entre el motor y el tornillo mediante una pieza
39
Captulo 4. Mecanica
(a) Ubicaci
on del motor en el eje X.
Eje
X
Y
Z1
Z2
la Figura 4.12, que corrija este problema. Esta pieza tiene el nombre de collar
de empuje, y la idea es que la tuerca pueda moverse perpendicular al tornillo sin
efectuar esfuerzos a la mesa, siempre teniendo en cuenta que estos movimientos
sean los suficientemente peque
nos como para que la tuerca no gire en relacion a
la mesa. Estos movimientos se deben dar en todos las direcciones para soportar la
excentricidad del tornillo. Como esto no se haba contemplado salvo para el eje Z
se agreg
o un peque
no margen entre la mesa y la tuerca realizando una canaleta
en la placa de aluminio a
nadido. Ademas vale la pena destacar que este problema
exige un correcto torneado de las puntas de tornillo dado que por mas que esto no
lo corrige, si se puede ver amplificado. Es importante que la tuerca calce justo en el
perfil U para no agregar tiempos muertos en el movimiento, para esto se adquirio
un perfil U ligeramente menor al espesor de la tuerca y se limo esta hasta llevarla
a la medida exacta.
41
Captulo 4. Mecanica
42
Uno de los pilares de la interconexion entre ejes es el de determinar la perpendicularidad entre estos. El armado se puede resumir como la colocacion de los ejes
Z a los lados del eje X, y la del eje Y sobre las mesas de los ejes Z, dado que el eje
Y es el u
nico que se mueve. Sobre la mesa del eje Y se colocan los punteros. Las
im
agenes del dise
no final se pueden ver en la Figura 4.14.
43
Captulo 4. Mecanica
4.7. Problemas
En un primer prototipo de la m
aquina con sus ejes ensamblados se detecto
un problema en el movimiento del eje Z. Se apreciaba una vibracion del eje Y
(que corre sobre el Z) y particularmente del lado sin tornillo el movimiento no era
continuo, se presentaban saltos en el desplazamiento. Estos problemas seguramente
provocaran imperfecciones en el resultado final. Por esta razon se decidio colocar
un segundo tornillo para efectuar el movimiento en el eje Z, esto significa que
los dos rectangulos que se encargan de estos movimientos se haran exactamente
iguales. Para que esto funcione correctamente es esencial que al ser los dos tornillos
de las mismas dimensiones estos se muevan exactamente igual. Para lograr esto
hay dos posibilidades.
La primera es utilizar un motor y trasladar el movimiento del tornillo que se
encuentra acoplado al motor al otro a traves de una correa con una relacion 1:1,
la segunda opci
on es colocar un segundo motor acoplado al tornillo agregado y
excitar ambos motores con las mismas se
nales. Se considero que la segunda opcion
puede introducir m
as errores que la primera.
Para implementar la primera solucion es importante lograr que la correa se
encuentre tensada, lo ideal hubiese sido encontrar una correa de la medida exacta
44
4.8. Conclusiones
para acoplarla directamente. Por mas que se busco, esto no fue factible entonces
se opt
o por utilizar una correa mas extensa y colocarle un tensor, el cual consta
de una parte m
ovil por la que pasa la correa para formar un triangulo (un pvot).
La figura del tensor y su ubicacion se pueden apreciar en la Figura E.31.
Para realizar el tensor se buscaron en primera instancia los acoples dentados.
El pase obtenido fue de XL, con lo cual, luego de poseer los acoples se adquirio
una correa con ese pase de 49 pulgadas de permetro. Finalmente, en la colocacion
de la m
aquina se ubic
o el pvot dejando una tension adecuada en la correa. Los
c
alculos para determinar la distancia h a la que debe quedar ubicado el pvot se
desprenden de imponer que:
54, 2cm + 2x = 49 2, 54cm
h2 + (54, 2cm/2)2 = x2
De lo que se deduce que h = 22, 35cm.
4.8. Conclusiones
La principal conclusi
on es que se desarrollo un prototipo funcional de un posicionador XYZ, el cual en teora tendra la capacidad de ubicar su puntero con
una repetibilidad que cumple con los objetivos. En el Captulo 7 se reportaran las
medidas de repetibilidad reales.
Se concluye que no fue una buena idea comprar algunos materiales de baja
calidad, m
as especficamente tornillos sin fin, guas de acero y cojinetes dado que
estos resultaron en una complicacion y un gran gasto de horas que se podran
haber ahorrado aumentando un poco el presupuesto.
45
Esta p
agina ha sido intencionalmente dejada en blanco.
Captulo 5
Electronica
5.1. Introduccion
El captulo que aqu se presenta trata sobre el dise
no e implementacion global
de la electr
onica. Se detalla la relacion entre los diferentes bloques y se hace especial
enfasis en el desarrollo de los drivers para motores paso a paso. En la Figura 5.1
se observa un esquema general de conexionados entre bloques. El mismo intenta
brindar una idea clara de los bloques que intervienen en el prototipo, mas no es
exactamente un reflejo fiel de las conexiones.
El esquema anterior resume la electronica necesaria para el prototipo desarrollado en el presente proyecto.
La inteligencia del prototipo fabricado se compone de un computador encargado de la recepci
on y comunicacion del archivo G-code al microcontrolador encargado de procesar cada lnea. Como computador se decidio usar una Raspberry
Pi y como microcontrolador el Arduino MEGA ADK.
La Raspberry Pi es una placa computadora, es decir tiene todo lo que engloba
una computadora en el mismo circuito impreso. En la Tabla 5.1 se presentan las
principales caractersticas.
La presente placa no presenta ning
un dispositivo de almacenamiento fsico. Se
trabaja con una tarjeta SD extrable. No posee una fuente de alimentacion interna.
El sistema operativo que corre en dicho computador es una distribucion de
Linux exclusiva para este computador, conocida como Raspbian (derivada de la
distribuci
on Debian). Se utiliza el entorno y lenguaje Python para su programaci
on.
Especificacion
ARM1176JZF-S 700M Hz
Broadcom VideoCore IV
512M b
Captulo 5. Electronica
48
Figura 5.1: Diagrama de electronica.
5.1. Introduccion
Tension de operacion
Tension de entrada recomendada
Pines digitales (I/O)
Pines Analogico (I)
Corriente continua por pines (I/O)
Memoria flash
Memoria SRAM
Memoria EEPROM
Frecuencia de reloj
Especificacion
5V
7 12V
54
16
40mA
256Kb
8Kb
4Kb
16M Hz
Es de destacar que al poseer solo dos puertos USB, es casi segura la utilizacion
de un HUB USB para aumentar la cantidad de este tipo de puertos. Esto se debe a
que con la simple y b
asica conexion de un mouse y un teclado ya no restan puertos
libres. En particular en el presente proyecto se debe conectar un adaptador de red
inal
ambrica, con lo cual al menos durante la etapa de dise
no se hace esencial el
uso de un HUB.
Otro punto a tener en cuenta tambien para la etapa de dise
no es la necesidad
de conectarle una pantalla. Esta placa posee un puerto HDMI y uno RCA.
El microcontrolador Arduino elegido esta basado en los integrados ATmega2560 (8-bit microcontrolador Atmel con 64KB In-System Programmable Flash
[54]), ATmega8U2 (8-bit AVR microcontrolador con 8 Bytes de ISP flash y controlador USB [55]) y MAX3421e (USB host chip [56]). En la Tabla 5.2 se presentan
las principales especificaciones de la placa microcontroladora.
Cada pin digital posee una resistencia de pull-up (20 50K) desconectada
por defecto. Provee cuatro hardware UARTs (8 pines digitales), 6 pines para interrupciones externas, 15 pines con PWM, 4 pines correspondientes a comunicacion
SPI (ver uso de estos en [57], subseccion Interfaz ICSP). Por otro lado posee 16
entradas anal
ogicas que van a un conversor ADC de 10 bits, dando lugar a una
resoluci
on con 1024 niveles diferentes.
Esta placa viene por defecto con el reset por software automatico habilitado,
pero tiene una traza que puede ser cortada para deshabilitar dicho reset. La traza
aparece claramente identificada en la placa como RESET-EN.
Se decant
o por el uso de las placas mencionadas debido a la buena relacion
entre precio y robustez, complementada con la gran comunidad de usuarios que
poseen en el mundo que demuestran casos de exito en este tipo de prototipos
( [58], [59], [60]). Adem
as una importante ventaja era que ya haba de estas en
el instituto. En la elecci
on del Arduino a utilizar el gran punto de decision fue la
cantidad de pines que se deban tener disponibles para el prototipo, en un principio
se necesitaban aproximadamente 42.
La placa Raspberry Pi se conecta mediante el puerto USB y entabla una co49
Captulo 5. Electronica
municacion serial con el Arduino.
En las siguientes secciones se presentara el dise
no de los drivers de los motores
paso a paso y DC. Se trata la fabricacion de la heated bed o cama caliente, la
implementaci
on fsica de la medici
on y control de temperatura para el extrusor y
cama caliente, interfaz con el usuario y alimentacion del prototipo.
Pin
18
17
19
10
20
15
11
14
13
Descripci
on
Pulsos de reloj
Direccion de giro
Paso entero o medio paso
Habilitacion
Reset
Referencia
Control de chopper
Sensado (corriente de carga A,B)
Sensado (corriente de carga C,D)
Tabla 5.3: Entradas del integrado de control (L297 ) del driver de los motores PAP.
Nombre
Pin
A, B, C y D
4, 6, 7 Y 9
IN H1 y IN H2
5y8
Descripci
on
Se
nales de control de las fases del motor
Habilitacion de las salidas de control
Tabla 5.4: Salidas generadas por el integrado de control (L297) del driver de los motores PAP.
L297
El circuito integrado L297 es el encargado de generar las se
nales de fase que
luego ser
an amplificadas para llegar a las bobinas de los motores. Para esto utiliza
las entradas que se detallan en la Tabla 5.3 y se generan las salidas presentadas
en la Tabla 5.4.
El L297 genera cuatro se
nales de control de fase, las cuales se pueden utilizar
para controlar motores bipolares o unipolares. Permite operar el motor en los
siguientes modos:
Fase simple: s
olo est
a energizada una bobina en un momento determinado.
La secuencia se puede apreciar en la Figura 5.3(a).
Captulo 5. Electronica
un la se
nal de reloj
Figura 5.4: Diagrama de tiempos donde se muestran las fases al motor seg
para el modo de medio paso. A y B bornes de una bobina, C y D de la restante.
Nombre
Output1
Output2
Output3
Output4
SENSE A
SENSE B
Pin
2
3
13
14
1
15
Descripci
on
Se
nal potenciada (A)
Se
nal potenciada (B)
Se
nal potenciada (C)
Se
nal potenciada (D)
Corriente de emisor del puente A
Corriente de emisor del puente B
L298
Con este CI se pueden controlar motores paso a paso de tipo bipolar. El in
tegrado L298 est
a compuesto en esencia por dos puentes clase H. Esto
permite
comandar dos bobinas independientemente, da lugar a un control de habilitacion
y de direcci
on, es decir, se puede hacer girar un motor en un sentido o en otro y
tambien se lo puede detener.
En las Tablas 5.5 y 5.6 se presentan las entradas y salidas referentes del mencionado integrado.
Las entradas son TTL compatibles (los elementos de entrada son transistores
bipolares).
Con respecto al puente H, como se muestra en la Figura 5.5, su denominacion
proviene de la disposici
on que presentan los transistores que lo componen. Tpicamente, el funcionamiento se basa en el encendido y/o apagado de los transistores
mencionados, dependiendo de las entradas (tensiones en las bases de los transistores) que exciten al puente. Seg
un que transistores conducen (llaves cerradas), se
determinar
a si la bobina esta energizada o no y en que sentido.
53
Captulo 5. Electronica
En particular, cuando las entradas 1, 4 estan en alto y las 2, 3 en bajo, el transistor Q1 conduce entonces pondr
a a un extremo de la bobina a fuente, mientras
que Q4 que tambien conducir
a pondr
a el otro extremo a tierra energizandose de
esta manera la bobina. En cambio si las entrada 2, 3 son las que estan en alto, la
bobina quedar
a energizada en el sentido opuesto.
Observado el circuito de la Figura 5.5 puede verse que si todas las entradas
estan en nivel alto, quedan los cuatro transistores en conduccion lo que produce un
camino directo de fuente a tierra (cortocircuito), produciendo una corriente muy
alta que podra da
nar los transistores como tambien la fuente de alimentacion.
En el CI utilizado, la etapa de entrada es un circuito combinatorio que protege al puente del posible problema recien mencionado. Se a
nade otra entrada
(ENABLE) que junto a las dos ya mencionadas anulan la posibilidad de que se de
un cortocircuito entre fuente y tierra. Esto permite tener estados en los cuales la
bobina puede estar des-energizada.
En la Figura 5.6 se aprecia la disposicion de los 2 puentes H junto a la logica
combinatoria a la entrada de estos.
Regulador de voltaje
En el dise
no inicial como regulador de voltaje se utilizo el circuito integrado
LM317 [63]. La configuraci
on en la cual se utiliza el mencionado dispositivo es
dada por la hoja de datos del mismo y puede observarse en la Figura 5.7.
En funcionamiento, el CI tiene voltaje de referencia Vref = 1, 25V entre los
bornes de la tensi
on de salida (Vout ) y el pin de ajuste (ADJ).
La transferencia de dicha configuracion para tener la tension de salida deseada
dependiendo de los dem
as par
ametros se muestra en (5.1).
R2
Vout = Vref 1 +
+ R2 Iadj
(5.1)
R1
54
Figura 5.6: Diagrama de bloques interno del CI L298. Figura tomada de [61].
Observando la ecuaci
on (5.1) se concluye que para determinar el voltaje de
salida se deben de fijar las resistencias R1 y R2 , asumiendo despreciable la corriente
max = 100A) , la cual es m
de ajuste (Iadj
nima y constante ante cambios en la
alimentaci
on o en la carga.
Es de destacar que la presente configuracion solo es aplicable para cargas que
demanden al menos 4mA de corriente. Esto se debe a que el termino que se agrega
en la tensi
on de salida dependiente de la Iadj debe ser despreciable para que el
voltaje a obtener se calcule en funcion de R1 , R2 y Vref . Lo anterior se da si Iadj
es despreciable frente a la corriente de salida (el error conocido que se comete no
debe ser apreciable).
Esto provoca que si la carga demanda poca corriente, la tension de salida tiende
a crecer. Observando el diagrama de bloques interno del CI (Figura 5.8) en cuestion
y sin perder de vista la Figura 5.7, se entiende por que ocurre lo recien mencionado.
55
Captulo 5. Electronica
Figura 5.8: Diagrama de bloques interno del integrado LM317. Figura tomada de [63].
Diodos
En el driver dise
nado se observa la presencia de 8 diodos (Figura 5.13. Estos
diodos tienen como objeto proteger al circuito. Las bobinas de los motores luego de
energizadas, se descargar
an. Se genera una tension inducida la cual va a dar lugar
a una corriente que tomar
a alg
un camino hacia el circuito. Es aqu que actuan
estos diodos, d
andole un camino seguro a la corriente de descarga de las bobinas.
Ademas es importante la utilizaci
on de diodos de recuperacion rapida, es decir,
1
que el tiempo de reverse recovery (ver Figura 5.9) sea lo mas bajo posible (menor
a 200ns); un diodo com
un como puede ser el 1n4004 tiene un trr de 30s. El
1
56
57
Captulo 5. Electronica
Figura 5.10: Diagrama de bloques generico del driver. Figura modificada de [64].
Figura 5.11: Diagrama de bloques interno del integrado L297. Figura tomada de [20].
la Secci
on 5.2.2. Estos son excitados por las se
nales de salida (A, B, C, D) de
la primer etapa, tanto las que prenden los transistores como las de proteccion
(/INH1, /INH2) que evitan caminos directos de fuente a tierra. A las salidas de
este se conectan las bobinas de los motores y los diodos usados para la rapida
desenergizaci
on de estas. Las corrientes entregadas a las bobinas son sensadas por
dos resistencias de 0,5 conectadas entre los pines 1 y 15 del L298 y tierra, tambien
los bornes de mayor tensi
on se encuentran conectados los pines 13 y 14 del L297,
siendo estos las entradas SENS1 y SENS2. Observando la Figura 5.6, se nota que
dichas resistencias est
an ubicadas en los emisores de los transistores inferiores del
puente, con lo cual la corriente del puente en cada instante circula por estas (ver
c
alculo en (5.2), (5.3) y diagrama de tensiones por fase en el transcurso de un
incremento 5.12).
< P >= RSEN SE . < I >2
Z 3T
8
1
3
< I >= 2
Imax dt = Imax
T 0
4
(5.2)
(5.3)
Figura 5.12: Diagrama de tiempos que muestra la forma de onda de la tension aplicada a los
bornes (A y B) de una bobina (utilizacion de un puente H) en el tiempo. La parte sombreada
es el perodo de tiempo que se demora en dar un incremento en el motor (T = 8TM CLK ).
59
Captulo 5. Electronica
Figura 5.13: Esquematico del driver version 0.0. Figura tomada de [65].
Versi
on 0.0
Se realiz
o un primer prototipo del driver, basado en un proyecto presente en
[65], cuyo esquem
atico se presenta en la Figura 5.13.
Luego de realizado el circuito impreso correspondiente al esquematico de la
Figura 5.13 se comenz
o con las pruebas de funcionamiento utilizando distintos
motores de paso a paso de dos bobinas y el microcontrolador Arduino UNO, el
cual genera el clock, determina el sentido de giro y maneja las entradas ENABLE
y RESET del L297.
En dichos testeos se observ
o que el torque aplicado a los motores era mnimo,
60
Versi
on 0.1
Se modific
o la versi
on anterior, se agrego un divisor de tension resistivo cuyo valor
de salida se conecta al PIN15 (Vref ) del L297. Esta tension de salida se la puede
hacer variar entre 0V y 2V gracias a un potenciometro presente en el divisor.
Puesto en funcionamiento, se observo claramente como con la presente modificaci
on el torque era considerable y como se lo poda aumentar o disminuir variando
el potenci
ometro.
En esta versi
on se trat
o de hacer variar la velocidad de giro. Para esto se fue
modificando el reloj creado a traves de un script en Arduino. En resultado de esto,
se pudo ir lo bastante lento como para ver paso a paso como giran los motores,
luego se fue incrementando la velocidad correctamente. Como problema, surge
que luego de determinado umbral de velocidad, a pesar de seguir aumentando la
frecuencia de reloj, la velocidad no aumentaba quedando permanentemente en ese
umbral.
Versi
on 1.0 Se procedio a fabricar un nuevo circuito impreso, el cual, debido a
todas las modificaciones que se agregaron incremento en gran medida la dificultad
del dise
no del PCB.
Las principales diferencias del presente driver en comparacion con el de la
versi
on de serie 0 son: la posibilidad de elegir a traves del microcontrolador que
modo de operaci
on (medio paso o paso completo), la utilizacion de un lazo de
realimentaci
on entre los integrados principales del circuito, mas especficamente,
se realiz
o dicha realimentacion compuesta por una compuerta AND, un transistor
y un divisor de tensi
on resistivo con el objeto de crear un control automatico de
torque (ver Figura 5.14).
Dicha realimentaci
on solo tiene sentido si el modo de operacion es medio paso.
Con la ayuda de las se
nales de habilitacion del L297 (/INH1, /INH2 -estado bajo:
bobina desenergizada-), la cuales son prendidas alternadamente en el modo de
medio paso, el voltaje de referencia (PIN15 del L297 ) es reducido por un factor de
1,41 al instante en que ambas bobinas estan energizadas. La presente configuracion
61
Captulo 5. Electronica
logra tener dos estados de torque dependiendo del estado de las bobinas, con lo
cual, hace que el comportamiento sea mas homogeneo ante la conmutacion de las
bobinas.
El objetivo principal es restituir el torque que se tendra en modo de paso
completo pero sin perder las ventajas obtenidas por trabajar en modo de medio
paso (eliminaci
on del fen
omeno de resonancia y gran reduccion
de ruido). Incrementando la corriente que va a la bobina activa en un factor de 2, se llega as a
tener alrededor de un 95 % del torque correspondiente al modo de paso completo.
La Figura 5.15 presenta la comparacion del torque en funcion de la frecuencia
para los distintos modos de operaci
on, donde se aprecia que con el agregado de
la variacion de torque (HALF STEP WITH-SHAPPING) se restaura este casi al
maximo obtenido en modo de paso completo. Ademas en la Figura 5.16 se muestra
la forma de onda de la corriente de una bobina en modo de medio paso tanto sin
(5.16(a)), como con (5.16(b)) control de torque, donde se aprecia el incremento en
la amplitud de la corriente para el segundo caso.
Figura 5.15: Graficos comparativos de los modos de operacion. Torque-frecuencia: paso completo vs medio paso vs medio paso (2 estados de torque). Figura tomada de [66].
Figura 5.16: Graficos comparativos de los modos de operacion. Figura tomada de [66].
mencionado en la Subsecci
on 5.2.3). Esto
incrementa la corriente por la bobina activa proporcionalmente al voltaje de referencia (como ya se menciono en la Seccion
5.2.3), compensando el torque perdido en esta situacion.
Tambien se realiz
o la correcta ubicacion de los capacitores mencionados en
la Secci
on 5.2.3. Adem
as se agregaron capacitores electrolticos en paralelo a los
cer
amicos ya existentes a la entrada y salida del regulador, con el objeto de complementar el filtro de ruido de la fuente.
En la Figura 5.17 se presenta tanto el esquematico como el layout de la nueva
versi
on del controlador de los motores descrita en la presente subseccion. Cabe
destacar que a partir de la presente version existen 2 jumpers que permiten tomar
la decisi
on de trabajar utilizando o no el control de torque.
Al realizar las pruebas de este circuito, las se
nales que se observaron a traves
del osciloscopio sin un motor de prueba conectado eran de la forma esperable. Pero
se detect
o una componente grande de ruido en los pines de entrada del L297 en
especial en la se
nal de reloj. Tambien eran notoriamente ruidosas las se
nales de
fase (A, B, C y D) con lo cual las se
nales amplificadas a las salidas de los puentes
se vean afectadas. Con se
nales de reloj de baja frecuencia se comprobaba que
la generaci
on era correcta a pesar del ruido (ver Figura 5.18, se aprecian se
nales
peri
odicas de T 16s), pero al ir aumentando la frecuencia el ruido era mucho
m
as considerable, deformando de tal manera las se
nales que era imposible esperar
que el motor fuera excitado correctamente.
Al observar el dise
no para lograr establecer porque el presente circuito era
tan vulnerable a interferencias, se detectaron algunas practicas no recomendadas
en un circuito impreso. Por ejemplo, las compuertas AND que no se utilizaban no
posean conectadas a tierra ni las entradas ni las salidas. Luego, las trazas de tierra
recorran todo el circuito, en lugar de tener varios caminos (uno correspondiente a
cada bloque) y que se conecten en estrella a un punto.
Versi
on 2.0 Se decidi
o realizar el PCB nuevamente, corrigiendo las malas
pr
acticas mencionadas. Una imagen del circuito fabricado puede verse en la Figura
5.19.
Con esta versi
on se iniciaron las pruebas de los distintos ejes de la estructura.
Al trabajar bajo carga hubo que prestarle atencion al tema de la disipacion tanto
en el regulador de voltaje como en el L298. Es as que se colocaron disipadores
de un tama
no que no estaba previsto en el circuito impreso mencionado (esto
claramente se aprecia en la Figura 5.19. Para esta etapa no se uso el control de
torque.
63
Captulo 5. Electronica
Version 3.0
Luego de haber trabajado en varias pruebas en distintas condiciones con el driver de la versi
on descrita en la Subseccion 5.2.3, se concluyo que hasta el momento
cumpla con los requisitos para ser utilizado en el prototipo a construir. La tension
de alimentaci
on que se decidi
o utilizar es de 24V , siendo la tension maxima que
64
(a) OUT 1.
(b) OUT 2.
(c) OUT 3.
(d) OUT 4.
Figura 5.19: Fotografa tomada durante los primeras pruebas realizadas al eje X utilizando la
versi
on 2.0 del driver.
Captulo 5. Electronica
El controlador dise
nado presenta dos posibilidades para resolver dicho problema. En el integrado de control (L297 ) hay presente una entrada CONTROL. Si
en el pin 11 correspondiente a esta entrada se aplica 5V , hace que haya un control
de corriente que act
ua directamente sobre las salidas de fase.
Este control tiene como fin hacer que no se pierda el estado de las bobinas
entre distintos movimientos, logrando que haya un torque de mantenimiento. Para
lograr esto evitando el problema mencionado, lo que hace es mantener alimentadas
las bobinas pero con un nivel mas bajo de corriente.
El L297 tiene dos controladores de corriente de carga en forma de dos PWM
choppers, en el presente prototipo es una para cada bobina de un motor PAP
bipolar [64]. Cada chopper es compuesto por un comparador, un flip flop y una
resistencia de sensado externa (ya mencionadas anteriormente). Luego hay un oscilador que genera pulsos para ambos choppers. La frecuencia de este oscilador se
ajusta con una resistencia y un capacitor externos, cuyo valor queda determinado
1
por: 0,69RC
, recomendando no usar resistencias menores a 10k. La determinaci
on de esta frecuencia es un compromiso entre que quede fuera del rango audible
(mayor a 20kHz) y la disipacion en los motores durante el reposo (a mayor frecuencia de chop, mayor calentamiento). En la Figura 5.21 se presenta un esquema
del circuito de chopeo.
El funcionamiento b
asico es el siguiente: el flip flop es seteado por cada pulso proveniente del oscilador, habilitando la salida y permitiendo que la corriente
Captulo 5. Electronica
Figura 5.23: Se
nales destacables obtenidas con el control de corriente de carga. A y B se
nales
de fase para una bobina, se
nal de inhabilitacion, corriente por resistencia de sensado y corriente
de carga (diente de sierra, debido a que con la bobina se logra un integrador). Figura tomada
de [64].
Captulo 5. Electronica
layout en la Figura 5.26 y una fotografa del primero en la Figura 5.27 de los
cuatro drivers fabricados por los integrantes del grupo del presente proyecto.
70
Captulo 5. Electronica
(a) Display.
(b) Joystick.
Figura 5.28: Elementos que componen la interfaz con el usuario.
Display
Para el manejo del display no se utilizo un driver, sino que se hizo uso de
la biblioteca LiquidCristal del Arduino [68], la cual brinda varias funciones para
manejar el display, como por ejemplo posicionamiento del puntero en la pantalla,
la impresion de c
odigos ASCII, y la creacion de nuevos comandos. Las dimensiones
del display, que se eligi
o es de 20 4, lo que significa que tiene 4 filas, y en cada
fila entran 20 caracteres, y se puede ver en 5.28(a). Ademas vale destacar que el
display elegido permite regular el contraste variando la tension en unos de sus
pines, esta tensi
on debe variar entre 0V y 5V por eso se conecto un potenciometro
para variar el contraste a conveniencia. Como tambien se utilizo un switch para
encender y apagar la iluminaci
on de fondo.
72
Captulo 5. Electronica
Vidrio
Fuente de corriente - MOSFET
Realimentaci
on - Medici
on de la temperatura (LM35)
El PCB ser
a el elemento que se calentara, este es un circuito impreso en una
placa de cobre con forma de laberinto, como se ve en la Figura 5.29. Por este
circuito circular
a una alta corriente que provocara un aumento de temperatura
para disipar la potencia electrica suministrada. La potencia estara determinada
por la tension con la que se alimente la heated bed y la resistencia electrica de la
misma.
La resistencia de la cama caliente dependera de las dimensiones de la superficie
de impresion, del ancho de las pistas y de la distancia entre estas, siendo estas dos
u
ltimas las variables que se calcular
an. Para este calculo se programo un script
en Matlab, que necesita como entradas el largo y el ancho u
til de la mesa, y la
resistencia buscada. A partir de estos valores, constantes y alguna estimacion se
realiza la cuenta como:
Ln
(5.4)
S
Siendo n la cantidad de trazas que entran en el ancho, esto responde a una
estimacion. S es el ancho de la traza por el espesor del cobre. El largo y el ancho
se pueden ver en la Figura 5.30.
El vidrio cumple tanto con la funci
on de aislar electricamente el PCB de cualquier material que se apoye sobre la mesa de impresion, como con la funcion de
realizar una transferencia de calor m
as estable y mejor distribuida. Ademas, el
vidrio brinda una superficie lisa donde la pieza impresa se vera libre de posibles
imperfecciones que podran surgir por una superficie con irregularidades. El vidrio
se afirma al PCB con pinzas.
R=
74
75
Captulo 5. Electronica
P =
U2
122
=
= 120W
R
1,2
(5.5)
proyecto un ancho de pistas de 6mm con una separacion entre ellas de 1mm. Con
estas medidas se deduce una resistencia de 1,3, que con una alimentacion de 12V
disipar
a una potencia de 110W , potencia suficiente para llegar a los 60 C y que
llega casi al m
aximo de la potencia de la fuente de computadora que se pensaba
utilizar, la cual puede entregar 10A en 12V . El PCB al ser demasiado grande se
dividi
o en cuatro para su construccion, el dise
no de cada uno se puede apreciar en
la figura 5.30 y el armado de los cuatro en la Figura 5.32.
Captulo 5. Electronica
cia de la maquina, y que interact
ua con el resto de la electronica.
78
Captulo 6
Software
6.1. Arquitectura general y descripcion
En las siguientes secciones se realizara una descripcion del software desarrollado
que no busca ser exhaustiva mas s clara y precisa ayudando a la compresion del
lector. Con este fin es que se presenta en la Figura 6.1 un diagrama de bloques de los
m
odulos de software programados, en que plataforma corren y como se relacionan
entre s y con la electr
onica y la mecanica del presente proyecto. Antes de empezar
se aclara al lector que los modulos implementados en Arduino se desarrollaron en
lenguaje C, conform
andose as cada uno por un archivo nombre.cpp(la extesnsion
de C++ es necesaria para levantar los .c en Arduino) y nombre.h. Por otro lado,
es software de en la placa Raspberry Pi se desarrollo en Python
Las principales tareas que debe cumplir la plataforma XYZ son la de impresion
3D y fresado. Para alcanzar dicho objetivo, se implementaron dos modulos, denominados main de impresi
on y main de fresado. Los algoritmos que implementan
los anteriores m
odulos resultan similares, gracias a la similitud del funcionamiento
entre routers CNC e impresoras 3D.
Para poder llevar a cabo una impresion o fresado, se debe emplear la inter
faz usuario-m
aquina, para elegir la opcion correcta. Esta
u
ltima esta constituida
por un display para visualizar mensajes, un joystick y dos botones para realizar
selecciones. El bloque de software que monitorea entradas y da salidas a estos
componentes de la electr
onica se implemento como display.cpp y display.h.
El proceso de impresi
on o fresado sigue el siguiente camino. Partiendo de la
placa Raspberry Pi, con el archivo en el formato obtenido a la salida del software
generador de G-code, se inicia la transmision del mismo hacia el Arduino. Este
proceso se desencadena mediante un pedido del Arduino y los G-code se van almacenando en un buffer hasta que este se llene. Como siguiente paso, comienza el
procesamiento de los comandos G-code almacenados. El flujo que sigue la informaci
on es el indicado en la Figura 6.1 por las flechas indicadas con un 1 o 3 en la
seg
un el caso.
Por lo tanto, por cada comando G-code obtenido del buffer, el mismo se interpreta en el m
odulo formado por interprete.cpp y interprete.h obteniendose un
Captulo 6. Software
Figura 6.1: Diagrama de bloques del software e interaccion con electronica y mecanica.
Captulo 6. Software
Objetivo
Configurar a dicho computador como punto de acceso inalambrico (WAP por
sus siglas en ingles: Wireless Access Point) de la maquina a construir. Es decir, se
debera crear una red, la cual debe estar publicada de forma inalambrica y a traves
de este punto de acceso se debe dar conexion a los dispositivos que deseen mandar
un trabajo a imprimir o fresar.
Solucion
Para poder llevar a cabo el objetivo presentado, se tomo como base el artculo
Setting up a Raspberry Pi as a WIFI access point [76].
A continuaci
on se presentar
a una serie de pasos a seguir, por mas detalles ver
[76]. En estos pasos se destacar
an datos que sean especficos de nuestra maquina.
En primer lugar, se procedi
o a instalar un adaptador de red inalambrica TP
LINK TL-WN725N [77] debido al que el computador no lo tiene incluido. Este
se
eligio por estar en la lista de los recomendados para usar con la Raspberry ( [78])
y ademas por ser de los m
as econ
omicos y robustos presentes en el mercado local.
Luego de configurado dicho adaptador, se verifica el correcto funcionamiento
conectando a alguna red inal
ambrica el computador Raspberry Pi. Antes de seguir
adelante hay que asegurar conexi
on cableada a alguna red con salida a internet.
Esto se debe a que cuando se configure el computador como punto de acceso de
la red interna, no se podr
a conectar el computador inalambricamente a ninguna
otra red, con lo cual para no dejar al computador aislado se lo deja conectado va
cable ethernet.
Despues de haber probado ambos tipos de conexion, se esta seguro que el
adaptador funciona correctamente y que se tiene salida a internet. Se procede a
82
Valor
192.168.19.0 mascara 255.255.255.0
192.168.19.10 a 192.168.19.60
192.168.19.255
192.168.19.3
Dato
Interface
Driver
SSID
Hardware mode
Seguridad
Seguridad password
Canal
Valor
wlan0
rtl8818eu
DIRECT-modular3D printer
g
WPA2
modular3D
6
Captulo 6. Software
Figura 6.3: Vista de un dispositivo que encuentra la red de la maquina (SSID recuadrado).
Trabajo futuro
Actualmente, luego de establecer la conexion inalambrica, para el envo de archivos a la plataforma se necesita utilizar alg
un software adicional de transferencia
de archivos en redes, para cumplir el objetivo de que el archivo de trabajo quede almacenado en el computador en el directorio correcto. En particular, para el
La cola de trabajo debe ser FIFO (First Input First Output -el primero que
entr
o, ser
a el primero en ser atendido-) con lo cual el computador debera poder
levantar el archivo que hace mas tiempo esta en el directorio de trabajo.
Se busc
o que la soluci
on que implementa la presente comunicacion sea robusta
frente a problemas de comunicacion Serial. Aspectos de este tipo se presentaran
en las subsecciones 6.3.2, 6.3.3 y principalmente 6.3.4.
6.3.2. Raspberry Pi
En la Raspberry Pi, se realizo un script de Python con el nombre de main.py
en el cual mediante el uso de excepciones se logra conocer el puerto donde se
encuentra conectado el microcontrolador Arduino. Dicho dato es esencial para
poder entablar una comunicacion Serial entre ambos dispositivos.
Se parte de conocer que la version de Linux instalada en el computador (Debian) entiende al Arduino como un dispositivo tty (teletype), en particular si se
lo conecta a traves de un HUB USB, lo ve como ttyACM y si se conecta directo
a uno de los puertos USB del computador, lo ve como ttyUSB. Dependiendo del
conexionado hay que cambiar en el script que tipo de dispositivo es con el que se
quiere establecer conexi
on.
85
Captulo 6. Software
Luego de definido lo anterior, se debe recorrer el listado de los dispositivos de
este tipo e ir probando establecer comunicacion, aqu es donde aparece el manejo
de excepciones ya que si el computador trata de establecer comunicacion y no
puede, da error de ejecuci
on y se sale del programa. Con las excepciones se capta
cada uno de los errores y se trata de establecer comunicacion con otro dispositivo,
hasta encontrar al microcontrolador Arduino. La confirmacion de que se establecio
la comunicaci
on con el dispositivo correcto se da cuando el computador recibe un
string particular pre establecido.
La ejecuci
on presentada hasta el momento en el computador se corre apenas
se levanta el sistema operativo y se queda ejecutando (como daemon) hasta recibir
el aviso del Arduino de que se va a comenzar a imprimir. Recien ah se da paso
al llamado de otro script denominado imprimir.py , cuyo comportamiento se
describe a continuaci
on. En la implementacion de otra aplicacion de la plataforma,
como podra ser el fresado, se llamara a otro script coherente.
Primero se manda un reconocimiento (ACK) al microcontrolador. Luego, se
busca en el directorio de trabajo cu
al es el archivo que hace mas tiempo esta en
el directorio. Esto se hace a traves de la funcion time.ctime(file) la cual otorga
datos del archivo con respecto al sistema de archivos del presente computador (es
decir no son datos genericos del archivo), en particular brinda el tiempo UNIX de
cuando se guard
o en el directorio de trabajo.
Luego de establecida la comunicacion y determinado el archivo de trabajo, se
pasa a escuchar al microcontrolador para saber c
uando enviarle un G-code.
El programa entra en un for, en el cual el computador levanta la primera
lnea del archivo, si no es un comentario (no comienza con ;) espera a que el
microcontrolador pida un G-code, cuando le llega esta solicitud escribe en el puerto
Serie la lnea que es enviada al Arduino. Luego sigue realizando las repeticiones
establecidas por el for reiterando lo anterior para las siguientes lneas del archivo.
6.3.3. Arduino
En el otro extremo se tiene al microcontrolador, en particular, estan presente
los modulos MainImprimiendo.cpp (interfaz MainImprimiendo.h) y buffer.cpp (interfaz buffer.h).
Luego de la inicializaci
on del sistema y de la preparacion de la maquina para
el proyecto (calibraci
on, nivelado correcto de mesa, origen alto nivel), se llama a
la funcion void MainImprimiendo(void).
En esta funci
on se entra en un loop del cual se saldra al terminar el programa.
En un principio se manda el string ya mencionado, que le confirma al computador
que el mismo encontr
o al dispositivo (microcontrolador) correcto. A continuacion
el microcontrolador se queda esperando un ACK de la RPi.
Finalmente, al ya tener totalmente confirmada e inicializada la comunicacion
empieza el intercambio de informaci
on para ahora s tratar al archivo de trabajo.
En caso de que el buffer de entrada no este lleno, se enva por el puerto Serial
el caracter de solicitud de G-code hacia la RPi. Luego se llama a la funcion char
*LeoGcode() la cual devuelve un puntero a caracter.
86
Captulo 6. Software
edicion 2014 [57] al que fue necesario realizar una serie de modificaciones para el
proyecto de grado.
Especificacion
El modulo de control de bajo nivel trabaja en un universo de pasos para la
posicion y cantidad de pulsos de un Master Clock (MCLK) que define velocidad.
Por lo tanto, las entradas al m
odulo que se definieron son la posicion absoluta
en pasos referida a un cero mec
anico y la velocidad en cantidad de pulsos de
MCLK para cada eje y extrusor. Para fijar ideas, esas entradas surgen desde las
capas superiores de software, pero ademas existen entradas provenientes desde el
hardware. Estas entradas hacen referencia a cambios de estado en los finales de
carrera y/o bot
on de emergencia. En cuanto a las salidas del modulo, estas deben
ser las entradas a los controladores de los motores paso a paso:
Enable: se
nal encargada de habilitar o no el funcionamiento de cada uno de
los driver ; cuando est
a en nivel bajo no se generan salidas hacia los motores.
Sentido: se
nal que da el sentido de giro del motor.
/Reset: se
nal activa por nivel bajo. Lleva las salidas al motor a un estado
inicial (home).
Clock: por cada pulso bajo de esta se
nal el motor se mueve un paso o medio
paso (ver Captulo 5). La se
nal tiene un ciclo de trabajo elevado, debido a
que la parte baja del perodo de reloj es cercana a los 5s.
Para la generaci
on de las salidas se deben tener en cuenta algunas limitaciones
fsicas de la electr
onica. En la Figura 6.5 se puede apreciar un diagrama de tiempo
de la se
nales de entrada al integrado L297 presente en los drivers. La Tabla 6.3
resume los valores que deben ser respetados para la generacion de las se
nales.
Figura 6.5: Diagrama de tiempos de las entradas al integrado de control presente en el driver.
Figura tomada de [20].
Se especifica tambien que el bajo nivel sea el modulo responsable de dar respuesta al alto nivel sobre la posici
on actual, posicion objetivo y velocidad. Lo
88
Tabla 6.3: Limitaciones de tiempos impuestas por el integrado de control (L297 ) de los drivers.
anterior se desprende naturalmente al ser el modulo que maneja el registro confiable de dichas magnitudes. Se implementara explcitamente funciones de consulta,
que ser
an utilizadas por los modulos superiores para tomar distintas acciones. Se
encargar
a de atender el sistema de seguridad formado por los seis fines de carrera
correspondientes a los extremos de cada uno de los tres ejes del posicionador y por
un pulsador de emergencia.
Por ser el sistema de bajo nivel un sistema crtico y esencial para el desarrollo
de la m
aquina, siempre debe dar respuesta hacia el alto nivel reportando cual es
el estado luego de cada movimiento. Por ejemplo debera retornar un ok si el
movimiento se ejecut
o correctamente, o retornar un aviso de que alg
un final de
carrera se accion
o pudiendo tambien brindar la identificacion de este. En tanto
que si el bot
on de emergencia es pulsado debera tomar algunas acciones y reportar
la situaci
on al alto nivel para que complete la atencion con otras acciones. La
forma de brindarle la robustez descrita al modulo sera implementando un retorno
de errores a las capas de software mas altas.
Diseno e Implementacion
En la Figura 6.6 se aprecia el diagrama de bloques del control de bajo nivel de
los motores y c
omo se relaciona con las capas superiores de software y el hardware
(drivers, finales de carrera).
La comunicaci
on de la informacion entre en alto nivel y el bajo nivel en esencia se hace mediante la escritura y lectura de registros para la posicion actual,
la posici
on objetivo y la velocidad. Dichos registros se implementan en el modulo
ControlXYZ E.cpp con sus respectivas funciones para manejarlos y consultarlos.
El movimiento se realiza cuando se hace un llamado a la funcion error *stepper()
del m
odulo stepper.cpp. El detalle de su funcionamiento e implementacion se
explica m
as adelante, pero basicamente lee los registros que se escriben desde el
alto nivel y act
ua respecto a la informacion brindada. Hace uso de la batera de
funciones implementada en layerHW.cpp (la capa hardware del proyecto importante para la portabilidad) para manejar adecuadamente los puertos de salida y
recibir informaci
on de los de entrada. Devuelve un posible codigo de error que se
define en la interfaz error.h. El alto nivel tomara una decision dependiendo de
este c
odigo.
Para implementar el movimiento de cada motor se debe generar un reloj como
89
Captulo 6. Software
Figura 6.6: Diagrama de bloques bajo Nivel e interaccion con Alto Nivel.
se detalla en la especificaci
on. Cada pulso bajo del mismo equivale a un incremento angular que realiza el motor. El dise
no que se propone se basa en el uso de
un MCLK para determinar los instantes en que se debe atender cada uno como
subm
ultiplos de la frecuencia del mismo. Para ello, se implementa a partir del
mismo cuatro timers virtuales; contadores de pulsos del reloj principal (el Master
Clock ) para cada motor. Cuando llegan a la cuenta seteada, se debe realizar un
paso. En la Figura 6.7 se puede observar el reloj principal y como se generan los
relojes para cada motor a partir del mismo.
Captulo 6. Software
Figura 6.8: Diagrama de flujo, donde se observa la implementacion del Round Robin con el
control de los motores, los finales de carrera y el boton de emergencia.
92
Captulo 6. Software
(a) Comparaci
on reloj de motor X
con reloj para motor Y.
(c) Comparaci
on reloj de motor X
con reloj para motor E.
Figura 6.9: Se
nales de Clock a 22KHz para cada driver del motor paso a paso.
Bloqueo de motores
Verificaci
on del resto de se
nales al driver de los motores
Empezando por el primer punto, dicha prueba consistio en la generacion de
cuatro ondas rectangulares para el caso de exigencia maximo, el caso de cuatro
ondas con frecuencia del Master Clock, el cual se llego a fijar en 22KHz siendo este un lmite impuesto por la capacidad de procesamiento y la metodologa
implementada para la soluci
on.
Los relojes generados se observaron mediante el osciloscopio siempre en comparacion con el generado para el driver del motor X, o sea, se observo para X
e Y, para X y Z, y para X y E. Es importante resaltar que en este punto fue
necesario inhibir la salida del Round Robin por llegada al setpoint para no tener
un tiempo lmite de observaci
on de dichas se
nales. En las Figuras 6.9(a),6.9(b) y
6.9(c) podemos observar los resultados obtenidos.
Una observaci
on que podemos realizar de forma cualitativa al observar las
imagenes anteriores, es que el retardo de las se
nales para Y, Z y E aumentan con
Problemas y soluciones
Como se adelantaba al inicio de esta seccion el control de bajo nivel desarrollado
en el proyecto CtrlMotors3D, no satisfaca en su totalidad las necesidades del
presente proyecto de grado. Los problemas mas relevantes producto de dichas
necesidades se introducen a continuacion.
Migraci
on de entorno de desarrollo: el presente proyecto planteo como entorno de desarrollo de software el IDE de Arduino, y el mismo se implemento
en AVR IAR.
Nuevas funciones: algunas funcionalidades nuevas surgieron conforme avanzaba el proyecto.
Wachtdog Timer : la necesidad de agregar robustez hizo necesario evitar el
bucle infinito para ciertas entradas poco comunes al bajo nivel
Control de velocidad: alcanzar ciertas velocidades necesita de un control de
velocidad, como puede ser un control lineal de velocidad.
En los pr
oximos p
arrafos se brindara al lector el detalle y solucion para cada
punto anterior.
Migraci
on de entorno de desarrollo
La versi
on del control de bajo nivel de los motores paso a paso se implemento
en primera instancia bajo el entorno AVR IAR, una herramienta muy potente al
momento de programar, brindando un gran abanico de posibilidades para el debug
de la misma, esta cualidad fue vital para llevar a cabo la version presentada en
el proyecto CtrlMotors3D. Sin embargo, en el proyecto de grado Modular3D
se apunt
o a utilizar el entorno de Arduino, el cual no cuenta con herramientas de
debug poderosas, pero complementa con la disponibilidad de libreras que han de
ser de utilidad para la programacion de mas alto nivel, facilitando algunas tareas.
En principio ambos entornos usan compiladores diferentes (AVR GCC y AVR
IAR C/C++ compiler), pero ademas al estar Arduino pensado para trabajar a muy
alto nivel algunas de las soluciones que brinda son en principio implementadas de
forma desconocida para el usuario. Antes de avanzar en el detalle de estos cambios
se listan las partes del c
odigo que debieron ser revisadas.
Macros del c
odigo 1 .
Libreras.
Declaraci
on de interrupciones.
1
95
Captulo 6. Software
Manejo y uso de Timers.
La Tabla 6.4 resume los macros del entorno AVR IAR que se debieron cambiar
por compatibilidad con compilador de Arduino IDE. Ademas para que el cambio
resultara exitoso se debi
o agregar la librera util/delay basic.h.
Funcion
Pausar el microcontrolador
Habilitar interrupciones
Deshabilitar interrupciones
Para la declaraci
on de las interrupciones se agrego una librera denominada
avr/interrupt.h y se cambio de la declaracion de las mismas como se muestra a
continuacion.
#pragma vector = TIMER1 COMPA vect
interrupt void ticsMasterClocks(void)(
...
...
)
A realizarse de la siguiente forma:
ISR(TIMER3 COMPA vect)(
...
...
)
En cuanto al TIMER 1 de 16 bits que se utilizaba para generar el Master Clock
que rige el movimiento de los ejes, se debio cambiar por el TIMER 3 tambien de 16
bits. Lo anterior fue necesario ya que el TIMER 1 es utilizado en el macro delay(t)
y delaymicrosecond(t) de Arduino los cuales podran ser de utilidad en alto nivel.
Por otro lado, se descubri
o que al configurar los diferentes bits de los registros de
control del TIMER como TCCR3A, TCCR3B y TIMSK3 2 , se deben configurar
todos los bits y no asumir que aquellos no seteados tendran valor bajo.
Nuevas funciones
Para cumplir con todas las funcionalidades requeridas por el alto nivel, se
comentan aquellas particularmente importantes.
Se realiz
o una funci
on para setear la posicion actual de cada eje a un valor
determinado por el alto nivel. Dicha funcion se denomino setPosicion(eje k eje,
unsigned long int val) y recibe como entrada el eje al que se desea setear su posicion
y el valor en cantidad de pasos para esto. La necesidad de esta funcion radica en
como realiza el control de bajo nivel para determinar el sentido del movimiento, el
2
96
Captulo 6. Software
#pulsosM clk
65535
=
= 3s
FM clk
22000
(6.1)
Captulo 6. Software
a que se cambia la tasa de conmutaci
on de la corriente por los bobinados, lo cual
determina a que velocidad podr
a girar el motor.
Esto podra llevar a pensar que no sera necesario realizar un control de velocidad con este tipo de motores. Sin embargo, existen razones por la cual se debe
realizar. En la Figura 6.11 podemos apreciar la dependencia del torque con la velocidad y adem
as el fabricante proporciona un valor de frecuencia fs que determina
un lmite para la velocidad inicial del motor.
Figura 6.11: Curva de torque velocidad para un motor bipolar. Imagen extrada de [81].
Se recuerda al lector, que cada pulso enviado al driver del motor PAP resulta
en un paso del mismo, por lo tanto, la velocidad en pasos por segundo equivale a
la frecuencia de la onda cuadrada que excita al controlador. Entonces, si se supera
inicialmente este umbral declarado por el fabricante del motor, es de esperar un mal
funcionamiento debido a perdida de sincronizacion. Este problema es crtico para el
posicionamiento pero es solucionable realizando un control lineal de velocidad, de
otra forma aplicando una aceleraci
on constante para alcanzar velocidades incluso
mayores a fs . Es importante mencionar, como en secciones anteriores y como se
observa en la Figura 6.11, que el torque depende de la velocidad y se ve disminuido
a mayores velocidades.
Por otro lado, tambien existen motivos para realizar un control de velocidad
con desaceleraci
on constante antes de terminar un movimiento. La principal razon
que se menciona en [81] es que se debe llevar la velocidad del motor a un nivel al
cual se pueda detener despreciando la inercia del eje. De lo contrario se realizaran
pasos que podran llevar a un error considerable en los contadores de pasos del
software de control. Lo anterior es particularmente crtico cuando se controlan en
lazo abierto, como es el caso del presente proyecto. En la Figura 6.12, podemos
apreciar un perfil de velocidad trapezoidal tpico, el mismo es una version ideal
de lo que ocurre en la realidad, donde realmente la rampa es formada a partir de
escalones. Se puede apreciar en la Figura 6.13.
100
Figura 6.13: Perfil de velocidad vs. velocidad (pulso/sec) motor stepper. Imagen extrada
de [83].
Existen diferentes algoritmos para la obtencion de un perfil de velocidad adecuado. En [84] por ejemplo, se plantea el uso de la realizacion del control de
velocidad en tiempo real para microcontroladores de mediano porte mediante el
uso de una aproximaci
on que ahorra recursos del sistema.
En el presente proyecto no se opto seguir ning
un algoritmo en particular e implementar una versi
on que pueda resolver las necesidades para el posicionamiento
de manera b
asica, buscando un perfil de velocidad que cumpla con las siguientes
hip
otesis:
Durante la impresi
on o fresado los movimientos en mas de un eje tienen la
misma duraci
on, por lo tanto se requiere un control de velocidad para acelerar/desacelerar que permita realizar un aumento de velocidad coordinado
entre los motores involucrados.
101
Captulo 6. Software
La anterior afirmaci
on implica que incluso el motor del extrusor debera
poseer un perfil de velocidad adecuado, para evitar sobre extrusiones al
principio y menor cantidad de deposicion al final de un movimiento.
El algoritmo debe soportar al menos tres ejes en simultaneo, ya que durante
una extrusi
on se mueven hasta tres, X Y E ; Z se mueve durante un trabajo
solo, pero sin extruir puede darse un movimiento en X Y Z.
Las anteriores consideraciones en lo referente a la simultaneidad de operacion
de los distintos grados de libertad son tpicas de las maquinas de control numerico,
ya que el objeto a imprimir o fresar se realiza mediante capas a lo largo del eje Z.
Solucion
Para lograr que los motores que intervienen en un movimiento simultaneo incrementen su velocidad de forma que la duracion de cada movimiento separado
sea la duraci
on del movimiento completo, se debe aplicar una misma aceleracion
a los motores. En el caso de un perfil trapezoidal sera misma pendiente. El razonamiento es el mismo para la desaceleracion.
La ventaja de poseer un u
nico Timer que gobierne el movimiento de todos los
motores, es posible variar la frecuencia del mismo afectando de manera igualitaria
a todos los grados de libertad. Lo anterior se hace variando la cuenta con que se
programa el MCLK (registro OCR3A del Timer 3 ) para que el mismo realice sus
interrupciones. Se deben fijar entonces dos lmites, una cuenta mnima que determina la frecuencia nominal del Master Clock y una cuenta maxima que determina
la cadencia mnima con la cual se interrumpe.
La velocidad con que se realizan los incrementos angulares (pasos) en cada
motor se determinan fijando una cuenta de pulsos del MCLK, en otras palabras un
Timer Virtual para cada motor como ya se ha explicado antes. Por lo tanto, si un
motor se mueve a una fracci
on entera de la frecuencia del MCLK, este alcanzara su
velocidad de crucero (regimen) cuando el reloj principal alcance la cuenta mnima.
Si se mueve m
as de un motor, el efecto transitorio de aceleracion y desaceleracion
afecta a todos los motores con igual proporcion.
La cuenta mnima que se manejaba al momento de la implementacion era
OCR3A = 0 378 = 889, lo que determinaba un MCLK nominal de 18KHz.
El lmite inferior, se situ
o arbitrariamente en OCR3A = 0 F A0 = 64000 que
equivale a 250Hz, este es un valor no muy chico y en principio adecuado. Si
fuese mucho menor, del orden de 1Hz, se demorara demasiado en comenzar los
movimientos. Ambos lmites se pueden llegar a ajustar en el codigo si se encontrase
una combinaci
on m
as
optima.
Otro paso importante a realizar es evaluar cuanto tiempo es razonable que
se demore en llegar al regimen, un segundo es un valor adecuado para comenzar
a probar ya que no hay movimiento mucho mas cortos en promedio. Se debe
determinar en cuanto se reduce la cuenta del Timer 3 en cada iteracion hasta
alcanzar la frecuencia nominal. Para ello se tiene como dato, la frecuencia del reloj
del sistema, la cuenta inicial y el tiempo que se estima adecuado para invertir en
acelerar o desacelerar. El metodo empleado es restar por cada interrupcion una
102
C0 C1 C2
Cn
+
+
+ ... +
f
f
f
f
(6.2)
tn =
1
[C0 + (C0 C0 K) + ((C0 C0 K) (C0 C0 K)K) + ...]
f
(6.3)
n
C0
C0 X k
C0 1 n+1
[1 + + 2 + ... + n ] =
=
f
f
f 1
(6.4)
i=0
C0 1
f 1
(6.5)
Si se mantiene fija la cantidad de cuentas inicial y frecuencia del reloj del sistema, se puede variar el tiempo que llega al regimen cambiando el inverso de K.
Por ejemplo dividir entre 128(correr hacia derecha 7 bits de OCR3A) es aproximadamente 0,507s de tiempo de subida en lugar de 1,0s.
Una simulaci
on temprana de los datos, revelo que el perfil de velocidad conseguido, no era trapezoidal. Presenta una curvatura para aceleracion y desaceleraci
on, lo que significa que no se mantiene constante la aceleracion. Lo anterior es
razonable ya que en un principio la proporcion descontada al contador es peque
na
en comparaci
on (se inicia en 0 F A0 = 64000) y en cambio, cuando la cuenta del
Timer 3 se aproxima a 0 378 = 889 descontar la proporcion determinada por
K puede significar un cambio muy marcado en la frecuencia lo que implica que la
aceleraci
on no se mantiene constante. En la Figura 6.14 se muestra una grafico de
los datos determinados por la metodologa aplicada.
Implementaci
on
103
Captulo 6. Software
1
K
= 128.
Figura 6.15: L
ogica del algoritmo de control de velocidad.
P ulsosM CLKy
Nx
Vx
=
=
Ny
P ulsosM CLKx
Vy
(6.6)
Captulo 6. Software
106
Figura 6.17: Ejemplo de los contadores del control de temperatura. Donde se muestran 2
contadores propios de las clase contTemp uno seteado en 10 (50 % del tiempo) y otro en 5
(25 % del tiempo).
107
Captulo 6. Software
Dependiendo de si el error queda por fuera de una banda definida entre [P OR ERROR,
+P OR ERROR], se enciende o se apaga la fuente de corriente por todo el segundo.
Y cuando el error queda dentro de esta banda, el contador se calcula como:
SetpointT emperatura
10
ERROR
P OR ERROR
+
P
OR
Setpoint
Con lo que se establece una correspondencia lineal entre [P OR ERROR,
+P OR ERROR] y [0, 20]. Y se puede apreciar en la Figura 6.18.
108
Tipo dato
acciones t
float
float
float
float
float
char
int
int
int
int
int
int
nombre
accion
datos ejes[4]
datos nuevos[7]
param F
center IJ[2]
param S
message[30]
system coordinates
extruder mode
sentido CW
fan
extrudeON
retract
Descripcion
Enumeracion de acciones para G o M code
Arreglo de cuatro valores para los ejes
Arreglo bandera de datos nuevos
Valor flotante de avance mm/min
Arreglo para centro de movimiento circular
Configuracion temperatura y otros parametros
Arreglo de caracteres de un mensaje
Bandera datos en absoluto o relativo
Idem anterior pero para extrusor
Sentido trazado curvo
Encendido/apagado del ventilador extrusor
Bandera indica extrusion
Indica retraccion filamento
Captulo 6. Software
Se puede apreciar que el camino que toma la informacion se separa en dos
principales caminos, si es un M-code o un G-code. En cada camino se trata de
agrupar aquellos que pueden desembocar en una accion similar, como puede ser
obtener los valores para realizar un movimiento lineal, u obtener los parametros
para luego configurar un setpoint en la temperatura del extrusor o cama caliente.
En un segundo paso se hace una segunda clasificacion dentro del grupo, fijando
los valores correspondientes a ciertas banderas de software pertenecientes a la
estructura de datos que se retorna. En el diagrama de la Figura 6.20 se resaltan
los principales G-code 4 .
110
111
Figura 6.20: Diagrama de Flujo de la funcion comando interpretar(char gcode[ ]).
Captulo 6. Software
6.4.4. Ejecutador
En la presente secci
on se pretende describir el modulo Ejecutador (Ejecutador.cpp
y Ejecutador.h) el cual forma parte del firmware.
Este modulo compone el alto nivel del sistema programado. Conjuntamente
con el modulo interprete.cpp, el objetivo es adecuar los datos provenientes del
codigo de m
aquina al universo de los modulos que componen el bajo nivel. Para
llevar a cabo esta tarea el m
odulo debe conocer la accion que se debe realizar y
en base a esta, teniendo como entrada registros de los datos del codigo de maquina ya interpretados, razonar c
omo debe utilizar dichos datos para obtener en la
realidad exactamente lo que la acci
on representa. Ademas, debe recibir el retorno
de los modulos de bajo nivel para poder devolverle a los modulos principales el
estado en que se encuentra el sistema para que estos decidan como continuar el
funcionamiento. Para comprender m
as claramente la anterior descripcion se puede
consultar el esquema presentado en la Figura 6.1 y para entender los razonamientos se presenta un diagrama l
ogico (no es un diagrama que represente el verdadero
flujo de informaci
on) que presenta la relacion entre los modulos de Interprete,
Ejecutador y Bajo Nivel en la Figura 6.21.
El presente m
odulo se destaca sobre el resto, debido a que las decisiones logicas
que se tomen en la programaci
on se traducen casi directamente en especificaciones
de la maquina, es decir, el c
omo se ejecuta cada accion da caractersticas esenciales
a este tipo de m
aquinas de control numerico. Obviamente, como ya se ha mencionado, el codigo de m
aquina, en particular cada G-code fue interpretado tomando
como referencia la interpretaci
on del firmware Marlin, pero a la hora de tomar
decisiones sobre lo que debe realizar la maquina al ejecutar determinadas acciones
desemboco en elecciones propias.
El modulo tiene dos tipos de acciones para ejecutar: las acciones que solo
112
derivan en setear banderas, cargar datos en algunos registros y las que representan
uso de los m
odulos de bajo nivel (control de temperatura y control de motores).
Este m
odulo posee dos estructuras estaticas de datos, una cuyos elementos son
datos est
aticos y la otra guarda elementos utilizados como banderas estaticas.
Estas estructuras son la fuente de informacion para cada razonamiento a realizar
con el objetivo de ejecutar la accion solicitada de forma correcta. Las mismas se
mantienen coherentes durante toda la realizacion de un proyecto, dando la ventaja
de que a pesar de que durante este se realicen cambios de sistema de referencias,
offset de posici
on, etc, el bajo nivel no sera el encargado de reflejar estos cambios.
De esta forma siempre es el control de bajo nivel el que lleva la verdadera cuenta
de pasos con respecto al cero mecanico.
El alto nivel, basa su sistema de referencia considerando que existe tal cero
mec
anico (origen de coordenadas del bajo nivel) determinado por el accionar de los
tres fines de carrera. Luego, se puede llevar el puntero 5 a una posicion determinada
en la cual mediante una funcion el ejecutador guarda en unos registros esta posicion
que equivale al origen del alto nivel. Entonces siempre que se quiera ir al origen
de coordenadas de software se va a esta posicion. Observando la Figura 6.22, se
aprecia lo mencionado anteriormente. En particular, entre los modulos los ejes X
e Y tiene el mismo sentido pero el Z no. Esta diferencia se contempla para cada
funci
on del seteo de registros 6 .
Por el mismo camino, es de destacar que el presente modulo implementa una
barrera de software, que tiene por objetivo controlar los datos que se guardan en las
estructuras del ejecutador antes de llegar a la ejecucion propiamente dicha. Dicha
5
mediante la utilizaci
on del Joystick, cuyo manejo se implementa en el MovimientoManual.cpp
6
Debido al criterio utilizado, basicamente siempre se va a definir un origen de alto nivel
distinto de cero para el eje vertical. De todas formas para impresiones y fresados, es bueno
obligar esta acci
on para el correcto nivelado de la mesa evitando as estropear tanto a la
misma como al puntero (fresa o extrusor).
113
Captulo 6. Software
barrera no es exclusivamente de bloqueo, sino que tambien toma decisiones para
poder seguir adelante y poder ejecutar la accion. Un ejemplo de esto u
ltimo, se da
al ejecutar la acci
on de movimiento: si la velocidad absoluta que fue interpretada es
mayor a la especificada como m
axima en la maquina, la barrera decide tomar como
velocidad absoluta del movimiento a ejecutar la velocidad maxima especificada, de
esta forma se puede seguir adelante con la ejecucion.
Programacion
El modulo est
a compuesto por varias funciones que pueden verse en la interfaz
del modulo Ejecutador.h. Hay tres funciones pensadas para ser llamadas desde
los modulos principales:
void inicializarEjecutador(): se encarga de inicializar las estructuras mencionadas en la presente secci
on.
void setHomeOffset(): guarda en registros la posicion actual en milmetros y
pulgadas equivalente a la ubicaci
on en n
umero de pasos del bajo nivel en ese
momento. Est
a pensada para ser usada al inicio de determinado proyecto,
para guardar dicha posici
on como el origen de coordenadas del alto nivel.
error *ejecutar(comando cmd): esta es la funcion principal del modulo. Se le
pasa como par
ametro una estructura que contiene los datos y banderas que
se interpretaron en el m
odulo interprete.cpp a raz de un G-code (recordar
diagrama l
ogico de la Figura 6.21).
El primer paso est
a en detectar cual es la accion a ejecutar consultando el
dato correspondiente de la entrada. Luego de esto, se accede a una parte
del codigo que s
olo se encarga de esa accion en particular, pero s usando
otras funciones internas al m
odulo para llevar a cabo la correcta ejecucion
de dicha acci
on.
Dependiendo de la acci
on se almacenan los datos en la estructura del Ejecutador y se revisan las banderas del mismo para ir tomando decisiones. Luego,
seg
un estas banderas los datos guardados son asimilados de forma coherente
para que la acci
on se ejecute de manera correcta. Esto quedara mas claro al
momento de presentar el diagrama de flujo de una accion en particular.
Con el objetivo de realizar una programacion ordenada y sabiendo que se
tienen banderas para conocer el sistema de coordenadas (absoluto o relativo)
y el sistema metrico (milmetros o pulgadas), la gran mayora de las funciones
internas del m
odulo representan versiones para cada combinacion de estas.
Adem
as, se tratan por un lado los calculos correspondientes a los ejes X, Y,
Z y por otro los referidos a la extrusion (eje E).
Recordar que cada dato proveniente de la estructura de entrada debe pasar
por el c
odigo que compone las barreras de software, para recien ser almacenados en las estructuras del Ejecutador. En caso de que algunos de los
datos (posici
on de cada uno de los ejes, velocidad absoluta, temperatura de
la cama caliente, temperatura del extrusor) haga que no se pueda sortear
114
115
Captulo 6. Software
Figura 6.23: Diagrama de flujo para ejecutar la accion de movimiento lineal, extruyendo o no.
116
(6.7)
(6.8)
La ecuaci
on (6.8) se usa para todos los modos de operacion del posicionador
(ejes X, Y y Z). La constante VUELTASxPULGADA depende del tornillos utilizado en cada eje. En particular para el presente proyecto se utiliza el mismo tornillo
para los 3 ejes, el cual posee 12 vueltas por pulgada. La contante PASOSxVUELTA
depende de los motores a utilizar y del modo de operacion de estos (paso completo
o medio paso). En particular, los motores utilizados en este proyecto son de 200
pasos por vuelta, pero el modo de operacion elegido para comandar dichos motores
es modo medio paso. Es por esto que dicha constante toma el valor de 400.9
En caso de estar trabajando en milmetros se debe multiplicar PULGADA
(= 1) por la constante PULGADASaMILIMETROS (100 - 25, 4mm), ya que siempre deben quedar acordes las dimensiones entre distanciaEJE y distanciaPASO,
confirmando que el n
umero de pasos debe ser adimensionado.
Para el caso del extrusor, la relacion es distinta, debido a que por su dise
no lo
que gira el engranaje es igual a lo que avanza el filamento, como se describe en la
Secci
on 4.4.
En las ecuaciones (6.9) y (6.10), se presenta el calculo para hallar los pasos
a dar en el motor correspondiente al extrusor dada una longitud de filamento a
extruir.
distanciaEJEe
distanciaP ASOe
.DIAM ET RO
distanciaP ASOe =
P ASOSxV U ELT A
pasosEJEe =
(6.9)
(6.10)
Donde la constante PASOSxVUELTA presente en la ecuacion (6.10) del extrusor coincide con la del posicionador (6.8), ya que la caracterstica de los motores
es la misma. Luego, la constante DIAMETRO es el diametro del engranaje que
posee el extrusor, especificado en la hoja de datos del mismo [52], teniendo el valor
de 11mm. En caso de trabajar en pulgadas, se debe dividir sobre la constante
PULGADASaMILIMETROS.
8
te.
9
117
Captulo 6. Software
Figura 6.24: Esquema de movimiento en dos direcciones que muestra la diferencia entre forzar
la concurrencia (lnea punteada) o no forzarla (lnea continua).
Entonces, para completar los registros de salida, para luego poder llamar a
la funcion principal del bajo nivel (error *stepper()) y que el movimiento sea
ejecutado est
a faltando la explicaci
on de como se llega a tener las velocidades
de cada eje. La velocidad en el bajo nivel se entiende en cantidad de perodos
del Master Clock , siendo el tiempo que demora en dar un incremento angular el
motor.
Es importante mencionar como hip
otesis que los movimientos de cada eje deben
ser concurrentes. Cuando se debe ir a un punto para el cual hay que moverse en
mas de un eje, el puntero debe ir por el camino mas corto. Si no se hiciera de
esta manera y se necesitara imprimir o fresar desde un punto a otro en lugar de
realizarse una recta, el movimiento se descompondra en mas de una, debido a que
los ejes no terminan los movimientos al mismo tiempo.
Para tener claro lo anterior, se puede observar la Figura 6.24, en donde se
toma un movimiento en dos direcciones (analogo para 3 direcciones) presentando
la diferencia que provocara solo exigir llegar a un punto, frente a exigir que se
llegue en cada direcci
on en el mismo instante.
Para explicar la manera en que se define la cantidad de perodos de Master
Clocks para cada eje se presenta el diagrama de la Figura 6.25.
El primer paso es obtener el tiempo que llevara realizar el movimiento. Para
esto se usa la ecuaci
on (6.11), donde deltaEJE depende del sistema de coordenadas,
en modo relativo es directamente el dato guardado en la estructura principal del
ejecutador, pero en el caso de absoluto, se le debe restar la posicion actual para
as tener realmente el avance o retroceso.
p
(x)2 + (y)2 + (z)2
tiempo =
(6.11)
velocidadAbsoluta
Luego, teniendo el tiempo y cada delta de posicion, se halla la velocidad de
cada eje. En el caso que sea movimiento con extrusion se halla tambien la velocidad
del eje E. La relaci
on entre la cantidad de filamento a extruir y el tiempo del
118
movimiento determinado por los datos en los demas ejes restringe las lneas de
deposici
on quedando estas mas finas o mas gruesas.
Observando el diagrama de la Figura 6.25, teniendo la velocidades se pasa a
calcular efectivamente la cantidad de perodos de Master Clock que representaran
dichas velocidades en el universo del bajo nivel.
En las ecuaciones (6.12) y (6.13) puede observarse el razonamiento para averiguar este dato a partir de la velocidad.
cantidadM CLKEJExyz =
tiempoP aso =
tiempoP aso
T M CLK
P U LGADA
V U ELT ASxP U LGADA.P ASOSxV U ELT A
velocidadEJExyz
(6.12)
(6.13)
tiempoP aso
T M CLK
.DIAM ET RO
P ASOSxV U ELT A
velocidadEJEe
(6.14)
(6.15)
Captulo 6. Software
eje tiene las unidades de la velocidad absoluta, recien en el calculo de la cantidad
de Master Clock se hace la equivalencia a segundos ya que debe ser coherente con
el valor que lo normaliza, T MCLK (este esta en segundos por provenir del inverso
de la frecuencia con cual se setea el reloj del timer en el bajo nivel, la cual esta en
Hz).
Finalmente, observando nuevamente el diagrama de la Figura 6.23 llega el
momento de llamar al bajo nivel, para esto se arman dos arreglos: uno con los
registros de pasos y otros con los de cantidades de perodos de MCLK.
Pero, si se observa la Figura 6.23 para el caso en que deba existir extrusion, hay
un momento en que se revisa la temperatura del extrusor y de la cama caliente. Si
estas temperaturas no son las adecuadas para la extrusion, el programa se queda
esperando hasta que las temperaturas esten en un rango correcto para s luego dar
paso al control de bajo nivel de los motores. Se puede dar una salida por timeout,
debido a que si por alguna causa externa nunca se llega a la temperatura adecuada,
el modulo no podra retornar una respuesta hacia los modulos principales debido a
que se quedara esperando a que dicha temperatura sea adecuada para la extrusion.
Flexibilidad operacional soportada
En las tablas 6.6 y 6.7 se presentan las distintas series de instrucciones del
lenguaje de m
aquina (G-codes y M-codes) que son soportadas por el prototipo
fabricado.
Existen m
as instrucciones cuya atencion no ha sido implementada, por no ser
crticas para el correcto funcionamiento (se pueden observar visitando el codigo
que se adjunta del m
odulo interprete.cpp).
G-code
G0
G1
G10
G11
G28
G90
G91
G92
Significado
Movimiento lineal en al menos un eje al punto destino
Movimiento lineal en al menos un eje al punto destino, extruyendo
Retraer filamento seg
un ajustes de M207
Extruir filamento seg
un ajustes de M208
Ir al origen de coordenadas de alto nivel
Trabajar en sistema absoluto
Trabajar en sistema relativo
Setear posicion actual a las coordenadas pasadas como parametro
Tabla 6.6: Instrucciones de tipo G-code que son interpretadas y cuyas correspondientes acciones
han sido implementadas para su correcta ejecucion.
120
Significado
Fijar temperatura objetivo del extrusor
Ajustar extrusor a coordenadas absolutas (por defecto)
Ajustar extrusor a coordenadas relativas
Deshabilitar motores
Ajustar pasos por unidad de los ejes
Desplegar mensaje
Fijar temperatura de heated bed
Fijar temperatura de heated bed
Ajustar offset de alto nivel para homeing
Ajustar largo del filamento a retraer
Ajustar largo del filamento a extruir
Terminar todos los movimientos
Tabla 6.7: Instrucciones de configuracion (tipo M-code).
Main principal
Como se dijo antes el firmware inicia en un men
u padre este es el Main principal. El main principal se compone de 2 funciones el setup() y el loop(), ambas
son caractersticas de los archivos .ino del Arduino. Por fuera de estas funciones
se incluyen las libreras necesarias, como las que incluyen las funciones de los submen
u y otras libreras externas como la que habilita el manejo del pantalla LCD.
Tambien se declara la variable lcd, mediante la funcion pertinente de la librera LiquidCrystal.h, asign
andole los pines mediante a los cuales se controlara la pantalla
lcd.
121
Captulo 6. Software
En el setup() se inicializan variables de uso general como el lcd, ademas se
entabla la comunicaci
on serial, y se ejecuta la funcion del modulo display.cpp que
crea los caracteres que se necesitan mostrar en pantalla no incluidos en la librera.
Calibracion
Cuando se ingresa al submen
u de calibracion desde el Main principal se ejecuta la funci
on calibraci
on la cual implementa un men
u circular analogo al de su
predecesor, las opciones que se pueden calibrar desde este men
u son:
Homing
Calibrar milmetros por paso para el extrusor
Origen de coordenadas del alto nivel
Ajuste de altura de la mesa de trabajo
Homing
Realizar el homing es b
asico para un posicionador, dado que esto significa
encontrar los lmites fsicos (origen mecanico) del prototipo. Esto se hace mediante
los finales de carrera, los cuales son switches ubicados estrategicamente para que
se accionen cuando el posicionador se halle tanto en su posicion mnima como
maxima. Para esto se ejecuta la funci
on del bajo nivel void home all axis(),que
realiza el homing en los 3 ejes simultaneamente.
Calibrar milmetros por paso del extrusor
Cuando se quiere extruir una distancia determinada en realidad la cantidad
extruida realmente difiere por una constante, esta es la que se calibra en este
punto [85].
122
Movimiento Manual
El movimiento manual es una funcion que se puede invocar desde 2 lugares
distintos en el firmware, en el Main Principal para que el usuario pueda desplazar
el puntero con fines recreativos, y desde la calibracion para setear el origen de
coordenadas de alto nivel del posicionador.
En la funci
on se implementa un men
u circular donde las opciones son los
distintos ejes, una vez que se selecciona el eje se ingresa en un submen
u en los
cuales recorriendo con movimientos laterales del Joystick se eligen las distancias
para avanzar, y con movimientos verticales se efect
uan los movimientos en una u
otra direcci
on.
Main de impresion
El void MainImprimiendo() es la funcion que se invoca cuando se ordena
imprimir. La primer tarea es avisar al Raspberry Pi sobre la realizacion de una
123
Captulo 6. Software
impresion para que esta ejecute el algoritmo que implementa la cola de archivos. El
Arduino espera el envi
o de los G-code en este main. El algoritmo que implementa
el Main de impresi
on se muestra en la Figura 6.27.
6.5. Simulador
Para no depender de la comunicacion en el procesamiento de cada uno de
los G-codese decidi
o almacenarlos en un buffer. En el modulo buffer.cpp se
implementa la clase buffer, que consta de un arreglo de string de un tama
no
determinado, y posee accesibles funciones para el manejo de la cola. Estas funciones
permiten encolar y extraer elementos, consultar si el buffer se encuentra lleno o
vaco. Cuando el buffer se sature se da lugar al procesamiento, y cuando este se
vace se repite el proceso hasta que se haya completado el envo de todo el archivo.
El procesamiento de los G-code consta de la invocacion de la funcion comando interpretar(), el resultado de esta se pasa como parametro de la funcion
error ejecutar(comando cmd) y se actualiza la informacion desplegada en pantalla.
Main Fresado
El Main de fresado es analogo al de impresion con la salvedad que cuando se
invoca se debe avisar a la Raspberry Pi que se va a fresar en lugar de imprimir.
6.5. Simulador
6.5.1. Descripcion
Al terminar la esencia de la programacion, se decidio realizar un simulador
con el objetivo de asegurarse que las salidas hacia los motores reproducen de
manera fidedigna el objeto a extruir. De esta forma, se puede asegurar el correcto
funcionamiento o no de etapas. Si hay diferencia entre un objeto terminado y lo
que se esperaba, el simulador permitira saber si el problema es mecanico o de
programaci
on.
En el momento de dise
nar el simulador, se quiso incluir en el mismo todos los
m
odulos programados. Tanto los del microcontrolador como los de la Raspberry
Pi. Para que la simulaci
on sea un reflejo fiel de la realidad se deben correr los
programas de igual forma a si estuvieran conectados los motores. Por esto, temporalmente, la simulaci
on demora lo mismo que si se estuviera imprimiendo el objeto.
Se opt
o por hacerlo de esta manera para registrar los datos en pasos del bajo nivel
finales de cada movimiento para los 4 ejes: xyz + e.
La gran dificultad que se presento es que al Arduino no tener manejo de archivo
(como ya se menciono en la seccion 6.2.1), no hace sencilla la recoleccion de datos.
La soluci
on encontrada fue utilizar en conjunto el software de calculo numerico
Matlab y el Arduino.
En un primer momento, se pensaba poder mantener el criterio de utilizar todos
los m
odulos desde los del computador hasta los del microcontrolador. Pero se tuvo
que dejar por fuera los del computador, ya que como se sabe este enva G-code a
G-code al Arduino por medio de comunicacion serial surgiendo el problema de que
no se puede establecer comunicacion Raspberry Pi-Arduino-Matlab en un mismo
canal de comunicaci
on. Es por eso que se decidio solo simular los modulos del
microcontrolador y en lugar de que los datos de entrada (G-code) vengan desde
125
Captulo 6. Software
un archivo presente en la Raspberry Pi, estaran en la misma PC donde se corre el
simulador.
que contiene los mismos una lnea y la enva por el puerto Serial al Arduino. Este
G-code es guardado en un buffer que dependiendo del tama
no de este, el Arduino
pedira mas lneas del archivo para llenarlo y luego comenzar a ejecutar.
Siguiendo el razonamiento como si el buffer fuera de tama
no 1, en el programa
que esta corriendo en el micrcontrolador se ejecuta el G-code que llego por el
6.5. Simulador
Utilizando lo explicado en el parrafo anterior, para llevar a cabo el simulador se
deben armar las matrices de entrada utilizando los datos guardados en el archivo ya
generado con la recepci
on de datos en Matlab que contiene los datos en cantidades
de pasos. El primer paso es llevar estos datos al sistema de unidades utilizado
(milmetros o pulgadas) coincidente con el sistema de unidades que utilizo el codigo
de m
aquina de entrada (al codigo que corresponden estas cantidades de pasos).
Luego se debe ir recorriendo los datos del archivo para detectar los movimientos
de no extrusi
on, los cuales representaran un cambio de columna en las matrices de
127
Esta p
agina ha sido intencionalmente dejada en blanco.
Captulo 7
Testeos y medidas
7.1. Introduccion
Las pruebas y medidas se organizaron por tematica. Se realizaron pruebas sobre
el funcionamiento general del posicionador XYZ. Por otro lado se hicieron testeos
sobre el control de temperatura para el extrusor y la heated bed. Para obtener
resultados del software en general se empleo la simulacion comentada en 6.5.
Como siguiente paso, se hicieron pruebas basicas de impresion para corroborar
pr
acticamente el funcionamiento del software desarrollado por el grupo.
Se busca obtener un resultado cualitativo, producto de acumular posibles errores sistematicos, motivo por el cual se realiza un tramo en varios.
Para esto se determina a ojo humano si es considerable la dispersion en el
estado inicial de la posici
on para cada eje. Es esperable, si se acumula error, que
la variacion sea como se indica en la Figura 7.2. El experimento es exitoso si en
un n
umero N de iteraciones es despreciable el corrimiento de la posicion de cada
eje al retorno frente a la posici
on inicial. Si falla, puede intentarse una prueba
similar como la indicada en la Figura 7.3 para descartar o no que el problema
pueda deberse a un efecto de arranque-detencion. O se puede intentar el mismo
con una rampa de velocidad.
Resultado e interpretacion
Las condiciones de prueba se pueden resumir en tres parametros: la cantidad de
pasos a realizar, la velocidad y la cantidad de iteraciones. La Tabla 7.1 resume los
anteriores para las pruebas realizadas en los grados de libertad del posicionador,
donde se utiliz
o rampa de velocidad para suavizar los arranques y detenciones.
Para realizar las observaciones, se ajustaron marcas en papel que indicaran la
posicion inicial.
Un detalle importante a tener en cuenta, es que no se realizaron pruebas de
movimiento en el eje Z, que en la fecha de realizacion de estas pruebas, presentaba
problemas mec
anicos que comprometan el movimiento.
En los ejes X e Y la dispersi
on resultante no fue apreciable. No se puede
asegurar que no se pierden pasos, pero en principio el resultado es alentador.
130
Cantidad de pasos
18896
18896
(7.1)
Otro par
ametro muy importante a verificar, es la ganancia mecanica de cada
grado de libertad compar
andola contra el valor teorico que se observa en 7.2. La
homogeneidad de las varillas roscadas que traccionan en cada eje se vera reflejada
en este parametro. Por un lado, puede existir un error frente al valor teorico, pero
si es constante no habr
a diferencias en el avance del mecanismo seg
un la zona del
132
mm
paso
(7.2)
En los siguientes p
arrafos se brindaran los resultados para cada eje y se analizar
an los mismos.
Eje X
En la Figura 7.5(a) se observa el montaje de un extensiometro Mitutoyo de
una centesima de milmetro de resolucion para la realizacion del experimento en
el eje X de la m
aquina. Como se puede apreciar el vastago se ubica paralelo a
la direcci
on del movimiento, apoyandose el mismo perpendicular al borde de la
mesa como indica la Figura 7.5(b). Lo anterior es muy importante, para tener
que evitar realizar una correccion por la tangente del angulo en que se realiza
el contacto. Aunque si el angulo es despreciable, tambien lo es el error que se
comete. La posici
on del artefacto se fijo a la estructura como muestra la Figura
7.5(a) con ayuda de una morsa. Es imprescindible, que el instrumento de medida
no sea desplazado por acci
on de la fuerza que arrastra el mecanismo ni cambie su
orientaci
on. Cualquiera de estos errores se traduce en un error de medida.
X3 (mm)
41.770
41.770
41.760
41.780
41.760
41.765
41.765
41.765
41.770
41.760
41.760
41.770
41.760
41.760
41.755
Tabla 7.2: Medida de distancias realizadas con el extensiometro para cada punto intermedio
del recorrido.
X3 (pasos)
0
X0
X1
X2
X3
Promedio(mm)
5.0040 10.0764 20.6370 41.7646
Desviacion estandar(mm) 0.0058 0.0083 0.0090 0.0064
Rango(mm)
0.025
0.030
0.030
0.025
Repetibilidad(mm)
0.0125 0.0150 0.0150 0.0125
Tabla 7.4: Valores medios, desviaci
on estandar, rango y repetibilidad para cada punto Xk .
En principio se puede decir que se cumple con el objetivo de tener una precision menor a 0,15mm. Pero falta verificar la aleatoriedad, lo cual es esencial para
asegurar que no existe una tendencia de las posiciones relevadas a desplazarse de
134
(a) Variaci
on de la posicion de los puntos extremos de cada
tramo.
135
(a) Evoluci
on de los puntos extremos de cada tramo del recorrido
en el eje Y.
(b) Evoluci
on de la posicion del punto inicial del recorrido Y0 .
Figura 7.8: Mediciones de repetibilidad en el eje Y.
Se repiti
o el experimento con el mismo montaje del extensiometro y obtuvieron
las medidas que se presentan en la Tabla 7.5.
137
Y0 (mm)
9.000
9.040
9.030
9.040
9.025
9.030
9.020
9.040
9.035
9.030
9.030
9.030
9.035
9.020
9.040
Y1 (mm) Y2 (mm)
14.250
24.775
14.250
24.780
14.240
24.780
14.240
24.780
14.240
24.785
14.240
24.780
14.240
24.765
14.230
24.770
14.235
24.760
14.230
24.760
14.235
24.770
14.245
24.770
14.220
24.760
14.240
24.770
14.230
24.775
Y3 (mm)
45.895
45.900
45.900
45.950
45.865
45.880
45.875
45.900
45.895
45.890
45.885
45.895
45.890
45.890
45.875
Tabla 7.5: Medida de distancias realizadas con el extensiometro para cada punto intermedio
del recorrido en el eje Y.
Como puede observarse en la tabla anterior, ocurrieron mejoras en los resultados del eje Y. En la Figura 7.10(a) se presenta la evolucion de la posicion de los
puntos relevados la cual es apreciablemente mas constante que antes de lubricar.
Por otro lado, en la Figura 7.10(b) se aprecia la evolucion de la posicion para el
138
(a) Evoluci
on de la posicion de los puntos Yk , luego de lubricar el tornillo del eje Y.
(b) Evoluci
on de la posicion del punto inicial del recorrido Y0 ,
luego de aplicada la lubricacion.
Figura 7.10: Medidas en el eje Y luego de realizar un lubricado en tornillo y rulemanes.
En la Tabla 7.6 se pueden observar los resultados para el valor medio de cada
punto, la desviaci
on est
andar, el rango y la repetibilidad. En base a los resultados
139
Y0
Y1
Y2
Y3
Promedio(mm)
9.0291 14.238 24.772 45.829
Desviacion estandar(mm) 0.0105 0.0080 0.0082 0.0191
Rango(mm)
0.040 0.030 0.025 0.085
Repetibilidad(mm)
0.020 0.0150 0.0125 0.0425
Tabla 7.6: Valores medios, desviaci
on estandar, rango y repetibilidad para cada punto Yk .
Eje Z
Nuevamente se repiti
o quince veces el experimento, pero esta vez con el eje Z.
En la Figura 7.11(a) se puede apreciar el montaje de un extensiometro Mitutoyo
de resolucion una centesima de milmetro y n
umero de serie 3058S-19.
En esta etapa tampoco fueron satisfactorios los resultados, siendo incluso mucho peores que los primeros obtenidos para el eje Y ya que a priori no se cumplira
con el criterio de exito para la repetibilidad en tan solo quince iteraciones. En la Figura 7.12(a) se observa los resultados de las medidas para los puntos Zk , k = 0..,3.
Se aprecia como decrece la posici
on de dichos puntos frente a su valor inicial. En la
Figura 7.12(b) se aprecia la misma evolucion monotona decreciente para el punto
Z0 .
Claramente, existe un error que se acumula provocando el desplazamiento observado en las figuras anteriores. Sin embargo, al igual que en el eje Y las distancias
recorridas en cada tramo se mantienen con una variacion mnima, lo cual habla
muy bien de la homogeneidad del tornillo. En la Figura 7.13 apreciamos estos
resultados.
140
(b) Evoluci
on de la posicion del punto inicial del recorrido Z0 .
Figura 7.12: Mediciones de repetibiliad en el eje Z.
Las hip
otesis para explicar ese error son las mismas que para el eje Y. Nuevamente se descarta la posibilidad de desplazamiento del instrumento de medida,
por lo que el origen se debe a una perdida sistematica de pasos, que tampoco se
debe a la l
ogica como en el caso anterior, sino a esfuerzos mecanicos. As mismo,
la soluci
on aplicada consistio en lubricar ambos tornillos de traccion del eje Z y
la polea del tensor de la correa dentada que vincula a ambos. En la Tabla 7.7 se
puede consultar las medidas realizadas de los puntos extremos de cada tramo.
En la Figura 7.14(a) podemos apreciar los resultados graficamente para los
141
Z3 (mm)
42.960
42.860
42.860
42.860
42.860
42.860
42.860
42.855
42.860
42.855
42.850
42.850
42.850
42.850
42.850
Tabla 7.7: Medida de distancias realizadas con el extensiometro para cada punto intermedio
del recorrido en el eje Z.
142
(a) Evoluci
on de la posicion de los puntos Zk , luego de aplicar
lubricaci
on.
(b) Evoluci
on de la posicion del punto inicial del recorrido Z0 ,
luego de aplicar lubricacion.
Figura 7.14: Medidas del eje Z luego de aplicar la lubricacion.
Pk+1 Pk
Nk,k+1
Eje X
0.0050724
0.0052803
0.0052819
0.0052515
0.0052215
1.33
(7.3)
Eje Y
0.0052086
0.0052671
0.0052801
0.0052662
0.0052555
0.68
EjeZ
0.005299
0.0052812
0.0052889
0.0052881
0.0052894
0.04
Tabla 7.9: Ganancias mecanicas relevadas para cada eje y error relativo frente al valor teorico.
144
(c) Variaci
on de la distancia por tramo en el eje Z.
Figura 7.15: Comparaci
on de las ganancias mecanicas para los tres grados de libertad luego
de lubricar tornillos y rulemanes.
145
Figura 7.16: Temperatura de la heated bed platform con un setpoint de 60 C, donde cada
iteraci
on es cada 1 segundo.
llegaba como m
aximo a 85 C. Esto
se observa en la Figura 7.17.
146
7.3.2. Extrusor
Para sensar la temperatura del extrusor se tiene una termocupla tipo K, la cual
forma parte del extrusor adquirido. Para acondicionar la salida de la termocupla
se utiliz
o un amplificador AD595 [87], el cual esta calibrado especficamente para
este tipo de termocuplas. Presentando una ganancia igual a la del LM35 de 10mV
C .
Cuando se realizaron las primeras pruebas se noto que el extrusor alcanzaba
una temperatura notoriamente superior a la esperada. Por ejemplo cuando se registraba que la temperatura (sensada a traves de termocupla) era 220 C, en realidad
medida con un term
ometro patron se encontraba a 380 C. Para solucionar este
problema se opt
o por calibrar por software la curva, tambien se decidio realizar
esta correcci
on en el tramo de trabajo, o sea entre 200 C y 280 C.
Para calibrar la curva se empezo por ver graficamente como se relaciona la
temperatura sensada con la del patron. Para coordinar estas medidas se realizo el
siguiente experimento.
Se program
o un m
odulo de prueba en el cual se inicia con una temperatura,
cuando esta se registra en el termometro patron el usuario toca una tecla del
teclado y se registra la temperatura predeterminada y la que esta leyendo en ese
preciso momento. Luego se pasa a otra temperatura de comienzo y repitiendo as
el algoritmo.
Como el proceso de calentamiento es mas rapido que el de enfriamiento, se
ajustaron pasos distintos para cada caso. Los resultados obtenidos se pueden ver
en la Figura 7.18, donde se efectuaron pasos de 10 C para calentar y de 2 C para
147
160
160
140
120
100
80
60
40
20
50
100
150
200
250
Temperatura medida con el termometro patron (C)
300
140
120
100
80
60
40
50
100
150
200
250
Temperatura medida con el termometro patron (C)
300
enfriar.
Como primera conclusi
on a partir de la Figura 7.18 se observa que existe una
relacion lineal entre la medida que se realiza mediante la termocupla y la del
patron. Por esta raz
on se proyecta solucionar la diferencia cambiando el factor
que relaciona la tensi
on de salida del amplificador y la temperatura. Repitiendo
el experimento con el factor corregido se obtienen los resultados que se ven en la
Figura 7.19, en la cual se presenta una recta con pendiente casi igual a 1. Y las
medidas para un setpoint igual a 220 C se muestran en la Figura 7.20.
Ademas con ayuda de Matlab se obtuvo el modelo de primer orden de la grafica
mostrada en la Figura 7.19, y se agreg
o en el codigo del controlador para corregir
la temperatura leda para el caso del extrusor.
Nuevo controlador
Cuando se realizaron las primeras pruebas de impresion se noto que la tem
peratura del extrusor era inferior al valor mnimo exigido para la extrusion. Esto
difiere de los resultados que se muestran en la Figura 7.20, lo que se explica con
que dichas medidas se realizaron con el extrusor quieto y sin extruir, factores que
provocan una mayor perdida de energa .
Para mejorar el control de la temperatura sin modificar esencialmente el funcionamiento del mismo, se implement
o un controlador que sigue teniendo por salida
valores logicos, fuente encendida o apagada. Cada un segundo se mide la temperatura y se compara con setpoint, dependiendo de cuanto difieran se establece
cuanto es el transcurso del segundo en que la fuente estara encendida o apagada.
La implementaci
on del controlador se explica mas en detalle en la Seccion 6.4.2.
Considerando el valor medio de la salida en un segundo, se puede interpretar
el sistema de control como una especie de controlador proporcional, esto es cierto
dentro del rango de control. Dado que por fuera de este la salida se encuentra totalmente encendida o apagada, pero cuando el error relativo se encuentra contenido en
148
300
250
200
150
100
50
50
100
150
200
250
Temperatura medida con el termometro patron (C)
300
Figura 7.20: Temperatura del extrusor con un setpoint de 220 C. Iteraciones cada un segundo.
Temperatura (C)
160
140
120
100
80
60
40
20
200
400
600
800
Iteracion
1000
1200
1400
1600
puede ver que la temperatura a la que se estabiliza es inferior, mas las oscilaciones
son mucho menores.
Una de las primeras observaciones que se apreciaron en el sistema de control,
es que al ser fija la cantidad de valores en que se puede setear el contador y al
variar el rango en el que se implementa el control, lo que se modifica es la ganancia
del controlador. Un ejemplo de esto se puede apreciar en la Figura 7.22, donde el
ejemplo con un porcentaje menor presenta mayores oscilaciones. Este fenomeno
es de esperar ya que bajar el rango de control implica aumentar la pendiente del
rango lineal del controlador y al igual que en un control proporcional, aumentar
150
220
220
200
200
Temperatura (C)
Temperatura (C)
180
180
160
140
160
140
120
120
100
0
100
100
200
300
400
500
600
Iteracion
700
800
900
1000
80
100
200
300
Iteracion
400
500
600
(a) Controlador nuevo con un rango de con- (b) Controlador nuevo con un rango de control de 4, 5 %.
trol de 6 %.
Figura 7.22: Temperatura medida con un setpoint igual a 220 C con distintos rangos de
control. Iteraciones cada un segundo.
Setpoint ( C)
210
220
230
240
Temperatura de estabilizacion ( C)
202
216.5
218
226.5
200
200
180
180
Temperatura (C)
Temperatura (C)
160
140
120
100
0
160
140
120
500
1000
1500
2000
Iteracion
2500
3000
3500
100
0
4000
200
400
600
Iteracion
800
1000
1200
240
240
220
220
200
200
Temperatura (C)
Temperatura (C)
180
180
160
140
160
140
120
100
120
80
100
80
60
500
1000
1500
40
500
1000
Iteracion
Iteracion
1500
Figura 7.23: Temperatura medida con un setpoint igual a 220 C con distintos rangos de
control. Iteraciones cada un segundo.
futuro.
(b) Patr
on descripto en la simulacion para el relleno del cubo al 20 %.
Figura 7.24: Resultados de simulacion.
154
155
156
Captulo 8
Conclusiones y trabajo a futuro
8.1. Conclusiones
El presente captulo busca resumir los logros alcanzados en el desarrollo del
proyecto.
Se alcanz
o la realizaci
on de un principio-fin en el dise
no y construccion del posicionador XYZ, con un desarrollo ntegro de software, electronica y mecanica que
cumple con las necesidades del prototipo, obteniendose una maquina que prueba el
concepto general de funcionamiento (ver Figuras 8.1 y 8.2). La misma esta abierta
a distintos usos para aplicaciones tridimensionales, dando lugar a un uso eficiente
del espacio.
8.1. Conclusiones
de procesamiento o un cambio en el esquema de software. Es de destacar que la
integraci
on de toda la electronica no resulto tarea sencilla, pero se logro en forma
satisfactoria.
Otro punto importante a mencionar y que es vital para el funcionamiento del
dispositivo es el desarrollo de los drivers de los motores PAP. Su implementacion
basada en los integrados L297 y L298 involucro un tiempo importante dedicado a la
lectura y compresi
on tanto de hojas de datos como hojas de aplicacion. Esto
llevo
a un dise
no que evoluciono hasta que se obtuvo una version capaz de comandar
los motores incluso en un caso tan exigente como el eje vertical (consume mas
corriente para aplicar el torque necesario y comenzar el movimiento). Algunas
caractersticas relevantes que se implementaron se resumen a continuacion:
Half-Step: Reduce efectos de resonancia.
Control de Torque: Cuando el estado de las fases es tal que una bobina se
encuentra desenergizada, aumenta la corriente por la bobina restante. Se
denomina tambien Half-Step with shaping y logra reponer el torque efectivo
pr
acticamente al del nivel en modo de operacion Full-Step.
Adem
as, se implemento una interfaz para el usuario a partir de la cual se
puede controlar manualmente la maquina, calibrar o indicar que comience un nuevo
trabajo.
En cuanto al software, es destacable el desarrollo realizado por el equipo. El
mismo involucra desde rutinas para la lectura de un archivo G-code, su transmision,
su procesamiento hasta el control general de la maquina.
Si bien todos los m
odulos involucraron un trabajo arduo con varias horas de
dedicaci
on y testeo, se elije mencionar particularmente los relacionados al control
de posici
on, velocidad y temperatura por ser los bloques de mas bajo nivel y que
se relacionan m
as directamente con la electronica del prototipo.
El control de posici
on, se desarrollo en base a un solo timer de 16 bits de los
disponibles en la placa Arduino para controlar el movimiento de cuatro motores
paso a paso. Dicha tarea no resulto sencilla, debiendose dedicar muchas horas a
la optimizaci
on del c
odigo y aceptar limitaciones de procesamiento en la placa
Arduino para lograr avanzar. Por otro lado, el control de velocidad surgio como
una necesidad para suavizar los movimientos, y as reducir posibles perdidas de
pasos por arranques y detenciones bruscas. Su realizacion basada en modulacion
de la frecuencia del timer (Master Clock )fue un desafo, ya que deba lograrse sin
comprometer el funcionamiento de la rutina de movimiento.
En la pr
actica se determino mediante experimentos con un dispositivo denominado extensi
ometro la repetibilidad de cada eje, sin considerar el efecto de
operaci
on de otros ejes. Los resultados que ya fueron presentados en el Captulo 7
y en el corriente fueron ampliamente satisfactorios. El funcionamiento del control
de velocidad se comprob
o mediante osciloscopio, como mostro en el Captulo 6.
El control de temperatura involucro la transicion de un control ON/OFF a un
control proporcional, donde el ciclo de trabajo de un mosfet de potencia en un
peri
odo de un segundo es proporcional al error relativo de la medida de temperatura contra el Setpoint. Se compararon los resultados para diferentes respuestas al
159
162
Apendice A
Doxygen de las interfaces del Codigo
My Project
Generated by Doxygen 1.8.8
Thu Apr 23 2015 20:16:58
Contents
1
1.1
Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
File Index
2.1
File List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1
3.1.1
Detailed Description
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2
Field Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.1
extrudeON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.2
extruder_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.3
fan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.4
inches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.5
retract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.6
sentido_CW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.7
system_coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1
Detailed Description
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.2
3.2.2.1
3.2
3.2.3
3.3
buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.1
add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.2
get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.3
getEnvio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.4
getGuardo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.5
isEmpty
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.6
isFull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.7
len . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
10
3.3.1
Detailed Description
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
3.3.2
Field Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
iv
CONTENTS
3.4
3.3.2.1
accion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.2
center_IJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.3
datos_ejes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.4
extrudeON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.5
extruder_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.6
fan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.7
flag_datosNuevos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.8
message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.9
param_B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.10 param_F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.11 param_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.12 param_P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.3.2.13 param_R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.3.2.14 param_S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.3.2.15 param_T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.3.2.16 power
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.3.2.17 retract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.3.2.18 sentido_CW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
3.3.2.19 system_coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
12
3.4.1
Detailed Description
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.2
13
3.4.2.1
contTemp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.2.2
contTemp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.3
3.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.3.1
controlTemp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.3.2
fanOFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.3.3
fanON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.3.4
getCont_por . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.4.3.5
getFlag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.4.3.6
getOutput
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.4.3.7
getSetpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.4.3.8
getTemp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.4.3.9
off
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.4.3.10 on
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.4.3.11 reduce_cont_por . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.4.3.12 setSetpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
16
3.5.1
Detailed Description
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.5.2
Field Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
CONTENTS
3.6
3.7
v
3.5.2.1
center_IJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.5.2.2
datos_aceleracion_extruyendo
. . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.5.2.3
datos_ejes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.5.2.4
datos_ejes_retract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.5.2.5
datos_origenHighLevel
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.6
datos_origenHighLevelINCHES . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.7
datos_origenHighLevelMM
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.8
delta_nueva_posicionINCHESabs . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.9
delta_nueva_posicionINCHESrel . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.10 delta_nueva_posicionMMabs . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.11 delta_nueva_posicionMMrel . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.12 max_jerk_xy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.13 max_jerk_z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.14 message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.15 MinSegmentTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.16 offset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.5.2.17 param_B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.18 param_F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.19 param_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.20 param_P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.21 param_R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.22 param_S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.23 param_T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.24 step_per_unit
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.25 velocidad_retract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.26 VelocidadTravelMin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.5.2.27 VelocidadTravelMinImpresion . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
20
3.6.1
Detailed Description
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.6.2
Field Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.6.2.1
err . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.6.2.2
indice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
20
3.7.1
Detailed Description
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.7.2
Field Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.7.2.1
ve
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.7.2.2
vx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.7.2.3
vy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.7.2.4
vz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
vi
4
CONTENTS
File Documentation
4.1
4.2
4.3
23
23
4.1.1
23
4.1.1.1
LARGO_BUFFER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
4.1.1.2
LARGO_STRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
24
4.2.1
Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4.2.1.1
calibracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
25
4.3.1
Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.1.1
eje_k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.1.2
propiedad
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
26
4.3.2.1
ejes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.2.2
propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.1
consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.2
consultaPos_objE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.3
consultaPos_objX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.4
consultaPos_objY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.5
consultaPos_objZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.6
consultaPosE
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.7
consultaPosX
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.8
consultaPosY
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.9
consultaPosZ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.10 consultaVelE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.11 consultaVelX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.3.3.12 consultaVelY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.13 consultaVelZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.14 deltaE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.15 deltaX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.16 deltaY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.17 deltaZ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.18 getMovimientoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.19 getMovimientoX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
4.3.3.20 getMovimientoY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.3.21 getMovimientoZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.3.22 getSentidoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.2
4.3.3
CONTENTS
4.4
4.3.3.23 getSentidoX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.3.24 getSentidoY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.3.25 getSentidoZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.3.26 restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.3.3.27 setObjetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
4.3.3.28 setPosicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
4.3.3.29 setVelocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
30
4.4.1
31
4.4.1.1
POR_FLAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.1.2
PROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.2.1
controlarTemperatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.2.2
iniTempClock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.2.3
SetearCont_por . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
32
4.5.1
33
4.5.1.1
PIN_ABAJO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.5.1.2
PIN_ARRIBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.5.1.3
PIN_DERECHO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.5.1.4
PIN_ENTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.5.1.5
PIN_EXIT
33
4.5.1.6
PIN_IZQUIERDO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.5.1.7
TIEMPO_ANTIREBOTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
4.5.2.1
antirebote
34
4.5.2.2
DisplayAltMesa
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
4.5.2.3
DisplayCalibrar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
4.5.2.4
DisplayClear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
4.5.2.5
DisplayFresado
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
4.5.2.6
DisplayHoming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
4.5.2.7
DisplayImprimiendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.5.2.8
DisplayImprimir
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.5.2.9
DisplayManual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.5.2.10 DisplayMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.5.2.11 DisplaymmXpaso
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.5.2.12 DisplaymmXpasoMed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
4.5.2.13 DisplaymmXpasoObj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.4.2
4.5
vii
4.5.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
viii
CONTENTS
4.6
4.5.2.14 DisplayMovX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.5.2.15 DisplayMovY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.5.2.16 DisplayMovZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.5.2.17 DisplayOffset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.5.2.18 DisplaySalir
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4.5.2.19 InicializarDisplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.5.2.20 recibir
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.5.2.21 RefreshDisplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
38
4.6.1
Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.6.1.1
cantidadPeriodosMCLKinches . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.6.1.2
cantidadPeriodosMCLKinchesE . . . . . . . . . . . . . . . . . . . . . . . . . .
39
4.6.1.3
cantidadPeriodosMCLKmm . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.6.1.4
cantidadPeriodosMCLKmmE . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.6.1.5
controlEntradaE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.6.1.6
controlEntradaEJE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.6.1.7
controlEntradaVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.6.1.8
controlEntradaXYZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.6.1.9
controlEntradaZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.6.1.10 distanciaEinchesAPasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.6.1.11 distanciaEmmAPasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.6.1.12 distanciainchesAPasos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.6.1.13 distanciammAPasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.6.1.14 ejecutar
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4.6.1.15 inicializarEjecutador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4.6.1.16 moverLinealConExtruir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4.6.1.17 moverLinealSinExtruir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4.6.1.18 pasosAdistanciaINCHES
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.6.1.19 pasosAdistanciaINCHESE . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.6.1.20 pasosAdistanciaMM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.6.1.21 pasosAdistanciaMME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.6.1.22 printEntrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.1.23 printSalida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.1.24 printSalidaPosta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.1.25 setHomeOffset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.1.26 setRegistroEinchesAbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.1.27 setRegistroEinchesRel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.1.28 setRegistroEmmAbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.1.29 setRegistroEmmRel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
CONTENTS
ix
4.6.1.30 setRegistroXYZinchesAbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.6.1.31 setRegistroXYZinchesRel . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.6.1.32 setRegistroXYZmmAbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.6.1.33 setRegistroXYZmmRel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.6.1.34 tiempoABSinches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.6.1.35 tiempoABSmm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.6.1.36 tiempoREL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.6.1.37 velejeEABSinches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6.1.38 velejeEABSmm
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6.1.39 velejeErelINCHES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6.1.40 velejeErelMM
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6.1.41 velXejeABSinches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
4.6.1.42 velXejeABSmm
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
49
4.7.1
50
4.7.1.1
TAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
4.7.2.1
error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
50
4.7.3.1
eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
51
4.8.1
51
4.8.1.1
MAX_speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
4.8.2.1
acciones_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
51
4.8.3.1
acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
4.8.4.1
ini_comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
4.8.4.2
interpretar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
52
4.9.1
55
4.9.1.1
BOTON_EMERGENCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.2
CLK_E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.3
CLK_X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.4
CLK_Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.5
CLK_Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.6.1.43 velXejeREL
4.7
4.7.2
4.7.3
4.8
4.8.2
4.8.3
4.8.4
4.9
CONTENTS
4.9.2
4.9.3
4.9.1.6
Contador_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.7
Contador_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.8
deshabMotorE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.9
deshabMotorX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.10 deshabMotorY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.11 deshabMotorZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.12 ENABLE_E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.9.1.13 ENABLE_X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.14 ENABLE_Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.15 ENABLE_Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.16 F_CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.17 FrecCont_divider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.18 ini_systemClock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.19 min_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.20 MotorE_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.9.1.21 MotorX_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.22 MotorY_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.23 MotorZ_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.24 moveE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.25 moveX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.26 moveY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.27 moveZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.28 RESET_E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.9.1.29 RESET_X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.30 RESET_Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.31 RESET_Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.32 SENTIDO_E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.33 SENTIDO_X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.34 SENTIDO_Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.35 SENTIDO_Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.36 SW_X0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.37 SW_X1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.38 SW_Y0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.39 SW_Y1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.40 SW_Z0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4.9.1.41 SW_Z1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
4.9.2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
59
4.9.3.1
59
motores
motor_i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS
4.9.4
xi
Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
4.9.4.1
configDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
4.9.4.2
configPorts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
4.9.4.3
configTimerE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
4.9.4.4
configTimerX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.4.5
configTimerY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.4.6
configTimerZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.4.7
deshabTimerE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.4.8
deshabTimerX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.4.9
deshabTimerY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.4.10 deshabTimerZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.4.11 iniMasterClock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
Variable Documentation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
4.9.5.1
Cmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.2
data_OCR3A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.3
flagE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.4
flagEmer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.5
flagReconfTimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.6
flagTimeout
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.7
flagX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.8
flagY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.9
flagZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.9.5.10 Ninst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
4.9.5.11 Pmax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
62
62
4.10.1.1 LeoGcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
4.10.1.2 MainImprimiendo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
63
63
4.11.1.1 MovimientoManual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
63
64
4.12.1.1 DiamTornilloEmm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.12.1.2 E_MAX_INCHES
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.12.1.3 E_MAX_MM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.12.1.4 frecMCLK
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.12.1.5 HILOSxPULGADA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.9.5
xii
CONTENTS
4.12.1.6 K_EXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.12.1.7 MAX_TEMP_EXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.12.1.8 MAX_TEMP_HEATEDBED . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.9 PASOSxVUELTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.10 PULGADASaMILIMETROS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.11 T_MCLK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.12 VELOCIDAD_MAXIMA_ABSOLUTA_INCHES . . . . . . . . . . . . . . . . . .
65
4.12.1.13 VELOCIDAD_MAXIMA_ABSOLUTA_INCHES_EXTRUYENDO_SIN_MOV . . .
65
4.12.1.14 VELOCIDAD_MAXIMA_ABSOLUTA_MM . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.15 VELOCIDAD_MAXIMA_ABSOLUTA_MM_EXTRUYENDO_SIN_MOV . . . . . .
65
4.12.1.16 X_MAX_INCHES
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.17 X_MAX_MM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.18 Y_MAX_INCHES
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.19 Y_MAX_MM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.12.1.20 Z_MAX_INCHES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
4.12.1.21 Z_MAX_MM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
66
66
4.13.1.1 LIMITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
67
4.13.2.1 home_all_axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
4.13.2.2 stepper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
Chapter 1
Data Structures
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
10
12
16
20
20
Chapter 2
File Index
2.1
File List
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
modular3D/Software/. . . . . . . . . . . . .
23
24
25
30
32
38
49
51
52
62
63
63
66
File Index
Chapter 3
#include <ejecutador.h>
Data Fields
int system_coordinates
int extruder_mode
int inches
int sentido_CW
int fan
int extrudeON
int retract
3.1.1
Detailed Description
3.1.2
Field Documentation
3.1.2.1
int extrudeON
3.1.2.2
int extruder_mode
3.1.2.3
int fan
3.1.2.4
int inches
3.1.2.5
int retract
3.1.2.6
int sentido_CW
3.1.2.7
int system_coordinates
3.2
#include <buffer.h>
int getEnvio ()
int getGuardo ()
char get (void)
int len ()
bool isFull ()
bool isEmpty ()
3.2.1
Detailed Description
3.2.2
3.2.2.1 buffer ( )
buffer(): Constructor de la clase buffer. Se construye un buffer en el cual se que apunta al primer lugar tanto para
enviar como para guardar, el cual no esta lleno.
Parameters
Returns
:
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
3.2.3
3.2.3.1
Parameters
char
Returns
:
3.2.3.2
Returns
char gcode: puntero al string que se obtiene.
3.2.3.3
int getEnvio ( )
getEnvio(): funcion para obtener el entero que dice en que lugar del arreglo se encuentra el proximo string a enviar.
Parameters
Returns
int: entero que marca el lugar del arreglo donde se encuentra el proximo string a ser enviado.
3.2.3.4
int getGuardo ( )
getGuardo(): funcion para obtener el entero que dice en que lugar del arreglo se debe guardar el proximo string
que se desee encolar
Parameters
Returns
int: entero que marca el lugar del arreglo donde se debe guardar el proximo string a se desee encolar.
3.2.3.5
bool isEmpty ( )
Returns
bool: 1 si esta vacia y 0 si no.
bool isFull ( )
10
Parameters
Returns
bool: 1 si esta llena y 0 si no.
3.2.3.7
int len ( )
Returns
int: cantidad de string que se encuentran en la cola.
The documentation for this class was generated from the following file:
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo
codigo/Codigo/buffer.h
3.3
#include <interprete.h>
Data Fields
3.3.1
acciones_t accion
float datos_ejes [4]
float flag_datosNuevos [7]
float param_F
float center_IJ [2]
float param_L
float param_S
float param_P
float param_R
float param_B
float param_T
char message [30]
int system_coordinates
int extruder_mode
int sentido_CW
int fan
int power
int extrudeON
int retract
Detailed Description
3.3.2
Field Documentation
float center_IJ[2]
float datos_ejes[4]
int extrudeON
int extruder_mode
int fan
float flag_datosNuevos[7]
char message[30]
float param_B
float param_F
float param_L
float param_P
11
12
3.3.2.13
float param_R
float param_S
float param_T
int power
int retract
int sentido_CW
int system_coordinates
3.4
#include <contTemp.h>
3.4.1
Detailed Description
3.4.2
3.4.3
3.4.3.1
void controlTemp ( )
Returns
:
3.4.3.2
void fanOFF ( )
Returns
:
3.4.3.3
void fanON ( )
Returns
:
3.4.3.4
int getCont_por ( )
13
14
Parameters
Returns
:
3.4.3.5
int getFlag ( )
getFlag(): Funcion que retorna la bandera que avisa si la temperatura difiere del setpoint menos un determinado
valor relativo.
Parameters
Returns
:
3.4.3.6
double getOutput ( )
Returns
:
3.4.3.7
double getSetpoint ( )
Returns
:
3.4.3.8
double getTemp ( )
Returns
:
void off ( )
15
16
Parameters
Returns
:
3.4.3.10
void on ( )
Returns
:
3.4.3.11
void reduce_cont_por ( )
Returns
:
3.4.3.12
Returns
:
The documentation for this class was generated from the following file:
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo
codigo/Codigo/contTemp.h
3.5
#include <ejecutador.h>
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
Data Fields
3.5.1
Detailed Description
3.5.2
Field Documentation
3.5.2.1
float center_IJ[2]
float datos_aceleracion_extruyendo[4]
float datos_ejes[4]
float datos_ejes_retract[2]
17
18
3.5.2.5
3.5.2.6
float datos_origenHighLevelINCHES[3]
3.5.2.7
float datos_origenHighLevelMM[3]
3.5.2.8
float delta_nueva_posicionINCHESabs[4]
3.5.2.9
float delta_nueva_posicionINCHESrel[4]
3.5.2.10
float delta_nueva_posicionMMabs[4]
3.5.2.11
float delta_nueva_posicionMMrel[4]
3.5.2.12
float max_jerk_xy
3.5.2.13
float max_jerk_z
3.5.2.14
char message[30]
3.5.2.15
float MinSegmentTime
3.5.2.16
float offset[4]
19
float param_B
3.5.2.18
float param_F
3.5.2.19
float param_L
3.5.2.20
float param_P
3.5.2.21
float param_R
3.5.2.22
float param_S
3.5.2.23
float param_T
3.5.2.24
float step_per_unit
3.5.2.25
float velocidad_retract
3.5.2.26
float VelocidadTravelMin
3.5.2.27
float VelocidadTravelMinImpresion
20
3.6
#include <errores.h>
Data Fields
int indice
error err [TAM]
3.6.1
Detailed Description
3.6.2
Field Documentation
3.6.2.2
int indice
3.7
#include <controlXYZ_E.h>
Data Fields
unsigned int vx
unsigned int vy
unsigned int vz
unsigned int ve
3.7.1
Detailed Description
3.7.2
Field Documentation
3.7.2.1
unsigned int ve
21
velocidad de e
Definition at line 65 of file controlXYZ_E.h.
3.7.2.2
unsigned int vx
velocidad en coordenada x
Definition at line 62 of file controlXYZ_E.h.
3.7.2.3
unsigned int vy
velocidad en coordenada y
Definition at line 63 of file controlXYZ_E.h.
3.7.2.4
unsigned int vz
velocidad en coordenada z
Definition at line 64 of file controlXYZ_E.h.
The documentation for this struct was generated from the following file:
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo
codigo/Codigo/controlXYZ_E.h
22
Chapter 4
File Documentation
4.1
#include "Arduino.h"
Data Structures
class buffer
Macros
#define LARGO_BUFFER 1
#define LARGO_STRING 50
4.1.1
4.1.1.1
#define LARGO_BUFFER 1
Author
Guillermo Airaldiguillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Nicolas Lamath ellama.ing@gmail.com
24
File Documentation
Date
03 de Setiembre 2014
Definition at line 26 of file buffer.h.
4.1.1.2
#define LARGO_STRING 50
4.2
#include "Display.h"
#include "Main_imprimiendo.h"
#include <LiquidCrystal.h>
Functions
void calibracion ()
4.2.1
Function Documentation
4.2.1.1
void calibracion ( )
Date
03 de Setiembre 2014 calibracion(): Funcion que ejecuta el menu de calibracion
Parameters
Returns
:
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
4.3
25
#include <stdbool.h>
Data Structures
struct vel
Typedefs
typedef enum ejes eje_k
Se define el tipo para poder definir variables con la enumeracion creada.
Enumerations
enum ejes { ejeX =1, ejeY, ejeZ, ejeE }
enum propiedades { posicion, objetivo, velocidad }
Enumeracion que describe la posicion y la velocidad.
Functions
bool getSentidoX ()
bool getMovimientoX ()
bool getSentidoY ()
bool getMovimientoY ()
bool getSentidoZ ()
bool getMovimientoZ ()
bool getSentidoE ()
bool getMovimientoE ()
void deltaX (bool sentido)
void deltaY (bool sentido)
void deltaZ (bool sentido)
void deltaE (bool sentido)
void restart (eje_k eje)
void setObjetivo (eje_k eje, unsigned long int pos_final)
void setPosicion (eje_k eje, unsigned long int nueva_pos)
void setVelocidad (eje_k eje, unsigned int v)
unsigned long int consulta (eje_k eje, propiedad selector)
unsigned long int consultaPosX ()
unsigned long int consultaPosY ()
unsigned long int consultaPosZ ()
unsigned long int consultaPosE ()
unsigned long int consultaPos_objX ()
unsigned long int consultaPos_objY ()
unsigned long int consultaPos_objZ ()
unsigned long int consultaPos_objE ()
unsigned long int consultaVelX ()
unsigned long int consultaVelY ()
unsigned long int consultaVelZ ()
unsigned long int consultaVelE ()
26
File Documentation
4.3.1
Typedef Documentation
4.3.1.1
4.3.2
4.3.2.1
enum ejes
enum propiedades
4.3.3
Function Documentation
4.3.3.1
27
Funcion de consulta de posicion, objetivo o velocidad de un eje pensada para uso por el Alto Nivel
Parameters
eje_k
propiedad
4.3.3.2
28
File Documentation
4.3.3.12
4.3.3.13
4.3.3.14
4.3.3.15
4.3.3.16
4.3.3.17
4.3.3.18
bool getMovimientoE ( )
4.3.3.19
bool getMovimientoX ( )
29
Returns
bool True indica que el motor se esta moviendo, false que no lo esta.
4.3.3.20
bool getMovimientoY ( )
4.3.3.21
bool getMovimientoZ ( )
4.3.3.22
bool getSentidoE ( )
Funcion que devuelve un valor booleano que indica el sentido de giro del motor E.
Returns
bool True corresponde a horario, y false a antihorario.
4.3.3.23
bool getSentidoX ( )
...Funciones del modulo Funcion que devuelve un valor booleano que indica el sentido de giro del motor X.
Returns
bool True corresponde a horario, y false a antihorario.
4.3.3.24
bool getSentidoY ( )
Funcion que devuelve un valor booleano que indica el sentido de giro del motor Y.
Returns
bool True corresponde a horario, y false a antihorario.
4.3.3.25
bool getSentidoZ ( )
Funcion que devuelve un valor booleano que indica el sentido de giro del motor Z.
Returns
bool True corresponde a horario, y false a antihorario.
4.3.3.26
Funcion que resetea el registro de un eje a cero, permite establecer el cero de ccoordenada por software del eje.
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
30
File Documentation
Parameters
eje_k
4.3.3.27
eje: Parametro que indica en que eje se debe efectuar la modificacion del setpoint
pos_final: posicion absoluta que se desea alcanzar en pasos
4.3.3.28
eje: Parametro que indica en que eje se debe efectuar la modificacion del setpoint
nueva_pos: posicion absoluta que se desea setear a la posicion real actual
4.3.3.29
4.4
eje: Parametro que indica en que eje se debe efectuar la modificacion de velocidad
vel: velocidad en unidades de periodo de Master Clock
#include "Arduino.h"
Data Structures
class contTemp
Macros
#define POR_FLAG 0.07
#define PROM 5
Functions
void iniTempClock ()
void controlarTemperatura (contTemp ct)
void SetearCont_por ()
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
4.4.1
4.4.1.1
31
Date
28 de Noviembre 2014
Definition at line 26 of file contTemp.h.
4.4.1.2
#define PROM 5
4.4.2
Function Documentation
4.4.2.1
controlarTemperatura(contTemp ct): Funcion que agrega en un arreglo de controladores de temperatura el controlador ct.
Parameters
contTemp
Returns
:
4.4.2.2
void iniTempClock ( )
iniTempClock(): Funcion que inicializa el timer que impone la interrupcion cada 50 milisegundos.
Parameters
32
File Documentation
Returns
:
4.4.2.3
void SetearCont_por ( )
SetearCont_por(): Funcion invocada cada 1 segundo, esteblece el contador cont_tot en 20 y los contadores cont_por en el valor necesario.
Parameters
Returns
:
4.5
#include "Arduino.h"
#include <LiquidCrystal.h>
Macros
#define PIN_DERECHO 38
#define PIN_ARRIBA 40
#define PIN_IZQUIERDO 41
#define PIN_ABAJO 39
#define PIN_ENTER 43
#define PIN_EXIT 42
#define TIEMPO_ANTIREBOTE 30
Functions
void InicializarDisplay ()
void DisplayClear ()
void DisplayCalibrar ()
void DisplayManual ()
void DisplayImprimir ()
void DisplayFresado ()
void DisplayMovX (char avance)
void DisplayMovY (char avance)
void DisplayMovZ (char avance)
void DisplaySalir ()
void RefreshDisplay (float temp, float PosX, float PosY, float PosZ)
void DisplayMessage (char message)
void DisplayHoming ()
void DisplaymmXpaso ()
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
33
4.5.1
4.5.1.1
#define PIN_ABAJO 39
#define PIN_ARRIBA 40
#define PIN_DERECHO 38
#define PIN_ENTER 43
#define PIN_EXIT 42
#define PIN_IZQUIERDO 41
34
4.5.1.7
File Documentation
#define TIEMPO_ANTIREBOTE 30
4.5.2
Function Documentation
4.5.2.1
4.5.2.2
4.5.2.3
void DisplayCalibrar ( )
4.5.2.4
void DisplayClear ( )
4.5.2.5
void DisplayFresado ( )
4.5.2.6
void DisplayHoming ( )
4.5.2.7
void DisplayImprimiendo ( )
4.5.2.8
void DisplayImprimir ( )
4.5.2.9
void DisplayManual ( )
4.5.2.10
4.5.2.11
void DisplaymmXpaso ( )
4.5.2.12
35
36
File Documentation
med
4.5.2.13
4.5.2.14
4.5.2.15
4.5.2.16
4.5.2.17
void DisplayOffset ( )
4.5.2.18
void DisplaySalir ( )
void InicializarDisplay ( )
37
38
File Documentation
Parameters
4.5.2.20
int recibir ( )
4.5.2.21
void RefreshDisplay ( float temp, float PosX, float PosY, float PosZ )
4.6
#include
#include
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
"setup.h"
"stepper.h"
"math.h"
"interprete.h"
"contTemp.h"
Data Structures
struct datos
struct banderas
Functions
void inicializarEjecutador ()
error ejecutar (comando cmd)
void moverLinealConExtruir ()
void moverLinealSinExtruir ()
void setHomeOffset ()
void setRegistroEmmAbs ()
void controlEntradaVEL (float velAbsoluta, int flagF)
error controlEntradaXYZ (float posX, int flagX, float posY, int flagY, float posZ, int flagZ)
error controlEntradaZ (float posEJE, int flagEJE)
error controlEntradaE (float posE, int flagE)
error controlEntradaEJE (int ejeEJE, eje_k ejeEJE_K, const float EJE_MAX_INCHES, const float EJE_MAX_MM, float posEJE, int flagEJE)
void setRegistroEinchesAbs ()
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
39
void setRegistroEmmRel ()
void setRegistroEinchesRel ()
void setRegistroXYZmmAbs ()
void setRegistroXYZinchesAbs ()
void setRegistroXYZmmRel ()
void setRegistroXYZinchesRel ()
float velXejeABSinches (int eje)
float velejeEABSinches ()
float velXejeABSmm (int eje)
float velejeEABSmm ()
float velXejeREL (int eje)
float velejeErelINCHES ()
float velejeErelMM ()
float tiempoREL ()
float tiempoABSinches ()
float tiempoABSmm ()
float pasosAdistanciaINCHES (long int cantidadPasos)
float pasosAdistanciaINCHESE (long int cantidadPasos)
float pasosAdistanciaMM (long int cantidadPasos)
float pasosAdistanciaMME (long int cantidadPasos)
unsigned int cantidadPeriodosMCLKinches (float velocidadINCHESxMIN)
unsigned int cantidadPeriodosMCLKinchesE (float velocidadINCHESxMIN)
unsigned int cantidadPeriodosMCLKmm (float velocidadMMxMIN)
unsigned int cantidadPeriodosMCLKmmE (float velocidadMMxMIN)
long int distanciainchesAPasos (float distanciaINCHES)
long int distanciammAPasos (float distanciaMM)
unsigned long int distanciaEinchesAPasos (float distanciaINCHES)
unsigned long int distanciaEmmAPasos (float distanciaMM)
void printEntrada ()
void printSalida ()
void printSalidaPosta ()
4.6.1
Function Documentation
4.6.1.1
Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.
4.6.1.2
40
File Documentation
Parameters
float
Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.
4.6.1.3
cantidadPeriodosMCLKmm(float velocidadMMxMIN): para el caso en el que se trabaje en mm, pasa las velocidades
a su equivalente en cantidad de periodos de MCLK.
Parameters
float
Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.
4.6.1.4
Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.
4.6.1.6 error controlEntradaEJE ( int ejeEJE, eje_k ejeEJE_K, const float EJE_MAX_INCHES, const float EJE_MAX_MM,
float posEJE, int flagEJE )
controlEntradaEJE(): Se encargar de ver que la entrada de posicion sea adecuada, para luego si procesarla.
41
Parameters
float posEJE: posicion EJE, puede ser relativa (con signo) o absoluta.
int flagEJE: bandera de posicion EJE nueva.
int ejeEJE: indica cual eje (X 0, Y 1, Z 2, E 3).
eje_k ejeEJE_K: indica cual eje es (para uso de funiones de bajo nivel
const float EJE_MAX_INCHES: limite de posicion de ese eje particular INCHES.
const float EJE_MAX_MM: limite de posicion de ese eje particular MM.
Returns
error: usado para abandonar la ejecucion de la accion y no llegar albajo nivel
4.6.1.7
controlEntradaVEL(): Se encargar de ver que la entrada de velocidad absoluta sea adecuada, para luego si procesarla.
Parameters
float velAbsoluta: velocidad absoluta
int flagF: bandera de velocidad nueva.
Returns
:
4.6.1.8 error controlEntradaXYZ ( float posX, int flagX, float posY, int flagY, float posZ, int flagZ )
controlEntradaXYZ(): Se encargar de ver que las entradas de posicion (XYZ) sean adecuadas, para luego si
procesarlas.
Parameters
float posX: posicion X, puede ser relativa (con signo) o absoluta.
int flagX: bandera de posicion X nueva.
float posY: posicion Y, puede ser relativa (con signo) o absoluta.
int flagY: bandera de posicion Y nueva.
float posZ: posicion Z, puede ser relativa (con signo) o absoluta.
int flagZ: bandera de posicion Z nueva.
Returns
:
42
File Documentation
int flagZ: bandera de posicion Z nueva.
Returns
error: usado para abandonar
4.6.1.10
Returns
int : numero de pasos que equivalen a dicha distancia.
4.6.1.11
Returns
int : numero de pasos que equivalen a dicha distancia.
4.6.1.12
distanciainchesAPasos(float distanciaINCHES): para el caso en el que se trabaje en pulgadas, pasa las distancias
a su equivalente en numero de pasos
Parameters
float
Returns
int : numero de pasos que equivalen a dicha distancia.
4.6.1.13
distanciammAPasos(float distanciaMM): para el caso en el que se trabaje en mm, pasa las distancias a su equivalente en numero de pasos
43
Parameters
float
Returns
int : numero de pasos que equivalen a dicha distancia.
Returns
error: para decirle al main como va
4.6.1.15
void inicializarEjecutador ( )
Returns
:
4.6.1.16
void moverLinealConExtruir ( )
moverLinealConExtruir(): Funcion que utiliza casi la totalidad de las demas funciones para ejecutar la accion de
mover lineal extruyendo.
Parameters
Returns
error: tipo de error para que el main sepa como seguir (ok, o lo que haya pasado)
4.6.1.17
void moverLinealSinExtruir ( )
moverLinealSinExtruir(): Funcion que utiliza casi la totalidad de las demas funciones para ejecutar la accion de
mover lineal no extruyendo.
Parameters
44
File Documentation
Returns
:
4.6.1.18
Returns
float: distancia en inches que equivale a dicho numero de pasos .
4.6.1.19
Returns
float: distancia en inches que equivale a dicho numero de pasos .
4.6.1.20
pasosAdistanciaMM(int cantidadPasos): para el caso en el que se trabaje en mm, pasa el numero de pasos a su
equivalente en distancia.
Parameters
int
Returns
float: distancia en mm que equivale a dicho numero de pasos .
4.6.1.21
45
Parameters
int
Returns
float: distancia en mm que equivale a dicho numero de pasos .
4.6.1.22
void printEntrada ( )
4.6.1.23
void printSalida ( )
4.6.1.24
void printSalidaPosta ( )
4.6.1.25
void setHomeOffset ( )
setHomeOffset(): Funcion que se fija donde esta el bajo nivel y toma dicha posicion como el oofset de alto nivel.
Parameters
Returns
:
4.6.1.26
void setRegistroEinchesAbs ( )
setRegistroEinchesAbs(): Funcion que actualiza la posicion objetivo y la velocidad para el eje E. Sistema absoluto
y inches.
Parameters
Returns
:
4.6.1.27
void setRegistroEinchesRel ( )
setRegistroEinchesRel(): Funcion que actualiza la posicion objetivo y la velocidad para el eje E. Sistema relativo e
inches.
Parameters
Returns
:
4.6.1.28
void setRegistroEmmAbs ( )
setRegistroEmmAbs(): Funcion que actualiza la posicion objetivo y la velocidad para el eje E. Sistema absoluto y
mm.
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
46
File Documentation
Parameters
Returns
:
4.6.1.29
void setRegistroEmmRel ( )
setRegistroEmmRel(): Funcion que actualiza la posicion objetivo y la velocidad para el eje E. Sistema relativo y
mm.
Parameters
Returns
:
4.6.1.30
void setRegistroXYZinchesAbs ( )
setRegistroXYZinchesAbs(): Funcion que actualiza la posicion objetivo y la velocidad para todos los ejes XYZ.
Sistema absoluto e inches.
Parameters
Returns
:
4.6.1.31
void setRegistroXYZinchesRel ( )
setRegistroXYZinchesRel(): Funcion que actualiza la posicion objetivo y la velocidad para todos los ejes XYZ.
Sistema relativo e inches.
Parameters
Returns
:
4.6.1.32
void setRegistroXYZmmAbs ( )
setRegistroXYZmmAbs(): Funcion que actualiza la posicion objetivo y la velocidad para todos los ejes XYZ. Sistema
absoluto e mm.
47
Parameters
Returns
:
4.6.1.33
void setRegistroXYZmmRel ( )
setRegistroXYZmmRel(): Funcion que actualiza la posicion objetivo y la velocidad para todos los ejes XYZ. Sistema
relativo e mm.
Parameters
Returns
:
4.6.1.34
float tiempoABSinches ( )
tiempoABSinches(): para el caso en el que se trabaje en inches y en sistema absoluto, calcula el tiempo de
movimiento de los motores para que concurran en el punto objetivo.
Parameters
.
Returns
float: tiempo minutos(sistema absoluto y inches).
4.6.1.35
float tiempoABSmm ( )
tiempoABSmm(): para el caso en el que se trabaje en mm y en sistema ansoluto, calcula el tiempo de movimiento
de los motores para que concurran en el punto objetivo.
Parameters
.
Returns
float : tiempo minutos(sistema absoluto y mm).
4.6.1.36
float tiempoREL ( )
tiempoREL(): para el caso en el que se trabaje sistema relativo, calcula el tiempo de movimiento de los motores
para que concurran en el punto objetivo.
48
File Documentation
Parameters
.
Returns
float: tiempo minutos(sistema relativo). Se despreocupa del sistema de unidades, xq no ha que consultar
numero de pasos).
4.6.1.37
float velejeEABSinches ( )
velejeEABSinches(): para el caso en el que se trabaje sistema absoluto y inches, calcula la velocidad del eje E.
Parameters
int
Returns
float: velocidad (sistema absoluto e inches).
4.6.1.38
float velejeEABSmm ( )
velejeEABSmm(): para el caso en el que se trabaje sistema absoluto y mm, calcula la velocidad del eje E.
Parameters
Returns
float: velocidad (sistema absoluto y mm).
4.6.1.39
float velejeErelINCHES ( )
velejeErelINCHES(): para el caso en el que se trabaje sistema relativo e inches en E, calcula la velocidad del eje
E.
Parameters
Returns
float: velocidad eje E(sistema relativo e inches).
4.6.1.40
float velejeErelMM ( )
velejeErelMM(): para el caso en el que se trabaje sistema relativo e mm en E, calcula la velocidad del eje E.
Parameters
49
Returns
float: velocidad eje E(sistema relativo e mm).
4.6.1.41
velXejeABSinches(int eje): para el caso en el que se trabaje sistema absoluto y inches, calcula la velocidad pasandole el eje correspondiente.
Parameters
int
Returns
float: velocidad (sistema absoluto e inches).
4.6.1.42
velXejeABSmm(int eje): para el caso en el que se trabaje sistema absoluto y mm, calcula la velocidad pasandole
el eje correspondiente.
Parameters
int
Returns
float: velocidad (sistema absoluto y mm).
4.6.1.43
velXejeREL(int eje): para el caso en el que se trabaje sistema relativo, calcula la velocidad pasandole el eje
correspondiente.
Parameters
int
Returns
float: velocidad (sistema relativo). Se despreocupa del sistema de unidades, xq se tachan.
4.7
Data Structures
struct registroErrores
Macros
#define TAM 8
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
50
File Documentation
Typedefs
typedef enum eventos error
Enumerations
enum eventos {
ok =0, finCarreaX0, finCarreaX1, finCarreaY0,
finCarreaY1, finCarreaZ0, finCarreaZ1, salida_por_timeout_resetear,
salidaxFueraRango, setPointTempExtInvalid, setPointHeatedBedTempInvalid, velInvalida,
emergencia }
4.7.1
4.7.1.1
#define TAM 8
4.7.2
Typedef Documentation
4.7.2.1
4.7.3
4.7.3.1
enum eventos
4.8
51
Data Structures
struct comando
Macros
#define MAX_speed 9600
Typedefs
typedef enum acciones acciones_t
Enumerations
enum acciones {
move_linear =1, mover_circular, go_home, set_milimeters,
set_fan, set_ExtruderTemp, set_BedTemp, set_MaxAcel,
set_Maxfeedrate, set_systemMode, set_extruderMode, set_position,
set_homingOffset, set_hotEndOffset, set_retract, set_motorOFF,
set_coldExtrude, display_message, go_pausa, do_retract,
steps_unit, finishAllmoves_clearBuff, set_advancedSettings }
Functions
comando interpretar (char code[ ])
void ini_comando ()
4.8.1
4.8.1.1
4.8.2
Typedef Documentation
4.8.2.1
4.8.3
4.8.3.1
enum acciones
Enumerator
move_linear
mover_circular
go_home
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
52
File Documentation
set_milimeters
set_fan
set_ExtruderTemp
set_BedTemp
set_MaxAcel
set_Maxfeedrate
set_systemMode
set_extruderMode
set_position
set_homingOffset
set_hotEndOffset
set_retract
set_motorOFF
set_coldExtrude
display_message
go_pausa
do_retract
steps_unit
finishAllmoves_clearBuff
set_advancedSettings
4.8.4
Function Documentation
4.8.4.1
void ini_comando ( )
Returns
comando: Devuelve un tipo comando, que es una estrucutua del hecha a partir del code y mas facil de
interpretar.
4.9
#include
#include
#include
#include
#include
#include
"Arduino.h"
<stdbool.h>
<util/delay_basic.h>
<iom2560.h>
<avr/interrupt.h>
<avr/wdt.h>
53
Macros
54
File Documentation
Typedefs
typedef enum motor_i motores
Se define el tipo motores para poder ser utilizada como una variable del tipo enum motor_i.
Enumerations
enum motor_i { motorX, motorY, motorZ, motorE }
Enumeracion que hace referencia a cada uno de los motores.
Functions
void iniMasterClock ()
void deshabTimerX ()
void deshabTimerY ()
void deshabTimerZ ()
void deshabTimerE ()
void configPorts ()
void configTimerX (unsigned int cantPulsosMclk)
void configTimerY (unsigned int cantPulsosMclk)
void configTimerZ (unsigned int cantPulsosMclk)
void configTimerE (unsigned int cantPulsosMclk)
void configDriver (motores motor, bool sentido)
Variables
bool flagX
Variable booleana global flagX.
bool flagY
Variable booleana global flagY.
bool flagZ
Variable booleana global flagZ.
bool flagE
Variable booleana global flagE.
4.9.1
4.9.1.1
55
56
File Documentation
4.9.1.13
Proyecto CtrlMotors3D Modulo layerHW Este modulo tendra la finalidad de implementar todas aquellas funciones
asi como tambien definiciones y rutinas de interrupcion que sean propias del microcontrolador a utilizar, para que
si se llegase a producir un cambio de hardware solo se tenga que reeescribir este modulo y se deje incambiados
todos los demas.
layerHW.h
Author
Guillermo Airaldi guillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Jose Basualdo josebasualdo@gmail.com
Version
2.0
Date
5 de diciembre de 2014 ...Librerias ...Constantes
Definition at line 31 of file layerHW.h.
4.9.1.17
#define FrecCont_divider 7
#define min_t 4
#define MotorE_reset( ) { /PORTC |= (1 << ENABLE_E);/ PORTC &= (1 << RESET_E); _delay_loop_1(7);
PORTC |= (1 << RESET_E);}
57
#define MotorX_reset( ) { /PORTA |= (1 << ENABLE_X);/ PORTA &= (1 << RESET_X); _delay_loop_1(7);
PORTA |= (1 << RESET_X);}
4.9.1.22
#define MotorY_reset( ) { /PORTA |= (1 << ENABLE_Y);/ PORTA &= (1 << RESET_Y); _delay_loop_1(7);
PORTA |= (1 << RESET_Y);}
4.9.1.23
#define MotorZ_reset( ) { /PORTC |= (1 << ENABLE_Z);/ PORTC &= (1 << RESET_Z); _delay_loop_1(7);
PORTC |= (1 << RESET_Z);}
4.9.1.24
#define moveE(
|=(1<<CLK_E);}
4.9.1.25
#define moveX(
|=(1<<CLK_X);}
4.9.1.26
#define moveY(
|=(1<<CLK_Y);}
4.9.1.27
#define moveZ(
|=(1<<CLK_Z);}
4.9.1.28
58
4.9.1.29
File Documentation
#define RESET_X PORTA4
4.9.1.30
4.9.1.31
4.9.1.32
4.9.1.33
4.9.1.34
4.9.1.35
4.9.1.36
4.9.1.37
4.9.1.38
4.9.1.39
4.9.1.40
59
4.9.2
Typedef Documentation
4.9.2.1
Se define el tipo motores para poder ser utilizada como una variable del tipo enum motor_i.
Definition at line 235 of file layerHW.h.
4.9.3
4.9.3.1
enum motor_i
4.9.4
Function Documentation
4.9.4.1
4.9.4.2
motor : indica el driver correspondiente a que motor hay que "inicializar" sentido
sentido : indica sentido de giro para dicho motor
void configPorts ( )
Configura los puertos A y C como salidas para los motores, el pin 0 del puerto B para interrucion de EMERGENCIA,
y el Puerto L para entradas de los finales de carrera.
4.9.4.3
Funcion que realiza la configuracion de un timer virtual E, seteando la cuenta y habilitando la cuenta
Parameters
60
File Documentation
int
4.9.4.4
Funcion que realiza la configuracion de un timer virtual X, seteando la cuenta y habilitando la cuenta
Parameters
int
4.9.4.5
Funcion que realiza la configuracion de un timer virtual Y, seteando la cuenta y habilitando la cuenta
Parameters
int
4.9.4.6
Funcion que realiza la configuracion de un timer virtual Z, seteando la cuenta y habilitando la cuenta
Parameters
int
4.9.4.7
void deshabTimerE ( )
4.9.4.8
void deshabTimerX ( )
4.9.4.9
void deshabTimerY ( )
4.9.4.10
void deshabTimerZ ( )
4.9.4.11
void iniMasterClock ( )
Funciones del modulo Inicializa el Timer que genera el Master Clock y configura las interrupciones
4.9.5
Variable Documentation
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
61
4.9.5.3
bool flagE
bool flagX
bool flagY
bool flagZ
62
File Documentation
4.9.5.10
4.9.5.11
4.10
#include <LiquidCrystal.h>
#include "buffer.h"
#include "MovimientoManual.h"
Functions
void MainImprimiendo (void)
char LeoGcode ()
4.10.1
Function Documentation
4.10.1.1
char LeoGcode ( )
Returns
:
4.10.1.2
63
Author
Guillermo Airaldiguillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Nicolas Lamath ellama.ing@gmail.com
Date
04 de Setiembre 2014 MainImprimiendo(): Funcion que ejecuta todos los pasos necesarios durante la impresion.
Parameters
Returns
:
4.11
#include "ejecutador.h"
#include "Display.h"
#include <LiquidCrystal.h>
Functions
void MovimientoManual (int option)
4.11.1
Function Documentation
4.11.1.1
MovimientoManual(int option): funcion para realizar movimientos del posicionador con el Joystick. Se elige el eje
que se desea mover (X, Y o Z) y luego se elige con movimientos horizontales la distancia a desplazarse. Por ultimo
con movimientos verticales se realiza los movimientos y con el enter se setea el origen de coodenadas del alto
nivel.
Parameters
int
option : Option indica si se permite setear el origen de coordenadas del alto nivel (1) o no
(0).
Returns
int:
4.12
Macros
#define PULGADASaMILIMETROS 25.4
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen
64
File Documentation
#define DiamTornilloEmm 11
#define K_EXT 1
#define HILOSxPULGADA 12
#define PASOSxVUELTA 400
#define VELOCIDAD_MAXIMA_ABSOLUTA_INCHES 30
#define VELOCIDAD_MAXIMA_ABSOLUTA_MM 800
#define VELOCIDAD_MAXIMA_ABSOLUTA_INCHES_EXTRUYENDO_SIN_MOV 44
#define VELOCIDAD_MAXIMA_ABSOLUTA_MM_EXTRUYENDO_SIN_MOV 112
#define X_MAX_INCHES 15
#define Y_MAX_INCHES 15
#define Z_MAX_INCHES 15
#define E_MAX_INCHES 10000
#define X_MAX_MM 350
#define Y_MAX_MM 300
#define Z_MAX_MM 300
#define E_MAX_MM 10000
#define MAX_TEMP_EXT 280
#define MAX_TEMP_HEATEDBED 80
#define frecMCLK 8000
#define T_MCLK 1/frecMCLK
4.12.1
4.12.1.1
#define DiamTornilloEmm 11
4.12.1.2
4.12.1.3
4.12.1.4
4.12.1.5
#define HILOSxPULGADA 12
4.12.1.6
#define K_EXT 1
4.12.1.7
#define MAX_TEMP_HEATEDBED 80
4.12.1.9
4.12.1.10
4.12.1.11
4.12.1.12
#define VELOCIDAD_MAXIMA_ABSOLUTA_INCHES 30
4.12.1.13
#define VELOCIDAD_MAXIMA_ABSOLUTA_INCHES_EXTRUYENDO_SIN_MOV 44
4.12.1.14
4.12.1.15
4.12.1.16
#define X_MAX_INCHES 15
4.12.1.17
4.12.1.18
#define Y_MAX_INCHES 15
4.12.1.19
65
66
File Documentation
4.12.1.20
#define Z_MAX_INCHES 15
4.13
#include
#include
#include
#include
#include
#include
#include
<iom2560.h>
<ina90.h>
"controlXYZ_E.h"
"layerHW.h"
"errores.h"
"Arduino.h"
"math.h"
Macros
#define LIMITE 3
Functions
error stepper ()
void home_all_axis ()
4.13.1
4.13.1.1
#define LIMITE 3
4.13.2
Function Documentation
4.13.2.1
void home_all_axis ( )
67
Apendice B
Seleccion de los motores paso a paso
Los c
alculos aqu presentes se justifican en Formulas + Calculations for Optium Selection of a stepmotor [88] y Selecting a Steping Motor [89].
Para la selecci
on del motor de paso a utilizar se hace necesario determinar:
Angulo
de paso.
Torque requerido.
Frecuencia de trabajo.
Potencia.
Se busca obtener una cota del
angulo de paso, para discriminar que motores
cumplen con dicha cota, se determina el torque requerido y se compara con el
torque que se indica en las especificaciones del motor. Se debe cumplir que el
primero es menor que el segundo. No obstante, los motores paso a paso cumplen
con cierta curva torque-frecuencia, un ejemplo se ve en la Figura B.2. Con lo cual,
es necesario verificar que a la frecuencia de trabajo obtenida, el torque al que opera
el motor es mayor o igual al momento angular requerido.
Figura B.2: Ejemplo de curva Torque en funcion de las revoluciones por segundo, imagen
extrada de [91].
(B.1)
Wout
Win
Siguiendo el razonamiento a partir de la ecuacion anterior se sabe que el trabajo
sobre la carga esta dado por la fuerza efectiva integrado en la curva por la que se
desplaza dicha carga. El resultado de lo anterior teniendo una fuerza constante es
Por definici
on de la eficiencia se cumple que =
Wout = XFout
(B.2)
Asumiendo que se calculo el trabajo para que se desplace una cantidad igual
al avance, se tiene:
(B.3)
Win = 2rFi n
(B.4)
2rFi n = pF rFi n = TL =
pF
2
(B.5)
De la ecuaci
on anterior falta determinar la fuerza F que act
ua en sentido axial
sobre la carga debido al giro del tornillo y la eficiencia .
En cuanto a la fuerza eficaz, pensando en un caso generico en que se tenga
el tornillo inclinado un
angulo entre 0 y 2, se plantea la ley de Newton. Es
importante resaltar que se consider
o que el sistema a alcanzado el regimen y por
lo tanto su velocidad es constante y no se tiene aceleracion axial.
N W cos() = 0
(B.6)
F FR W sin() = 0
(B.7)
FR = c N
(B.8)
F = W (sin() + c cos())
(B.9)
= tan()
(cos() c tan())
(tan()cos() + c )
(B.10)
tan() =
p
Dm
(B.11)
Figura B.3: Desarrollo de la rosca del tornillo para avance l, imagen tomada de [92].
TT = TM TL TR TM = TT + TR + TL
(B.12)
TR = rb b Nb
(B.13)
N b coincide en m
odulo con la fuerza F en el caso particular en que el tornillo
esta horizontal. Y es para este caso en que se puede escribir la expresion siguiente
del torque requerido del motor
TM =
pF
p
p
+ rb b F + TT = c W (
+ rb b ) + TT = c gMT (
+ rb b ) + TT
2
2
2
(B.14)
247
(B.15)
Es importante destacar que Jrotor se obtiene de la hoja de datos del motor que
se quiere averiguar si cumple con las condiciones necesarias para su empleo.
La inercia del tornillo se calcula como:
1
JT ornillo = ..(De )4 .L.dAc
2
(B.16)
En la ecuaci
on anterior De es el di
ametro externo del tornillo y dAc la densidad
del tornillo de acero, como se puede ver, se aproxima por un cilndro. La inercia
de la carga se obtiene mediante la siguiente expresion.
Jcarga = M (
p 2
)
2
(B.17)
: Angulo
por paso.
Np : Es el n
umero de pasos por revolucion.
T : Periodo del tren de pulsos.
f : Frecuencia del tren de pulsos.
: Velocidad angular del tornillo.
t0 : Perodo de posicionamiento, es el intervalo de tiempo desde que aumenta
desde un valor nulo la frecuencia, hasta llegar a un valor tal que se tiene la
velocidad angular requerida y vuelve a cero.
El angulo de paso y la resoluci
on de la distancia axial cumplen las siguientes
ecuaciones
360L
, este dato es uno de los relevantes para seleccionar el motor, se
=
p
toma el mismo como cota para seleccionar entre los valores estandar.
248
Np =
360
p
p
=
L =
L
Np
(B.18)
La posici
on que toma la carga es entonces un m
ultiplo de L que se incrementa
cada un tiempo T , perodo del tren de pulsos. La grafica de esta magnitud se
puede apreciar en la Figura B.4 y como puede verse es escalonada (seccionalmente
continua), ahora si es es lo suficientemente chico, se puede aproximar la funcion
L
de la posici
on por una recta por el origen, cuya pendiente es
.
T
Figura B.4: El grafico en azul representa la evolucion de los pasos que da el motor en cada
perodo.
V =
Np
p
V
f f =
Np
p
(B.19)
Por lo que conociendo un estimativo de la velocidad que se requiere de desplazamiento por pulso se puede estimar la frecuencia necesaria de tren de pulsos a
inyectar al driver del motor.
De forma an
aloga con la posicion angular, se puede obtener una expresion de
la velocidad angular, habiendo expresado antes, la posicion en radianes.
r =
=
f
180
180
(B.20)
249
t1 = 0,25t0
(B.21)
Y t0 se aproxima conociendo la cantidad del pulsos por revolucion y la frecuencia de los mismos. Hay que tener en cuenta que el tiempo de posicionamiento
incluye un tiempo de aceleraci
on y desaceleracion. Por lo tanto, si bien una primera
aproximacion del mismo es el n
umero de pulsos sobre la frecuencia de los pulsos,
en realidad es mayor.
t1 = 0,25
Np
0,75f
(B.22)
0 =
0,75
f =
f2
180t1
180 0,25Np
(B.23)
Figura B.5: Curva Par motor versus velocidad en pasos por segundo obtenida de [93].
Eje
Eje X
Eje Y
Eje Z
TorqueN.m
0.0875
0.0779
0.1260
Tabla B.1: Resultados de estimacion torque para cada grado de libertad, utilizando un factor
de cobertura K = 2.
de inercias que van desde 400 108 a 600 107 para estimar aproximadamente
el orden de torques requeridos. Luego se eligieron motores que cumplan con ambas
condiciones. Un dato importante a mencionar, es que en primera instancia se penso
en realizar el prototipo utilizando hierro en la mesa del eje X, del y y el Z. La version
actual es con aluminio por lo que los resultados que se mostraran son para un caso
m
as limitante.
El modelo de motor elegido es Wantai 42BYGHW609 Stepper Motor y en la
Figura B.5 se puede apreciar la curva torque-velocidad (pasos por segundo) de
dicho motor. De la hoja de datos se obtuvo el valor de la inercia del rotor, su valor
se reporta como 54g.cm2 = 540 108 Kg.m2 . En base a estos datos se obtuvieron
los requerimientos de par motor que se observan en la Tabla B.1.
En la Figura B.5 se observa que la curva se encuentra en un rango de aproximadamente 0,28N m a 0,32N m en un rango de velocidad que llega a 3600pps. Por
lo que se concluye, observando la Tabla B.1, que dichos motores son adecuados
para ser utilizados como actuadores mecanicos en el prototipo desarrollado.
251
Esta p
agina ha sido intencionalmente dejada en blanco.
Apendice C
Gestion de tiempos
C.1. Cambios en la planificacion
La planificaci
on de las tareas del proyecto sufrio transformaciones en el transcurso del mismo. En este anexo se justificaran dichas transformaciones y como
repercutieron en el diagrama de Gantt. Dado que se vio la necesidad de ir actualizando el mismo a partir de tener una mejor estimacion de las horas que exigan
diversas tareas, las cuales se haban subestimado.
Cabe mencionar que se llego a acotar las tareas que figuraban en el alcance del
proyecto, siempre en consentimiento con los tutores.
Se comenz
o con un diagrama de Gantt en el que, entre otras cosas, se proyectaba tener el armado fsico del posicionador realizado para fines de enero del
2014. Este
es el m
as claro ejemplo de la subestimacion de tareas, causado por la
inexperiencia de los integrantes. A mediados de febrero del 2014, fecha del primer
HITO, no se haba podido cumplir con el punto antes mencionado, as como tampoco se haba decidido cual cabezal de impresion comprar. Con lo que las compras
se vieron demoradas.
Adem
as tras un proceso de familiarizacion con las impresoras en tres dimensiones y con los comandos que estas interpretan, se encontro pertinente extender
el tiempo dedicado a programar el firmware que controla el mecanismo.
Las compras que como se menciono se vieron demoradas, pudieron llevarse a
cabo a fines de marzo, con lo cual en el mes de abril se volvio a ajustar el diagrama
de Gantt. En el se proyecto para junio la fecha de conclusion del armado del
posicionador. Adem
as surgio a esta altura la opcion de que el software encargado
del control de bajo nivel de los motores se efectuara en el contexto de la materia
Sistemas embebidos en tiempo real.
Otro cambio realizado en el software surgio de la necesidad de integrar los
distintos m
odulos del mismo por subgrupos, dedicando un tiempo para efectuar
pruebas.
En el mes de junio del 2014 al verse que el posicionador no se encontraba
finalizado y viendo que el tiempo necesario para concluirlo no era poco, se volvio
a extender el plazo con el fin de realizarlo para fines del mes agosto. Con lo que se
254
Apendice D
Gestion de gastos
D.1. Distintos gastos previstos e imprevistos
En el presente proyecto se marco como objetivo dise
nar un prototipo replicable
en el Uruguay. Por esta razon se busco realizarlo con piezas de caractersticas
est
andar y las cuales se hallen en el mercado local. Esto
se respeto salvo cuando
la diferencia de precios entre el mercado local o en el extranjero va web marcara
una gran diferencia en el presupuesto del proyecto.
Adem
as se entendo pertinente agrupar la mayor cantidad de compras online
Estas
son:
Cabezales: donde se engloban los cabezales y los distintos materiales y herramientas que estos necesitan para su correcto funcionamiento.
Mec
anica: con los materiales necesarios para realizar la estructura.
Electr
onica: con los elementos que componen la misma.
Categora
Cabezales
Mecanica
Electronica
Subtotal
Item
Cabezales
Mecanica
Electronica
Subtotal
Considerando un precio del dolar de $ 24.00, el total asciende a U$S 1329. Hay
que tener en cuenta que existen elementos que no fueron comprados, por ejemplo
las placas de la electr
onica, las cuales fueron brindadas por el Taller de Electronica
Libre (TEL).
As como no result
o necesario comprar herramientas dado que se utilizaron las
que se encuentran en el taller del instituto o en el laboratorio de control.
256
Apendice E
Manuales
E.1. Manual de uso y mantenimiento
En la siguiente secci
on se presentan los diferentes casos de uso del prototipo
desarrollado en el presente proyecto y una breve gua de mantenimiento. Los casos
de uso que quedan disponibles tras finalizado el proyecto son:
Impresi
on 3D.
Movimiento Manual.
Calibraci
on.
E.1.1. Impresion 3D
Un resumen de los pasos a seguir para realizar una impresion son los siguientes:
Puesta a punto del modelo 3D.
Generar archivo G-code.
Transferir archivo a la maquina.
Ordenar impresi
on.
Apendice E. Manuales
Solidworks.
Sketch up.
258
Apendice E. Manuales
Information, como se muestra en la Figura E.2. Realizado el anterior paso se
despliega un men
u para configurar parametros basicos para la impresion de una
maquina RepRap que se podr
a utilizar. En la Figura E.3 se aprecia la configuracion
realizada para la m
aquina M3D. Finalizado los pasos anteriores se podra apreciar
el entorno gr
afico de CURA como se muestra en la Figura E.4. Para que el tenga la
apariencia mostrada debe haberse establecido el modo Full-Settings en la pesta
na
Expert.
En el men
u Advanced se debe chequear el diametro de la boquilla o Nozzle que
debe ser de 0,3mm. Los parametros para retraccion no son necesarios ya que no se
habilit
o en el men
u anterior. El resto de los recuadros se pueden configurar como
se aprecia en la Figura E.6.
261
Apendice E. Manuales
En el men
u de Expert Config es necesario revisar las configuraciones del Skirt y
Raft. Las primeras son de los trazos iniciales que realiza determinando un margen
para el
area de impresi
on y las segundas determinan la superficie inicial para
mejorar la adhesi
on. Las configuraciones de ambas se ven en la Figura E.8. Por otro
lado, se debe mantener la opcion de Spiralize desactivada, el Retraction (retraer
el filamento), se configura solo si se habilita la opcion en el men
u basico y con los
valores mostrados en la siguiente figura.
Apendice E. Manuales
a File/load model file... y se selecciona del directorio correspondiente el fichero
que se desee. Cuando se complete la carga, se puede proceder a generar el G-code
accediendo a File/Save GCode.. y eligiendo el directorio donde se desea almacenar
el archivo.
En lo que sigue de este manual se explicara la transferencia del archivo a la
maquina el cual se aloja en el computador Raspberry Pi y los pasos previos de
calibracion antes de efectuar la impresion.
Realizar impresion
Una vez alojado el archivo que se desea imprimir en la maquina hay una serie
de pasos obligatorios para realizar antes de iniciar la impresion. Los mismos se
listan a continuaci
on.
Homming: El mismo consiste en hallar el cero mecanico del posicionador.
Offset: Consiste en indicar el cero de alto nivel relativo al mecanico.
Ademas existen una serie de calibraciones que son necesarias realizar cada
cierto tiempo, para obtener el mejor rendimiento del prototipo. Las mismas se
explicaran m
as adelante. Continuando con los pasos previos en la Figura E.9 se
muestra el men
u inicial al cual podr
a acceder el usuario y manejar mediante uso
del joystick.
264
Cuando los tres ejes de la maquina se hayan detenido significara que se puede
iniciar la configuraci
on del Offset para la posicion de la maquina. En el caso del
eje Z, siempre se debe llevar el mismo a una posicion inicial adecuada, es decir,
una distancia que medida desde la superficie de la mesa de trabajo, deje pasar tan
solo una hoja de papel. En cuanto a los restantes ejes, se puede setear un inicio
distinto del cero mec
anico, pero no es obligatorio.
En la Figura E.11 se observa el men
u a traves del cual se accede a las opciones
de movimiento manual de cada eje, necesario para realizar el ajuste del cero de
software. En la Secci
on E.1.2 se detalla el proceso de operacion que debe seguir el
usuario.
La idea en este punto es llevar cada eje a una posicion deseada a traves del
joystick. Y para indicar dicha ubicacion como un cero del software de alto nivel se
debe accionar el bot
on de ENTER. Finalizada dicha tarea, ya se puede proceder
a desencadenar el proceso de impresion. Para ello, debe alcanzarse en la pantalla
del prototipo el men
u que se aprecia en la Figura E.12 y presionar ENTER.
265
Apendice E. Manuales
(a) Opci
on de desplazamiento 10cm para el eje Y.
(b) Opci
on de desplazamiento 1cm para el eje Y.
(c) Opci
on de desplazamiento 1mm para el eje Y.
Figura E.14: Diferentes pantallas del men
u de movimiento manual.
E.1.3. Calibracion
Dentro del proceso de calibracion se pueden realizar las siguientes tareas:
Hallar cero mec
anico.
Offset.
267
Apendice E. Manuales
Ortogonalidad mesa de trabajo respecto al eje Z.
Milmetros de filamento por paso del motor perteneciente al cabezal extrusor.
La primer opci
on ya se coment
o en la Seccion E.1.1. La segunda funcionalidad
que ofrece el men
u de calibraci
on fue explicada desde el punto de vista funcional
en E.1.2. Para acceder a dicha funci
on se debe seleccionar el men
u de Calibracion
y seguidamente acceder a la opci
on de offset como se muestra en la Figura E.15.
268
La cantidad de filamento a extruir se configura moviendo, en la direccion vertical, la palanca del joystick. Una vez realizado esto, se debe accionar el boton
de ENTER para comenzar la prueba. En las Figuras E.18(a) y E.18(b) podemos
apreciar el men
u una vez accedido a la opcion pertinente y la configuracion de
filamento a extruir respectivamente.
E.1.4. Mantenimiento
El mantenimiento de la maquina involucra una serie de tareas necesarias para
el adecuado funcionamiento mecanico de la estructura y ademas de la extrusion.
Es recomendable aplicar un lubricante liviano (que ademas limpia) a las varillas
roscadas que traccionan en cada eje con cierta regularidad, no mayor a una semana
y mantener los ejes limpios.
Por otro lado, es recomendable limpiar regularmente la boquilla del extrusor,
para lo cual se debe calentar el nozzle previo a retirarlo y hacer extruir a la maquina
sin el mismo. A este u
ltimo limpiarlo retirando toda impureza posible y verificando
que el orificio de 0,3mm se encuentre desbloqueado.
Adem
as se debe verificar el estado de los finales de carrera y verificar conexiones
en caso de mal funcionamiento. En caso de no solucionar el problema puede intentar
remplazarlo por otro.
En cuanto a la correa dentada, la misma no debe estar muy gastada. En caso de
detectarse dicho problema debera reemplazarse por una nueva correa. Las medidas
269
Apendice E. Manuales
(a) Configuraci
on de milimetros a extruir para calibracion1.
(b) Configuraci
on de milimetros a extruir para calibracion 2.
Figura E.18: Calibracion del extrusor.
de la misma son 4900 de largo, 1cm de ancho y pase XL(distancia entre crestas),
dicha informaci
on se resume en el c
odigo 490XL.
Obs (1): Se debe tornear los tornillos para que entren y calcen en el ruleman, que tiene un di
ametro
interior de 8mm.
Obs (2): Se debe realizar tanto la colocaci
on del tornillo en el ruleman y del ruleman en la planchuela
de la forma m
as justa posible y rematarlas con un martillazo.
271
Apendice E. Manuales
Pieza para acoplamiento de los motores
Pieza hecha con perfil de secci
on cuadrada de 4cm 4cm y de unos 10cm de
largo. Se le deben realizar 5 perforaciones en unos de los lados, una central circular
con un diametro superior a Xcm y 4 para sujetar el motor a la pieza.
La otra perforaci
on que se le debe realizar dependiendo como se va a acoplar
el eje del tornillo al tornillo, est
a puede ser en el lado opuesto a las otras 4 o en
uno de los lados adyacentes.
Esta pieza no es igual para el Eje X que para los otros dos. Esto es porque
depende de como es el acople entre el eje del motor y el tornillo (el cual debe ser
torneado para llevarlo hasta los 8mm de diametro) se realice. Los dos casos se
muestran en la Figura E.21.
(a) Versi
on X.
(a) Pieza necesaria para realizar el (b) Ejemplo de engranajes y coacople directo.
rrea necesarias para realizar el
acople en paralelo.
Figura E.22: Ejemplos de los elementos claves para realizar los distintos acoples.
272
Perforaciones
Las perforaciones que se deben realizar en los perfiles de aluminio para todos
los ejes son:
perforaciones del lado inferior de los perfiles cortos y largos, donde se sujetaran las placas que unen los perfiles y mantienen la forma de los rectangulos.
Para esto se deben realizar 4 perforaciones por esquina de Xcm de diametro,
y centradas a la distancia que se muestran en la Figura E.24
273
Apendice E. Manuales
perforaciones en el lado interior de los perfiles cortos para sujetar las piezas
que fijan los tornillos, Subsecci
on E.2.2.
perforaciones en el lado interior de los perfiles cortos de 8mm de diametro
para colocar las guas de acero pulido.
La distancia de la mesa a tornillo queda fijada por la pieza que se construyo
para trasladar el movimiento, y esta depende basicamente de las dimensiones
del tornillo y del grosor de la placa que se le agrega. De la misma forma
la distancia de la mesa a las guas de acero pulido depende de los cojinetes
lineales. Estas dos distancias mencionadas no tienen porque ser iguales, para
corregir las diferencias se deben realizar las perforaciones contemplando las
distintas alturas, como se ve en la Figura E.25.
Figura E.25: Diferencia de altura entre las perforaciones de las guas y la del tornillo.
perforaci
on en el lado interior de los perfiles cortos de un diametro mayor a
8mm para que atraviese el tornillo.
Las posiciones exactas donde se debe perforar dependiendo de cual eje sea,
estas medidas se ver
an en la Secci
on E.2.4.
Para el caso de los ejes Y y Z las placas deben de tener un agujero por el que
pase la correa que se encarga de trasladar el movimiento del motor al tornillo.
Armado
El armado de un eje se realiza formando el rectangulo con las guas y el tornillo, como se ve en la Figura E.23. Luego se colocan las placas para prevenir las
deformaciones del rect
angulo.
275
Apendice E. Manuales
Eje X
Para el Eje X los materiales necesarios se detallan en la Tabla E.2.4 y las
medidas del mismo se muestran en la Figura E.27.
Material
Perfiles de aluminio de secci
on de 3cm 3cm
Pieza para acoplamiento
Pieza con ruleman
Tornillo de 1/2 pulgada de diametro
Guias de acero pulido de 8mm de diametro
Cojinetes lineales de 8mm de diametro
Pieza para la tuerca
Placa de alumino de 4mm de espesor
cantidad
2 70cm
2 40cm
1 (version X)
2
1 1mt
2 80cm
4
1
36cm 35cm
El tornillo debe tener 62cm con rosca y del lado que no se encuentra el motor
debe continuar torneado (8mm de di
ametro) como maximo 2cm. Y del lado opuesto
el tornillo debe continuar torneado para quedar lo suficientemente cerca del eje del
motor y realizar el acoplamiento con la pieza del acople directo.
276
cantidad
2 40cm
2 26cm
1 (version YZ)
2
1 1mt
2 80cm
4
1
8cm 21cm
El tornillo debe tener 54cm con rosca y del lado que no se encuentra el motor
debe continuar torneado (8mm de diametro) como maximo 2cm. Y del lado opuesto
debe continuar torneado 2, 5cm.
Eje Z
Para el Eje Z los materiales necesarios se detallan en la Tabla E.2.4 y las
medidas del mismo se muestran en la Figura E.29.
277
Apendice E. Manuales
Material
Perfiles de aluminio de secci
on de 3cm 3cm
Pieza para acoplamiento
Pieza con ruleman
Tornillo de 1/2 pulgada de diametro
Guias de acero pulido de 8mm de diametro
Cojinetes lineales de 8mm de diametro
Pieza para la tuerca
Placa de alumino de 4mm de espesor
cantidad
2 62cm
2 30cm
1 (version YZ)
2
1 1mt
2 80cm
4
1
22cm 22cm
El tornillo debe tener 54cm con rosca y del lado que no se encuentra el motor
debe continuar torneado (8mm de di
ametro) como maximo 2cm. Y del lado opuesto
debe continuar torneado 2, 5cm.
E.2.5. Interconexion
Para formar la totalidad de la estructura, se deben juntar de forma que quede
armado como se presenta en la Figura E.30.
278
Los Ejes Z se deben colocar parados a los lados del Eje X como se muestran en la
Figura E.30 y se deben ajustar con bulones utilizando las perforaciones realizadas
para tal fin. El Eje Y se coloca en las mesas de los Ejes Z.
E.2.7. Tensor
Para cumplir con el objetivo de que el movimiento vertical sea uniforme y
partiendo de la hip
otesis de que los tornillos son iguales, es importante trasladar
el movimiento de un tornillo al otro con relacion 1 : 1. Esto se realiza con una
correa dentada y con engranajes aptos para la misma. Debido a la dificultad que
se presenta al encontrar una correa del largo exacto para que se encuentre tensada,
se coloca un tercer punto que forme un triangulo con los dos tornillos, con una
correa de 49 pulgadas y las distancias proyectadas se muestra en la Figura E.31,
se calcula la colocaci
on del tensor.
279
Apendice E. Manuales
El tensor se implemento como dos rulemanes que giran en un bulon de 8mm
de diametro. En la Figura E.31 se muestra un ejemplo de la triangulacion formada
por la correa donde X es la distancia entre los tornillos de los Ejes Z y el pvot, y
H es la alturas del triangulo.
280
Identificador
Material
Valor
C1
Capacitor electroltico
10u/50V
C2
Capacitor electroltico
10u/50V
C3
Capacitor
100n
C4
Capacitor
100n
C6
Capacitor
100n
C7
Capacitor
100n
C8
Capacitor
3,3u
C9
Cap. electroltico
470u/50V
D1
Diodo SCHOTTKY
SR3200
D2
Diodo SCHOTTKY
SR3200
D3
Diodo SCHOTTKY
SR3200
D4
Diodo SCHOTTKY
SR3200
D5
Diodo SCHOTTKY
SR3200
D6
Diodo SCHOTTKY
SR3200
D7
Diodo SCHOTTKY
SR3200
D8
Diodo SCHOTTKY
SR3200
DC1
conversor DC-DC
LM7805
IC1
4 AND
MC4081
L297
Controlador de motores PAP
L297
L298
2 puentes H
L298
R1
Resistencia
1k
R2
Resistencia
1
R3
Resistencia
2,2k
R4
Resistencia
1
R5
Resistencia
1
R6
Resistencia
1
R7
Resistencia
47k
R8
Resistencia
4,7k
R9
Potenciometro
5k
R10
Resistencia
410
R11
Resistencia
10k
R12
Resistencia
390
T1
Transistor
BC547
LED1
Led
Tabla E.1: Tabla de componentes para el armado del driver.
281
Apendice E. Manuales
STEPPER
MOTOR
DRIVER
VCC
MODULAR3D V_3.1
GND
VDD
282
Referencias
[1] D. J. Harrop, Applications of 3D Printing 2014-2024 Forecasts, Markets, Players. IDTechEx, 2014.
[2] RepRap/es. http://reprap.org/wiki/RepRap/es.
[3] Impresoras 3D: historia, como trabajan y algunas de las impresoras mas populares. http://geeksroom.com/2014/02/impresoras-3d/82881/, 2014.
[Online; accessed: 2014-11-18].
[4] 6-axis
3D
Printer
(video)
#3DThursday
#3DPrinting.
http://onestopbot.net/2013/10/10/
6-axis-3d-printer-video-3dthursday-3dprinting/, 2013.
[Online;
accessed: 2014-11-15].
[5] SCI-Arc
student
develops
freeform
3D
printing
with
undofunction.
http://www.dezeen.com/2013/07/23/
sci-arc-student-develops-freeform-3d-printing-with-undo-function/,
2013. [Online; accessed: 2014-11-15].
[6] PiMaker 3D Printer. http://www.thingiverse.com/thing:128700, 2013.
[Online; accessed: 2014-11-18].
[7] News: Maplin brings 3D printing to the High Street. http://www.rothbiz.
co.uk/2013/07/news-3468-maplin-brings-3d-printing-to.html, 2013.
[Online; accessed: 2014-11-18].
[8] 3D printing technologies. http://www.3d-printing-experts.com/
knowledge-base/3d-printing-technologies/, 2014. [Online; accessed:
2014-10-30].
[9] J. R. S., As funciona la extrusion en las impresoras 3d, My
BQ y yo, 2014.
http://www.mibqyyo.com/articulos/2014/09/22/
asi-funciona-la-extrusion-en-las-impresoras-3d/#/vanilla/
discussion/embed/?vanilla_discussion_id=0.
[10] RepRap Argentina. http://reprap-argentina.blogspot.com/, 2012.
[Online; accessed: 2014-11-18].
[11] Orca review. http://forums.reprap.org/read.php?152,94557, 2011.
[Online; accessed: 2014-11-18].
Referencias
[12] The FlashForge Creator and the practicalties of 3D printing at home. http:
//www.gizmag.com/review-3dprinter-flashforge/29064/, 2013. [Online;
accessed: 2014-11-18].
[13] CNC Router 3D 40 x 30 para metal. http://www.seul.cl/tienda/
277-cnc-router-3d-40-x-30-para-m%C3%A9tal.html. [Online; accessed:
2014-11-18].
[14] NEW CNC 3020 Router Engraving Drilling/Milling Machine (UC124).
http://www.marcmart.net/2012/02/16/manual-cnc-3020/, 2012. [Online;
accessed: 2014-11-18].
[15] El hilo de mis impresoras. http://spainlabs.com/foro/viewtopic.php?
f=36&t=509, 2013. [Online; accessed: 2014-11-18].
[16] Impresora 3D de bothacker. http://blog.bricogeek.com/noticias/
diy/impresora-3d-de-bothacker-hecha-con-t-slot/, 2012. [Online; accessed: 2014-11-18].
[17] MakerBot
Digitizer
Brings
Desktop
3D
Scanning
To
All.
http://www.nextpowerup.com/news/2891/
makerbot-digitizer-brings-desktop-3d-scanning-to-all.html, 2013.
[Online; accessed: 2014-11-18].
[18] C. Canto, Motores de paso o steppers motors, Facultad de Ciencias, UASLP, pp. 117, 2001. http://galia.fc.uaslp.mx/~cantocar/
microcontroladores/SLIDES_8051_PDF/21_MOTOR.PDF.
[19] C. y. M. Granda, Brazo robotico, I.E.S. VALLECAS I, pp. 3
4, 2009. http://www.madridbot.org/Documentos/Documentos%202009/
Prueba%20Libre/Memoria%20Brazo%20Robotico.pdf.
[20] STMicroelectronics, Stepper motor controllers, Journal, vol. 10, no. 2,
pp. 12, 2001.
http://www.st.com/st-web-ui/static/active/en/
resource/technical/document/datasheet/CD00000063.pdf.
[21] T. Loveland, Understanding and writing g & m code for cnc machines,
TECHNOLOGY AND ENGINEERING TEACHER, vol. 10, no. 2, pp. 12,
2012.
[22] CNC Machine Overview and Computer Numerical Control History. http:
//www.cnccookbook.com/CCCNCMachine.htm. Accessed: 2014-11-09.
[23] 3D
Model
Repositories.
3d-model-repositories/.
http://3dprintingforbeginners.com/
Referencias
[26] List of 3D modeling software. http://en.wikipedia.org/wiki/List_of_
3D_modeling_software.
[27] CURAfree and easy to use software. https://www.ultimaker.com/pages/
our-software.
[28] Slic3rg-code generator for 3d printers. http://slic3r.org/.
[29] Skeinforge3d model into g-code instructions for reprap. http://reprap.
org/wiki/Skeinforge.
[30] Teacup Firmware. http://reprap.org/wiki/Teacup_Firmware.
[31] RepRap
software.
Host
Software.
http://reprap.org/wiki/Reprap_host_
Referencias
[43] Arduino Mega Pololu Shield. http://reprap.org/wiki/Arduino_Mega_
Pololu_Shield http://2.bp.blogspot.com/-L9q_ScmVcVI/UYFUGYXK-FI/
AAAAAAAABUg/0AOrsgd88uY/s1600/RepRapWiringDiagram.jpg, note = Accessed: 2014-11-10.
[44] Beagle Bone CNChardware capes. http://blog.machinekit.io/p/
hardware-capes.html. Accessed: 2014-11-12.
[45] Alligator electronic control board for Reprap 3D printers. http://www.
3dartists.org/#project. Accessed: 2014-10-30.
[46] Think3dPrint3d, Duet - Arduino Due Compatible 3D Printer Electronics,
journal, vol. 10, no. 2, p. 5, 2013.
[47] Pololustepper motor driver carrier. http://www.pololu.com/product/
1182. Accessed: 2014-10-12.
[48] EasyDriver stepper motor driver. https://www.sparkfun.com/products/
10267.
[49] DRV8811 1.9a bipolar stepper motor driver. http://www.ti.com/
product/drv8811.
[50] Perfil estructural de alumninio. http://articulo.mercadolibre.com.mx/
MLM-460607190-cnc-perfil-estructural-de-aluminio-routers-plasma-cnc-mmu-_
JM.
[51] E. Oberg, A. Valentine, and J. Stabel, Machinerys reference series. The
Industrial press, 1910.
[52] M. I. Ltd, 3D Printer Extruder MC3D User Guide V1.0, MIB Instruments
Ltd, 2013.
[53] 5mm shaft to 8mm screw rod flexible coupling. http://www.aliexpress.
com/item/5mm-shaft-to-8mm-rod-flexible-coupling/1234314127.
html.
[54] A. Corporation, Atmel atmega640/v-1280/v-1281/v-2560/v-2561/v, Atmel
Corporation, vol. 10, no. 2, pp. 12, 2012.
[55] A. Corporation, 8-bit microcontroller with 8/16/32k bytes of isp flash and
usb controller, Atmel Corporation, vol. 10, no. 2, pp. 12, 2012.
[56] USB
Peripheral/Host
Controller
with
SPI
Interface.
http://www.maximintegrated.com/en/products/interface/
controllers-expanders/MAX3421E.html. Accessed: 2014-11-09.
[57] G. Airaldi, G. Ant
unez, and J. Basualdo, Ctrlmotors3d, 2014.
[58] Arduino Controlled CNC / 3D Printer Hybrid. http://www.
instructables.com/id/Arduino-Controlled-CNC-3D-Printer/.
Accessed: 2014-11-09.
286
Referencias
[59] Archive for the CNC Category. http://blog.arduino.cc/category/
cnc/. Accessed: 2014-11-09.
[60] Building
Your
Makeblock
3D
Printing
Project
with
Arduino.
http://www.makeblock.cc/blog/
building-your-makeblock-3d-printing-project-with-arduino/. Accessed: 2014-11-09.
[61] STMicroelectronics, Dual full-bridge driver, Journal, vol. 10, no. 2, pp. 12,
2001. https://www.sparkfun.com/datasheets/Robotics/L298_H_Bridge.
pdf.
[62] H. Sax, Stepper motor driving, STMicroelectronics, vol. 10, no. 2, pp. 12,
1995. http://sites.poli.usp.br/d/pmr2570/1734_l297an.pdf.
[63] T. I. Incorporated, Lm117/lm317a/lm317-n three-terminal adjustable regulator, Journal, vol. 10, no. 2, pp. 12, 2004. http://www.ti.com/lit/ds/
symlink/lm117.pdf.
[64] ST, AN470 Application Note the l297 stepper motor controler, journal,
2003.
[65] DIY Stepper Controller. http://www.pyroelectro.com/tutorials/
stepper_controller_board/. Accessed: 2014-11-19.
[66] ST, AN235 Application Note stepper motor driving, journal, no. 0788, p. 6,
1995. http://users.ece.utexas.edu/~valvano/Datasheets/Stepper_ST.
pdf.
[67] Fairchild, 3-terminal 1a positive voltage regulator, Journal, vol. 10, no. 2,
pp. 12, 2014. https://www.fairchildsemi.com/datasheets/LM/LM7805.
pdf.
[68] LiquidCrystal
Library.
http://arduino.cc/en/Reference/
LiquidCrystal. Accessed: 2014-11-09.
[69] STMicroelectronics, Stp60nf06, Journal, vol. 10, no. 2, pp. 1
2, 2007.
http://www.st.com/web/en/resource/technical/document/
datasheet/CD00002318.pdf.
[70] T. I. Incorporated, Lm35 precision centigrade temperature sensors, Journal,
vol. 10, no. 2, pp. 12, 1999. http://www.ti.com/lit/ds/symlink/lm35.
pdf.
[71] SD Library. http://arduino.cc/en/pmwiki.php?n=Reference/SD. Accessed: 2014-11-09.
[72] Scketchup. http://www.sketchup.com/es/.
[73] Blender. https://www.blender.org/.
287
Referencias
[74] AutoCad. http://www.autodesk.es/products/autocad/overview.
[75] ReplicatorG. http://replicat.org/.
[76] Ladyada, Setting up a raspberry pi as a wifi access point, Adafruit Industries, 2014.
[77] Adaptador USB Nano Inal
ambrico N de 150Mbps. http://www.tp-link.
com/mx/products/details/?model=TL-WN725N. Accessed: 2014-11-09.
[78] RPi USB Wi-Fi Adapters.
Adapters. Accessed: 2014-11-09.
http://elinux.org/RPi_USB_Wi-Fi_
[79] WinSCP Free SFTP, SCP and FTP client for Windows. http://winscp.
net/eng/docs/lang:es, 2014. [Online; accessed: 2014-11-28].
[80] D. E. Simon, An Embedded Software Primer. Pearson Education, 1999.
[81] J. I. Quinones, Applying acceleration and deceleration profiles to bipolar
stepper motors, Analog Applications Journal, Texas Instrument, vol. 10,
no. 2, pp. 12, 2012.
[82] N. Instruments, Fundamentos de control de movimiento, 2013. http://
www.ni.com/white-paper/3367/es/.
[83] Atmel, Avr446: Linear speed control of stepper motor, journal, 2006. http:
//www.ni.com/white-paper/3367/es/.
[84] D. Austin, Avr446: Linear speed control of stepper motor, EE Times-India,
Junio, 2005. http://fab.cba.mit.edu/classes/MIT/961.09/projects/
i0/Stepper_Motor_Speed_Profile.pdf.
[85] A. V. Garca, Protocolo de calibracion y optimizacion mecanica de una impresora 3D Open Source, Masters thesis, Universidad Carlos III de Madrid,
2012.
[86] Calibration/es. http://reprap.org/wiki/Calibration/es.
[87] A. DEVICES, Monolithic thermocouple amplifiers with cold junction compensation, 1999. http://www.me.psu.edu/rahn/me462/AD594_5_c.pdf.
[88] B. Motoren, Formulas + calculations for optium selection of a stepmotor,
2014.
[89] O. M. G. CATALOGUE, Selecting a stepping motor, 2014.
[90] WITS Students Suggest Mechatronic Design Improvements to Optimize Peak Hour Trading in Restaurants. http://www.pneudrive.co.
za/PastEntries/2011SubmissionSummaries/2011WITSAutoRestaurant/
tabid/100/Default.aspx, 2014. [Online; accessed: 2014-12-02].
288
Referencias
[91] 15Y - High Torque Stepper Motor - Anaheim Automation. http://www.
anaheimautomation.com/products/gearbox/planetary-gearbox-item.
php?sID=11&pt=i&tID=109&cID=30, 2011. [Online; accessed: 2014-12-02].
[92] V. Bhandari, Design of Machine Elements. Tata McGraw-Hill, 2007.
[93] 42BYGHW609
Stepper
Motor
Datasheet.
https://
www.openimpulse.com/blog/document-viewer/?pdf_file=
42BYGHW609-Stepper-Motor-Datasheet1.pdf, 2014.
[Online; accessed:
2014-12-02].
289
Esta p
agina ha sido intencionalmente dejada en blanco.
Glossary
ABS acrilonitrilo butadieno estireno, es un termoplastico utilizado en la impresion
3D bajo el proceso de deposicion fundida.. 9
Arduino Arduino es una plataforma de hardware libre, basada en una placa con
un microcontrolador y un entorno de desarrollo, dise
nada para facilitar el
uso de la electr
onica en proyectos multidisciplinares.. 24
ASCII American Standard Code for Information Interchange, en espa
nol: Codigo
Est
andar Estadounidense para el Intercambio de Informacion. Es un codigo
de caracteres basado en el alfabeto latino.. 19
backlash Es el tiempo muerto producto del acople no perfecto entre piezas mecanicas cuando ocurre un movimiento.. 32, 41
CAD Computer-Aided Design, en espa
nol: dise
no asistido por computadora.. 9
DHCP Dynamic Host Configuration Protocol, en espa
nol: protocolo de configuraci
on din
amica de host. Es un protocolo de red que permite (servicio) a los
clientes de una red IP obtener sus parametros de configuracion automaticamente.. 82
DNS Domain Name System, en espa
nol: Sistema de Nombres de Dominio. Es un
sistema de nomenclatura jerarquica para computadoras, servicios o cualquier
recurso conectado a Internet o a una red privada.. 82
HDMI High-Definition Multimedia Interface en espa
nol: interfaz multimedia de
alta definici
on. Es una norma de audio y vdeo digital cifrado sin compresion..
49
MDF Medium Density Fibreboard, en espa
nol: tablero de fibra de densidad media.. 31
PLA poli
acido l
actico, es un termoplastico utilizado en la impresion 3D bajo el
proceso de deposici
on fundida.. 9
Glossary
PWM Pulse-Width Modulation, en espa
nol: modulacion por ancho de pulsos. Es
una tecnica en la que se modifica el ciclo de trabajo de una se
nal periodica
(una senoidal o una cuadrada, por ejemplo), ya sea para transmitir informacion a traves de un canal de comunicaciones o para controlar la cantidad de
energa que se enva a una carga.. 49
SSH Secure SHell, en espa
nol: interprete de ordenes segura. Es el nombre de un
protocolo y del programa que lo implementa, y sirve para acceder a maquinas
remotas a traves de una red.. 84
SSID Service Set IDentifier es el identificador de la red inalambrica.. 83
Stand Alone Sistema capaz de funcionar sin la necesidad de estar conectado a
un ordenador.. 123
TTL Transistor-Transistor Logic, en espa
nol: logica transistor a transistor. Es
una familia l
ogica o lo que es lo mismo, una tecnologa de construccion de
circuitos electr
onicos digitales. En los componentes fabricados con tecnologa TTL los elementos de entrada y salida del dispositivo son transistores
bipolares.. 53
WAP Wireless Access Point en espa
nol: dispositivo que interconecta otros dispositivos de comunicaci
on al
ambrica para formar una red inalambrica.. 82
292
Indice de tablas
4.1. Ventajas y desventajas de las elecciones tomadas. . . . . . . . . . .
4.2. Tabla con los valores aproximados de los ejes. . . . . . . . . . . . .
4.3. Tabla de medidas de las mesas. . . . . . . . . . . . . . . . . . . . .
34
35
40
47
49
51
51
53
53
131
134
134
134
138
140
Indice de tablas
7.7. Medida de distancias realizadas con el extensiometro para cada punto intermedio del recorrido en el eje Z. . . . . . . . . . . . . . . . .
7.8. Valores medios, desviaci
on est
andar, rango y repetibilidad para cada
punto Yk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.9. Ganancias mec
anicas relevadas para cada eje y error relativo frente
al valor te
orico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.10. Setpoint vs temperatura de estabilizacion. . . . . . . . . . . . . . .
142
144
144
151
294
Indice de figuras
2.1. Historia de las impresoras 3D, primera parte. Imagen modificada
de [3]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Historia de las impresoras 3D, segunda parte. Imagen modificada
de [3]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. Dise
no de impresora 3D basado en coordenadas esfericas. . . . . .
2.4. Dise
no de impresora 3D basado en coordenadas polares. Imagen
extrada de [6]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5. Dise
no de impresora 3D basado en coordenadas cartesianas. Imagen
extrada de [7]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6. Sistema que muestra como trabaja la impresion por laminado. Imagen extrada de [8]. . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7. Esquema de un cabezal de impresion 3D por deposicion fundida.
Imagen extrada de [9] . . . . . . . . . . . . . . . . . . . . . . . . .
2.8. Estructura de impresora 3D que usa partes impresas y guas de
acero pulido. Imagen extrada de [10] . . . . . . . . . . . . . . . . .
2.10. Estructura de impresora en madera liviana. Imagen extrada de [12]
2.9. Cabezal utilizado en la impresora mostrada en la figura 2.8. Imagen
extrada de [11] . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11. Estructuras en aluminio. . . . . . . . . . . . . . . . . . . . . . . . .
2.12. Scanner 3D. Imagen extrada de [17] . . . . . . . . . . . . . . . . .
2.13. Ejemplo de motor paso a paso. . . . . . . . . . . . . . . . . . . . .
2.14. Esquema de motores PAP (unipolares y bipolares). Imagen extrada
de [18] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.15. Principio de funcionamiento de un motor paso a paso. Imagen extrada de [19] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.16. Curva Par-velocidad: fenomeno de resonancia, imagen tomada de [20]
2.17. Unas de las primeras maquinas de control numerico. Imagen extrada de [22]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.18. Esquema generico de electronica necesaria para el control de movimiento y temperatura de una impresora 3D. . . . . . . . . . . . . .
3.1.
3.2.
3.3.
3.4.
Estructura mec
anica basada en sistema de ejes cartesianos.
Diagrama de bloques de Hardware y relacion con mecanica.
Esquema hardware y bloques internos basicos. . . . . . . . .
Esquema de ubicacion cabezal impresion o fresador. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
7
8
8
8
10
11
12
12
12
13
14
15
16
16
18
19
24
27
28
29
30
Indice de figuras
3.5. Men
u principal circular. . . . . . . . . . . . . . . . . . . . . . . . .
30
32
34
35
36
37
38
39
39
40
41
42
42
43
44
45
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
50
52
52
54
55
55
56
57
58
58
59
60
61
62
Indice de figuras
5.16. Gr
aficos comparativos de los modos de operacion. Figura tomada
de [66]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.17. Esquem
atico y layout del driver version 1.0. . . . . . . . . . . . . .
5.18. Gr
aficos de las se
nales de salida del driver fabricado (f = 0,5Hz;
DC = 50 %) - version 1.0. . . . . . . . . . . . . . . . . . . . . . . .
5.19. Fotografa tomada durante los primeras pruebas realizadas al eje X
utilizando la versi
on 2.0 del driver. . . . . . . . . . . . . . . . . . .
5.20. Configuraci
on utilizada para generar la alimentacion logica del driver en la versi
on final. Figura tomada de [67]. . . . . . . . . . . . .
5.21. Circuito de chop. Figura tomada de [64]. . . . . . . . . . . . . . . .
5.22. Esquema de razonamiento para el control de corriente en un bobina.
Figura tomada de [64]. . . . . . . . . . . . . . . . . . . . . . . . . .
5.23. Se
nales destacables obtenidas con el control de corriente de carga.
A y B se
nales de fase para una bobina, se
nal de inhabilitacion,
corriente por resistencia de sensado y corriente de carga (diente de
sierra, debido a que con la bobina se logra un integrador). Figura
tomada de [64]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.24. Esquem
atico driver version final. . . . . . . . . . . . . . . . . . . .
5.25. PCB driver versi
on final (escala 1:1). . . . . . . . . . . . . . . . . .
5.26. Layout driver version final. . . . . . . . . . . . . . . . . . . . . . .
5.27. Fotografa de unos de los driver fabricados. . . . . . . . . . . . . .
5.28. Elementos que componen la interfaz con el usuario. . . . . . . . . .
5.29. Primer prototipo realizado de heated bed. . . . . . . . . . . . . . .
5.30. Dise
no de la heated bed platform. . . . . . . . . . . . . . . . . . . .
5.31. Circuito de control de la heated bed. . . . . . . . . . . . . . . . . .
5.32. Dise
no de la heated bed platform. . . . . . . . . . . . . . . . . . . .
6.1. Diagrama de bloques del software e interaccion con electronica y
mec
anica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Diagrama de flujo de informacion que presenta el marco de la red
inal
ambrica a configurar. . . . . . . . . . . . . . . . . . . . . . . . .
6.3. Vista de un dispositivo que encuentra la red de la maquina (SSID
recuadrado). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4. Diagrama que representa la comunicacion entre el computador y el
microcontrolador. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5. Diagrama de tiempos de las entradas al integrado de control presente en el driver. Figura tomada de [20]. . . . . . . . . . . . . . .
6.6. Diagrama de bloques bajo Nivel e interaccion con Alto Nivel. . . .
6.7. Generaci
on de Relojes para cada motor a partir de Timers virtuales
comandados por un Master Clock. . . . . . . . . . . . . . . . . . .
6.8. Diagrama de flujo, donde se observa la implementacion del Round
Robin con el control de los motores, los finales de carrera y el boton
de emergencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.9. Se
nales de Clock a 22KHz para cada driver del motor paso a paso.
6.10. Flujo de funci
on void home all axis() . . . . . . . . . . . . . . . . .
62
64
65
65
66
67
68
69
70
70
71
71
72
74
75
75
77
80
82
84
85
88
90
90
92
94
98
297
Indice de figuras
6.11. Curva de torque velocidad para un motor bipolar. Imagen extrada
de [81]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.12. Perfil trapezoidal de velocidad. Imagen extrada de [82]. . . . . . . 101
6.13. Perfil de velocidad vs. velocidad (pulso/sec) motor stepper. Imagen
extrada de [83]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.14. Perfil de velocidad que se obtendra seg
un datos para K1 = 128. . . 104
6.15. Logica del algoritmo de control de velocidad. . . . . . . . . . . . . 104
6.16. Medida relevada de la variaci
on de velocidad. . . . . . . . . . . . . 106
6.17. Ejemplo de los contadores del control de temperatura. Donde se
muestran 2 contadores propios de las clase contTemp uno seteado
en 10 (50 % del tiempo) y otro en 5 (25 % del tiempo). . . . . . . 107
6.18. Cuerva controlador. . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.19. Diagrama entrada-salida del modulo interprete.cpp. . . . . . . . 108
6.20. Diagrama de Flujo de la funcion comando interpretar(char gcode[
]). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.21. Diagrama l
ogico donde se enmarca el razonamiento desarrollado en
el m
odulo Ejecutador (no representa verdadero flujo de informacion).112
6.22. Comparaci
on entre el sistema de coordenadas en lo que basan sus
razonamientos los m
odulos de bajo (control de motores) y alto nivel
(ejecutador). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.23. Diagrama de flujo para ejecutar la accion de movimiento lineal,
extruyendo o no. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6.24. Esquema de movimiento en dos direcciones que muestra la diferencia
entre forzar la concurrencia (lnea punteada) o no forzarla (lnea
continua). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.25. Diagrama de flujo que representa la obtencion de la velocidad en el
equivalente de cantidad de perodos de Master Clocks. . . . . . . . 119
6.26. Esquema de funcionamiento del Main Principal. . . . . . . . . . . . 122
6.27. Esquema de funcionamiento del Main de impresion. . . . . . . . . . 124
7.1. Descripci
on gr
afica del experimento 1. . . . . . . . . . . . . . . . .
7.2. Descripci
on gr
afica del error sistematico acumulado en el experimento 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3. Descripci
on gr
afica del experimento 2. . . . . . . . . . . . . . . . .
7.4. Descripci
on gr
afica del experimento para realizar la cuantificacion
de la repetibilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5. Montaje del extensi
ometro en el eje X. . . . . . . . . . . . . . . .
7.6. Mediciones de repetibilidad realizadas en el eje X. . . . . . . . . .
7.7. Montaje del extensi
ometro en el eje Y. . . . . . . . . . . . . . . .
7.8. Mediciones de repetibilidad en el eje Y. . . . . . . . . . . . . . . .
7.9. Distancia de tramos para el experimento realizado en eje Y. . . . .
7.10. Medidas en el eje Y luego de realizar un lubricado en tornillo y
rulemanes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.11. Montaje del extensi
ometro en el eje Z. . . . . . . . . . . . . . . . .
7.12. Mediciones de repetibiliad en el eje Z. . . . . . . . . . . . . . . . .
7.13. Distancia de tramos para el experimento realizado en eje Z. . . . .
298
130
130
131
132
133
135
136
137
138
139
140
141
142
Indice de figuras
7.14. Medidas del eje Z luego de aplicar la lubricacion. . . . . . . . . . .
7.15. Comparaci
on de las ganancias mecanicas para los tres grados de
libertad luego de lubricar tornillos y rulemanes. . . . . . . . . . . .
7.16. Temperatura de la heated bed platform con un setpoint de 60 C,
donde cada iteracion es cada 1 segundo. . . . . . . . . . . . . . . .
7.17. Temperatura de la heated bed platform con un setpoint de 110 C. .
7.18. Medidas de la temperatura vs termometro patron. . . . . . . . . .
7.19. Medidas del extrusor con el factor corregido. . . . . . . . . . . . .
7.20. Temperatura del extrusor con un setpoint de 220 C. Iteraciones
cada un segundo. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.21. Temperatura medida con un setpoint igual a 220 C para los dos
sistemas de control. Iteraciones cada un segundo. . . . . . . . . . .
7.22. Temperatura medida con un setpoint igual a 220 C con distintos
rangos de control. Iteraciones cada un segundo. . . . . . . . . . . .
7.23. Temperatura medida con un setpoint igual a 220 C con distintos
rangos de control. Iteraciones cada un segundo. . . . . . . . . . . .
7.24. Resultados de simulacion. . . . . . . . . . . . . . . . . . . . . . . .
7.25. Pruebas de impresion realizadas a la fecha. . . . . . . . . . . . . .
7.26. Simulaci
on de una cuchara sin terminar, con sistema de coordenadas
absoluto y unidades en milmetros. . . . . . . . . . . . . . . . . . .
7.27. Simulaci
on del territorio Uruguayo, con sistema de coordenadas absoluto y unidades en milmetros. . . . . . . . . . . . . . . . . . . .
143
145
146
147
148
149
149
150
151
152
154
155
155
156
243
244
247
249
251
258
259
259
260
261
262
263
263
264
299
Indice de figuras
E.10.Opci
on para realizar Homming. . . . . . . . . . . . . . . . . . . . . 265
E.11.Men
u de movimiento manual. . . . . . . . . . . . . . . . . . . . . . 265
E.12.Men
u de impresi
on. . . . . . . . . . . . . . . . . . . . . . . . . . . 266
E.13.Men
u de movimiento manual, opcion eje X. A la derecha opcion eje
Y e izquierda SALIR. . . . . . . . . . . . . . . . . . . . . . . . . . 266
E.14.Diferentes pantallas del men
u de movimiento manual. . . . . . . . 267
E.15.Men
u inicial de offset. . . . . . . . . . . . . . . . . . . . . . . . . . 268
E.17.Men
u para calibraci
on de milmetros por paso en el motor del extrusor.268
E.16.Men
u de calibraci
on, opciones de ajuste de altura de la mesa de
trabajo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
E.18.Calibraci
on del extrusor. . . . . . . . . . . . . . . . . . . . . . . . . 270
E.19.Pieza dise
nada para la colocacion del ruleman. . . . . . . . . . . . 271
E.20.Pieza para eliminar la excentricidad de los tornillos. . . . . . . . . 271
E.21.Ejemples de los dos tipos de acoples. . . . . . . . . . . . . . . . . . 272
E.22.Ejemplos de los elementos claves para realizar los distintos acoples. 272
E.23.Eje generico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
E.24.Perforaciones a realizar en las esquinas. . . . . . . . . . . . . . . . 273
E.25.Diferencia de altura entre las perforaciones de las guas y la del
tornillo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
E.26.Distintos usos de la placas para proteger las deformaciones. . . . . 275
E.27.Medidas eje X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
E.28.Medidas eje Z. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
E.29.Medidas eje Y. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
E.30.Estructura completa armada. . . . . . . . . . . . . . . . . . . . . . 279
E.31.Colocaci
on del tensor. . . . . . . . . . . . . . . . . . . . . . . . . . 279
E.32.Diagrama PCB de la versi
on 3.1 del driver. . . . . . . . . . . . . . 282
E.33.Layout de la versi
on 3.1 del driver. . . . . . . . . . . . . . . . . . . 282
300
Contenido del CD
Documentaci
on del proyecto.
HTML generado con Doxygen de las interfaces de los modulos implementados.
P
oster A0.
Artculo con formato IEEE.
Proyecto Eagle del Driver Stepper
Hojas de datos.
Esta es la u
ltima pagina.
Compilado el jueves 14 mayo, 2015.
http://iie.fing.edu.uy/