Auto calibration of the delta printer, using the Prism Mini as an example

    In a previous article , it was shown how to calibrate the delta printer in manual mode. But due to the complexity and complexity of the settings, it was decided to do auto calibration. Since the final version is at the testing and manufacturing stage, we still want to make life easier for our customers, and for everyone who made printers for themselves according to this scheme. Next, one of the ways to implement auto calibration will be considered.
    There are many approaches, installing a retractable probe on an ejector with a microswitch, FSR sensors, a Hall sensor, etc. But these systems have a significant drawback - they measure the distance not to the nozzle, but directly to the sensor, plus, in some cases, alignment may fail (if the sensor is not located instead of the nozzle, the geometry calculation may be violated. Not to mention accuracy) .
    The ideal option is to fix the touch of the nozzle itself on the table. And here you can go in two ways:
    • Create an electrical contact between the HotEnd and the ejector so that the HotEnd is movable and opens (or closes) the contact when pressed.
    • Create an electrical contact between the metal nozzle and the table.

    The first option is more complicated in the manufacture and stability of work, but with proper design it will give a permanent stable result, without additional body movements.
    The second option is less convenient to use, but it is simple to implement, and most often calibration is rarely required and can be done as needed.
    We will tell about the second method:


    From the tool we need:
    1. Aluminum scotch tape (in fact, it is aluminum foil on an adhesive basis, and not all kinds of reinforcing tapes there)
    2. “Crocodile” - to connect one of the contacts to the hot-end metal case, in principle, you can do with any paper clip, or fix the end of the wire by screwing it or soldering it (severely but effectively)
    3. Office clothespin
    4. Pin block 2.54 for connecting our makeshift sensor to the RAMPS 1.4 board (or to the corresponding EndStop connector on your board). Few people have a crimp for mounting such blocks, but you can find a similar block in the computer unit by removing it from the “tweeter” or buttons.
    5. Soldering accessories, it is desirable to have an active flux and a less powerful soldering iron.
    6. Wires, about a meter.

    The simplest way to apply a current-conducting layer to our work plane (glass) was a sticker of aluminum tape, but it is important to stick it evenly and smooth it so that there is electrical contact between the tape strips, it is checked elementarily with a multimeter for “ringing”.

    Also, for switching, you should make a wire, as it was written earlier, squeeze one of the ends into a block 2.54 (or solder to it), the other two ends will be fixed on the HotEnd's radiator and on the table with aluminum tape. In order to crawl to the radiator we take an ordinary crocodile and solder one of the ends of the wire to it, I advise using acid for ease of soldering, although I managed it with good heating and ordinary rosin, but the second end can also be soldered to the crocodile, but in this case there is a chance to damage the adhesive tape when fixed, and the crocodile should be large enough. We did the following: take a paper clip and clean it from paint (preferably from all sides). The important point here is


    The following are photos of the connection to the board and to the printer itself. The ends of the wires on our printer are connected to the Z-max., And in the firmware it is necessary to indicate what is the normal state of the limit switch (our sensor, closed or open). With this approach, the sensor is open in normal condition.




    Firmware with auto calibration for delta printers can be taken from here: Marlin Delta firmware with autocalibration updates. RichCattell
    Firmware Settings:
    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. Нас интересует именно этот параметр
    


    After connecting the wires and adjusting the printer firmware, you need to start the calibration itself. And here is a very important point that calibration should be done from a computer, because The printer itself does not perform this operation correctly. Apparently there is not enough device memory and calibration ends somewhere in the middle.
    Also, one of the features of auto calibration is that the algorithm sequentially selects the geometry parameters, which can take a considerable time, especially if the geometry is severely broken or the initial parameters are not correctly set (for example, the length of the diagonals is 150 mm, and in fact 200 mm, and the algorithm with the given step will repeat the calibration every iteration again, in the end it will be calibrated, but it will take an inconceivable amount of time)

    To start auto calibration, connect to the printer via USB, and use the pronterface program. There are three types of calibration:
    • The G30 command - calibrates offset's - essentially sets the height to the limit switches.
    • The G30A command - calibrates the entire geometry of the printer, the length of the diagonals, the indentation of the limit switches (height) and the curvature of the geometry according to the “Tower” - towers (most likely, the printer supports different heights)
    • Team G29 - the so-called AutoBedLevel - automatic table curvature calibration. On delta printers, it works most correctly, and starts immediately before printing starts in the initial g-code.

    Accordingly, the last two are most relevant.
    The following is a listing of the printer console without initial calibration and restarting it.
    Brief Calibration Principle:
    • Checking / Adjusting Endstop Offsets
    • Check / Adjust Delta Radius
    • Checking tower geometry errors
    • Diagonal Length Selection> Checking Tower Geometry> Reconciling EndStop Offsets. When the first two parameters change, the third one is selected and the cycle is repeated until all three parameters are satisfied.


    Listing of initial calibration - iterations from 4 to 17 are cut since it repeats the action
    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
    



    Full recalibration listing
    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
    


    Also popular now: