reference the X-axis on both rails
-
Now that I think back it is possible to have multiple endstops on the Z axis so perhaps it would work on the X axis as well.
On the Z axis it is done like this...
M574 Z1 S1 P"estop1 + estop2 + estop3" ; configure endstops for low end on Z
where estop1, estop2 and estop3 would be the actual pin names of the endstop switch connections.
Frederick
-
@fcwilt Doesn't the endstop have to assign to a special motor? If a motor is on driver 0 and one on driver 4...both defined together as the x-axis...don't I also have to assign the endstops?
-
For the example I posted the motor assignment would look something like this:
M584 Z5:6:7
The order of the endstop assignments would have to match the order of the motor assignments:
M574 Z1 S1 P"estop1 + estop2 + estop3" ; configure endstops for low end on Z
Frederick
-
@fcwilt I understand, then I'll try it out and report back...it'll take a few days because I still have to draw and print an endstop bracket!
-
@axiom So, the campaign was a complete success!!! Thank you Frederick
-
@fcwilt Now, after this experience, a new idea comes.
I have 4 Z axes. If I buy the Due5 expansion board (it's not cheap) I would have 4 additional drivers and 4 more endstops. If I now control each Z-axis with an end stop... manually compensating for heights would also be less stressful. The only question then is, how can I do bed leveling with the Z probe? So far I have also used the Z-probe as a Z-endstop....is that even possible and do you know that or should I write this as a new topic in the entire forum? -
Take a look at this quick-and-dirty video of my 3 Z axis printer with auto-bed leveling.
I have intentionally put the bed way out of level for this video to demonstrate, what are to me, the benefits of Z axis endstop sensors.
I home the Z axis as you would the X or Y axis relying on the endstop sensors to stop the motion of each of the Z axis steppers motors.
The endstop sensors are precisely adjustable and I adjust them (a bit of trial-and-error) so homing the Z axis gets the bed very close to level.
Then I use the auto bed leveling feature of the firmware (reference G32) to get the bed as level as possible.
Now you are not likely to have the bed get as far out of level as in this video but it does show that the Z axis endstop sensors make getting the bed close to level quick and easy.
You could have trouble doing that with a Z probe alone.
Just my opinion - your mileage may vary.
Frederick
-
@fcwilt That looks very good....my question now is how I have to declare the probe for homing (axes) in the code in comparison to the sensor for the mesh bed compensation on the head...can you help me?
This is necessary for me because my bed is 800 x 700mm and the glass plate has 1.5mm fluctuations -
@fcwilt Do you also have a link to the sensors you used?
-
The Z probe is configured (reference M950, M558 and G31) just one way for all uses which are:
- setting the Z=0 Datum
- auto leveling the bed
- creating the height map
There are of course other settings that need to be made for:
- auto leveling the bed - reference M671 and G30 P#
- creating the height map - reference M557 and G29
I can help with the details as needed.
The sensors I used for the Z axis endstops where typical slotted "beam break" detectors:
These are like the ones I use but, as typical with Amazon, the specific ones I order are "no longer available":
I would avoid this style as the connector on the same side of the board as the slotted sensor makes them a bit harder to mount:
Again I can help with the details when you have need.
Frederick
-
@fcwilt ;That sounds super interesting! Your “Optical Limit Sensors” are available from German Amazon and I have ordered them and they will arrive tomorrow.
Then I will replace the mechanical endstops (2 pieces on the x-axis and 1 piece on the y-axis) and try to adjust them and of course first construct brackets for them. To test the z-stop variant (I can't order the expansion board until next week) I would simply connect a sensor. I currently use the capacitive sensor both as an endstop and for bed leveling (G29). If I now connect the optical sensor for the Z axis, I only want to use the capacitive sensor for compensation (G29). So what do I need to change in my code? Here is my current code without the optical sensors:Endstops
M574 X1 S1 P"xstop + e0stop" ; configure switch-type (e.g. microswitch) endstop for low end on X via pin xstop
M574 Y1 S1 P"ystop" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin ystop; Z-Probe two of them
M558 K0 P1 C"!zprobe.in" H5 F120 T6000 ; set Z probe type to unmodulated and the dive height + speeds
M558 K1 P8 A2 S0.2 C"!zstop" H5 F80 T3000
G31 P1000 K0 X-1 Y-61 Z0.484 ; set Z probe trigger value, offset and trigger height
G31 P1000 K1 X0 Y0 Z12.664 ; Second Z-offset
M557 X0:735 Y-27:573 S35 ; define mesh grid -
@fcwilt I can first comment out the second Z-offset in the code "K1"...that is for a later project to use a puck instead of a sheet of paper and is not relevant at the moment...so I also use the z-stop sensor Insert "!zstop" into C
-
As previously posted you have to have a M574 command for all 4 Z endstop sensors:
M574 Z1 S1 P"pin_name_for_z_sensor_1 + pin_name_for_z_sensor_2 + pin_name_for_z_sensor_3 + pin_name_for_z_sensor_4"
Remember that the order of the pin names must match the order of the steppers in your M584:
So lets assume your drive assignments for the Z steppers is like this:
M569 P5 S0 ; drive 5 - normal - Z at left front M569 P6 S0 ; drive 6 - normal - Z at left rear M569 P7 S1 ; drive 7 - normal - Z at right rear M569 P8 S1 ; drive 8 - normal - Z at right front M584 Z5:6:7:8 ; set what motors do what
And let's also assume sensor 1 will be for drive 5, sensor 2 for drive 6, sensor 3 for drive 7 and sensor 4 for drive 8.
The M574 will be as above
M574 Z1 S1 P"pin_name_for_z_sensor_1 + pin_name_for_z_sensor_2 + pin_name_for_z_sensor_3 + pin_name_for_z_sensor_4"
If the order is not correct the sensor activated will stop the wrong motor.
It is easy to check once everything is wired up and configured, asumming the bed is not yet mounted and each Z axis is free to move independently from all the others.
- Jog Z down near limit of travel
- Start a Z homing move at a nice slow speed
- Trigger by hand each sensor and verify that it stops the correct stepper
-
@fcwilt I understand that, this is for the Enstops...but what do I write for the capacitive sensor for the Meshbed compensation?
-
As mentioned the configuration of the Z probe does not change.
What you have to do is include the commands that tell the firmware how to create the height map
M557
Xaaa:bbb : Minimum and maximum X coordinates to probe
Yaaa:bbb : Minimum and maximum Y coordinates to probe
Pxx:yy : Number of points on X axis, number of points on Y axisSo for example let's say the min/max limits of your bed on the X axis is -150 to 150 and on the Y axis -100 to 100. I always place X=0 and Y=0 at the center of the bed so the min/max limits are as you see.
Now you have to determine where in that area your probe can reach - this is determined by the X and Y offsets of the probe and the possible range of motion outside of the min/max limits.
So let's assume your probe has an X offset of 0 and a Y offset of +25.
Let us also assume your probe can reach from -150 to +150 on the X axis and from -90 to +100 on the Y axis.
You could have an M557 like this:
M557 X-150:150 Y-90:150 P20:15
Which means the mesh would have 20 points along the X axis and 15 points along the Y axis, for a total of 300 points. And the mesh would span from -150 to 150 on the X axis and from -90 to +100 on the Y axis.
So to create the height map you would:
- Move to Z=5
- Move the probe to the center of the bed, taking into account the probe offset in Y
- Execute a G30 to set the Z=0 Datum
- Execute a G29 S0 to probe the bed and create the height map
Feel free to ask any questions.
Frederick
-
@fcwilt Can I also place the Z-probe 10mm below the nozzle and then still move the bed closer to the head...if so, where and how can I enter this in the code?
-
@fcwilt Sorry, I don't mean the probe but the endstops
-
Yes - the "flag" that you fashion to slide into the slot and break the beam can travel beyond the slot if needed.
You want the position of the sensors to be easily adjustable so you can get them in the same position - or as near as possible.
When you execute a G1 move with the H1 parameter the movement stops when the associated endstop sensor is triggered and the logical position of the axis is set to the min/max value as specified in M208. The M574 command that configures the endstop specifies if it is at the "high" end or the low "end" of the axis, thus determining if the max value from M208 is used or the min value.
Your Z min value is likely to be 0. But if your endstops trigger at, say, 10mm away from 0, you have a disconnect between the physical Z position (-10) and the logical Z position (0).
That is easily dealt with. After the G1 H1 command that does the homing just add a G92 Z### where ### is the actual physical position on the Z axis (-10 in the example above). Now the logical and physical positions will be in sync at -10 and then you can move Z to physical 0.
Hope that clears things up.
Frederick
-
@fcwilt So I connected the probe to test it and tried it out successfully.
The problem is that the Z axis does not stop when the end stop is triggered manually but only when the probe is triggered. But I would like to use the end stops for stopping and the probe only for mesh bed compensation. Here my code:; Endstops
M574 X1 S1 P"xstop + e0stop" ; configure switch-type (e.g. microswitch) endstop for low end on X via pin xstop
M574 Y1 S1 P"ystop" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin ystop
M574 Z1 S1 P"zstop" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin ystop; Z-Probe
M558 K0 P1 C"!zprobe.in" H5 F120 T6000 ; set Z probe type to unmodulated and the dive height + speeds (Kapazitiver Sensor)
M557 X0:735 Y-27:573 S35 ; define mesh grid -
Do you have anything else in the config.g file that is already using the "zstop" input?
Errors like that don't show up when you boot (or re-boot) the printer.
Once up and running you can execute from the DWC console M98 P"config.g" and you may see error messages.
And remember to use G32 to do auto bed leveling you will need 4 Z axis endstops and thus 4 unused inputs.
Frederick