Impresora Delta de calibración automática, ejemplo Prism Mini

En un artículo anterior , se mostró cómo calibrar la impresora delta en modo manual. Pero debido a la complejidad y complejidad de la configuración, se decidió realizar la calibración automática. Dado que la versión final se encuentra en la etapa de prueba y fabricación, todavía queremos facilitarles la vida a nuestros clientes y a todos los que hicieron impresoras para sí mismos de acuerdo con este esquema. A continuación, se considerará una de las formas de implementar la calibración automática.
Hay muchos enfoques, instalar una sonda retráctil en un eyector con un microinterruptor, sensores FSR, un sensor Hall, etc. Pero estos sistemas tienen un inconveniente significativo: miden la distancia no a la boquilla, sino directamente al sensor, además, en algunos casos, la alineación puede fallar (si el sensor no se encuentra en lugar de la boquilla, se puede violar el cálculo de la geometría. Sin mencionar la precisión) .
La opción ideal es fijar el toque de la boquilla en la mesa. Y aquí puedes ir de dos maneras:
  • Cree un contacto eléctrico entre el HotEnd y el efector, de modo que el HotEnd sea móvil y abra (o cierre) el contacto cuando haga clic en él.
  • Cree un contacto eléctrico entre la boquilla de metal y la mesa.

La primera opción es más complicada en la fabricación y la estabilidad del trabajo, pero con un diseño adecuado dará un resultado estable permanente, sin movimientos corporales adicionales.
La segunda opción es menos conveniente de usar, pero es simple de implementar, y la mayoría de las veces rara vez se requiere calibración y se puede hacer según sea necesario.
Hablaremos sobre el segundo método:


De la herramienta que necesitamos:
  1. Cinta adhesiva de aluminio (de hecho, es papel de aluminio en una base adhesiva, y no todo tipo de cintas de refuerzo allí)
  2. "Cocodrilo": para conectar uno de los contactos a la carcasa metálica de extremo caliente, en principio, puede hacerlo con cualquier clip de papel, o arreglar el extremo del cable atornillándolo o soldandolo (de forma severa pero efectiva)
  3. Pinza de la oficina
  4. Pin block 2.54 para conectar nuestro sensor improvisado a la placa RAMPS 1.4 (o al conector EndStop correspondiente en su placa). Pocas personas tienen problemas para montar tales bloques, pero puede encontrar un bloque similar en la unidad de la computadora quitándolo del "tweeter" o botones.
  5. Accesorios de soldadura, es deseable tener un fundente activo y un soldador menos potente.
  6. Alambres, aproximadamente un metro.

La forma más simple de aplicar una capa conductora de corriente a nuestro plano de trabajo (vidrio) era una etiqueta adhesiva de cinta de aluminio, pero es importante pegarla de manera uniforme y alisarla para que haya contacto eléctrico entre las tiras de cinta, se verifica de manera primaria con un multímetro para "zumbar".

Además, para cambiar, debe hacer un cable, como se escribió anteriormente, apretar uno de los extremos en un bloque 2.54 (o soldarlo), los otros dos extremos se fijarán en el radiador del HotEnd y en la mesa con cinta de aluminio. Para arrastrarnos hacia el radiador, tomamos un cocodrilo ordinario y soldamos uno de los extremos del cable, para facilitar la soldadura, aconsejo usar ácido, aunque lo logré con buen calentamiento y colofonia ordinaria, el segundo extremo también se puede soldar al cocodrilo, pero en este caso existe la posibilidad de dañar la cinta adhesiva cuando está arreglado, y el cocodrilo debe ser lo suficientemente grande. Hicimos lo siguiente: tomar un clip de papel y limpiarlo de pintura (preferiblemente de todos los lados). El punto importante aquí esque soldaremos un alambre de cobre a una pinza metálica con soldadura ordinaria (PIC 61) y para una soldadura exitosa de la misma manera necesitamos un fundente activo, utilizamos ácido fosfórico ordinario (ácido de soldadura).


Las siguientes son fotos de la conexión a la placa y a la propia impresora. Los extremos de los cables de nuestra impresora están conectados al Z-max., Y en el firmware es necesario indicar cuál es el estado normal del interruptor de límite (nuestro sensor, cerrado o abierto). Con este enfoque, el sensor está abierto en condiciones normales.




El firmware con calibración automática para impresoras delta se puede tomar desde aquí: firmware Marlin Delta con actualizaciones de calibración automática . Configuración del
firmware de RichCattell :
Cohfiguration.h
// Precision for G30 delta autocalibration function
#define AUTOCALIBRATION_PRECISION 0.03 // mm.  ,     0.1.

// Diameter of print bed - this is used to set the distance that autocalibration probes the bed at.   ,        ,     ( ),  ,    (  , ..   )   .
#define BED_DIAMETER 170 // mm

// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.     


Después de conectar los cables y ajustar el firmware de la impresora, debe comenzar la calibración en sí. Y aquí hay un punto muy importante que la calibración debe hacerse desde una computadora, porque La impresora en sí no realiza esta operación correctamente. Aparentemente no hay suficiente memoria del dispositivo y la calibración termina en algún punto intermedio.
Además, una de las características de la calibración automática es que el algoritmo selecciona secuencialmente los parámetros de geometría, lo que puede llevar un tiempo considerable, especialmente si la geometría se rompe gravemente o los parámetros iniciales no están configurados correctamente (por ejemplo, la longitud de las diagonales es de 150 mm, y de hecho 200 mm, y el algoritmo con el paso dado repetirá la calibración cada iteración nuevamente, al final se calibrará, pero tomará una cantidad de tiempo inconcebible)

Para iniciar la calibración automática, conéctese a la impresora a través de USB y use el programa pronterface. Hay tres tipos de calibración:
  • El comando G30 , calibra los desplazamientos, esencialmente establece la altura a los interruptores de límite.
  • Equipo G30A : calibra la geometría completa de la impresora, la longitud de las diagonales, la sangría de los interruptores de límite (altura) y la curvatura de la geometría de acuerdo con las torres (torre) (lo más probable es que la impresora admita diferentes alturas)
  • Team G29 - el llamado AutoBedLevel - calibración automática de la curvatura de la tabla. En impresoras delta, funciona más correctamente y comienza inmediatamente antes de que comience la impresión en el código g inicial.

En consecuencia, los dos últimos son los más relevantes.
La siguiente es una lista de la consola de la impresora sin calibración inicial y reiniciarla.
Principio de calibración corta:
  • Comprobación / ajuste de compensaciones de tope final
  • Verificar / ajustar el radio delta
  • Comprobación de errores de geometría de la torre
  • Selección de longitud diagonal> Comprobación de la geometría de la torre> Conciliación de las compensaciones de EndStop. Cuando cambian los dos primeros parámetros, se selecciona el tercero y el ciclo se repite hasta que se cumplan los tres parámetros.


Listado de la calibración inicial: las iteraciones de 4 a 17 se cortan desde repite la acción
Connecting...
start
Printer is now online.
echo:Marlin 1.0.0
echo: Last Updated: Jul 31 2015 11:09:21 | Author: (RichCattell, Prism Mini)
Compiled: Jul 31 2015
echo: Free Memory: 1753  PlannerBufferBytes: 1232
echo:Hardcoded Default Settings Loaded
echo:Steps per unit:
echo:  M92 X100.00 Y100.00 Z100.00 E156.00
echo:Maximum feedrates (mm/s):
echo:  M203 X200.00 Y200.00 Z200.00 E200.00
echo:Maximum Acceleration (mm/s2):
echo:  M201 X9000 Y9000 Z9000 E9000
echo:Acceleration: S=acceleration, T=retract acceleration
echo:  M204 S3000.00 T3000.00
echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)
echo:  M205 S0.00 T0.00 B20000 X20.00 Z20.00 E20.00
echo:Home offset (mm):
echo:  M206 X0.00 Y0.00 Z0.00
echo:Delta Geometry adjustment:
echo:  M666 A0.000 B0.000 C0.000 I0.000 J0.000 K0.000 U0.000 V0.000 W0.000 R66.00 D154.00 H230.00
echo:Endstop Offsets:
echo:  M666 X0.00 Y0.00 Z0.00
echo:Z-Probe Offset:
echo:  M666 P X0.00 Y0.00 Z0.00
echo:PID settings:
echo:   M301 P15.09 I0.75 D76.13
echo:SD init fail
Setting hotend temperature to 190.000000 degrees Celsius.
Setting bed temperature to 70.000000 degrees Celsius.
>>> g30 a
SENDING:G30 A
Starting Auto Calibration..
Calibration precision: +/-0.100mm
|	Z-Tower			Endstop Offsets
| 	-7.8500			X:0.00 Y:0.00 Z:0.00
| -5.2400		-8.5900		Tower Offsets
| 	-6.8400			A:0.00 b:0.00 C:0.00
| -3.7200		-8.0400		I:0.00 J:0.00 K:0.00
| 	-5.6900			Delta Radius: 66.0000
| X-Tower		Y-Tower		Diagonal Rod: 154.0000



Iteration: 1
Checking/Adjusting endstop offsets //  /   endstop'
			x:-3.6800 (adj:-3.6800) y:-7.9600 (adj:-7.9600) z:-7.7700 (adj:-7.7700)
			X=ERROR Y=ERROR Z=ERROR
			x:0.7500 (adj:-2.9300) y:-0.1900 (adj:-8.1500) z:-0.2200 (adj:-7.9900)
			X=ERROR Y=ERROR Z=ERROR
			x:0.1600 (adj:-2.7700) y:-0.0800 (adj:-8.2300) z:0.0500 (adj:-7.9400)
			X=ERROR Y=OK Z=OK
			x:0.0300 (adj:-2.7400) y:-0.0200 (adj:-8.2500) z:0.0100 (adj:-7.9300)
			X=OK Y=OK Z=OK
|	Z-Tower			Endstop Offsets
| 	-0.0300			X:-2.74 Y:-8.25 Z:-7.93
| -0.0200		0.1500		Tower Offsets
| 	-0.2800			A:0.00 b:0.00 C:0.00
| -0.0300		-0.0300		I:0.00 J:0.00 K:0.00
| 	-0.1900			Delta Radius: 66.0000
| X-Tower		Y-Tower		Diagonal Rod: 154.0000
Checking delta radius //  
Adjusting Delta Radius //  
			x:-0.0600 (adj:-2.8000) y:-0.0300 (adj:-8.2800) z:-0.0500 (adj:-7.9800)
			X=OK Y=OK Z=OK
			 c: -0.2000 delta radius:66.0000 prec:0.010 tries:0
			 done:false
			x:0.0700 (adj:-2.7300) y:0.0900 (adj:-8.1900) z:0.0300 (adj:-7.9500)
			X=OK Y=OK Z=OK
			 c: -0.2100 delta radius:66.2000 prec:0.010 tries:0
			 done:false
			x:0.0600 (adj:-2.6700) y:0.0300 (adj:-8.1600) z:0.0600 (adj:-7.8900)
			X=OK Y=OK Z=OK
			 c: -0.1500 delta radius:66.4000 prec:0.010 tries:0
			 done:false
			x:0.0400 (adj:-2.6300) y:-0.0100 (adj:-8.1700) z:0.0300 (adj:-7.8600)
			X=OK Y=OK Z=OK
			 c: -0.0800 delta radius:66.6000 prec:0.010 tries:1
			 done:false
			x:0.0300 (adj:-2.6000) y:0.0400 (adj:-8.1300) z:0.0600 (adj:-7.8000)
			X=OK Y=OK Z=OK
			 c: 0.0200 delta radius:66.8000 prec:0.010 tries:2
			 done:false
			x:-0.0100 (adj:-2.6100) y:0.0200 (adj:-8.1100) z:-0.0200 (adj:-7.8200)
			X=OK Y=OK Z=OK
			 c: -0.0900 delta radius:66.7000 prec:0.010 tries:3
			 done:false
			x:-0.0000 (adj:-2.6100) y:-0.0000 (adj:-8.1100) z:-0.0000 (adj:-7.8200)
			X=OK Y=OK Z=OK
			 c: -0.0500 delta radius:66.7500 prec:0.020 tries:0
			 done:false
			x:0.0500 (adj:-2.5600) y:0.0100 (adj:-8.1000) z:0.0300 (adj:-7.7900)
			X=OK Y=OK Z=OK
			 c: -0.0400 delta radius:66.8000 prec:0.020 tries:1
			 done:false
			x:-0.0100 (adj:-2.5700) y:-0.0500 (adj:-8.1500) z:-0.0400 (adj:-7.8300)
			X=OK Y=OK Z=OK
			 c: 0.0100 delta radius:66.8500 prec:0.020 tries:1
			 done:true
			 
			 
			 
Iteration: 2
Checking/Adjusting endstop offsets //  /   endstop'
			x:-0.0000 (adj:-2.5700) y:0.0300 (adj:-8.1200) z:0.0300 (adj:-7.8000)
			X=OK Y=OK Z=OK
|	Z-Tower			Endstop Offsets
| 	 0.0100			X:-2.57 Y:-8.12 Z:-7.80
| 0.0100		0.1700		Tower Offsets
| 	 0.0000			A:0.00 b:0.00 C:0.00
| 0.0200		-0.0200		I:0.00 J:0.00 K:0.00
| 	-0.1900			Delta Radius: 66.8500
| X-Tower		Y-Tower		Diagonal Rod: 154.0000
Checking for tower geometry errors.. //   
			x_diff = 0.15000
			y_diff = 0.03000
			z_diff = 0.20000
			high_diff = 0.20000
			xy_equal = false
			xz_equal = true
			yz_equal = false
			Opp Range = 0.36000
			t1:Err t2:OK t3:Err
			Tower geometry OK
Checking DiagRod Length //  
			target:0.0033 c:0.0000 adj:0.00000
			|	Z-Tower			Endstop Offsets
			| 	-0.0000			X:-2.57 Y:-8.12 Z:-7.80
			| 0.0400		0.2000		Tower Offsets
			| 	-0.0000			A:0.00 b:0.00 C:0.00
			| -0.0100		-0.0000		I:0.00 J:0.00 K:0.00
			| 	-0.2000			Delta Radius: 66.8500
			| X-Tower		Y-Tower		Diagonal Rod: 154.0000
			
			
			
Iteration: 3
Checking/Adjusting endstop offsets  //  /   endstop'
			x:-0.0100 (adj:-2.5800) y:0.0300 (adj:-8.0900) z:0.0300 (adj:-7.7700)
			X=OK Y=OK Z=OK
			|	Z-Tower			Endstop Offsets
			| 	-0.0300			X:-2.58 Y:-8.09 Z:-7.77
			| 0.0300		0.1400		Tower Offsets
			| 	-0.0200			A:0.00 b:0.00 C:0.00
			| 0.0100		-0.0400		I:0.00 J:0.00 K:0.00
			| 	-0.2200			Delta Radius: 66.8500
			| X-Tower		Y-Tower		Diagonal Rod: 154.0000
Checking for tower geometry errors..  //   
			x_diff = 0.13000
			y_diff = 0.07000
			z_diff = 0.19000
			high_diff = 0.19000
			xy_equal = true
			xz_equal = true
			yz_equal = false
			Opp Range = 0.36000
			t1:Err t2:OK t3:Err
			Tower geometry OK
Checking DiagRod Length //  
			target:-0.0033 c:-0.0200 adj:-0.20000
			target:0.2133 c:0.2000 adj:-0.20000
			target:0.4267 c:0.4000 adj:-0.20000
			target:0.6233 c:0.6200 adj:0.00000
Diag Rod Length changed .. Homing Endstops  //  ... "" -      Endstop
|	Z-Tower			Endstop Offsets
| 	-0.4600			X:-2.58 Y:-8.09 Z:-7.77
| -0.4000		-0.2900		Tower Offsets
| 	-0.4600			A:0.00 b:0.00 C:0.00
| -0.4500		-0.5200		I:0.00 J:0.00 K:0.00
| 	-0.6900			Delta Radius: 66.8500
| X-Tower		Y-Tower		Diagonal Rod: 153.4000

Iteration: 17
Checking/Adjusting endstop offsets
x:0.0100 (adj:-3.0300) y:0.0300 (adj:-8.5000) z:0.0100 (adj:-8.2300)
X=OK Y=OK Z=OK
|	Z-Tower			Endstop Offsets
| 	-0.0300			X:-3.03 Y:-8.50 Z:-8.23
| 0.0400		0.1200		Tower Offsets
| 	-0.0300			A:0.00 b:0.00 C:0.00
| 0.0100		-0.0600		I:0.00 J:0.00 K:0.00
| 	-0.2600			Delta Radius: 66.8500
| X-Tower		Y-Tower		Diagonal Rod: 153.3453
Checking for tower geometry errors..
x_diff = 0.11000
y_diff = 0.10000
z_diff = 0.23000
high_diff = 0.23000
xy_equal = true
xz_equal = false
yz_equal = false
Opp Range = 0.38000
Tower 3 has largest error
t1:Err t2:Err t3:Err
Tower3 Error: Adjusting
 tower: -0.0400 opptower:-0.2700 tower radius adj:0.0000
 done:false
x:0.0000 (adj:-3.0300) y:0.0000 (adj:-8.5000) z:-0.0600 (adj:-8.2900)
X=OK Y=OK Z=OK
 tower: -0.0700 opptower:-0.1300 tower radius adj:-1.0000
 done:false
x:-0.0600 (adj:-3.0900) y:-0.0900 (adj:-8.5900) z:-0.0900 (adj:-8.3800)
X=OK Y=OK Z=OK
 tower: -0.0900 opptower:0.0900 tower radius adj:-2.0000
 done:false
x:-0.0500 (adj:-3.1400) y:-0.0400 (adj:-8.6300) z:-0.0700 (adj:-8.4500)
X=OK Y=OK Z=OK
 tower: 0.0400 opptower:0.0500 tower radius adj:-1.5000
 done:true
Tower Postions changed .. Homing Endstops
|	Z-Tower			Endstop Offsets
| 	 0.6400			X:-3.14 Y:-8.63 Z:-8.45
| 0.3300		0.4500		Tower Offsets
| 	 0.0900			A:0.00 b:0.00 C:0.00
| 0.0900		0.0100		I:0.00 J:0.00 K:-1.50
| 	-0.0200			Delta Radius: 66.8500
| X-Tower		Y-Tower		Diagonal Rod: 153.3453



Iteration: 18
Checking/Adjusting endstop offsets
x:0.1000 (adj:-3.0400) y:0.0600 (adj:-8.5700) z:0.6500 (adj:-7.8000)
X=OK Y=OK Z=ERROR
x:-0.0500 (adj:-3.0900) y:-0.0400 (adj:-8.6100) z:0.0600 (adj:-7.7400)
X=OK Y=OK Z=OK
|	Z-Tower			Endstop Offsets
| 	-0.0000			X:-3.09 Y:-8.61 Z:-7.74
| -0.0600		0.0200		Tower Offsets
| 	-0.1100			A:0.00 b:0.00 C:0.00
| -0.0000		-0.0700		I:0.00 J:0.00 K:-1.50
| 	 0.0200			Delta Radius: 66.8500
| X-Tower		Y-Tower		Diagonal Rod: 153.3453
Checking delta radius
Adjusting Delta Radius
x:-0.0200 (adj:-3.1100) y:-0.0300 (adj:-8.6400) z:0.0200 (adj:-7.7200)
X=OK Y=OK Z=OK
 c: -0.1100 delta radius:66.8500 prec:0.010 tries:0
 done:false
x:0.0500 (adj:-3.0600) y:0.0400 (adj:-8.6000) z:0.0100 (adj:-7.7100)
X=OK Y=OK Z=OK
 c: -0.0400 delta radius:67.0500 prec:0.010 tries:1
 done:false
x:0.0400 (adj:-3.0200) y:0.0800 (adj:-8.5200) z:0.0600 (adj:-7.6500)
X=OK Y=OK Z=OK
 c: -0.0000 delta radius:67.2500 prec:0.010 tries:1
 done:true
 
 
 
Iteration: 19
Checking/Adjusting endstop offsets
x:-0.0000 (adj:-3.0200) y:-0.0200 (adj:-8.5400) z:0.0100 (adj:-7.6400)
X=OK Y=OK Z=OK
|	Z-Tower			Endstop Offsets
| 	-0.0200			X:-3.02 Y:-8.54 Z:-7.64
| -0.0600		0.0200		Tower Offsets
| 	 0.0000			A:0.00 b:0.00 C:0.00
| -0.0100		-0.0300		I:0.00 J:0.00 K:-1.50
| 	 0.0200			Delta Radius: 67.2500
| X-Tower		Y-Tower		Diagonal Rod: 153.3453
Autocalibration Complete
SENDING:M500
echo:Settings Stored




Listado completo de recalibración
SENDING:G30 A
Starting Auto Calibration..
Calibration precision: +/-0.100mm
| Z-Tower Endstop Offsets
| -0.1800 X:-3.02 Y:-8.54 Z:-7.64
| -0.3000 -0.1600 Tower Offsets
| -0.2200 A:0.00 b:0.00 C:0.00
| -0.2200 -0.2000 I:0.00 J:0.00 K:-1.50
| -0.1500 Delta Radius: 67.2500
| X-Tower Y-Tower Diagonal Rod: 153.3453
Iteration: 1
Checking/Adjusting endstop offsets
x:-0.2100 (adj:-3.2300) y:-0.2000 (adj:-8.7400) z:-0.1700 (adj:-7.8100)
X=ERROR Y=ERROR Z=ERROR
x:0.0100 (adj:-3.2200) y:0.0100 (adj:-8.7300) z:-0.0200 (adj:-7.8300)
X=OK Y=OK Z=OK
| Z-Tower Endstop Offsets
| 0.0200 X:-3.22 Y:-8.73 Z:-7.83
| -0.1000 0.0300 Tower Offsets
| 0.0000 A:0.00 b:0.00 C:0.00
| -0.0200 -0.0300 I:0.00 J:0.00 K:-1.50
| 0.0100 Delta Radius: 67.2500
| X-Tower Y-Tower Diagonal Rod: 153.3453
Autocalibration Complete

Source: https://habr.com/ru/post/es382461/


All Articles