Autokalibrierungs-Delta-Drucker, Beispiel Prisma Mini

In einem früheren Artikel wurde gezeigt, wie der Delta-Drucker im manuellen Modus kalibriert wird. Aufgrund der Komplexität und Komplexität der Einstellungen wurde jedoch eine automatische Kalibrierung beschlossen. Da sich die endgültige Version in der Test- und Fertigungsphase befindet, möchten wir unseren Kunden und allen, die nach diesem Schema Drucker für sich selbst hergestellt haben, das Leben erleichtern. Als nächstes wird eine der Möglichkeiten zur Implementierung der automatischen Kalibrierung betrachtet.
Es gibt viele Ansätze: Installieren einer einziehbaren Sonde an einem Ejektor mit einem Mikroschalter, FSR-Sensoren, einem Hallsensor usw. Diese Systeme haben jedoch einen erheblichen Nachteil: Sie messen den Abstand nicht zur Düse, sondern direkt zum Sensor. In einigen Fällen kann die Ausrichtung fehlschlagen (wenn sich der Sensor nicht anstelle der Düse befindet, kann die Geometrieberechnung verletzt werden. Ganz zu schweigen von der Genauigkeit). .
Die ideale Option besteht darin, die Berührung der Düse selbst auf dem Tisch zu fixieren. Und hier können Sie auf zwei Arten vorgehen:
  • Erstellen Sie einen elektrischen Kontakt zwischen dem HotEnd und dem Effektor, sodass das HotEnd beweglich ist und den Kontakt öffnet (oder schließt), wenn Sie darauf klicken.
  • Stellen Sie einen elektrischen Kontakt zwischen der Metalldüse und dem Tisch her.

Die erste Option ist komplizierter in der Herstellung und Stabilität der Arbeit, aber bei richtiger Konstruktion ergibt sich ein dauerhaft stabiles Ergebnis ohne zusätzliche Körperbewegungen.
Die zweite Option ist weniger bequem zu verwenden, aber einfach zu implementieren. In den meisten Fällen ist eine Kalibrierung selten erforderlich und kann nach Bedarf durchgeführt werden.
Wir werden über die zweite Methode sprechen:


Aus dem Tool, das wir brauchen:
  1. Aluminium-Klebeband (in der Tat ist es Aluminiumfolie auf Klebebasis und nicht alle Arten von Verstärkungsbändern dort)
  2. „Krokodil“ - Um einen der Kontakte mit dem Hot-End-Metallgehäuse zu verbinden, können Sie im Prinzip mit jeder Büroklammer arbeiten oder das Drahtende durch Schrauben oder Löten befestigen (streng, aber effektiv).
  3. Büro Wäscheklammer
  4. Pin Block 2.54 zum Anschließen unseres improvisierten Sensors an die RAMPS 1.4-Karte (oder an den entsprechenden EndStop-Anschluss auf Ihrer Karte). Nur wenige Leute haben eine Crimpverbindung für die Montage solcher Blöcke, aber Sie können einen ähnlichen Block in der Computereinheit finden, indem Sie ihn vom „Hochtöner“ oder den Tasten entfernen.
  5. Lötzubehör ist es wünschenswert, ein aktives Flussmittel und einen weniger leistungsstarken Lötkolben zu haben.
  6. Drähte, ungefähr einen Meter.

Der einfachste Weg, eine stromleitende Schicht auf unsere Arbeitsebene (Glas) aufzubringen, war ein Aufkleber aus Aluminiumband. Es ist jedoch wichtig, ihn gleichmäßig zu kleben und zu glätten, damit ein elektrischer Kontakt zwischen den Bandstreifen besteht. Er wird elementar mit einem Multimeter auf „Klingeln“ überprüft.

Zum Umschalten sollten Sie auch einen Draht herstellen, wie zuvor beschrieben, eines der Enden in einen Block 2.54 drücken (oder daran löten). Die anderen beiden Enden werden mit Aluminiumband am Heizkörper des HotEnd und auf dem Tisch befestigt. Um zum Kühler zu kriechen, nehmen wir ein gewöhnliches Krokodil und löten eines der Enden des Drahtes daran. Ich empfehle, zur Erleichterung des Lötens Säure zu verwenden, obwohl ich es mit guter Erwärmung und gewöhnlichem Kolophonium geschafft habe, aber das zweite Ende kann auch mit dem Krokodil verlötet werden, aber in diesem Fall besteht die Möglichkeit, das Klebeband zu beschädigen wenn fixiert, und das Krokodil sollte groß genug sein. Wir haben wie folgt gehandelt: Nehmen Sie eine Büroklammer und reinigen Sie sie von Farbe (vorzugsweise von allen Seiten). Der wichtige Punkt hier istDamit wir einen Kupferdraht mit gewöhnlichem Lot (PIC 61) auf eine Metallwäscheklammer löten und für ein erfolgreiches Löten trotzdem ein aktives Flussmittel benötigen, haben wir gewöhnliche Orthophosphorsäure (Lötsäure) verwendet.


Das Folgende sind Fotos der Verbindung zur Karte und zum Drucker selbst. Die Enden der Kabel an unserem Drucker sind mit dem Z-max verbunden. In der Firmware muss der normale Zustand des Endschalters (unser Sensor, geschlossen oder offen) angegeben werden. Bei diesem Ansatz ist der Sensor im Normalzustand geöffnet.




Die Firmware mit automatischer Kalibrierung für Delta-Drucker kann hier abgerufen werden: Marlin Delta- Firmware mit automatischen Kalibrierungsupdates . RichCattell-
Firmware-Einstellungen:
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.     


Nachdem Sie die Kabel angeschlossen und die Druckerfirmware angepasst haben, müssen Sie die Kalibrierung selbst starten. Und hier ist ein sehr wichtiger Punkt, dass die Kalibrierung von einem Computer aus durchgeführt werden sollte, weil Der Drucker selbst führt diesen Vorgang nicht korrekt aus. Anscheinend ist nicht genügend Gerätespeicher vorhanden und die Kalibrierung endet irgendwo in der Mitte.
Eines der Merkmale der automatischen Kalibrierung ist auch, dass der Algorithmus die Geometrieparameter nacheinander auswählt, was eine beträchtliche Zeit in Anspruch nehmen kann, insbesondere wenn die Geometrie stark beschädigt ist oder die Anfangsparameter nicht richtig eingestellt sind (zum Beispiel beträgt die Länge der Diagonalen 150 mm und tatsächlich 200 mm). und der Algorithmus mit einem gegebenen Schritt wiederholt die Kalibrierung bei jeder Iteration erneut, am Ende wird sie kalibriert, aber es wird diese nicht vorstellbare Zeit in Anspruch nehmen

Um die automatische Kalibrierung zu starten, stellen Sie über USB eine Verbindung zum Drucker her und verwenden Sie das Pronterface-Programm. Es gibt drei Arten der Kalibrierung:
  • Der Befehl G30 - kalibriert Offsets - stellt im Wesentlichen die Höhe auf die Endschalter ein.
  • Team G30A - kalibriert die gesamte Geometrie des Druckers, die Länge der Diagonalen, die Einkerbung der Endschalter (Höhe) und die Krümmung der Geometrie gemäß den „Tower“ -Türmen (höchstwahrscheinlich unterstützt der Drucker unterschiedliche Höhen).
  • Team G29 - das sogenannte AutoBedLevel - automatische Kalibrierung der Tischkrümmung. Bei Delta-Druckern funktioniert dies am besten und beginnt unmittelbar vor dem Druckvorgang im ursprünglichen G-Code.

Dementsprechend sind die letzten beiden am relevantesten.
Im Folgenden finden Sie eine Liste der Druckerkonsole ohne Erstkalibrierung und Neustart.
Kurzes Kalibrierungsprinzip:
  • Überprüfen / Anpassen von Endstop-Offsets
  • Delta Radius prüfen / einstellen
  • Überprüfen von Turmgeometriefehlern
  • Auswahl der diagonalen Länge> Überprüfen der Turmgeometrie> Abgleichen von EndStop-Offsets. Wenn sich die ersten beiden Parameter ändern, wird der dritte ausgewählt und der Zyklus wiederholt, bis alle drei Parameter erfüllt sind.


Auflistung der Erstkalibrierung - Iterationen von 4 bis 17 werden seitdem abgeschnitten es wiederholt die Aktion
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




Vollständige Neukalibrierungsliste
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/de382461/


All Articles