Non standard use of Mesh Bed Compensation and three Z axis.
We continue with the construction of the printer with 3 independent Z axes in which each one has a replaceable head.
We have been working on the closed loop axes (OM motors, drivers and SMC guides) and the configuration of all the 1XD (6) and 1LC (3 at the moment) while other parts of the HW continue to arrive. X and Y axes works as expected.
These three Z axes must all be treated as Z (0, 1, 2) or each as an independent axis (Z, U, V)? Only one will be used at the same time.
We have a deployable probe system integrated in the Z1 axis, but what we would like would be for the axes to make their home to Z max (we have already done this), but at the same time the probe would only used to establish the Mesh bed compensation and not the Z offset/travel.
To establish the z-min of each tool, we will install an endstop flushed with the printing surface, where each head will establish its offset Z = 0 by clicking on it (it has a known travel of 0.3mm).
The idea is to simply be able to obtain a map of the printing surface independent of the heads, the bed being fixed, and for each tool to set its z offset with the button. We would set the XY offset of each tool manually because it does not vary.
Noozles are single-use disposables, so we need to set their Z offset precisely on each tool use.
From a configuration point of view, how should it be done?
I'm sure there is more than one way to do that.
I'd define Z,U,V axes and home them to max with G1 H1... in the startup phase. (makes it easier to change nozzles)
Then in the tool change macros you set Z=0 datum with G30. You can use G30 on U and V in the tpost#.g macro, after the Z driver is switched over to U or V respectively. Parking the tool would be at the max. position. (G1 H1 again)
It's untested, so try it with a grain of salt.
@o_lampe This part its the most clear for us, this is at the moment the solution that we have as most feasible.
The problem arise when Z probe for Mesh bed compensation enters the equation.
That should work without extra action. As soon as you select tool # with Z-axis rerouted to U or V, you are able to use mesh leveling.
Here's an example of how I reroute Y-axis to V (driver 5):
M584 X0 Y1 Z2 E3:4 V5 M563 P1 D1 H2 S"nozzle08" F2 Y5
@o_lampe Thank you!
We'll explore it from your example.
This is our configuration file from which we would start:
M569 P40.0 S1 ; physical drive 40 goes forwards X M569 P41.0 S1 ; physical drive 41 goes forwards Y1 M569 P42.0 S1 ; physical drive 42 goes forwards Y2 M569 P43.0 S0 ; physical drive 43 goes backwards Z1 (Z) M569 P44.0 S0 ; physical drive 44 goes backwards Z2 (U) M569 P45.0 S0 ; physical drive 44 goes backwards Z3 (V) M569 P20.0 S1 ; physical drive 20 goes forwards E0 M569 P21.0 S1 ; physical drive 20 goes forwards E1 M569 P22.0 S1 ; physical drive 20 goes forwards E2 M584 X40.0 Y41.0:42.0 Z43.0 U44.0 V45.0 E20.1:21.1:22.1 ; set drive mapping M350 X1 Y1 V1 Z1 U1 V1 E16:16:16 I1 ; configure microstepping with interpolation M92 X150.53 Y150.53 Z100.12 U100.12 V100.12 E420.00:420.00:420.00 ; set steps per mm M566 X900.00 Y900.00 Z500.00 U500.0 V500.0 E120.00:120.00:120.00 ; set maximum instantaneous speed changes (mm/min) M203 X18000.00 Y18000.00 Z12000.00 U12000.00 V12000.00 E1200.00:1200.00:1200.00 ; set maximum speeds (mm/min) M201 X1500.00 Y1500.00 Z500.00 U500.00 V500.00 E250.00:250.00:250.00 ; set accelerations (mm/s^2) M906 E1000:1000:1000 ; set motor currents (mA) M84 S0 ; Disable motor idle current reduction ; Axis Limits M208 X0 Y0 Z0 U0 V0 S1 ; set axis minima M208 X400 Y250 Z100 U100 V100 S0 ; set axis maxima ; Endstops M574 X1 S1 P"!40.io0.in" ; configure active-high endstop for low end on X via pin !40.io0.in M574 Y1 S1 P"!41.io0.in" ; configure active-high endstop for low end on Y via pin !41.io0.in o !42.io0.in ;M574 Z2 S1 P"!43.io0.in" ; configure active-high endstop for high end on Z via pin !43.io0.in M574 U2 S1 P"!44.io0.in" ; configure active-high endstop for high end on U via pin !44.io0.in M574 V2 S1 P"!45.io0.in" ; configure active-high endstop for high end on V via pin !45.io0.in M574 E1 S1 P"!20.io0.in" ; configure active-high endstop for low end on E (g-syringe) via pin !20.io0.in M574 Z1 S2 ; configure Z-probe endstop for low end on Z ; Z-Probe M950 S0 C"out4" ; create servo pin 0 for solenoid io3.out M558 P8 C"io3.in" H0 R1 F120 T5000 ; set Z probe type to bltouch and the dive height + speeds G31 P500 X0 Y0 Z1 ; set Z probe trigger value, offset and trigger height M557 X15:200 Y15:195 S20 ; define mesh grid
Still a lot of work ahead. If uncomment Z endstop config then Z-probe give us an error. Time to troubleshoot.
M950 S0 C"out4"
I'm sure out4 is not a valid name for an output.
M950 S0 C"io4.out" ; looks better
It works as shown. The solenoid trigger signal is into the 6HC board OUT4 connector. It is possible that it also works with the nomenclature that you suggest, we will test it.
Ignore comments, they get overwritten in tests constantly.
Then it's one of the 2-pin high current connectors. Makes sense.
@marcossf if you need separate meshes for the three heads, then I suggest you probe the bed three times, storing the height map under different filenames. Then you can load the appropriate height map in the tool change file.
BTW in RRF 3.4 I expect to support remapping of the Z axis per tool (same as we already do for X and Y), so it will be easier to support multiple Z axes.