Delta printer first layer calibration
-
Hello,
I am facing some issues with calibrating the first layer on my printer, lately.
I have invested countless hours on solving this issue, I have tried lots of things, but still I haven't even achieved any improvement.
I feel quite lost at this time, but I also suspect a firmware bug, so here we go...
This is a custom build delta 3D printer.
I am using a chimaira hotend, so there are 2 extruders and 2 nozzles.
The extruders are mounted above the effector, in a "flying extruder" fashion.
Calibration is achieved with an original BLTouch probe. The repeatability of the probe seems very good, giving very consistent results.Obviously everything has an offset from the effector's geometric center.
I believe this point is important. I haven't noticed any (significant) effector tilt, but I believe that these offsets may be the reason that the firmware does not behave as I would expect.The printer frame is made from 20x40 aluminium extrusions, with metal vertexes/corners.
It is a very solid build, and I consider it pretty straight. There is no noticeable skewing in the towers, etc.On top of the bottom triangle there is a laser-cut sheet of 5mm acrylic, as a base for the build plate. It lays flat on the aluminium extrusions, and it is pretty tightly screwed in place.
On top of the acrylic, 6 stainless steel stand-offs keep the build plate. Their length is pretty accurate, and they are solid.
The build plate is a plasma-cut 6mm aluminium plate. On top of this plate, there is a 4mm piece of glass. Print takes place on the glass plate.
Everything is CNC cut, I don't expect any serious errors here, and are very solid (except for the glass, which is mounted with 4 clips).
Thus, I believe that my build plate is "flat-enough", without any significant warping.The printer is powered by an original Duet 2 WiFi board.
When I initially build the printer (2-3 years ago), I recall that I had pretty good results.
I nevertheless had to perform a mesh bed compensation, and then I remember being stunned by a perfect first layer!
So, I never spent any more time or thought on this.Occasionally, the first layer may again become a bit uneven, but re-running the mesh compensation always fixed it.
I guess, it was the glass print surface being moved around (it's held only by the clips, remember?).Even today (regardless of the first layer issue), dimensionally the prints are very very accurate, in all axes.
There is no axes skewing that can be observed on the printed parts.
Finishing is also exceptional, temperatures (bed and heads) are stable, extruders are well tuned.
And then, after some months of usage, I started experiencing issues with the first layer.
I though it was an issue with mesh compensation, and never paid much attention to it.
It got a bit worse, but since most parts that I was printing at the time were quite small, I could easily get away with some baby-stepping.A few months ago, I was in need of some large parts, taking advantage of the whole 300mm build plate.
And baby-stepping couldn't do the trick. So I started fighting this issue seriously for the first time.I have tried everything I can image, but I can't see any improvement.
My typical "routine":
- Everything set to working temps.
- Multiple delta calibrations (6-factors, deviation seems stable).
- Mesh bed calibration.
I tried delta calibration with 7, 10, 13 points, no difference.
I have a pretty dense grid for mesh compensation, I changed the parameters a bit, no difference.I have triple checked that all offsets (probe and nozzles) are very accurately set.
Mesh compensation always returns a very similar image, indicating good repeatability of the process.
I caused a severe artificial "unevenness" of the bed, to ensure that mesh compensation works. Indeed the effector seems to compensate (in the correct direction).
One thing that I noticed, is that the first layer is squished on areas of the bed that they seem "raised" on the heightmap, and vice-versa.
It gives the impression that although it compensates, it does not "compensate enough". This error is very consistent, and it is the first indication for me that a firmware bug may be involved.
I believe (with no means of proving it!), that maybe mesh compensation is not working properly with my chimaira hot end.
I have the tendency to believe that mesh compensation does not really like that my hotends have an offset. Dunno...Then I remembered that you can calibrate the probe trigger points for every point, to compensate for any effector tilt!
I had never used this functionality before (as initially everything was working nicely).
Well... It was hell. This is simply not working. I spend dozens of hours on this, I did literally hundreds of probes.I probed the center of the bed, setting my Z datum.
I then went through all other points defined in mybed.g
file, probing them and calculating any height error.
The thing is that when you adjust on point, the exactly opposite (in the circle) is thrown completely out of calibration!
Re-adjusting the opposite point, then sends the first point to a completely wrong Z.
I did that hundreds of times, I can conclude that it is impossible to find a set of H parameters that will work.
There is simply no solution to this.I am pretty sure that this is indeed a firmware bug.
Not only it is impossible to calibrate the probes, but also I cannot see any reason for calibrating H for one point to affect any other point.
So, at this point I can't get my first layer correct, and I am out of ideas.
Does anyone have any idea? Any proposition, something to try?
Have I missed something completely?Can we troubleshoot the above suspected bugs, or it is simply that I make bad use of the "features"?
-
Please share some specific information such as The results of M122 and M98 P"config.g". Share your config.g, homedelta.g and bed.g. Your slicer start gcode as well.
-
@fjpanag said in Delta printer first layer calibration:
I nevertheless had to perform a mesh bed compensation, and then I remember being stunned by a perfect first layer!
So, I never spent any more time or thought on this.what firmware version were you on then, and which version are you running now?
-
@T3P3Tony said in Delta printer first layer calibration:
@fjpanag said in Delta printer first layer calibration:
I nevertheless had to perform a mesh bed compensation, and then I remember being stunned by a perfect first layer!
So, I never spent any more time or thought on this.what firmware version were you on then, and which version are you running now?
Sorry, I neglected to mention this information.
When I built the machine, I was using RRF v2.03 initially.
I then upgraded through all versions, as they where being released, up to RRF v2.05.1.I have the tendency to believe that the problems started after an update towards v2.04 or v2.05, but I am not sure. Initially I thought that it was a calibration issue, and didn't pay much attention. So, maybe it was a coincidence as well.
Quite recently I migrated to RRF3, in the hope that my problem will be solved.
I started with RRF v3.0, and worked my way towards the latest v3.4.5, testing all releases in between.
The problem remains identical in all RRF3 versions.(I will also post my config files soon)
-
@Phaedrux said in Delta printer first layer calibration:
Please share some specific information such as The results of M122 and M98 P"config.g". Share your config.g, homedelta.g and bed.g. Your slicer start gcode as well.
Here is the requested information.
M122:
=== Diagnostics === RepRapFirmware for Duet 2 WiFi/Ethernet version 3.4.5 (2022-11-30 19:36:12) running on Duet WiFi 1.02 or later Board ID: 08DJM-9178L-L4MSJ-6J9F6-3S46N-9T3QP Used output buffers: 2 of 26 (26 max) === RTOS === Static ram: 23836 Dynamic ram: 75512 of which 0 recycled Never used RAM 11868, free system stack 92 words Tasks: NETWORK(ready,288.3%,211) HEAT(notifyWait,4.1%,308) Move(notifyWait,161.5%,282) MAIN(running,181.9%,155) IDLE(ready,8.1%,30), total 643.9% Owned mutexes: WiFi(NETWORK) === Platform === Last reset 21:52:04 ago, cause: software Last software reset at 2023-03-22 22:00, reason: User, GCodes spinning, available RAM 12516, slot 0 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0041f000 BFAR 0xe000ed38 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x04 Aux0 errors 0,0,0 Step timer max interval 0 MCU temperature: min 30.5, current 32.3, max 40.5 Supply voltage: min 23.9, current 24.3, max 24.6, under voltage events: 0, over voltage events: 0, power good: yes Heap OK, handles allocated/used 0/0, heap memory allocated/used/recyclable 0/0/0, gc cycles 0 Events: 0 queued, 0 completed Driver 0: standstill, SG min 0 Driver 1: standstill, SG min 0 Driver 2: standstill, SG min 0 Driver 3: standstill, SG min 0 Driver 4: standstill, SG min n/a Driver 5: Driver 6: Driver 7: Driver 8: Driver 9: Driver 10: Driver 11: Date/time: 2023-03-23 19:52:55 Cache data hit count 4294967295 Slowest loop: 148.02ms; fastest: 0.16ms I2C nak errors 0, send timeouts 0, receive timeouts 0, finishTimeouts 0, resets 0 === Storage === Free file entries: 10 SD card 0 detected, interface speed: 20.0MBytes/sec SD card longest read time 14.2ms, write time 142.7ms, max retries 0 === Move === DMs created 83, segments created 36, maxWait 575518ms, bed compensation in use: mesh, comp offset 0.000 === MainDDARing === Scheduled moves 540526, completed 540526, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === AuxDDARing === Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === Heat === Bed heaters 0 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0 Heater 0 is on, I-accum = 0.1 === GCodes === Segments left: 0 Movement lock held by null HTTP is idle in state(s) 0 Telnet is idle in state(s) 0 File is idle in state(s) 0 USB is idle in state(s) 0 Aux is idle in state(s) 0 Trigger is idle in state(s) 0 Queue is idle in state(s) 0 LCD is idle in state(s) 0 Daemon is idle in state(s) 0 Autopause is idle in state(s) 0 Code queue is empty === Filament sensors === Extruder 0 sensor: ok Extruder 1 sensor: no data received === Network === Slowest loop: 144.21ms; fastest: 0.00ms Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(2) HTTP sessions: 1 of 8 = WiFi = Network state is active WiFi module is connected to access point Failed messages: pending 0, notready 0, noresp 0 WiFi firmware version 1.27 WiFi MAC address 84:0d:8e:b2:f3:7f WiFi Vcc 3.46, reset reason Turned on by main processor WiFi flash size 4194304, free heap 21168 WiFi IP address 192.168.1.100 WiFi signal strength -72dBm, mode 802.11n, reconnections 3, sleep mode modem Clock register 00002002 Socket states: 2 4 0 0 0 0 0 0
M98 P"config.g"
HTTP is enabled on port 80 FTP is enabled on port 21 TELNET is enabled on port 23 Warning: Heater 1 predicted maximum temperature at full power is 566°C Warning: Heater 2 predicted maximum temperature at full power is 455°C Warning: Heater 0 predicted maximum temperature at full power is 379°C Warning: Heater 0 predicted maximum temperature at full power is 309°C Warning: Heater 1 predicted maximum temperature at full power is 450°C ok
Slicer start code:
G21 ; use millimetres G28 ; home all axes T[initial_extruder] P0 ; select the first tool (without running the tool-change script) M568 S160 R160 ; start pre-heating the printhead G32 ; delta auto-calibration G29 S1 ; load the mesh grid compensation heightmap G90 ; absolute positioning M83 ; extruder relative mode G92 E0 ; reset extruder position G1 X0 Y130 Z0.20 F6000 ; go to the starting position M568 S[first_layer_temperature] ; set printhead temperature M116 ; wait all temperatures to be reached
-
Also, here is my heightmap:
-
Can you post your config-override.g file?
-
@fjpanag so from what you posted mesh compensation is in use, you have a heightmap. Can you also post an annotated image showing the offsets of the extruders and probe, and how that relates to the bed.
Something else to check is with the heightmap enabled and T0 selected move to 3 or 4 points that are also probe points and then jog up or down to check what the offset at those points should be using a feeler gauge.
-
@Phaedrux said in Delta printer first layer calibration:
Can you post your config-override.g file?
Sure, here it is.
@T3P3Tony said in Delta printer first layer calibration:
Can you also post an annotated image showing the offsets of the extruders and probe, and how that relates to the bed.
Can you please explain this? You want a photo of the extruders?
Something else to check is with the heightmap enabled and T0 selected move to 3 or 4 points that are also probe points and then jog up or down to check what the offset at those points should be using a feeler gauge.
I did the following experiments:
- Enable bed, set it to working temperature, wait for heat to spread
- Select T0
- Home the printer (
G28
) - Execute delta calibration (
G32
) - Get hotend on X0 Y0 Z0 and check nozzle-bed distance with feeler. It's perfect.
- Move the head to other points defined in
bed.g
and check nozzle-bed distance again.
The distance is not correct. Some points are higher, some lower.
- Enable bed, and wait
- Select T0
- Home the printer(
G28
) - Execute delta calibration (
G32
) - Run mesh compensation (
G29
) - Apply the heightmap (
G29 S1
) - Get hotend on X0 Y0 Z0 and check nozzle-bed distance with feeler. It's higher than before.
- Move the head to other points defined in
bed.g
and check nozzle-bed distance again.
Again, the distance in other points is not correct.
But, the results are different than before (without applying the heightmap). That is, some points that were higher than normal before are now lower, and vice-versa.
-
I think you may have effector tilt which is causing the probe to have trigger heights that vary with XY position. This is a common side effect of using a probe that has an XY offset from the nozzle, and why using the nozzle tip as the probe is recommended on a delta.
Have a look through these search results: https://forum.duet3d.com/search?term=effector tilt&in=titles
-
@Phaedrux said in Delta printer first layer calibration:
I think you may have effector tilt which is causing the probe to have trigger heights that vary with XY position. This is a common side effect of using a probe that has an XY offset from the nozzle, and why using the nozzle tip as the probe is recommended on a delta.
Have a look through these search results: https://forum.duet3d.com/search?term=effector tilt&in=titles
I was thinking the same thing.
No tilt can be observed, but nevertheless it may be there.
However, in a
bed.g
file, theG30
commands can take theH
parameter.
Supposedly, this is to compensate for this:The H parameter is an optional height correction for that probe point. It allows for the Z probe having a trigger height that varies with XY position. The nominal trigger height of the Z probe (e.g. at bed centre) is declared in the Z parameter of the G31 command in the config.g file. When you probe using G30 and the probe triggers, the firmware will assume that the nozzle is at the nominal trigger height plus the value you have in the H parameter. For example, when doing delta calibration, it can account for the change in trigger height caused by effector tilt, if the vertical offset caused by the tilt has been measured
This option does not work. It miss-behaves badly as noted in my original post.
Either I understand something wrongly, or there is a bug in this functionality, or the problem is different (and thus this parameter cannot help me).
What is the proper procedure to calibrate this
H
parameter? -
@fjpanag the reason I asked for the annotated image of the print head + probe is to see what the offsets where, in relation to the bed etc
-
@T3P3Tony said in Delta printer first layer calibration:
@fjpanag the reason I asked for the annotated image of the print head + probe is to see what the offsets where, in relation to the bed etc
I hope I understood correctly and that the following are helpful.
This is the front view of the effector (one nozzle is missing at the moment).
The nozzles are at the left and right of the effector's center. In the Y coordinate they are in line with the center (no Y offset).
The actual, calibrated offsets for the nozzles are:
T0: X -9 Y 0
T1: X 8.83 Y -0.05
This is the back view of the effector.
BLTouch is located behind the nozzles (behind = more positive Y).
It is in the center of the effector in the X coordinate.Its actual calibrated offsets are: X -1.1 Y 26.9
This is a bottom view of the effector.
All three parts and their relative position can be seen.The gray line runs across the X axis, and passes through the effector center and the two nozzles.
The probe is located behind this line by 26.9mm, at its center.I don't understand how to provide a picture showing "the relation to the bed".
If you need any more information, please let me know and I will try my best. -
@fjpanag said in Delta printer first layer calibration:
I don't understand how to provide a picture showing "the relation to the bed".
I think i can work it out from the pictures. The point about "relation to the bed" was (for example you have the BL touch 27mm away from the X0 position, but i wanted to confirm if it was +27 or -27. They do look right to me.
@fjpanag said in Delta printer first layer calibration:
The thing is that when you adjust on point, the exactly opposite (in the circle) is thrown completely out of calibration!
Re-adjusting the opposite point, then sends the first point to a completely wrong Z.This is what I wanted to try and understand, i had a suspicion that something could be flipped/inverted.
As an experiment can you setup a simplified bed mesh that its a central point and then a small number of points around that (say 6). Then, after normal delta calibration, but without bed mesh enabled probe each point and then measure the nozzle offset. (this will also allow you to confirm that the point the probe touches when probing, and the nozzle is when you measure the offset ate exactly the same point on the bed). Once that is done, use G29 to mesh the same points and upload both you menaul measurements and the mesh here.
-
@T3P3Tony said in Delta printer first layer calibration:
@fjpanag said in Delta printer first layer calibration:
I don't understand how to provide a picture showing "the relation to the bed".
I think i can work it out from the pictures. The point about "relation to the bed" was (for example you have the BL touch 27mm away from the X0 position, but i wanted to confirm if it was +27 or -27. They do look right to me.
Ah.. I understand now. Indeed I invested a great deal of time on ensuring that all offsets have a correct sign. In fact, in most cases I indeed tried to reverse it, just to confirm that the results will then be "horribly wrong".
In fact if I reverse the Y offset of the probe, probing is no longer possible. One extremity of the Y axis is probed outside of the bed, IIRC.
@fjpanag said in Delta printer first layer calibration:
The thing is that when you adjust on point, the exactly opposite (in the circle) is thrown completely out of calibration!
Re-adjusting the opposite point, then sends the first point to a completely wrong Z.This is what I wanted to try and understand, i had a suspicion that something could be flipped/inverted.
As an experiment can you setup a simplified bed mesh that its a central point and then a small number of points around that (say 6). Then, after normal delta calibration, but without bed mesh enabled probe each point and then measure the nozzle offset. (this will also allow you to confirm that the point the probe touches when probing, and the nozzle is when you measure the offset ate exactly the same point on the bed). Once that is done, use G29 to mesh the same points and upload both you menaul measurements and the mesh here.
This sounds interesting, but it will take me some time.
I will report back soon! -
I am sorry for the delay, it took me some time to set up the test.
@T3P3Tony I did as instructed:
- Printer reboot,
G28
to home. - Delta calibration (
G32
). - I selected T0.
- I checked the nozzle offset for 9 points, no compensation active.
- I run mesh compensation for the same 9 points.
I did the procedure twice, both times the results were very similar, I don't see any repeatability issues.
Attached you may find the
heightmap.csv
as recorded duringG29
.Also the file
manual.csv
, contains the offsets as they should have been according to my manual measurements.
(I paid extra attention to the sign, I think I got it correct) - Printer reboot,