Sie sind auf Seite 1von 313

blica

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

Guillermo Airaldi, Guillermo Ant


unez, Nicolas Lamath
en cumplimiento parcial de los requerimientos
n del ttulo de
para la obtencio
Ingeniero Electricista.

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

Plataforma de posicionamiento modular para impresi


on 3D, fresado y otras aplicaciones, Guillermo Airaldi, Guillermo Ant
unez, Nicolas Lamath.

Esta tesis fue preparada en LATEX usando la clase iietesis (v1.1).


Contiene un total de 305 p
aginas.
Compilada el jueves 14 mayo, 2015.
http://iie.fing.edu.uy/

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

8. Conclusiones y trabajo a futuro


157
8.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
8.2. Trabajo a futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Ap
endices

163

A. Doxygen de las interfaces del C


odigo

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.

1.1.2. Objetivo general


Dise
nar y construir una plataforma consistente en un posicionador XYZ con
punteros intercambiables que pueda funcionar como impresora 3D, fresadora y
esc
aner 3D.

Captulo 1. Introduccion

1.1.3. Definicion del problema y antecedentes


En la actualidad las impresoras 3D han cobrado una gran popularidad a partir
de movimientos Open Source [2]. Uruguay no queda excluido de esta tendencia
pero hay ciertos factores que conspiran para que tanto la fabricacion casera como
la compra de una impresora 3D, se encuentren por fuera de las posibilidades de un
hogar con un alto nivel econ
omico. No existe al presente en el Uruguay una fuente
de referencia que act
ue de soporte en la fabricacion, servicio y mantenimiento.
Ademas existen distintas m
aquinas que funcionan a base de un posicionador
en 2 o 3 dimensiones, por ejemplo routers CNC, prototipadoras, scanners 3D pero
muy pocos o casi ninguno que integre todas estas funciones. El presente proyecto
busca resolver esta problem
atica con la implementacion de una plataforma adaptable a distintas tareas, haciendo un uso eficiente del espacio mediante la incorporacion de las funciones de impresora 3D, fresadora y scanner 3D en la misma
maquina.

1.1.4. Objetivos especficos


Dise
nar un posicionador XYZ.
Poner en funcionamiento el posicionador XYZ.
Verificar del correcto funcionamiento el sistema de control de posicion.
Implementar y verificar el correcto funcionamiento del cabezal impresora
3D.
Implementar y verificar el correcto funcionamiento del cabezal fresadora.
Integrar los componentes en una unidad funcional.

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

1.2. Estructura del Documento

1.1.6. Criterios de exito


A continuaci
on se presentan los indicadores de exito junto a los correspondientes medios de verificaci
on:
Volumen de trabajo y precision: Verificar el posicionamiento del puntero con
un error menor que 0,15mm dentro del volumen de trabajo de 250x250x250mm3.
Capacidad de leer un archivo en G-code y capacidad de comandar el posicionador: Verificar la lectura de un archivo G-code y comandar el posicionamiento del puntero con un error menor al especificado.
Precisi
on y temperatura: Verificar la deposicion del plastico con un espesor
menor que 0,5mm y la temperatura del mismo con un error menor a 5 C.
Calibraci
on e impresion de un modelo de prueba: Verificar calidad de impresi
on 3D de un modelo de prueba.

1.2. Estructura del Documento


El documento se organiza en ocho captulos. En el segundo captulo se resumen
los antecedentes en lo que respecta a las impresoras 3D y routers CNC. Se resalta
especialmente los diferentes tipos de estructuras mecanicas, mostrando sistemas
de coordenadas utilizados, materiales de construccion y tecnologas de extrusion.
Se comentan tambien las opciones de software empleados, tanto generadores de
comando G-codes, como firmwares utilizados en los microcontroladores.
El captulo tercero presenta la descripcion general de la solucion implementada
en el presente proyecto, se hace enfasis sobre la arquitectura general del hardware, su relaci
on con la mec
anica desarrollada y las funciones principales que debe
realizar el software a programar. Se brinda una idea general de la mecanica, la
electr
onica y el software.
El cuarto captulo explica en detalle el desarrollo progresivo de la estructura del
prototipo. Se describen los criterios de dise
no. Se brinda una descripcion minuciosa
de la implementaci
on de cada eje y el montaje del conjunto. Se describe el cabezal
de impresi
on desde el punto de vista del mecanismo utilizado para traccionar el
filamento. Se tratan algunos problemas y sus respectivas soluciones.
En el quinto captulo el lector se encontrara con el detalle de la electronica desarrollada. Se comienza por la descripcion y conexionado general de los diferentes
bloques que componen el hardware. Se detalla el funcionamiento de los motores
paso a paso (PAP) como introduccion a la descripcion de los controladores para dichos motores. Se comentan problemas ocurridos durante el desarrollo y sus
soluciones.
El sexto captulo trata sobre la implementacion de los diferentes bloques que
componen el firmware en el microcontrolador Arduino, los generadores de G-code,
software implementado para la placa Raspberry Pi, simulador y otros codigos
que hayan resultado relevantes para la implementacion del prototipo. Se brindan
conclusiones al respecto y ofrecen alternativas.
3

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.

2.2. Tecnologas de posicionadores


En cuanto a la estructura general de los posicionadores XYZ, existen varias
opciones. Los criterios que abren el abanico son principalmente dos: la eleccion
del sistema de coordenadas en las cuales se va a definir el movimiento del cabezal
de impresi
on y la definici
on de cuales seran las partes fijas y las moviles de la
estructura. Luego se determinara el material principal de la estructura dise
nada.
Sobre el primer punto se han visto ejemplos que trabajan en coordenadas
esfericas, como pueden ser los mostrados en las Figuras 2.3(a) y 2.3(b). Luego
se han observado impresoras trabajando en coordenadas polares, como la de la
Figura 2.4. Finalmente, la principal eleccion para los dise
nadores, es realizar los
movimientos razonando sobre un sistema de ejes cartesianos; el ejemplo de la
Figura 2.5 muestra un sistema con esta eleccion de dise
no.
En cuanto al segundo punto, la eleccion de las partes moviles dependen en
gran medida de la elecci
on del punto anterior. Para las primeras (coordenadas

Captulo 2. Antecedentes

Figura 2.1: Historia de las impresoras 3D, primera parte. Imagen modificada de [3].

2.2. Tecnologas de posicionadores

Figura 2.2: Historia de las impresoras 3D, segunda parte. Imagen modificada de [3].

Captulo 2. Antecedentes

(a) Ejemplo 1. Imagen extrada de (b) Ejemplo 2. Imagen extrada de


[4].
[5].
Figura 2.3: Dise
no de impresora 3D basado en coordenadas esfericas.

Figura 2.4: Dise


no de impresora 3D basado en coordenadas polares. Imagen extrada de [6].

Figura 2.5: Dise


no de impresora 3D basado en coordenadas cartesianas. Imagen extrada de [7].

2.3. Tecnologas de impresion


esfericas), casi la totalidad de los dise
nos determinan los movimientos solo con el
puntero. Las impresoras que trabajan en coordenadas polares, en general, poseen
una mesa m
ovil, este movimiento puede ser giratorio y vertical. Si realiza ambos
movimientos, entonces el puntero solo se mueve en forma radial; luego, si se elige
que la mesa cancele alguno de estos movimientos, el cabezal debera satisfacer el
movimiento en altura o giratorio. En cuanto a las impresoras de ejes cartesianos,
el gran tema es elegir que parte realiza el movimiento de cada eje. Existen varias
impresoras en que la mesa cumple con los movimientos en el plano horizontal,
mientras que el cabezal se desplaza en la direccion vertical. Otra opcion es quitarle
a la mesa uno de los movimientos horizontales y este se encarga al puntero (como
se ve en la Figura 2.5).

2.3. Tecnologas de impresion


Sobre las distintas tecnologas de impresion, puede decirse que es el tema donde se est
a enfocando m
as atencion con el objetivo de renovar constantemente los
metodos de impresi
on, de todas formas el de extrusion sigue siendo el mas elegido para los dise
nadores. Este metodo se basa en la tecnologa de modelado por
deposici
on fundida (FDM por sus siglas en ingles).
En este metodo lo que se hace es ir depositando un material termoplastico en
sucesivas capas que juntas componen el objeto a imprimir. Dicho material puede
ser PLA (acido polil
actico) o ABS (estireno butadieno acrilonitrilo). El procedimiento es el siguiente: un filamento del material a utilizar (suele venir en rollos)
es conducido por un extrusor cuya punta trabaja a una temperatura que permita
derretir el filamento, con lo cual el filamento que sale del extrusor en un estado
blando es depositado en distintas capas para formar el objeto. Esta tecnologa
tiene una importante etapa de control, la cual impone una fuerte relacion entre
la temperatura del extremo del extrusor, la temperatura del ambiente de impresi
on, la velocidad con la que el filamento es dirigido hacia dentro del extrusor y
la de la velocidad relativa entre en punto de deposito y el cabezal. Es aqu donde
se da un importante desarrollo a nivel de programacion de un microcontrolador,
que permita controlar con exito la relacion o relaciones recientemente mencionadas.
Obviamente, dependiendo del material a extruir las variables de dise
no cambiaran.
Otra tecnologa que se conoce es la de formar las piezas mediante la union
de materiales granulares. Las impresoras que desempe
nan esta tecnologa poseen
una cama llena de material granulado; este material es fundido en general a traves
de l
asers (sintetizaci
on selectiva por laser o SLS) para ir formando las distintas
capas de la pieza a imprimir. Luego se superponen dichas capas, en general por
fusi
on selectiva de l
aser (SLM) hasta llegar a construir el objeto. Dentro de este
metodo hay una variante importante: en lugar de usar lasers, usar fusion por haz
de electrones (EMD). Esta opcion permite lograr objetos densos, sin huecos y mas
fuertes.
Continuando con las diferentes tecnologas utilizadas en la impresion 3D, se

encuentra el metodo de fabricacion de objetos por laminas (LOM). Este


consiste
en un sistema que logra ir superponiendo laminas ya sean de papel, plastico o
9

Captulo 2. Antecedentes

Figura 2.6: Sistema que muestra c


omo trabaja la impresion por laminado. Imagen extrada
de [8].

metal las cuales son cortadas por un laser seg


un el modelo CAD del objeto que
lo define. El sistema puede verse en la Figura 2.6: hay una cinta (sustrato) sobre
la cual se encuentra el material, que luego de pasar por un rodillo caliente es
transportado hacia el
area de impresi
on, aqu sera cortada la lamina de material
correspondiente, luego la mesa sobre la cual se va realizando la impresion baja para
darle lugar a la colocaci
on de la siguiente capa. Es com
un que el presente metodo
de impresion tenga una etapa de fresado para dejar mas prolijas y homogeneizar
las terminaciones.
La siguiente tecnologa a presentar, es la de fotopolimeracion. Basicamente

estas impresoras poseen un recipiente cuyo contenido es un polmero lquido. Este,


a traves del procesamiento digital de luz (DLP), es expuesto a los rayos de luz de
un proyector de la reciente tecnologa mencionada. Como consecuencia de esto, el
polmero se endurece. Luego, esta capa ya solida se sumerge en el polmero lquido,
quedando sobre esta otra nueva cantidad de polmero en estado no solido, con lo
cual repitiendo el procedimiento se genera una nueva capa que quedara sobre la
anterior. Siguiendo con el procedimiento reiteradas veces se llega al objeto final.
Para terminar con la impresi
on, el polmero lquido se extrae del recipiente
y el polmero s
olido se cura con luz ultravioleta. En caso de realizar estructuras
complicadas (con varios huecos, etc.) se coloca un gel con la forma que se le quiere
dar a dicha parte, sin afectar el procedimiento descrito. Luego de finalizado, este
gel se retira a mano con ayuda de agua.

2.4. Extrusores de impresion 3D


El cabezal de impresi
on 3D es una pieza fundamental del presente proyecto.
El mismo posibilita la deposici
on de material PLA o ABS para el modelado de
alguna pieza a imprimir. El cabezal se coloca en el puntero del posicionador para
que este trabaje como impresora 3D.
El cabezal 3D, tambien denominado extrusor o extruder en ingles, se compone
de una serie de piezas dedicadas a traccionar el filamento del material termoplastico
10

2.4. Extrusores de impresion 3D


a depositar y de otra denominada hot end o final caliente en espa
nol, cuyo objetivo
es llevar al material a la temperatura necesaria para su deposicion. En la Figura
2.7 podemos apreciar un ejemplo de montaje del cabezal 3D.

Figura 2.7: Esquema de un cabezal de impresion 3D por deposicion fundida. Imagen extrada
de [9]

De la Figura 2.7 podemos observar que el extrusor se compone basicamente


de:
Motor paso a paso (stepper motor ).
Juego de engranajes (large gear, small gear ).
Tornillos, tuercas y arandelas
Rulemanes (bearing).
Final caliente (hot end )
Alg
un soporte para las piezas mencionadas
En el esquema de ejemplo, el filamento de termoplastico es traccionado por
acci
on de motor sobre los engranajes de forma que deslice sobre el ruleman y se
introduzca en el hot end donde se fundira. El final caliente, posee un calefactor
necesario para elevar su temperatura y ademas se debe implementar un control de
temperatura para llevarla a un punto de referencia. Para ello es necesario en principio poder medir la temperatura y esto se logra mediante el uso de un termistor
o termocupla.
Es importante mencionar, que la velocidad de deposicion de material es una
limitante para la velocidad de desplazamiento de los distintos ejes, salvo cuando
se requiera moverse a cierta posicion sin depositar material. Por ejemplo, si se
efectuaran movimientos en la coordenada X mas rapido de lo que se deposita el
material, el trazo no ser
a del grosor deseado.
11

Captulo 2. Antecedentes

Figura 2.8: Estructura de impresora 3D que usa partes impresas y guas de acero pulido. Imagen
extrada de [10]

Figura 2.10: Estructura de impresora en madera liviana. Imagen extrada de [12]

2.5. Materiales de construccion


Existe una gran variabilidad en cuanto a que material se utiliza para construir
las distintas plataformas. Se pueden observar dise
nos en los cuales casi la totalidad
de las piezas son impresas por otra impresora 3D, que con la utilizacion de guas
de acero pulido completan la estructura. Por ejemplo, los distintos modelos de
Reprap [2] se basan en esta idea; puede verse en las Figuras 2.8 y 2.9 la estructura
de una impresora y tambien al cabezal impreso. Obviamente, hay piezas que no
pueden ser pl
asticas como son las ya mencionada guas y la punta caliente del
cabezal, entre otras.
El tipo de estructuras recien presentadas permiten hacer la impresora casi replicable, ya que luego
de tener una impresora, se pueden imprimir las partes plasticas, adquirir las distintas piezas no plasticas y proceder al armado de una nueva impresora.
Luego, est
an los dise
nos de estructuras efectuados en madera liviana (obviamente siguen siendo Figura 2.9: Cabezal utilizado en
insustituibles las guas de movimiento), se ve en la la impresora mostrada en la figuFigura 2.10 un ejemplo de este tipo de estructura. ra 2.8. Imagen extrada de [11]
12

2.5. Materiales de construccion

(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]

(d) Estructura de impresora en aluminio (impresora


de la figura 2.11(c) terminada). Imagen extrada de [16]
Figura 2.11: Estructuras en aluminio.

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

Figura 2.12: Scanner 3D. Imagen extrada de [17]

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

2.7. Motores paso a paso (PAP)

Figura 2.13: Ejemplo de motor paso a paso.

2.7. Motores paso a paso (PAP)


Un motor paso a paso es un actuador electromagnetico rotatorio, capaz de
realizar un incremento angular preciso a partir de una se
nal digital que representa
el estado de cada fase (energizada o no). Las se
nales de fase se generan a partir de
un driver que tiene como principal entrada un tren de pulsos (se
nal de reloj). La
cantidad de pulsos y la frecuencia controlan la posicion y la velocidad del eje [18].
Los motores paso a paso realizan una discretizacion de los desplazamientos
angulares en un rango que puede ser entre 0,72 a 90 grados. La resolucion de los
incrementos angulares equivale a realizar un paso, producto de la llegada de un
pulso bajo del reloj. En la Figura 2.13 podemos apreciar un tpico motor paso a
paso.
Estos motores pueden clasificarse de acuerdo a sus diferencias constructivas en:
im
an permanente, reluctancia variable e hbridos. Los primeros poseen un rotor de
im
an permanente sin dientes, tienen pasos de angulo entre 45 y 90 grados. Se caracterizan por poseer un alto par, baja velocidad y un buen amortiguamiento. Los
segundos presentan a diferencia de los de iman permanente un rotor dentado. El
angulo por paso en estos vara entre 5 y 15 grados. Los motores hbridos combinan

cualidades de los anteriores, destacandose que pueden operar a altas velocidades


de pasos y tienen una resolucion de entre 0,9 a 5 grados.
Otra clasificaci
on est
a dada por el n
umero de polaridades que pueden tomar las
bobinas: unipolares y bipolares. En la Figura 2.14 podemos apreciar un esquema
de ambos motores.

2.7.1. Principio basico de funcionamiento


La Figura 2.15 muestra el concepto mediante el cual operan los motores paso
a paso.
El estator se compone de bobinas que se enrollan sobre un n
ucleo de hierro
dulce. Este material se imanta cuando las bobinas son recorridas por una corriente.
15

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

2.7. Motores paso a paso (PAP)


La polaridad de los n
ucleos dependera del sentido de la corriente. El rotor lo
representamos por un im
an que puede girar libremente solidario al eje del motor.
Partiendo con el im
an en cualquier posicion, al circular una corriente por los
bobinados, se polarizan los n
ucleos, alcanzando el eje del motor la posicion mostrada en la Figura 2.15(a). La secuencia contin
ua cuando una de las bobinas L1 o
L2 cambia el sentido de la corriente, por ejemplo en la Figura 2.15(b) se produce
un giro de 90 grados en sentido anti horario al cambiar el sentido de la corriente
por L1. Para completar el ciclo se debe cambiar el sentido en L2 y finalmente en
L1. La secuencia descrita muestra como se produce cada paso en el motor y la
equivalencia con giros de angulo recto.
Los distintos modos de operacion que se mencionaran mas adelante se obtienen
al variar la secuencia anterior. Haciendo circular corrientes con forma distinta a
una corriente DC, se puede realizar microstepping [18].

2.7.2. Modos de operacion


Los modos de operaci
on de un motor paso a paso son los siguientes [18]:
Normal o doble fase.
Full-step o paso completo.
Half-step o medio paso.
Microstepping o micro paso.
El controlador de motores sera el encargado de generar las se
nales adecuadamente para obtener los diferentes modos de operacion. De los primeros tres modos
se ofrecen m
as detalles en el Captulo 5.
El microstepping es un modo de operacion que permite dividir en angulo de
paso natural de un motor. El rango de division de este normalmente va de 10 a
1,8
256. Por ejemplo, en un motor de resolucion pasos
se podra alcanzar 51200 pasos
por revoluci
on. Para lograr esto en un motor, es necesario establecer la corriente
en las bobinas con forma sinusoidal, un seno en una fase y coseno en otra. La
principal utilidad es suavizar el movimiento atenuando el efecto de resonancia y/o
conseguir mayores resoluciones.

2.7.3. Parametros de los motores paso a paso


Este tipo de motores se caracterizan a partir de una serie de parametros que
es de interes mencionarlos. Los mas destacables se listan a continuacion [18]:
Par din
amico m
aximo: Es el par maximo que el motor puede imponer sin
perder pasos.
Par de mantenimiento: Es el momento requerido estando en regimen de
excitaci
on, para apartarse en un paso cuando la posicion anterior es estable.
17

Captulo 2. Antecedentes

Figura 2.16: Curva Par-velocidad: fen


omeno de resonancia, imagen tomada de [20]

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.7.4. Ventajas y desventaja de motores paso a paso


Los motores paso a paso permiten un control preciso en lazo abierto de la
posicion (si no se pierden pasos) facilitando la electronica necesaria. En cambio,
con un motor de corriente continua (DC) la posicion se controla mediante un
lazo cerrado y conseguir posicionamientos muy precisos y de pocos grados puede
resultar muy difcil.
Este tipo de motores no posee escobillas para realizar contacto a diferencia de
los motores DC. Lo mismo los hace muy confiables, y no requieren mantenimiento.
Como principal desventaja est
a el fenomeno de resonancia cuando los motores
no son adecuadamente controlados. En la Figura 2.16 se aprecia como afecta a la
curva Par-velocidad para los modos Full-step y Half-step. Por otro lado, resulta
dificultoso emplearlos en altas velocidades.
18

2.8. Software

Figura 2.17: Unas de las primeras maquinas de control numerico. Imagen extrada de [22].

En la Figura 2.16 se observa que en modo de paso completo, si se desea realizar


un control de velocidad, se debe evitar tener una velocidad que se traduzca en la
frecuencia de resonancia.

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.2. Generadores de G-code y firmware


Cuando en las m
aquinas de control numerico computarizado se menciona el
software, puede referirse a distintas herramientas que se diferencian principalmente
por la etapa en la que cumplen sus cometidos. Cuando un usuario tiene en mente
llevar a cabo la realizaci
on de una determinada pieza puede comenzar de 2 maneras:
puede buscar si ya existe el modelo 3D de esa pieza en una especie de repositorio
[23] [24] [25], o puede dise
nar dicha pieza en un determinado software [26].
Luego de tener el modelo 3D, este debe pasarse a un formato que sea entendible
por la maquina. Los programas que realizan esta tarea son conocidos como generadores de G-code o CAM (por su sigla en ingles, Computer Aided Manufacturing),
debido a que toman como entrada el archivo del modelo y dan como salida un
archivo .gcode. Cada lnea de archivo de salida es una instruccion que la maquina
debe realizar.
Los generadores de G-code m
as utilizados son Open Source, por ejemplo:
CURA software [27]
Slic3r [28]
Skeinforge [29]
Teacup [30]
RepRap Host software [31]
La tercer y u
ltima herramienta de software que cumple un papel fundamental

en el proceso es el firmware. Este


software corre en el microcontrolador de la
maquina y es el que realiza todo el control de posicionamiento y temperatura
(caso de impresora 3D) a partir de los comandos expresados en el archivo .gcode.
De la opciones existentes las m
as utilizadas son:
Marlin: El c
odigo del mismo se implementa en lenguaje C++ y su objetivo
va mas all
a de la realizaci
on del control de los movimientos. Implementa
tambien la comunicaci
on con la maquina, el control de temperatura del extrusor y de la heated bed (superficie de impresion), manejo de un display,
etc.
Sprinter: Esta escrito mayormente en lenguaje C++ pero posee un porcentaje importante en C. Al igual que Marlin realiza el manejo general de la
maquina.
22

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

Figura 2.18: Esquema generico de electr


onica necesaria para el control de movimiento y temperatura de una impresora 3D.

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.

3.1. Descripcion de la solucion


Comenzando por el sistema de coordenadas a utilizar, en la Figura 3.1 se
observa la elecci
on de un sistema de ejes cartesianos para la implementacion de la
estructura. Se muestran los distintos ejes y partes moviles.
Se escogieron motores paso a paso como actuadores sobre los grados de libertad
para realizar los movimientos. En la Figura 3.2 se resume el flujo que sigue la
informaci
on en los diferentes bloques de hardware hasta que los mismos se traducen

Figura 3.1: Estructura mecanica basada en sistema de ejes cartesianos.

Captulo 3. Vision General del Proyecto

Figura 3.2: Diagrama de bloques de Hardware y relacion con mecanica.

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

3.1. Descripcion de la solucion

Figura 3.3: Esquema hardware y bloques internos basicos.

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

Captulo 3. Vision General del Proyecto

Figura 3.4: Esquema de ubicacion cabezal impresion o fresador.

Figura 3.5: Men


u principal circular.

La interfaz como se ve en la Figura 3.3 se implementa mediante un joystick, un


boton y un display, y le brinda al usuario un men
u de opciones de forma circular
como se ve en la figura 3.5 y optando por las distintas posibilidades se puede entrar
a otros sub-men
u o darle
ordenes al prototipo. Por otro lado, el display se mantiene
mostrando informaci
on en tiempo real como puede ser la ubicacion del puntero o
la temperatura del mismo.
En los pr
oximos captulos se brinda mayor detalle sobre las tematicas relacionadas al presente proyecto, mec
anica del prototipo, electronica y software.

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.

4.2. Criterios de diseno


Como se vio en el Captulo 2 un posicionador puede fabricarse de diferentes
materiales, basarse en distintos sistemas de coordenadas o responder a diversas
maneras de implementar los movimientos. Como objetivo de esta seccion se busca
determinar estas elecciones y otras pertinentes.
Desde el comienzo se opto por realizar la estructura con aluminio, este material
predomin
o por encima del MDF y el hierro por una cuestion de solidez mecanica
frente al primero y por un tema economico y de facilidad a la hora de trabajarlo
frente al segundo.
Se comenz
o con dos grandes pautas en el dise
no, primero que la mesa se encargara de los dos movimientos en el plano horizontal, para liberar de estos al
cabezal. A este solo le correspondera el movimiento a lo largo del eje Z para no
sobre exigirlo con m
as de un movimiento, debido a que se le encomendaran las
funciones de impresi
on, fresado y escaneado. Esta eleccion derivara en problemas
mec
anicos, dado que esto cuadriplicara la superficie que ocupara el prototipo, lo
que resultara en una magnitud considerable debido a la intencion de tener una
area de impresi

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

4.2. Criterios de diseno


presentan una desventaja llamada backlash. Este fenomeno se debe a que la tuerca
que se mueve por el tornillo, a no ser que sea fabricada especialmente para dicho
tornillo, no se encuentra simultaneamente apoyada por ambos lados, presentando
un tiempo muerto cuando se mueva hacia la cara donde no esta haciendo contacto.
Como se dijo, los tornillos presentan como una de sus caractersticas la inercia,
esto significa la capacidad de mantener fija su posicion cuando se aplica una fuerza. El par
ametro del que depende esto es la inclinacion que poseen los hilos del
tornillo. Aqu se debi
o tomar una decision dado que grandes angulos de inclinacion
proporcionar
an una mayor velocidad, mientras que angulos que se acerquen a ser
perpendiculares al largo presentaran mayor inercia y precision. Se opto por elegir
tornillos con estas u
ltimas caractersticas.
Se decidi
o implementar el movimiento a traves del eje Z mediante dos rectangulos de identicas caractersticas salvo por la diferencia de que uno no tendra tornillo,
o sea que solo soportara los esfuerzos con sus guas. Haciendole honor al nombre
del proyecto se decide implementar cada eje de la misma manera y que a su vez
sean independientes del resto, esto le dio al prototipo un caracter modular.
Tomando en cuenta todas las consideraciones previas se decide implementar
cada eje como un rect
angulo formado por los perfiles, en el que se encuentra centrado con respecto a su ancho el tornillo sin fin, con dos guas de acero pulido
situadas paralelamente al tornillo, que soporten las fuerzas perpendiculares a este.
El dise
no en forma de rectangulo introdujo un problema denominado efecto paralelogramo, que surge debido al alto impacto que tienen las deformaciones en las
diagonales.
Adem
as el dise
no modular brinda la ventaja de poder trabajar con cada modulo
por separado, por ejemplo cada eje se puede testear por separado, como tambien
se puede reemplazar un eje por otro de mayores dimensiones (siempre y cuando
esto sea posible) y se ver
a aumentado el volumen de impresion. Cumpliendo con
las pautas ya mencionadas se pudo formular un primer dise
no, el cual se puede ver
en la Figura 4.2.
Se resumen las ventajas y desventajas de las elecciones antes descritas en la
Tabla 4.1.

33

Captulo 4. Mecanica

Figura 4.2: Primer dise


no.

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

Tabla 4.1: Ventajas y desventajas de las elecciones tomadas.

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

Tabla 4.2: Tabla con los valores aproximados de los ejes.

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.

4.4. Extrusor de impresion 3D


Se decidi
o comprar el extrusor en exterior debido a las escasas opciones que
brinda el mercado local, y la gran diferencia de precios en esta area. El cabezal de
impresion adquirido se puede apreciar en la Figura 4.5, donde se pueden ver sus
partes y dimensiones.

Figura 4.5: Cabezal de extrusion adquirido.

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

4.4. Extrusor de impresion 3D

(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].

4.5. Armado de un eje

Figura 4.6: Detalle de un eje.

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

4.5. Armado de un eje

Figura 4.7: Pieza de invencion propia para la colocacion del tornillo.

Figura 4.8: Diferencia de altura.

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.

(b) Ubicacion del motor en el eje Y y Z.

Figura 4.9: Ubicacion de los motores.

Eje
X
Y
Z1
Z2

Largo (cm) Ancho (cm)


35
36
8
21
22
22
22
22

Tabla 4.3: Tabla de medidas de las mesas.

realizada a partir de un perfil de aluminio de seccion cuadrada de 4cm 4cm,


dicha pieza se puede apreciar en la Figura 4.10(b).
En el caso de los ejes Y y Z se debe ubicar el eje del motor en paralelo al
tornillo y trasladar el movimiento mediante un correa como se ve en la Figura
4.10(c). Para afirmar el motor se construye una pieza similar a la utilizada para
efectuar el acoplamiento lineal; para lograr que la correa este tensionada se ponen
separadores entre esta pieza y el perfil que contiene el tornillo.
La union entre los perfiles y el problema del paralelogramo se solucionaron en
conjunto por medio de una placa de aluminio, a la cual se le fijaron los perfiles;
esto se realiz
o mediante tornillos y tuercas. La placa utilizada puede abarcar la
superficie exterior completa o se pueden utilizar dos, esto se puede ver en la Figura
4.11.
Las mesas son placas de aluminio de 3mm de espesor, donde las dimensiones
dependen de a cu
al eje pertenecen y se pueden ver en Tabla 4.3. En dichas mesas se
coloca una tuerca est
andar, que cumpla las especificaciones del tornillo, de forma
tal que cuando el tornillo se encuentre colocado este quede paralelo al largo de la
mesa. El punto m
as importante en esta etapa es colocar los cojinetes y la tuerca de
forma que las guas y el tornillo queden paralelas. El correcto funcionamiento de
este sistema depende de que las guas y el tornillo no realicen esfuerzos de forma
perpendicular a este u
ltimo.
Es aqu que surge el primer problema dado que el uso de elementos estandar
derivo en el uso de tornillos que no eran rectos sino que presentaban una curvatura, esto significa que la distancia entre el tornillo y la mesa no se mantiene
constante. Para solucionarlo se decidi
o crear una pieza, que se puede apreciar en
40

4.5. Armado de un eje

(a) Acople lineal flexible (b) Pieza dise


nada para realizar el
[53].
acoplamiento tornillo-motor en el eje
X.

(c) Pieza dise


nada para realizar el acoplamiento
tornillo-motor en el eje Y y Z.
Figura 4.10: Acoples.

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

Figura 4.11: Placas que protegen del efecto paralelogramo.

Figura 4.12: Collar de empuje.

42

4.6. Interconexion entre ejes

Figura 4.13: Solucion backlash.

Como se ve en la Figura 4.13 se instalo en los tornillos resortes de un diametro


interior ligeramente mayor al diametro del tornillo para solucionar el problema del
backlash, dicho resorte quedara comprimido entre la tuerca del collar de empuje y
otra tuerca que se agrega s
olo para cumplir este fin. Gracias a la fuerza restauradora
del resorte la tuerca que traslada el movimiento a la mesa siempre se encuentra
haciendo contacto con la misma cara del tornillo eliminando el problema.

4.6. Interconexion entre ejes

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

Figura 4.14: Dise


no CAD final.

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.

Figura 4.15: Geometra usada para el calculo de la ubicacion del tensor.

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.

Procesador central (CPU)


Procesador grafico (GPU)
Memoria RAM

Especificacion
ARM1176JZF-S 700M Hz
Broadcom VideoCore IV
512M b

Tabla 5.1: Caractersticas principales de la placa computadora Raspberry Pi.

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

Tabla 5.2: Caractersticas principales de la placa microcontroladora Arduino MEGA ADK.

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.

5.2. Controlador de los motores paso a paso


5.2.1. Introduccion
Luego de haberse tomado la decisi
on de usar motores de paso a paso, se procedio a buscar una soluci
on para el control de estos.
Se decidi
o como primer prototipo de driver desarrollar el mismo, basado
en dos circuitos integrados (CI): el L297 (Stepper motor controller [20]) y el L298
(Dual full-bridge driver [61]). La esencia del circuito controlador, viene como ejemplo de aplicaci
on en las hojas de datos de estos circuitos integrados [62].
Como se adelant
o, el driver se basa en dos CI, el L297 que es el que oficia de
controlador y el L298 que proporciona la potencia de forma eficiente que es necesaria transmitirle a las bobinas del motor para que este pueda funcionar. Ademas
se utiliza un regulador de tensi
on para alimentar la parte logica del circuito. Para
la parte de potencia, la alimentaci
on sera directa de la fuente de la maquina.
En la figura 5.2, puede observarse un diagrama general del dise
no final del
controlador de motores paso a paso que se utiliza en la maquina fabricada y como
se enmarca.

Figura 5.2: Soluci


on general de dise
no y marco del controlador de los motores paso a paso del
presente proyecto.

5.2.2. Descripcion de los integrados


Se presenta una breve descripci
on de los CI utilizados.
50

5.2. Controlador de los motores paso a paso


Nombre
CLOCK
CW/CCW
HALF/F U LL
ENABLE
RESET
Vref
CONTROL
SENS1
SENS2

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).

Normal o Doble Fase: se alimentan dos bobinas a la vez. La secuencia se


puede apreciar en la Figura 5.3(b).

Medio paso: en este modo se busca alternar los 2 modos ya mencionado


obteniendo pasos intermedios. La secuencia se puede apreciar en la Figura
5.3(c) y en la Figura 5.4 se observan las se
nales de fase respectivas.
51

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.

(a) Secuencia Modo Fase Simple.

(b) Secuencia Modo Fase Doble.

(c) Secuencia Modo Medio Paso.


Figura 5.3: Secuencias para los distintos modos de funcionamiento de un motor bipolar. Figura
tomada de [20].

En terminos generales, el presente CI es un traductor de se


nales entre el microcontrolador y la etapa de potencia.
Funcionando en los modos fase simple y medio paso, se generan dos se
nales que
deshabilitan la energizaci
on de las bobinas, provocando un control discreto sobre
52

5.2. Controlador de los motores paso a paso


Nombre Pin
Descripci
on
Input1
5
Se
nal a ser potenciada (A)
Input2
7
Se
nal a ser potenciada (B)
EnableA
6
Habilitacion del puente de entradas 1-2 (puente A)
Input3
10
Se
nal a ser potenciada (C)
Input4
12
Se
nal a ser potenciada (D)
EnableB
11 Habilitacion del puente de entradas 3-4 (puente B)
Tabla 5.5: Entradas del CI L298.

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

Tabla 5.6: Salidas del CI L298.

las corrientes que fluyen hacia estas.

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

Figura 5.5: Puente H tpico.

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

5.2. Controlador de los motores paso a paso

Figura 5.6: Diagrama de bloques interno del CI L298. Figura tomada de [61].

Figura 5.7: Configuracion del regulador de voltaje. Figura tomada de [63].

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].

Al no estar presente la carga, la corriente se va en su totalidad por R1 , con lo cual


la diferencia de potencial entre la entradas de amplificador operacional aumenta, lo
que provoca un incremento en la corriente a traves de la configuracion Darlington,
con lo cual la corriente a la salida aumenta. Es as que se hace todava mayor la
cada de tensi
on en R1 , viendose as una realimentacion positiva que provoca el
incremento en la tensi
on de salida, la cual se terminara cortando por el circuito de
proteccion presente en el integrado.
En la configuraci
on utilizada tambien se agregan capacitores de bypass tanto
en la entrada como en la salida del regulador con el objetivo de reducir peque
nos
ripples en las tensiones.
Como se mencionar
a en breve, este regulador no fue el utilizado en la version
final. En su lugar se utiliza el LM7805 que se describira mas adelante en la presente
seccion.

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

Cuando un diodo esta en directo y repentinamente se pasa a estado inverso, existe un

5.2. Controlador de los motores paso a paso

Figura 5.9: Grafico donde se indica el reverse recovery time (trr ).

tiempo mencionado debe ser despreciable en comparacion con el tiempo en que la


bobina esta energizada o descargada.
Es as que se decidi
o por el uso de los diodos Schottky IN5819 (en lugar de ser
una tpica juntura entre semiconductores p-n, es metal-semiconductor).

5.2.3. Funcionamiento general del driver de motores PAP


L297 +L298
El driver dise
nado que tiene por objeto controlar los distintos motores, esta
configurado b
asicamente en dos etapas (ver Figura 5.10). Una etapa, la cual contiene al CI L297. Este integrado es el encargado de generar las se
nales periodicas
(salidas A, B, C, D) que excitan a la segunda etapa (o directamente a las fases de
un motor), la cual se explicara en breve. En la Figura 5.11 se presenta un diagrama
de bloques del CI, principalmente contiene el generador de se
nales para cada fase,
un conmutador PWM doble y el circuito logico de salida.
Se observa un bloque el cual esta controlado por dos entradas: la de sentido de
giro (CW-/CCW)y la eleccion de modo (HALF-/FULL), ademas posee el reloj de
pasos (CLK).
Esta primer etapa tambien genera otras dos salidas (/INH1 y /INH2) si se lo
hace funcionar en modo de medio paso. Estas se
nales de salida de la primer etapa
son de habilitaci
on, usadas para habilitar o no a la excitacion que provocan las
se
nales A, B, C y D en la segunda etapa. Ademas ayudan a acelerar el decaimiento
de la corriente cuando se deja de alimentar una bobina del motor. Dichas se
nales
son generadas por compuertas OR: /IN H = A + B y /IN H2 = C + D. En modo
de paso completo estas se
nales no se generan.
Otras se
nales de entrada a destacar es la de RESET, se
nal usada para restablecer las salidas a la posicion de base (ABCD = 0101) y ENABLE, se
nal que si
est
a en estado bajo apaga todo el driver.

tiempo en el cual el diodo permite el pasaje de corriente en inverso. Este


es el trr .

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].

El oscilador en el PIN16 se encarga de resetear los flip-flops presentes en la


Figura 5.11 al comienzo de cada perodo de oscilacion, las dos salidas de estos
flip-flops se suman a las otras cuatro entradas del circuito logico de salidas, juntas
determinan el control de las se
nales enviadas a la segunda etapa.
Con respecto a la segunda etapa, como ya se sabe, esta basa su funcionamiento
58

5.2. Controlador de los motores paso a paso

en el integrado L298. Este


consiste en dos puentes H de potencia ya descritos en

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 ).

Tomando un peor caso de IM AX = 2A (corriente maxima por bobina), resulta


< PdisipadaRSEN SE =0,5 >= 1,125W . Con lo cual, se decide utilizar dos resistores
en paralelo de 1/1W (< PdisipadaRSEN SE =1 >= 0,56W ). La corriente de fase
i
en las bobinas del motor depende principalmente de dos puntos: de la tension de
referencia presente en el PIN15 (Vref ) del L297 y de las resistencias de sensado
previamente presentadas; siendo IL = V ref /RSi . Mayor corriente de fase significa
un aumento de torque, pagando el precio de un mayor consumo. Entonces, variando
Vref se puede regular el torque de los motores.
Es bueno disponer de capacitores de 100nF entre las fuentes de alimentacion
del L298 y tierra ubicados lo mas cerca posible a el pin de GND en el circuito
impreso, para satisfacer picos de corriente consumidos por el CI (cuando el camino
entre el integrado y la fuente de corriente es largo, se debe colocar un capacitor
m
as peque
no cerca del integrado para satisfacer la demanda instantanea).

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,

a una mnima carga mec


anica el motor se frenaba o perda pasos. Esto
dio paso
a realizar un an
alisis m
as profundo del dise
no del driver tomado como base el
anterior, con objetivo de efectuar mejoras que solucionen este inconveniente o
redise
narlo en su totalidad.
Localizando el trabajo en dar solucion al presente problema, se investigo en la
relacion de la tensi
on de referencia (aplicada en el pin 15 del integrado de control)
con el torque explicada en la Secci
on 5.2.3.

60

5.2. Controlador de los motores paso a paso

Figura 5.14: Realimentaci


on para control de torque automatico. Figura tomada de [62].

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].

(a) Corriente vs tiempo: de


una bobina en medio paso.

(b) Corriente vs tiempo: de una


bobina en medio paso (2 estados
de torque).

Figura 5.16: Graficos comparativos de los modos de operacion. Figura tomada de [66].

El comportamiento del lazo de realimentacion mostrado en la Figura 5.14 es


el siguiente: mientras las se
nales de habilitacion estan en estado alto (bobinas
energizadas), la salida de la compuerta AND esta tambien en estado alto, debido
a esto el transistor esta prendido, con lo cual levanta el cero y se forma un divisor
de tension resistivo que reduce en un factor la tension en el PIN 15.
62

5.2. Controlador de los motores paso a paso

En particular, dicho factor es 1, 41 ( 2). La salida del divisor es la tension de


1000
referencia Vref aplicada al PIN 15 del controlador L297 (Vref = 1000+410
VREFin =
1
1,41 VREFin ).
Cuando al menos una de las se
nales de habilitacion baja su estado (se apaga
una bobina), la salida de la compuerta AND conmuta, apagando as el transistor,
entonces, no circula corriente por el divisor. Quedando la tension en el PIN 15
igual al valor de la tensi
on en el punto REF (valor generado con el divisor resistivo

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

(a) Esquematico driver - version 1.0

(b) Layout driver - version 1.0


Figura 5.17: Esquematico y layout del driver version 1.0.

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

5.2. Controlador de los motores paso a paso

(a) OUT 1.

(b) OUT 2.

(c) OUT 3.

(d) OUT 4.

Figura 5.18: Graficos de las se


nales de salida del driver fabricado (f = 0,5Hz; DC = 50 %) versi
on 1.0.

Figura 5.19: Fotografa tomada durante los primeras pruebas realizadas al eje X utilizando la
versi
on 2.0 del driver.

soportan los motores adquiridos.


Se realizaron distintas pruebas, ahora s utilizando el control de torque donde
realmente se vieron los resultados esperados, reduccion notoria de vibraciones, de
ruido y adem
as los arranques, frenados y cambios de direccion se observaron mas
suaves.
Para esta versi
on final se cambio el regulador de voltaje, ya que en las compras
realizadas al exterior el que se consiguio a mejor precio fue el LM7805 [67], este
tiene distinto el patillaje al regulador presentado en la seccion 5.2.2. Ademas,
65

Captulo 5. Electronica

Figura 5.20: Configuraci


on utilizada para generar la alimentacion logica del driver en la version
final. Figura tomada de [67].

el nuevo regulador tiene la salida ya establecida en 5V , para cualquier voltaje de


entrada en un rango aceptado. La configuracion utilizada se muestra en la Figura
5.20. De todas formas se colocaron tambien capacitores electrolticos en paralelo a
los ceramicos para complementar la robustez frente al ruido de la fuente.
Es aqu que se termin
o de planificar la ubicacion de la electronica en la maquina
para as poder concretar la u
ltima version del driver de motores. De acuerdo a la
mencionada planificaci
on, se observ
o que perfectamente los cuatro driver de motores paso a paso podan ser iguales. Para esto se penso en colocar los disipadores
de forma tal que cuando esten los cuatros ubicados como se definio, la ubicacion
total de la electr
onica permita colocar (atornillar) sobre los disipadores uno o dos
ventiladores. Adem
as, se estableci
o la idea de poner los dos integrados que necesitan disipador compartiendolo. Se pretendio dejar de facil acceso y con conectores
robustos las salidas hacia los motores y con conectores que solo permitieran una
posicion de conexi
on correcta para las entradas de se
nales y para la conexion de
fuente. Tambien se dejaron varios jumpers que dan la posibilidad de trabajar con
o sin control de torque, que permiten elegir el modo de funcionamiento y otros
que dependiendo de las anteriores decisiones deben modificar algunos valores de
entrada al integrado de control (L297 ).
Luego del comienzo de las pruebas de integracion, realizando directamente
movimientos en la m
aquina con el software de bajo nivel que excita al driver
para que este controle los motores se observaron distintas opciones para lograr el
correcto funcionamiento. Se debe asegurar que por parte de la interaccion entre
software y electr
onica la cantidad de pasos de cada movimiento sea la esperada.
Casos crticos son los cambios de movimiento, ya que luego de terminando el
movimiento las fases quedan en determinado estado, el cual no debe perderse. As
cuando llega una nueva orden, el giro del motor comienza sincronizado desde ese
estado.
En esos momentos hay que tener cierto cuidado de como se configura el ac
cionar. Si no se toma ninguna acci
on particular, se puede da
nar el motor. Esto
puede suceder debido a que cuando el movimiento termina alg
un borne de alguna
de las bobinas queda a 24V y el otro a tierra. Al ser la resistencia de la bobina
muy peque
na la corriente que circula por esta es muy alta y si pasa determinado
tiempo puede determinar el corte de dicha bobina, da
nandose el motor.
66

5.2. Controlador de los motores paso a paso

Figura 5.21: Circuito de chop. Figura tomada de [64].

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

hacia la bobina aumente. Esto


provoca que la tension en la resistencia de sensado
se incremente, y cuando dicha tension sobrepasa a Vref el flip flop se resetea, deshabilitando la salida antes del proximo pulso de reloj. Entonces, la salida de este
circuito (Q en el flip flop) es una se
nal PWM de velocidad constante.
Como ya se dijo, estando la entrada CONTROL en nivel alto, el razonamiento
presentado act
ua sobre las salidas de fase (A, B, C, D), que como se debe recordar
son la entradas a los dos puentes tipo H presentes en el CI L298.
Ahora se presenta un ejemplo para describir el funcionamiento con un caso real.
Observando la Figura 5.22, se tiene la configuracion del puente H correspondiente
67

Captulo 5. Electronica

Figura 5.22: Esquema de razonamiento para el control de corriente en un bobina. Figura


tomada de [64].

a una de las bobinas, cuyas se


nales generadas por el integrado de control son A
y B. Las referencias X, Y, Z presentes en la figura son tres corrientes que sirven
para comprender el funcionamiento.
Tomando como instante base cuando A esta en alto y B en bajo (10). La
corriente fluye por Q1 , bobina , Q4 y RS (corriente X). Cuando la tension en RS
sobrepasa a Vref el circuito de chop levanta a B, as la bobina (11).
La energa almacenada en esta es disipada por la corriente de recirculacion (Y)
por Q1 y D3 . La bajada de corriente en este momento es lenta debido a que la
Q1
tension en la bobina es muy baja (VCE
+ VD3 ). Esto puede irse apreciando en la
sat
Figura 5.23. Con el presente control tambien lo que se logra es reducir notoriamente
la disipacion en las resistencias de sensado, ya que solo circula corriente por estas
cuando las bobinas son excitadas.
Haciendo pruebas solo con soluci
on recien descrita, se noto su funcionamiento,
pero alternadamente no se ejecutaba el control, resultando en una alta corriente
circulando por algunas de las cargas en el reposo. Un indicio de este problema
aleatorio es que sea un falla debida al ruido de conmutacion. Como se lee en [64],
cuando se tiene varios drivers, sera una buena practica usar un solo oscilador
de choppeo y sincronizar los distintos controladores a traves del uso del pin de
SYNC presente en los integrados de control L297.
El otro camino, que soluciona el problema que surge cuando se termina un
movimiento y resuelve el inconveniente de la primera opcion de solucion recientemente presentada, es habilitar los drivers de los motores cuando se debe realizar un
68

5.2. Controlador de los motores paso a paso

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].

movimiento y deshabilitarlos al terminar. La ventaja de esto es que solo circulara


corriente a las bobinas de los motores en los instantes de movimiento, teniendo
un control total de la corriente de carga, evitando un pasaje de corriente por las
bobinas en reposo. Al llevar a nivel bajo la entrada ENABLE del controlador, las
salidas de fase bajan su estado. Como la combinacion 0000 aplicada a los bornes
de las bobinas no es ning
un estado del motor, no se esta cambiando el estado de
este, es decir, no se est
a perdiendo la coherencia entre la cantidad de pasos que
lleva el software y la posicion real.
Para elegir esta segunda solucion hay que tener ciertos cuidados. Cuando se
deshabilita el controlador de motores PAP, este baja instantaneamente las salidas,
con lo cual, luego que se manda realizar el u
ltimo paso, se debe esperar un tiempo
antes de deshabilitar a este para que realmente se de el u
ltimo incremento (paso).
Para esto, se debe tener el cuidado en el software que haga que el incremento se
de antes de bajar la se
nal de ENABLE.
Para tener la seguridad de que este procedimiento hace en la realidad lo que se
espera, se realizaron alrededor de 1000 iteraciones de movimiento que se describen
en el Captulo 7. Donde no se observo que la cuenta de pasos que lleva el software
difiera de la posici
on real esperada. De aqu se concluyo que realizando el manejo de
la corriente de carga manipulando la entrada de ENABLE satisface las necesidades
para desplazar correctamente cada eje.
Cuando se inicializa el sistema, es decir al prender la alimentacion, se quiere
que no fluya corriente hacia los motores. Para esto se realizo la colocacion de una
resistencia de pull down en cada una de las entradas de ENABLE de los controladores de los motores. Luego de terminar la inicializacion pasa el microcontrolador
a tener el control de dicha entrada.
En la Figura 5.24 se presenta el esquematico, el PCB en la Figura 5.25, el
69

Captulo 5. Electronica

Figura 5.24: Esquematico driver version final.

Figura 5.25: PCB driver version final (escala 1:1).

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

5.3. Interfaz con el usuario

Figura 5.26: Layout driver version final.

Figura 5.27: Fotografa de unos de los driver fabricados.

5.3. Interfaz con el usuario


Se entendi
o pertinente tanto por los integrantes del equipo como para los tutores que el prototipo contara con una interfaz grafica que cumpliera con los siguientes objetivos:
Mostrar en tiempo real informacion relevante del funcionamiento del prototipo.
Mostrar alarmas o mensajes que informen de un incorrecto funcionamiento.
Mostrar las opciones con las que cuenta el usuario para ingresarle comandos
al prototipo, por ejemplo cuando se navega por un men
u.
71

Captulo 5. Electronica

5.3.1. Eleccion de los elementos que componen la interfaz


La interfaz dise
nada consta de 2 bloques, uno de salida y otro de entrada. Para
el primero se opt
o por un display LCD, y para el segundo un Joystick.

(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

5.4. Heated Bed Platform


Joystick
Con el objetivo de contar con un movimiento manual del posicionador, se
entendi
o que sera una buena idea utilizar un joystick, el cual funcionara como
dos potenci
ometros, con lo cual se lograra variar la velocidad del movimiento
dependiendo del
angulo determinado por el joystick.
Debido a las limitaciones del mercado local se tuvo que trabajar con un joystick
que funciona como botones. Esto implico dos variantes en lo que se proyectaba, primero que la velocidad del movimiento resultara constante y predefinida, y segundo
como todo bot
on se necesita dise
nar un sistema de anti rebotes.
El sistema anti rebote puede implementarse por software, como se realizo, o
por hardware. La tecnologa del joystick son 5 botones, de los cuales cuatro son
las direcciones y el quinto un boton que se nombro ENTER. Se entendio que para
que la navegaci
on sea sencilla y amigable con el usuario era u
til tener un boton
que se denomin
o EXIT. Todos estos botones se alimentaron con 5V y se les realizo
un pulldown con una resistencia de un alto valor conectada a tierra.

5.4. Heated Bed Platform


El prototipo de impresora 3D que se desarrollo en el proyecto, funciona por
deposici
on, lo que significa que se deposita un filamento plastico caliente que al
enfriarse se endurece y forma las piezas impresas. Para que estas piezas se formen
correctamente, no se deformen y no se despegue de la mesa de trabajo puede
resultar necesario que la base donde se imprimen se caliente a una determinada
temperatura.

5.4.1. Condiciones de uso


Los materiales que utiliza una impresora 3D por deposicion, llamados termopl
asticos, son generalmente 2, estos son ABS o PLA, aunque tambien se pueden
encontrar impresoras que utilicen otros termoplasticos como el HDPE. El prototipo
elaborado se dise
no de modo que pueda usar los dos primeros, pero estos no trabajan en las mismas condiciones. Cada uno de ellos impone distintas condiciones
en la temperatura del extrusor, as como en la velocidades maximas y mnimas de
extrusi
on, pero adem
as imponen una temperatura en la base donde se imprimiran
las piezas.
Para trabajar con el PLA se recomienda mantener heated bed a 60 C pero
para utilizar el ABS esta temperatura asciende a 110 C. Tambien se encontraron
opiniones que dicen que el uso de la heated bed para el PLA no es necesario.

5.4.2. Como se implementa


La heated bed consta principalmente de cuatro partes:
Printed Circuit Board (PCB)
73

Captulo 5. Electronica
Vidrio
Fuente de corriente - MOSFET
Realimentaci
on - Medici
on de la temperatura (LM35)

Printed Circuit Board y Vidrio

Figura 5.29: Primer prototipo realizado de heated bed.

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

5.4. Heated Bed Platform

Figura 5.30: Dise


no de la heated bed platform.

Figura 5.31: Circuito de control de la heated bed.

75

Captulo 5. Electronica

5.4.3. Analisis de funcionamiento


En la Figura 5.31 se puede apreciar el hardware necesario para el uso de la
heated bed, el MOSFET funciona como llave, cuando la salida digital del arduino
arroja un OFF el VG = 0V , VG < VT H y el MOSFET se encuentra en zona de
corte. Y en ON el VG = 5V , VG > VT H , lo que significa que el MOSFET ya no
se encuentra en zona de corte. El MOSFET que se eligio utilizar es el STP60NF06
[69]. El sistema de control consta con una realimentacion para asegurarnos de ser
capaces de controlar la temperatura de la heated Bed, para esto se usa el circuito
integrado LM35 [70], el cual presenta las siguientes ventajas:
Bajo consumo (< 60A)
Calibrado directamente en grados Celsius
Escala lineal con factor de 10mV / C
Rango din
amico desde 55 C a 150 C.
Bajo autocalentamiento
Baja impedancia de salida

5.4.4. Primer prototipo


El primer prototipo se dise
n
o para que tuviera una impedancia de 1,2 , con el
objetivo que disipar
a unos 120 Watts, ya que era lo maximo que se poda obtener
de la fuente con la que se contaba, la potencia responde a la siguiente formula:

P =

U2
122
=
= 120W
R
1,2

(5.5)

Como ya se dijo primero se prob


o con un sistema de control de ON/OFF, en este
caso con un setpoint de 60 C se pueden apreciar los resultados en el Captulo 7.
Como ya se dijo se dise
no la heated bed para disipar una potencia de 120 Watts,
por razones desconocidas que pueden deberse a una diferencia con el espesor del
cobre el prototipo elaborado tena un impedancia de 3 lo cual redujo la potencia,
ademas la fuente con la que se trabajo entregaba 9V en lugar de 12V . Por lo que
la potencia disipada por el primer prototipo de heated bed fue de unos 27W . Para
esta potencia no se pudo superar una temperatura mayor a los 85 C cuando se le
puso un setpoint de 110 C como se mostrara en el Captulo 7.

5.4.5. Diseno heated bed


Se dise
n
o la heated bed para que abarcara una superficie de 36cm 33cm, lo
que significa que cubrir
a la totalidad de la mesa del eje X a no ser por un peque
no
margen, utilizado para colocar los tornillos. Utilizando el script del Matlab se
76

5.5. Comentarios generales

Figura 5.32: Dise


no de la heated bed platform.

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.

5.5. Comentarios generales


En este captulo se mostro tanto el dise
no de la electronica propia como la
inteligencia utilizada, detallando los distintos criterios y elecciones.
En el siguiente captulo se detalla el software a implementarse por la inteligen77

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.

resultado en el sub-main de impresi


on o fresado. El resultado anterior, es la entrada necesaria al m
odulo cuya interfase es ejecutador.h para finalizar la accion

que provoca el comando G-code. Este


u
ltimo interact
ua con el software de bajo
nivel (control de motores y de control de temperatura), que a su vez controlan el
hardware de la m
aquina.
El mencionado proceso se repetir
a hasta que se termine de procesar todas las
lneas del archivo .gcode, que se transmite desde la Raspberry Pi al Arduino por
comunicacion serial UART. El archivo a transmitir desde Raspberry Pi se debe
80

6.2. Raspberry Pi: Configuracion red inalambrica y comunicacion con Arduino


depositar en un directorio de la misma a traves de una red wireless que establece
esta placa.
El software implementado permite ademas otro par de funcionalidades: una es
el movimiento manual y la otra, realizar parte de la calibracion. Para la primera
se aprovecha la posibilidad de interpretar y ejecutar comandos G-code. El flujo
se
nalado en el diagrama por las flechas de numeracion 4 se corresponde con esta
funci
on. Por otro lado, es necesario poder realizar una calibracion de la maquina
en general. La calibraci
on consiste en determinar algunos parametros para mejorar
el desempe
no. El camino de la informacion se indica con un 2 sobre las flechas en
la Figura 6.1.

6.2. Raspberry Pi: Configuracion red inalambrica y comunicacion con Arduino


6.2.1. Comunicacion inalambrica
Antecedentes
Como ya se ha mencionado en el Captulo 2, la gran mayora de la impresoras
3D implementadas con Arduino hacen el manejo de archivos gracias al uso de

tarjetas SD. Esto


se debe a que la plataforma Arduino no contempla el manejo de
archivos a no ser por la anterior va. Para trabajar con tarjetas SD, se utiliza la
librera SD [71].
En el presente proyecto, surgio la idea de no tener que depender especficamente
de un medio fsico de almacenamiento como lo es una tarjeta SD. Ademas, se quiso
brindar una soluci
on actual, en particular surgio la idea de poder enviar el archivo
de trabajo mediante una red inalambrica. Para llevar a cabo esta tarea, luego de
observar distintas posibilidades, se decidio usar el peque
no computador Raspberry
Pi (por m
as informaci
on sobre este, Seccion 5.1).
En la Figura 6.2 puede observarse el flujo de informacion del cual forma parte
esencial la comunicaci
on, cuya configuracion se presenta en la corriente seccion.
El usuario puede dise
nar el proyecto en distintos programas como lo pueden ser
Sketchup [72], Blender [73] y Autocad [74], luego se debe extraer el archivo con la
extensi
on .stl. Si el programa de dise
no no da la posibilidad de extraer dicho tipo
de archivos, se agrega una etapa en la cual mediante el uso de otro software se
debe convertir el archivo a la extension .stl. Despues, como se observa en la Figura
6.2 el archivo con esta extension se carga en un programa que generara el codigo
de m
aquina equivalente al dise
no CAD del proyecto. Ejemplos de estos programas
son: CURA [27], Slic3r [28] y Replicator g [75]. Finalmente el archivo de salida de
estos programas ser
a de extension .gcode y es el archivo final que se enva desde el
dispositivo personal de trabajo al computador Raspberry Pi mediante la conexion
inal
ambrica establecida.
81

Captulo 6. Software

Figura 6.2: Diagrama de flujo de informaci


on que presenta el marco de la red inalambrica a
configurar.

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

6.2. Raspberry Pi: Configuracion red inalambrica y comunicacion con Arduino


Dato
Subred
Rango
Direccion de broadcast
router

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

Tabla 6.1: Datos configurados para el servidor de DHCP.

Dato
Interface
Driver
SSID
Hardware mode
Seguridad
Seguridad password
Canal

Valor
wlan0
rtl8818eu
DIRECT-modular3D printer
g
WPA2
modular3D
6

Tabla 6.2: Datos configurados para el punto de acceso.

instalar el software en el computador para poder funcionar como punto de acceso


anfitri
on (el software se descarga automaticamente) Despues se debe configurar
como servidor DHCP para que los dispositivos cliente puedan obtener una direccion
IP (y DNS en caso de ser necesario). Para la presente maquina se setearon los datos
presentados en la Tabla 6.1.
A continuaci
on se setean los datos del punto de acceso, los datos mas representativos se presentan en la Tabla 6.2.
El usuario que decide enviar un proyecto a imprimir o fresar para poder hacer
dicho envo primero debe detectar con su dispositivo la red inalambrica identificada
na
con el SSID DIRECT-modular3D printer y luego debe introducir la contrase
modular3D.
Finalizando con la configuracion, se debe setear el programa instalado al inicio
(hostapd ) como demonio (daemon), esto es para que se ejecute apenas levante
el sistema operativo y que se mantenga en dicho estado hasta un corte en la
alimentaci
on del punto de acceso.
Terminada la configuracion se debe tomar un dispositivo con el wifi activado
y observar si se detecta la red del host access point (ver Figura 6.3).
83

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

sistema operativo Windows se ha utilizado el programa winSCP. Este


es un software libre, cuya funci
on principal es facilitar la transferencia segura de archivos
entre dos sistemas inform
aticos, el local (dispositivo del usuario) y uno remoto que
ofrezca servicios SSH (computador configurado como punto de acceso) [79].
El programa recien mencionado da una solucion correcta y sencilla pero poco
amigable con el usuario. Por esto es que sera recomendable realizar alguna aplicacion que facilite el envo y el guardado del archivo en una ubicacion de destino del
computador. Una propuesta es que al establecerse la conexion, en el dispositivo
del usuario se despliegue una ventana donde se pueda escribir la ruta de origen
del archivo y que se guarde correctamente en determinado directorio en la RPi
(destino) configurado por defecto.

6.3. Comunicacion Computador-Microcontrolador


6.3.1. Descripcion general
La comunicaci
on entre el computador RaspberryPi y el microcontrolador Arduino es una comunicaci
on Serial. Fsicamente se conecta un cable a uno de los
puertos USB del computador y al conector USB principal del microcontrolador.
84

6.3. Comunicacion Computador-Microcontrolador


Establecer esta comunicacion tiene por objetivo poder ir leyendo el primer
archivo de la cola de trabajo (impresion o fresado) y que a medida que el microcontrolador pida G-codes, el computador le respondera enviando lnea a lnea
el contenido del archivo. Un esquema representativo de la presente comunicacion
puede observarse en la figura 6.4.

Figura 6.4: Diagrama que representa la comunicacion entre el computador y el microcontrolador.

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

6.4. Software para microcontrolador Arduino


Esta funci
on es la encargada de recibir la lnea enviada por la Raspeberry Pi
de forma correcta y s
olo capta comandos tipo G-code (lneas comienzan con G o
con M).
Despues de registrado el string, al salir de la funcion anterior, el mismo se
guarda en el buffer implementado en el modulo homonimo. Luego se vuelve a
repetir la secuencia hasta que se llena dicho buffer, en el momento en que este
se llen
o, se comienzan a ejecutar los G-code almacenados en el mismo. Luego se
repiten todos los pasos hasta llenarlo nuevamente. El final se da cuando llega desde
la RPi el G-code que indica final del codigo, siendo este M 84.

6.3.4. Robustez de la comunicacion


Para evitar que cualquier problema en la comunicacion derive en una perdida
del proyecto, surgi
o la idea de que ante un corte en la comunicacion, el computador
pueda re establecerla en un minuto. Esto se lleva a cabo mediante el manejo de
excepciones, m
as especficamente la excepcion SerialException. Si se da un error
con esta excepci
on el criterio que se toma es quedarse con la u
ltima lnea leda
desde el archivo y esperar a que el microcontrolador pida un Gcode. Retomando
as el funcionamiento normal ya descrito.
Tambien se puede dar que se haya perdido el dato de solicitud de G-code o el Gcode propiamente dicho. Para ambos casos en la funcion char *LeoGcode() presente
en los m
odulos del microcontrolador, se implemento un contador que aumenta su

valor reiteradas veces dentro de la funcion y un delay de un microsegundo. Esto


se razon
o para que si el Arduino en 20 segundo no recibe el G-code que solicito,
asume que no va a llegar y lo pide nuevamente. En este caso lo que puede pasar
es que la RPi s lo halla enviado con lo cual al pedirse otro G-code hay uno que
no ser
a ejecutado (se levanta una lnea nueva desde el archivo).
Otro detalle que hubo que acomodar fue el deshabilitar mediante el cortado
de una traza el reset automatico al microcontrolador, debido a que si la comunicaci
on se ve interrumpida, al reiniciarla, el Arduino se resetea automaticamente al
establecer una nueva comunicacion Serial.
Finalmente se llega a una solucion para la comunicacion entre el computador
y el microcontrolador robusta para las necesidades de la maquina fabricada.

6.4. Software para microcontrolador Arduino


6.4.1. Control de bajo nivel de los motores PAP
El objetivo del m
odulo de control de bajo nivel, es realizar el control de posicionamiento y extrusi
on del proyecto descrito. Se apunto a que el mismo sea
relativamente portable, para ser implementado en distintas clases de microcontroladores. Por otro lado, se considero importante implementar un cierto nivel de
seguridad que permita evitar cualquier tipo de da
no a la maquina ante un desperfecto. El sistema de control de bajo nivel utilizado en el proyecto Modular3D es
b
asicamente el del proyecto CtrlMotors3D de la asignatura Sistemas Embebidos
87

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

6.4. Software para microcontrolador Arduino


Referencia Denominacion del tiempo
tCLK
reloj
tS
set up
tH
hold
tR
reseteo
tRCLK
retardo reloj-reseteo

Tiempo mnimo (s)


0.5
1
4
1
1

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.

Figura 6.7: Generaci


on de Relojes para cada motor a partir de Timers virtuales comandados
por un Master Clock.

En la figura anterior se muestra como se genera un pulso para el driver del


motor X con cada pulso bajo del MCLK, en el caso del eje Y cada dos pulsos y en
el Z cada tres. Para resolver la atenci
on de los motores se utilizo una estructura
de Round Robin con interrupciones comandadas por el MCLK, donde se ejecutan
90

6.4. Software para microcontrolador Arduino


diferentes procesos de manera concurrente, mediante una utilizacion equitativa de
los recursos del equipo [80].
La idea principal para darle uso a la arquitectura elegida en el dise
no es atender
las necesidades de cada motor por realizar un incremento angular en el momento
indicado. Cada incremento que realiza un motor puede ser de un paso si se trabaja en FULL STEP o medio paso si se trabaja en HALF STEP. A continuacion
se muestra un pseudoc
odigo con el objetivo de describir e implementar lo recientemente mencionado. La rutina de atencion a la interrupcion del MCLK sera la
encargada de habilitar las banderas cuando el timer virtual correspondiente a cada
motor llegue a la cuenta configurada en el registro de velocidad.
while (posici
on actual ! = posicion objetivo) do
if (flag X) then
moverMotorX()
..
.
if (flag E) then
moverMotorE()
Realizada la presentaci
on basica del control de posicionamiento, se vuelve conveniente presentar al lector la implementacion completa de la atencion a los motores en la funci
on error *stepper(). El diagrama de flujos de la Figura 6.8 resume
la l
ogica que fue presentada durante la seccion corriente junto con la atencion a
los finales de carrera e interrupcion externa del boton de emergencia. Se resalta
que el diagrama presentado sufrio una modificacion necesaria para la operacion de
los motores utilizando la salida de ENABLE, lo mismo se explica en los parrafos
siguientes.
El algoritmo implementado con la metodologa de Round Robin comienza con
una inicializaci
on de variables donde se determina que ejes deben moverse y en
que sentido. Se habilitan timer virtuales, se configuran puertos de salida del microcontrolador, se inicia el Master Clock y habilitan interrupciones.
La condici
on de entrada al loop, es que alguno de los motores deba realizar un
movimiento; que no este presionado ning
un final de carrera relevante al movimiento
que se plantea realizar(en otras palabras en la direccion y sentido pertinente) y no
exista emergencia.
Los finales de carrera se chequean para cada eje antes de consultar por la
bandera que indica si se debe realizar un incremento en la cuenta de pasos. El
metodo usado para esto es simplemente hacer un Polling de los mismos en la vuelta
del Round Robin. Si el fin de carrera que es relevante para el movimiento que se esta
llevando a cabo no se encuentra en nivel bajo (no presionado) se consulta por la
bandera que indica el instante en que se debe realizar un incremento. Aqu entra en
juego el cambio realizado en la logica para operar con ENABLE a los motores. En
una primera versi
on se realizaba un paso y actualizar la cuenta. Hecho lo anterior
se actualizaba el estado de ese motor, para determinar si deba seguir moviendose.
Si no, se inhabilita su timer virtual, por lo que su bandera de atencion no volvera
91

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

6.4. Software para microcontrolador Arduino


a pasar a estado alto.
En la actual versi
on, se debe asegurar que el u
ltimo paso sea realizado, ya que
bajar la salida ENABLE significa apagar las fases del motor, poniendo tierra en
ambos extremos de cada bobina. Para ello, primero se actualiza el estado (variable
que almacena valor booleano, indica si se termino el movimiento o debe continuar)
y luego se consulta por el mismo, si el valor es verdadero, deshabilito el timer
virtual y apago el motor (ENABLE ). Si no se llego, muevo un paso y se aumenta
el contador de pasos. Por u
ltimo se vuelve a configurar el timer virtual. Para
mostrar que la l
ogica resuelve el problema se plantea la siguiente situacion:
Sea Xn1 el estado actual de la posicion y el objetivo Xn . Cuando llegue el
instante de mover el motor X, el estado resultante va a ser que dicho motor no ha
llegado al objetivo. Por lo que se mueve un paso y se cuenta. El estado ahora el
Xn , pero como no se deshabilita el timer virtual, se espera nuevamente al proximo
instante como para realizar el paso Xn+1 . Pero luego de actualizar el estado, el
resultado es que se termino del movimiento y no se realiza el paso, se apaga el
motor y desactiva el timer virtual. De esta forma se asegura la realizacion del paso
Xn al esperar el tiempo que llevara hacer un paso mas para apagar las fases del
motor.
Antes de terminar la vuelta, se consulta por el boton de emergencia, el cual
se implementa con una interrupcion externa encargada de levantar la bandera
correspondiente, desactivar el movimiento y deshabilitar la interrupcion del Master
Clock. Cuando todos los motores salgan del estado de movimiento se cumple la
condici
on de salida y se retorna un error nulo, ok. Se sale antes de terminar el
movimiento si se presiona alg
un final de carrera relevante, o existe emergencia.
Es importante resaltar que la logica permite la recuperacion del movimiento si el
siguiente llamado a ( error *stepper()) implica que se realiza en el sentido opuesto
en el eje afectado, para el caso en que se haba presionado un final de carrera.

Algunas Pruebas y resultados


En esta secci
on se pretende comentar algunas pruebas realizadas a los modulos
programados para verificar su correcto funcionamiento.
Prueba de generaci
on de se
nales de reloj, clocks, para cada motor.
Prueba de la l
ogica de los finales de carrera
Detenci
on de un movimiento al activarse un final de carrera.
Continuaci
on del movimiento anterior en sentido opuesto al final de
carrera activado.
Devoluci
on de errores m
ultiples (por ejemplo, si se presiona mas de un
final de carrera)
Prueba de bot
on de emergencia
Devoluci
on de error
93

Captulo 6. Software

(a) Comparaci
on reloj de motor X
con reloj para motor Y.

(b) Comparacion reloj de motor X


con reloj para motor Z.

(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

respecto a X en este orden. Este


hecho es de esperar por dos motivos, el primero es
que se mueven a la misma velocidad, lo que produce que requieran atencion todos
en simultaneo y segundo, por el orden de atencion impuesto en el Round Robin,
donde X es el primer motor en ser atendido y E el u
ltimo.
94

6.4. Software para microcontrolador Arduino


En cuanto a los restantes puntos, no hubo mayores sorpresas, obteniendose
resultados positivos. Se logro verificar el funcionamiento de los finales de carrera,
el bot
on de emergencia y la correcta generacion del resto de las se
nales a los
controladores de los motores.

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

Los macros definen una secuencia de instrucciones.

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.

Macro AVR IAR


delay cycles(a):
enable interrupts():
disable interrupts():

Equivalencia en Arduino IDE


delay loop 1(b):
interrupts():
noInterrupts():

Funcion
Pausar el microcontrolador
Habilitar interrupciones
Deshabilitar interrupciones

Tabla 6.4: Resumen de Macros en AVR IAR y equivalencia en Arduino IDE

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

Registros de control: TCCR3A y TCCR3B. Registro de configuracion de interrupciones: TIMSK3

96

6.4. Software para microcontrolador Arduino


mismo se hace por comparacion de los registros de setpoint y posicion actual que se
escriben antes de llamar a error *stepper(). Por lo tanto, para poder automatizar
algunas pruebas pudiendo realizar movimientos en ambos sentidos es conveniente
poder cambiar estos registros. Es de resaltar que no existe otra ocasion en que
los mismos deban ser cambiados, en cualquiera de los modos de funcionamiento
normal, el bajo nivel debe preservar la posicion verdadera referida al cero mecanico,
salvo por el extrusor que no tiene relevancia en el posicionador.
Para el funcionamiento normal del posicionador XYZ es necesario determinar
un origen, e iniciar la cuenta de los movimientos referidas al mismo. Dicho origen,
queda determinado mec
anicamente y se halla realizando movimiento en los tres
ejes hasta que se accionen los finales de carrera que definen el origen mecanico de
nuestro sistema de coordenadas cartesianas. Para que el sistema de posicionamiento encuentre los mismos se programo una funcion denominada home all axis() en
el m
odulo stepper.cpp, la cual es llamada antes de iniciar cualquier operacion.
La l
ogica que sigue la funcion es muy sencilla, se setea cada eje del sistema
cartesiano en una posici
on en cantidad de pasos que sobrepasa la excursion en cada
eje y se configura como origen la posicion nula. El siguiente paso es programar la
velocidad en cada eje e iniciar el movimiento dentro de un bucle, del que no se
sale sin que todos los ejes hayan alcanzado el final de carrera correspondiente. Si
se alcanza la posici
on en un eje, se detecta cual fue, se lleva a cero el contador
de pasos, se lo mueve en sentido opuesto apenas dos milmetros (400 pasos) y se
vuelve a presionar el final de carrera a una velocidad a
un menor y se lleva a cero
la cuenta de pasos nuevamente. La razon de esta implementacion es amortiguar la
variaci
on del cero mec
anico debido a vibraciones mecanicas en el final de carrera.
La Figura 6.10 resumen la logica implementada.
Para la implementaci
on del control de velocidad, que como se mencionara mas
adelante se integra al control de bajo nivel, es necesario contar con funciones
de consulta dedicadas exclusivamente a cada motor para ahorrar tiempo en instrucciones del tipo if o swicht case. Por lo tanto, se implementaron funciones de
consulta para la posici
on actual, la posicion objetivo y velocidad de cada motor.
Sin embargo, se consider
o una buena idea mantener la funcion unsigned long int
consulta(eje k e, int propiedad) para uso de capas superiores de software donde no
existe problemas de procesamiento.
Watchdog Timer y salida por timeout
En el presente proyecto de grado, se opto por lograr un sistema robusto, que
detecte, informe posibles fallas y no entre en bucle infinito. Resulta interesante
proveer al bajo nivel de una salida que se accione si expira un cierto tiempo lmite,
tal que transcurrido el mismo significara que el sistema entro en un bucle infinito. En general, el recurso que tienen los sistemas embebidos para lograr evitar
esta condici
on es hacer uso del periferico conocido como watchdog timer (WDT)
presente en general en todo tipo de microcontroladores. Su principal funcion es
generar un reset del sistema embebido cuando se expira un cierto tiempo, el cual
es programable. Dentro de las razones por las que un programa, particularmente
en un sistema embebido, puede entrar en loop estan:
Bugs en la rutina.
97

Captulo 6. Software

Figura 6.10: Flujo de funcion void home all axis()

Conjunto de entradas no usuales.


En sistemas con realimentaci
on, al no llegar a un setpoint.
En nuestro caso, el control sobre el posicionador opera en lazo abierto. Esto
significa que los contadores de pasos, aumentan su cuenta con un perodo determinado por la velocidad del movimiento a
un cuando perfectamente podra no estarse
realizando ning
un movimiento. Por lo tanto, no ocurrira que quede en loop infinito dentro del Round Robin debido a no alcanzarse el setpoint deseado, salvo
para un conjunto especfico de entradas. El conjunto de entradas que se hallo en
la practica que provocan un loop infinito, son aquellas que establecen una entrada
nula de velocidad para cualquier posici
on objetivo. Dichas entradas no son validas
y solo podran obtenerse mediante aproximacion en los calculos para determinar
la cantidad de pulsos de Master Clocks que fijan la la cadencia de los incrementos
angulares de los motores. Para evitar este problema, y otras posibles carencias del
software no descubiertas se opto por emplear el WDT para reforzar robustez.
98

6.4. Software para microcontrolador Arduino


Como ya se mencion
o, el WDT se puede utilizar para hacer un reseteo del
microcontrolador. Pero en algunos micros de la familia AVR como lo es en el caso
del Arduino Mega 2560, el WDT tiene otra opcion de funcionamiento ademas
del system reset. Esta alternativa es utilizar este temporizador para generar una
interrupci
on, lo que resulta u
til para poder reportar un error y tomar una accion
en lugar de reiniciar el sistema. La solucion adoptada sigue este u
ltimo camino y
aprovecha el Round Robin para revisar una bandera manejada por la rutina de
interrupci
on del WDT. Si en la vuelta del Round Robin dicha bandera esta en
alto, se registra un error de timeout y luego se saldra del loop, retornando al main
que corresponda donde se debera tomar una accion, por ejemplo, continuar con el
procesado del siguiente G-code o dar por fallida la tarea actual.
Para la implementaci
on del WDT, se debe tener en cuenta que el mismo, en
funcionamiento normal debe ser reseteado periodicamente para evitar que llegue
a la cuenta programada. Se decidio entonces hacerlo en el instante que alguno
de los motores deba realizar un paso, dicho instante se determina dentro de la
rutina de interrupci
on del Master Clock. El siguiente paso a seguir es entonces
determinar cu
anto es en teora el maximo tiempo que puede transcurrir entre dos
pasos consecutivos de un motor paso a paso, como se ve en la Ecuacion 6.1.
tmax =

#pulsosM clk
65535
=
= 3s
FM clk
22000

(6.1)

Por lo tanto, considerando un margen amplio, se programa el WDT para que


interrumpa cada 8s. En la practica se realizaron varios intentos por configurar
adecuadamente el WDT, para lo cual se debio tener una serie de cuidados que se
encuentran detallados en la hoja de datos del microcontrolador Atmega 2560 [54].
La idea consisti
o en realizar la configuracion del mismo previo al bucle principal
de la funci
on error *stepper() y refrescar su cuenta (llevarla a cero) para que no
llegue a interrumpir de forma periodica dentro de la rutina de interrupcion del
Master Clock siempre que alguno de los contadores de los Timer Virtuales llegase
a cero. Con este razonamiento, siempre que alg
un motor realice un paso, se reinicia
la cuenta del WDT. De lo contrario, se evita el loop infinito saliendo por TimeOut.
No se logro un funcionamiento correcto del mismo por lo que los resultados al
respecto no son concluyentes y se opto por dejar en el codigo comentado las lneas
de software involucradas para retomar en trabajo futuro.

Algoritmo para Control de velocidad de motores paso a paso


En esta secci
on se explica la necesidad de realizar un control lineal de velocidad
en los motores stepper.
Como se afirma en [81], con motores DC, aumentar el voltaje (o el ciclo de
trabajo si se usa PWM) controla que tan rapido el eje del motor alcanza una
velocidad dada. En cambio, con motores paso a paso, cambiar el voltaje de alimentaci
on no tiene efecto sobre la velocidad de movimiento. Por otro lado, en el
mismo artculo el autor afirma, que se puede aumentar el rango de velocidades que
alcanza el motor stepper si se alimenta en un voltaje mayor. Lo anterior se debe
99

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

6.4. Software para microcontrolador Arduino

Figura 6.12: Perfil trapezoidal de velocidad. Imagen extrada de [82].

En el caso de un motor stepper, el area debajo de la curva en la Figura 6.13


equivale a la cantidad de pasos necesarios para llevar el mecanismo de una posicion
inicial a la posici
on objetivo, a partir de ellos se puede obtener la distancia recorrida
aplicando una conversi
on a traves de los parametros mecanicos de los grados de
libertad.

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

6.4. Software para microcontrolador Arduino


cantidad constante en proporcion al u
ltimo valor de la cuenta llevada en el registro
OCR3A.
Para determinar dicha proporcion, se planteo en la ecuacion (6.2) una sucesion
donde ti es el tiempo en instante i = 0..n; tn es entonces el tiempo total de cada
transitorio y Ci las cuentas que determinan cada instante de interrupcion.
tn =

C0 C1 C2
Cn
+
+
+ ... +
f
f
f
f

(6.2)

Cada cuenta se determina a partir de la anterior restando una cantidad proporcional a la u


ltima cuenta como se muestra en la ecuacion (6.3).

tn =

1
[C0 + (C0 C0 K) + ((C0 C0 K) (C0 C0 K)K) + ...]
f

(6.3)

Sacando factor com


un el termino C0 y agrupando 1 K como se puede
observar en la ecuaci
on (6.4), que el tiempo tn se puede calcular a partir de una
sucesi
on geometrica.
tn =

n
C0
C0 X k
C0 1 n+1
[1 + + 2 + ... + n ] =
=
f
f
f 1

(6.4)

i=0

Una primer aproximacion para n muy grande se puede apreciar en (6.5), de


donde se obtiene que K = 4 103 s, en otras palabras, el factor por el cual debe
dividirse a la cantidad de cuentas es K1 = 250. Dicho valor es muy cercano a 256,
por lo que en una primer prueba se tomo este u
ltimo que significa quedarse con la
parte alta del registro OCR3A de 16 bits para luego sustraerla. Sin embargo, mas
adelante el mismo se cambio por 128 para perder menos tiempo en el transitorio
a costa de aumentar la no linealidad del control de velocidad.
tn =

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

Figura 6.14: Perfil de velocidad que se obtendra seg


un datos para

1
K

= 128.

El algoritmo a implementar debe ser capaz de recalcular la cuenta para el


registro OCR3A en cada interrupci
on del Master Clock siendo capaz de detectar
cuando se debe acelerar y cuando frenar. La logica que se implemento se puede
apreciar en la Figura 6.15.

Figura 6.15: L
ogica del algoritmo de control de velocidad.

El flujo anterior se integra a la rutina de interrupcion del MCLK. Para contestar


104

6.4. Software para microcontrolador Arduino


la pregunta, de si se debe frenar, hay algunas consideraciones que estan ocultas en
el diagrama anterior. La primera, es que en un movimiento concurrente de mas de
un motor, el que deba realizar la mayor cantidad de pasos sera que deba ir mas
r
apido. La ecuaci
on (6.6) refleja este hecho.

P ulsosM CLKy
Nx
Vx
=
=
Ny
P ulsosM CLKx
Vy

(6.6)

La idea es determinar un criterio para comenzar a frenar. El utilizado es que


se debe frenar si Nmax .P ulsosM CLK < N inst, donde Nmax representa la cantidad
de pasos restantes del motor que se debe desplazar mas pasos. P ulsosM CLK es
la cantidad de pulsos de MCLK para realizar un paso y Ninst es un contador de
instantes, equivalente a contar las interrupciones.
Por lo tanto, actualizando Nmax y contando Ninst se determina la cantidad de
interrupciones que se demoro en llegar al regimen y se puede determinar cuando
se debe frenar, ya que si queda menos tiempo para desacelerar del que le llevo
acelerar entonces debe comenzar a frenar. Con lo cual, el perfil de velocidad es
simetrico. Es posible tambien, que el tiempo que disponga el motor mas exigido
para realizar el movimiento no sea suficiente para alcanzar el regimen en velocidad.
En este caso, el algoritmo acelera la mitad del tiempo y el resto desacelera.
Es de resaltar que el algoritmo no es posible implementarlo enteramente en la
rutina de atenci
on del Master Clock por una razon, no se puede modificar OCR3A
durante las interrupciones y en la rutina de interrupcion. Esto obligo a operar con
una variable de por medio y utilizar una bandera que indique si debe actualizarse
la cuenta en OCR3A. Se aprovecho la arquitectura de Round-Robin para atender
a la nueva bandera y modificar la cuenta. Lo anterior es posible ya que en el peor
caso que es cuando el MCLK funciona a frecuencia nominal, se debe asegurar que
el ciclo de atenci
on a las banderas del bucle sea menor que el perodo del MCLK.
Si se asegura esto, antes de una nueva interrupcion siempre se habra realizado el
cambio previo a la cuenta del registro OCR3A.
Otro detalle importante es sobre la correcta escritura del registro mencionado,
lo adecuado es escribir primero la parte alta OCR3AH) y luego la baja (OCR3AL)
con interrupciones desactivadas. Para concluir se presenta en la Figura 6.16 una
captura de datos realizada con un osciloscopio digital GW instek modelo GDS2062.
La prueba realizada consistio en generar un reloj de frecuencia objetivo 2kHz
a partir de un Master clock inicial de 250Hz.
Como conclusi
on de la seccion, se resalta la implementacion de un algoritmo
capaz de realizar un control sincronizado de velocidad en cuatro motores a partir
de un solo Timer. Como desventajas tiene la no linealidad que puede implicar
grandes aceleraciones a medida que el MCLK alcanza su valor nominal, pero a
un
as contribuye a suavizar los movimientos.
105

Captulo 6. Software

Figura 6.16: Medida relevada de la variacion de velocidad.

6.4.2. Control de temperatura


El control de la temperatura se realiza a traves del modulo contTemp.cpp
con la interfaz contTemp.h, donde se implementa la clase 3 contTemp. La razon
por la que se realiz
o el control mediante una clase es que son dos los objetos a los
cuales se debe controlar la temperatura: el extrusor y la heated bed ; y las funciones
necesarias son an
alogas. Adem
as si en un futuro se deseara agregar un segundo
extrusor solo sera necesario crear otro objeto de esta clase.
Al constructor de la clase contTemp solo se necesita pasarle los pines por los
que se comunicar
a con el hardware, estos son un pin para sensar la temperatura,
otro para controlar la corriente, y el tercer parametro del constructor es el factor
que se utiliza para la conversi
on tensi
on-temperatura.
La razon por la que hay que pasarle este dato es que a pesar de que teoricamente
el LM35 de la heated bed y la termocupla del extrusor poseen la misma ganancia,
se debio efectuar la calibraci
on de esta u
ltima, y como se concluyo que la relacion
era lineal se decidi
o corregir variando el factor.
Ademas se puede construir la clase con el dato de otro pin opcional para el
control del ventilador.
Las funciones que brinda la clase sirven para:
Setear y consultar el setpoint.
Consultar la temperatura.
Realizar el control de la temperatura.
Encender y apagar el ventilador.
En una primera etapa se implemento el control de temperatura mediante un
controlador ON/OFF, el cual encenda la fuente de corriente si la temperatura
era menor al setpoint y la apagaba si era mayor. Este controlador presentaba
oscilaciones que rondaban los 5 C, esto realizando las pruebas con el extrusor
quieto, sin extruir y sin ventilador.
3

Una clase es una plantilla para la creacion de objetos de datos seg


un un modelo
predefinido.

106

6.4. Software para microcontrolador Arduino


Para mejorar estas medidas se cambio el sistema de control, se continuo con
un sistema que solamente prende y apaga la fuente de corriente, pero ahora se
calcula cu
anto tiempo tiene que estar prendida o apagada seg
un la diferencia entre
el setpoint y la temperatura medida. El control de la temperatura se realizo cada
un segundo y se implemento a traves de una interrupcion periodica cada 50ms.
Para este nuevo control, se manejan dos tipos de contadores: uno general que
siempre se setea con un valor de 20 (con el que se cuenta un segundo) y otro
propio de cada objeto de la clase contTemp, al cual se le asigna un valor entre 0 y
20 dependiendo de cuanto se aleja la temperatura del setpoint dentro de un rango
que se define como un porcentaje del setpoint (por fuera de ese rango la fuente
siempre esta prendida o apagada).
En cada interrupci
on se decrementa en uno, el contador que determina que
proporci
on de 1s se mantiene encendida la fuente implementada con un mosfet.
Cuando llega a cero se apaga la fuente y transcurrido el segundo se repite el proceso
luego de realizar una lectura analogica para determinar el nuevo valor del contador.
En la Figura 6.17 se puede apreciar lo explicado recientemente, donde se ven
2 ejemplos: uno con el contador propio del objeto seteado en 10 y el otro en 5.
Adem
as se puede ver como se encuentra la llave de la fuente de corriente en cada
instante.

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).

El controlador implementado se asemeja a un controlador proporcional, esto se


puede ver en que el valor medio de la energa entregada al hot end en un segundo
depende proporcionalmente al error, siendo este la diferencia entre la temperatura
y el setpoint.
Para setear los contadores propios de los objetos contTemp, se calcula el error
relativo como:
SetpointT emperatura
Setpoint

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.

Figura 6.18: Cuerva controlador.

6.4.3. Interprete de comandos


El objetivo de este m
odulo consiste en interpretar los comandos G-code y Mcode, resultados de aplicar un slicer a un archivo .stl o cad que describe una figura
3D.

Figura 6.19: Diagrama entrada-salida del modulo interprete.cpp.

108

6.4. Software para microcontrolador Arduino


La Figura 6.19 muestra la entrada y salida del bloque. La entrada al modulo
es una lnea de un archivo .gcode. Los comandos G-code que se interpretan se
pueden consultar en las Tablas 6.6 y 6.7 . La salida del modulo es la informacion
necesaria para que el m
odulo ejecutador.cpp realice el adecuado manejo de las
capas bajas de software. Dicha informacion se ordena en una estructura de datos,
definida como de tipo comando. En la Tabla 6.5 se resume los campos de dicha
estructura.

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

Tabla 6.5: Campos en la estructura de datos comando

Para entender el funcionamiento basico del modulo interprete.cpp y como se


relaciona con el ejecutador.cpp, es necesario comentar un poco sobre el campo
acci
on de la estructura de datos. Es basicamente un codigo con el que se etiqueta
un comando recibido, para que el resto del software sepa que camino tomar. Para
su asignaci
on se agrup
o los comandos G-code y M-code en acciones del mismo
tipo. Por ejemplo, realizar un movimiento lineal(move linear en el codigo) se corresponde con un comando G0 o G1. Lo que vara es la bandera extrudeON que
indicar
a si se debe extruir (G1) o no (G0). De esta forma, se brinda la informacion
necesaria al ejecutador.cpp cuya entrada es la salida de este modulo.
Para resumir, el objetivo de este bloque es obtener de un string la informacion
necesaria para el correcto funcionamiento del prototipo.

Descripcion del flujo principal


En el m
odulo interprete.cpp se implementan una serie de funciones para
el an
alisis y obtenci
on de datos de un comando G-code o M-code. La funcion
principal, que devuelve una variable de tipo comando es la funcion comando
interpretar(char gcode[ ]). Para completar una descripcion del bloque, se presenta
en la Figura 6.20 dicha funcion donde se omiten algunos G-codes no tan relevantes.
109

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

Se recuerda que G-code engloba G-codes y M-codes

6.4. Software para microcontrolador Arduino

111
Figura 6.20: Diagrama de Flujo de la funcion comando interpretar(char gcode[ ]).

Captulo 6. Software

Figura 6.21: Diagrama l


ogico donde se enmarca el razonamiento desarrollado en el modulo
Ejecutador (no representa verdadero flujo de informacion).

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

6.4. Software para microcontrolador Arduino

Figura 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).

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

6.4. Software para microcontrolador Arduino


una de las barreras, dicha accion no se ejecutara y la funcion dara un retorno
de error coherente hacia los modulos principales. En cambio, si la ejecucion
es terminada la funcion ejecutar retorna un ok (dato tipo error). Se parte
de la base que esta funcion debe siempre dar respuesta, con lo cual, se configuran los m
odulos de bajo nivel que son llamados dentro de esta funcion
para cumplir con el mencionado criterio, como se sabe de la Seccion 6.4.1.
Razonamientos internos esenciales
Podra decirse que existen G-codes cuyas acciones asociadas son esenciales
para el funcionamiento b
asico del posicionador y del extrusor. Es por esto que a
continuaci
on se va a describir el funcionamiento de la accion mover linear, cuyo
objetivo es desplazar el puntero a determinado punto extruyendo o no. Esta accion
es provocada por la llegada de los G-codes G1 (con extrusion) o G0 (sin extrusion).
En el diagrama de flujo de la Figura 6.23 se observa la estructura general del
razonamiento con que se logra ejecutar dicha accion.
De lo que se observa en el diagrama, son de destacar las funciones que se
encargan de setear los registros, los cuales seran entradas del bajo nivel.
Se tienen cuatro de estas funciones para los ejes X, Y y Z, y cuatro para el eje
E. En ambos casos la cantidad proviene de las cuatro posible combinaciones entre
sistema de coordenadas y sistema de medidas.
El objetivo de cada una de estas funciones es que tomando como entrada los
datos de cada eje y la velocidad absoluta poder guardar en los registros que usara
el bajo nivel los pasos a dar en cada eje y cuantos pulsos de Master Clock por paso
(incremento).
Los registros de pasos a setear dependen de las caractersticas mecanicas de
los ejes, de los motores, del sistema de coordenadas, de las unidades y del origen
de coordenadas del alto nivel o alg
un otro offset (por ejemplo G92 accion
set posicion 7 ) definido anteriormente.
Si se trabaja en absoluto, se utiliza una funcion para pasar el dato de la estructura que se encuentra en milmetros o en pulgadas a cantidad de pasos y luego se
escribe en el registro de salida la suma en pasos de: origen del alto nivel + offset
por seteo de posici
on + el dato de entrada pasado a pasos (resultando la posicion
objetivo real del bajo nivel respecto a su origen -cero mecanico-).
Para el caso en que se este trabajando en relativo, el razonamiento es analogo,
pero como ahora el dato de entrada es un incremento y no puntos destino (como es
en caso absoluto) para el seteo de los registros de salida se debe sumar: los pasos
actuales del bajo nivel + el dato de entrada expresado en pasos.
Como se observa en este modo de operacion los registros de origen del alto
nivel y de offsets de posicion no son utilizados en las cuentas para el seteo de
registros, de todas formas se encuentran respaldados dado que si en el proyecto
que se est
a ejecutando, llegara un G-code (G90-a absoluto- o G91-a relativo-
7

Este G-code, es de seteo y su objetivo es afirmar que la posicion donde se encuentra


el puntero pasa a ser la que es ingresada como parametro con respecto al origen del alto
nivel.

115

Captulo 6. Software

Figura 6.23: Diagrama de flujo para ejecutar la accion de movimiento lineal, extruyendo o no.

116

6.4. Software para microcontrolador Arduino


acci
on: set systemMode 8 ) para cambiar el sistema de coordenadas, el programa
debe poder soportar dicho cambio y seguir ubicando el puntero coherentemente.
En las ecuaciones (6.7) y (6.8) se observa el razonamiento principal para pasar
las distancia lineales de avance de cada eje a un universo de n
umero de pasos
equivalente.
distanciaEJExyz
distanciaP ASOxyz
P U LGADA
distanciaP ASOxyz =
V U ELT ASxP U LGADA P ASOSxV U ELT A
pasosEJExyz =

(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

Se cambia el sistema de coordenadas, se decide consultando la bandera correspondien-

te.
9

Nota: En lugar de pasos, estrictamente habra que hablar de incremento para no


confundir el razonamiento al pasar de un modo a otro de comando. Para todo razonamiento
de este proyecto un paso es el mnimo incremento en el giro del motor independiente del
modo.

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

6.4. Software para microcontrolador Arduino

Figura 6.25: Diagrama de flujo que representa la obtencion de la velocidad en el equivalente


de cantidad de perodos de Master Clocks.

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)

Para el caso del extrusor se tienen las ecuaciones 6.14 y 6.15.


cantidadM CLKEJEe =
tiempoP aso =

tiempoP aso
T M CLK

.DIAM ET RO
P ASOSxV U ELT A

velocidadEJEe

(6.14)
(6.15)

Las constantes son las mismas presentadas en el calculo de las cantidades de


pasos. Tener presente la equivalencia de pulgadas a milmetros seg
un corresponda.
La idea es, teniendo la velocidad del eje, obtener el tiempo que demora en dar
un paso (incremento m
as precisamente), para luego normalizarlo por el perodo de
Master Clock, logrando as el objetivo.
Cabe aclarar que como la velocidad absoluta viene siempre expresada en unidad
metrica sobre minutos, el tiempo que se calcula es en minutos y las velocidades por
119

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

6.4. Software para microcontrolador Arduino


M-code
M104
M82
M83
M84
M92
M117
M140
M190
M206
M207
M208
M400

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).

Es de destacar la existencia de un modulo de configuracion, denominado setup.cpp. Este m


odulo tiene como objetivo reunir todo tipo de constantes que son
usadas en el resto del software implementado. Es decir, todas las constantes referidas: a la mec
anica (caractersticas de los tornillos de avance lineal), a los motores
(incrementos por vuelta), a la barrera de software (velocidades maximas, volumen
de trabajo, delimitados por las excursiones maximas de cada eje, temperaturas
m
aximas y mnimas de extrusor y heated bed ).
La implementaci
on de dicho modulo se penso no solo por tener un orden en la
programaci
on, sino para dar facilidad al momento de reutilizar el software de este
prototipo en otros posicionadores con sus nuevas caractersticas.

6.4.5. Interfaz con el usuario


En esta secci
on se describiran a los distintos modulos que componen la interfaz
con el usuario. Se implementa como un men
u inicial desde el cual se accede a otros
submen
us. Y desde los submen
us se puede entrar a las opciones que se consideraron
m
as ventajosas de incluir para que el usuario pueda ejecutar directamente.

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.

Figura 6.26: Esquema de funcionamiento del Main Principal.

En el loop() se implementan las 4 opciones del men


u que seran accedidas desde
aqu, estas se pueden apreciar en la Figura 6.26. Cada una de las opciones se simboliza por un estado, estos se implementaron como un bucle donde se actualiza
la informaci
on en pantalla y se lee la entrada del Joystick. De los estados solo
se sale hacia otros mediante las movimientos laterales del joystick, y se accede a
las opciones con el bot
on de enter.

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

6.4. Software para microcontrolador Arduino


Para esto se manda a extruir una distancia prefijada y se mide cuanto fue la
extrusi
on real. A partir del cociente de estos dos valores se reajusta la constante
de calibraci
on. Con el objetivo que el usuario no tenga que manipular el firmware,
se program
o para que pudiera ingresar los datos desde la interfaz. Para esto se
implementa un men
u en el cual mediante el joystick se selecciona la distancia que
se quiere mover. Luego con el enter se efect
ua el movimiento y se mide distancia
real, y se ingresa en el men
u. A partir de estos se calcula el factor de ajuste.
Origen de coordenadas del alto nivel
Para que el prototipo no llegue a los lmites fsicos (salvo en el inicio del proyecto), lo cual puede significar un riesgo desde el punto de vista mecanico, es que

define un origen de coordenadas para el alto nivel del software, Esto


se puede ver

en el Captulo 6. Este origen de coordenadas por software se fija mediante el uso de


la funci
on void MovimientoManual(int opcion), la cual permite ubicar el puntero
del posicionador en una ubicacion especifica del volumen de trabajo. Una vez que
se ubica el puntero en la ubicacion donde se desea tener el origen de coordenadas
del software con el enter se confirma como tal. Esto se hace mediante la funcion
del ejecutador.
Ajuste de la altura de la mesa
Este paso del proceso de calibracion se realiza para que cuando se ejecuta
un movimiento en el plano X-Y la distancia del puntero a la mesa se mantenga
constante. Esto depende de 2 elementos: un correcto armado de la estructura y
el ajuste de la mesa. Para realizar este u
ltimo se ubica el puntero en 4 puntos
cercanos a las esquinas de la mesa de trabajo y se van regulando las mariposas de
las mesas hasta que las distancias al puntero queden todas iguales.
Primero se sit
ua el origen de coordenadas del alto nivel tal que la altura en el
primero de los puntos sea correcta, y luego se va a los 3 puntos restantes.
Los par
ametros que se deben calibrar [86] son mas pero el equipo entendio que
estos son los que presentan una ventaja a la hora de hacerlo en el formato Stand
Alone.

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.

Figura 6.27: Esquema de funcionamiento del Main de impresion.

En primer lugar se declaran los controladores de temperatura pertinentes, se


les setea un setpoint menor al usual (el verdadero setpoint llegara como G-code
y el ejecutador se encargar
a de sobrescribirlo), esto se hace dado que el proceso
de calentamiento es lento. Y por u
ltimo se llama la funcion para establecer a que
elementos se le realizar
a un control de temperatura.
La comunicaci
on serial para transferencia de datos se dise
no para que la Raspberry Pi enve los G-code luego de que el Arduino se los pida, esto se hace
enviando un car
acter de control, el elegido fue el &. Para leer los G-code se
creo una funci
on, llamada LeoGcode() en la cual se leen string del puerto serial.
Pero a los string se le impone algunas restricciones, estas son coherentes al hecho
de que solo llegaran G-code que nuestro firmware puede interpretar, entonces se
ignoran todos los string que no comiencen con G o M. Y se dan por concluidos
cuando llegue un salto de lnea o un ;, significando que lo siguiente en esa lnea
es un comentario.
124

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.

6.5.2. Funcionamiento logico


Se prepar
o un script en Matlab que establece una comunicacion Serial con
el Arduino en el cual se ejecuta el c
odigo de la maquina a simular. Luego de
establecida la comunicaci
on, Matlab se queda escuchando el puerto donde debe
escribir el Arduino. Cuando Matlab recibe determinado caracter, significa el pedido
de G-codes desde el main de impresi
on. Ante esto, Matlab levanta desde el archivo

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

envo desde Matlab. Este


se queda escuchando el puerto en todo momento luego de
escribir en el mismo. Si recibe un dato que no es el caracter de pedido de G-codes,
entiende que es la posici
on en pasos del eje X que se escribio en el canal serial
luego de culminado el movimiento correspondiente al G-code ejecutado. Si llego
la posicion en X, a continuaci
on Matlab recibe la cantidad de pasos de los ejes
Y, Z y del extrusor. Matlab se encarga de ir guardando estos datos en un archivo
ubicados en 4 columnas, donde cada fila es el final de un movimiento tanto de
extrusion como solo de desplazamiento (notar que siempre luego de ejecutar una
accion se mandan los datos de los ejes a Matlab, es as que ante acciones que no
representaban movimiento se repite la fila en el archivo que se va armando).
Luego de finalizado el envo de G-codes, se termina la ejecucion y se procede
a tratar los datos obtenidos que fueron guardados en el PC donde se corrio el
simulador.
Como se sabe, los datos obtenidos son cantidades de pasos de cada eje luego de
cada accion ejecutada respecto al origen del bajo nivel (cero mecanico). El objetivo
del simulador es poder realizar un ploteo de lo que sera el material extruido en
la maquina. Con lo cual, el resultado esperado es que el plot 3D sea similar al
objeto equivalente al c
odigo de m
aquina tomado como entrada.
Para procesar los datos y lograr el objetivo recien mencionado, se usa como
funcion principal plot3(X,Y,Z), donde las entradas son matrices. Basicamente, dicha funcion grafica lneas rectas en el espacio. Los puntos que definen estas rectas
estan determinados por los valores de cada una de las matrices para una misma
entrada de estas (igual columna, igual fila). Si dichos datos estan en la misma columna entonces recorriendo las columnas desde la primer fila en adelante, cada dos
puntos tengo un segmento de recta (Segmento 1: fila 1, columna 1-fila 2 columna
1; Segmento 2: fila 2, columna 1-fila 3,columna 1; Segmento 3: fila 3,columna 1-fila
4,columna 1; ...), con lo cual, en el gr
afico estos son puntos unidos en el espacio.
Luego, cuando aparece una discontinuidad a graficar, es decir, cuando se grafica
otra secuencia de segmentos de recta desde otro punto del espacio, se debe a que
se cambio de columna en las matrices de coordenadas de entrada.
126

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

entrada que se van armando. Esto


se realiza observando los datos correspondientes
a la columna del extrusor, si la cantidad vario es que hubo extrusion, de lo contrario
fue solo desplazamiento del posicionador.
Finalmente, luego de haber recorrido todos los datos, se tiene las matrices X,
Y y Z de iguales dimensiones. Cada terna de valores formada por una entrada de
iguales ndices de cada una de estas matrices representa un punto en el espacio.
Adem
as se sabe que por fila dichos puntos se van uniendo mediante rectas (con
segmentos de recta m
as precisamente). Entonces para cada columna se tienen
caminos de extrusi
on continua que simulan la verdadera extrusion de un objeto.
En el Captulo 7 se presentan los resultados obtenidos al aplicar el simulador
a diferentes archivos .gcode.

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.

7.2. Posicionador XYZ


En la presente secci
on se describen las distintas pruebas realizadas con el fin
de determinar el correcto funcionamiento del posicionador. Lo anterior es particularmente importante, los resultados obtenidos en la realizacion de un proyecto de
impresi
on 3D o fresado se ven directamente afectados por esto.
Por otro lado, en un sistema controlado en lazo abierto como lo permite el
uso de motores PAP, las cuentas de pasos no se ven compensadas si fenomenos de
la mec
anica u operaci
on, hace que se realicen diferente cantidad de pasos que los
contabilizados. Se pierde literalmente el control de la posicion real de la maquina.

7.2.1. Experimento de deteccion de perdida de Pasos 1


Descripcion
En la Figura 7.1 se aprecia un esquema del experimento realizado. La idea es
realizar en un sentido cuatro tramos hasta el punto destino y retornar en un solo
tramo hasta el punto de partida. Claramente en el primer recorrido se agregan un
total de 3 detenciones y 3 arranques sin contar los iniciales y el final donde ademas
se conmuta el sentido. El mismo debe realizarse para cada eje.

Captulo 7. Testeos y medidas

Figura 7.1: Descripci


on grafica del experimento 1.

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.

Figura 7.2: Descripci


on grafica del error sistematico acumulado en el experimento 1.

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

7.2. Posicionador XYZ


Eje
Eje X
Eje Y

Cantidad de pasos
18896
18896

Velocidad (pasos/seg) Iteraciones


2250
1000
2250
1000

Tabla 7.1: Parametros caractersticos del experimento n


umero 1.

7.2.2. Experimento de deteccion de perdida de pasos 2


Descripcion
Consiste en realizar una trayectoria mas compleja como se muestra en la Figura
7.3. La idea es realizar un movimiento en X, luego uno en Z y llegar al punto destino
con un movimiento en el eje Y. Se realiza un retorno al punto inicial simultaneo
en los tres ejes. El recorrido completo se realiza una cantidad N de veces al igual
que los anteriores para detectar errores sistematicos que se hayan acumulado.

Figura 7.3: Descripcion grafica del experimento 2.

El experimento descrito no se pudo realizar dado que en la fecha se presento


un desperfecto mec
anico con el eje Z que impidio la realizacion de la prueba en
tiempo y forma.

7.2.3. Cuantificacion de la repetibilidad:


Descripcion
El objetivo del ensayo es obtener un resultado cuantificable de la repetibilidad
de la m
aquina. Para realizar esto, se analizan e interpretan las medidas obtenidas
y realizan pruebas complementarias que se discutiran. La prueba tiene dos grandes
criterios de exito. El primero es verificar que la dispersion en la medida de diferentes puntos es aleatoria y no sigue una tendencia. La segunda, es verificar que
la repetibilidad de la m
aquina en cada eje es menor a 0,15mm
131

Captulo 7. Testeos y medidas


El experimento en esta instancia es similar al presentado para detectar la perdida de pasos. La Figura 7.4 explica de forma grafica como se realiza el experimento.
Como puede observarse se realiza un primer recorrido en tres tramos donde quedan definidos los extremos de cada tramo, P0 , P1 , P2 , P3 . El segundo recorrido
es un solo tramo desde P3 a P0 o al reves, seg
un el sentido. En esta ocasion el
experimento se realiz
o en cada eje sin rampa de velocidad, pero a una velocidad
razonablemente m
as lenta que en la prueba cualitativa (1125pasos/seg) para que
los arranques y detenciones no produzcan un error notorio y un total de quince
iteraciones.

Figura 7.4: Descripci


on grafica del experimento para realizar la cuantificacion de la repetibilidad.

El procedimiento consiste en registrar la posicion en milmetros de cada Pk


junto a su equivalencia en pasos te
oricamente realizados. Las medidas relevadas
se obtienen con un extensi
ometro de resolucion de una centesima de milmetro.
Con los datos obtenidos, se obtiene un valor medio de las posiciones y la desviacion estandar de dichos valores cuyo resultado es importante para obtener una
interpretacion.
La repetibilidad en cada grado de libertad se define como la mitad del rango.
A su vez, el rango se expresa como se indica en la ecuacion (7.1). En cada punto
Pk se obtiene un valor de repetibilidad, por lo que se reportara como precision el
peor caso.
rango = Pkmax Pkmin

(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

7.2. Posicionador XYZ


tornillo. Por otro lado, si ademas de error frente al valor teorico es variable puede
resultar en un problema grave para la precision de la maquina.
Gmec = 0, 005291667

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.

(a) Montaje del extensi


ometro a la estructura, se aprecia una morsa para fijar
la posici
on al aluminio.

(b) Vastago del extensiometro paralelo a


la direccion del movimiento.

Figura 7.5: Montaje del extensiometro en el eje X.

La Tabla 7.2 resume las medidas obtenidas en el experimento para el eje X.


La Tabla 7.3 resume la posicion en pasos que registra el software de bajo nivel de
control de los motores. En una primera inspeccion de los mismos observamos una
ligera variaci
on respecto de la posicion de los diferentes puntos relevados.
133

Captulo 7. Testeos y medidas


X0 (mm) X1 (mm) X2 (mm)
5.000
10.080
20.640
5.005
10.080
20.640
5.005
10.070
20.625
5.005
10.060
20.630
5.000
10.077
20.635
5.005
10.070
20.640
4.995
10.065
20.625
5.000
10.070
20.630
5.010
10.090
20.640
5.005
10.075
20.630
5.005
10.080
60.635
5.000
10.080
20.655
5.020
10.090
20.640
5.010
10.080
20.635
5.000
10.080
20.655

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.

X0 (pasos) X1 (pasos) X2 (pasos)


7000
6000
4000

X3 (pasos)
0

Tabla 7.3: Posici


on absoluta en pasos para cada punto del recorrido de prueba.

La Tabla 7.4 agrupa los valores medios de cada Pk , k = 0..,3, la desviacion


estandar de estos valores, el rango y la repetibilidad.

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

7.2. Posicionador XYZ


su posici
on original. En la Figura 7.6(a) podemos observar como no existe una
tendencia al desplazamiento de los puntos del recorrido, manteniendose cada uno
pr
acticamente constante. En la Figura 7.6(b) se observa la variacion de la posici
on para el punto inicial X0 , destacandose el comportamiento aleatorio, lo cual
significa que no se ha detectado un error sistematico que se acumule notoriamente
para un cierto n
umero de iteraciones. En conclusion para el eje X se declara una
repetibilidad de 15 milesimas de milmetro, tomando como criterio el peor caso.
Se resalta que las medidas fueron realizadas sin lubricacion, por lo que es posible
que sean mejores con un correcto mantenimiento.

(a) Variaci
on de la posicion de los puntos extremos de cada
tramo.

(b) Variacion de la posicion del punto inicial X0 .


Figura 7.6: Mediciones de repetibilidad realizadas en el eje X.

135

Captulo 7. Testeos y medidas


Eje Y
El siguiente paso fue repetir el experimento anterior para el eje Y. Para lograr
este objetivo se mont
o un extensi
ometro Mitutoyo identico al utilizado en el eje X.

(a) Montaje del extensi


ometro
para medida de repetibilidad
en eje Y.

(b) Vastago del extensiometro


paralelo a la direccion del movimiento.

Figura 7.7: Montaje del extensiometro en el eje Y.

Se realizaron quince repeticiones del experimento y se relevaron los mismos


datos que para el eje X. Los resultados obtenidos para este experimento no estuvieron a la altura de los obtenidos para el eje X. En la Figura 7.8(a) se aprecia
una leve tendencia a desplazarse de los puntos Y0 Y1 Y2 Y3 hacia una posicion menor
a su posicion inicial. En la Figura 7.8(b) se observa claramente como la evolucion
del punto Y0 es mon
otona decreciente.
Sin embargo, si observamos en la Figura 7.9 el grafico de las distancias entre
|Y0 Y1 |, |Y1 Y2 | y |Y2 Y3 |, podemos observar que se mantienen relativamente
constantes, lo que quiere decir que en cada iteracion del experimento se recorre la
misma distancia en cada tramo.
El problema detectado, puede tener diferentes orgenes. Por ejemplo, puede
ser el mecanismo del eje Y que pierda cuentas o que el instrumento se desplace
dado que est
a mal ajustado. La segunda posibilidad, se constata que no es la causa
del problema. Por lo tanto, se pierden cuentas y es este punto hay dos caminos
a seguir para hallar la raz
on. Por un lado, puede deberse a esfuerzos mecanicos
que hagan perder pasos al motor que transmite el movimiento al eje Y. O podra
deberse a un problema con la l
ogica del software. En esta instancia, se opto por
descartar un problema en la l
ogica ya que ha pasado por diferentes etapas de testeo
donde los errores que podran llevar a dicho efecto sobre el desplazamiento han sido
corregidos. De esta forma, se concluye que el problema es de origen mecanico y se
decide lubricar el eje con un aceite fino (WD-40) para lograr un mejor movimiento.
136

7.2. Posicionador XYZ

(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

Captulo 7. Testeos y medidas

Figura 7.9: Distancia de tramos para el experimento realizado en eje Y.

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

7.2. Posicionador XYZ


punto inicial del recorrido en experimento realizado. Se observa, que presenta un
car
acter aleatorio, que hace que el error en el posicionamiento sea en promedio
constante, sin acumularse.

(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

Captulo 7. Testeos y medidas


presentados, se declara una repetibilidad de 42,5 milesimas de milmetro con el eje
correctamente lubricado (rulemanes y tornillo).

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.

(a) Montaje extensi


ometro en la estructura del posicionador para eje Z.

(b) Vastago del extensiometro paralelo


a la direccion del movimiento.

Figura 7.11: Montaje del extensiometro en el eje Z.

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

7.2. Posicionador XYZ

(a) Evolucion de la posicion de los puntos Zk .

(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

Captulo 7. Testeos y medidas

Figura 7.13: Distancia de tramos para el experimento realizado en eje Z.

Z0 (mm) Z1 (mm) Z2 (mm)


6.000
11.320
21.840
5.880
11.185
21.710
5.835
11.140
21.710
5.835
11.135
21.700
5.835
11.130
21.700
5.835
11.130
21.700
5.835
11.130
21.700
5.830
11.130
21.700
5.830
11.130
21.695
5.830
11.130
21.700
5.830
11.130
21.695
5.830
11.125
21.695
5.830
11.120
21.690
5.835
11.125
21.690
5.830
11.120
21.690

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

7.2. Posicionador XYZ

(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.

cuatro puntos intermedios y en la Figura 7.14(b) se observa el resultado de la


evoluci
on de la posici
on para el punto inicial del recorrido. Salvo por las dos primeras medidas, el resto de las mismas se repiten bastante con algunas oscilaciones,
producto de la aleatoriedad.
De la tabla anterior podemos observar, una gran mejora general. No obstante,
143

Captulo 7. Testeos y medidas


Z0
Z1
Z2
Z3
Promedio(mm)
5.8459 11.1453 21.7077 42.8627
Desviacion estandar(mm) 0.0428 0.0507 0.0371 0.0273
Rango(mm)
0.170
0.200
0.150
0.110
Repetibilidad(mm)
0.085
0.100
0.075
0.055
Tabla 7.8: Valores medios, desviaci
on estandar, rango y repetibilidad para cada punto Yk .

no se alcanza resultados tan buenos como en el eje X o eje Y. Como conclusion


podemos reportar una repetibilidad en el eje Z de 100 milesimas de milmetro
tomando el peor caso y resaltando que cumple con el criterio de exito antes mencionado.

Verificacion de la Ganancia Mecanica


Durante la realizaci
on de las pruebas de repetibilidad se obtuvieron diferentes
medidas de cuatro puntos en un recorrido para cada eje del sistema de coordenadas.
En 7.9 y 7.13 se present
o un primer resultado de la variacion de la distancia
por cada tramo que une a cada punto intermedio del recorrido y se concluyo
que la variaci
on era mnima dado que se mantenan relativamente constantes. En
esta seccion se presenta para los experimentos exitosos de cuantificacion de la
repetibilidad los resultados referentes a la ganancia mecanica. En la Figura 7.15(a)
se muestran los resultados finales para el eje X, en la Figura 7.15(b) se muestra el
comportamiento en el eje Y y en la Figura 7.15(c) se observa para el eje Z.
Como se puede observar la variaci
on no es notoria. En la Tabla 7.9 se compila
todos los resultados obtenidos para cada eje. Donde la ganancia de cada tramo
se calculo como se indica en la ecuaci
on 7.3, donde Pk+1 Pk es la distancia en
milmetros entre puntos consecutivos y Nk,k+1 son los pasos realizados en dicho
tramo.
G=

Ganancia por Tramo


P1 P 0
P2 P 1
P2 P 3
P3 P 0
Promedio
Error Relativo( %)

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

7.2. Posicionador XYZ

(a) Variacion de la distancia por tramo en el eje X.

(b) Variacion de la distancia por tramo en el eje Y.

(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

Captulo 7. Testeos y medidas


Como conclusi
on de este u
ltimo resultado, se menciona que los tornillos resultan bastante homogeneos ya que la ganancia mecanica medida posee un error
despreciable frente al valor te
orico. Y como conclusion general se destaca la obtencion de un prototipo basado en materiales que no son de precision, pero que
sirven para lograr los requerimientos propuestos.

7.3. Control de la temperatura


Se realizaron mediciones de temperatura para los elementos que necesitaban un
sistema de control para dicha magnitud. Estos elementos son el extrusor y la heated
bed. Se comenz
o como se recuerda del Captulo 6 con controladores analogos y del
tipo ON/OFF, se opt
o por esta clase de controlador dado que no es necesario
un control m
as preciso de la temperatura, como lo efectuara un controlador PID.

7.3.1. Heated Bed Platform


Las medidas que se tienen de la temperatura de la heated bed corresponden al
primer prototipo explicado en el Captulo 5, cuando se utilizo un setpoint de 60 C.

Figura 7.16: Temperatura de la heated bed platform con un setpoint de 60 C, donde cada
iteraci
on es cada 1 segundo.

Cabe destacar que en la Figura 7.16 no se contrasta la medida por software


con la medida real de un term
ometro patron, mas s se compara la temperatura
de estabilizaci
on con la medida de un termometro de mercurio, el cual arrojaba
valores comprendidos entre los lmites de las oscilaciones.
Cuando se repiti
o la prueba con un mayor setpoint, de 110 C, la heated bed

llegaba como m
aximo a 85 C. Esto
se observa en la Figura 7.17.
146

7.3. Control de la temperatura

Figura 7.17: Temperatura de la heated bed platform con un setpoint de 110 C.

Las medidas de la versi


on final de la heated bed platform no se pudieron realizar
dado que esta se dise
n
o, se fabricaron las partes pero nunca se llego a armar.

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

Captulo 7. Testeos y medidas

Temperatura del extrusor enfriando


180

160

160

Temperatura medida por el Arduino (C)

Temperatura medida por el Arduino (C)

Temperatura del extrusor calentando


180

140
120
100
80
60
40
20

50
100
150
200
250
Temperatura medida con el termometro patron (C)

300

(a) Medidas con el extrusor calentando.

140

120

100

80

60

40
50

100
150
200
250
Temperatura medida con el termometro patron (C)

300

(b) Medidas con el extrusor enfriando.

Figura 7.18: Medidas de la temperatura vs termometro patron.

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

7.3. Control de la temperatura

Temperatura del extrusor

Temperatura medida por el Arduino (C)

300

250

200

150

100

50

50
100
150
200
250
Temperatura medida con el termometro patron (C)

300

Figura 7.19: Medidas del extrusor con el factor corregido.

Figura 7.20: Temperatura del extrusor con un setpoint de 220 C. Iteraciones cada un segundo.

dicho rango el valor medio de la salida en un segundo depende proporcionalmente


de dicho error, con la salvedad de que la salida se controla de forma discreta.
Cuando se compar
o el nuevo sistema de control con el anterior (ON/OFF)
en las mismas condiciones se encontro que los resultados mejoraban, o sea que las
oscilaciones eran menores, como se puede ver en la Figura 7.21. En dicha figura se
149

Captulo 7. Testeos y medidas

(a) Controlador ON/OFF.


Temperatura del Extrusor
220
200
180

Temperatura (C)

160
140
120
100
80
60
40
20

200

400

600

800
Iteracion

1000

1200

1400

1600

(b) Controlador nuevo con un rango de control de


7 %.
Figura 7.21: Temperatura medida con un setpoint igual a 220 C para los dos sistemas de
control. Iteraciones cada un segundo.

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

7.3. Control de la temperatura

Temperatura del Extrusor

Temperatura del Extrusor

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

Tabla 7.10: Setpoint vs temperatura de estabilizacion.

demasiado la ganancia puede volver inestable al sistema.


Por u
ltimo como se mostro en todas las figuras, la temperatura a la que se
estabiliza difiere del setpoint, por mas que el error oscila muy poco la naturaleza
del controlador no permite anular este. Lo que se observa en la Figura 7.23 son
las medidas de la temperatura para distintos setpoints, estos fueron 210 C, 220 C,
230 C y 240 C.
La diferencia entre la temperatura alcanzada y el setpoint se puede explicar en
que el controlador busca lograr un equilibrio entre la energa recibida y la disipada
por el hot end, y este equilibrio se logra en nuestro caso a una temperatura inferior
al setpoint. Las temperaturas a las que se estabiliza se pueden ver en la Tabla 7.10.
Las medidas oscilan en un rango inferior a 2,5 C.
Como conclusi
on es de remarcar que aunque se comenzo con la idea de implementar un control de temperatura mas simple, por causas reales se encontro la
necesidad de mejorar dicho control. Lo cual se pudo realizar en un determinado
plazo y sin agregarle al mismo una gran complejidad, como puede ser que el sistema tenga memoria, lo que permitira anular el error, dejando esto como trabajo a
151

Captulo 7. Testeos y medidas

Temperatura del Extrusor


220

200

200

180

180

Temperatura (C)

Temperatura (C)

Temperatura del Extrusor


220

160

140

120

100
0

160

140

120

500

1000

1500

2000
Iteracion

2500

3000

3500

100
0

4000

(a) Setpoint= 210 C.

200

400

600
Iteracion

800

1000

1200

(b) Setpoint= 220 C.

Temperatura del Extrusor

Temperatura del Extrusor

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

(c) Setpoint= 230 C.

(d) Setpoint= 240 C.

1500

Figura 7.23: Temperatura medida con un setpoint igual a 220 C con distintos rangos de
control. Iteraciones cada un segundo.

futuro.

7.4. Simulacion Software e Impresion


7.4.1. Descripcion
En una primera instancia, para el testeo del software se realizaron dos tareas
que se explican en la Secci
on 6.5, que recordando, consistieron en la escritura al
puerto serial de los datos en cantidad de pasos del control de bajo nivel luego
de cada movimiento y la captura de los mismos mediante Matlab para su procesamiento y posterior ploteo de la trayectoria que describe el cabezal durante la
extrusion. En otras palabras se realiz
o un simulador para verificar si la salida se
152

7.4. Simulacion Software e Impresion


correspondera con la entrada del archivo .gcode que se intentara imprimir.
Las pruebas a realizar consistieron en la simulacion de la extrusion de:
Un cubo de 2 2 2cm3
Una cuchara
El contorno del territorio Uruguayo
En una segunda instancia se procede a imprimir aquellos modelos ya simulados.
Se presta especial atenci
on al patron descrito durante la impresion y se compara
con la trayectoria resultante de la simulacion. Se detectan ademas problemas que
puedan existir de temperatura, de posicionamiento por mecanica o logica.

7.4.2. Resultados e interpretacion


En el caso del cubo la simulacion obtenida se puede apreciar en la Figura
7.24(a). Lo primero a destacar es que se respeta la forma geometrica caracterstica
del mismo y tambien las dimensiones. Por otro lado, en la Figura 7.24(b) se puede
apreciar mejor el patr
on que debera seguir la trayectoria del puntero cuando
extruye.
En un primer intento de impresion de algunas capas de dicho cubo se obtuvo
el resultado que se aprecia en la Figura 7.25(a). Como puede observarse, dichas
capaz resultaron muy s
olidas y no describen el patron de la simulacion. La razon
se debe a un error de calibracion de la cantidad de milmetros de filamento que se
extruye por paso del motor.
Realizando un experimento para la calibracion como se indica en [85] se logra
mejorar el resultado y obtener un patron adecuado, el cual se puede observar en la
Figura 7.25(b). Al momento de imprimir el modelo completo, se detectaron ciertos
problemas, algunos de los cuales fueron resueltos en secciones anteriores. En la
Figura 7.25(c) se puede apreciar el resultado.
Los problemas detectados son tres: primero, con el aumento de temperatura el
dispositivo que tracciona el filamento pasado un tiempo de encontrarse intentando
llegar al equilibrio termico con la boquilla caliente, alcanza una temperatura tal
que el filamento se ablanda. Por tal motivo, se descarrila y la maquina puede dejar
de extruir. El problema surge que durante la prueba, no se utilizo el ventilador
para mantener a una temperatura adecuada la zona de traccion.
Por otro lado, las oscilaciones de la temperatura en s, superan el margen
impuesto por software para permitir extrusion. Sucede generalmente, que se debe
calentar y por lo tanto se espera a que la temperatura alcance el rango centrado en
el valor deseado. Por u
ltimo se detecto en el eje Y un desplazamiento de la posicion,
como este experimento se realizo con anterioridad a la medida de repetibilidad, se
considera ya resuelto.
Se intent
o simular una cuchara, pero durante el proceso una desconexion provoc
o la detenci
on de la transmicion de comandos G-codes desde el PC corriendo
Matlab para que procese el Arduino y no pudiendo retomar el trabajo posteriormente. No se reinici
o la prueba debido al tiempo que consuma de alrededor de 5
153

Captulo 7. Testeos y medidas

(a) Resultado de simulaci


on de un cubo de 8cm3 con sistema de coordenadas absoluto y unidades en milmetros.

(b) Patr
on descripto en la simulacion para el relleno del cubo al 20 %.
Figura 7.24: Resultados de simulacion.

horas. En la Figura 7.26 se aprecia el resultado y se destaca la forma curva, propia


de la geometra de la misma.
Tambien se gener
o una simulaci
on del espacio terrestre del Uruguay, que posee
unas dimensiones peque
nas en el modelo simulado. En la Figura 7.27 podemos
apreciar el resultado.

154

7.4. Simulacion Software e Impresion

(a) Primer intento de


impresi
on, con un mal
ajuste de la cantidad de
milmetros por paso extruidos de filamento.

(b) Segundo intento


de impresion donde se
ajusto la constate de
calibracion en 1.5.

(c) Tercer intento de


impresion, modelo completo de cubo de 8cm3 .

Figura 7.25: Pruebas de impresion realizadas a la fecha.

Figura 7.26: Simulaci


on de una cuchara sin terminar, con sistema de coordenadas absoluto y
unidades en milmetros.

155

Captulo 7. Testeos y medidas

Figura 7.27: Simulaci


on del territorio Uruguayo, con sistema de coordenadas absoluto y unidades en milmetros.

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.

Figura 8.1: Fotografa del prototipo fabricado, vista frontal.

Captulo 8. Conclusiones y trabajo a futuro

Figura 8.2: Fotografa del prototipo fabricado, vista posterior.

Comenzando por la mec


anica del prototipo, se logro el dise
no y armado de
una estructura modular capaz de ser accionada mediante motores paso a paso. La
implementaci
on de la misma involucr
o la necesidad de surtir diferentes dificultades
a las cuales ning
un miembro del equipo de trabajo se encontraba familiarizado. Fue
en las tareas referidas a este tema donde se tuvieron las principales dificultades
que consumieron una importante carga horaria de la total dedicada al proyecto.
Los problemas resueltos se resumen a continuacion:
Backlash en los ejes X e Y: Se utilizaron resortes y una segunda tuerca por
eje para lograr una tracci
on contra la misma cara de los tornillos sin fin.
Excentricidad tornillos: Se dise
no un collar de empuje para absorber el efecto
producido por la excentricidad y se implemeto en cada eje.
Segundo tornillo de tracci
on para eje Z: Se agrego un segundo eje de traccion
para eliminar vibraciones en la direccion vertical y se vinculo al primer
tornillo del eje Z mediante un correa dentada y un tensor.
Por otro lado se realiz
o un sistema basado en finales de carrera mecanicos que
ademas de utilizarse para obtener una posicion inicial de referencia sirven para
proteccion mec
anica. Se cumplieron las metas en cuanto a volumen de trabajo,
obteniendose un volumen de 35,8cm 31,4cm 32,1cm. En cuanto a precision se
obtuvo en el peor caso 0,1mm de repetibilidad.
Continuando con la electr
onica, se destaca la eleccion del hardware que cumple
con los requerimientos. En particular, la placa Raspberry Pi la cual no se exploto
en demasa abre la posibilidad a futuras mejoras que requieran mas capacidad
158

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

Captulo 8. Conclusiones y trabajo a futuro


escalon con las obtenidas para el controlador ON/OFF y se verifico una drastica
disminucion de las oscilaciones. En la practica, se observo una mayor fluidez entre
movimientos consecutivos del prototipo durante una impresion, en otras palabras
menos cortes por salirse del rango deseado de temperatura.
Otros puntos no mencionados pero que merecen un lugar en este captulo son
la configuraci
on de la placa Raspberry Pi para que establezca una red inalambrica para la transferencia del archivo G-code. Se logro aplicar un procedimiento de
calibracion para encontrar la ortogonalidad de la mesa de trabajo, aunque no se
llego a acabar el dise
no previsto. Y un procedimiento para calibrar el espesor de
filamento extrudido, necesario para obtener mejor calidad en la pieza. Se realizaron
simulaciones varias de prototipos a imprimir, cubos, cucharas, territorio uruguayo,
engranajes, adem
as se efectuaron impresiones de cubos para comparar el resultado final con lo obtenido en las simulaciones. Los resultados fueron satisfactorios,
aunque se encontraron detalles a mejorar tras obtener las impresiones.
Como reflexi
on grupal, la ejecuci
on del presente proyecto derivo en un estudio
e investigaci
on en distintas
areas por todos los puntos que se debieron atacar. Esto
permitio acrecentar tanto el conocimiento como la practica de distintos temas
aprendidos durante la carrera.

8.2. Trabajo a futuro


Al haber sido el objetivo del proyecto crear el prototipo y dejarlo funcional,
provoco que haya determinados puntos para los cuales no se penso una solucion,
otros para los cuales se podra encontrar otra alternativa de solucion, o simplemente
mejorar alguna soluci
on implementada.
Pero principalmente con la presente construccion y desarrollo funcional, se
espera que puedan surgir ideas para las distintas aplicaciones que pueden hacer
uso del posicionador, por ejemplo pensando en futuros proyectos de fin de grado.
A continuaci
on se detalla una seleccion de puntos divididos por las areas de
mecanica, electr
onica y software, que el equipo considera que se deben atacar para
cubrir faltantes o mejorar soluciones presentadas.
Mec
anica:
Los siguientes puntos est
an pensados para mejorar. Es decir, para tener
en cuenta en una nueva construccion o si en alg
un momento se decidiera
desarmar el prototipo.
Cambio de guas: las colocadas son de 8mm, por unas de mayor diametro, lo que brindar
a una mayor firmeza en la estructura y que soporten
los esfuerzos a las que est
an sometidas.
Evaluar cambio de motor en el eje Z (vertical) por uno de mayor torque: no se logr
o una velocidad maxima comparable a la conseguida en
los dem
as ejes. Esto se debe a que dicho eje debe realizar movimientos
hacia arriba que tienen en contra el peso de toda la parte movil (estructura de eje Y) y como ya se ha mencionado a altas velocidades los
160

8.2. Trabajo a futuro


motores paso a paso bajan su torque lo que provoca que la fuerza de
tracci
on en el eje vertical a alta velocidad no sea suficiente.
Mejorar las piezas de traccion de cada eje con el objetivo de corregir
todava m
as la excentricidad del tornillo, o plantearse un cambio de
tornillo, colocando uno de calidad adecuado para este tipo de maquinas.
Ahora se presentan tareas que se deben realizar para ultimar el prototipo.
Colocar una cubierta de policarbonato transparente que asle a la
m
aquina del exterior. Cubierta obligatoria para la aplicacion de fresado.
Realizar adaptacion para poder colocar de forma practica el cabezal
de fresado.
Colocar mesa nivelable, cuyo sistema ya esta implementado.
Electr
onica:
Comprar una fuente igual a la que tiene colocada el prototipo actualmente para duplicar la alimentacion. Trabajando a 24V de tension, si
se calcula un peor caso de consumo se estaran consumiendo 24, 6A
(3, 4 4A motores, 5A heated bed, 2A extrusor, 1A (consumo estatico
de cada uno de los circuitos y consumo de placas inteligentes)). De todas formas, por un tema de combinacion de movimientos y velocidades
de estos, estara bien poder dar de alimentacion 17, 6A.
Realizar el circuito impreso del controlador de motores de corriente
continua (PCB ya esta dise
nado), que permite control de velocidad
desde el microcontrolador utilizado, pudiendo manejar dos canales de
motores diferentes. Se debe utilizar para el motor del cabezal fresador
y sera buena practica usarlo para controlar el ventilador del cabezal
de impresi
on.
Colocar la heated bed ya fabricada.
Software:
Realizar una interfaz de usuario mas amigable para la transmision del
archivo .gcode a la maquina.
Replantear el razonamiento del modulo de mas bajo nivel que controla
los motores paso a paso con el objetivo de basarlo en un modelo fsico.
Esto permitir
a poder generar las frecuencias correspondientes a cada
movimiento de cada uno de los ejes de forma independiente, brindando
la posibilidad de realizar de forma optima las rampas de aceleracion y
frenado.
Hacer el control de temperatura mas eficiente, para anular el error. Por
ejemplo implementado un control PID.
161

Captulo 8. Conclusiones y trabajo a futuro


Realizar el m
odulo para interpretar las lneas de codigo de maquina
referidas a la aplicaci
on de fresado. Basicamente es replicar el modulo
interprete.cpp de impresion y realizar las modificaciones pertinentes
(cantidad de n
umeros que describen la accion, entre otras) para el
c
odigo de fresado.
Con este prototipo se quiso dejar las puertas abiertas para desarrollar distintas
funciones que se asocien al uso del posicionador, con lo cual desde el comienzo del
proyecto se vio como tarea a futuro el poder buscar estas funciones, que se sumen
a la de impresi
on 3D y fresado, como puede ser la funcion de escaneo 3D, buscando
una alternativa que usufruct
ue la capacidad de que el puntero se puede ubicar en
cualquier punto del volumen de trabajo.

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

Data Structure Index

1.1

Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

File Index

2.1

File List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Data Structure Documentation

3.1

banderas Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

buffer Class Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2.1

Detailed Description

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2.2

Constructor & Destructor Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2.2.1

3.2

3.2.3

3.3

buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Member Function Documentation

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

comando Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

contTemp Class Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

3.4.1

Detailed Description

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.4.2

Constructor & Destructor Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.4.2.1

contTemp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.4.2.2

contTemp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.4.3

3.5

Member Function Documentation

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

datos Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3.5.1

Detailed Description

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.5.2

Field Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

registroErrores Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

vel Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

vi
4

CONTENTS
File Documentation
4.1

4.2

4.3

23

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/buffer.h File Reference . . . . . . . . . . . . . . . . . . . . . . . .

23

4.1.1

Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

4.1.1.1

LARGO_BUFFER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

4.1.1.2

LARGO_STRING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/Calibracion.h File Reference . . . . . . . . . . . . . . . . . . . . .

24

4.2.1

Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

4.2.1.1

calibracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/controlXYZ_E.h File Reference . . . . . . . . . . . . . . . . . . .

25

4.3.1

Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

4.3.1.1

eje_k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

4.3.1.2

propiedad

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Enumeration Type Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/contTemp.h File Reference . . . . . . . . . . . . . . . . . . . . .

30

4.4.1

Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/Display.h File Reference . . . . . . . . . . . . . . . . . . . . . . .

32

4.5.1

Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/ejecutador.h File Reference . . . . . . . . . . . . . . . . . . . . .

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/errores.h File Reference . . . . . . . . . . . . . . . . . . . . . . .

49

4.7.1

Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

4.7.1.1

TAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

4.7.2.1

error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

Enumeration Type Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

4.7.3.1

eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/interprete.h File Reference . . . . . . . . . . . . . . . . . . . . . .

51

4.8.1

Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

4.8.1.1

MAX_speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

4.8.2.1

acciones_t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

Enumeration Type Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

4.8.3.1

acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

4.8.4.1

ini_comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

4.8.4.2

interpretar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/layerHW.h File Reference . . . . . . . . . . . . . . . . . . . . . .

52

4.9.1

Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

Enumeration Type Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

4.9.3.1

59

motores

motor_i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

4.10 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/Main_imprimiendo.h File Reference . . . . . . . . . . . . . . . . .

62

4.10.1 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62

4.10.1.1 LeoGcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62

4.10.1.2 MainImprimiendo

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62

4.11 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/MovimientoManual.h File Reference . . . . . . . . . . . . . . . . .

63

4.11.1 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.11.1.1 MovimientoManual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.12 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/setup.h File Reference . . . . . . . . . . . . . . . . . . . . . . . .

63

4.12.1 Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

4.13 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto modular3D/Software/Anexo codigo/Codigo/stepper.h File Reference . . . . . . . . . . . . . . . . . . . . . . .

66

4.13.1 Macro Definition Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

4.13.1.1 LIMITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

4.13.2 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

4.13.2.1 home_all_axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

4.13.2.2 stepper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

Chapter 1

Data Structure Index


1.1

Data Structures

Here are the data structures with brief descriptions:


banderas . .
buffer . . . .
comando . .
contTemp . .
datos . . . .
registroErrores
vel . . . . . .

.
.
.
.
.

.
.
.
.
.
.
. .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

5
6
10
12
16
20
20

Data Structure Index

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

Chapter 2

File Index
2.1

File List

Here is a list of all files with brief descriptions:


C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/buffer.h . . . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/Calibracion.h . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/controlXYZ_E.h . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/contTemp.h . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/Display.h . . . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/ejecutador.h . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/errores.h . . . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/interprete.h . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/layerHW.h . . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/Main_imprimiendo.h . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/MovimientoManual.h . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/setup.h . . . . . . . . . . . . . . . . . . . . . .
C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto
Anexo codigo/Codigo/stepper.h . . . . . . . . . . . . . . . . . . . .

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

Chapter 3

Data Structure Documentation


3.1

banderas Struct Reference

#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

Definition at line 78 of file ejecutador.h.

3.1.2

Field Documentation

3.1.2.1

int extrudeON

Definition at line 85 of file ejecutador.h.

3.1.2.2

int extruder_mode

Definition at line 81 of file ejecutador.h.

3.1.2.3

int fan

Definition at line 84 of file ejecutador.h.

3.1.2.4

int inches

Definition at line 82 of file ejecutador.h.

Data Structure Documentation

3.1.2.5

int retract

Definition at line 86 of file ejecutador.h.

3.1.2.6

int sentido_CW

Definition at line 83 of file ejecutador.h.

3.1.2.7

int system_coordinates

Definition at line 80 of file ejecutador.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/ejecutador.h

3.2

buffer Class Reference

#include <buffer.h>

Public Member Functions


buffer ()
void add (char gcode)

int getEnvio ()

int getGuardo ()
char get (void)
int len ()

bool isFull ()
bool isEmpty ()

3.2.1

Detailed Description

Definition at line 31 of file buffer.h.

3.2.2

Constructor & Destructor Documentation

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 buffer Class Reference

3.2.3

Member Function Documentation

3.2.3.1

void add ( char gcode )

add(char gcode): funcion para encolar un string.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

Data Structure Documentation

Parameters
char

gcode: puntero al string

Returns
:

3.2.3.2

char get ( void )

get(): funcion para obtener un string de la cola.


Parameters

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 ( )

isEmpty(): funcion para consultar si la cola se encuentra vacia.


Parameters

Returns
bool: 1 si esta vacia y 0 si no.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

3.2 buffer Class Reference


3.2.3.6

bool isFull ( )

isFull(): funcion para consultar si la cola se encuentra llena.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

10

Data Structure Documentation

Parameters

Returns
bool: 1 si esta llena y 0 si no.

3.2.3.7

int len ( )

len(): funcion para consultar la cantidad de string que se encuentran en la cola.


Parameters

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

comando Struct Reference

#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

Definition at line 58 of file interprete.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

3.3 comando Struct Reference

3.3.2

Field Documentation

3.3.2.1 acciones_t accion


Definition at line 61 of file interprete.h.
3.3.2.2

float center_IJ[2]

Definition at line 65 of file interprete.h.


3.3.2.3

float datos_ejes[4]

Definition at line 62 of file interprete.h.


3.3.2.4

int extrudeON

Definition at line 80 of file interprete.h.


3.3.2.5

int extruder_mode

Definition at line 76 of file interprete.h.


3.3.2.6

int fan

Definition at line 78 of file interprete.h.


3.3.2.7

float flag_datosNuevos[7]

Definition at line 63 of file interprete.h.


3.3.2.8

char message[30]

Definition at line 72 of file interprete.h.


3.3.2.9

float param_B

Definition at line 70 of file interprete.h.


3.3.2.10

float param_F

Definition at line 64 of file interprete.h.


3.3.2.11

float param_L

Definition at line 66 of file interprete.h.


3.3.2.12

float param_P

Definition at line 68 of file interprete.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

11

12

Data Structure Documentation

3.3.2.13

float param_R

Definition at line 69 of file interprete.h.


3.3.2.14

float param_S

Definition at line 67 of file interprete.h.


3.3.2.15

float param_T

Definition at line 71 of file interprete.h.


3.3.2.16

int power

Definition at line 79 of file interprete.h.


3.3.2.17

int retract

Definition at line 81 of file interprete.h.


3.3.2.18

int sentido_CW

Definition at line 77 of file interprete.h.


3.3.2.19

int system_coordinates

Definition at line 75 of file interprete.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/interprete.h

3.4

contTemp Class Reference

#include <contTemp.h>

Public Member Functions

contTemp (int thermPin1, int controlPin1, float factor1)


contTemp (int thermPin1, int controlPin1, int fanPin1, float factor1)
void setSetpoint (double Setpoint1)
double getTemp ()
double getSetpoint ()
double getOutput ()
int getFlag ()
int getCont_por ()
void controlTemp ()
void fanON ()
void fanOFF ()
void reduce_cont_por ()
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

3.4 contTemp Class Reference


void on ()
void off ()

3.4.1

Detailed Description

Definition at line 36 of file contTemp.h.

3.4.2

Constructor & Destructor Documentation

3.4.2.1 contTemp ( int thermPin1, int controlPin1, float factor1 )


3.4.2.2 contTemp ( int thermPin1, int controlPin1, int fanPin1, float factor1 )

3.4.3

Member Function Documentation

3.4.3.1

void controlTemp ( )

controlTemp(): Funcion que establece el valor del contador propio.


Parameters

Returns
:

3.4.3.2

void fanOFF ( )

fanOFF(): Funcion que apaga el ventilador.


Parameters

Returns
:

3.4.3.3

void fanON ( )

fanON(): Funcion que enciende el ventilador.


Parameters

Returns
:

3.4.3.4

int getCont_por ( )

getCont_por(): Funcion que retorna el contador propio del controlador.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

13

14

Data Structure Documentation

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 ( )

getOutput(): Funcion que retorna la salida entre 0 (apagado) y 255 (encendido).


Parameters

Returns
:

3.4.3.7

double getSetpoint ( )

getSetpoint(): Funcion que retorna el Setpoint.


Parameters

Returns
:

3.4.3.8

double getTemp ( )

getTemp(): Funcion que retorna la temperatura actual.


Parameters

Returns
:

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

3.4 contTemp Class Reference


3.4.3.9

void off ( )

off(): Funcion apaga la fuente de corriente.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

15

16

Data Structure Documentation

Parameters

Returns
:

3.4.3.10

void on ( )

on() : Funcion enciende la fuente de corriente.


Parameters

Returns
:

3.4.3.11

void reduce_cont_por ( )

reduce_cont_por(): Funcion que reduce en uno el contador propio del controlador.


Parameters

Returns
:

void setSetpoint ( double Setpoint1 )

3.4.3.12

setSetpoint(double Setpoint1): Funcion que setea el Setpoint.


Parameters
double

Setpoint1 : Valor del setpoint a setear.

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

datos Struct Reference

#include <ejecutador.h>
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

3.5 datos Struct Reference

Data Fields

3.5.1

float datos_origenHighLevel [3]


float datos_origenHighLevelMM [3]
float datos_origenHighLevelINCHES [3]
float datos_ejes [4]
float datos_ejes_retract [2]
float velocidad_retract
float datos_aceleracion_extruyendo [4]
float offset [4]
float delta_nueva_posicionMMabs [4]
float delta_nueva_posicionINCHESabs [4]
float delta_nueva_posicionMMrel [4]
float delta_nueva_posicionINCHESrel [4]
float param_F
float center_IJ [2]
float step_per_unit
float max_jerk_xy
float max_jerk_z
float VelocidadTravelMinImpresion
float VelocidadTravelMin
float MinSegmentTime
float param_L
float param_S
float param_P
float param_R
float param_T
float param_B
char message [30]

Detailed Description

Definition at line 46 of file ejecutador.h.

3.5.2

Field Documentation

3.5.2.1

float center_IJ[2]

Definition at line 62 of file ejecutador.h.


3.5.2.2

float datos_aceleracion_extruyendo[4]

Definition at line 55 of file ejecutador.h.


3.5.2.3

float datos_ejes[4]

Definition at line 52 of file ejecutador.h.


3.5.2.4

float datos_ejes_retract[2]

Definition at line 53 of file ejecutador.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

17

18
3.5.2.5

Data Structure Documentation


float datos_origenHighLevel[3]

Definition at line 49 of file ejecutador.h.

3.5.2.6

float datos_origenHighLevelINCHES[3]

Definition at line 51 of file ejecutador.h.

3.5.2.7

float datos_origenHighLevelMM[3]

Definition at line 50 of file ejecutador.h.

3.5.2.8

float delta_nueva_posicionINCHESabs[4]

Definition at line 58 of file ejecutador.h.

3.5.2.9

float delta_nueva_posicionINCHESrel[4]

Definition at line 60 of file ejecutador.h.

3.5.2.10

float delta_nueva_posicionMMabs[4]

Definition at line 57 of file ejecutador.h.

3.5.2.11

float delta_nueva_posicionMMrel[4]

Definition at line 59 of file ejecutador.h.

3.5.2.12

float max_jerk_xy

Definition at line 64 of file ejecutador.h.

3.5.2.13

float max_jerk_z

Definition at line 65 of file ejecutador.h.

3.5.2.14

char message[30]

Definition at line 75 of file ejecutador.h.

3.5.2.15

float MinSegmentTime

Definition at line 68 of file ejecutador.h.

3.5.2.16

float offset[4]

Definition at line 56 of file ejecutador.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

3.5 datos Struct Reference


3.5.2.17

19

float param_B

Definition at line 74 of file ejecutador.h.

3.5.2.18

float param_F

Definition at line 61 of file ejecutador.h.

3.5.2.19

float param_L

Definition at line 69 of file ejecutador.h.

3.5.2.20

float param_P

Definition at line 71 of file ejecutador.h.

3.5.2.21

float param_R

Definition at line 72 of file ejecutador.h.

3.5.2.22

float param_S

Definition at line 70 of file ejecutador.h.

3.5.2.23

float param_T

Definition at line 73 of file ejecutador.h.

3.5.2.24

float step_per_unit

Definition at line 63 of file ejecutador.h.

3.5.2.25

float velocidad_retract

Definition at line 54 of file ejecutador.h.

3.5.2.26

float VelocidadTravelMin

Definition at line 67 of file ejecutador.h.

3.5.2.27

float VelocidadTravelMinImpresion

Definition at line 66 of file ejecutador.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/ejecutador.h
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

20

Data Structure Documentation

3.6

registroErrores Struct Reference

#include <errores.h>

Data Fields
int indice
error err [TAM]

3.6.1

Detailed Description

Registro de errores ocurridos


Definition at line 62 of file errores.h.

3.6.2

Field Documentation

3.6.2.1 error err[TAM]


Arreglo del tipo error
Definition at line 65 of file errores.h.

3.6.2.2

int indice

Indice del arreglo


Definition at line 64 of file errores.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/errores.h

3.7

vel Struct Reference

#include <controlXYZ_E.h>

Data Fields
unsigned int vx
unsigned int vy
unsigned int vz
unsigned int ve

3.7.1

Detailed Description

Estructura para registro de velocidad de cada Eje


Definition at line 60 of file controlXYZ_E.h.
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

3.7 vel Struct Reference

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

22

Data Structure Documentation

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

Chapter 4

File Documentation
4.1

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/buffer.h File Reference

#include "Arduino.h"

Data Structures
class buffer

Macros
#define LARGO_BUFFER 1
#define LARGO_STRING 50

4.1.1

Macro Definition Documentation

4.1.1.1

#define LARGO_BUFFER 1

Proyecto Modular 3D Modulo Buffer


El objetivo de este modulo es crear el objeto buffer. El cual es una cola de string, los cuales constan de LARGO_STRING de char y en la misma caben LARGO_BUFFER string. La cola responde a la logica FIFO First In First
Out y circular. Y tambien se deben contener todas las funciones que el objeto buffer necesita para intereactuar con
los demas modulos.
buffer.h
Version
1.0

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

Definition at line 27 of file buffer.h.

4.2

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/Calibracion.h File Reference

#include "Display.h"
#include "Main_imprimiendo.h"
#include <LiquidCrystal.h>

Functions
void calibracion ()

4.2.1

Function Documentation

4.2.1.1

void calibracion ( )

Proyecto Modular 3D Modulo Calibracion


El objetivo de este modulo es el de definir y agrupar todas las funciones que sean necesarias para la ejecucion de
una etapa de calibracion mecanica, la cual constara de distintas fases que se puedan realizar parcial o totalmente
de forma previa a la impresion de un modelo
Calibracion.h
Version
1.0
Author
Guillermo Airaldiguillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Nicolas Lamath ellama.ing@gmail.com

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 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/controlXYZ_E.h File Reference

4.3

25

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/controlXYZ_E.h File Reference

#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.

typedef enum propiedades propiedad


Se define el tipo para poder declarar variables con esta enumeracion.

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 ()

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

26

File Documentation

4.3.1

Typedef Documentation

4.3.1.1

typedef enum ejes eje_k

Se define el tipo para poder definir variables con la enumeracion creada.


Definition at line 41 of file controlXYZ_E.h.
4.3.1.2

typedef enum propiedades propiedad

Se define el tipo para poder declarar variables con esta enumeracion.


Definition at line 55 of file controlXYZ_E.h.

4.3.2

Enumeration Type Documentation

4.3.2.1

enum ejes

Proyecto CtrlMotors3D Modulo controlXYZ_E


Este modulo se encarga del registro de la posicion absoluta del posicionador XYZ y el extrusor E en numero de
pasos y las respectivas velocidades en unidades de Master Clock. Implementa funciones para menejo de los
registros y consulta de los mismos.
controlXYZ_E.h
Author
Guillermo Airaldi guillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Jose Basualdo josebasualdo@gmail.com
Version
2.0
Date
20 de noviembre 2014 ... Librerias ... Definicion de Variables Enumeracion que representa los ejes XYZ y el
extrusor
Enumerator
ejeX Eje X
ejeY Eje Y
ejeZ Eje Z
ejeE Extrusor
Definition at line 31 of file controlXYZ_E.h.
4.3.2.2

enum propiedades

Enumeracion que describe la posicion y la velocidad.


Enumerator
posicion posicion actual
objetivo posicion objetivo
velocidad velocidad con la que se realizara el movimiento
Definition at line 46 of file controlXYZ_E.h.
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.3 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/controlXYZ_E.h File Reference

4.3.3

Function Documentation

4.3.3.1

unsigned long int consulta ( eje_k eje, propiedad selector )

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

eje: Parametro que indica que eje se desea consultar


selector: Parametro que indica la propiedad a consultar, estas pueden ser, posicion , objetivo
o velocidad

unsigned long int consultaPos_objE ( )

Funcion de consulta de posicion objetivo en eje E


4.3.3.3

unsigned long int consultaPos_objX ( )

Funcion de consulta de posicion objetivo en eje X


4.3.3.4

unsigned long int consultaPos_objY ( )

Funcion de consulta de posicion objetivo en eje Y


4.3.3.5

unsigned long int consultaPos_objZ ( )

Funcion de consulta de posicion objetivo en eje Z


4.3.3.6

unsigned long int consultaPosE ( )

Funcion de consulta de posicion actual en eje E


4.3.3.7

unsigned long int consultaPosX ( )

Funcion de consulta de posicion actual en eje X


4.3.3.8

unsigned long int consultaPosY ( )

Funcion de consulta de posicion actual en eje Y


4.3.3.9

unsigned long int consultaPosZ ( )

Funcion de consulta de posicion actual en eje Z


4.3.3.10

unsigned long int consultaVelE ( )

Funcion de consulta por registro velocidad en eje E


4.3.3.11

unsigned long int consultaVelX ( )

Funcion de consulta por registro velocidad en eje X


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

28

File Documentation

4.3.3.12

unsigned long int consultaVelY ( )

Funcion de consulta por registro velocidad en eje Y

4.3.3.13

unsigned long int consultaVelZ ( )

Funcion de consulta por registro velocidad en eje Z

4.3.3.14

void deltaE ( bool sentido )

Funcion que actualiza el registro de posicion absoulta de E en 1 paso segun sentido


Parameters
bool

4.3.3.15

sentido: Vale 1 si se desea sumar un paso y -1 si desea restar

void deltaX ( bool sentido )

Funcion que actualiza el registro de posicion absoulta de X en 1 paso segun sentido


Parameters
bool

4.3.3.16

sentido: Vale 1 si se desea sumar un paso y -1 si desea restar

void deltaY ( bool sentido )

Funcion que actualiza el registro de posicion absoulta de Y en 1 paso segun sentido


Parameters
bool

4.3.3.17

sentido: Vale 1 si se desea sumar un paso y -1 si desea restar

void deltaZ ( bool sentido )

Funcion que actualiza el registro de posicion absoulta de Z en 1 paso segun sentido


Parameters
bool

4.3.3.18

sentido: Vale 1 si se desea sumar un paso y -1 si desea restar

bool getMovimientoE ( )

Funcion encargada de retornar un bool que indica si el motor E se esta moviendo.


Returns
bool True indica que el motor se esta moviendo, false que no lo esta.

4.3.3.19

bool getMovimientoX ( )

Funcion encargada de retornar un bool que indica si el motor X se esta moviendo.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.3 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/controlXYZ_E.h File Reference

29

Returns
bool True indica que el motor se esta moviendo, false que no lo esta.

4.3.3.20

bool getMovimientoY ( )

Funcion encargada de retornar un bool que indica si el motor Y se esta moviendo.


Returns
bool True indica que el motor se esta moviendo, false que no lo esta.

4.3.3.21

bool getMovimientoZ ( )

Funcion encargada de retornar un bool que indica si el motor Z se esta moviendo.


Returns
bool True indica que el motor se esta moviendo, false que no lo esta.

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

void restart ( eje_k eje )

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

eje: Parametro que indica que eje se debe resetear

void setObjetivo ( eje_k eje, unsigned long int pos_final )

4.3.3.27

Funcion que actualiza el registro del setpoint por eje


Parameters
eje_k
int

eje: Parametro que indica en que eje se debe efectuar la modificacion del setpoint
pos_final: posicion absoluta que se desea alcanzar en pasos

void setPosicion ( eje_k eje, unsigned long int nueva_pos )

4.3.3.28

Funcion que actualiza el registro de la posicion actual por eje


Parameters
eje_k
int

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

void setVelocidad ( eje_k eje, unsigned int v )

4.3.3.29

Funcion que actualiza el registro de la velocidad por eje


Parameters
eje_k
int

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/contTemp.h File Reference

#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 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/contTemp.h File Reference

4.4.1

Macro Definition Documentation

4.4.1.1

#define POR_FLAG 0.07

31

Proyecto Modular 3D Modulo contTemp


El objetivo de este modulo es crear el objeto contTemp. El cual es el encargado de controlar la temperatura del
extrusor o de la "Heated Bed", cabe destacar que esto es posible dado que ambas poseen caracteristicas similares.
Y tambien se deben contener todas las funciones de consulta en lo que refieren a la temperatura
contTemp.h
Version
2.0
Author
Guillermo Airaldiguillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Nicolas Lamath ellama.ing@gmail.com

Date
28 de Noviembre 2014
Definition at line 26 of file contTemp.h.
4.4.1.2

#define PROM 5

Definition at line 27 of file contTemp.h.

4.4.2

Function Documentation

4.4.2.1

void controlarTemperatura ( contTemp ct )

controlarTemperatura(contTemp ct): Funcion que agrega en un arreglo de controladores de temperatura el controlador ct.
Parameters
contTemp

ct : Puntero a contTemp que se desea controlar en las interrupciones.

Returns
:

4.4.2.2

void iniTempClock ( )

iniTempClock(): Funcion que inicializa el timer que impone la interrupcion cada 50 milisegundos.
Parameters

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/Display.h File Reference

#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

4.5 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/Display.h File Reference

33

void DisplaymmXpasoObj (int eje, float dist)


void DisplaymmXpasoMed (int eje, float med)
void DisplayAltMesa (int punto)
void DisplayOffset ()
void DisplayImprimiendo ()
int recibir ()
boolean antirebote (int pin)

4.5.1

Macro Definition Documentation

4.5.1.1

#define PIN_ABAJO 39

Definition at line 27 of file Display.h.


4.5.1.2

#define PIN_ARRIBA 40

Definition at line 25 of file Display.h.


4.5.1.3

#define PIN_DERECHO 38

Proyecto Modular 3D Modulo Display


El objetivo de este modulo es el de definir y agrupar todas las funciones que sean necesarias para la implementacion de la pantalla lcd, y para su uso desde cualquier otro modulo
Display.h
Version
1.0
Author
Guillermo Airaldiguillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Nicolas Lamath ellama.ing@gmail.com
Date
04 de Setiembre 2014
Definition at line 24 of file Display.h.
4.5.1.4

#define PIN_ENTER 43

Definition at line 28 of file Display.h.


4.5.1.5

#define PIN_EXIT 42

Definition at line 29 of file Display.h.


4.5.1.6

#define PIN_IZQUIERDO 41

Definition at line 26 of file Display.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

34
4.5.1.7

File Documentation
#define TIEMPO_ANTIREBOTE 30

Definition at line 30 of file Display.h.

4.5.2

Function Documentation

4.5.2.1

boolean antirebote ( int pin )

Funcion para anular el efecto de rebote de los botones por software


Parameters
numero del pin que se desea medir sin rebote

4.5.2.2

void DisplayAltMesa ( int punto )

Funcion que despliega el sub-menu Altura de la mesa


Parameters

4.5.2.3

void DisplayCalibrar ( )

Funcion que despliega el menu Calibrar


Parameters

4.5.2.4

void DisplayClear ( )

Funcion borra todos los caracteres en el display


Parameters

4.5.2.5

void DisplayFresado ( )

Funcion que despliega el menu Fresar


Parameters

4.5.2.6

void DisplayHoming ( )

Funcion que despliega el menu Homing

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.5 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/Display.h File Reference
Parameters

4.5.2.7

void DisplayImprimiendo ( )

Funcion que despliega el mensaje imprimiendo..


Parameters

4.5.2.8

void DisplayImprimir ( )

Funcion que despliega el menu Imprimir


Parameters

4.5.2.9

void DisplayManual ( )

Funcion que despliega el menu Movimiento manual


Parameters

4.5.2.10

void DisplayMessage ( char message )

Funcion despliega un mensaje


Parameters

4.5.2.11

void DisplaymmXpaso ( )

Funcion que despliega el sub-menu mm por paso


Parameters

4.5.2.12

void DisplaymmXpasoMed ( int eje, float med )

Funcion que despliega parte del sub-menu mm por paso


Parameters
eje

que eje se esta calibrando

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

35

36

File Documentation
med

4.5.2.13

distancia que midio

void DisplaymmXpasoObj ( int eje, float dist )

Funcion que despliega parte del sub-menu mm por paso


Parameters
eje
dist

4.5.2.14

que eje se esta calibrando


distancia que se debe avanzar

void DisplayMovX ( char avance )

Funcion que despliega el sub-menu Movimiento manual en el Eje X


Parameters

4.5.2.15

void DisplayMovY ( char avance )

Funcion que despliega el sub-menu Movimiento manual en el Eje Y


Parameters

4.5.2.16

void DisplayMovZ ( char avance )

Funcion que despliega el sub-menu Movimiento manual en el Eje Z


Parameters

4.5.2.17

void DisplayOffset ( )

Funcion que despliega el sub-menu Offset


Parameters

4.5.2.18

void DisplaySalir ( )

Funcion que despliega el sub-menu para salir


Parameters

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.5 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/Display.h File Reference
4.5.2.19

void InicializarDisplay ( )

...Funciones del modulo Funcion inicializa el display

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

37

38

File Documentation

Parameters

4.5.2.20

int recibir ( )

Funcion para sensar los botones


Parameters

4.5.2.21

void RefreshDisplay ( float temp, float PosX, float PosY, float PosZ )

Funcion que despliega informacion del estado de la maquina


Parameters

4.6

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/ejecutador.h File Reference

#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

4.6 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/ejecutador.h File Reference

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

unsigned int cantidadPeriodosMCLKinches ( float velocidadINCHESxMIN )

cantidadPeriodosMCLKinches(float velocidadINCHESxMIN): para el caso en el que se trabaje en inches, pasa las


velocidades a su equivalente en cantidad de periodos de MCLK.
Parameters
float

velocidadINCHESxMIN: velocidad en inches x minuto.

Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.

4.6.1.2

unsigned int cantidadPeriodosMCLKinchesE ( float velocidadINCHESxMIN )

cantidadPeriodosMCLKinchesE(float velocidadINCHESxMIN): para el caso en el que se trabaje en inches en E,


pasa las velocidades a su equivalente en cantidad de periodos de MCLK.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

40

File Documentation

Parameters
float

velocidadINCHESxMIN: velocidad en inches x minuto.

Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.

4.6.1.3

unsigned int cantidadPeriodosMCLKmm ( float velocidadMMxMIN )

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

velocidadMMxMIN: velocidad en mm x minuto.

Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.

4.6.1.4

unsigned int cantidadPeriodosMCLKmmE ( float velocidadMMxMIN )

cantidadPeriodosMCLKEmm(float velocidadMMxMIN): para el caso en el que se trabaje en mm en E, pasa las


velocidades a su equivalente en cantidad de periodos de MCLK.
Parameters
float

velocidadMMxMIN: velocidad en mm x minuto.

Returns
int : cantidad de periodos de master clock que equivalen a la velocidad.

4.6.1.5 error controlEntradaE ( float posE, int flagE )


controlEntradaE(): Se encargar de ver que la entradas de posicion (E) sea adecuada, para luego si procesarla.
Parameters
float posE: posicion E, puede ser relativa (con signo) o absoluta.
int flagE: bandera de posicion E nueva.
Returns
error: usado para abandonar la ejecucion de la accion y no llegar albajo nivel

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.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.6 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/ejecutador.h File Reference

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

void controlEntradaVEL ( float velAbsoluta, int flagF )

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
:

4.6.1.9 error controlEntradaZ ( float posEJE, int flagEJE )


controlEntradaZ(): Se encargar de ver que la entradas de posicion (Z) sea adecuada, para luego si procesarla.
Parameters
float posZ: posicion Z, puede ser relativa (con signo) o absoluta.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

42

File Documentation
int flagZ: bandera de posicion Z nueva.

Returns
error: usado para abandonar

4.6.1.10

unsigned long int distanciaEinchesAPasos ( float distanciaINCHES )

distanciaEinchesAPasos(float distanciaINCHES): para el caso en el que se trabaje en pulgadas en E, pasa las


distancias a su equivalente en numero de pasos
Parameters
float

distanciaINCHES: distancias en pulgadas.

Returns
int : numero de pasos que equivalen a dicha distancia.

4.6.1.11

unsigned long int distanciaEmmAPasos ( float distanciaMM )

distanciaEmmAPasos(float distanciaMM): para el caso en el que se trabaje en mm en E, pasa las distancias a su


equivalente en numero de pasos
Parameters
float

distanciaMM: distancias en mm.

Returns
int : numero de pasos que equivalen a dicha distancia.

4.6.1.12

long int distanciainchesAPasos ( float distanciaINCHES )

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

distanciaINCHES: distancias en pulgadas.

Returns
int : numero de pasos que equivalen a dicha distancia.

4.6.1.13

long int distanciammAPasos ( float distanciaMM )

distanciammAPasos(float distanciaMM): para el caso en el que se trabaje en mm, pasa las distancias a su equivalente en numero de pasos

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.6 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/ejecutador.h File Reference

43

Parameters
float

distanciaMM: distancias en mm.

Returns
int : numero de pasos que equivalen a dicha distancia.

4.6.1.14 error ejecutar ( comando cmd )


ejecutar: funcion para inicilizar las estructuras en cada trabajo.
Parameters
comando

cmd: estructura con los datos brindados desde el interprete.

Returns
error: para decirle al main como va

4.6.1.15

void inicializarEjecutador ( )

inicializarEjecutador(): funcion para inicilizar las estructuras en cada trabajo.


Parameters

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

44

File Documentation

Returns
:

4.6.1.18

float pasosAdistanciaINCHES ( long int cantidadPasos )

pasosAdistanciaINCHES(int cantidadPasos): para el caso en el que se trabaje en pulgadas, pasa el numero de


pasos a su equivalente en distancia.
Parameters
int

cantidadPasos: numero de pasos.

Returns
float: distancia en inches que equivale a dicho numero de pasos .

4.6.1.19

float pasosAdistanciaINCHESE ( long int cantidadPasos )

pasosAdistanciaINCHESE(int cantidadPasos): para el caso en el que se trabaje en pulgadas en E, pasa el numero


de pasos a su equivalente en distancia.
Parameters
int

cantidadPasos: numero de pasos.

Returns
float: distancia en inches que equivale a dicho numero de pasos .

4.6.1.20

float pasosAdistanciaMM ( long int cantidadPasos )

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

cantidadPasos: numero de pasos.

Returns
float: distancia en mm que equivale a dicho numero de pasos .

4.6.1.21

float pasosAdistanciaMME ( long int cantidadPasos )

pasosAdistanciaMME(int cantidadPasos): para el caso en el que se trabaje en mm en E, pasa el numero de pasos


a su equivalente en distancia.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.6 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/ejecutador.h File Reference

45

Parameters
int

cantidadPasos: numero de pasos.

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.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.6 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/ejecutador.h File Reference

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.

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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

eje: para seleccionar el eje.

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

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.7 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/errores.h File Reference

49

Returns
float: velocidad eje E(sistema relativo e mm).

float velXejeABSinches ( int eje )

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

eje: para seleccionar el eje.

Returns
float: velocidad (sistema absoluto e inches).

float velXejeABSmm ( int eje )

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

eje: para seleccionar el eje.

Returns
float: velocidad (sistema absoluto y mm).

float velXejeREL ( int eje )

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

eje: para seleccionar el eje.

Returns
float: velocidad (sistema relativo). Se despreocupa del sistema de unidades, xq se tachan.

4.7

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/errores.h File Reference

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

Macro Definition Documentation

4.7.1.1

#define TAM 8

Definition at line 25 of file errores.h.

4.7.2

Typedef Documentation

4.7.2.1

typedef enum eventos error

Definition at line 57 of file errores.h.

4.7.3

Enumeration Type Documentation

4.7.3.1

enum eventos

...Definicion de Variables Definicion de eventos posibles.


Enumerator
ok El movimiento es realizable
finCarreaX0 El fin de carrera 1 del eje X, esta presionado
finCarreaX1 El fin de carrera 2 del eje X, esta presionado
finCarreaY0 El fin de carrera 1 del eje Y, esta presionado
finCarreaY1 El fin de carrera 2 del eje Y, esta presionado
finCarreaZ0 El fin de carrera 1 del eje Z, esta presionado
finCarreaZ1 El fin de carrera 2 del eje Z, esta presionado
salida_por_timeout_resetear Timeout del sistema, indica que se debe resetear
salidaxFueraRango Movimiento requerido, sale del rango excursion en alguno de los ejes
setPointTempExtInvalid Temperatura seteada en extrusor es invalida
setPointHeatedBedTempInvalid Temperatura seteada en heated-bed es invalida
velInvalida
emergencia Problema no previsto, que detecta el usuario y requiere un cese de todas las operaciones
Definition at line 34 of file errores.h.
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.8 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/interprete.h File Reference

4.8

51

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/interprete.h File Reference

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

Macro Definition Documentation

4.8.1.1

#define MAX_speed 9600

Definition at line 23 of file interprete.h.

4.8.2

Typedef Documentation

4.8.2.1

typedef enum acciones acciones_t

Definition at line 54 of file interprete.h.

4.8.3

Enumeration Type Documentation

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

Definition at line 30 of file interprete.h.

4.8.4

Function Documentation

4.8.4.1

void ini_comando ( )

ini_comando(): Inicializa la estructura que guarda los parametros del comando


4.8.4.2 comando interpretar ( char code[ ] )
interpretar(char code): Pre interpreta el comando de G code o M code
Parameters
char

code: Evento a agregar a la cola

Returns
comando: Devuelve un tipo comando, que es una estrucutua del hecha a partir del code y mas facil de
interpretar.

4.9

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/layerHW.h File Reference

#include
#include
#include
#include
#include
#include

"Arduino.h"
<stdbool.h>
<util/delay_basic.h>
<iom2560.h>
<avr/interrupt.h>
<avr/wdt.h>

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.9 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/layerHW.h File Reference

53

Macros

#define F_CPU 16000000


#define Contador_min 2000
#define Contador_max 10000
#define FrecCont_divider 7
#define min_t 4
#define CLK_X PORTA7
#define SENTIDO_X PORTA6
#define ENABLE_X PORTA5
#define RESET_X PORTA4
#define CLK_Y PORTA3
#define SENTIDO_Y PORTA2
#define ENABLE_Y PORTA1
#define RESET_Y PORTA0
#define CLK_Z PORTC4
#define SENTIDO_Z PORTC5
#define ENABLE_Z PORTC6
#define RESET_Z PORTC7
#define CLK_E PORTC0
#define SENTIDO_E PORTC1
#define ENABLE_E PORTC2
#define RESET_E PORTC3
#define SW_X0 0x20
#define SW_X1 0x10
#define SW_Y0 0x08
#define SW_Y1 0x04
#define SW_Z0 0x02
#define SW_Z1 0x01
#define BOTON_EMERGENCIA PINB0
#define ini_systemClock() {CLKPR = 0x00;}
#define moveX() {PORTA &= (1<<CLK_X); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTA |=(1<<CLK_X);}
Macro para dar un paso en el motor X.

#define moveY() {PORTA &= (1<<CLK_Y); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTA |=(1<<CLK_Y);}


Macro para dar un paso en el motor Y.

#define moveZ() {PORTC&= (1<<CLK_Z); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTC


|=(1<<CLK_Z);}
Macro para dar un paso en el motor Z.

#define moveE() {PORTC&= (1<<CLK_E); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTC


|=(1<<CLK_E);}
Macro para dar un paso en el motor E.

#define deshabMotorX() {PORTA &= (1<<ENABLE_X);}


#define deshabMotorY() {PORTA &= (1<<ENABLE_Y);}
#define deshabMotorZ() {PORTC &= (1<<ENABLE_Z);}
#define deshabMotorE() {PORTC &= (1<<ENABLE_E);}
#define MotorX_reset() { /PORTA |= (1 << ENABLE_X);/ PORTA &= (1 << RESET_X); _delay_loop_1(7); PORTA |= (1 << RESET_X);}
#define MotorY_reset() { /PORTA |= (1 << ENABLE_Y);/ PORTA &= (1 << RESET_Y); _delay_loop_1(7); PORTA |= (1 << RESET_Y);}
#define MotorZ_reset() { /PORTC |= (1 << ENABLE_Z);/ PORTC &= (1 << RESET_Z); _delay_loop_1(7); PORTC |= (1 << RESET_Z);}
#define MotorE_reset() { /PORTC |= (1 << ENABLE_E);/ PORTC &= (1 << RESET_E); _delay_loop_1(7); PORTC |= (1 << RESET_E);}

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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.

unsigned char flagEmer


Variable extern unsigned char flagEmer.

unsigned char flagTimeout


Variable extern unsigned char flagTimeout.

unsigned long int Pmax


Variable extern unsigned long int Pmax.

unsigned int Cmin


Variable extern unsigned int Cmin.

unsigned long int Ninst


Variable extern unsigned long int Ninst.

unsigned int data_OCR3A


Variable extern unsigned int data_OCR3A.

unsigned int flagReconfTimer


Variable extern unsigned int flagReconfTimer.
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.9 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/layerHW.h File Reference

4.9.1

Macro Definition Documentation

4.9.1.1

#define BOTON_EMERGENCIA PINB0

Definition at line 212 of file layerHW.h.


4.9.1.2

#define CLK_E PORTC0

Definition at line 143 of file layerHW.h.


4.9.1.3

#define CLK_X PORTA7

Definition at line 59 of file layerHW.h.


4.9.1.4

#define CLK_Y PORTA3

Definition at line 87 of file layerHW.h.


4.9.1.5

#define CLK_Z PORTC4

Definition at line 115 of file layerHW.h.


4.9.1.6

#define Contador_max 10000

Definition at line 35 of file layerHW.h.


4.9.1.7

#define Contador_min 2000

Definition at line 33 of file layerHW.h.


4.9.1.8

#define deshabMotorE( ) {PORTC &= (1<<ENABLE_E);}

Definition at line 406 of file layerHW.h.


4.9.1.9

#define deshabMotorX( ) {PORTA &= (1<<ENABLE_X);}

Definition at line 385 of file layerHW.h.


4.9.1.10

#define deshabMotorY( ) {PORTA &= (1<<ENABLE_Y);}

Definition at line 392 of file layerHW.h.


4.9.1.11

#define deshabMotorZ( ) {PORTC &= (1<<ENABLE_Z);}

Definition at line 399 of file layerHW.h.


4.9.1.12

#define ENABLE_E PORTC2

Definition at line 155 of file layerHW.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

55

56

File Documentation

4.9.1.13

#define ENABLE_X PORTA5

Definition at line 71 of file layerHW.h.


4.9.1.14

#define ENABLE_Y PORTA1

Definition at line 99 of file layerHW.h.


4.9.1.15

#define ENABLE_Z PORTC6

Definition at line 127 of file layerHW.h.


4.9.1.16

#define F_CPU 16000000

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

Definition at line 37 of file layerHW.h.


4.9.1.18

#define ini_systemClock( ) {CLKPR = 0x00;}

...Pseudo-Funciones del modulo para menejo de Puertos de Salida


Definition at line 346 of file layerHW.h.
4.9.1.19

#define min_t 4

Definition at line 45 of file layerHW.h.


4.9.1.20

#define MotorE_reset( ) { /PORTC |= (1 << ENABLE_E);/ PORTC &= (1 << RESET_E); _delay_loop_1(7);
PORTC |= (1 << RESET_E);}

Definition at line 434 of file layerHW.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.9 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/layerHW.h File Reference
4.9.1.21

57

#define MotorX_reset( ) { /PORTA |= (1 << ENABLE_X);/ PORTA &= (1 << RESET_X); _delay_loop_1(7);
PORTA |= (1 << RESET_X);}

Definition at line 413 of file layerHW.h.

4.9.1.22

#define MotorY_reset( ) { /PORTA |= (1 << ENABLE_Y);/ PORTA &= (1 << RESET_Y); _delay_loop_1(7);
PORTA |= (1 << RESET_Y);}

Definition at line 420 of file layerHW.h.

4.9.1.23

#define MotorZ_reset( ) { /PORTC |= (1 << ENABLE_Z);/ PORTC &= (1 << RESET_Z); _delay_loop_1(7);
PORTC |= (1 << RESET_Z);}

Definition at line 427 of file layerHW.h.

4.9.1.24

#define moveE(

) {PORTC&= (1<<CLK_E); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTC

|=(1<<CLK_E);}

Macro para dar un paso en el motor E.


Macro encargado de ejecutar un paso en el motor E
Definition at line 378 of file layerHW.h.

4.9.1.25

#define moveX(

) {PORTA &= (1<<CLK_X); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTA

|=(1<<CLK_X);}

Macro para dar un paso en el motor X.


Macro encargado de ejecutar un paso en el motor X
Definition at line 357 of file layerHW.h.

4.9.1.26

#define moveY(

) {PORTA &= (1<<CLK_Y); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTA

|=(1<<CLK_Y);}

Macro para dar un paso en el motor Y.


Macro encargado de ejecutar un paso en el motor Y
Definition at line 364 of file layerHW.h.

4.9.1.27

#define moveZ(

) {PORTC&= (1<<CLK_Z); _delay_loop_1(min_t);/__delay_cycles(min_t)/ PORTC

|=(1<<CLK_Z);}

Macro para dar un paso en el motor Z.


Macro encargado de ejecutar un paso en el motor Z
Definition at line 371 of file layerHW.h.

4.9.1.28

#define RESET_E PORTC3

Definition at line 161 of file layerHW.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

58
4.9.1.29

File Documentation
#define RESET_X PORTA4

Definition at line 77 of file layerHW.h.

4.9.1.30

#define RESET_Y PORTA0

Definition at line 105 of file layerHW.h.

4.9.1.31

#define RESET_Z PORTC7

Definition at line 133 of file layerHW.h.

4.9.1.32

#define SENTIDO_E PORTC1

Definition at line 149 of file layerHW.h.

4.9.1.33

#define SENTIDO_X PORTA6

Definition at line 65 of file layerHW.h.

4.9.1.34

#define SENTIDO_Y PORTA2

Definition at line 93 of file layerHW.h.

4.9.1.35

#define SENTIDO_Z PORTC5

Definition at line 121 of file layerHW.h.

4.9.1.36

#define SW_X0 0x20

Definition at line 171 of file layerHW.h.

4.9.1.37

#define SW_X1 0x10

Definition at line 178 of file layerHW.h.

4.9.1.38

#define SW_Y0 0x08

Definition at line 184 of file layerHW.h.

4.9.1.39

#define SW_Y1 0x04

Definition at line 190 of file layerHW.h.

4.9.1.40

#define SW_Z0 0x02

Definition at line 196 of file layerHW.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.9 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/layerHW.h File Reference
4.9.1.41

59

#define SW_Z1 0x01

Definition at line 202 of file layerHW.h.

4.9.2

Typedef Documentation

4.9.2.1

typedef enum motor_i motores

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

Enumeration Type Documentation

4.9.3.1

enum motor_i

Enumeracion que hace referencia a cada uno de los motores.


...Definicion de Variables
Enumerator
motorX Motor X
motorY Motor Y
motorZ Motor Z
motorE Motor E
Definition at line 225 of file layerHW.h.

4.9.4

Function Documentation

4.9.4.1

void configDriver ( motores motor, bool sentido )

Funcion para configurar SENTIDO apropiadamente.


Parameters
motores
int

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

void configTimerE ( unsigned int cantPulsosMclk )

Funcion que realiza la configuracion de un timer virtual E, seteando la cuenta y habilitando la cuenta
Parameters

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

60

File Documentation
int

4.9.4.4

cantPulsosMck: Cantidad de pulsos en unidades de Master clock para mover un paso

void configTimerX ( unsigned int cantPulsosMclk )

Funcion que realiza la configuracion de un timer virtual X, seteando la cuenta y habilitando la cuenta
Parameters
int

4.9.4.5

cantPulsosMck: Cantidad de pulsos en unidades de Master clock para mover un paso

void configTimerY ( unsigned int cantPulsosMclk )

Funcion que realiza la configuracion de un timer virtual Y, seteando la cuenta y habilitando la cuenta
Parameters
int

4.9.4.6

cantPulsosMck: Cantidad de pulsos en unidades de Master clock para mover un paso

void configTimerZ ( unsigned int cantPulsosMclk )

Funcion que realiza la configuracion de un timer virtual Z, seteando la cuenta y habilitando la cuenta
Parameters
int

4.9.4.7

cantPulsosMck: Cantidad de pulsos en unidades de Master clock para mover un paso

void deshabTimerE ( )

Deshabilita la cuenta del Timer Virtual E

4.9.4.8

void deshabTimerX ( )

Deshabilita la cuenta del Timer Virtual X

4.9.4.9

void deshabTimerY ( )

Deshabilita la cuenta del Timer Virtual Y

4.9.4.10

void deshabTimerZ ( )

Deshabilita la cuenta del Timer Virtual Z

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

4.9 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/layerHW.h File Reference
4.9.5.1

61

unsigned int Cmin

Variable extern unsigned int Cmin.


Corresponde a la variable donde se registra la cantidad de pulsos de Master Clock del motor con mayor cadencia
de pasos. Se utiliza en la interrupcin del Master Clock para determinar la condicin de frenado.
4.9.5.2

unsigned int data_OCR3A

Variable extern unsigned int data_OCR3A.


Corresponde a la variable donde se realizan las cuentas para ajustar el contador del Timer 3 que genera el Master
Clock, hasta llegar al rgimen y para desacelerar. Se utiliza para programar el registro OCR3A en el Round-Robin.

4.9.5.3

bool flagE

Variable booleana global flagE.


Corresponde a la bandera_E a ser utilizada en el polling de la funcion stepper
4.9.5.4

unsigned char flagEmer

Variable extern unsigned char flagEmer.


Corresponde a la bandera de emergencia a ser utilizada en el polling de la funcion stepper
4.9.5.5

unsigned int flagReconfTimer

Variable extern unsigned int flagReconfTimer.


Corresponde a la bandera que indica cuando se debe reconfigurar el Timer 3 con la nueva cuenta en data_OCR3A.
Se atiende en el bucle del Round-Robin .
4.9.5.6

unsigned char flagTimeout

Variable extern unsigned char flagTimeout.


Corresponde a la bandera de timeout manejada por el WATCHDOG
4.9.5.7

bool flagX

Variable booleana global flagX.


Corresponde a la bandera_X a ser utilizada en el polling de la funcion stepper
4.9.5.8

bool flagY

Variable booleana global flagY.


Corresponde a la bandera_Y a ser utilizada en el polling de la funcion stepper
4.9.5.9

bool flagZ

Variable booleana global flagZ.


Corresponde a la bandera_Z a ser utilizada en el polling de la funcion stepper
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

62

File Documentation

4.9.5.10

unsigned long int Ninst

Variable extern unsigned long int Ninst.


Corresponde a la variable donde se cuenta la cantidad de interrupciones del Master Clock mientras se acelera. Se
utiliza en la interrupcin del Master Clock para determinar la condicin de frenado.

4.9.5.11

unsigned long int Pmax

Variable extern unsigned long int Pmax.


Corresponde a la variable donde se registra la maxima variacin de cantidad de pasos entre los motores del
posicionador y extrusor. Se utiliza en la interrupcin del Master Clock para determinar la condicin de frenado.

4.10

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/Main_imprimiendo.h File Reference

#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 ( )

LeoGcode(): Funcion lee un g-code.


Parameters

Returns
:

4.10.1.2

void MainImprimiendo ( void )

Proyecto Modular 3D Main imprimiendo


El objetivo de este modulo es el de inicializar las variables necesarias e invocar las funciones que sean necesarias
para la puesta en marcha de la impresion de un modelo
Main_imprimiendo.h
Version
1.0

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.11 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/MovimientoManual.h File Reference

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/MovimientoManual.h File Reference

#include "ejecutador.h"
#include "Display.h"
#include <LiquidCrystal.h>

Functions
void MovimientoManual (int option)

4.11.1

Function Documentation

4.11.1.1

void MovimientoManual ( int option )

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

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/setup.h File Reference

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

Macro Definition Documentation

4.12.1.1

#define DiamTornilloEmm 11

Definition at line 9 of file setup.h.

4.12.1.2

#define E_MAX_INCHES 10000

Definition at line 20 of file setup.h.

4.12.1.3

#define E_MAX_MM 10000

Definition at line 24 of file setup.h.

4.12.1.4

#define frecMCLK 8000

Definition at line 47 of file setup.h.

4.12.1.5

#define HILOSxPULGADA 12

Definition at line 11 of file setup.h.

4.12.1.6

#define K_EXT 1

Definition at line 10 of file setup.h.

4.12.1.7

#define MAX_TEMP_EXT 280

Definition at line 27 of file setup.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.12 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/setup.h File Reference
4.12.1.8

#define MAX_TEMP_HEATEDBED 80

Definition at line 28 of file setup.h.

4.12.1.9

#define PASOSxVUELTA 400

Definition at line 12 of file setup.h.

4.12.1.10

#define PULGADASaMILIMETROS 25.4

Definition at line 8 of file setup.h.

4.12.1.11

#define T_MCLK 1/frecMCLK

Definition at line 48 of file setup.h.

4.12.1.12

#define VELOCIDAD_MAXIMA_ABSOLUTA_INCHES 30

Definition at line 13 of file setup.h.

4.12.1.13

#define VELOCIDAD_MAXIMA_ABSOLUTA_INCHES_EXTRUYENDO_SIN_MOV 44

Definition at line 15 of file setup.h.

4.12.1.14

#define VELOCIDAD_MAXIMA_ABSOLUTA_MM 800

Definition at line 14 of file setup.h.

4.12.1.15

#define VELOCIDAD_MAXIMA_ABSOLUTA_MM_EXTRUYENDO_SIN_MOV 112

Definition at line 16 of file setup.h.

4.12.1.16

#define X_MAX_INCHES 15

Definition at line 17 of file setup.h.

4.12.1.17

#define X_MAX_MM 350

Definition at line 21 of file setup.h.

4.12.1.18

#define Y_MAX_INCHES 15

Definition at line 18 of file setup.h.

4.12.1.19

#define Y_MAX_MM 300

Definition at line 22 of file setup.h.


Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

65

66

File Documentation

4.12.1.20

#define Z_MAX_INCHES 15

Definition at line 19 of file setup.h.


4.12.1.21

#define Z_MAX_MM 300

Definition at line 23 of file setup.h.

4.13

C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/stepper.h File Reference

#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

Macro Definition Documentation

4.13.1.1

#define LIMITE 3

Proyecto CtrlMotors3D Modulo Stepper


Funcion que realiza el movimiento coordinado de 4 motores stepper y retorna un reporte de los posibles errores
ocurridos en el proceso
stepper.h
Author
Guillermo Airaldi guillermo.airaldi@gmail.com
Guillermo Antunez antunezguillermo7@gmail.com
Jose Basualdo josebasualdo@gmail.com
Version
2.0
Date
3 septiembre 2014 ...Modulos basicos ...Modulos proyecto CrtlMotors3D ...Constantes
Definition at line 39 of file stepper.h.
Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

4.13 C:/Documents and Settings/MODULAR3D/Mis documentos/Dropbox/Proyecto


modular3D/Software/Anexo codigo/Codigo/stepper.h File Reference

4.13.2

Function Documentation

4.13.2.1

void home_all_axis ( )

Funcin que realiza el homming mecnico de los ejes


4.13.2.2 error stepper ( )
...Funciones del modulo Funcion que realiza el movimiento en los motores paso a paso
Parameters
error

Devuelve un puntero a variable tipo error

Generated on Thu Apr 23 2015 20:16:58 for My Project by Doxygen

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].

B.1. Descripcion del sistema


El sistema mec
anico a utilizar se compone de un motor paso a paso que sera
el encargado de proveer el torque necesario para mover una cierta carga. Para
convertir el movimiento rotatorio en un movimiento lineal en este sistema se hace
necesario un tornillo, conocido como tornillo de potencia, ya que sera el encargado
de transmitir la potencia del motor. La u
nion entre el motor y el tornillo se hace
mediante un acople que para los calculos se supone tiene eficiencia igual a la unidad.
El otro extremo del tornillo se fija mediante el uso de un ruleman al perfil de
aluminio. De esta forma se consigue que el tornillo pueda girar manteniendose en
posici
on horizontal o vertical seg
un sea el caso. La carga se mueve acoplada a un
collar de empuje que se mueve sobre el tornillo. En la Figura B.1 se puede ver una
representaci
on simplificada del sistema.

Figura B.1: Esquema del sistema, imagen tomada de [90].

Para la selecci
on del motor de paso a utilizar se hace necesario determinar:

Apendice B. Seleccion de los motores paso a paso

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.2. Calculos teoricos referentes a la seleccion del motor


En esta secci
on se presentan las herramientas basicas para poder realizar una
aproximacion del torque requerido, el angulo de paso y la potencia. Se comienza
por listar algunos par
ametros necesarios para el calculo del torque.
p: Es la distancia axial entre roscas adyacentes.
N e: Es el n
umero de helices que posee tornillo.
L: Se denomina avance y es la distancia axial que avanza la rosca en una
vuelta completa. Se calcula como el producto entre N e y p.
: Es el
angulo que forma una recta tangente a la helice del tornillo con una
recta perteneciente al plano perpendicular a la direccion axial.
244

B.2. Calculos teoricos referentes a la seleccion del motor


: Es el
angulo que forma la superficie de la rosca con un plano perpendicular
al eje.
c : Es el coeficiente de friccion sobre la superficie del tornillo.
Dm: Es el di
ametro menor del tornillo.
rb: Es el radio principal del ruleman que va al extremo del eje.
b : Es el coeficiente de friccion del ruleman.
: Es la eficiencia del tornillo para convertir un movimiento rotatorio en uno
lineal. Se define como el trabajo sin rozamiento como el trabajo necesario
para hacer girar el tornillo con rozamiento.
En el sistema propuesto se tiene que el motor stepper realizara un trabajo Win
que deber
a poder hacer girar el tornillo, por lo que dicho trabajo aportara las
perdidas por la fricci
on interna del sistema y el trabajo que realiza el tornillo para
mover linealmente a la carga.

Win = Wout + Wroz

(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:

Wout = LFout = N epF = pF

(B.3)

Realizando el mismo calculo pero para el trabajo a lo largo de la rosca del


tornillo en una vuelta, estando el mismo cargado

Win = 2rFi n

(B.4)

Donde r es Dm divido entre dos. Por lo tanto, se deduce la siguiente expresion


donde el producto de r por Fi n no es nada mas que un torque que se corresponde
con el torque de la carga.
245

Apendice B. Seleccion de los motores paso a paso

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)

Donde N es la normal y W el peso de la carga.

F FR W sin() = 0

(B.7)

Donde F r es la fuerza de rozamiento en el tornillo

FR = c N

(B.8)

Se obtiene entonces que la fuerza efectiva sobre la carga vale

F = W (sin() + c cos())

(B.9)

Para estimar la eficiencia, se bas


o en los apuntes del curso de elementos de
maquinas de la Facultad de Ingeniera. En el mismo se llega a que la eficiencia se
puede determinar con el
angulo y mediante la siguiente expresion

= tan()

(cos() c tan())
(tan()cos() + c )

(B.10)

Donde se considera conocido y se puede obtener haciendo el desarrollo de


la helice hasta una distancia igual al avance del tornillo. En la Figura B.3 se puede
observar este desarrollo. Se deduce por trigonometra que el angulo de la helice se
puede determinar a partir de la siguiente expresion.
246

B.2. Calculos teoricos referentes a la seleccion del motor

tan() =

p
Dm

(B.11)

Figura B.3: Desarrollo de la rosca del tornillo para avance l, imagen tomada de [92].

Para obtener el torque requerido, se necesita plantear la segunda cardinal para


obtener los momentos en el sentido axial. Se tiene que se cumple la siguiente
ecuaci
on.

TT = TM TL TR TM = TT + TR + TL

(B.12)

Donde T r es un momento debido al rozamiento en el ruleman y que se calcula


como

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)

En el caso en que el tornillo yace completamente vertical, no se puede encontrar


una fuerza N b que se corresponda mediante el coeficiente de rozamiento dinamico
con la fuerza de rozamiento en el ruleman. Pero teniendo en cuenta los ordenes del
coeficiente de fricci
on, se desprecia este componente mas se considera un factor de
seguridad mayor al considerado en el caso horizontal.
Para tener una estimacion del torque requerido, esta por calcular TT , que es
la suma de los momentos de inercia correspondientes al tornillo mas la carga y el
rotor del motor, multiplicados por la aceleracion angular. Por lo tanto, se puede
escribir la siguiente expresion.

247

Apendice B. Seleccion de los motores paso a paso

TT = JT 0 = (Jtornillo + Jcarga + Jrotor ) 0

(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)

Para estimar la aceleraci


on angular se debe obtener una frecuencia de operacion, que ser
a la frecuencia del tren de pulsos que genero el driver del motor. Estos
pulsos determinaran el avance o retroceso de la carga.
Antes de continuar se presenta otra lista de paametros necesarios para el analisis a desarrollar.
L: Resoluci
on de los desplazamientos axiales, o sea, desplazamiento por
paso (por cada pulso).

: 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

B.2. Calculos teoricos referentes a la seleccion del motor

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.

De lo anterior se puede deducir que la velocidad lineal que desarrolla la carga


esta dada por la siguiente expresion.

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

Apendice B. Seleccion de los motores paso a paso


Por lo tanto, para estimar la aceleracion angular a partir de su velocidad angular, se calcula la raz
on entre la velocidad angular y el tiempo de aceleracion
considerado una porcentaje del llamado perodo de posicionamiento.

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)

Finalmente se obtiene una estimaci


on de la aceleracion angular por la siguiente
expresion

0 =

0,75
f =
f2
180t1
180 0,25Np

(B.23)

Con esta estimaci


on de la aceleracion angular, se puede ahora obtener una
primera estimaci
on del torque requerido y para cubrirse en seguridad se multiplica
esta primera aproximaci
on por un factor K que esta entre 2 y 2,5.
A partir de lo anterior se puede obtener tambien una estimacion de la potencia
que se necesita, por lo que se aplica el siguiente resultado teorico:P = TM , cabe
resaltar que esta todo determinado.
Este u
ltimo dato puede ser usado para saber si con la velocidad de giro angular
que se pretende no se esta sobrecargando el motor (demandando mayor potencia).

B.3. Resultados de la seleccion de los motores


En funci
on de los resultados hallados en la seccion B.2 se implementaron en
Matlab los scripts Calculo.m que realiza los calculos teoricos desarrollados, MasaEjeX.m que calcula la carga en el eje X, MasaEjeY.m que calcula la carga en
el eje Y, MasaEjeZ.m que calcula la carga en el eje Z. El script Main.m hace
uso de los anteriores para calcular una estimacion del torque en cada eje. Permite
elegir parametros para los c
alculos est
andares y que se corresponden al sistema o
si se desea pueden ser personalizados.
Para realizar la selecci
on de los motores se necesita conocer de ante mano en que
orden se encuentra la inercia del motor, por lo que se probo con un rango variado
250

B.3. Resultados de la seleccion de los motores

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

Apendice C. Gestion de tiempos


proyecto poder trabajar en las otras tareas en paralelo, para lograr la culminacion
general del proyecto en la fecha estipulada.
En el software se encontr
o la necesidad de realizar un agregado en el bajo nivel
de control de los motores, para suavizar arranques y detenciones.
A comienzos del mes de setiembre se logro tener el armado de todos los ejes,
mientras que la interconexi
on entre ellos y los testeos basicos se postergaron hacia
fines de dicho mes.
Asimismo en el transcurso de setiembre se resolvio realizar un pedido de prorroga de un mes, el cual se justific
o a partir de lo anteriormente expuesto. Junto con
esto se decidi
o dejar de lado la implementacion del fresado, para lo que hubiese
sido necesario una dedicaci
on mayor en el software y la electronica. A su vez para
tener pruebas m
as completas del software se implemento el simulador.
Luego de tener el posicionador, los primeros testeos demostraron la necesidad de cambiar el dise
no, con el fin de implementar los movimientos verticales
utilizando 2 tornillos. Para lo cual fue necesario adquirir los materiales requeridos.
Proximo a la fecha estipulada para la culminacion del proyecto acontecio un
imprevisto (rotura de un engranaje), lo que derivo en 2 semanas de postergacion
en la fecha final de entrega.

C.2. Dedicacion mensual


Mes
Dedicacion (hs/mes)
septiembre 2013
180
octubre 2013
180
noviembre 2013
135
diciembre 2013
135
enero 2014
165
febrero 2014
105
marzo 2014
150
abril 2014
150
mayo 2014
195
junio 2014
195
julio 2014
165
agosto 2014
240
septiembre 2014
285
octubre 2014
300
noviembre 2014
270
Total
2850
Tabla C.1: Dedicaci
on horaria mensual del equipo del proyecto.

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

posibles en dos envos. Estas


se realizaron en los meses de enero y marzo del 2014,
y son detalladas en las Tablas D.1 y D.2, donde se ven divididos por categoras.

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

Costo total (U$S)(con envo)


183.05
132.97
11.91
327.93

Costo total ($)(con envo)

Tabla D.1: Primeras compras efectuadas en el exterior.

Apendice D. Gestion de gastos


Item
Cabezales
Mecanica
Electronica
Subtotal

Costo total (U$S)(con envo)


0
247.32
36.56
283.88

Costo total ($)(con envo)

Tabla D.2: Segundas compras efectuadas en el exterior.

El sub-total de las compras realizadas en el exterior es de U$S 611.81.


Para elementos m
as cotidianos, como la tornillera entre otros, las compras

se realizaron en el mercado local. Estas


abarcaron los productos detallados en la
Tabla D.3.

Item
Cabezales
Mecanica
Electronica
Subtotal

Costo total (U$S)


71
71

Costo total ($)


207.4
6130
9167
15504.4

Tabla D.3: Compras efectuadas en el mercado local.

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.

Puesta a punto del modelo 3D


El primer paso antes de realizar una impresion es decidir que modelo se desea
realizar. El siguiente paso consiste en conseguirlo, puede ser que pueda hallarse
en un repositorio un modelo que cumpla con lo requerido, pero puede que no, en
especial si es algo muy particular. En caso de no encontrarse un modelo, el mismo
puede dise
narse en programas como:
Autocad.
Blender.

Apendice E. Manuales
Solidworks.
Sketch up.

Luego de obtener el dise


no en cierto formato se debe archivar el mismo con
formato .stl. Este formato es entendido por casi todos los generadores de G-code.
Autocad, Solidworks y Blender permiten exportar en dicho formato, pero otros
programas CAD puede que no lo permitan, por lo que debera realizarse un paso
extra para obtener el modelo con el formato de fichero mencionado.

Generar el Archivo G-code


A continuaci
on trataremos la obtencion del archivo .gcode a partir del fichero
.stl del modelo 3D, en un PC con sistema operativo Windows. Se discutira el uso
del software CURA 14.01. Para ello, se explicaran las diferentes configuraciones
necesarias a realizar para la generaci
on de un archivo adecuado a la maquina.
Cuando por primera vez se inicia CURA se solicita configurar la impresora
y se solicita escoger un modelo. Como la maquina desarrollada no es un modelo estandar comercial, el primer paso es seleccionar en el men
u de seleccion de
maquina other(Ex: RepRap, MakerBot) como se muestra en la Figura E.1.

Figura E.1: Men


u Configuration Wizard, seleccion maquina.

258

E.1. Manual de uso y mantenimiento

Figura E.2: Men


u Configuration Wizard, otra informacion de maquina.

Figura E.3: Men


u Configuration Wizard, informacion habitual de maquinas RepRap.

El siguiente paso es elegir la opcion Custom.. del men


u de Other Machine
259

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.

Figura E.4: Entorno grafico de CURA host software, en modo Full-Settings.

Los siguientes pasos consisten en verificar las configuraciones anteriores sobre


el volumen de trabajo disponible y realizar las restantes que incluyen velocidad y
temperatura. En la pesta
na Basic que se observa en la Figura E.5 se pueden configurar parametros para la calidad de impresion, el relleno, velocidad, temperatura,
soporte y filamento. Para el prototipo desarrollado se recomienda configurar como
se muestra en la Figura E.5.
260

E.1. Manual de uso y mantenimiento

Figura E.5: Men


u de configuraciones basica, Basic.

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

Figura E.6: Men


u de configuraciones avanzado, Advanced.

Luego se debe verificar en el men


u Machine Settings las dimensiones del volumen de impresi
on. Se accede al mismo a traves de la barra de herramientas, opcion
Machine. Un detalle importante es que en la pesta
na antes mencionada se debe
visualizar la selecci
on de nuestra configuracion, lo cual se verifica observando que
aparece seleccionado el nombre de nuestra maquina. En la Figura ?? se aprecia
como debe estar editado y el tipo de firmaware para el que se debe generar el
G-code. El offset del cabezal no se configura porque es resuelto en la etapa de
calibracion.
262

E.1. Manual de uso y mantenimiento

Figura E.7: Men


u de configuraciones de maquina, Machine settings.

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.

Figura E.8: Men


u de configuraciones de maquina, Machine settings.

Realizadas las anteriores configuraciones, se puede proceder a cargar el modelo


.stl y generar el archivo .gcode. Para ello, en la barra de herramientas se accede
263

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.

Transferir archivo a la maquina


En las siguientes lneas se describir
a el proceso para transferir el archivo .gcode
al prototipo para su posterior impresi
on. Como se menciono anteriormente, el archivo se transfiere mediante comunicacion inalambrica WIFI. Para ello, se requiere
que el dispositivo donde se encuentra alojado el archivo se conecte al servidor de
la maquina que se implement
o con la placa Raspberry Pi. El SSID de la red WIFI
del prototipo es DIRECT-modular3D printer a la cual el usuario debe conectarse.
En la Figura 6.3 se aprecia la red de la maquina desde un celular.
Para transferir el archivo desde un PC debe contar con un software de transferencia de archivos. Para el sistema operativo Windows se utilizo el programa
WinSCP. En el caso de telefonos con sistema operativo Android se utilizo AndFtp.

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.

Figura E.9: Men


u del display inicial, men
u de calibracion.

264

E.1. Manual de uso y mantenimiento


Para acceder al Homming se debe presionar ENTER (boton rojo del joystick )
y se visualizar
a el men
u que se aprecia en la Figura E.10. Con un nuevo ENTER
comienza a operar la m
aquina, moviendo sus tres ejes simultaneamente hasta alcanzar sus finales de carrera, para detectar su origen mecanico. El funcionamiento
del Homming puede consultarse por mas detalle en el Captulo 6.

Figura E.10: Opcion para realizar Homming.

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.

Figura E.11: Men


u de movimiento manual.

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

Figura E.12: Men


u de impresion.

E.1.2. Movimiento Manual


Las funcionalidades del movimiento manual son dos: una es puramente recreativa y la segunda es la de poder realizar la configuracion del offset de la maquina.
Para la segunda opci
on se debe acceder al men
u de calibracion y luego seleccionar
la opcion de offset, que despliega las opciones de movimiento manual que habilitan la configuraci
on del mismo. En la Seccion E.1.3 se explica como acceder a esta
opcion y en los pr
oximos p
arrafos de la presente seccion como hacer uso de esta
funcionalidad.
Se proporciona al usuario la posibilidad de escoger una variedad de desplazamientos que van desde 10cm hasta 0,1mm de resolucion en cada eje. El procedimiento para cada eje es an
alogo por lo que se explica el camino adecuado para un
solo eje, por ejemplo el eje Y. En la Figura E.13 podemos observar que la primera
opcion brindada es mover el eje X, pero si desplazamos el joystick haca la derecha
alcanzamos el eje Y.

Figura E.13: Men


u de movimiento manual, opcion eje X. A la derecha opcion eje Y e izquierda
SALIR.

Una vez alcanzada la opci


on para el eje Y, se presiona ENTER y se tendran
diferentes opciones para la distancia de los desplazamientos a realizar como se
menciono anteriormente. En la Figura E.14(a), se aprecia la eleccion para desplazar
10cm, en la Figura E.14(b) 1cm y en la Figura E.14(c) para 1mm. El movimiento
266

E.1. Manual de uso y mantenimiento


se desencadena moviendo, en la direccion vertical, la palanca del joystick y seg
un
si es hacia arriba o abajo se determina el sentido del desplazamiento.

(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.

Luego de alcanzada cierta posicion en el eje correspondiente se puede presionar


ENTER para indicar el offset del eje, o se puede buscar la opcion de SALIR para
retornar al men
u anterior.

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.

Figura E.15: Men


u inicial de offset.

Para calibrar la altura de la mesa se debe acceder a la opcion correspondiente


y presionar ENTER. El procedimiento implementado a nivel software consiste en
recorrer cuatro puntos e ir verificando que la distancia entre el puntero del cabezal
de impresion sea tal que pase una hoja de papel. Para ello, en cada punto se debe
regular la altura de la mesa de trabajo, provista de resortes y tornillos para cumplir
el objetivo. En las Figuras E.16(a) y E.16(b) se observa la apariencia del men
u
para el primer punto del recorrido P0 y P1 .
Para realizar el ajuste de la cantidad de filamento extruido por paso del motor
stepper el experimento que se debe realizar consiste en tomar una medida del
filamento que se desea extruir, por ejemplo 5cm, y luego realizar la extrusion
midiendo cuanto filamento de consumio respecto al origen de la marca anterior.
Luego se determina la raz
on entre ambas medidas. El factor hallado se utiliza para
determinar la constante para calibrar la cantidad de milmetros extruidos en un
incremento angular del motor. En general se repite el experimento cierta cantidad
de veces y se utiliza un valor medio de dicho factor. Para realizar dicha funcion se
implemento el men
u de la Figura E.17, al cual se debe acceder con ENTER.

Figura E.17: Men


u para calibraci
on de milmetros por paso en el motor del extrusor.

268

E.1. Manual de uso y mantenimiento

(a) Ajuste altura mesa de trabajo, opcion ir al primer punto.

(b) Ajuste altura mesa de trabajo, opcion ir al segundo punto.


Figura E.16: Men
u de calibracion, opciones de ajuste de altura de la mesa de trabajo.

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.

E.2. Manual de construccion


E.2.1. Introduccion
Uno de los objetivos del proyecto Modular 3D era tener redactado al final
del mismo un manual de construcci
on, donde se detallan los pasos para que el
armado del prototipo pueda ser replicado.

E.2.2. Piezas necesarias


Pieza con ruleman para los tornillos
Para fijar el tornillo a los perfiles cortos es necesario de una pieza como la
que se ve en la Figura E.19. Esta pieza se realiza con una planchuela de hierro de
10cm3cm y de 1cm de espesor, la que se debe ahuecar para que entre el ruleman,
y a la planchuela de hierro se le debe hacer perforaciones de 3mm de diametro en
las esquinas por los cuales pasaran los tornillos que la fijaran a los perfiles cortos.
270

E.2. Manual de construccion

Figura E.19: Pieza dise


nada para la colocacion del ruleman.

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.

Pieza para la tuerca


Esta pieza es necesaria para corregir la excentricidad de las varillas roscadas, y
es la que conecta las tuercas con las mesas. La pieza se muestra en la Figura E.20.
Se debe limar las caras de las tuercas hasta que entren en el perfil U, o sea que
debe poder deslizar por este pero sin quedar un espacio que introduzca un tiempo
muerto en los movimientos.

Figura E.20: Pieza para eliminar la excentricidad de los tornillos.

La tuerca entonces queda contenida entre el perfil en forma de U y de un


planchuela de aluminio de 4mm de espesor. La distancia entre estos dos elementos
se mantiene constante con separadores, los cuales son cilindros de aluminio.
Obs: Dependiendo de las dimensiones del perfil en forma de U puede resultar necesario limar sus
caras para que pueda pasar el tornillo .

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.

(b) Version YZ.

Figura E.21: Ejemples de los dos tipos de acoples.

En el primer caso, en el que se muestra en la Figura E.21(a), el acople es directo


y se debe permitir que el tornillo sea lo suficientemente largo para encontrarse a
corta distancia del eje del motor, esto se hace con una pieza como la que se ve en
la Figura E.22(a). En los otros dos casos el eje del motor se encuentra paralelo al
tornillo y hace falta de un engranaje en cada uno y una correa que los una. Estas
piezas se muestran en la Figura E.22(b).

(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

E.2. Manual de construccion

E.2.3. Armado de un eje generico


Debido al car
acter modular del prototipo se entiende existen varios puntos que
se deben explicar de forma general para todos los ejes y luego se detallara para
cada uno la informaci
on que sea pertinente, como pueden ser las medidas.

Figura E.23: Eje generico.

Un ejemplo de los ejes que forman el toda la estructura, se puede ver en la


Figura E.23, esta figura es u
til para fijar conceptos, donde se detallan los siguientes:
perfiles largos
perfiles cortos
largo interior y exterior
ancho interior y exterior

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

Figura E.24: Perforaciones a realizar en las esquinas.

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.

Placas para proteger las deformaciones


En la cara inferior de los rect
angulos de perfiles se le deben colocar laminas
de aluminio de Xcm de espesor, que cumplen con 2 funciones: primero unen los
perfiles que se encuentran en caras adyacentes del rectangulo, y segundo protege
que rectangulo se deforme.
Las dimensiones de las mismas dependeran de en que eje cumpla sus funciones y se detallaran en la siguiente seccion, y a las placas se le debe realizar las
perforaciones pertinentes para coincidir con las perforaciones vistas en la Figura
E.24.
Por ultimo comentar que las placas que protegen de deformaciones al rectangulo se pueden colocar de forma que una sola placa que cubra exactamente el area
exterior de los rect
angulos, o se pueden colocar 2 placas mas peque
nas que cubran
los lados cortos, esto se puede apreciar en la Figura E.26
274

E.2. Manual de construccion

(a) Una sola placa.

(b) Dos placas.

Figura E.26: Distintos usos de la placas para proteger las deformaciones.

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

E.2.4. Diferencias entre los distintos ejes


En la presente secci
on se detallar
an las dimensiones necesarias que faltan para
poder dar armado a cada uno de los ejes:

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.

(a) Medidas totales del eje X.

(b) Medidas de las perforaciones


en el eje X.

Figura E.27: Medidas eje X.

Y para proteger las deformaciones se deben colocar 2 placas iguales de 46cm


20cm, y 4mm de espesor, en los lados cortos.
Por u
ltimo la mesa que corre por el Eje X debe ser un rectangulo de aluminio
de 4mm de espesor, de 36cm en la direccion perpendicular al tornillo y 35cm en
la otra direcci
on. La mesa debe contar con la pieza para la tuerca puesta de forma
centrada y con los 4 cojinetes formando un cuadrilatero de forma coherente.
Obs: En ambos perfiles largos se deben realizar 6 perforaciones que atravesaran los perfiles por las 2
caras. Con estas perforaciones se colocar
an los Ejes Z.

276

E.2. Manual de construccion


Eje y
Para el Eje Y los materiales necesarios se detallan en la Tabla E.2.4 y las
medidas del mismo se muestran en la Figura E.28.
Material
Perfiles de aluminio de seccion 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 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.

(a) Medidas totales del eje Y.

(b) Medidas de las perforaciones


en el eje Y.

Figura E.28: Medidas eje Z.

Y para proteger las deformaciones se deben colocar 1 placa de 26cm 46cm,


y 4mm de espesor.
Por u
ltimo la mesa que corre por el Eje Y debe ser un rectangulo de aluminio
de 4mm de espesor, de 8cm en la direccion perpendicular al tornillo y 21cm en la
otra direcci
on. La mesa debe contar con la pieza para la tuerca puesta de forma
centrada y con los 4 cojinetes formando un cuadrilatero de forma coherente.

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.

(a) Medidas totales del eje Z.

(b) Medidas de las perforaciones


en el eje Z.

Figura E.29: Medidas eje Y.

Y para proteger las deformaciones se debe colocar 2 placas de 36cm 15cm, y


4mm de espesor.
La mesa que corre por el Eje Z debe ser un cuadrado de aluminio de 4mm de
espesor, de 22cm. La mesa debe contar con la pieza para la tuerca puesta de forma
centrada y con los 4 cojinetes formando un cuadrilatero de forma coherente.
Recordar que se deben construir 2 ejes Z.
Obs: en los perfiles cortos que quedaran colocados hacia abajo se deben realizar perforaciones que
coincidan con las perforaciones hechas en los perfiles largos del Eje X.

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

E.2. Manual de construccion

Figura E.30: Estructura completa armada.

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.6. Cabezal de impresion


Los detalles sobre el cabezal de impresion se omiten a causa de la variada
gama que se ofrece de los mismos con el objetivo de dejar con libertad de eleccion
al lector, se recomienda estudiar su colocacion en la mesa del Eje Y con el fin de
aprovechar al m
aximo la excursion.

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.

Figura E.31: Colocacion 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

E.3. Armado de driver

E.3. Armado de driver


Los materiales necesarios para el armado del driver se muestran en la Tabla
E.1. En la Figura E.32 se aprecia el PCB de la version 3.1 del driver, y en la Figura
E.33 se muestran donde se deben colocar los materiales en el driver.

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

Figura E.32: Diagrama PCB de la version 3.1 del driver.

Figura E.33: Layout de la version 3.1 del driver.

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/

[24] Where to find Models for 3d Printing. http://www.3dprintingera.com/


where-to-find-models-for-3d-printing/.
[25] Makerbot Thingverse. http://www.thingiverse.com/.
284

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_

[32] List of firmwarereprap. http://reprap.org/wiki/List_of_Firmware.


[33] Arduino Mega 1280 microcontroller board. http://arduino.cc/en/Main/
arduinoBoardMega. Accessed: 2014-11-12.
[34] Arduino Mega 2560 microcontroller board. http://arduino.cc/en/Main/
ArduinoBoardMega2560. Accessed: 2014-11-12.
[35] Arduino MEGA ADK microcontroller board. http://arduino.cc/en/
Main/ArduinoBoardMegaADK. Accessed: 2014-11-12.
[36] Arduino DUE microcontroller board. http://arduino.cc/en/Main/
arduinoBoardDue. Accessed: 2014-11-12.
[37] Arduino TRE. http://arduino.cc/en/Main/ArduinoBoardTret. Accessed: 2014-11-12.
[38] BegleBone Black development platform. http://beagleboard.org/black.
Accessed: 2014-11-12.
[39] WHAT IS A RASPBERRY PI?. http://www.raspberrypi.org/help/
what-is-a-raspberry-pi/. Accessed: 2014-11-12.
[40] J. Kridner, Introduction to 3D printing with BeagleBone Black, BeagleBoard.org blog, vol. 10, no. 2, p. 5, 2013.
[41] Pi print run your 3d printer with only a raspberry pi. https://github.
com/iandouglas96/piPrint. Accessed: 2014-11-12.
[42] DC
motor
powered
RAPY
3D
printer
made
in
Korea.
http://www.3ders.org/articles/
20140116-dc-motor-powered-rapy-3d-printer-made-in-korea.html.
Accessed: 2014-10-15.
285

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

5.1. Caractersticas principales de la placa computadora Raspberry Pi.


5.2. Caractersticas principales de la placa microcontroladora Arduino
MEGA ADK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3. Entradas del integrado de control (L297 ) del driver de los motores
PAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4. Salidas generadas por el integrado de control (L297) del driver de
los motores PAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5. Entradas del CI L298. . . . . . . . . . . . . . . . . . . . . . . . . .
5.6. Salidas del CI L298. . . . . . . . . . . . . . . . . . . . . . . . . . .

47
49
51
51
53
53

6.1. Datos configurados para el servidor de DHCP. . . . . . . . . . . . . 83


6.2. Datos configurados para el punto de acceso. . . . . . . . . . . . . . 83
6.3. Limitaciones de tiempos impuestas por el integrado de control (L297 )
de los drivers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.4. Resumen de Macros en AVR IAR y equivalencia en Arduino IDE . 96
6.5. Campos en la estructura de datos comando . . . . . . . . . . . . 109
6.6. Instrucciones de tipo G-code que son interpretadas y cuyas correspondientes acciones han sido implementadas para su correcta ejecuci
on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.7. Instrucciones de configuracion (tipo M-code). . . . . . . . . . . . . 121
7.1. Par
ametros caractersticos del experimento n
umero 1. . . . . . . .
7.2. Medida de distancias realizadas con el extensiometro para cada punto intermedio del recorrido. . . . . . . . . . . . . . . . . . . . . . .
7.3. Posici
on absoluta en pasos para cada punto del recorrido de prueba.
7.4. Valores medios, desviacion estandar, rango y repetibilidad para cada
punto Xk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5. Medida de distancias realizadas con el extensiometro para cada punto intermedio del recorrido en el eje Y. . . . . . . . . . . . . . . . .
7.6. Valores medios, desviacion estandar, rango y repetibilidad para cada
punto Yk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

B.1. Resultados de estimaci


on torque para cada grado de libertad, utilizando un factor de cobertura K = 2. . . . . . . . . . . . . . . . . . 251
C.1. Dedicaci
on horaria mensual del equipo del proyecto. . . . . . . . . 254
D.1. Primeras compras efectuadas en el exterior. . . . . . . . . . . . . . 255
D.2. Segundas compras efectuadas en el exterior. . . . . . . . . . . . . . 256
D.3. Compras efectuadas en el mercado local. . . . . . . . . . . . . . . . 256
E.1. Tabla de componentes para el armado del driver. . . . . . . . . . . 281

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

4.1. Perfil de uso com


un en router CNC. Imagen extrada de [50].
4.2. Primer dise
no. . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3. Paso de un tornillo. Imagen modificada de [51]. . . . . . . . .
4.5. Cabezal de extrusi
on adquirido. . . . . . . . . . . . . . . . . .
4.4. Medidas reales de los ejes (cm). . . . . . . . . . . . . . . . . .
4.6. Detalle de un eje. . . . . . . . . . . . . . . . . . . . . . . . . .
4.7. Pieza de invenci
on propia para la colocacion del tornillo. . . .
4.8. Diferencia de altura. . . . . . . . . . . . . . . . . . . . . . . .
4.9. Ubicaci
on de los motores. . . . . . . . . . . . . . . . . . . . .
4.10. Acoples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11. Placas que protegen del efecto paralelogramo. . . . . . . . . .
4.12. Collar de empuje. . . . . . . . . . . . . . . . . . . . . . . . . .
4.13. Soluci
on backlash. . . . . . . . . . . . . . . . . . . . . . . . . .
4.14. Dise
no CAD final. . . . . . . . . . . . . . . . . . . . . . . . .
4.15. Geometra usada para el calculo de la ubicacion del tensor. .

32
34
35
36
37
38
39
39
40
41
42
42
43
44
45

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

5.1. Diagrama de electr


onica. . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Soluci
on general de dise
no y marco del controlador de los motores
paso a paso del presente proyecto. . . . . . . . . . . . . . . . . . .
5.4. Diagrama de tiempos donde se muestran las fases al motor seg
un
la se
nal de reloj para el modo de medio paso. A y B bornes de una
bobina, C y D de la restante. . . . . . . . . . . . . . . . . . . . . .
5.3. Secuencias para los distintos modos de funcionamiento de un motor
bipolar. Figura tomada de [20]. . . . . . . . . . . . . . . . . . . . .
5.5. Puente H tpico. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6. Diagrama de bloques interno del CI L298. Figura tomada de [61]. .
5.7. Configuraci
on del regulador de voltaje. Figura tomada de [63]. . .
5.8. Diagrama de bloques interno del integrado LM317. Figura tomada
de [63]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9. Grafico donde se indica el reverse recovery time (trr ). . . . . . .
5.10. Diagrama de bloques generico del driver. Figura modificada de [64].
5.11. Diagrama de bloques interno del integrado L297. Figura tomada
de [20]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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 ). .
5.13. Esquem
atico del driver versi
on 0.0. Figura tomada de [65]. . . . .
5.14. Realimentaci
on para control de torque automatico. Figura tomada
de [62]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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]. . . . . . . . . . . . . . . . . . . . . . . . . .
296

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

8.1. Fotografa del prototipo fabricado, vista frontal. . . . . . . . . . . . 157


8.2. Fotografa del prototipo fabricado, vista posterior. . . . . . . . . . 158
B.1. Esquema del sistema, imagen tomada de [90]. . . . . . . . . . . . .
B.2. Ejemplo de curva Torque en funcion de las revoluciones por segundo,
imagen extrada de [91]. . . . . . . . . . . . . . . . . . . . . . . . .
B.3. Desarrollo de la rosca del tornillo para avance l, imagen tomada
de [92]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.4. El gr
afico en azul representa la evolucion de los pasos que da el
motor en cada perodo. . . . . . . . . . . . . . . . . . . . . . . . . .
B.5. Curva Par motor versus velocidad en pasos por segundo obtenida
de [93]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.1. Men
u Configuration Wizard, seleccion maquina. . . . . . . . . . . .
E.2. Men
u Configuration Wizard, otra informacion de maquina. . . . .
E.3. Men
u Configuration Wizard, informacion habitual de maquinas RepRap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.4. Entorno gr
afico de CURA host software, en modo Full-Settings. . .
E.5. Men
u de configuraciones basica, Basic. . . . . . . . . . . . . . . . .
E.6. Men
u de configuraciones avanzado, Advanced. . . . . . . . . . . . .
E.7. Men
u de configuraciones de maquina, Machine settings. . . . . . .
E.8. Men
u de configuraciones de maquina, Machine settings. . . . . . .
E.9. Men
u del display inicial, men
u de calibracion. . . . . . . . . . . . .

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/

Das könnte Ihnen auch gefallen