Tag Archives: 3d printer

Precision VS accuracy : why I sold my Form1

Disclaimer: I had one of the first Form1 printer sent to backers so my point of view might be biased and I’m sure Formlabs have perfected their calibration process and maybe even changed some mechanical parts of the printer to answer some of the point raised in this article. Take all of this with a grain of salt, read some of the forum posts and make your own judgment!

It’s been a while since I posted on this blog but wanted to update my (few) readers on my current 3D printing status. I’ve finally sold my 3D touch a few weeks back, I had sold my Form1 previously in October to people that needed one to develop alternative resins. I’m waiting for a Zim dual head printer that should be there is a few month, so I’m not abandonning the 3D printing world. It’s just a pause 🙂

So why posting on an old subject?

After a few months of use, I reached the conclusion that the Form1 with all its promises was not going to work for my needs (more details under). But at the time, the number of printers in the wild was small and I couldn’t say if my experience was a fluke or more an intrinsic issue of the design. Then it happened: more and more posts in the forum talked about bad galvo calibration, or printer that would lose calibration after some time. The final stroke was a post made by Kevin Holmes (PDF) were he had to manually adjust the analog PID controllers of each axis to correct his axis scaling and another one (PDF) where he had to replace a galvo on his printer… There is also a growing concern to know if the printer can be used for engineering purpose.

When I pledged on Kickstarter, my idea was to use the Form1 to design brain teasers. In other words, mechanical assembly where all the pieces have to slide and fit perfectly with reduced tolerances. But what the Form1 brings to the table is slightly different: the galvanometer system is analog and moves continuously drawing very  smooth curves. In other word while the system is precise, it does not mean the result will be accurate.

Precision is not Accuracy

First, the difference might seems like a semantic war (see how the “Does zero padding help in improving frequency resolution?” discussion on the DSP group of Linkedin turned into a flame war). The topic is also relevant to my area of work when it’s important to know the range of possible steps/pixel a cursor of a touch screen can move to (precision or quantization) and what is the maximum deviation from the real position (accuracy). To make it more clear the schematics under should explain what I mean:

Precision VS Accuracy

So Precision is akin to the number of steps the laser point can move, and in a Form1 you could consider it as nearly infinite as the analog PID are effectively smoothing the output and the mirrors have a finite frequency response. Now, even if the laser is moving smoothly from one point to the next, it does not mean the laser is aiming to to right location on the bottom of the tank. These accuracy / linearity errors can have many causes.

Accuracy errors in the Form1 cause and mitigation

The challenge of creating a cheap stereo-lithography printer is the temptation to use cheaper elements. From my point of view, the current design can be improved in these areas:

  1. The pealing process is really creating tension force that leads to deformation or requires heavy supports that cannot be cleanly removed from the part. Adhesion to the build platform and damage to the PDMS are also sources of failure. Some of the professional printers are using a dive-in structure were the part is sinking in the resin and the new layer is cured from the top but you need to maintain a large tank of expensive resin.
  2. To make is more compact, the printer is using a mirror to bend the laser path. The beam is now touching the bottom of the tank with a variable angle. As the tank is composed of multiple material, the refractions will deform the laser spot and introduce non-linearity on the border of the print area that could be challenging to correct.
  3. The printer does not include any optics to correct of the barrel effect (F-theta lens), as the laser paths will be varying in length, the focus spot size might change depending on the location.
  4. Last but probably the most important element are the galvanometer amplifiers. Choosing a analog PID controller was really terrible as the user cannot really adjust or calibrate the printer without opening it and fiddling with variable resistors on the controller board (which will void the guaranty). Digital PID controllers (or cheap FPGA with DAC/ADC converters) wouldn’t have been much more expensive and would have given a very wide range of calibration options.

Note that apparently Formlabs has included an option to scale the X and Y axis in Preform 1.2.1 to compensate for some of the calibrations errors, so they are making effort answering the user-base but these correction are likely to be global and won’t correct local non-linearities that I’ve observed on the border of the platform.

Form1 from an engineer point of view

So in its current contraption, I would classify the Form1 in the top left quadrant (Precise but not accurate). Depending on your requirements, this might be perfectly acceptable. So for example if you model figurines or art shapes where surface finish is more important than dimensional accuracy then the Form1 might fit your needs. For mechanical assemblies with small tolerances having a 1.5% discrepancy on the scale of one of the axis (error that I had on mine) makes any circle an ellipse and render the pieces not usable.

For mechanical parts, I would be tempted (but I have no experience) to use either:

  • DLP stereo lithography printers that at least guaranty that each voxel (pixel projected) is at the right location. The calibration of these printer seems to be more straight-forward as you only have to make sure that the projection area is rectangular.
  • An other option might be the ink-jet printers were the XYZ moving stage is more accurate in positioning the print head

Unfortunately there is no free lunch in this word, so I will go back to FDM low cost printer that at least fit my budget with an acceptable accuracy and finish for the price of the consumable. If you can recommend any other solution please send me a message or comment!

[<<Prev. -Preform  not compatible with JewelCAD]    [3D Printer articles]   […- Next>>]

Advertisements

Preform not (yet) fully compatible with JewelCAD

The challenge

I’ve done some test prints for someone in the jewel industry. They wanted to see the Form1 quality output to maybe use it as a quick prototyping desktop station and get faster development cycles. We discovered that in some conditions JewelCAD is only capable of exporting to STL the positive geometries OR the negative geometries (holes / notch) but not the fused triangle mesh.

The only way to merge both negative and positive geometry is apparently to slice the object and export it as SLC file. This file format was created in 1994 by 3D systems and is now at the second revision. The evolution was mainly to store the data as binary to save space but the content of the file was not changed much.

Preform is unfortunately not capable of reading SLC files nor importing positive and negative bodies to form a finite model. That’s another instance where it would be handy to have the Printer protocol open or at least an API to build our own slicer for the Form1.

Workaround proposals

I can see two ways to solve this challenge:

  1. Use a 3D modeling software to apply the boolean operation
  2. Re-constuct the STL triangle mesh from the SLC slices data

The first option can be done using the free software Blender (see this video tutorial for example). Boolean operations on complex triangles mesh are some time not possible to apply. It’s especially true if the original geometries are not completely clean (holes / inverted triangles…). In the case of my test print, Blender and Netfabb were not able to apply the subtraction.

The picture under is showing that even in a very simple case, subtracting a sphere from a cube in Blender creates a lot of extra triangles. The whole difficulty is to generate precisely the cut/intersection line as explained in this paper by Biermann and Al.

simpleBoolExample

So if the Boolean operation is not possible, we can only regenerate the STL triangles from the SLC data. Provided the original geometry slice thickness was at least the desired print configuration, it should not affect the output quality. Commercial software like SLC2STL or Netfabb seems to be able to perform the conversion but the licenses are expensive for a casual usage (in the $k range).

As the triangle geometry is an interesting algorithm development, I have no option but add it to my TODO list! The first step of this un-slicer is of course to read the SLC data.

Matlab SLC file reader

The SLC format is a simple collection of slices composed of a collection of boundaries. You can read the format specification [here]. Each boundary is a closed polygon (poly-line) defined by a series of [X,Y] vertices with the first point duplicated at the end to close the loop.

I’ve built an viewer in Matlab to explore the content of SLC v2 files. The archive contains 2 example ring slices SLC file. After extracting all the information, the viewer displays a 2 plot window were the user can click on any point in the 3D plot on the right to display the full slice on the left pane.

SLC_view_Ring1

SLC_view_Ring2

The second picture is showing that external (blue) and internal (red) boundaries are drawn in 2 colors. In the SLC format, internal boundaries are stored clockwise while external boundaries are anti-clockwise. Detect reliably the orientation of a poly-line curve is tricky as it must work for concave polygon. The easiest method is to find one point of the convex hull and use a determinant to get the local convexity…

convexPolygonOrientation

concavePolygonOrientation

What’s next?

So while we could dream to have Preform reading the slice directly, it’s probably easier to get one of these software to convert the SLC to STL. This operation is definitely not obvious with many steps to get it working is all circumstances so I probably won’t tackle it anytime soon…

[<<Prev. – Episode 2 : Form1 calibration]    [3D Printer articles]   [Precision VS Accuracy – Next>>]

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.

calibrationExplained1

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.

calibrationExplained2

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

Cylinder_dimensions

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.

x5Cylinder_platformPosition

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…

Measure_x5Cylinder_0-8-2

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

x5Cylinder_calibration_results

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).

cylinderX5_nonLinearity

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>>]

Extract STL from Preform project files

The Form1 printer is supposed to be a click and print easy consumer solution. You get a sleek hardware (that still needs some tuning) and a polished software (Preform) that does not let you tweak a lot’s of options. So if for some reason the auto-generated supports are not working or you want to use a non-official polymer, then you are locked by the closed nature of the product.

When I’ve discussed with Formlabs during the SF Maker Fair, they confirmed they had no intention to release the USB protocol and the .FORM file format specification. The result is that if you want to use a Linux OS or another slicer, you are restricted (ex: generate internal supports function does not exist in Preform yet). These limitations do not exist with the B9 printer, as they decided to release everything as open source.

So what can be done? Well we are limited to reverse-engineer the FORM file or the USB protocol. It’s tedious and random: the end result is not guarantied but by doing so You can learn things about the Form1 and maybe fix some short-coming. A few stuff that open protocol/file could do:

  • enable other OS (no need to use visualization in Linux for ex)
  • custom slicer to fine control the supports, generated path, calibratio
  • Compatibility with different resin/polymer by adjusting the curing parameters
  • new cool features like the vat-fogging map

Anyway, with this post let’s start simple by extracting the STL meshes embedded in the .FORM files.

Extracting STL Mesh data from the .FORM

Using  something like Frhed free HEX editor let you peak at the file content, and a little bit a search gives this 80 characters string with “stl” inside… Yes this is, if you remember the STL file format the first field of a binary format file.

formSTLHeader

And when you duplicate the same object, or add another STL, you can see that each STL instance is stored in the .FORM file. More interesting is the fact that preform keeps the STL in its original dimension and orientation. So you can see that even if I scaled and rotated one of the pieces (from here), the extracted STL shows the supports scaled and with an angle.

multiSTLinMesh_rotateNScale

This is telling us, that somewhere in the meta data of the .FORM file you have the position, rotation and scale information. This is stored in binary (not text) format and thus is more complex to extract. I might try to find where it is stored in a later version of my STL extraction program.

The Utility to extract STL mesh data from .FORM files is coded in plain C, so you should be able to recompile it on anything without much issues. The current EXE was compiled using Visual Studio Express 2010 x86, so you might need to install the VS 2010 redistribuable package before using it.

Utility usage is: extractSTL xxx.form
This will extract the STL meshes and save them in “xxx.form_meshN.stl”

The EXE, source code and VS project files are available here.

Happy forming!

[<<Prev. – Form1 might need calibration]    [3D Printer articles]   [Form1 Calibration Procedure – Next>>]

3d-Touch Dual-Head Printer [SOLD]

3D Touch Dual Head Printer for Sale in SF Bay

[The Printer is sold!]

As announced in a previous post, since I received my Form1 Printer I cannot really justify keeping my 3DTouch printer. It’s a shame as STL printers and FDM printers are complementary. I will miss the various colors and material available and the fact that the parts are ready to be used after print. No rinsing bath / UV curing needed like the Form1 🙂

What you will get is the full package with everything to print and a lot’s of filament (~22kg / ~$900 of filament). I would rather do a local sell (I’m south SF Bay) than prepare a shipment, it’s heavy! If you come to pick-up, I’ll give you a training session of an hour to learn how to prepare your model with Kisslicer, load the filament and print.

I’ll publish this on Craig’s list in a few days, so my blog readers have some early notice!

Content of the package

  • 3D-Touch Dual Heads printer lightly used (I’ve probably printed less than 4 kg of filament since April)
  • 18 New/unopened Bits From Bits 1Kg 3mm spools (various colors, PLA and ABS, see details under)
  • 7 used spools (with at least 4kg of plastic remaining of various colors)
  • All accessories: clamps, cutters, USB key to load models, Small diameter spools adapter…
  • Consumables: 2 inches blue tape roll, Acetone (only if pickup, I’m not sending it)
  • You can get the sturdy metal cabinet under for $180 (from Lowe’s store, only if pickup, I’m not sending it), it’s pretty handy to store everything.

3DTouch_printer_and_cabinet

PLA Spools Included

Note: on open spools the remaining weight are only evaluation, I’ve been conservative so you’ll get more filament! I kept my PLA spools on plastic bags after opening.

  • New Unopened 1kg / 3mm PLA spools from Bits From Bytes (protected in plastic with desiccant):1 Black, 3 Natural Clear, 2 White, 1 Red, 1 Blue
  • Open spools 3mm from Bits From Bytes:
    Black 200g remaining, Purple 800g remaining, Green 500g Remaining
  • Open spools 3mm Matter Hackers:
    Orange 300g remaining, Red 400g remaining

PLA_spools

ABS Spools Included

  • New Unopened 1kg / 3mm ABS spools from Bits From Bytes : 2 Black, 3 White, 2 Green, 2 Blue, 1 Yellow
  • Open spools 3mm from Bits From Bytes:
    Yellow 900g remaining, Black 900g Remaining

ABS_spools

Send me your offer at: damien[dot]job[at]gmail[dot]com

For a friend wedding this was my last print, mustache for everyone and bow-tie for the groom! The 3D touch is sturdy and super reliable printer!

Moustache_BowTie

[<<Prev. – Giant Dice]    [3D Printer articles]   [TBD – Next>>]

The Form 1 might need calibration after all…

July 12th edit : I have now a Form1 Calibration procedure.

These past few days some very nice Form 1 tests have been publish by TJ and Gregg. These tests have been concentrating on the shape and small features. I’ve not yet seen a test on accuracy / linearity.

The Form1 is supposed to have a 300 microns (0.3mm) diameter laser spot which limits the size of individual features but the galvanometers (galvos) can be oriented very precisely. I think I recall reading that someone in Formlabs was talking about a few micron of positioning accuracy (position of the center of the spot on the bottom of the vat). The galvos are a dynamic system using PID controllers and tuning them to get a perfect positioning takes time (see my post on the ILD test cases).

Recently I had to print a mechanical assembly for someone and even with the 300 microns tolerance, it was difficult to slide the cylinder into the tube. So I decided to investigate a bit more: I was also wondering if the peeling was not introducing some deformation in the piece.

Simple Linearity Test

The test I designed is simple: It’s a series of 20mm cylinders that are horizontal/vertical and with a 45 degrees angle. The piece is placed perpendicular to the platform to measure independently the X and Y galvo. As any mechanical system, the mirrors are not jumping from one location to the next instantly. So even if the calibration is perfect in static condition (after some resting time), the dynamic properties (damping and oscillations) might be off. These configurations are also axis dependent as the mirrors might have a different shape/mass and each axis has his own amplifier. In the ILDA test, this dynamic behavior is checked with the circle inside the square.
Male_torture_test

And the results are not as expected… As you can see the cylinders are not really round! So either the preform sampling space is too large (not enough points on the path / movement too fast) or my ‘peel’ axis amplifier board needs some adjustment.

Linearity_measure_XY

My caliper measurements are:

Horizontal cylinder:
Peel axis = 19.52 mm
Orthogonal axis = 19.99 mm

Vertical cylinder:
Peel axis = 19.5 mm
Orthogonal axis = 19.87 mm
Vertical axis = 19.96 and 19.92 mm

45 degrees cylinder:
Peel axis = 19.51 and 19.71 mm
Orthogonal axis = 19.91 and 19.75 mm

So conclusion while the Z (thickness) and Y (orthogonal to peel) axis seems to be close, my printer seems to have an issue on the third dimension. I hope Formlabs will have a calibration procedure to correct this issue.

Location Influence on the Print Quality

The other main issue I’ve encountered while printing technical piece was reliability of the print quality. In some occasions the peel process is making loud “clacks” noise when the surface to remove is large. As the tilt is starting from one side, the strength created on the prints is different depending where the geometry is placed  on the base.

The picture under is showing two pieces that I had to reprint twice to get an acceptable result. The peel strength issue triggers supports break and non printed/delaninated walls.

Location_print_error

The only difference between the two prints is the location on the platform. I didn’t had to regenerate the supports nor changed the material setting (grey resin 50 microns). On my first print (left side), only the C part came out well. So for the second try I removed the C part and moved back A and B as far away from the peel side as possible. Note that I had to print the pieces horizontal as it’s not possible to generate internal supports yet and any other orientation would have resulted in non supported features…

Prefom_locations

I’m not sure what to think about this issue, maybe reducing the peel speed when there is a large area to remove could help? If this issue is proven, that will mean the silicon layer will get damaged faster on one side triggering a replacement more often due to fogging…

Anyway I’ll keep on exploring the Form1, if you have any question please ask I’ll make more tests. Cheers!

[<<Prev. – Preforn 0.8.1 Evaluation]    [3D Printer articles]   [Extract STL data – Next>>]

Evaluation of Preform 0.8.1

As I was explaining in my previous post, the form1 printer software is still a work in progress. Some bugs have been squashed with the 0.8.1, but some remains and I’d like to go though the some of the current challenges that a fellow formers might encounter. The first ones are the most critical in my opinions…

Object skin is not always sticking to the filling

[I’ve submitted this bug #1123 to the community board]

I’ve chosen the impossible heart brain teaser available in Thingiverse to see how very simple and smooth pieces would print… First it was not a brilliant idea to print it without supports. I had to use a clamp to pry apart the pieces from the platform and in the process damaged a bit the puzzle surface.

impossibleHeart_plateAndAssembly

But the real issue was, as some of the Reuleaux spheres in my previous post, the perimeters on some of the pieces didn’t stuck and I ended-up with a ugly result. What you see behind are the back and forth inside filling profiles. My hunch is, depending on the pealing direction, the perimeters might not be completely merged with the filling leaving a weak spot in the structure…

impossibleHeart_peallingPerimeters

If I was Formlabs, I would try to extend the filling paths so that it overlap at least the last perimeter to make sure everything is correctly glued together.

impossibleHeart_extendedFilling

[.form file]

25 microns prints non sticking to the platform…

This point a a bit a hit or miss. I’ve followed the advice in the community forum that using the “grey 25 microns” material profile was increasing the chance of sticking and so far I had 2 out of 3 prints working. The sticking might be affected by the location of the print on the plate and the orientation of the base platform. If you have a long platform, turn it so that the peeling starts on a small side.

To solve this it would be great to have more control on the laser, like being able to set the speed of the scan, the number of repetitions, the number of perimeters. That would open quite a few possibilities and for the most advanced users it could be a great way to experiment.

Overlapping supports are creating pockets of uncured resin

[I’ve submitted this bug #448 to the community board, and it’s marked as closed]

That one is strange but apparently it’s already fixed for the next revision. The problem arise when the software decides to place 2 supports so close that they are overlapping. In this case the internal filling back and forth of the laser is missing at the intersection. That will create a hole of uncured resin and I it’s safe to assume the support strength is gone…
[.form file to test]

supportsHoles

Peripheral loops are overlapping on very thin walls

[I’ve submitted this bug #1124 to the community board]

Preform is drawing 3 loops around perimeters. These loops are continuous and when the geometry has a very thin wall, these perimeters will get inverted and even create filling outside of the geometry… (Yes I know it’s not clear, just look a the picture to understand the issue…)
[.form file to test]

outsideFilling

That’s all for today 🙂 If you have any comment or extra bug to report on this release please comment I’ll investigate them!

[<<Prev. – First steps with Form1]    [3D Printer articles]   [Form1 Needs Calibration – Next>>]