Episode 2 : Form1 calibration strikes back

[March 11th edit : these calibrations issues were enough to convince me to sell my Form1 printer, for details see this post]

In a previous post I was showing my Form1 was not really well calibrated and circles were turned into ellipses. After filling a bug report to Formlabs, their answer was on the line of “thanks for your concern we are working on it…”

I’m confident they will find a solution, but I started to wonder how a user could calibrate his printer himself. This is important as the warranty on the printer is only valid for 3 months and as any mechanical machine, I’m expecting the printer will require some calibration from time to time. Last but not least, this will be only possible if Formalbs is actually giving us access to more parameters than the currently closed/dumb down version of PreForm we have (Hint! Hint!).

Laser+Galvo based printer calibration challenge

A normal user has limited resources and not access to complex measure instrument, so the procedure should match these requirements:

  • Simple steps: if possible it should be as simple as print test objects, measure them, compute the corrective factors (Excel Spreadsheet/integrated to PreForm), enter the new parameters and re-print the test objects to validate the calibration.
  • Not too long and costly: printed test object should be small, we don’t want to waste time and resin
  • No expensive measure instruments: I’ll be only using a digital caliper available for less than $50 on Ebay/Amazon

My main assumption for this exercise is that the calibration required is only affecting linear parameters. I will not go into galvanometer fine tuning. We will see at the end of the article that unfortunately non-linearity are present and will limit your end result quality.

The main challenge with laser base printer is that it’s difficult to measure precisely the position of a moving dot at the bottom of the vat (absolute measurements). So one solution is to do relative measurements of printed object features. We will use a digital caliper to get a good number of data points to build a robust average estimation of the calibration.

In the graph under, you can see that the laser spot is covering each each slices of the object using two kind of paths. The perimeter/skin-paths are tracing the outline of the object, they will be responsible for the smooth finish. The In-fill paths are straight and parallel paths to cure the inside of each slice. Using simple shapes like circles and square will let us measure independently the performances of both X and Y axis galvanometers.


The final dimension of the Slice is affected by both the axis amplification (deflection angle range) and the size/shape of the laser spot. When tracing the measures VS the theory graphs, the amplification correction is measured by the slope of the curve, while the shape of the laser spot is creating a constant offset.


As PreForm software is not open source, I cannot be sure how to use these correction factors. For the amplification, it will probably mean the angles transmitted to the printer will need to be multiplied by the correction alpha found (different on each axis) . The offset is a consequence of the spot size mismatch. PreForm must use a boundary offset to draw the perimeter/skin paths. A positive offset means that the diameter of the spot need to be reduced by half of the value. Also if the laser spot is not exactly round it might be trickier to program…

Calibration object and Procedure proposal

The shape I used for my calibration is a simple series of square and circle extrusions of various small size and one large for the base. Each instance of the object provides 20 points of measures:
– Circles: [1, 2, 3, 4, 23] mm diameters, X and Y axis
– Square: [3, 4, 5, 6, 25] mm side length, X and Y axis


To know where each object was printed on the platform, I’ve added a number engraved. That could be useful later if we are tracking non linearity issue depending on the location of the objects.

[STL & Inventor files for all squareCylinders Test] [5x .form file] [9x .form file]

I’ve used the 5 duplications file as it’s already providing 100 measure points. The base of the object is 3mm thick as I was hoping I could print it without supports to save time and resin. It turn out the Form1 is curing multiple times the slices in the first 2mm for the base. It creates an adhesion issue for the next layers, and I ended up with unusable objects with holes so I’m now generating support structures.


Here are my measures, with the 5x file, transparent 100micron material profile and default supports configuration. My first prints were done with the 0.8.1 software but reading that the 0.8.2 is supposed to have an improved laser tracking I decided to reprint everything. (Un?)fortunately the measures are consistent and the 0.8.2 didn’t improve the calibration…


The full spreadsheets with regression formulas are here [0.8.1] and [0.8.2].


From the regressions results we can see that the calibration required is consistent in both PreForm version. My printer has a 1.4% error in X axis and 0.35% error in Y. The laser spot diameter is also off by 0.2 mm.

For some reason the PreForm 0.8.2 is less consistent than the 0.8.1, the calibration is only reducing the overall error by a factor of 4 while it was reduced by 5 in the previous version…

Ain’t you doing anything about outliers?

When doing a root cause analysis on anything, you have to solve the first order issues that are dominating your calibration errors before looking at the rest. My Form1 is displaying non linearity on the X axis on geometries close to the back of the platform (2 = back-right and 5 = back-left).


When you look at the measures table, both objects are very different from the rest. I have no explanation yet for that phenomenon, but I hope that once I will be able to correct the offset and scale in PreForm I can build a new test to tackle this issue.

Until then, if you have a Form1 I would be glad to ear if your printer has the same calibration issue as mine. More reports will help Formlabs building a great printer!

[<<Prev. – Extract STL from PreForm Files]    [3D Printer articles]   [Preform & JewelCAD – Next>>]

21 thoughts on “Episode 2 : Form1 calibration strikes back

  1. Reed Kelso

    I am in the functional form group and just got my printer today. When the resin shows up later this week this will be the first piece I print. I got the form expressly to make high precision parts and if it can’t print a circle I’m ready to sell it to any user that wants it, immediately.

    1. damienideas Post author

      Good day Reed,
      I understand your feeling. Remember that my printer was one of the first batch so hopefully the QA procedure got better as time went by. I’ve discussed quickly with Formlabs, and as I was thinking, there are a lot of hidden (for the moment) configuration knobs in Preform. So depending on your situation, if you can wait some time I’m sure they will fix the situation and give us a ‘power-user’ mode. I’m expecting that most of the errors could be calibrated away. If you need your printer for business and accuracy and control of your printing parameters are important you might need to consider alternative solutions.

  2. Martin

    Hi Damien,

    I reprinted your test, and uploaded the results in this thread:
    Maybe you can have a short look at my values and compare with yours?
    In general, I am with you. I just hope that the technical possibilities of the FORM 1 are in a way that %-errors can be reduced to such small values that printing mechanical parts is possible, sooner or later.

    1. damienideas Post author

      Good day Martin,
      Thanks for doing all these measures, I’ll spend some time tonight analyzing your XLS. But overall your printer calibration seems to be more ‘balanced’ than mine.

  3. Pingback: Form1 Printer Disappoints | Form1 Printer Results

  4. 3dp

    You do realize that the form1 has galvos with no final correcting lens (and thus pincushion result) there should be no expectation of linearity across the bed without more complex fitting parameters?

    1. damienideas Post author

      Good day 3dp, are you talking about the absence of theta lens? My understanding was that these lenses would be used to correct the focus of the laser and make sure that all optical path would have the same length across the bed. In this case the laser spot should be more regular on the whole surface.

      I was thinking about doing a ‘simulation’ of the form1 geometry to see how the laser is really moving ton the bed depending on the angle of the mirrors. On my side I was more worries about the fact that as the form1 dimensions are pretty small, the angle are which the laser is crossing the bottom glass can vary a lot. In this case, I would imagine that you would have to account for the refraction of the interface air/glass, then glass/PDMS to know exactly were the laser pointer will end. Maybe because of that angle, you would also end-up with an ellipse spot even if it was perfectly round in the center…

      But all these correction factors are probably second order compared to the scaling errors I can see on my printer. Especially that these errors are more or less consistent everywhere.

      I’ll keep digging, but if you (or anyone else) are interested in any of these investigations, just tell me, we could organize a call.

  5. kelsorj

    I’ve done a slight variation on your test piece to examine the ability of the printer to make small features ( http://wp.me/3MPgj ). If I loved making non-circular gears then this printer would be great, the response from Formlabs was, we’ll open a support ticket and get back to you.

    1. Martin

      may I suggest you print Damiens 5x calibration file and provide the measurements? As you printed yours angled and not flat, I do not think the measurements can be compared. I provided data from my printer, but I think my caliper measurement capabilities did not do the job and leaving the possibilities of errors due to measuring ..
      As more printers participate in a standardisized test, the more it can be said if this problems are by design, or on an individual printer basis.

  6. Marwin

    Hi and thank you for the work done! Wonder is it possible to apply in some CAD “calibration function” to a STL model. This function shall be inverse to Y=kX+b calculated from measurements. Is there such functionality in Solidworks, AutoCAD? This way it could be possible to distort model in opposite way the printer distorts it so result should be zero distortion.
    Googled this question for some time. Key word is ‘transformation matrix’. Here one may find general approach to 3D transformation in AutoCAD http://through-the-interface.typepad.com/through_the_interface/2010/12/a-simple-command-to-perform-a-matrix-transformation-on-an-autocad-entity-using-net.html
    For SolidWorks as well – http://help.solidworks.com/2013/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IMathUtility~CreateTransform.html
    I don’t have deep understanding of any current CAD system – so your advice and opinion is very much appreciated.

    1. damienideas Post author

      Good day Marwin,
      You are thinking the right way for the calibration, this is how Preform already works. They compute a laser path then apply some deformation to compute the galvanometers angles signal.
      So, to correct scaling mismatch, you ‘just’ have to multiply any points by a ‘scaleFactor’ (in your Xnew = scaleFactor * Xorg + OffsetCst). But the constant will only add an offset to the position of the object.
      In my article, I’ve shown that there is also laser diameter mismatch that will be more complex to compensate. In this case each point of the mesh will need to be moved in/out in the surface normal direction. That transform cannot be expressed with a simple global matrix transform as the direction is local.
      But that could be a fun utility to program, I’ll see if I have some time in the coming days.

  7. Marwin

    Hello Damien,

    Thank you for reply. I do not understand your logic in saying that offset is somehow related to distortion of laser spot shape. How could this spot be always smaller in both X and Y dimensions? Because of what?
    More reasonable explanation to what I see in your excel spreadsheets is that resin on the edges is less cured/undercured and just dissolves in IPA.
    As for the tuning – I assume that Formlabs used this system http://www.ebay.com/itm/20Kpps-HightSpeed-galvo-scanner-for-laser-lighting-NEW-Without-Show-Card-/221204811926
    At least drivers there look exactly as on Form 1 disassembling photos here http://www.bunniestudios.com/blog/?p=3110
    There is an instruction of how to adjust/calibrate drivers here http://www.te-lighting.com/eng/supports/specifi/20K%20Scanners.pdf using blue analog pots on board.
    May be Formlabs adjusts the drivers following such a procedure at least as a first step instead of complete calibration in software/firmware?

    Have a separate question to you with regard to Form 1. I see you are experienced with laser scanners. May you please tell me if the scanner systems have absolute constant speed of moving spot or do they have constant speed for each X/Y servo? Wonder how it was implemented in Form 1? The should have a system/software/firmware to expose each point for the same amount of time to cure resin evenly. Not sure someone cares about this in traditional laser scanners implementations.

    BTW I have an idea of how to explore Form 1 without spending time and resin. May be it is possible to remove resin tank and building platform. Then put a piece of white paper or matte white plastic film/shit instead of resin tank on the same level where curing process is going on. Then have a video or photo camera (with open shutter) facing downwards perpendicular to this plastic film. So one could record laser movements and measure its deviation from test shapes which could be drawn/printed on the matte screen.



    1. damienideas Post author

      [Note that all these are guestimate and unless Formlabs confirms, should be taken with a grain of salt!]

      Thanks for the discussion!

      you are perfectly right on the galvo kits, Formlab probably made a huge command of these cheap kits that can be found on Ebay. As you saw on the documentation the calibration if all done manually which means someone has to tweak the potentiometer by hand to match a ILDA pattern or something similar. I can imagine that they probably even use the technique you described (with a paper/visually) to do it.

      Now the only thing that these calibration give you is that the scale (deviation range for a given voltage) and some dynamic properties (rising/falling time on a square signal) are somehow balanced on both axis. In the Form1, the dynamic properties might not be that important because it’s not a laser show, so you don’t have to beat the eye persistence. For laser show you want to draw your picture 20/30 time per second, the Form1 is only concerned by the illumination time for each point of the surface to cure the resin. My guess is that they are controlling the linear movement speed of the point at all time to make sure the resin gets the right amount of light. Now they are re-tracing the first layers of the base multiple time, same thing with the grey resin or thick 100 microns layers. So Apparently they determine that curing cannot be done in a single pass in all conditions… So many interesting question that unfortunately we cannot answer as we have no access to the USB protocol to control the laser path.

      Now let’s go back to the main question related to the ‘offset’ found in my calibration data. My current theory is based on the fact that controlling the exact laser spot diameter is not that obvious. Each laser diode has it’s own divergence, and without a expensive set of optics, It’s probably safe to assume the diameter is not exactly the same for every printer. The other factor is that the laser has to go through a variable path length depending on the angle, and also layers of material (glass/pdms) with different refraction indices that deform the shape of the spot.

      I’ve also seen the same ‘offset’ with clear or grey resin setting. I hope that the grey setting is actually curing the resin more and thus avoid any dissolution of the surface when we are dumping the object in the IPA bath (I’m using rubbing alcohol myself). The microscope views of the surface state I’ve taken where also pretty smooth, it didn’t seems that it was ‘dissolved’ but I’m ready to be convinced if we gather more evidences !

      The interesting point is that whatever the cause of this offset, it won’t be compensated with a global transform matrix. So now, either Formlabs gives us an advance calibration mode, or we have to make a ‘hack’ solution that deform the geometry before the print…


  8. Marwin

    Damien, thank you for the answer and lets proceed with discussion.

    Lets start with terms used.
    We need to separate two types of errors –
    1. error in calibration of the galvos/drivers/DAC output which results in distortion which looks like Y’=kY+b and X’=mY+c, where 0 is the center of building platform or one of its corners. b and c – are offset from the zero, i.e. (0,0) -> (c, b)
    2. systematic errors in linear dimensions of printed objects independent on its position on building platform. This error in measurements could be result of errors in tracing algorithm. For example it may consistently undershoot outlines and not to properly cure resin on the edges. To fix this, scanning algorithm shall be changed. To proof and measure this assumption it is enough to print hollow shapes of the same size – round and square holes along with solid cylinders and cuboids you did already. They shall be close placed (holes close to cylinders of the same size) to minimize type (1) errors.
    Looking at the numbers in your spreadsheet, sorted by size of the objects I assume we deal with a composition of errors (1) and (2).

    Unfortunately I can’t do this myself as I just send my printer to US for calibration/exchange.

    With regard to reason of errors type (2). I just thought that under-cured resin could not be dissolved by IPA while rinsing but remains in resin tank while de-laminating process goes on. It is a question of where exactly line of break is going on the outer edge of cured layer. Definitely single point radius of the cured resin which resides inside the cured shape shall be bigger than open part radius for the boundary points. Given both points were cured for the same amount of time. So they either shall scan outlines slower than inside of the 2D shapes or scan it twice, triple whatever (less precise than variable scanning speed) or overshoot all outlines for some fixed distance (which could be more complicated to program).

    To hack algorithms and timing used it is enough to have video camera (faster is better – 60 fps, 120 fps, 240 fps) placed as I described and some primitve video/photo editing software which could make composition frame for given number of consecutive frames. No need to hack USB as it used just to copy .form file to internal SD card.



    1. damienideas Post author

      nice synthesis, I agree that we are probably confronted to both errors type (geometry and drawing path). In the geometry part I would include other non-linearities introduced by the projection and the different materials the beam has to cross.

      I find it interesting that I have not yet seen anyone come back to tell us, his/her printer is well calibrated. I really hope you get yours back soon and in a better shape that it was before. Do you had by any chance made some calibration print that you could use to check if the return was useful?

      As for the camera, it could be an interesting experiment to do, but as we don’t have access to the drawing parameters it won’t really help us correct the issue I’m afraid. I’ve started the geometry deform function to see if I can progress on that side.


  9. Pingback: Laser Scanner for 3d Printer Application - Laser Pointers

  10. Pingback: Ultimaker 2 – First week and initial impressions | Codethink

  11. Ev

    Hi, I’m trying to use your calibration spreadsheet and files to calibrate my Form1+. I’m having trouble understanding what numbers to use to plug in to PreForm, which now gives a X/Y calibration option from 0-4% in each direction of X and Y.

    You say you had an error of 1.4% in the X direction and 0.35% in the Y direction (which I imagine is what I’d put into the PreForm software calibration), but I don’t see those exact numbers anywhere in your spreadsheet.


    1. damienideas Post author

      Good day Ev,
      Please have a look at the cells X-Scale (1.015) and Y-Scale (1.003) that’s where the 1.4% and 0.35% came from. If you have any other question don’t hesitate!

  12. christopher barry

    Damien, Hi. Just found you and your site. I found it by going to the end of the formlabs forum in the feature requests category, as I am trying to consolodate ideas into a better grouping so FL can actually focus on what users want. see “Feature Request List #1” on the forum for the first in a series I am going to create. http://forum.formlabs.com/t/feature-request-list-1/6185

    Anyway, I too created a calibration tool spreadsheet that looks, well, amazingly similar to what you had done!
    I’m on my third printer now, and this one seems to be holding out OK (knock on wood). You likely don’t give a hoot anymore, as you sold your form1, but I’d be interested in your take on my approach.

    Great blog 🙂

    1. damienideas Post author

      Hello Christopher,
      your form looks indeed very close 🙂
      I’m pleased to see preform is evolving nicely, your large calibration model is more than I was able to dream to print when the form1 got out. Good luck with your new requests features, they seems to be good suggestions.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s