Absolutely lost in G29, G32



  • @en_passant said in Absolutely lost in G29, G32:

    M208 X355 Y355 Z325 ; axis max

    You're missing the S0 here.



  • It looks like you're using the zmax homing switch to home the printer. This is fine in certain situations, but generally it is problematic because it's more important to know where z0 is rather than where the end of the axis is, and since you really need to know where z0 is in the first place to know where the axis max is, it has a tendency to drift, causing problems when you need to actually be at z0.

    Since you have a z probe, it makes more sense to use it to find z0 during homing. Then the zmax endstop can be used for special cases like resuming from power failure.

    See this section.
    https://duet3d.dozuki.com/Wiki/ConfiguringRepRapFirmwareCartesianPrinter#Section_Homing_Z



  • @phaedrux said in Absolutely lost in G29, G32:

    It looks like you're using the zmax homing switch to home the printer. This is fine in certain situations, but generally it is problematic because it's more important to know where z0 is rather than where the end of the axis is, and since you really need to know where z0 is in the first place to know where the axis max is, it has a tendency to drift, causing problems when you need to actually be at z0.

    Since you have a z probe, it makes more sense to use it to find z0 during homing. Then the zmax endstop can be used for special cases like resuming from power failure.

    See this section.
    https://duet3d.dozuki.com/Wiki/ConfiguringRepRapFirmwareCartesianPrinter#Section_Homing_Z

    Gotcha! Just been trying to wrap my noodle around this. I hadn't touched it - that's how it was from Fusion3 when I was on 1.17 and when I updated to 2.02 and ran it (after fixing the issue with 2.02+ Y drive reversed), it appeared to be working so didn't wish to tinker!

    I think this might also be linked to the point I made previously:

    @en_passant said in Absolutely lost in G29, G32:
    I did read over that but not sure I fully got the idea of it. I have tweaked my config.g as you've mentioned and also noticed that I don't know my z max! The website says it's 320, my config.g had 323 (which I've never touched before) and on simplify3d it says 315!

    When I had G28 Z0 I could move the z at least -2 before the probe so I changed it to 325, restarted and ran this:

    G28 ; home all
    G1 Z0 ; move to z=0 (not nozzle = 0)
    G1 X177.5 Y177.5 ; move xy to centre
    M114 ; current position, should be: " X:177.500 Y:177.500 Z:0.000 "
    G91 ; set relative co-ords

    G1 Z-1 F100 S2 ; move z -1mm @ 100mm/min (did this 1 times without ir - 2nd time ir registered)
    G1 Z-0.1 F100 S2 ; move z -1mm @ 100mm/min (did this 5 times without ir - 6th time ir registered)
    G1 Z-0.05 F100 S2 ; move z -1mm @ 100mm/min (did this 1 times without ir - 2nd time ir registered)

    ; from z=0 to sensor triggers (web control z probe = 536): -1.60

    G1 Z-0.1 F100 S2 ; move z -1mm @ 100mm/min (did this 13 times then nozzle touched bed)

    ; from sensor trigger (z=0, -1.60) to nozzle touches bed: -1.30

    0_1564258746758_Screenshot 2019-07-27 at 21.05.14.png
    That's after I ran it up to the nozzle just touched (1.30 above when the sensor activated). I've changed G31 to Z1.3 but do I also change the M208 Z325 to Z326.60?

    In the article it says:
    G91 ; relative mode
    G1 S2 Z4 F200 ; raise head 4mm to ensure it is above the Z probe trigger height
    G90 ; back to absolute mode
    G1 X100 Y100 F2000 ; put head over the centre of the bed, or wherever you want to probe
    G30 ; lower head, stop when probe triggered and set Z to trigger height

    However, steps 3 & 4 - back to absolute... if X & Y haven't been homed (for example, if printer has been powered off) then this won't work?

    I'd also like to home the Z from the centre - so in order to do this I need to ensure that X&Y are also homed so I can put them to absolute points for centre. I then need to move it to the endstop (that's the behaviour I'm used to atleast? So, I haven't touched the X&Y, but I've changed my homeall & homez.

    home z was:

    ;M561 ; transform identity: cancels bed-plane fitting (probing)
    ;G91 ; relative co-ords (from last position, not origin)
    ;G1 Z500 F500 S1 ; z 500mm (> max) @500mm/min - until limit sw. detects
    ;G1 Z-4 F200 ; z -4mm @ 200mm/min
    ;G1 Z10 S1 ; z 10mm @ 200mm/min - until limit sw. detects
    ;G90 ; absolute co-ords (relative to origin)

    home z now:

    ; move z 10mm (clear), home xy, xy centre, home z, move z to endstop

    ; z 10mm, home xy

    M561 ; transform identity: cancels previous bed-plane (mesh)
    G91 ; relative co-ords (from last position, not origin)
    G1 S2 Z10 F200 ; z 10mm @200mm/min (ensure it's below probe trigger height)
    G1 X-500 Y-500 F3000 S1 ; x & y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X-500 S1 ; x -500mm (> max) @3000mm/min - until limit sw. detects
    G1 Y-500 S1 ; y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X4 Y4 F600 ; x & y 4mm @ 600mm/min
    G1 X-10 S1 ; x -10mm @ 600mm/min - until limit sw. detects
    G1 Y-10 S1 ; y -10mm @ 600mm/min - until limit sw. detects

    ; xy centre, home z

    G90 ; absolute co-ords (relative to origin)
    G1 X150 Y150 F6000 ; xy 150mm [absolute] @ 6000mm/min
    G1 X177.5 Y177.5 F1000 ; xy 177.5mm [absolute] (bed-centre) @ 1000mm/min
    G30 ; raise bed until probe triggered & set z to trigger height

    ; z to endstop (zmax), set asbo co-ords

    G91 ; relative co-ords (from last position, not origin)
    G1 Z300 F500 S1 ; z 300mm @500mm/min
    G1 Z200 F150 S1 ; z 200mm (> max) @ 150mm/min - until limit sw. detects
    G90 ; absolute co-ords (relative to origin)

    home all was:

    ;M561 ; transform identity: cancels bed-plane fitting (probing)
    ;G91 ; relative co-ords (from last position, not origin)

    ; home z

    ;G1 Z500 F500 S1 ; z 500mm (> max) @500mm/min - until limit sw. detects
    ;G1 Z-4 F200 ; z -4mm @ 200mm/min
    ;G1 Z10 S1 ; z 10mm @ 200mm/min - until limit sw. detects

    ; home x & y simultaneously

    ;G1 X-500 Y-500 F3000 S1 ; x & y -500mm (> max) @3000mm/min - until limit sw. detects
    ;G1 X-500 S1 ; x -500mm (> max) @3000mm/min - until limit sw. detects
    ;G1 Y-500 S1 ; y -500mm (> max) @3000mm/min - until limit sw. detects
    ;G1 X4 Y4 F600 ; x & y 4mm @ 600mm/min
    ;G1 X-10 S1 ; x -10mm @ 600mm/min - until limit sw. detects
    ;G1 Y-10 S1 ; y -10mm @ 600mm/min - until limit sw. detects

    ;G90 ; absolute co-ords (relative to origin)

    home all now:

    ; move z 10mm (clear), home xy, xy centre, home z, move z to endstop, home xy

    ; z 10mm, home xy

    M561 ; transform identity: cancels previous bed-plane (mesh)
    G91 ; relative co-ords (from last position, not origin)
    G1 S2 Z10 F200 ; z 10mm @200mm/min (ensure it's below probe trigger height)
    G1 X-500 Y-500 F3000 S1 ; x & y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X-500 S1 ; x -500mm (> max) @3000mm/min - until limit sw. detects
    G1 Y-500 S1 ; y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X4 Y4 F600 ; x & y 4mm @ 600mm/min
    G1 X-10 S1 ; x -10mm @ 600mm/min - until limit sw. detects
    G1 Y-10 S1 ; y -10mm @ 600mm/min - until limit sw. detects

    ; xy centre, home z

    G90 ; absolute co-ords (relative to origin)
    G1 X150 Y150 F6000 ; xy 150mm [absolute] @ 6000mm/min
    G1 X177.5 Y177.5 F1000 ; xy 177.5mm [absolute] (bed-centre) @ 1000mm/min
    G30 ; raise bed until probe triggered & set z to trigger height

    ; z to endstop (zmax), xy home, set asbo co-ords

    G91 ; relative co-ords (from last position, not origin)
    G1 Z300 F500 S1 ; z 300mm @500mm/min
    G1 Z200 F150 S1 ; z 200mm (> max) @ 150mm/min - until limit sw. detects
    G1 X-500 Y-500 F3000 S1 ; x & y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X-500 S1 ; x -500mm (> max) @3000mm/min - until limit sw. detects
    G1 Y-500 S1 ; y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X4 Y4 F600 ; x & y 4mm @ 600mm/min
    G1 X-10 S1 ; x -10mm @ 600mm/min - until limit sw. detects
    G1 Y-10 S1 ; y -10mm @ 600mm/min - until limit sw. detects
    G90 ; absolute co-ords (relative to origin)

    Anything I'm obviously missing?

    e_p



  • @en_passant
    I tried to edit but the post was beyond 10000 characters (....), so:

    EDIT: I changed the S's from before to H's and changed the G1 S2 Z4 F200 from the homing Z using Z probe example which I have within the above code as G1 Z10 F200 H1 so as not to ignore the endstop, incase it's at or within 10mm of the z-endstop limit switch when I press home all (more likely than me punching G28 into the console).

    I also changed the final Z movement where it goes to the endstop to H3 to replace the value in M208.

    Here's the latest:

    ; homeall.g
    ; 28/7/19
    ; move z 10mm (clear), home xy, xy centre, home z, move z to endstop, home xy

    ; z 10mm, home xy

    M561 ; transform identity: cancels previous bed-plane (mesh)
    G91 ; relative co-ords (from last position, not origin)
    G1 Z10 F200 H1 ; z 10mm @200mm/min (ensure it's below probe trigger height)
    G1 X-500 Y-500 F3000 H1 ; x & y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X-500 H1 ; x -500mm (> max) @3000mm/min - until limit sw. detects
    G1 Y-500 H1 ; y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X4 Y4 F600 ; x & y 4mm @ 600mm/min
    G1 X-10 H1 ; x -10mm @ 600mm/min - until limit sw. detects
    G1 Y-10 H1 ; y -10mm @ 600mm/min - until limit sw. detects

    ; xy centre, home z

    G90 ; absolute co-ords (relative to origin)
    G1 X150 Y150 F6000 ; xy 150mm [absolute] @ 6000mm/min
    G1 X177.5 Y177.5 F1000 ; xy 177.5mm [absolute] (bed-centre) @ 1000mm/min
    G30 ; raise bed until probe triggered & set z to trigger height

    ; z to endstop (zmax), xy home, set asbo co-ords

    G91 ; relative co-ords (from last position, not origin)
    G1 Z300 F500 H1 ; z 300mm @500mm/min
    G1 Z200 F150 H3 ; z 200mm (> max) @ 150mm/min - until limit sw. detects & set z max in m208

    G1 X-500 Y-500 F3000 H1 ; x & y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X-500 H1 ; x -500mm (> max) @3000mm/min - until limit sw. detects
    G1 Y-500 H1 ; y -500mm (> max) @3000mm/min - until limit sw. detects
    G1 X4 Y4 F600 ; x & y 4mm @ 600mm/min
    G1 X-10 H1 ; x -10mm @ 600mm/min - until limit sw. detects
    G1 Y-10 H1 ; y -10mm @ 600mm/min - until limit sw. detects

    G90 ; absolute co-ords (relative to origin)

    Just ran it and did as I hoped (no crunching into the nozzle or axis, thank god!) and M114 shows: X:0.000 Y:0.000 Z:327.923

    So now, shall check if that's what my config is showing for M208 and run G29 (fingers crossed no craziness this time!)

    Seems to be working but the last week or so has made me doubt everything I do! 😕 Anything I'm glaringly missing?

    e_p



  • @en_passant said in Absolutely lost in G29, G32:

    G91 ; relative co-ords (from last position, not origin)
    G1 Z300 F500 H1 ; z 300mm @500mm/min
    G1 Z200 F150 H3 ; z 200mm (> max) @ 150mm/min - until limit sw. detects & set z max in m208

    Good catch on using H3, however, I think the first H1 should also be H3 in case you're close enough to the end stop to trigger it during the first move. But maybe it won't matter and the second line with the H3 will catch it as well.

    You'd have to test and compare to ensure you're getting the expected behaviour from either case.

    Regarding Home Z. It's totally up to you how homez behaves. One option is to set it up like homeall so that X and Y are ensured to be homed first. Or leave it as a single G30 probe at whatever the current position is in case you want to manually jog to a point on the bed and home z there. Or you could have it home to Z max for those cases when that's what you need to do.



  • @en_passant said in Absolutely lost in G29, G32:

    So now, shall check if that's what my config is showing for M208

    It won't. The H3 will only set the M208 max value temporarily. Which is fine because you get it when you home, and it will be set until the printer is power cycled, at which point you must home again anyway.

    It doesn't get written back into config.g because there is no safe way for the firmware to write to a single specific line in the file. Hence the reason for config-override.g which gets completely re-written every time the firmware saves to it.

    So in order to save it to config-override you would need to add M500 to the end of your homing file, and then M501 to the end of config.g to load it at boot up.

    https://duet3d.dozuki.com/Wiki/Gcode#Section_M500_Store_parameters



  • @phaedrux said in Absolutely lost in G29, G32:

    @en_passant said in Absolutely lost in G29, G32:

    G91 ; relative co-ords (from last position, not origin)
    G1 Z300 F500 H1 ; z 300mm @500mm/min
    G1 Z200 F150 H3 ; z 200mm (> max) @ 150mm/min - until limit sw. detects & set z max in m208

    Good catch on using H3, however, I think the first H1 should also be H3 in case you're close enough to the end stop to trigger it during the first move. But maybe it won't matter and the second line with the H3 will catch it as well.

    You'd have to test and compare to ensure you're getting the expected behaviour from either case.

    Regarding Home Z. It's totally up to you how homez behaves. One option is to set it up like homeall so that X and Y are ensured to be homed first. Or leave it as a single G30 probe at whatever the current position is in case you want to manually jog to a point on the bed and home z there. Or you could have it home to Z max for those cases when that's what you need to do.

    Ah yes, missed that one! Better to be safe than sorry 🙂

    @phaedrux said in Absolutely lost in G29, G32:

    @en_passant said in Absolutely lost in G29, G32:

    So now, shall check if that's what my config is showing for M208

    It won't. The H3 will only set the M208 max value temporarily. Which is fine because you get it when you home, and it will be set until the printer is power cycled, at which point you must home again anyway.

    It doesn't get written back into config.g because there is no safe way for the firmware to write to a single specific line in the file. Hence the reason for config-override.g which gets completely re-written every time the firmware saves to it.

    So in order to save it to config-override you would need to add M500 to the end of your homing file, and then M501 to the end of config.g to load it at boot up.

    https://duet3d.dozuki.com/Wiki/Gcode#Section_M500_Store_parameters

    Ahh, OK. Thanks. Won't bother with that, as you said it's going to re-home when I cycle the power anyway and perhaps just as well as I've just cycled the power and ran G28 and M114 now shows as Z327.930 so .07 "drift" as you mentioned. -- Another power cycle and now 327.935 (rounded on web control to .94.)

    Tried homeall from known and unknown states with M999 and am now happy it's playing nicely!

    Now, (fingers and toes crossed!) to try G29 without it ramming into the bed.

    e_p



  • Update to above, getting there slowly...

    The print now homes without any issues so I'm pleased with that.

    My printed is glass but had 5 pieces of black tape underneath for when running the old bed-levelling I assume.

    So, I've taken the print-bed off, removed the tape and sprayed with high-temp black paint so I can run the new compensation mesh.

    I'm working on the bed-levelling assistant and have measured out the levelling screws. I put them into Solidworks so I can visualise it better:

    0_1564433812988_Screenshot 2019-07-29 at 21.56.37.png

    The greyed area is the glass, the square within is the print space, the X's are X0 Y0 and X177.5 Y177.5 (max is X355, Y355 so halfway point), the circles are the levelling screw positions and the middle one is a standoff:

    0_1564434068900_Screenshot 2019-07-29 at 22.00.53.png

    I've updated my config with the 4 levelling screw positions:

    M671 X-27.5:-27.5:365:365 Y-40:414:414:-40 P0.5 ; screw positions: front left (X-27.5, Y-40), rear left (X-27.5, Y414), rear right (X365,Y414), front right (X365, Y-40), 0.5mm thread pitch (m3)

    I've also created bed.g, using the axis max's as they're the closest points to the screws I can get to:

    G28 ; home all
    G30 P0 X0 Y0 Z-99999 ; probe front left
    G30 P1 X0 Y355 Z-99999 ; probe rear left
    G30 P2 X355 Y355 Z-99999 ; probe rear right
    G30 P3 X355 Y0 Z-99999 S4 ; probe front right & report adjustments needed

    I'm wondering about how to use this as I'm looking to adjust the corners against the standoff since it's under the bed.

    In the manual bed levelling assistant wiki it says:
    "When you run G32 to perform bed probing, the final G30 command (the one with the S parameter) in bed.g will cause the assistant to run ... The amount by which each screw should be adjusted is reported. The adjustment requested for the first screw is always zero."

    and

    "The value of the S parameter on the final G30 command in bed.g must equal the number of adjusting screws."

    So, how can I make it run to X177.5 Y177.5 for the first G30 then move to the others above - but only use probes 2, 3, 4 & 5 when it reports?

    e_p



  • So, having screwed the corners down then running G28 - all good. At the end of G28, my bed goes to z-endstop as I've asked it to. I then ran up the bed to Z5 and jogged it until and the nozzle just comes into contact with the bed nicely - I then moved to Z5 and over to each corner then Z0 at each of the corners and they're all beyond Z0 so I have some daylight and some bed-levelling required.

    I then ran G32 and it appeared OK at first: it ran G28 then brought the bed back up again whilst head remained at 0,0 then when the bed got to ~Z10 it slowed, the head moved to ~10,10 (my bed.g defines P0 as X0 Y0 so not sure what happened there - then it brought the bed towards it, the z-probe triggers then it lowers and moves the head towards straight in the Y however, when it gets to the end of Y it appears to continue running and trying to jump the frame?

    Caught me off guard, as it appeared that the first point had worked (albeit moving rather than staying at 0,0). I thought perhaps because of my print volume being smaller than the print bed and my screws being so far behind the print-bed (Xmax & Ymax = 355, levelling screws = X-27.5, Y414) so I adjusted M671 and tried again but same result.

    config:

    M569 P0 S1 ; drive 0 - forward [x motor]
    M569 P1 S1 ; drive 1 - forward [y motor]
    M569 P2 S0 ; drive 2 - backward [z motor]
    M569 P3 S0 ; drive 3 - backward [e motor]
    M569 P4 S0 ;; drive 4 - backwards [not used]
    M574 X1 Y1 Z2 S1 ; endstop config
    M669 K1 ; op mode [corexy] (2.03+)
    M92 X43.56 Y43.56 Z426.67 E464.93 ; steps/mm [x,y,z,extruder]
    M906 X1300 Y1300 Z1400 E1400 I100 ; motor currents (mA)
    M201 X2000 Y2000 Z300 E4000 ; accelerations (mm/s^2)
    M203 X33000 Y33000 Z1000 E10000 ; max speeds (mm/min)
    M566 X600 Y600 Z40 E950 ; max jerk speeds mm/minute
    M208 X355 Y355 Z325 S0 ; axis max
    M208 X0 Y0 Z0 S1 ; axis min
    ; M671 X-27.5:-27.5:365:365 Y-40:414:414:-40 P0.5
    ; bed-levelling screws: front left (X-27.5, Y-40), rear left (X-27.5, Y414), rear right (X365,Y414), front right (X365, Y-40), 0.5mm thread pitch (m3)
    M671 X-10:-10:365:365 Y-10:365:365:-10 P0.5
    G21 ; work in mm
    G90 ; absolute co-ords
    M83 ; relative movements (extruder)

    bed.g:

    ; bed.g
    ; (manual bed levelling assistant)
    ; 29/7/19

    G28 ; home all
    G30 P0 X0 Y0 Z-99999 ; probe front left
    G30 P1 X0 Y355 Z-99999 ; probe rear left
    G30 P2 X355 Y355 Z-99999 ; probe rear right
    G30 P3 X355 Y0 Z-99999 S4 ; probe front right & report adjustments needed

    I've been all through the wikis but not sure where I might be going wrong?!

    e_p



  • @en_passant said in Absolutely lost in G29, G32:

    I thought perhaps because of my print volume being smaller than the print bed and my screws being so far behind the print-bed (Xmax & Ymax = 355, levelling screws = X-27.5, Y414) so I adjusted M671 and tried again but same result.

    It can't go beyond the axis maxima. Even in your revised M671 X365 is greater than your X axis maxima of 355.

    Luckily, you can adjust your maxima and minima to account for the extra distance beyond where your print surface actually exists. You can set your minima value to be negative by the distance from the edge of your print surface to the actual extent of travel.

    This means that the front corner of the printable surface is 0,0 and any X travel to the left of that is negative, and any Y travel in front of that is negative.

    This may help a bit as well.
    https://duet3d.dozuki.com/Wiki/Centering_the_bed_or_setting_the_bed_origin

    Does that make sense, or did I mistake how your print bed and printable surface are related?


Log in to reply