How to Calibrate for perfect circles

4,990 views
Skip to first unread message

BrandonW6

unread,
Oct 15, 2012, 8:38:01 AM10/15/12
to solid...@googlegroups.com
Hey All,
 
Just received my printer on Friday, and I must say I am extremely impressed with its print quality right out of the box.
 
Now I have started attempting to print more precise shapes that fit together.  Such as cylinders and ball joints. 
 
But I notice that something is slightly off and my circles come out a tiny bit skewed.   With a buldge across it diagonally.
 
After watching it print, I noticed that when it does the circles in opposite directions (for inner and outer perimiter edges) that there seems to be a tiny bit of backlash, and its off by maybe a millemeter.    Sometimes this also leaves tiny gaps between the shell perimeter and the fill.
 
I am curious what is the recommended procedure remedy this.
Should belts be snugged up a bit?   Perhaps re-grease the carriage shafts?  Tweak potentiometers for the motors?  Cancel in software settings somewhere?
 
How often are people finding they need to do any sort of maintenance?
 
Thanks!
Brandon

Kendall

unread,
Oct 15, 2012, 10:28:51 AM10/15/12
to solid...@googlegroups.com
Brandon,

I'm not sure with the Solidoodle, will dig into this when I have time and write an Wiki Page on the subject.  It is possible to get this within a certain tolerance.  I have had to do this with every (inexpensive) CNC type controlled machine that I have purchased.  It's a matter of; coordinating distance set to move in a step, with the actual distance that the machine moves.  In your circle, coordinating the X direction and the Y direction (circles are not really circles after being sliced, they are short line segments that move point to point).  Fixing the height of an object will be a little more complicated, it is not only the Z travel, but other factors that will have to be considered and set before you can coordinate the Z step movement.  Since this was necessary with every machine I have purchased, I have to believe this fine tuning is a machine to machine, coming off the same production line, common thing.

Remember, we're not dealing with servo's driving ball screws on liner ways, we are dealing with steppers, driving belts, with printed parts, riding on a round rails (that may not be perfectly perpendicular to each other); and to add to the mix of variables, gravity is our only means of anti-backlash.  The best that we are going to get, is based on finding the average balance between the (3) axis, based on our individual machines...

This is why I am also supporting the Makibox project, they are bringing screw drive with anti-backlash features into the mix for X-Y-and Z, and using CNC'd machined parts to help with our inaccuracy problems...

Support Tech

unread,
Oct 15, 2012, 10:33:07 AM10/15/12
to solid...@googlegroups.com
Hey Brandon,

   I would recommend adjusting screw on your ZTAB slightly.  Do you see the tab to your left on the wall towards the back of the printer.  There is a screw in the tab that you can turn.  I want you to turn the screw slightly to adjust the the ZTAB.  This tab raises and lowers the extruder against the platform.   By turning the screw, you are adjusting the amount of space between the extruder and the platform.  Try this, and let us know whether your circles improve. Let us know if you have any other questions.

Regards,
Clifford
Solidoodle Customer Support

Ian Johnson

unread,
Oct 15, 2012, 12:23:52 PM10/15/12
to solid...@googlegroups.com
I'm not sure what you can do mechanically to reduce the backlash in Y (it's less likely in X, X is pretty solid) but you can compensate in firmware. 

First, I recommend getting a dial gauge and printing Neil's (Jinja) mount posted here - http://www.soliforum.com/topic/107/kit-for-calibrating-x-and-y-with-a-dial-gauge/   With this, you should be able to find out how much backlash you are getting.  Move the axis toward the plunger at least 2mm until it barely moves it.  Zero the gauge, move toward the gauge 15mm, then back 15mm.  It will probably not make it back to zero, the distance remaining is your backlash.

In this thread - http://www.soliforum.com/topic/92/slic3r/  Neil posts changes you can make to the firmware that make it possible for you to enter the amount of backlash you have as a gcode command, and the firmware will compensate for it by adding the right amount of extra motor steps.  It's a little complicated, but educational and worth doing.  

Neil Martin

unread,
Oct 15, 2012, 1:05:50 PM10/15/12
to solid...@googlegroups.com
Hi guys,

When I added my hysteresis fix it didn't fix the oval circles on my test print. I still haven't found out why that was happening. Interestingly, the oval circles were sliced with skeinforge. When I sliced to slic3r the oval circles went away. My best guess so far is the speed (fast or slow, I don't know, but probably slow=good) of the print was critical and it was just the plastic being pushed around by the nozzle that was the problem, rather than the actual path the nozzle was taking. Just a theory though. I now usually print with zlift all of the time.

I've improved the hysteresis code a lot and submitted a pull request to get it in the main Marlin branch. It's easier to integrate the changes as I've moved the bulk of the code into a new file. I'll add new instructions here shortly, I need to pop out and get a caffeine fix first. The main difference between my first hysteresis fix and this new one is the hysteresis error correction is performed separately at high speed with no extrusion, instead of the correction being added to the extrusion path. Also the values are now in millimeters instead of steps, so if you do choose to upgrade from the old to new, change your units!

Ian Johnson

unread,
Oct 15, 2012, 1:35:51 PM10/15/12
to solid...@googlegroups.com
Is it possible to set up github in a way that your changes can get incorporated into updates to the Solidoodle branch, even if it does't get accepted into the main Marlin?  Or is it easy now to just plug it in to whatever version we have?  I'm thinking I should put my default axis steps into my start.gcode rather than having to change them back every time I update the firmware.

BrandonW6

unread,
Oct 15, 2012, 2:37:00 PM10/15/12
to solid...@googlegroups.com
Thanks to everyone who replied so far.  Just to be clear. I took a picture of a print I made.
In the top left and bottom right.  there is a tiny gap between the inner and the outer walls.
 
So does this appear to be a backlash problem?  Perhaps with the Y axis being a tad slow to respond to the direction change?
And I agree with Ian,  the X axis seems rock solid, but on the Y axis the belts were not loose, but looser than the X belts.
 
Is there a way to check my belts are taught enough?   
IMG_1846 - Copy.JPG

Ian Johnson

unread,
Oct 15, 2012, 3:12:43 PM10/15/12
to solid...@googlegroups.com
That definately looks like Y backlash, with the flattening at the front and back of the circle.  It also looks like your flow rate is too low, there is a lot of gap between the threads in your solid layers on the bottom.

Neil Martin

unread,
Oct 15, 2012, 3:16:19 PM10/15/12
to solid...@googlegroups.com
This absolutely looks like a backlash problem.

I could apply the hysteresis changes directly to our Solidoodle code, but then that would make updating from the main Marlin code more complicated. It's better to apply complicated changes to the main Marlin code, so that the changes naturally trickle down to our Solidoodle code. We want to keep our Solidoodle alterations to a minimum to enjoy the benefits of easy and regular updates from the main Marlin code.

So here are the changes you need to make. You can make these changes to Lawsy's Solidoodle firmware or Solidoodles v4.2 firmware. If you've already added my previous alterations, then best roll back to Lawsy's firmware and then apply these...

Step 1. Add a define to configuration.h. I added the following line after the define for DEFAULT_MAX_ACCELERATION

#define DEFAULT_HYSTERESIS_MM         0, 0, 0, 0  // X, Y, Z, E hysteresis in mm. These are the extra distances that are performed when an axis changes direction to compensate for any mechanical hysteresis your printer has.

Step 2. Add some cases to the switch statement in process_commands in Marlin.pde. Search for "case 115: // M115" and insert the following lines before that line....

  case 98: // M98
    {
      hysteresis.ReportToSerial();
    }
    break;
  case 99: // M99
    {
      if(code_seen('X')) hysteresis.SetAxis( X_AXIS, code_value() );
      if(code_seen('Y')) hysteresis.SetAxis( Y_AXIS, code_value() );
      if(code_seen('Z')) hysteresis.SetAxis( Z_AXIS, code_value() );
      if(code_seen('E')) hysteresis.SetAxis( E_AXIS, code_value() );
    }
    break;

Step 3. Insert an include in Marlin.pde. Add it near the top, after the other includes that are already there...

#include "Hysteresis.h"

Step 4. Do the same for planner.cpp. Add it near the top, after the other includes that are already there...

#include "Hysteresis.h"

Step 5. Insert a line in the plan_buffer_line function in planner.cpp. It should be the first line in the function, before "int next_buffer_head = ...."

hysteresis.InsertCorrection(x,y,z,e);

Step 6. Add the attached files (hysteresis.cpp and hysteresis.h) to the Marlin directory, the same directory that has Marlin.pde in it.


That's it. I've tried to simplify it as much as possible, the bulk of the code is in the new files and I've minimized the changes we need to make to the Marlin code while we wait for Erik to incorporate the changes directly. With the above changes made, you can now add a line like the following into you start code...

M99 X0 Y0.17 Z0 E0

This would add a 0.17mm hysteresis fix into your Y axis. Ian, be sure to change from steps to mm if you are already using the M99 command. Use M98 to see what your current hysteresis settings are. Post here if you have any problems.


Hysteresis.cpp
Hysteresis.h

BrandonW6

unread,
Oct 15, 2012, 3:23:50 PM10/15/12
to solid...@googlegroups.com

On Monday, 15 October 2012 15:12:43 UTC-4, Ian Johnson wrote:
That definately looks like Y backlash, with the flattening at the front and back of the circle.  It also looks like your flow rate is too low, there is a lot of gap between the threads in your solid layers on the bottom.
 
 
Yeah I havn't really bothered to dig fully into any calibrations yet.  I only received the unit friday afternoon, and was more excited to just print anything.  Now I plan to review all your calibration tutorials and see how accurate I can make it.
This is my first venture into 3d printing, so I didn't want to rush into something that I may not fully understand such as exotic firmware updates.

John McCloud

unread,
Oct 15, 2012, 4:08:45 PM10/15/12
to solid...@googlegroups.com

Brandon,

 

I had the same problem and it was quite noticeable.  I snugged up the belts a bit, but it did not completely take care of the backlash. ( Careful when tightening the belts,  if you tighten them to much it will cause more harm than good.) I then went into the settings and entered a setting for the backlash.  I had to experiment a bit, but it really did help a lot and the circles look much better.

 

I hope this helps.

John McCloud

unread,
Oct 15, 2012, 4:46:06 PM10/15/12
to solid...@googlegroups.com

Brandon,

 

Brandon,

 

I did not specifically mention it,  but I made the changes for backlash/hysteresis in the 3d printing software.  However, I can’t tell  you if I made the changed the setting in Pronterface or Repetier.  I just rebuilt my laptop I was using to make my prints so I can’t tell you exactly where the setting is.

 

John

Ian Johnson

unread,
Oct 15, 2012, 5:57:03 PM10/15/12
to solid...@googlegroups.com

I don't have any of the code in at the moment, since updating to Lawsy's wiped it out.  I'll get it stepped back up.  There is a challenge going at the RepRap forum for printing a part with the best dimensional accuracy, so it would be good to get this correction in .  

You should post this in the Hack and Mods so it can get stickied.  The last discussion on this wasn't very easy to find.

Neil Martin

unread,
Oct 15, 2012, 6:08:43 PM10/15/12
to solid...@googlegroups.com
Message has been deleted

Lawsy

unread,
Oct 15, 2012, 7:35:19 PM10/15/12
to solid...@googlegroups.com
I'll be adding this code to the github in the next day or so, hopefully later today.

BrandonW6

unread,
Oct 16, 2012, 5:42:51 PM10/16/12
to solid...@googlegroups.com
I had a little bit of slack in the belt on the left side, right side was snug, so I tightened left to match that snugness.
Then I found the 'Lash' module in skeinforge.  I set X to 0 and left Y as the default 0.3   Seems to be doing the trick.  I got the same print running now, and looks much rounder!

Lawsy

unread,
Oct 16, 2012, 8:00:30 PM10/16/12
to solid...@googlegroups.com
The firmware has been updated to include Neil's new hysterisis fix. I have started a firmware update thread on Soliforum for every time I make changes:

Reply all
Reply to author
Forward
0 new messages