Welcome! Log In Create A New Profile

Advanced

Correcting horizontal banding in gcode with python

Posted by justine.haupt 
Correcting horizontal banding in gcode with python
October 05, 2017 02:09PM
Hello,

I've been commissioning a homebrew large format printer for a couple months now, pulling my hair out with redesigns to fix various mechanical issues as I go.

The machine in question is large (24" square build surface) and I went with a 4 linear shaft + 4 leadscrew arrangement belted to 2 motors. Learning an alignment/setup process has been painful and hindsight is 20/20, but long story short I have a periodic error in the Z movement which is likely due to eccentricity of the pulleys. Using a digital drop indicator revealed a periodic deviation of -.013mm to .042mm from the nominal Z movements with a period exactly equal to the leadscrew pitch.

This causes fairly extreme horizontal banding in my test prints and needed to be corrected.

I had already redesigned the Z motion system once, and considering the error is predictable, I wrote a simple Python script to post-process any gcode I run to imprint a negating deviation, being sure not to exceed the Z step resolution (5um in my case). This also required that I clock the leadscrew pulleys to be synchronized.

Here's a print without correction:

Image error
[failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known]
open image URL


And with:

Image error
[failed to open stream: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution]
open image URL


See here for a couple more photos: [lightsmithscientific.com]

For me this is a temporary solution, but if anyone has a need I went ahead and put the code on GitHub: [github.com]

~Justine

Edited 2 time(s). Last edit at 10/05/2017 02:14PM by justine.haupt.
Re: Correcting horizontal banding in gcode with python
October 05, 2017 11:37PM
Interesting solution, but I like it. Even though it's a bandaid fix, the results look pretty good.

+1 for thinking out of the box!

But what are your plans on fixing the mechanical error? If you share pictures of your build we might be able to help come up with some constructive suggestions.
Re: Correcting horizontal banding in gcode with python
October 06, 2017 07:37PM
Thanks Jerry.

I already have the new version worked out, but this is a picture of what I have now:

Image error
[failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known]
open image URL


The belts are loose there as I took the picture during assembly, but you get the idea. It's a printed polycarbonate double 60T GT2 pulley that the leadscrew threaded right into. I'm pretty sure the pulleys are eccentric, as I can see the belt breathing in and out a little as it rotates. The linear shafts are hiding in that shot.

This is what I have in mind for the fix:

Image error
[failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known]
open image URL

Image error
[failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known]
open image URL


The blue parts in the cross section will be printed (polycarbonate), whereas the pulleys (from SDP/SI) are on a 6mm stainless dowel. The pulleys already arrived so I'm just waiting on the dowels.
Re: Correcting horizontal banding in gcode with python
October 07, 2017 09:16AM
It's probably more a question how you connect the leadscrew nuts to the bed to avoid z-wobble translating from the screw to the bed.
Re: Correcting horizontal banding in gcode with python
October 08, 2017 04:47PM
Hi o lampe,

There's NO Z wobble. The banding is a periodic dilation (expansion and contraction on all sides of the print), not an offset. The problem is that there's a residual motion in the Z movements so that sometimes layers are more compressed and sometimes less, leading to variation in the effective extrusion width, causing the bands.
Re: Correcting horizontal banding in gcode with python
October 09, 2017 12:41PM
Maybe adding weight to the buildplate will help alleviate the sticky z-movements?

Either that or a nice silicone lubricant if you've already checked the parallel alignment of the rods.


Signature:
Build Log - DDDE 330x330x300mm Ultimaker
Re: Correcting horizontal banding in gcode with python
December 08, 2017 03:12PM
Update, FYI:

The problem was eventually fixed by going with 4 "powered leadscrews" from Thomson Linear (stepper with leadscrews instead of conventional shafts). I went with narrower screws with 10mm diameter and 2mm thread pitch, and mounted with the motors on the top-side and the bottom of the screws free-hanging. Positioning accuracy as measured with a digital dial indicator is now +/- 3um.

Also FYI, the original image links for the Python gcode fixer before and after photos are dead.

Photo of print before processing: [justine-haupt.com]

And after: [justine-haupt.com]
Sorry, only registered users may post in this forum.

Click here to login