Unreliable Z height calibration on V-Core 3 w/BLtouch & Mini 5+
-
Hi!
I am having a recurrent issue with the Z calibration of my RatRig V-Core 3 500mm.
After getting the perfect first layer calibration and being able to complete a print without issues, when I send new prints I always need to adjust the baby steps to get the same good results as the previous one. What I am missing?
I will appreciate any advice/ help to solve this problem.
The machine has the following setup:
- Duet 3 Mini 5+ (with SBC)
- Toolbard 1LD v1.1
- BL-Touch 3.1
Thank you very much!
Julián.config.g:
; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"duet3" ; set printer name M669 K1 ; CoreXY G21 ; Set Units to Millimeters ; Network M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet G4 S2 ;wait for expansion boards to start ; Drives M569 P0.0 S0 D3 ; physical drive 0.0 goes forwards M569 P0.1 S0 D3 ; physical drive 0.1 goes forwards M569 P0.2 S0 D3 ; physical drive 0.2 goes forwards M569 P0.3 S1 D3 ; physical drive 0.3 goes forwards M569 P0.4 S1 D3 ; physical drive 0.4 goes forwards M569 P20.0 S0 D3 ; physical drive 0.5 goes forwards M584 X0.4 Y0.3 Z0.0:0.1:0.2 E20.0 ; set drive mapping M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation ;LGX M92 X80.00 Y80.00 Z800.00 E408.23 M906 X1200 Y1200 Z1000 E800 I30 ; set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout M566 X600.00 Y600.00 Z60.00 E600 P1 ; set maximum instantaneous speed changes (mm/min) M203 X60000.00 Y60000.00 Z1000.00 E3600.00 ; set maximum speeds (mm/min) M201 X3500.00 Y3500.00 Z100.00 E3600.00 ;Axis Limits M208 X0 Y0 Z0 S1 ; set axis minima M208 X500 Y500 Z500 S0 ; set axis maxima ; Endstops M574 X1 S1 P"20.io2.in" ; configure active high endstops M574 Y2 S1 P"io1.in" ; configure active high endstops M574 Z1 S2 ; configure Z-probe endstop for low end on Z ; Z-Probe ;; BLTouch M950 S0 C"20.io0.out" ; Create a servo pin on io3 M558 P9 C"20.io0.in" F150 H4 R0.2 T12000 A5 B0 ; set Z probe type to unmodulated and the dive height + speeds G31 P1000 X-39.25 Y-13.50 Z3.180 M671 X-4.5:250:504.5 Y-4.52:505:-4.52 S50 ; Define positions of Z leadscrews or bed levelling screws M557 X25:475 Y25:475 S25 ; define 5x5 mesh grid M563 P0 D0 H1 F1 ; define tool 0 ; BED HEATER M308 S0 P"temp0" Y"thermistor" T100000 B3950 A"Bed" ; configure sensor 0 as thermistor on pin temp0 M950 H0 C"out0" T0 ; create bed heater output on out5 and map it to sensor 0 M307 H0 B0 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit M140 H0 ; map heated bed to heater 0 M143 H0 S120 ; set temperature limit for heater 0 to 110C ;; BED Heater PID Tune JEN M307 H0 B0 R0.795 C325.9 D3.08 S1.00 V23.9 ; Fans M950 F0 C"20.out2" Q25000 ; create fan 0 on pin out3 and set its frequency M106 P0 C"Hotend Fan" S.5 H1 T45 ; set fan 0 name and value. Thermostatic control turned on for Hotend M950 F1 C"!20.out1+out1.tach" Q25000 ; create fan 1 on pin out4 and set its frequency M106 P1 C"Layer Fan" S0 H-1 L0.2 X0.3 ; set fan 1 name and value. Thermostatic control is turned off M950 F2 C"!out3+out3.tach" Q25000 ; create fan 1 on pin out4 and set its frequency M106 P2 C"Filter & Bottom Fans" S0 H-1 L255 ; set fan 1 name and value. Thermostatic control is turned off M950 F3 C"!out4+out4.tach" Q25000 ; create fan 1 on pin out4 and set its frequency M106 P3 C"Exhaust Fan" S0 H-1 L255 ; set fan 1 name and value. Thermostatic control is turned off M950 F4 C"out5" Q10 ; create fan 1 on pin out4 and set its frequency M106 P4 C"12vFANs" S1.0 H-1 L255 ; set fan 1 name and value. Thermostatic control is turned off ; Tools G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C M308 S1 P"20.temp0" Y"thermistor" T500000 B4723 C1.196220e-7 ; PARA SLICE ENGINNERING HIGH TEMP M950 H1 C"20.out0" T1 ; create nozzle heater output on out2 and map it to sensor 1 M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit M143 H1 S300 ; set the maximum temperature in C for heater M307 H1 B0 R2.138 C163.4:146.8 D7.88 S1.00 V23.8 ; Miscellaneous M575 P1 B57600 S1;enable panelDue UART M501 ; load saved parameters from non-volatile memory M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set tension thresholds and actions to run on power loss M404 N1.75 D0.4 ; Filament width and nozzle diameter ;DHT Sensor on IO4 M308 S10 P"io4.out+io4.in" Y"dht22" A"Chbr Temp[C]" M308 S11 P"S10.1" Y"dhthumidity" A"Chbr Hum[%]" M591 D0 P3 C"20.io1.in" S0 R10:200 L22.00 E3.0 ; Duet3D rotating magnet sensor for extruder drive 0 is connected to E0 endstop input, enabled, sensitivity 24.8mm.rev, 70% to 130% tolerance, 3mm detection length ;Input Shaping M593 P"none" ; disable DAA ; Pressure Advance M572 D0 S0.18 ;Taper Height M376 H20 ; Set up Accelerometer M955 P20.0 I12 S1000 Q2000000 ; Accelerometer on toolboard, Enable for RRF 3.3 Stable M593 P"ei3" F68.43 S0.1 L10 T0
config-override.g
; Heater model parameters M307 H0 R0.795 C325.900:325.900 D3.10 S1.00 V23.9 B0 M307 H1 R2.138 C163.400:146.800 D7.90 S1.00 V23.8 B0 ; Workplace coordinates G10 L2 P1 X0.00 Y0.00 Z0.00 G10 L2 P2 X0.00 Y0.00 Z0.00 G10 L2 P3 X0.00 Y0.00 Z0.00 G10 L2 P4 X0.00 Y0.00 Z0.00 G10 L2 P5 X0.00 Y0.00 Z0.00 G10 L2 P6 X0.00 Y0.00 Z0.00 G10 L2 P7 X0.00 Y0.00 Z0.00 G10 L2 P8 X0.00 Y0.00 Z0.00 G10 L2 P9 X0.00 Y0.00 Z0.00
bed.g
M290 R0 S0 ; clear baby stepping M561 ; reset all bed adjustments M400 ; flush move queue if !move.axes[0].homed or !move.axes[1].homed or !move.axes[2].homed echo "not all axes homed, homing axes first" G28 while true if iterations = 5 abort "Auto calibration repeated attempts ended, final deviation", move.calibration.final.deviation ^ "mm" G30 P0 X5 Y10 Z-99999 ; probe near a leadscrew if result != 0 continue G30 P1 X245 Y470 Z-99999 ; probe near a leadscrew if result != 0 continue G30 P2 X460 Y10 Z-99999 S3 ; probe near a leadscrew and calibrate 3 motors if result != 0 continue if move.calibration.initial.deviation <= 0.01 break echo "Repeating calibration because deviation is too high (" ^ move.calibration.initial.deviation ^ "mm)" ; end loop echo "Auto calibration successful, deviation", move.calibration.final.deviation ^ "mm" G0 X250 Y250 Z10 F9000 ; rehome Z as the absolute height of the z plane may have shifted G28 Z G29 S1
homeall.g
M280 P0 S160 ; Ensure the pin is raised G91 ; relative positioning G1 H2 Z10 F6000 ; lift Z relative to current position G1 H1 X-505 Y505 F3600 ; move quickly to X and U axis endstops and stop there (first pass) G1 H1 X-505 F1800 ; move quickly to X and U axis endstops and stop there (first pass) G1 H1 Y505 F1800 ; move quickly to X and U axis endstops and stop there (first pass) G1 H1 X-505 Y505 F360 ; move slowly to X and U axis endstops once more (second pass) G1 H1 X-505 F360 ; move slowly to X and U axis endstops once more (second pass) G1 H1 Y505 F360 ; move slowly to X and U axis endstops once more (second pass) G90 ; absolute positioning G1 X250 Y250 F10000 ; go to first probe point G30 ; home Z by probing the bed G91 ; relative positioning G1 Z10 F1800 ; lift Z relative to current position G90 ; absolute positioning G1 X0 Y35 F10000
homex.g
G91 ; relative positioning G1 H1 X-505 F1800 ; move quickly to X axis endstop and stop there (first pass) G1 H2 X5 F6000 ; go back a few mm G1 H1 X-505 F360 ; move slowly to X axis endstop once more (second pass) G90 ; absolute positioning G1 X0 F6000
homey.g
G91 ; relative positioning G1 H1 Y505 F1800 ; move quickly to Y axis endstop and stop there (first pass) G1 Y-5 F6000 ; go back a few mm G1 H1 Y505 F360 ; move slowly to Y axis endstop once more (second pass) G90 ; absolute positioning G1 Y250 F6000
homez.g
; BLTouch ;M280 P0 S160 ; Precautionary alarm release M280 P0 S160 ; Ensure the pin is raised G91 ; relative positioning G1 H2 Z5 F6000 ; lift Z relative to current position G90 ; absolute positioning G1 X250 Y250 F10800 ; go to first probe point G30 ; home Z by probing the bed ; Uncomment the following lines to lift Z after probing G91 ; relative positioning G1 Z5 F100 ; lift Z relative to current position G90 ; absolute positioning
-
@juliann how repeatable is the z probe if you probe manually multiple times in the same place?
-
Hi @t3p3tony
Which commands should I use to probe manually?
Thanks! -
you could try this macro
; Reprap firmware version 3.3b2 or later required! ; if two speed probing is configured in M558,we probably want to reduce the speed for this test var ProbeSpeedHigh = sensors.probes[0].speeds[0]*60 ; Speeds are saved in mm/sec in the object model but M558 uses mm/min var ProbeSpeedLow = sensors.probes[0].speeds[1]*60 M558 F60 ; reduce probe speed to 60mm/min for accuracy - adjust F parameter as required ;define some variables to store readings var NumTests=10 ; modify this value to define number of tests ; Do not change below this line var RunningTotal=0 var Average=0 var Lowest=0 var Highest=0 ; If the printer hasn't been homed, home it if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed G28 else G1 Z{sensors.probes[0].diveHeight} F360 ; if axes homed move to dive height M561 ; clear any bed transform M290 R0 S0 ; clear babystepping ;ensure you have room for the probe if move.axes[2].machinePosition < sensors.probes[0].diveHeight G1 Z{sensors.probes[0].diveHeight} ; move nozzle to centre of bed G1 X{(move.axes[0].min + move.axes[0].max)/2} Y{(move.axes[1].min + move.axes[1].max)/2} M564 S0 H0 ; Allow movement beyond limits M280 P0 S160 I1 ; reset BL Touch G4 S0.5 M98 P"0:/sys/retractprobe.g" ; Ensure probe is retracted & reset G4 S0.5 M561 ; clear any bed transform ; Jog head to position M291 P"Jog nozzle to touch bed" R"Set nozzle to zero" S3 Z1 G92 Z0 ; set Z position to zero M291 P"Press OK to begin" R"Ready?" S3; ; Move probe over top of same point that nozzle was when zero was set G1 Z{sensors.probes[0].diveHeight}; lift head G1 X{move.axes[0].machinePosition - sensors.probes[0].offsets[0]} Y{move.axes[1].machinePosition - sensors.probes[0].offsets[1]} F1800 echo "Current probe offset = " ^ sensors.probes[0].triggerHeight ^ "mm" ; carry out 10 probes (or what is set in NumTests variable) while iterations < var.NumTests G1 Z{sensors.probes[0].diveHeight} ; move to dive height if sensors.probes[0].value[0]=1000 ; if probe is in error state echo "Probe in error state- resetting" M280 P0 S160 I1 ; reset BL Touch G4 S0.5 M98 P"0:/sys/retractprobe.g" ; Ensure probe is retracted & reset G4 S0.5 G30 S-1 M118 P2 S{"Test # " ^ (iterations+1) ^ " Triggered @ " ^ move.axes[2].machinePosition ^ "mm"} ; send trigger height to Paneldue console M118 P3 S{"Test # " ^ (iterations+1) ^ " Triggered @ " ^ move.axes[2].machinePosition ^ "mm"} ; send trigger height to DWC console if iterations == 0 set var.Lowest={move.axes[2].machinePosition} ; set the new lowest reading to first probe height set var.Highest={move.axes[2].machinePosition} ; set the new highest reading to first probe height if move.axes[2].machinePosition < var.Lowest set var.Lowest={move.axes[2].machinePosition} ; set the new lowest reading ;M118 P3 S{"new low reading = " ^ move.axes[2].machinePosition} ; send trigger height to DWC console G4 S0.3 if move.axes[2].machinePosition > var.Highest set var.Highest={move.axes[2].machinePosition} ; set the new highest reading ;M118 P3 S{"new high reading = " ^ move.axes[2].machinePosition} ; send trigger height to DWC console G4 S0.3 set var.RunningTotal={var.RunningTotal + move.axes[2].machinePosition} ; set new running total ;M118 P3 S{"running total = " ^ var.RunningTotal} ; send running total to DWC console G4 S0.5 set var.Average = {(var.RunningTotal - var.Highest - var.Lowest) / (var.NumTests - 2)} ; calculate the average after discarding th ehigh & low reading ;M118 P3 S{"running total = " ^ var.RunningTotal} ; send running total to DWC console ;M118 P3 S{"low reading = " ^ var.Lowest} ; send low reading to DWC console ;M118 P3 S{"high reading = " ^ var.Highest} ; send high reading to DWC console M118 P2 S{"Average excluding high and low reading = " ^ var.Average} ; send average to PanelDue console M118 P3 S{"Average excluding high and low reading = " ^ var.Average} ; send average to DWC console G31 P500 Z{var.Average} ; set Z probe offset to the average reading M564 S0 H1 ; Reset limits M558 F{var.ProbeSpeedHigh}:{var.ProbeSpeedLow} ; reset probe speed to original G1 Z{sensors.probes[0].diveHeight} F360 ; move head back to dive height M291 P{"Trigger height set to : " ^ sensors.probes[0].triggerHeight ^ " OK to save to config-overide.g, cancel to use until next restart"} R"Finished" S3 M500 P31 ; optionally save result to config-overide.g
-
@juliann move the the postion you want to test, then send G30 S-1
https://duet3d.dozuki.com/Wiki/G30
Send it a few time to see the result. -
12/10/2021, 14:48:02 G30 S-1 Stopped at height 3.174 mm
12/10/2021, 14:47:51 G30 S-1 Stopped at height 3.171 mm
12/10/2021, 14:47:37 G30 S-1 Stopped at height 3.172 mm
12/10/2021, 14:47:24 G30 S-1 Stopped at height 3.175 mm
12/10/2021, 14:47:09 G30 S-1 Stopped at height 3.171 mm
12/10/2021, 14:46:51 G30 S-1 Stopped at height 3.172 mm -
@juliann so pretty repeatable probing, it does not look like its probe repeatability causing the issue (although maybe it stops becoming repeatable when it shot or something). Do you always probe with everything at the same temperature? How much variation between prints are you seeing?
-
@juliann said in Unreliable Z height calibration on V-Core 3 w/BLtouch & Mini 5+:
12/10/2021, 14:48:02 G30 S-1 Stopped at height 3.174 mm
12/10/2021, 14:47:51 G30 S-1 Stopped at height 3.171 mm
12/10/2021, 14:47:37 G30 S-1 Stopped at height 3.172 mm
12/10/2021, 14:47:24 G30 S-1 Stopped at height 3.175 mm
12/10/2021, 14:47:09 G30 S-1 Stopped at height 3.171 mm
12/10/2021, 14:46:51 G30 S-1 Stopped at height 3.172 mmYou can do a variation that reports not the height but the variation and deviation:
Assuming the point of interest is X=180,Y=180.
G30 P0 X180 Y180 Z-99999
G30 P1 X180 Y180 Z-99999
G30 P2 X180 Y180 Z-99999
G30 P3 X180 Y180 Z-99999
G30 P4 X180 Y180 Z-99999
G30 P5 X180 Y180 Z-99999
G30 P6 X180 Y180 Z-99999
G30 P7 X180 Y180 Z-99999
G30 P8 X180 Y180 Z-99999
G30 P9 X180 Y180 Z-99999 S-1Frederick
-
Yes, I did the calibration at the same bed temperature I always use but the variation is not always the same, sometimes is a bit challenging to me getting the right calibration spot again.
What would be the best method/ procedure to minimise this issue?
Thanks again!
-
Thank you @fcwilt
This is the result:
G32 bed probe heights: -0.079 -0.077 -0.077 -0.078 -0.078 -0.076 -0.078 -0.078 -0.078 -0.077, mean -0.078, deviation from mean 0.001
-
@juliann the probe looks to have minimal variation, well under what should need babystepping to compensate for.
what is your start gcode doing? maybe you are homing the printer after probing and the endstops are less repeatable
-
-
@juliann so no G28 is inserted by the slicer?
Also can you post an image of the height map you are using?
Is there a variation between different runs of the same print? -
You are correct, there is no G28 inserted in the slicer.
Yes, the variations are present between different runs of the same print.
-
@juliann said in Unreliable Z height calibration on V-Core 3 w/BLtouch & Mini 5+:
Thank you @fcwilt
This is the result:
G32 bed probe heights: -0.079 -0.077 -0.077 -0.078 -0.078 -0.076 -0.078 -0.078 -0.078 -0.077, mean -0.078, deviation from mean 0.001
I'm a bit late to the party so if I repeat what you have already been told I apologize.
When you use a single G30 at a fixed XY location you are setting the Z=0 Datum.
For the fixed XY location I suggest using the center of the bed.
It is important to do this when creating your height map and when loading your height map.
Now setting the Z=0 Datum can be done as part of homing Z or homing ALL as long as it occurs before creating the height map or before loading the height map.
If you change Z probe settings in either M558 or G31 it would be best to create a new height map.
If you change the XY point you use when setting the Z=0 Datum you should also create a new height map.
Frederick
-
@juliann ok so quite a lot of variation across the bed is shown by the height map.
Try adding a single G30 at the bed centre into your start gcode before you load the height map and see if it if makes it more consistent (it might not be exactly right and still need baby stepping. its more about seeing if the amount of baby stepping needed changes.
-
-
-
After following your instructions I think I got an improvement because now there is not a baby stepping variation anymore between different runs of the same print.
But... always there is a but... if I turn off and on the printer and then try to print anything, all the calibration is gone, so I need to recalibrate the baby steps again to get those nice first layers that I used to have.Thanks again!
Julián. -
@juliann said in Unreliable Z height calibration on V-Core 3 w/BLtouch & Mini 5+:
After following your instructions I think I got an improvement because now there is not a baby stepping variation anymore between different runs of the same print.
But... always there is a but... if I turn off and on the printer and then try to print anything, all the calibration is gone, so I need to recalibrate the baby steps again to get those nice first layers that I used to have.Thanks again!
Julián.If you find you need to adjust baby-stepping once at power on and then it works fine you should be able change the Z Trigger Height parameter in G31 by the same amount.
If you are baby-stepping closer (a negative value) add the absolute of that value to the Z Trigger height parameter.
If you are baby-stepping away (a positive value) subtract that value from the Z Trigger height parameter.
Recall that increasing the Z Trigger Height parameter will result in the nozzle ending up closer to the bed.
In any case when you change G31 you need to be sure it is executed to have the changes take effect.
Frederick