I could use some help
-
@mac here’s a picture that I think is where the print head thinks Home is?
Mark
-
@mac said in I could use some help:
@droftarts I'm posting what's above this because the language says the end stops are "high end," but the code ends with S1, not S2?
Hey mac,
The number after the letter (X, Y or Z) specifies where the endstop is located - high end or low end of axis.
The S parameter specifies the type of endstop. From the docs for M574:
M574 Parameters
Xnnn Position of X endstop: 0 = none, 1 = low end, 2 = high end.
Ynnn Position of Y endstop: 0 = none, 1 = low end, 2 = high end.
Znnn Position of Z endstop: 0 = none, 1 = low end, 2 = high end.P"pin_name" Defines the pin name(s) that the endstop(s) for the specified axis are connected to, see Pin Names. Needed when S=1. May need ! before pin name to invert signal, or ^ to enable the pullup resistor, for example on the Duex expansion board.
Snnn 1 = switch-type, 2 = Z probe (when used to home an axis other than Z), 3 = single motor load detection, 4 = multiple motor load detection
This command must be later in config.g than the M584 command that creates additional axes, or axes that have multiple motors and endstops.
You may already know this but I will include just to be safe.
When you execute a G1 H1 command it stops when it activates an endstop sensor.
At that point the logical position of the axis is set to axis min or max (see M208) depending on the declared position of the endstop (high or low).
There is nothing that insures that physical position at that point matches the logical position.
If you have an endstop at the low end and the axis min is 0 but the endstop activates at 5 the logical position will be set to 0 but that physical position will be 5.
To keep the logical and physical positions in sync you can:
- insure the point at which the endstop activates matches the min/max for the axis (as appropriate)
- adjust the logical position using a combination of G1 moves and G92 set logical position commands.
Frederick
-
@mac said in I could use some help:
@droftarts I'm posting what's above this because the language says the end stops are "high end," but the code ends with S1, not S2?
Yes, sorry, I was wrong (and have since edited it), it should be X2 and Y2, with S1. X1 is for low end, X2 for high end, and the S parameter is for the endstop type, where S1 is switch, which is what you have. See https://docs.duet3d.com/en/User_manual/Reference/Gcodes/M574
To get the homing where you want it, it's a process of editing the M208 limits. So that when it's homed at the maximum, eg X210 might be the endstop and where it's on the edge of the bed on the right side, if you move it back to X0, it's on the edge of the bed on the left (or wherever you want it). Then the same with Y.
Ian
-
@fcwilt I didn't know any of that, like, What language is this?
But mostly I couldn't answer the questions at the end, as in, I can't even see what this is saying.
But I have a feeling that I'm going to understand this, at some point. Hopefully I have enough time left to get there.
-
@droftarts I'm going to have to read that a lot slower, I guess. I think you're suggesting that I have to enter some gcode via the console, and physically move the print head to, for instance, where I'd like it to be on each corner, I'll say, of the bed. Is that correct?
I was under the impressive that this board, with this code on it, and the information it has about the size of the bed, would already know that. But now that I'm thinking really hard about it, sure, it knows the size of the bed, but the end-stops? Where they are, it don't know 'nuthin.'
Great, just, amazingly, great.
But I'll get there.
-
@mac said in I could use some help:
I think you're suggesting that I have to enter some gcode via the console, and physically move the print head to, for instance, where I'd like it to be on each corner, I'll say, of the bed. Is that correct?
No, nothing like that.
Obviously the firmware only knows what you "tell" it about the limits of axis travel for X, Y and Z.
Unfortunately it currently assumes that the endstop for each axis activates at the min or max for that axis depending on the endstop being declared to be at the high or low end of the axis.
The size of the bed does not usually have any fixed relationship to the axis travel. The bed may be, say 300 x 300 but the X axis may be able to travel 350 and the Y axis 400. It depends on how the printer is designed.
And the endstop sensors may or may not be all the way at one end of the axis or the other. Again it depends on how the printer is designed.
One thing you generally do as you figure out the settings for the M208 and M574 commands is jog the axes back and forth and figure out things like the maximum travel for each axis and where the printable area of the bed falls in the space delimited by the max travel of each axis.
Example of how this might be done:
- execute a M564 H0 S0 - this allows jogging of the axes even if they are not homed and they can be jogged anywhere along the axis regardless of any limits set by M208
- jog the X axis all the way to the low end
- execute G92 X0 - this sets the logical position as X = 0
- jog the X axis all the way to the high end being carefully to not slam into the end the axis but just touch it gently
- read the X axis position off the DWC - you now know that maximum travel of the X axis
Then you do the same for the Y axis.
Now at this point you can edit your M208 command, in config.g, to specify the initial values of min/max for both the X and Y axis. Reboot/reset the printer and you will now not be able to travel beyond the limits of the X and Y axes, if the axis limits are enabled, which is typically the case. They would be enabled by M564 S1 which I believe is the default state after reboot/reset.
Does any of that make sense?
Once it does I can move on to the next steps.
Frederick
-
@fcwilt yes, it does make sense, because to my way of communications, you, like myself, speak in moving pictures. Thank you for that.
I’m wondering how I will determine the range (from low to high) of Z given what you described, as I have removed the end stop for Z because of the BLTouch, which is working quite well, but is still not adjusted fully?
-
@mac said in I could use some help:
@fcwilt yes, it does make sense, because to my way of communications, you, like myself, speak in moving pictures. Thank you for that.
I’m wondering how I will determine the range (from low to high) of Z given what you described, as I have removed the end stop for Z because of the BLTouch, which is working quite well, but is still not adjusted fully?
Well, I equip all my printers with Z endstops as I find it homes quicker and the homing code for all axes can be simpler.
I also have Z probes which I use for all the other Z probe purposes such as setting the Z=0 Datum, leveling the bed and creating the height map. I just don't use the Z probe for homing Z.
Regardless you would determine the limits the same way as I described for X and Y. You would jog Z until it was just touching the nozzle. Execute a G92 Z0 to set the logical position. Jog all the way to the other end and read off the Z position.
Frederick
-
@fcwilt I’m getting what you’re saying.
Here’s a snarly question that came to mind; all of this comes from that one page of RRF where you’ve already told it the size of your bed, and now you’re telling it what kind of endstops you have. Only there’s a trick to this, because the language, high and low, they’re a lot more critical and complex than the presentation suggests or describes. It seems to me that this is where the entire result went totally south because I didn’t understand the questions or the implications.
Maybe that section could be expanded? It’s very important; isn’t that right? Maybe it would help to present a couple of pictures to kind of explain what’s what?
I thought it was nothing but “is my endstop at the beginning on the travel, or at the end?” But it turns out there’s this whole language about endstops that casts them in a very different and significant light. I wish I’d known about that during that portion of the process so I could have made way better choices.
I also wish I’d know almost two months ago that speaking fluent Goode is a requirement of installing this board.
Oh, well, bitch bitch bitch. I’ll get there because Duet3D has Great people helping us morons fiddle our way through this so we can print stuff that doesn’t do nearly enough for the effort we out into it.
Venting session over and done with.
Mac
-
@mac said in I could use some help:
I thought it was nothing but “is my endstop at the beginning on the travel, or at the end?”
Basically correct aside from needing to specify the type of endstop, which is often type 0, rarely type 1, sometimes type 3 or 4. I always use type 0.
But it turns out there’s this whole language about endstops that casts them in a very different and significant light.
That I don't understand. What "language" are you talking about?
Frederick
-
@fcwilt I'm done bitching . . . however, (and maybe this isn't true), X goes side to side, typically left to right, so, the x-endstop is on the left, versus high or low. Y typically goes forwards and backwards, with the stop typically being at the back, so back is how it's described. Z goes up and down, so that enstop is at the top or the bottom of the axis. Left, right, back, front, top, bottom, those are easier ways to describe and understand the position of endstops, I think.
But that's the take of someone who doesn't know shite, so, The End, right?
Today I'm going to use all of the wonderful, albeit incorrect at times, but edited to perfection information in this thread to get my printer more together than it's been in almost a month.
Wish me luck!
-
@mac said in I could use some help:
X goes side to side, typically left to right, so, the x-endstop is on the left, versus high or low. Y typically goes forwards and backwards, with the stop typically being at the back, so back is how it's described. Z goes up and down, so that enstop is at the top or the bottom of the axis. Left, right, back, front, top, bottom, those are easier ways to describe and understand the position of endstops, I think.
Got it.
But consider this, every linear axis has two ends. The positions on the axis range from some minimum value to some maximum value. The endstop term "low" corresponds to the minimum end. The endstop term "high" corresponds to the maximum end.
These terms apply regardless of the orientation of the axis (left and right, forward and back, up and down).
They apply regardless of where the minimum and maximum ends of the axis are. If, for some strange reason, the left most X axis position was 500 and the right most X axis position was 0 the terms "low" and "high" still will be correct.
Wish me luck!
I hope all goes well.
Don't hesitate to ask for help.
Frederick
-
There’s a Blade Runner inside my printer now.
-
@fcwilt so I'm rereading this entire thread, because I've been looking for some specific gcode / language, and finally, I found it in your post. I've put some comments seeking clarification in this.
Bit 1: G1 H1 stops when it activates an endstop sensor.
Bit 2: (more important)
M564 H0 S0 allows jogging of the axes even if they are not homed.
Then (after I send that command) you can jog anywhere along the axis regardless of any limits set by M208.
Jog the X axis all the way to the low end. NOTE: on my printer the left end is the low end of the X-axis. The right end is the high end / with NO ENDSTOP. So, if I go to the Low End, I know where the printer / the firmware things 0 is, and when I go to the high end, I know the maximum run.If the idea is to set these two points (for X and Y, and Z?), this process sounds like it will work. I just have to do it correctly?
Execute (send) G92 X0 - this sets the logical position as X=0. NOTE: This gcode /command is telling my config.g file (?) that where the print head is right now is X=0.) (Or, it may be telling my config.g what I want to be the 0 and the maximum run?
Jog the X axis all the way to the high end (the other end, I'm assuming), being careful to not slam into the endstop, just touch it gently. NOTE: on my printer, the high end does not have an end-stop. The end-stop is on the other / low? end.
Read the X axis position off the DWC - you now know the maximum travel of the X axis. NOTE: I hope this isn't reversed? The point is to know the maximum travel?
Do the same for the Y axis.
Now you’re ready to edit your M208 command, pin config.g, to specify the initial values of min/max for both the X and Y axis. NOTE: this sounds like another step I have to do after I've done the above stops.
Reboot / reset the printer, and you will now be able to travel beyond the lints of the X and Y axes; if the axis limits are enabled, which is typically the case. The would be enabled by M564 S1, which I believe is the default state after reboot/reset. HMMMMMM, why would I go to all that trouble to define the boundaries, so I could go beyond them?
-
@fcwilt so I sent the command, and then I tried to move the print head. All it did was shake side to side, like it was being told to step left step right really fast.
I couldn’t believe what I was seeing. So I tried again. Three times.
Then I tried to move the bed back to its endstop. That worked. The bed moved smoothly. But I couldn’t see the metal piece of the bed that touches the endstop.
So then I looked at the info in DWC. It was a huge number, in the 400’s. I think it was negative. Then I sent the bed to the front of the printer, to see what that number would do, and it started rattling against it, like it wanted to break free.
So I turned the machine off. I spent 12 hours mounting the board under the front of the printer today, where the old board was. And re-routing all of the wiring, and trying to make everything look somewhat presentable.
And it does work worth shite.
-
@mac said in I could use some help:
Reboot / reset the printer, and you will now be able to travel beyond the lints of the X and Y axes; if the axis limits are enabled, which is typically the case. The would be enabled by M564 S1, which I believe is the default state after reboot/reset. HMMMMMM, why would I go to all that trouble to define the boundaries, so I could go beyond them?
I mentioned M564 H0 S0 so you could jog anywhere on any given axis while you determined the max travel for the axis.
The point of the G92 X0 (or Y0) was just to set the current position for that end of the axis to 0 so when you moved to the other end the position displayed by the DWC would directly readout the max travel.
There are other ways to determine the max travel, I was just trying to give you an example of using the DWC and some simply commands to do it.
M564 S1 makes it so you cannot go beyond the boundaries set by M208.
I did not go on to describing how to verify the operation of the endstop sensors and determine their actually position because I did not want to overload you with too much stuff.
I just wanted to be sure we were both on the same page with what I had posted so far.
Frederick
-
-
@fcwilt well, the X-axis is messed up, and the y axis is okay, I guess. But that shaking thing is creep pee!
-
@mac said in I could use some help:
the X-axis is messed up, and the y axis is okay, I guess. But that shaking thing is creep pee!
We can figure that out.
so I sent the command, and then I tried to move the print head. All it did was shake side to side,
What command are you referring to?
How did you try to move the print head?
Frederick
-
@fcwilt I started by entering the command that allows you to move the axis without homing first.