Manual Calibration First with Kossel?



  • I was looking to manually calibrate my Delta/Kossel once the first time to eliminate horizontal radius, and set the Z height. I have machined aluminum corners, aluminum extrusion, rails and I am using linear rails with a machined spacer for the difference between the extrusions and the metal carriages to ensure the belts are as straight as I can get them.

    I am using these corners: https://www.robotdigg.com/product/555/2040-or-3030-Alu-Vertex-for-Kossel-XXL-or-XXXL
    (2040)

    these carriages: https://www.robotdigg.com/product/495/Carriage-for-open-ended-belt

    MGN12 Rails

    this effector: https://www.robotdigg.com/product/396/End-Effector-for-Kossel

    and an E3D Gold Edition hot end with Capricorn tubing and an E3D Titan extruder.

    I have a certified SPI (Swiss Precision Instruments) 14-836-1 which is a dial test indicator from my Precision Machining and CNC Automation course and it is certified for [a measuring range of 0.03" and a resolution of 0.0005"]. They say this particular test indicator was tested twice and has an [actual] measured repeatability of 0.000035" and 0.000020", the hysteresis is 0.000085" and 0.000075", and the error of indication is 0.000190" and 0.000325" @ 68 F with a humidity of 50% and that the measuring uncertainty is/was 5 um.

    It comes with an attachment that allows me to simply machine a quick component to use it as a Z probe (with about an inch offset, haven't measured the offset yet).

    I am using optical end stops and using the machined PCB (flat filed to remove the burs from snapping the circuit boards from each other) located onto the top metal corner machined surface. I do not expect my numbers to change once I set them once.

    Is there a guide or does anyone have anything I should be keeping in mind when I try to calibrate this manually on Tuesday or Wednesday afternoon? (EST)

    I want to indicate my heated bed which I know to be truly flat within a few ten-thousandths of an inch.

    Thoughts?

    Thanks in advance.



  • Just to level set: Remember that Delta CALIBRATION and Delta MESH BED LEVEL (really flatness) are two very different things.

    Personally, I would not spend the time to calibrate by hand. It will produce inferior results to auto-calibration. Therefore, you will likely (and SHOULD) auto-calibrate at some point. At which point the manual calibration is as though it never happened. Total waste.

    How to auto-calibrate? Short answer:
    Get the diagonal arm lengths ABSOLUTELY correct, and then run a G32. Using your SPI as a probe, or etc.



  • What I did when I commissioned a scratch built delta recently:

    1. I had Haydn Huntley arms so I knew the exact length.
    2. Put that exact length in L and approximations for everything else, in M665
    3. Run a G28, then G32 This will create EXACT M665 settings, including some that a human can't really measure.
    4. M500 (to save to config_override.g)

    You can leave the updated M665 settings in config_override, or you can transfer them to config, your choice.

    You really only need to do the above once when commissioning, and then once every few weeks as things wear and temperatures change and etc. Of course, do it if you change the machine itself (new bed coating, etc. )

    I then ran a "Machine Control" > "Auto Delta Calibration" > "Run Mesh Grid Compensation" to let it probe the bed for level/flatness. Just like auto-calibrate, I anticipate running the mesh every few weeks.

    In my case, EVERY PRINT, via the start gcode in the slicer, runs G28 (home all), G32, and G92 S1 (to load the mesh) in my "start G-code" in my slicer.

    Two caveats:

    1. I'm using a smart effector, so the Nozzle is the probe. My X,Y offset is zero and my Z offset is -0.01. That is, my G31 is:
      G31 P100 X0 Y0 Z-0.1 ; Set Z probe trigger value, offset and trigger height

    You will need to figure out your offset. THAT is where to spend your time, not on manual calibration.

    1. If your probe is attach/detach, you obviously can't put a G32 in your start G-Code. You CAN (and should) put the G92 S1 to activate the mesh that was built the most recent time you probed.

    And… last but not least, I generated the things that G32 runs behind the scenes, the commands in 'bed.g' with the online-configurator. I chose 7 points, 3 "outer ring", 3 "mid ring" and 1 in the center. This only takes moments and seems to work REALLY well.

    Just for fun, this is what is in my bed.g (604 mm bed, about 24 inches, diameter):

    ; bed.g
    ; called to perform automatic delta calibration via G32
    ;
    ; generated by RepRapFirmware Configuration Tool on Thu Feb 01 2018 10:16:45 GMT-0600 (Central Standard Time)
    M561 ; clear any bed transform
    ; Probe the bed at 3 peripheral and 3 halfway points, and perform 4-factor auto compensation
    ; Before running this, you should have set up your Z-probe trigger height to suit your build, in the G31 command in config.g.
    G30 P0 X0 Y299.9 H0 Z-99999
    G30 P1 X259.72 Y-149.95 H0 Z-99999
    G30 P2 X-259.72 Y-149.95 H0 Z-99999
    G30 P3 X0 Y149.9 H0 Z-99999
    G30 P4 X129.82 Y-74.95 H0 Z-99999
    G30 P5 X-129.82 Y-74.95 H0 Z-99999
    G30 P6 X0 Y0 H0 Z-99999 S4
    ; Use S-1 for measurements only, without calculations. Use S4 for endstop heights and Z-height only. Use S6 for full 6 factors
    ; If your Z probe has significantly different trigger heights depending on XY position, adjust the H parameters in the G30 commands accordingly. The value of each H parameter should be (trigger height at that XY position) - (trigger height at centre of bed)



  • I've recently made an unusual delta. My first move was to determine the height required. Enter M558 Hx Ly where x is height determined by manually jogging up and down, and y is the diagonal rod physical length measured from centre of rotation to centre of rotation of the joints. Once you have that, you can use the manual calibration wizard where there is no probe fitted, by just using paper and jogging up and down at each probe point.


  • administrators

    The problem with using a super-accurate dial indicator that is offset from the nozzle is that the slightest amount of effector tilt will render the accuracy of the dial indicator worthless, due to the relative heights of the nozzle and the dial indicator changing. So I suggest you use the manual calibration wizard, i.e. set up bed.g as if you are using a Z probe, but put P0 in the M558 command to tell the firmware that there isn't one.



  • @DjDemonD:

    I've recently made an unusual delta. My first move was to determine the height required. Enter M558 Hx Ly where x is height determined by manually jogging up and down, and y is the diagonal rod physical length measured from centre of rotation to centre of rotation of the joints. Once you have that, you can use the manual calibration wizard where there is no probe fitted, by just using paper and jogging up and down at each probe point.

    Well, I have precision 0.010" and 0.001" shim stock and it is bang on with my caliper (haven't checked with my micrometer yet, I do not entirely remember where I left it) the shim stock is made specifically for chasing tenths for CNC machining. I would have to do some simple trig to know the length of the diagonal rods unless I made some jig that I could stand vertically, either I'd have to measure it with a vertical only measuring tool or the probe in the CNC mill, not sure if I could measure it closer than a few thousandths of an inch other than by doing that. I am not sure I want to measure that with a big caliper. I do not know what the rods are because I got them from a friend, might be able to check his marlin config but I question the accuracy. I just need to print, once I prove I can print he will buy the precision rods if he needs to.



  • @dc42:

    The problem with using a super-accurate dial indicator that is offset from the nozzle is that the slightest amount of effector tilt will render the accuracy of the dial indicator worthless, due to the relative heights of the nozzle and the dial indicator changing. So I suggest you use the manual calibration wizard, i.e. set up bed.g as if you are using a Z probe, but put P0 in the M558 command to tell the firmware that there isn't one.

    If money wasn't a limitation and the sole problem was effector tilt, what would be the best solution for eliminating effector tilt? I see the Fanuc or ABB style pick and place that have all machined components, I know not what joins the effector to the arms. These look like ball joints from the RC world. I might be able to measure effector tilt at my school's machine shop but I don't think I can connect to their wifi because they lock down everything and I do not know what the IP address would be even if I was on their wifi.

    I need this for precision prototyping, I have a difficult time believing I cannot get below +/-0.005" overall part precision because the frame should be less well under a +/-0.010" assembled If I measured everything properly. I am using precision granite slabs, machining the extrusion, using opto endstops with the machined edge locating, GT2 belt with 16 tooth pulleys, and all metal components. The only thing I really am suspect of is the rods.

    If I can nearly eliminate effector tilt…other than belt stretch or print bed surface change....I really do not see my numbers changing more than a few ten-thousandths of an inch from the machine shop to my house which is always the same temperature and humidity. Are my expectations unrealistic? In my mind, if I can eliminate effector tilt and enclose it so there is as little plastic thermal instability as possible, I should have a very precise machine, I am expecting surprisingly close to the manual mills at my machine shop given where my last Aliexpress kit was after I had finished tweaking it. Is a printable precision (without effector tilt) of +/-0.005" realistic to achieve over the entire printed part consistently, or am I missing something?



  • @Danal:

    What I did when I commissioned a scratch built delta recently:

    1. I had Haydn Huntley arms so I knew the exact length.
    2. Put that exact length in L and approximations for everything else, in M665
    3. Run a G28, then G32 This will create EXACT M665 settings, including some that a human can't really measure.
    4. M500 (to save to config_override.g)

    You can leave the updated M665 settings in config_override, or you can transfer them to config, your choice.

    You really only need to do the above once when commissioning, and then once every few weeks as things wear and temperatures change and etc. Of course, do it if you change the machine itself (new bed coating, etc. )

    I then ran a "Machine Control" > "Auto Delta Calibration" > "Run Mesh Grid Compensation" to let it probe the bed for level/flatness. Just like auto-calibrate, I anticipate running the mesh every few weeks.

    In my case, EVERY PRINT, via the start gcode in the slicer, runs G28 (home all), G32, and G92 S1 (to load the mesh) in my "start G-code" in my slicer.

    Two caveats:

    1. I'm using a smart effector, so the Nozzle is the probe. My X,Y offset is zero and my Z offset is -0.01. That is, my G31 is:
      G31 P100 X0 Y0 Z-0.1 ; Set Z probe trigger value, offset and trigger height

    You will need to figure out your offset. THAT is where to spend your time, not on manual calibration.

    1. If your probe is attach/detach, you obviously can't put a G32 in your start G-Code. You CAN (and should) put the G92 S1 to activate the mesh that was built the most recent time you probed.

    And… last but not least, I generated the things that G32 runs behind the scenes, the commands in 'bed.g' with the online-configurator. I chose 7 points, 3 "outer ring", 3 "mid ring" and 1 in the center. This only takes moments and seems to work REALLY well.

    Just for fun, this is what is in my bed.g (604 mm bed, about 24 inches, diameter):

    ; bed.g
    ; called to perform automatic delta calibration via G32
    ;
    ; generated by RepRapFirmware Configuration Tool on Thu Feb 01 2018 10:16:45 GMT-0600 (Central Standard Time)
    M561 ; clear any bed transform
    ; Probe the bed at 3 peripheral and 3 halfway points, and perform 4-factor auto compensation
    ; Before running this, you should have set up your Z-probe trigger height to suit your build, in the G31 command in config.g.
    G30 P0 X0 Y299.9 H0 Z-99999
    G30 P1 X259.72 Y-149.95 H0 Z-99999
    G30 P2 X-259.72 Y-149.95 H0 Z-99999
    G30 P3 X0 Y149.9 H0 Z-99999
    G30 P4 X129.82 Y-74.95 H0 Z-99999
    G30 P5 X-129.82 Y-74.95 H0 Z-99999
    G30 P6 X0 Y0 H0 Z-99999 S4
    ; Use S-1 for measurements only, without calculations. Use S4 for endstop heights and Z-height only. Use S6 for full 6 factors
    ; If your Z probe has significantly different trigger heights depending on XY position, adjust the H parameters in the G30 commands accordingly. The value of each H parameter should be (trigger height at that XY position) - (trigger height at centre of bed)

    I will take your comments under advisement, I am posting this because I do want feedback on what I am attempting. The reason I question you is as I mentioned to Simon and David, as good as auto-calibration may be, I have access to a fully equipped machine shop in a school environment. My aluminum extrusion was machined on a VF2 Haas with nice chunky high-end Kurt Workholding vices, with very good tools. I use Mitutoyo, Brown & Sharp or Starrett, Fowler or SPI measurement equipment, all of it certified.

    I made precision one-inch spacers for a project in school last year (probably going to make myself four more just because I can) and the tolerance to move on to the next project was 1.00000" +0.0000 -0.0002" and all four of mine measured 0.9999" or 1.0000" It took forever to do! with precision grinding and measuring on that scale, metal dust could throw you out of tolerance so the cleanliness and wasted material shaved away dressing the grinding wheel with a diamond-tipped tool every so often then cleaning the dust again…was...a bit ridiculous. They are actually sitting in my computer desk drawer so they do not get damaged. They required precision grinding and had to be a specific alloy of steel, ordered for that specific project, that would not vary in size significantly enough over a long period of time, tools for the future.

    I really do believe that with the equipment I have access to that I can create a machine accurate close to the millionths decimal place (strictly in inches) if I have "all my ducks in a row" and everything is perfect. Are the motors and belts that accurate? Is the plastic that accurate? is the hotend that accurate? probably not. I am gearing up to machine everything on the Core XY I am building and will design and manufacture everything but the motors and circuit board though, that one will only see engineering thermoplastics like PEEK and POM and whatnot, it will be completely enclosed. I believe auto-calibrate is probably a perfect solution 95% of the time, I genuinely believe that I could realistically and consistently verify whether every move was exactly what it is supposed to be down to a few ten-thousandths of an inch or if it needs adjustment to compensate.

    I imagine I am one of few on the forum that actually could do this given the measurement equipment I have at my disposal. Regardless of knowledge and experience, not too many individuals have nearly unlimited access to a fully equipped machine shop without paying a small fortune to have a job shop machine stuff.

    Now David has me stressing about effector tilt though because I hadn't thought about that too much yet.

    I could probably measure that though so if I can measure it, perhaps I could compensate for it? David, if I legitimately could measure effector tilt down to a few ten-thousandths of an inch, I'd have to do trig if memory serves correctly because the effector tilt is in degrees for X and Y.....my intuition tells me that I could properly compensate for it. To what level of precision of compensation? I do not yet know. Just a thought.



  • This is exactly why I posted this several days before I did anything. I know I have time before I finish machining some stuff so I would like to approach the calibration of this in the most intelligent way possible given what I have at my disposal right now. I am not against replacing parts if the print dimensions suffer, I must prove it can print before that happens. The better it prints this time, the more funding I receive, non-commercially of course…more between family and friends. I tuned a terrible Aliexpress kit to print surprisingly well, I can calibrate and tune a 3D printer, not worried about that, I simply have to do it most of the way by Thursday to pretty much Demo it, I want to make sure I do not waste any time yet precision does not suffer because I do not have much time and precision is the priority by Thursday, tuning my filament and extruder is easy because I've done it with this system and filament before.

    I know my bed is level, the diameter isn't critical because I could always expand it later. I am deliberately shrinking the printable diameter by default anyway this time due to effector tilt at the extremes on my last delta/kossel. I could order a digital level that is accurate to a few thousandths from Amazon to measure effector tilt quickly but I would be adding weight to the effector and would need to measure without the hot end installed.



  • Taking error out of the system in many places is good. Tolerance stacking and all of that.

    My main point is that auto-calibrate does things that are beyond simple measurements. It loads arrays with measurements and "back calculates" things like errors in the 120 degree relationship between the towers. And more.

    You COULD take highly precise and accurate measurements and figure out a way to calculate all of that.

    Or, you could make the most precise and repeatable probe you can, and let the firmware do its thing.

    It is my opinion (not based on rigorous analysis or proof) that a +/- .001" repeatable probe run all the way through G32 auto-calibrate is better than a +0.0000 -0.0002 measurement technique that results in setting only a subset of what G32 calculates.

    MUCH better, in terms of actual print quality.



  • The other factor, not mentioned above, is "When was the probing done?"

    Take the bed out and put it back in. Is it really in the clamps within 0.0001 inch of where it was?

    I realize you don't have a Duet Smart Effector, so this may not mean much. Same printer I commissioned, mentioned above, does have one, Running repeated probes and using standard analytics for deviation indicates it is repeatable to about 0.004mm (about 0.00015")

    Running a G32 at the start of each print, and running a mesh bed level (flatness) every so often, produces noticeably superior prints (as compared to another printer I have where I have to attach a probe, and therefore run calibrate/level much less often).

    In particular, a LOT fewer "Layer Zero" problems. Z is always spot on.

    Phrased another way: Using that built in probe to run a G32, at the start of every print, seems like a much better deal than a +0.0000 -0.0002 measurement done every so often.



  • All I will say is there is 3D printing, which requires high precision but only up to a point. You are still making things by typically extruding plastic through a 0.4mm nozzle. Maybe you prefer a 0.15mm nozzle? Achieving 0.1mm precision on printed objects is quite achievable with much less precise hardware than you are talking about. However, there comes a point where it stops being 3d printing or engineering IMO and becomes physics. This is a different thing. Our piezo probes can achieve 10 microns accuracy, I've tested configurations which achieved an accuracy of 5 microns (0.00019685inch). Does this matter to 3D printing - no. We are working at a scale 1-2 orders of magnitude larger than this.

    Check out this guy's printers I think it will be up your street.. https://www.nscrypt.com/3d-printing/ 12.5 micron layers, Z probes using laser interferometry etc…


Locked
 

Looks like your connection to Duet3D was lost, please wait while we try to reconnect.