Delta printer - Unique situation - Help please!

Hi Team,

     Okay, here is the situation that I have, hopefully someone can provide me with some assistance cause I've been fighting this for a couple of weeks now and I'm at wits end.  Let me give you the background information.

     A couple of months ago I picked up a used delta printer, a Micromake D1, off of the local Craigslist.  The guy who had bought it had assembled it (he did a really great job with that) and had continuous trouble with the extruder and he finally gave up on it and sold it cheap, to me.  I've been working with 3d printers for about 18 months, I have a Wanhao I3 that works great.  So I'm not a total newbie to the game, but I am new to delta's.

     After working for weeks, I concluded that the previous owner was right, there is something wrong with the whole extruder system on this printer, and judging from comments online, this seems to be a problem that plagues these D1 models.  But that is okay, because knowing that the extruder system was potentially flawed, I already had other plans for the printer, and that was to turn it into a laser engraver.

     I already have the laser unit, it is a J Tech model that I've been using on my I3 for about 8 months now, works great.  But there are times when I need to print 3d, but it is set up for laser, or vice versa.  So I figured if I could convert the D1 over to using my laser module on there, it would be great for me.

     I printed a laser holder for delta printers, already got everything assembled, and the laser works well on the D1, so I'm not having any laser problems.

     Here is where I need some help.  What I want to be able to do is to laser engrave onto various thickness of materials.  General small signs are like 3mm thick, but small jewelry boxes are like 70-100mm thick, so the height needs to be variable, but I would like to have this automated.

     The optimal height for the laser is 32mm above the surface that is being engraved upon.  So what I would like to be able to do is to have the following steps take place.

1. Initiate print
2. G28 to home axis - all 3 arms go to the top of the cage
3. Print head moves down until the z-probe is activate
4.  Z is zero'd out.  Print head moves up 32mm. Z is zero'd again, so the printer thinks this is the "printing plane" that it will print on.
5. Laser printing takes place.

     By doing this, no matter how thick of an object that I place under the print head, the laser would always be placed at it's optimal 32mm above the item.

     Everyone keeps telling me to just do an auto level, but that won't work in this instance because auto level wants to probe the outer edges of the print surface to calculate the correction matrix.  But some of the objects I'm going to laser engrave might be 90mm high.  So the probe would hit the object at 90mm in the center, but then would hit 0mm on the outer edges, and that won't work.

     I would like to home the printer so all three arms go to the top of the cage, hit their endswitch and stop.  That would make the print heat fairly level.  Then I want the print head to come straight down in the center, and when the z-probe (endswitch) is activated when it hits the object being printed on, then it should zero out Z, then raise 32mm from that point, then again zero out Z, then it would begin processing the g-code for the laser to print.

     I'm not sure if I've given enough detail, so if you need more information, please let me know.  Really hoping someone can help me with this problem.  

Thanks in advance!!




  • Well, adjusting your zprobe height will get you at 32mm. If you want to probe things of various heights (without crashing your probe as it moves to z5 to probe) and things of x-y size other than your normal probe points, then it sounds like you want "Selective autolevel" check out the video towards the bottom of this thread:

    In the video I talk about the part of the function I had trouble with, but it also explains the feature. later in the thread I talk about how I fixed the issue in the video and provide the code I wrote.
  • Thanks GRB352.  I took a look at the link you sent me.  That's a bit above my level right now.  I was hoping to find something more straightforward instead of having to edit a bunch of code.  I'll look at your post more in depth tonight and see if I can figure out how to incorporate your information.

  • Okay, kinda frustrated.  Still can't get this to work.  Please help if you can!

    I can do the G28, and it homes okay to the top of the cage.

    If I do a G30, head comes down till z-probe is triggered, reports 225.73, so that tells me from the top of the cage, to the bottom where the z-probe triggers is 225.73.  At this point I have nothing on the print bed!

    Now what I want to be able to do is to put something on the print bed to laser engrave.  I want the head to come down to where the z-probe triggers, then I want it to move back up 32mm from that position, then zero's out Z and starts laser printing.

    It has to be variable because the various items I'm wanting to print on are all different thicknesses.  That's why I want the head to come down till the Z probe triggers, then move back up 32mm, that way the laser is always 32mm from the engraving surface.

    Can't figure out a way to do this.

    Is there a way to have the print head come down till the Z probe is triggered, and at that moment have Z get zeroed out.  Then instruct the head to move up 32mm with a G0........... wait a minute.......

    Okay, typing this all out has given me some clarity.  Can someone please check my logic?

    So if I did a G28 to home all axis
    Then did a G0 Z50,  a position where I know the Z-probe will trigger (tower height is still 300 in EEPROM)
    So the head would come down and stop where the Z-probe triggers.
    Then I could issue a G92 Z0 to zero out that position
    Then do a G0 Z32 to raise it 32mm
    Then do a G92 Z0 to once again zero out that position.

    So from the laser standpoint, it would think it was on plane zero, but it would be at the optimal distance for lasing.

    I think that will work...... I'll confirm when I get home tonight........ hopefully someone can tell me if I'm headed in the right direction.

    G0 Z50
    G92 Z0
    G0 Z32
    G92 Z0

    So I could enter that as being the beginning script of my gcode, and it should work.  Fingers crossed.

    Amazing how your mind starts to wrap itself around the problem just by talking (or typing) it out.

  • I think that is a solution. G28/G32 are the only ways to also change Z. G32 measures different points so not good with a fixed switch. 

    Alternatively G30 could be modified to change Z if Z param is given. I think that would also be a good addition to change Z like if triggering means Z and then adjusting Z. Think I will add that to firmware.
  • edited September 2017
    If you add a probe switch to your laser head you can do it automatic , wrote a code for that.
    had the same problem.
    Therefore i modified the G30 to accept "L" Value to Lift head after probing .
    so laser Head touches workpiece, and lifts a defined value to get Focus point of Laser.

    !!! uses Probe switch mounted on LaserHead !!!!!!

    i use it on cartesian machine, not shure if it´s ok for deltas also, but i think it is

    Use of Command is G30 L<value>

    added this to G30 section:


    if(Printer::mode == PRINTER_MODE_LASER)
    if (com->hasL()) // G30 Lift , probes and lifts Z axis by value of L, use to adjust Z relative to workpiece
    float startheight = float(com->L);
    Printer::coordinateOffset[Z_AXIS] = Printer::runZProbe(true, true,2, true);
    Printer::coordinateOffset[Z_AXIS] -= (Printer::currentPosition[Z_AXIS]);
    Printer::moveToReal(IGNORE_COORDINATE, IGNORE_COORDINATE, startheight - Printer::coordinateOffset[Z_AXIS], IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
    Printer::lastCmdPos[Z_AXIS] = Printer::currentPosition[Z_AXIS];// update gcode coords to startheight;
    Com::printFLN(PSTR("Workpiece Z: "), Printer::lastCmdPos[Z_AXIS]+ Printer::coordinateOffset[Z_AXIS]);
    Com::printFLN(PSTR("Machine Z: "), Printer::lastCmdPos[Z_AXIS]);

    @Repetier ; : Roland, you can take the code from here :

Sign In or Register to comment.