Delta printer calibration procedure
-
Please share your config files with us.
config.g, homedelta.g, bed.g
Also please send M122 and M98 P"config.g" in the gcode console tab and copy and paste the results here. -
@Phaedrux Thanks for your time.
config.g
; Configuration file for Duet WiFi (firmware version 3.3)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.3.16 on Sat Apr 15 2023 11:44:38 GMT+0200 (czas środkowoeuropejski letni); General preferences
M575 P1 S1 B57600 ; enable support for PanelDue
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"My Printer" ; set printer name
M665 R115 L230 B85 H270 ; Set delta radius, diagonal rod length, printable radius and homed height
M666 X0 Y0 Z0 ; put your endstop adjustments here, or let auto calibration find them; Network
M552 S1 ; enable network
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet; Drives
M569 P0 S0 ; physical drive 0 goes backwards
M569 P1 S0 ; physical drive 1 goes backwards
M569 P2 S0 ; physical drive 2 goes backwards
M569 P3 S1 ; physical drive 3 goes forwards
M584 X0 Y1 Z2 E3 ; set drive mapping
M350 E8 I0 ; configure microstepping without interpolation
M350 X16 Y16 Z16 I1 ; configure microstepping with interpolation
M92 X80.00 Y80.00 Z80.00 E24000.00 ; set steps per mm
M566 X300.00 Y300.00 Z300.00 E100.00 ; set maximum instantaneous speed changes (mm/min)
M203 X4800.00 Y4800.00 Z4800.00 E1200.00 ; set maximum speeds (mm/min)
M201 X100.00 Y100.00 Z100.00 E5.00 ; set accelerations (mm/s^2)
M906 X1000 Y1000 Z1000 E1000 I30 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout; Axis Limits
M208 Z0 S1 ; set minimum Z; Endstops
M574 X2 S1 P"xstop" ; configure switch-type (e.g. microswitch) endstop for high end on X via pin xstop
M574 Y2 S1 P"ystop" ; configure switch-type (e.g. microswitch) endstop for high end on Y via pin ystop
M574 Z2 S1 P"zstop" ; configure switch-type (e.g. microswitch) endstop for high end on Z via pin zstop; Z-Probe
M558 P0 H5 F120 T3000 ; disable Z probe but set dive height, probe speed and travel speed
M557 R85 S20 ; define mesh grid; Heaters
M140 H-1 ; disable heated bed (overrides default heater mapping); Fans
; Tools
M563 P0 D0 F0 ; define tool 0
G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C; Custom settings are not defined
homedelta.g
; homedelta.g
; called to home all towers on a delta printer
;
; generated by RepRapFirmware Configuration Tool v3.3.16 on Sat Apr 15 2023 11:44:38 GMT+0200 (czas środkowoeuropejski letni)
G91 ; relative positioning
G1 H1 X275 Y275 Z275 F1800 ; move all towers to the high end stopping at the endstops (first pass)
G1 H2 X-5 Y-5 Z-5 F1800 ; go down a few mm
G1 H1 X10 Y10 Z10 F360 ; move all towers up once more (second pass)
G1 Z-5 F3000 ; move down a few mm so that the nozzle can be centred
G90 ; absolute positioning
G1 X0 Y0 F3000 ; move X+Y to the centrebed.g
; bed.g
; called to perform automatic delta calibration via G32
;
; generated by RepRapFirmware Configuration Tool v3.3.16 on Sat Apr 15 2023 11:44:38 GMT+0200 (czas środkowoeuropejski letni)
M561 ; clear any bed transform
; Probe the bed at 3 peripheral and 3 halfway points, and perform 6-factor auto compensation
; Before running this, you should have set up your Z-probe trigger height to suit your build, in the G31 command in config.g.
G30 P0 X0 Y84.9 H0 Z-99999
G30 P1 X73.53 Y-42.45 H0 Z-99999
G30 P2 X-73.53 Y-42.45 H0 Z-99999
G30 P3 X0 Y42.4 H0 Z-99999
G30 P4 X36.72 Y-21.2 H0 Z-99999
G30 P5 X-36.72 Y-21.2 H0 Z-99999
G30 P6 X0 Y0 H0 Z-99999 S6
; Use S-1 for measurements only, without calculations. Use S4 for endstop heights and Z-height only. Use S6 for full 6 factors
; If your Z probe has significantly different trigger heights depending on XY position, adjust the H parameters in the G30 commands accordingly. The value of each H parameter should be (trigger height at that XY position) - (trigger height at centre of bed)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: 0JD0M-9P6B2-NJ4S8-6JKDG-3S86S-1B72M
Used output buffers: 1 of 26 (12 max)
=== RTOS ===
Static ram: 23836
Dynamic ram: 73452 of which 344 recycled
Never used RAM 14448, free system stack 184 words
Tasks: NETWORK(ready,10.7%,257) HEAT(notifyWait,0.0%,388) Move(notifyWait,0.0%,363) MAIN(running,83.0%,442) IDLE(ready,6.4%,30), total 100.0%
Owned mutexes: WiFi(NETWORK)
=== Platform ===
Last reset 00:00:14 ago, cause: power up
Last software reset at 2023-04-15 14:12, reason: User, GCodes spinning, available RAM 14376, slot 2
Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0041f000 BFAR 0xe000ed38 SP 0x00000000 Task MAIN Freestk 0 n/a
Error status: 0x00
Aux0 errors 0,0,0
Step timer max interval 0
MCU temperature: min 28.0, current 29.5, max 29.9
Supply voltage: min 24.0, current 24.1, max 24.4, 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 n/a
Driver 1: standstill, SG min n/a
Driver 2: standstill, SG min n/a
Driver 3: standstill, SG min n/a
Driver 4: standstill, SG min n/a
Driver 5:
Driver 6:
Driver 7:
Driver 8:
Driver 9:
Driver 10:
Driver 11:
Date/time: 2023-04-16 13:39:07
Cache data hit count 557031466
Slowest loop: 5.97ms; fastest: 0.17ms
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 3.3ms, write time 0.0ms, max retries 0
=== Move ===
DMs created 83, segments created 0, maxWait 0ms, bed compensation in use: none, comp offset 0.000
=== MainDDARing ===
Scheduled moves 0, completed 0, 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 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
=== 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
=== Network ===
Slowest loop: 12.46ms; fastest: 0.00ms
Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0)
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 48:3f:da:a6:f0:84
WiFi Vcc 3.38, reset reason Power up
WiFi flash size 2097152, free heap 22776
WiFi IP address 192.168.0.179
WiFi signal strength -75dBm, mode 802.11n, reconnections 0, sleep mode modem
Clock register 00002002
Socket states: 0 0 0 0 0 0 0 0M98 P"config.g"
HTTP is enabled on port 80
FTP is disabled
TELNET is disabled
Tool 0: offsets X0.000 Y0.000 Z0.000 -
@ArekRucki
Your config looks good.
Here's what I suggest:
Before every print you manually move the printhead to the height of the "new" build plate (your clay thing). Then sent the "G92 Z0" gcode. I see you're using a PanelDue, so I'd make a macro out of this to make it easier when used often.For this to work you probably also need to adjust the homed height. You need to figure out the homed height without any clay plate. I am assuming that this should be 290mm? This is the value that should be in your config.g.
Why do it like this? Your homed height of 290 ensures that you can reach all the way down to the buildplate (or whatever height the new clay plate is at). Moving the printhead to Z0 means it would now touch the buildplate. You don't want that. So next, move the printhead up by maybe 50mm (Now Z=50). Next, add the clay plate and move the printhead down until the nozzle touches the clay. Now you tell the printer that this is the new zero position by sending G92 Z0. DONT HOME THE PRINTER AFTERWARDS!! Now start the print.
If you want to print on a new clay plate, home the printer again, because otherwise you can't move "below" the previous zero-position. Then repeat the procedure -
@nikscha Many thanks. Now it looks more clear to me. But you think I could use delta autocalibration and bed leveling in this procedure? Yesterday I've examined one of my build plates by touching it with the nozzle in different points and get values from 14,30 to 15,15. It gives 0,85 mm difference. I don't know it it is big...
Other question is if in my case some z probe (bltouch or DC42 IR sensor for example) would help? -
@nikscha said in Delta printer calibration procedure:
Before every print you manually move the printhead to the height of the "new" build plate (your clay thing). Then sent the "G92 Z0" gcode. I see you're using a PanelDue, so I'd make a macro out of this to make it easier when used often.
To automate this, use M558 P0 in config.g and then when a G30 is sent you will be prompted to jog the nozzle down to touch the bed.
-
@ArekRucki said in Delta printer calibration procedure:
Other question is if in my case some z probe (bltouch or DC42 IR sensor for example) would help?
Yes having a probe on a delta is very useful. Preferably it would be a nozzle contact probe like a smart effector so that there are no offsets between nozzle and probe, though maybe not possible with a clay printer.
-
@Phaedrux If I had any Z probe is the @nikscha proposed pocedure still valid?
- turn on the printer
- run autocalibration
- do not home
- start print
- when the print is finished change the build plate
- home the printer
- run autocalibration and start new print?
Do I need to save the autocalibration results evertytime in this case?
Do I need to home in point 6? -
@Phaedrux I read about DC42 IR sensor and BLToutch probes and don't know which to choose. What do you suggest in my case? IR sensor sounds good but I read that it needs 1,5 mm distance
from the nozzle. I think it is a bit to close and can be risky with clay. Can get dirty easily. -
Perhaps a detachable microswitch style probe would be better in your case?
-
@Phaedrux Thanks.
Could you please look at this procedure? As I wrote before I would print clay
and change print bed very often.- turn on the printer
- run autocalibration
- do not home
- start print
- when the print is finished change the build plate
- home the printer
- run autocalibration and start new print?
Do I need to save the autocalibration results evertytime in this case?
Do I need to home in point 6? -
You'd still want to home the delta towers first (G28 aka homedelta.g) and then do a delta calibration (G32 aka bed.g) before starting the print. Doing the delta calibration without a probe would be pretty tedious. Using a delta without a probe is not recommended.
You can save the calibration between prints, but if the bed surface is changing, then you're likely going to need to re-run it.
-
@Phaedrux Sorry for such simple questions. I read "Calibrating a delta printer" in user manual
1000 times and read lot of forum threads but I am totally new on this field.
So I command G28, then G32, then save? And everytime I run new G32 the "fresh" results will override the saved ones, right? Till I reboot my Duet, right?
And for saving should I use this procedure:?
If you are running firmware 1.17 or later, you can run M500 to save new M665 and M666 commands in the config-override.g file. Then, if you have an M501 command at the end of your config.g file, it will run config-override.g at that point, so that the new commands override the ones earlier in your config.g file.
Many, many thanks... -
Since these commands are just macros, or text files containing multiple commands, you can simplify things a bit.
bed.g gets called by G32. So within that file you can have it home first, do the calibration points, then save the results. Using your posted file above as example
; bed.g ; called to perform automatic delta calibration via G32 ; ; generated by RepRapFirmware Configuration Tool v3.3.16 on Sat Apr 15 2023 11:44:38 GMT+0200 (czas środkowoeuropejski letni) M561 ; clear any bed transform ; Probe the bed at 3 peripheral and 3 halfway points, and perform 6-factor auto compensation ; Before running this, you should have set up your Z-probe trigger height to suit your build, in the G31 command in config.g. G28 ; home the delta towers G30 P0 X0 Y84.9 H0 Z-99999 G30 P1 X73.53 Y-42.45 H0 Z-99999 G30 P2 X-73.53 Y-42.45 H0 Z-99999 G30 P3 X0 Y42.4 H0 Z-99999 G30 P4 X36.72 Y-21.2 H0 Z-99999 G30 P5 X-36.72 Y-21.2 H0 Z-99999 G30 P6 X0 Y0 H0 Z-99999 S6 M500 ; save the results ; Use S-1 for measurements only, without calculations. Use S4 for endstop heights and Z-height only. Use S6 for full 6 factors ; If your Z probe has significantly different trigger heights depending on XY position, adjust the H parameters in the G30 commands accordingly. The value of each H parameter should be (trigger height at that XY position) - (trigger height at centre of bed)
Then all you would need to do is send G32 to run bed.g and it will home the towers, calibrate, and save the results.
However, as I said above, if you're changing the build surface, you would likely need to re-run the calibration before every print anyway, so the saving portion isn't really important.
And the calibration without a probe isn't very practical.
-
@ArekRucki It's me again ^^
I'm not sure about this procedure, because it only works if you can probe on the buildsurface which in your case will be made of clay. You COULD run autocalibration on it IFF it's parallel to the buildplate. And even then you can't use a method that touches the buildsurface because the soft clay would probably deform. The IR sensor could work, or maybe an inductive probe that senses the metal underneath the clay. But even then it probably won't! The whole point of autocalibration goes away. You should run autocalibration on a surface that is part of the printers frame. That's because autocalibration will set parameters like length of the delta arms, homed height, or even scew of the towers, depending on the parameter.Considering that it's a clay printer I assume that accuracy isn't crucial? Because then I would do without autocalibration if I were you and instead just measure the delta parameters as accurately as you can. It's not so hard, you probably know the length of your arms as well the distance between them?
I propose the following procedure:
- turn on printer
- home
- place clay on printbed
- move printhead down until nozzle touches clay
- send G92 ZO
- start print
- remove print
- home
- place clay on printbed
- move head down until nozzle touches clay
- send G92 Z0
- etc
If you insist on autocalibration on clay:
The S parameter of G30 has to be 3!
Use a probe that doesn't touch the clay (IR probe?)
Get the clay as even as possible!
Many probe points to average out unevenness.Procedure:
- start printer
- home
- place clay
- autocalibration on clay
- start print
- stop print
- home
- etc
-
@Phaedrux Thanks a lot. Now that is clear to me. Have a nice day!
-
@nikscha Thanks for your time. I was not very clear. I'd have normal print bed e.g. plywood or plaster board. I think both of it have fairly even sufrace. The material I'd print with is clay.
But yes, I need to change the plates every print so they can differ in few milimeters each other.
So I will buy a z probe as @Phaedrux suggests. I still not sure which one. As I wrote few post above it could easily get dirty with clay. For now I'd bet on BL Touch. -
@ArekRucki said in Delta printer calibration procedure:
I still not sure which one.
I suggested a detachable probe, something like this.
https://www.amazon.ca/Printer-Precision-Z-Probe-Leveling-nozzles/dp/B07V6GR72Q
-
@ArekRucki said in Delta printer calibration procedure:
But yes, I need to change the plates every print so they can differ in few milimeters
If the plates are flat but the thickness varies then I suggest the following:
-
Calibrate the printer just once (without a probe) to establish the delta radius and endstop corrections. Save the result.
-
Before each print, after homing command the nozzle to a few mm above bed centre and execute G30. This will account for the bed thickness having changed.
-
Ensure that your slicer start GCode does not home the printer at the start.
-
-
@dc42 OK. Thank you.
But now I've examined one of my build plates by touching it with the nozzle in different points and get values from 14,30 to 15,15. I guess the whole bed is a bit tilted. It gives 0,85 mm difference. I don't know it it is big... So when I go with G32 for the very first time with 6-factor calibration and save the results will it eliminate these differences? Or somwhere in higher parts the nozzle will hit the bed? -
@ArekRucki if the bed is tilted wrt the towers then running 6 factor calibration once and saving the result will correct for it. OTOH if the problem is that the bed plates vary in thickness from one side to the other, you will need to recalibrate every time you change the bed plate.