Circles come out elliptical - Distortion issues


Hi everyone!

Here to talk about the “out of round” issue, as it has been plaguing me, ever since I bought the Moai a few months ago.

I’m on firmware 1.16 now, did some test prints, and here’s the thing, all square shapes print properly, e.g. 8x6mm rectangle, is really close to 8x6mm (give or take 0.1 - 0.15mm ) and is rectangular. If you have a square with a circular design inside , the circle is always ellipse shaped and tilted. The circle is ellipse shaped and tilted even though the square around it is flawless. The leveling pegs also come out with tilted elliptical cross-section. Added a leveling peg to the center and it also came out elliptical. Set up to print 10mm cubes with holes and the same thing happens, cubes come out right, holes are oval. Did a print for some parts I need and the cylinders had elliptical cross sections.

One would expect that if you are to get this, which is what i’m getting

you would be getting this too, because of the distortion

but instead you get this

The Moai calibration guide addresses this issue

which doesn’t help in the situation I’m describing cause it doesn’t fix the tilted major axis of the ellipse. You can adjust the galvo driver as instructed, to produce the square but inside it you will still get a tilted ellipse.

Another interesting thing on the calibration peg prints, is that the letter A prints out perfectly while the peg itself is distorted in XY, and the letters C and D don’t fare as well, they are a bit distorted. The G peg was placed on the center of the buildplate.

After some searching I came accross this galvo tunning demo. Granted, the function intended for that projector is different but the principle doesn’t change. And I recognize the fact that projecting a pattern on a wall at a range of meters can be different than projecting at 20cm, which is the case in the Moai.

At 7:16, he has set up the scanning to project near perfect rectangles but still it is off when it draws circles. Then he explains this happens cause the 2 drivers work on different scan speeds, and tunes the potentiometers for gain, low freq damping and high freq damping, to adjust the ellipse back to a circle.

Is it possible to make a guide for this on the Moai? It seems to be quite tedious back and forth procedure, fiddling with these pots, and probably could lead to complete detuning, but could it be made available for those who want to get the most out of the machine?

I printed out these little sample bolts and details at an angle at 50um and the distortion is not perceptible, but I want to have the option of orienting circular parts parallel to the plate.


I think your galvo board set slipped through QA with a little hitch. Definitely send an email to Peopoly support.



Thanks for a detailed post. I assume you already done the advanced manual calibration. If not, it is a good one to do. So there are a few places to check before touching the drivers.

An uneven plane, especially uneven vat surface which would lead to an uneven plate, creating an angle that causes distortion. It is same with the laser/galvo mount. Also, make sure laser is dead center in the galvo mirror

As you mentioned in the post, adjusting the pots on the driver can lead to complete detuning, and we do not want most users to even touch it except the scaling one. If you are still interested and accept the risk of adjusting that, please email support with a reference to this post.



It is not a matter of uneven surfaces. This is the layout on the build plate.

The 10mm cubes print comes out X:9.9 x Y:9.9 x Z:10mm, +/- .05mm, and they are rectangular. The cubes are not distorted. The circular holes are, and they are tilted, as shown in the diagrams in the first post. So it is not a matter of uneven projection or uneven plate because if that was the case, then the whole model would come out distorted. The deviation on the XY dimensions of the cube does not justify such a distortion in the circular hole.

I can send you the 3D files if you wish to check it.


Thanasis. The reason you have a distorted circle and an accurate square has to do with the way the galvo draws each. If the slicing software did not generate a circular outer wall but rather a sectioned zig-zag wall, the shape would be accurate. You see, the transition in position of each galvo has a damping control. This decelerates the position of the galvo when approaching the target position. If the deceleration is biased to one side (decelerates too late or too early) you will have a galvo pointing in the wrong position at an given instant. I could draw a pattern for the galvo to show how this issue is found… but give me a minute to sort it out.


Attached here is a diagram.

The red and blue paths represent a continuous movement of the galvo. Technically, you need only one set of blue/red lines to see the issue. If there was g-code to present this pattern, it would show the red path accelerating and decelerating in comparison to the blue path which is doing the same thing in the opposite direction.

If the damping of both galvos are properly set, the lines will be straight and the breaks in the lines will line up perfectly.


This explains why a square would be accurate and a circle might not be. As the target positions of those corners will be honoured, but how it gets there is the real issue.


@Drexus Thanks for the reply! Yes, it seems to be a matter of galvos being out of sync. The squares with sides parallel to the X Y come out correctly because it takes only one galvo to make the straight line. Haven’t tried diagonals, will do as soon as I get the chance. I think too, that it would come out cleaner if it wasn’t tracing circles but only worked in zig zag patterns. Maybe there would be some surface imperfection but as long as the form is correct you can sand the rest/work with that, but you can’t do much for a squished shape.

@peopoly Here’s another test

I created this test pattern

Here it is in Cura

Here is the print

Printed at 100um,
2mm extrusion on Z.
The printer X size at 908 and Y at 910,
Compensate X/Y 100/100 (will do a 100/200 as well and post )
All other settings default. Temp around 32C

And the measurements of the print

Main observation is that the diagonals of the large and smaller square are almost equal, only 0.05mm difference, and even if it was at .1mm it would still be pretty ok. This means the projection is not distorted. If there was unevenness between laser projection plane and vat, it would not be a rectangle. The diagonals of skewed parallelograms vary drastically in length. An isosceles trapezoid could also produce equal diagonals but this is not the case here.

I am not addressing the inherent distortion of the galvo setup regarding curved lines at the edges of the build plate.

The small circular shapes come out distorted, as expected. The white pieces have been placed for comparison, they have been cut from polystyrene sheet with die cutter and compass.


On the topic of distortion, there are multiple factors.

  1. the inherent distortion in galvo system, this is on the Y-axis. It is the nature of laser/galvo design. This is attempted to address in firmware. And for a more expensive system used in industry, it has digital offset build in the driver to calibrate individually

  2. variation in galvo driver from manufacturing. This gives each galvo system different distortion profile with most are very close to the baseline. The firmware address the baseline distortion profile but not 100% for Moai yet.

  3. How parallel is the build plate/vat to the laser scanning panel? All firmware adjustments are for parallel scanning plan so if there is an angle, there some distortion is also introduced at that level. The silicon layer is not perfectly flat, and there are always build differences to make it impossible to eliminate this 100%. This is, however, the first area to check since in many cases, it is enough to bring the distortion down to an acceptable level for that user.

  4. there is also a different type of distortion, which makes the inner scanning and outside scanning different in scale. This is being worked on as with 2 for the firmware 1.17. We hope to get it out in July, and we have been working on this since 1.16 was released.



  1. Inherent galvo distortion, I accept that fact - as I wrote in the previous post, I am not addressing that.

  2. The manufacturing variation is also a fact for everything manufactured, nothing is 100% they are all within tolerances and baselines, the tighter the better - and more expensive, of course.

  3. The build plate and the whole assembly in my case, is as parallel as the manufacturing tolerances of the kit allowed. The assembly for me was smooth, all screws fit gently in place and firmly secured. Assembled with set square and machinist’s square at hand for constant checking and truing up before tightening. If there was a tapped hole off, by even fractions of a millimeter, that would introduce an error, but an end user wouldn’t be able to compensate for this mechanically.

  4. That is very interesting - Looking forward to the firmware update.

Based on the measurements of the square pattern I printed, as seen on my previous post, would you say that the vat and build plate are parallel enough to the laser scanning panel?

Note that the rectangular pattern print is a rectangle, measured at the corners, ignoring the curved sides on the Y. It is definitely not skewed, set square placed on top of the print shows 90deg angles, and caliper measurements confirm it. If the laser and vat were not parallel it would be skewed. The big circles in the print are also very very close to being true, as you can see in the photos from the previous post.

So, to get back to the point, why are my little round pegs distorted and oval while the rest of the thing prints proper? @drexus is explaining very well how the damping affects the scanning when both galvos move simultaneously to trace a circle. The circle my galvos are tracing right now, in the case of small diameters (e.g.2-8mm) is a tilted oval. Simply adjusting the X or Y from the Moai Advanced Calibration will not fix this, it will still be a tilted oval. I would really like to hear @peopoly suggestions on troubleshooting this.

@peopoly Can you provide us with a gcode file with the pattern that @Drexus suggested? Maybe incorporate this scanning pattern to the existing centering circle tracing test?


Underdamping (or bad resistor in that spot) on the galvo driver board?


Good point, definitely something hardware side is wacky.

If it comes to that, as long as someone points out which one, I’d pull it out “medieval dentistry style” and solder in a new one. If it’s a screw I’ll turn it. I tweak boards when I have no other choice ( monitors, ampilifiers ). But I haven’t messed and wouldn’t mess with this board any more than I have to. To be honest I don’t consider it a component that should be user serviceable, or a component a user should ever be asked to tamper, even for a DIY kit. There seems to be no damage to the board.


@peopoly by process of elimination, here’s what the advanced calibration showed. The problem persists.

Advanced calibration test

Laser power to 36. Reduces laser spot size on paper to about the thickness of the black guidelines in the template.
(By the way, in the calibration guide it is mentioned to get the laser back to 58 after calibration, but I didn’t find anywhere mentioning how much to lower the laser power for the paper template test.)

Template was cut with X-Acto knife and steel ruler, the outer black line around the template must remain at the offcut, so the template sits flush with all the sides of the vat, does not crample and sits flat on the PDMS.
I found it useful to bend one corner of the paper around 3-4mm, so I can easily lift it up with tweezers when done.

Galvos were repositioned and pushed all the way in.

Here is the centering cross pattern

And links to video of centering cross pattern.

Center cross pattern 01

Center cross pattern 02

Large and small circle scan video

Large circle scan 01
Large circle scan 02

Small circle scan 01

The camera lens produced an artifact around the laser spot at some shots, but the dot can be seen clearly.

After that I proceded to print this test

And this is what I got

As you can see none of the cylinders is round. And they are tilted on the XY. Adjusting the X and Y size values will not have an effect on the tilt. It would have an effect if the ellipse’s major axis was parallel to X or Y. The tilt is also not consistent, as seen in the pictures, the tilt at the outer wall is at an angle to the tilt at the hole in the cylinders. So it is tiltception…
The galvos tend to do that on small diameter cylinders (Diameter < 10mm) and small parts too (shifting the features/details - which even more frustrating). On larger designs they produce quite accurate circular parts.

This isn’t about wanting to print cylindrical parts parallel to Z. This distortion on the XY, which is most pronounced on cylinders, also has an effect on how the galvos draw the slices of any part producing inaccuracies in overall shape and on details.

I understand there are limitations and I can’t be asking for capabilities provided by much more expensive machines. I’m not looking for functional accuracy of printed parts, but at the least something that appears accurate upon visual inspection.

If anybody wants to test, I can provide the shareable link.


@Peopoly seems to be silent here :wink: Should we start to play with resistors which are painted gold?


No unless you have some g-code to use as a tool in lining up the bias of each galvo.


we connect with this user via pm because adjusting those pots are very technical and not something we want users to play and you may get to a point that you can not reverse back on your own. We will revert back if there are information that may be useful for you.

new firmware is coming up soon so perhaps let’s wait for that.


Did this ever get resolved?


I would like to know that as well. Kinda have the same Problem.


Not sure if OP has messaged you or not but it turns out it is as simple as adding a script to Cura to replace all the G0 entries in the gcode with G1.

Extensions > Post Processing > Modify G-Code

Add a Search and Replace script and replace G0 with G1.


He did, but thanks for putting it here im public.