In one of the recent posts I printer a solder paste stencil. The print is challenging as it contains small details, is thin and prints directly on the build plate. Even I use the same exposure on the first layers as did on the other layers, the first layer showed some exposure bleeding.
The hypothesis is that the silver surface of the build plate reflects the light, which cures the resin, and therefore more resing gets cured. I was thinking about getting really dark black paint and to paint the build plate. One of my readers, Zemerick (thank you!), brought up that Vantablack cannot be used (as it is a fragile forest of carbon nanotube), but Black 2.0 or 3.0 is just acrylic paint with a lot of pigment. So I got Black 3.0 and painted half of my build plate:
The paint can get be scratched easily (you can see the test scratches), so I was afraid it would peel of. To my surprise – it didn’t. But the test print didn’t stick to painted plate:
Reason for that? The paint is soluble in resin. I got leaking black pigment to my vat, the paint after a 5-minute print was really soft. I tried 2 more prints with roughly the same result.
Since the prints peel off, there is not much to compare and I cannot say if it helped or not.
Conclusion? None. I still think UV absorbent surface finish on the build mitigates the exposure bleeding. However, I am not sure how to create one. Anodizing would stick but is still too reflective. I could use spray paint, but not sure if it is dark enough and if resin will stick to it. I probably wait until the replacement build plate will be available and then (maybe) try some more experiments.
A few months ago there was a tweet discussing printing solder paste stencils on a 3D printer. Someone suggested we should try it on an SLA printer. After two months I did the experiment.
First of all, I struggled a little to get the 3D model of the stencil. There is a service https://solder-stencil.me/ which is supposed to generate the models of the stencils from gerber files. Unfortunately, when I uploaded the gerbers of my board, the model I got was completely broken. So I decided to write a custom tool. The easiest way was to use OpenSCAD (and finally an opportunity to learn it!).
So I wrote a short OpenSCAD script which takes two DXF files on the input – one for the outline and one for the holes. It also takes information on whether to generate a front or a backside stencil. You can also supply custom thickness, frame thickness, etc. If you use KiCAD I also wrote a simple Python script to export all the necessary files (which allows you to use Makefile to generate all the manufacturing data!) For the reason to me unknown, sometimes OpenSCAD produces corrupted STL files. Therefore I use admesh to post-process the STL files.
Then I started printing on Elegoo Mars – without much success. The holes were not good enough – I wasn’t able to print 0.2 x 0.5 mm pads. Then I discovered, let’s call it “a room for improvement”, on my printer. I wrote a full blog post about it (if you have not read it I recommend to read it first and then to continue reading). After the modification, I got usable results. What works for me the best it to use Siarya Fast grey resing, 1 bottom layer with a 15-second exposure and normal exposure of 7 seconds. No supports and to print it directly on a build plate. I also do not post-process the stencil (i.e., cure them under UV lamp) – I am afraid of curving them. As they are not mechanically stressed a lot, I think it is fine. They also stay nicely flexible. The nice thing about printing the stencils – one stencil is printed in 4 and a half minutes.
Then I tried to populate some boards using this stencil. I used Microprint 2006 solder paste. I think the pictures below speak for themself. All resistors are 0402, the ICs usually have a pitch of 0.5 mm.
I am excited about the results. I know I stress the printer a lot and I was able to easily populate a board with ICs with a pitch of 0.5 mm with the stencil. I have to admit there were few defects, but otherwise, they serve just like the metal ones.
Since the price of a professional-grade stencil is roughly 10$ it does not make much sense to not buy them and print them. To print them it is actually more work and slightly worse results. However, what I like about printed stencils is that they are self-aligning. Also, you can customize them easily without thinking much in advance – if you buy the metal one, you have to wait at least a week to get it. With a printed stencil you are ready to go in less than 10 minutes. I see potential here for repairs – you can easily print a partial stencil to, e.g., put paste only for one IC and then to reflow the whole board.
Did you enjoyed the post? Consider supporting me on Kofi:
However, my first experiments were a complete failure. I used Elegoo standard grey and Siarya Fast grey – both without acceptable results. See the photo below (left first results, right expected results). Practically all the holes were rounded and closed in the bottom. No matter how big compensation I used, I got the same result. And when you think about it, it makes sense – the exposure bleeding rounds the sharp corners. If I compensate for it, I might get the correct dimensions of the holes, but I cannot get sharp corners.
I thought – the holes are only 5 pixels wide, maybe I am running at the edge of what the printer is capable of. Then I took of the resin vat and looked at the pattern the display is showing. It showed a nice, sharp, crisp image of what I wanted to print. Therefore, the limitation is not in the display itself. I took one of my old broken displays from the printer and start to examine it.
There is protective glass on the display (see photo below). The glass is not glued to the display, in fact, it is similar to a glass you can put on your smartphone. It is not held by an adhesive, rather it is some kind of electro-static bond (I actually don’t know the physics behind sticking the protective glass on your smartphone). So it is easy to remove. I thought this glass contains the top polarizer, but it is not the case. This glass is 0.7 mm thick and provides a gap between the resin and the displayed patter itself. This gap provides a space for the beam of light to spread and therefore, to reduce the effective resolution of the display – well – it is one of the significant causes of exposure bleeding.
The Modification of the Printer
So I decided to try an experiment – remove the protective glass and print without it. The good news is there is a piece of glass underneath the display which provides mechanical support for the display (the glass is there to probably protect the top polarizer from scratches and also from resin leaks not to strengthen the display).
To print directly on the display there is a need to lift it by the thickness of the glass. I actually decided to lift the display 0.2-0.3 mm above the vat bottom to ensure my FEP film lies directly on the display – the FEP film stretches over the display. To do so, I printed some spacer I put between the pink base plate and the supportive glass.
Since I removed the protective glass with a black outside frame, some of the UV-light was passing around the display. I solved it by putting a thin aluminum tape around the display.
And then the modification was done. Below you can see the vat sitting on top of the display:
I poured resin in and started printing. As you could see in the introduction, the modification helped a lot. See microscope photos below (I am sorry for the poor quality, but I haven’t created a photo shooting jig for an optical microscope). On the left the original one, on the right after modification. One thing you note immediately – you can clearly see individual pixels/voxels after modification. When you look by eye, the prints are matte, not glossy – this is probably due to the “pixelated” surface. In the prints, I used only one bottom layer. You can see that the other layers are nice and sharp, however, the first layer (despite I used only 15 seconds for exposure) is bloated. This is probably caused by the light bouncing off the build plate. But this is only a speculation and I would appreciate the opinion of the others.
I also printed the AmeraLab test piece. The result is wonderful. You can see that even the smallest strands on top the building got printed (however they got bent during washing).
I am pleased with the results of this modification. However note that this modification has its downsides – if your resin leaks, you can probably say bye to your display. You can scrape the resing with a razor from the protective glass, however, I think you cannot do the same with the polarizer – the resin will stick to it much better and the polarizer is soft, compared to the glass, so no razor.
Also, this mod adds accuracy, however, it removes nice smooth, glossy surface finish many Mars users are used to. So you get detail for I am not sure if worse, but definitely different surface finish.
I haven’t done tests that measure the amount of the exposure leaking but I expect much fewer problems with it, maybe it will be reduced under a measurable amount. I am also left with an open question on how to deal with the exposure bleeding of the initial layer which is significant even in case I use the same exposure as for regular layers. It would be interesting to put an extremely dark coating on the build plate. However, even if I got vantablack or similar, I don’t know how to protect the paint from the prints and during scraping the prints.
Did you enjoyed the post? Consider supporting me on Kofi:
After investigating the Z-height inaccuracy on the Elegoo Mars, and applying the official motor replacement sent to me by Elegoo (they have the best user support!) I was left with one unanswered question – what causes the last, quite small (roughly 2 %) linear error on the models’ height?
I started to measure the movement of the arm using an indicator, however, all the measurements looked good. I even measured the original screw using an optical microscope (see the raw data). It is pretty good – it features practically no jitter and only small linear error (0.2 mm/150 mm) which could be easily compensated in software.
Then I printed a large staircase (see photo below) which revealed the fact I was missing – the error is not linear. The printer prints some levels higher and some lower. The cause is in the combination of the long printing arm and the Z-rail. The Z-rail provides good guidance in the direction of the axis movement, however, it does not preserve the parallelity of the carriage and the axis. It means the carriage can “wobble a little bit” during the movent which translates into an observable difference in the Z-height on the end of the long arm (see illustration below). The reason I did not get the problem with an indicator was that I was measuring too close to the screw. My bad – there’s not plenty of places you can mount the indicator on the printer and I went with the easiest one…
There is no easy fix, however, as tuning Elegoo Mars become my hobby in the last few months, I decided to rebuild the Z-axis. You can see the results below:
I machined the new axis column and mounted two linear rails there. The columns are scraped so they are perpendicular to the display – currently, the perpendicularity is withing 0.03 mm/150 mm. I am not sure if it is an improvement over the original rail as I forgot to measure it. Also, the new rails were shifted so the linear rails are in a plane of the screw – this arrangement should minimize the wobbling of the carriages caused by the screw pushing to them.
I also decided to switch to a ball screw instead of the original one. Precision was not the main reason here – the original screw is pretty good and also featured practically no backlash when I used a casted nut. However, the casted nut has a too tight fit and squeaked occasionally. It was also an opportunity to use a proper screw housing with proper bearing. It also allowed me to mount the motor using a flexible coupling, thus to mitigate resonances from the motor. I used 1204 screw with appropriate FK10 housing.
I also changed the stepper driver to Trinamic TMC2025 – it supports StealthChop – a special current chopping, which allows the motor to move practically silently. I also changed the fan for quiet one.
Note that the modification are not final yet – some prototyped 3D printed components need to be properly machined (this is mostly as a proof-of-concept) and the wiring needs to be tidied a little.
The most noticeable improvement is the reduction of noise during printing. The printer is quieter than many laptops. I have also verified the printer produces square models that fit nicely together – and most importantly have the correct height. However, there is minimal or no improvement in the surface finish – it stays pretty much the same (as there is not much to improve anyway). So if you are printing minis and not functional pieces do no bother with such tuning.
In one of my previous posts, I examined the XY precision of the Elegoo Mars printer. If you are not aware of the “exposure bleeding”, please read the post first. There was one problem though; ChiTuBox does not support compensation for exposure bleeding. Therefore, your models can be slightly overgrown and most importantly, when you print directly on the build plate, there is en elephant foot – the first layer are roughly by 0.1-0.4 mm larger than they are supposed to be. This is due to the long exposure period of the first layers.
I wrote a simple command-line utility, which I call ElegooMarsUtility, in September. The utility can read an already sliced file and compensate for the exposure bleeding by eroding the image (imagine removing a few pixels on the edges of white areas). You can find the utility on its GitHub page.
I posted about this utility on the Elegoo FB Group, however, people seem to struggle with the usage of command-line tools. Finally, I found a little spare time, so I programmed a simple (and probably lame) GUI for the tool, so people can use it. I hope it will do the job. It is a single form window, where you enter your compensation values in pixels, specify the input and output files and hit the run button. After a while (depending on the size of the input file) you get a compensated file.
If you use Windows, you can download the utility here, if you use Pip. Unfortunately, the Windows version is bloated and takes few seconds to start, however, there is not much I can do about it – it is the price for having a single executable. If you install the tool on Windows using Pip, the startup will be instant.
Also, if you like the tool (or my other work) consider supporting me on Ko-FI. Supporting me allows me to buy hardware and resing which goes into my research and experiments.
Most importantly; the utility works with the anti-aliased files (thanks to fookatchu and his wonderful library for handling the sliced files) and allows you to specify compensation for the bottom layers and the normal layers. This allows you to get rid of the elephant’s foot.
What compensation values you should put in? It depends on your resin and exposure time. The best way is to experiment. Personally, for Elegoo Gray I use an exposure of 8 seconds, bottom layer exposure 30 seconds, the bottom layer compensation is 6 and the normal layer compensation is 1.
One last think about the compensation. Currently, the tool compensates only for exposure bleeding. However, there could be also an error caused by the UV-light rays not exposing the resing perpendicular to the build plate, but under a slight angle (as the light source is more a point than a surface). I was not able to measure the impact of this effect on the size of the components – in theory, the worst-case scenario is that the error is 0.02 mm on the sides (based on the light source geometry and the layer thickness). The error depends on the position of the object on a build plate – objects placed in the middle are effected less than the objects on the sides. If it proofs that this error is significant, I will implement it into the tool. However, as we are dealing with compensation less than a pixel, it requires some experimenting with partial exposure.
After publishing yesterday’s post I observed a strange thing – the lid of my Elegoo Mars came off during printing. The encoder I mounted on top of the Z-axis bounced it off. That was strange, how? And then it hit me. I have never, ever measured backlash of the bearings of the lead screw. I have only measured the backlash of the screw itself. Well, I think a video is worth more than a thousand words:
There is a play roughly 2 mm in the housing of the lead screw! I disassembled the printer:
The cause is clear – even the motor has a lead screw as shaft and therefore, you would assume it is designed for axial load, it is not. There are ordinary ball bearings (no axial nor angle contact bearings) and most importantly – there is a spring washer tensioning the bearings – just like in an ordinary stepper designed for purely radial load. This is, in my opinion, a clear failure of the motor manufacturer MOCOC TECH. Also, there is another source of problems – the silencer – as the screw is mounted in the motor and the rubber silencer is soft. The silencer probably prevents from resonating with the top plate of the printer and also creates a flexible element which can compensate for the axial misalignment of the screw and the nut.
What is the solution? There are three solutions in my mind:
dirty & cheap – get two M8 washers, put them in the motor’s rotor, remove the spring washer and tightened motor body screws carefully to slightly tension the ball bearings. Also, remove the silent block. This is a solution for roughly 3 CZK. Warning: This is a dirty solution. Deep groove ball bearings are not designed for axial load nor tensioning. Also by removing the silent block, you remove flexible element which could compensate for misalignment of the screw and the nut. Your risk shorter life of the bearing, screw, and nut. On the other hand, the speeds and axial loads on Elegoo Mars are not that big, so you might be OK for years with this solution.
better solution – get a pair of axial bearings F8-19G and use them instead of the ball bearing. Pretention them either as in the previous case or with a hard spring washer.
The best solution – build separate housing for the screw with contact angle bearings and connect the motor via flexible shaft coupler. This solution provides noise reduction using the silencer. However, when you try this it might be worth it to rebuild the Z-axis to use a linear rail as the Elegoo solution of the Z-axis has a high effect-to-cost ratio, however, I can measure about 0.2 mm of play when I apply reasonable forces by hand.
As the G8-19G bearings are not available at my local store and I had to order them, I applied the dirty & cheap fix to find out what improvement can I get. Spoiler: a huge one.
I printed the test pieces from my previous posts (volume 1, volume 3, volume 4) and the problem practically disappeared. Compare the real size of the test piece before and after:
The full dataset can be found in this table (new measurements are from sample 10).
Most notably what changed is that if an error is introduced in a layer, it is compensated by the others. Therefore absolute precision is preserved. See that all the test pieces got practically the same height.
If you look at test piece 11, you’ll see it is quite distorted. It is the sample surrounded by a full plate of material. There was noticeable distortion, however, it was different compared to the previous cases. The overall test piece height was preserved, but the layers surrounded by material were a little bit higher. Just like first layers of other pieces. This is probably due to the effect I described in volume 4 (recommend reading before continuing). The effect is that the resin is viscous and as the build plate sinks, it has to push away the resin. When I introduced the delay to allow the resin to flow away and to settle the build plate in place I got much more precise pieces. On the simple pieces, even the first layers got the correct height. On the pieces with extra material, the distortion is still there, however it is much less significant. I believe by introducing even longer delay, we can get much more precise (I plan to do this experiment).
What struggles me is that instead of 3 mm I got 2.9 mm – pretty constantly. Therefore, I printed another staircase – 0.5 mm steps, 15 mm in total height (sample 15). I also got less – 14.7 mm. Currently, I have no idea what is this caused by – it not a constant error (not coming from incorrect bed leveling) and it is too large for shrinkage (2 % – epoxy or polyurethane resins have shrinkage less than 0.5 % and I don’t expect printer resin to be that different). Maybe tensioned bearings with misaligned screws cause step loses on the stepper. I am also not sure the error is linear – I’ll have to run many more tests. Any ideas what could it be caused by?
On the topic of lost steps – before the first print I releveled the build plate. When the print started, the build platform started to move down as expected. The build plate touched the bottom of the VAT and the stepper still continued – by the sound it clearly lost some steps. I am sure I have leveled my bed correctly. I leveled it against empty VAT. Is it possible the printer FW moves the platform a little bit below the zero point to pretention the Z-Axis to mitigate the problem with flexible housing of the screw? I don’t know, but this also something I would like to explore in the future.
After all, even there are still open questions I consider my Elegoo Mars to be used as I intended when buying it – to produce precise functional mechanical components.
Since the last post I have made many more experiments regarding the Z-issue on Elegoo Mars.
First, I tried to mount an indicator to the Z-axis. I mounted it in the middle of the arm carrying the print bed and printed my test model. To analyze the results, I aimed my phone camera to the printer to capture the measurements. I performed both dry and an actual print run. You can find the whole, uncut footage of the experiment here (warning, it is really boring):