3D Printing: Parametric Generative 3D Infill Geometries

Updates:

  • 2023/02/09: finally published
  • 2023/02/08: worked on text and illustrations a lot, many sample prints, multiple visualization approaches, details on f1 + f2 vs f1 * f2 and cylindrical and spherical transformation of TMPS
  • 2023/01/05: adding mesh/voxel renderings, slicing geometry to generate G-code
  • 2022/12/11: first FDM G-code generated using 2D / contour approach
  • 2022/12/07: included many suitable periodic minimal surfaces
  • 2022/12/02: start with implicit surface focus

As I progress I will update this blog-post.

Introduction

Infill geometries are geometries which are continuous, repetitive or periodic; they fill a boundary defined geometry aka outer form often defined via meshs. Let’s dive into some of the simple geometries and then looking at some more complex structures:

The Implicit Geometries

Implicit geometries are geometries defined via f(x,y,z) = 0 defining their surface, the boundary between inside and outside and they are ideal to define repetitive or periodic 3D infill geometries.

Sphere

Sphere: x2 + y2 + z2 – r2 = 0

When you ever tried to compose a sphere as a mesh, you know there are many ways to do so, and all are more complex than this simple description, and as you realize, the formula is perfect, it’s not an approximation – this is the nature of implicit formula. When you try to visualize an implicit formula, then you need to discretize and there the approximation takes place, as a mesh or as voxels.

Another nifty property of the sphere, it is the minimal surface to circumvent a volume, and through this blog-post, the minimal surface will become a common theme.

Cube

Cube: max(abs(x),abs(y),abs(z)) – w/2 = 0

Plane

Plane: z = 0

As I render only -10 to 10 to each axis, it creates a small plate:

Triply Periodic Minimal Surface (TPMS)

Let’s move to the world of minimal surfaces, so called Triply Periodic Minimal Surfaces (TPMS), those can be expressed in implicit form and have some properties as sought for infill geometries.

In differential geometry, a triply periodic minimal surface (TPMS) is a minimal surface in ℝ3 that is invariant under a rank-3 lattice of translations. These surfaces have the symmetries of a crystallographic group. Numerous examples are known with cubic, tetragonal, rhombohedral, and orthorhombic symmetries. Monoclinic and triclinic examples are certain to exist, but have proven hard to parametrise.

Wikipedia: Triply Periodic Minimal Surface (TPMS), retrieved 2023/02/08

Schwarz P aka Primitive

One of the simplest yet powerful formula:

Schwarz P: cos(x) + cos(y) + cos(z) = 0

increasing the frequency or scale of the structure:

By extending the formula with +a, we can animate it:

animating a: -1..1, transits from octahedron to cuboctahedron
Schwarz P 4x animated a: -1..1

Schwarz D aka Diamond

Schwarz D: sin(x)*sin(y)*sin(z) + sin(x)*cos(y)*cos(z) +
cos(x)*sin(y)*cos(z) + cos(x)*cos(y)*sin(z) = 0

Neovius

Neovius: 3*(cos(x)+cos(y)+cos(z)) + 4*cos(x)*cos(y)*cos(z) = 0

C(Y) Surface

C(Y) Surface: sin(x)*sin(y)*sin(z) + sin(2x)*sin(y) + cos(x)*sin(2y) + sin(2y)*sin(z) + sin(2z)*sin(x) + cos(x)*cos(y)*cos(z) + sin(2x)*cos(z) + cos(x)*sin(2y) + cos(y)*sin(2z) = 0

Fischer Koch

Fischer Koch: (cos(x)*cos(y)*cos(z) + cos(z)*cos(x)) –
(cos(2x)+cos(2y)+cos(2z)) = 0

S Surface

S Surface: cos(2x)*sin(y)*cos(z) + cos(2y)*sin(z)*cos(x) +
cos(2z)*sin(y)*cos(y) – 0.4 = 0

Gyroid

Gyroid: cos(x)*sin(y) + cos(y)*sin(z) + cos(z)*sin(x) = 0

FRD

FRD: 8 * a*cos(x)*cos(y)*cos(z) + b*(cos(2x)*cos(2y)*cos(2z)) –
c*cos(2x)*cos(2y) – d*cos(2y)*cos(2z) – e*cos(2z)*cos(2x)

Let’s explore this form more thoroughly, we animate a, b, c, d, and e and see what it does, essentially we animate -1 to 1 in sinus, 0 eliminates of the chunk of the formula:

animating a (-1..-1)
animating b (-1..1)
animating c (-1..1)
animating d (-1..1)
animating e (-1..1)

Gyroid Skeletal

Gyroid Skeletal: 10*cos(x)*sin(y)+cos(y)*sin(z)+cos(z)*sin(x)) –
0.5*(cos(2x)*cos(2y)+cos(2y)*cos(2z)+cos(2z)*cos(2x)) – 14

P Skeletal

P Skeletal: 10*(cos(x)+cos(y)+cos(z) –
5.1*(cos(x)*cos(y)+cos(y)*cos(z)+cos(z)*cos(x)) – 14.6

By changing the last substraction of 14.6 to 10 or 8, the structure get more dense – ideal to use.

P Skeletal, animating main subtraction -14.6(thin)..5.4(disconnected)

The P Skeletal connects 6 arms to each other.

IWP Skeletal

IWP Skeletal connects 8 arms to each other.

Schwarz D Skeletal

Schwarz D Skeletal connects with 4 arms to each other.

The above “skeletal” minimal surfaces are ideal for lattice structures, likely most usable in context of voxel-based 3D printing approaches, such as SLA, SLS, SLM and so forth, but less ideal for traditional FDM where the lattice is sliced Z-planar again kind of defeating the overall purpose of lattice structures.

D Surface

D Surface: cos(x)*cos(y)*cos(z) – sin(x)*sin(y)*sin(z)

As Juergen Meier created a variant, adding a, which gives these variants:

providing a structure using 4 arms to connect each other.

Miscellaneous

Using Implicit Geometries as Infill Structures

Slic3r and Prusa Slicer are providing gyroid infill pattern since early version, but beyond that it seems no to little development happened since (2022/12).

Let’s see how implicit geometry can be transformed into slices (FDM) or voxels/pixels (SLA, SLS etc)

Algorithm A: 3D Cache

  • create point cloud of surface of implicit geometry
  • create surface of implicit geometry using marching cube
  • (optional) determine x, y, z size where it repeats itself
  • slice surface for infills at certain scale
    • clip inner surface with outer perimeter of slice

Pros

  • with caching: fast lookup of infill geometry

Cons

  • many steps
  • x, y, z repeatability must be given, hard to determine programmatically from outside
  • clipping to perimeter can be computational expensive depending

Algorithm B: 2D Cache

  • create 2D point cloud of a slice of implicit geometry based on clipped 2D area / slice
  • convert 2D point cloud to polylines (FDM) or pixels (SLA)

Pros

  • reduction to 2D problem at first stage
  • fast 2D point cloud creation as only one z-level is used

Cons

  • create 2D point cloud at arbitrary resolution, loss of curves unless refitted
  • caching without knowing repeatability of the geometry makes little sense

FDM G-code

Here some early G-code for FDM 3D printer using PyImplicit tool tracking the implicit surface as 2D contour:

Meshs & Voxels

The implicit surfaces only define the surface, either:

  • inside vs outside – a solid; or
  • certain thickness of such surface

In order to create watertight meshs the volume needs to be limited with a boundary box, and Marching Cube is performed from outside to get proper mesh to post-process afterwards.

Now you may wonder, what’s the fuss with all those forms, why doing this complicate implicit form, why not just create a few forms as meshs right away and repeat them orderly – well, here it comes why:

Frequency or Scale Gradients

Changing the frequency or scale s0 and s1 can be achieved by:

znorm = (z-zmin) / (zmax-zmin)
s = (1-znorm)*s0 + znorm*s1 or
s = lerp(s0, s1, znorm)
f = surface(x*s, y*s, z*s)

This shows the power of generative geometries, we simply can define the scale or frequency of a geometry at any point, given we transit within reason and not too sharply to cause discontinuty.

Thickness Gardients

Alike changing thickness:

znorm = (z-zmin) / (zmax-zmin)
t = lerp(t0, t1, znorm)
f = abs(surface(x,y,z)) – t

Form Gradients

What looks very complex is done quite simply with:

znorm = (z-zmin) / (zmax-zmin)
f = lerp(surface1(x,y,z) , surface2(x,y,z), znorm)

This is quite powerful property, to be able to morph from one implicit form to another with such a simple formula.

Contineous Transitions:

  • Schwarz D – Schwarz P
  • Schwarz D – Neovius
  • Schwarz P – Neovius
  • thickness: IWP Skeletal – Schwarz P
  • thickness: IWP Skeletal – Schwarz D

Discontinueous Transitions:

  • IWP Skeletal – P Skeletal
  • IWP Skeletal – Neovius
  • solid: IWP Skeletal – Schwarz P
  • solid: IWP Skeletal – Schwarz D

Combining Implicit Surfaces

Additions

Algebraic addition has the effect of apply one geometry within another, alike recursion:

Multiplications

Algebraic multiplication has the effect of clipping, or geometrical intersection:

Mapping Implicit Surfaces

One can map the coordinates, and create a cylindrical gyroid, where former X & Y become distance and rotation angle, and Z remains as is, and so spherical projection is possible as well, or even feed coordinates through implicit formula itself:

Next blog-post(s) I will go into further details utilizing TPMS in Additive Manufacturing (AM) like FDM/FFF, SLA, MSLA, SLS, MJF or SLM – each one of them have unique features and limitation for using those Parametric Generative Infill Geometries.

Appendix: Visualization

In case you wondered of the different styled visualization through this blog-post, let me show you the different approaches to discretize implicit defined surfaces.

Voxels

The code is rather simple with OpenSCAD yet rather slow: either skin is true or false, and delta determines the thickness of the skin if enable:

t = 1;
r = 20*t;
st = 1/2;
delta = 0.2;

function schwarz_p(x,y,z,s=1) = cos(x*s) + cos(y*s) + cos(z*s);

skin = true;

for(x=[-r:st:r])
   for(y=[-r:st:r])
      for(z=[-r:st:r]) {
         f = schwarz_p(x,y,z,360/20/2);
         if(skin && abs(f)<delta)           // -- skin only
            translate([x,y,z]) cube(st);
         else if(!skin && f<delta)          // -- inside/outside
            translate([x,y,z]) cube(st);
      }

Rendered via voxelation:

Surface

Rendered in OpenSCAD via marching cube algorithm with Level Surfaces:

Volumes & Surfaces in OpenGL GLSL

Following experiments were done with Spirula/Implicit3 within the browser, the implicit formulas are rendered in realtime at 100-500 fps using OpenGL’s GLSL (GL Shader Language):

One has to clip the formulas with a cube in order to have a limited set, otherwise you get a full screen looking at infinite X, Y & Z, here Schwarz P:

Spirula/Implict3 realtime rendered Schwarz P TPMS in the browser

Meshs with Marching Cube

In order to create a mesh, I developed PyImplicit which utilizes Numpy library to calculate the implicit formula fast, and then run a Marching Cube algorithm over the result in order to get a discrete mesh like STL, OBJ, or 3MF to process further for 3D printing.

Foreground: 1st row: 90mm cube clipped of frequency gradients on Schwarz D, Schwarz P*,
surface gradient between Schwarz D to Schwarz P (top) at certain thickness or solid,
2nd row: 2x IWP skeletal 90mm cubes at different frequency;
Background: various 30/40mm cube clipped Triply Periodic Minimal Surfaces

*) some of my larger prints I attach RFID tags, e.g. as on top of the variable frequency Schwarz P print, which I store the print UID from my Prynt3r job which logs all my prints with all settings and webcam snapshots. In future blog-post I will illustrate my NFC/RFID setup.

And Polyviuw is a small mesh viewer using Polyscope Python as backend to display it as mesh:

It is easy to create huge files when exporting an implicit generative infill geometry and one ends up with a 700MB binary STL file, which becomes hard to view at least on my system. To handle complex outer forms, with complex inner geometries I estimate reaching multiple gigabytes large files – let’s see.

References

Misc: Formnext 2022 Review

Updates:

  • 2022/11/21: published
  • 2022/11/19: starting writeup

Introduction

Formnext 2022 was a 4 days Additive Manufacturing (AM) event in Frankfurt (Germany) November 15-18 2022, and it had ~750 exhibitors, two huge halls numbered 11 and 12 each with two floors. I attended the 4 days and it was pretty overwhelming. I try to give an overview, for myself to process what I saw, and perhaps for you who couldn’t attend.

E3D Online

E3D is an old timer among 3D printing enthusiasts, so I start with their booth:

I was surprised to get to know E3D manufactures for UltiMaker their CC printcore.

Duet3D

Duet3D is a small UK-based company, but very influential due their excellent and often praised customer support and support forum aside of their slowly expanding board selection:

I met Tony Lock, and we discussed current state of multi-axis support in Duet/RepRapFirmware, and he showed me the Open5X by Freddie Hong printing non-planar as crafted by FullControl.xyz

I briefly pitched my new tool VirtualGcodeController (vgcodectl) which sits between printing program and the device, and able to change G-code on the fly, transparently bi-directional – as I was told Duet has an alike infrastructure called Duet Software Framework (DSF) which I wasn’t aware of.

Also check this brief interview by Mihai Design:

Multec

At german-based Multec booth I saw a multi-printhead setup with a rotating seal to prevent the inactive printheads leak filament – and a precise mechanism to lift the inactive printheads (patented):

3devo

Dutch-based company providing infrastructure to mix and extrude your own filament, not just for mixing different colors, but also different materials and achieve custom material properties – the only downside is the price-tag of those desktop filament extruders starting at 10K EUR – which is too high for its functionality for prosumers, and seems to aim for R&D departments of larger companies.

Commercial Slicers

As I have been entering slicing development more seriously, and closely paid attention to possible competitors or collaborators – and interestingly, the majority responded positively when I approached them:

CreateItREAL

A small danish company, who recently patented interlocking (Z-offsetted layers) printing patterns.

I had a brief chat with Folmer Gringer Brem about industrial slicer capabilities and customer needs, and what I have researched the past year.

Adaxis

A new french company is providing non-planar 5-axis slicer with a nice GUI, and were open enough to give an actual demo and I was impressed by the responsiveness of the GUI but were tight-lipped to reveal anything about the internals – 5-axis slicer with infill patterns:

FreeD Printing

A small 2 person german company, a spin-off from the university Bochum, also coding 5-axis non-planar slicer, showing a small desktop 6-axis robot to print an overhang model, their own logo, and it has infill – which means, they actually did properly slice 5-axis G-code. They were reluctant to go into the details, as their IP represent their core asset as a company:

AiBuild

AiBuild has a huge booth, lots of advertising, has been very secretive last year as they didn’t want to demo their software without NDA to anyone – but while attending Formnext 2022 I was able to get to talk to people who purchased the software, and all of them have been giving me strange feedback: a sort of underwhelming sensation – the software is costly and not deliver what is advertised: you need to know a lot of slicing in order to use the software – there is nothing “Ai” (Artificial Intelligence) as the company name implies, at least not with their slicing software.

On their booth they had the usual non-planar printed pieces, but none of them had infill, so they all are printed in vase-mode or single wall.

One feature I saw though impressed me, it was the live quality control they implemented, having a nozzle camera and machine learning / AI to determine over- and under-extrusion – something which I would say one should have under control, but perhaps it was to illustrate the detection mechanism.

VShaper

Poland-based 5-axis printer manufacturer has progressed in hardware and software, and developed their own 5-axis slicer – the simulation shown as the actual printer prints – overall well designed.

I had a brief chat with Adam Wajda about the state of their hardware/software stack, very open and friendly exchange.

Duplex3D

Hungary-based startup with a dual delta setup printing upside and downside at the same time. They were present last year Formnext 2021 already but with an inactive printer, and this time showing the printer in action:

Beside reducing print-time the printer also is able to print pieces which otherwise are hard or impossible print when layer orientation is given and surface quality is of high priority.

UltiMaker

The newly merge Ultimaker + MakerBot = UltiMaker had no booth again, hardly any presence – the marketing / sales department seems in hybernation to skip such as event without their own booth, no hardware innovation on display, perhaps there is nothing (new) to show.

I visited the 3dimensional booth and someone showed me how to print “metal” (just steel as it turned out) with BASF metal filament on a Ultimaker S5, and having everything needed in a nice box and then send off to wash & sinter.

Snapmaker

Snapmaker announced a new machine called Snapmaker Artisan: single head operation, yet changeable heads: FDM head, CNC head, laser head – very sturdy desktop machine, using linear motors:

NematX

Bleeding edge high temperature resisting materials, and to show the applications they built a most precise FDM printer I have seen so far – Chiara Mascolo briefly showed me the machine and samples:

Nexa3D

Massive SLA and SLS machines shown:

Formlabs

The Formlabs booth was well visited, and it was hard to take photos until the last day of the expo – so just a brief video of the Form 3+ printing below:

Quantica

German-based startup printing with 7 different light curable materials at the same time, drop size / resolution at 60um with the NovoJet C-7 – quite impressive, with the ability to blend drops or let them cure side-by-side giving new possibilities of material gradients in 3D space:

They also provide a station for fluid testing & development, so you can engineer your own material to print with. Even though this was a small both it was for me from a technical point of view most innovative I have seen so far.

Nanodimension

As I was looking at resin printheads, I was approaching Global Inkjet Systems (GIS) – a subdivision of Nanodimension:

  • Fabrica 2.0: impressive 2um resolution, but as consequence 1mm height / hr print speed, SLA/DLP
  • Admaflex 300: 35-88um XY resolution, 10-200um layer height, up to 60mm/hr height print speed, resin combined with ceramic/metal printing

Inkbit

A massive industrial resin jetting 3D printer, build-volume at 500 x 250 x 200 mm printing with wax as support material. It is a closed-loop system, it prints, cures and measures the actual layers and adjusts live for the next layer – achieving 100um precision, yet only for industrial application due the cost of 1M USD per machine.

They developed their own packing algorithm in order to achieve high density packing ratio.

Breton

Italian-based “Betron Genesi” 4000 x 1900 x 1300mm build volume along with high volume extrusion (~20mm nozzle, layer height ~4-5mm based on my own photos) having excellent extrusion precision, along their real time temperature control:

Additionally is is a hybrid able to run also CNC milling on the same machine for post-processing.

Phaetus & DropEffect

Visited Phaetus expecting to just meet sales people instead I ran into Maximilian Arnold, owner of DropEffect which designs hotends under his own brand but also for chinese-based Phaetus as R&D director. I showed him photos of my early prototype of a Multi-In Mixing Hotend supposed to be printed in Aluminium and he immediately commented on my design and gave me useful input – unexpected interesting and fruitful exchange.

A brief interview with Max conducted by MihaiDesigns:

XAct Metal

This booth impressed by the samples they showed:

Namma

France-based company combining FDM and CNC together:

What you achieve with this is incredible precise plastic pieces at 20um precision, while maintaining 500 x 500 x 500mm respectively 1000 x 500 x 500mm build-volume. They are milling with a round drill bit – CNC toolpath is calculated by Autodesk’s Fusion 360 though.

Metalworm

Turkish-based company wire arc welding with 6-axis robot:

Bloom Robotics

Massive ABB 6-axis robot FDM printing on a rotating 2-axis bed . . . with shiny cyan/pink/violet lights, a bit of an overkill with the lights, but the setup was impressive:

Miscellaneous

Aftermath

It has been overwhelming expo for me, 4 days in noisy halls, constant audible and visual stimuli grown tiresome for me as I was eager to absorb all; I can say I looked at every single booth, and decided within few seconds if something caught my attention, and I knew to lookout for things I did not know or a company I did not recognize – for new companies in the arena of Additive Manufacturing. It took me a single day to roam both floors of a single hall, so at least it takes 2 days to explore two halls of the expo – and if you happen to explore a booth for more than a few mins, you end up with 3-4 days attending easily.

So, the overall impression of mine has been:

  • 3D printing / Additive Manufacturing (AM) specializes into niches more and more
  • resins printed as drops at high resolution & precision
  • paste-like materials get printed in high extrusion quality
  • metal printing showing incredible wide-variety in regards of materials
  • industrial machines are still pricey but seem to me become more affordable, instead of 10M’s they are becoming 100K – 1M while maintaining same functionality
  • multi-axis FDM with robots become more established to print large scale parts
  • in-process/live quality control and logging/documentation for FDM and powder-based processes
  • many startups still coming up with new or refined existing processes
  • gap between prosumer and affordable industrial machines is closing
  • quite open atmosphere, people are willing to share and discuss their technology, collaboration seems more important than eyeing on each as competitors

Some impressions of Frankfurt (Germany) . . .

That’s it.

3D Design: Parametric Mixing FDM Hotend with Metal Printing

Status: early prototype, metal printed model, temperature testing, no extruding yet

Updates:

  • 2023/01/09: iteration 2 testing results
  • 2022/11/22: early heating tests, no extruding yet
  • 2022/11/21: iteration 1: SLM AlSi10Mg metal printed photos added
  • 2022/11/19: published finally
  • 2022/09/10: adding photos of PLA+ prototype
  • 2022/09/02: starting writeup

This blog-post will be updated as I progress.

Introduction

I experimented with the Diamond Hotend in the past, but I was limited with the setup given – and adding another color or otherwise change the design seemed impossible, but it has changed now.

Metal 3D printing has been a niche and high priced application the past years, but in 2022 many 3D printing services support:

  • stainless steel: low heat conductivity 15W/mK
  • aluminium: good heat conductivity 210W/mK, yet low melting point 660C°
  • inconel: low heat conductivity 15W/mK
  • titanium: low heat conductivity 17W/mK

at relatively low price and all of the sudden designing a FDM mixing hotend, where multiple filaments are mixed together before exiting the nozzle – like with the Diamond Hotend – can be printed in metal, like with aluminium – so, I started to design a Parametric Mixing Hotend.

Concept

  • parametric design with 2 up to 6 filaments inputs
  • combine heatblock, heatbreak and heatsink, make it compact
  • permit ordinary nozzles (MK8/E3D V6), using M7 thread
  • orient heat cartridge vertically (like a E3D Volcano) to support up to 0.8mm nozzles
  • single 30mm fan for heatsink
  • using PC4 M10 or M4 pneumatic couplers as intakes

Pros:

  • mixing colors: 2 to 6 colors, CMY(KW), actual true color printing
  • fast switching of materials, given they have similar extrusion temperature

Cons:

  • filaments must be present in order to withstand backpressure even if not printed
  • filaments must be printed eventually, otherwise ‘bake’ in the hotend

Challenges:

  • controlling actual mixing in the chamber, e.g. creating turbulence to mix properly
    • creating turbulences may limit retraction, which is anyway not easy with mixing hotends

Gallery

The filament channels:

Mounting options, plain mounting holes 3x 20mm, or plate with 3x 40mm holes:

and adding my Parametric Part Cooler:

Gallery

Early prototype printed in cold white eSun PLA+ 0.25mm layer height (~1h 20m print time):

Adding nozzle, heat cartridge, heat thermistor, heatsink fan and pneumatic couplers PC4 M6:

and just testing my Parametric Part Cooler using 50×15 blower fan:

which very likely leads to have a some sort of thermal insulator aka silicon sock for lower part of the heat chamber and nozzle.

Metal Printing

The first attempt to order with WeNext using SLM failed, they were not able to find a way to print it without support, which was surprising as powder-based metal printing1) – the removal of support was not guaranteed, so I canceled the order.

  1. SLM powder-based printing requires support structure to counter act geometric distortion when sintering, when the piece shrinks.

The 2nd attempt with PCBWay – disclosure: they approached me a couple of weeks later to sponsor metal printing process, which I agreed on – also using SLM AlSi10Mg at first looked good at first, but then they also needed to add supports once the production step came close, and then I followed up and approved the production. The order was submitted November 5, and 14 days later the piece was at my door.

  • the print quality is excellent, the supports have been removed pretty much with little remains (between the cooling plates a few spikes remained but they have no functional influence)
  • a bit rough surface overall, more than I expected; which means, the inner holes are also rough and likely add friction to the motion of the filament

Preassembled with MK8 0.4mm nozzle, 30mm fan, heat cartridge and thermistor:

and 2x PC4-M6 threaded, with PTFE tubes:

Heating

My test rig:

  • Mellow Fly Super8 V1.2 running RepRapFirmware with two stepper motors attached driving two extruders in Bowden style
Test rig: Mellow Fly Super8 running RepRapFirmware 3.4.1, two steppers/extruders with custom mixing hotend printed in SLM AlSi10Mg (Aluminium)

Pass 1: First results

I heated to 50C°, 80C° and 100C°:

  • thermistor does poor job to measure actual temperature at the heatblock ~20C° off
  • heat conductivity to nozzle is very poor, barely heat up at all (when thermister reports 100C°) – very surprising
  • heat piles up from the heart cartridge cables
  • the fan cools barely, could be better

Pass 2: Adding thermal paste

  • adding thermal paste for the thermistor and nozzle thread
  • running M303 for 100C° and keeping it at 100C° for 10mins
  • lowest heatsink fin reaches 50C° – also connects to heatsink fan
  • nozzle looks cold (but when touching it it is hot), filament will definitely melt above
  • heat block has consistent heat distribution

Pass 3: Setting 150C°

  • heatblock is at ~120C° while thermistor reports 150C°
  • the filament pipe above the heatblock is at 100C°
  • the nozzle looks cold, but is hot at 105C° when touching with 2nd thermistor, an issue with reflective brass not properly showing proper thermal reading

Pass 4: Lowering Fan

As the lowest fin heats up significantly, as a first remedy I lowered the heatsink fan a bit:

  • lowest fin is cooler, also overall better air flow; the fins seems a bit too thick, thinner would be better
  • lower end of heat block has near set temperature, delta of just ~5C°

Conclusion Pass 1-4

  • make heatbreak section of pipes thinner
  • optionally have PTFE tubes until lower end of heatsink for smooth motion of filament
  • make fins thinner
  • lower heatsink fan by one fin

Iteration 2

After the tests, I changed the design slightly:

  • thinner pipes to lessen heat transfer to the heatsink
  • a few wings on the fins to increase heat dissepation
  • thinner fins so the air flows better

Submitted to PCBWay 2022/11/29 for manufacturing review, a day later I was informed of thin walls of the pipes near the heatbreak (<1mm) and I gave OK to manufacture.

Iteration 2 of Parametric Mixing Hotend

The thin heatbreak walls seemed to help:

  • ability to heat up to 210°C nominal, some parts reach 220°C, but nozzle is around 210°C
  • 30mm fan performs well
  • 40mm fan removes too much heat, no possible to reach 210°C anymore
  • heatbreak pipes are still too thick, too much heat flows away (hence 30mm vs 40mm fan)
  • first extrusion worked, but after 1-2min both channels are blocked, near lowest fin of the heatbreak, to clear the blockage, I removed the fan and heated to 180°C and allow entire hotend to reach ~90°C, then with 0.4mm needle and 1.8mm copper wire was able to clear the blocked section

Conclusion

Heatbreak is most critical, and has to be short and has to be a hard cut temperature gradient-wise – and 0.5mm wall thickness is still too much. So, regardless of cooling fan on the heatsink, if the heatbreak is too thick, too much heat creeps up or away – it’s not a matter of cooling capacity, but conductivity.

Todo

  • metal printed version (aluminium), done 2022/11/21
  • heating tests (on-going)
  • test prints with multiple filaments
    • 2 inputs, e.g. complementary colors (Black/White: Grey Shades, Yellow/Violet: Red Shades)
    • 3 inputs, e.g. CYM: saturated colors only
    • 5 inputs, e.g. CYMKW: full spectrum colors
  • silicon socks for all variants, as part cooler will introduce otherwise heating instabilities

References

Misc: XCR3D 3in1-S1 aka Bigtree ZSYong 3in1 (Switching/Non-Mixing) Hotend

Updates:

  • 2022/09/10: designing part cooler for its
  • 2022/08/29: starting

Introduction

The XCR3D 3in1 S1 aka Bigtree ZSYong 3in1 is a neat 3 in 1 out switching hotend (non-mixing):

XCR3D 3in1-S1 – 3in / 1out (switching, non-mixing)

Pros:

  • cost effective with EUR 20-24 (2022/09) complete with heat cartridge, thermistor, 3xPTFE tubes, 30mm fan

Cons:

  • nozzle / heatblock asymmetry: the heatblock extends right-side ~2mm
  • clumsy fan fastening between heatsink ribs
  • slightly overengineered otherwise, too much mass for the basic functionality

XCR3D 3in1-S1

BigTreeTech ZSYong 3in1

NF THC-01 3in1

Very similar, but with symmertric E3D V6 heatsink:

Clones of Clones

It seems to me, the this 3-in-1 hotend with hexagon heatsink, was cloned from NF THC-01 3in1, and likely engineered by a small company, and now brands like BigTreeTech, XCR3D and others purchase in bulk the hotend black/red anodized and their white brand stamp on the hotend.

What makes things truly confusing is that the hotends from China have terrible naming, e.g. “3in1” and “2in1” are used for switching and mixing hotends, which are quite different functionalities, and otherwise the name does not distinct designs.

Part Cooler

I adapted the Parametric Part Cooler using 50×10 blower fan for the XCR3D 3in1 S1 as well:

Download Part Cooler

As you can see on the illustration and photos, put the part cooler on the heatsink, and then 30mm heatsink fan on top. The part cooler itself requires 50x15mm blower fan.

It is a bit fiddly as there are no clear threads for the screws on the heatsink, so the first mounting is crucial to thread properly.

Marlin 2.0.x Configuration

In Configuration.h one has to update the thermistor type:

#define TEMP_SENSOR_0 5    // changed from 1 to 5

...

#define PID_FUNCTIONAL_RANGE 25   // changed from 10 to 25

recompile, upload/update firmware and then run via G-code console the autotune PID procedure:

M303

and after 3-5 mins or so, when the autotune is done, save settings in EEPROM:

M500

and one is done.

Conclusion

I really struggled to get decent quality prints first, as somehow the temperature reports were off by 40C°, and various Google searches gave the same wrong answers, the seller did not give proper detailed information about the thermistor either. Eventually at Amazon one customer gave the relevant information ATC Semitec 104GT-2/104NT-4-R025H42G and defining TEMP_SENSOR_0 5 in Marlin gave sane results.

Retraction settings are in my case 3mm at 70mm/s with apprx. 500mm long Bowden tube on my Ashtar C (CoreXY 400x400x380) and also Ashtar K #3 (300x300x360).

Ashtar K #3 with XCR3D 3in1-S1 hotend with 3 rolls of filament

I really like the switching filament solution close to the hotend, compared to other multi-material solutions where materials are switched far away from the hotend; e.g. switching material is faster, but one has to still purge one material/color by 30-50mm filament – so I tend to use the multi-material/color feature for fast switching colors for single material/color prints.

Following procedure I use when switching material:

  • heat up nozzle
  • purge 30-40mm regardless
  • retract 55mm at 70mm/s
  • switch to new material/color (e.g. “T1“)
  • push 55mm at 70mm/s forward
  • extrude/purge 30-40mm filament
  • start actual print
  • [ … ]
  • end print
  • retract 55mm at 70mm/s
  • switch to “T0
  • push 55mm at 70mm/s forward [note: not purging material/color transition]

so by default “T0” is ready to be printed. In order the print with the other materials, I have two macros with Print3r e3-t1 and e3-t2.

print3r --printer=ashtar-c-1 print cube.stl @e3-t1
print3r --printer=ashtar-c-1 print cube.stl @e3-t2

~/.config/print3r/macro/e3-t1:

prepend_gcode="G91\nT0\nG1 E20 F100\nG1 E-55 F3000\nT1\nG1 E55 F3000\nG1 E30 F100\nG90\nG92 E0\n"
end_gcode="G1 Y{$machine_depth-10} F6000\nG92 E0\nG91\nG1 E-2 F2000\nM140 S0\nM104 S0\nG1 E-55 F3000\nT0\nG1 E55 F3000\nM84\nG90\n"

and ~/.config/print3r/macro/e3-t2:

prepend_gcode="G91\nT0\nG1 E20 F100\nG1 E-55 F3000\nT2\nG1 E55 F3000\nG1 E30 F100\nG90\nG92 E0\n"
end_gcode="G1 Y{$machine_depth-10} F6000\nG92 E0\nG91\nG1 E-2 F2000\nM140 S0\nM104 S0\nG1 E-55 F3000\nT0\nG1 E55 F3000\nM84\nG90\n"

The way it is composed: start_gcode + prepend_gcode + slicing G-code + end_gcode.

Sourcing / Purchase

Declogging

As it happened to me several times, the hotend clogs up and the reason is often the filament is not hot enough, and when pulling back/retracting it forms a long pointy drag, and might break and the next cold filament jams in further down, but not enough to melt – it clogs up eventually.

First solution is to heat hotend at 240C° at least, not more than 250C° because of the PTFE – and try to push with filament on top, eventually some of the clogging might melt and free the nozzle.

Second solution is removing the lower part with heatbreak, heatblock, by opening the worm screws at the heatsink, and review the PTFE intake:

References

Misc: More Materials – Testing JLCPCB 3D Printing Services 2022

Updates:

  • 2022/10/26: published finally
  • 2022/09/27: adding measurements and verdict
  • 2022/09/15: starting write up

Introduction

Beside Fused Deposition Material (FDM) /  Fused Filament Fabrication (FFF) aka extruding hot filament, there are more methods to 3D print:

  • SLA (stereolithography): resin based printing
  • SLS (selective laser sintering): laser sintering, like polyamid powder
  • MJF (material jetting): deposite material and binder in one go
  • SLM (selective laser melting): metal laser sintering, aka metal printing

and I choose JLCPCB which provides all four of them, whereas SLM only stainless steel is available as of 2022 – other 3D printing services provide wide-range of metals as well.

Review

I ordered Pulley 20T 6ID (GT2 20 teeth 6mm inner diameter) as created via OpenSCAD Customizer, a piece which requires high accuracy and is mechanical stressed when in use, in following materials:

  • 8x PA12 aka Nylon aka Polyamid, black reflective (MJF), 1.04 EUR / pc
  • 8x 9000R resin, natural white (SLA), 1.04 EUR / pc
  • 8x 3201PA-F aka Nylon, dark gray matte (SLS), 1.04 EUR / pc
  • 1x 316L stainless steel (SLM), 8.30 EUR / pc

after 3 weeks the pieces arrived:

The overall quality of all pieces are excellent, regardless of automatic warnings I received while requesting the 3D printing task.

MJF: PA12 / Polyamid / Nylon

MJF has a nice finish, slightly reflective, deep dark, slightly grainy surface, and the top of the pulley is uneven, otherwise very precise.

  • diameter 16.1mm (+0.62%)
  • height 15.5mm (+0%)
  • cost EUR 1.04

SLS: 3201PA-F / Polyamid / Nylon

3201PA with SLS is a very good piece, dark gray matte, grainy surface, very precise.

  • diameter 16.05mm (+0.31%)
  • height 15.6mm (+0.65%)
  • cost EUR 1.04

SLA: 9000R Resin

9000R resin with SLA produced a very nice piece, best finish at the top (near perfection), milky white color (vs cold white or warm white), but as it turns out not very precise:

  • diameter 17.75mm (+4.68%)
  • height 16.1mm (+3.87%)
  • cost EUR 1.04

It is very surprising to see the SLA having the biggest imprecision of all the samples.

SLM: 310L Stainless Steel

316L stainless steel with SLM produced a nice piece as well, the top of the pulley is good, some unevenness where the top goes over the gear:

overall it’s grainy surface – indicating powder-based additive procedure. Holding the piece in the hand feels heavy compared the other materials.

  • diameter 16.0mm (+0%)
  • height 15.5mm (+0%)
  • cost EUR 8.30

Verdict

The SLA / resin piece looked most smooth but it had the biggest imprecisions with over 3% in height and diameter – very surprising to me, it should comparatively be as precise as SLS and MJF. I cannot determine if it’s from the JLCPCB resin printer, or inherent of SLA.

SLS and MJF with Nylon performed expectedly very good, very sturdy and precise.

SLM stainless steel surprisingly very precise, yet unsuitable in real life application due the heavy weight.

Long Term Usage

I will update this part as soon long term (1-2 years) usage experience is available:

  • SLA: Resin 9000R: (not yet)
  • MJF: Polyamid/Nylon PA12: (not yet)
  • SLS: Polyamid 3201PA-F: (not yet)
  • SLM: Stainsteel 310L: (not yet)

Materials & 3D Printing Methods

Material vs Printing Methods

Comparing MJF Nylon vs SLS Nylon

PA12 vs 3201PA-F

Comparing Resins

Resins

References

Misc: MKS Monster8 Board Configuration with Marlin for Ashtar K & C

Update:

  • 2022/11/20: Linux DFU upload details added
  • 2022/09/19: adding Ashtar C M503 dump beside Ashtar K
  • 2022/08/24: extending with part cooler fan and extruder fan connection
  • 2022/08/14: starting with the notes

Introduction

MKS Monster8 V1.0 board

These are just my notes for configuring Makerbase (MKS) Monster8 V1.0 for Ashtar K and Ashtar C:

  • STM32M407VET6 (ARM Cortex M4), 168MHz, 512KB Flash, 192KB RAM
  • 8 stepper drivers TMC2209, configured in UART mode
  • MKS MINI 12864 V3 display (the “V3” is relevant)
  • 12V power in/out
  • 3 hotends & bed heating
  • Price ~EUR 55 (2022/08) incl. 8 stepper drivers TMC 2209 and 12864 display

Pros:

  • cost effective, EUR 55 (2022/08) incl. 8x TMC 2209 stepper drivers and 12864 display
  • 8 stepper drivers: e.g. X, Y, Z1/Z2 (on-board splitter) and 5 extruders (e.g. E0, E1, E2, E3, E4 – but only 3 hotends possible)
  • TMC 2208 or TMC 2209 silent drivers
  • good connectors on board, clean setup
  • github with Marlin source (partially preconfigured) for Arduino*) & PlatformIO

Cons:

  • no RepRapFirmware
  • no Wifi (the V2.0 version has optional Wifi board to attach)
  • no Ethernet
  • requires Marlin with PlatformIO (tedious to configure, recompiling required, reupload)
  • limited documentation: actual details are scattered around

Stepper Motor UART Mode

As first putting in the jumpers on all the driver sockets, in my case I choose UART mode for each one of the 8 drivers:

Marlin with Arduino vs PlatformIO

As of 2022/08, it seems Arduino is no longer able to compile Marlin-2.x (various compile errors within Arduino), at least with this board and everybody moved on the PlatformIO, which really surprised me.

PlatformIO CLI

As of 2022/08 there is no Linux GUI for PlatformIO but only PlatformIO CLI, but it’s simple enough:

pip3 install platformio

Download

As next download the firmware, Marlin 2.0.x source from github:

git clone https://github.com/makerbase-mks/MKS-Monster8/

Building

By default the board is configured for Voron 2.4 CoreXY, with 3x Z motors and Z probing in the midst of the bed and other things, so I had to edit Marlin/Configuration.h:

  • #define MACHINE_UUID "..." (use online generator to generate one)
  • #define CUSTOM_MACHINE_NAME "Ashtar K #x L8", given Lead 8×8 are used
  • #define LINEAR_AXES 3
  • #define EXTRUDERS 1 (or 2, 3 max)
  • comment out //#define PREVENT_COLD_EXTRUSION needed for calibration
  • comment out //define COREXY
  • define [XYZ]_DRIVER_TYPE and E[012]_DRIVER_TYPE
  • #define DEFAULT_AXIS_STEPS_PER_UNIT aren’t that important, as one can define it with M92 and M500 saving to EEPROM
  • comment out //#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
  • test motors regarding #define INVERT_[XYZ]_DIR true or false
  • test motors regarding #define INVERT_E[012]_DIR true or false
  • #define [XYZ]_HOME_DIR -1
  • #define X_BED_SIZE 380
  • #define Y_BED_SIZE 300
  • #define Z_MAX_POS 330

and Configuration_adv.h:

  • #define NUM_Z_STEPPER_DRIVERS 1 even when two Z-stepper motors are attached
  • if you want an automatic E0 fan which turns on only when nozzle is heated: #define E0_AUTO_FAN_PIN PA1 and attach extruder fan (watch polarity) on FAN1/J12 connector

once those changes are made, build the firmware:

cd marlin\ firmware/MKS_MONSTER_Marlin-2.0.x/Marlin-2.0.x/
platformio run

After a short while (~1min) it should finish successfully (if not, edit files).

Firmware Installation

SD Card Firmware Update

Use a SD card, e.g. 8GB with simple FAT filesytem, and copy .pio/build/mks_monster8_usb_flash_drive/firmware.bin and mks_monster8.bin on the SDcard.

Insert the SD card into the Monster8 board next to the USB connector, and turn off and on the board (power cycle) – wait 5-10 seconds so the new firmware is installed, then the display should show the Marlin splashscreen eventually, and the board becomes available as USB device, in my case as /dev/ttyACM0 on Linux Ubuntu 20.04 LTS.

DFU Util Firmware Update

  • connect board with USB cable and optionally select POWER USB (via jumper)
  • power cycle board (e.g. via USB cable) while you push BOOT 0 button in the center of the board briefly (~2 secs)
  • the device will appear as a new USB device

Linux: install apt install dfu-util and then

% sudo dfu-util -a 0 -s 0x0800C000:leave -D .pio/build/mks_monster8_usb_flash_drive/mks_monster8.bin -d 0483:df11
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Downloading to address = 0x0800c000, size = 178820
Download        [=========================] 100%       178820 bytes
Download done.
File downloaded successfully
Transitioning to dfuMANIFEST state
% 

M503 Dump for Ashtar K

Ashtar K with 300×300 bed, single extruder:

> M503
-----
echo:  G21    ; Units in mm (mm)
echo:  M149 C ; Units in Celsius

echo:; Filament settings: Disabled
echo:  M200 S0 D1.75
echo:; Steps per unit:
echo: M92 X100.00 Y100.00 Z400.00 E95.00
echo:; Maximum feedrates (units/s):
echo:  M203 X300.00 Y300.00 Z5.00 E25.00
echo:; Maximum Acceleration (units/s2):
echo:  M201 X2500.00 Y2500.00 Z100.00 E5000.00
echo:; Acceleration (units/s2): P<print_accel> R<retract_accel> T<travel_accel>
echo:  M204 P3000.00 R3000.00 T3000.00
echo:; Advanced: B<min_segment_time_us> S<min_feedrate> T<min_travel_feedrate> X<max_x_jerk> Y<max_y_jerk> Z<max_z_jerk> E<max_e_jerk>
echo:  M205 B20000.00 S0.00 T0.00 X10.00 Y10.00 Z0.30 E5.00
echo:; Home offset:
echo:  M206 X-35.00 Y-3.00 Z0.15
echo:; Material heatup parameters:
echo:  M145 S0 H180.00 B70.00 F0
echo:  M145 S1 H240.00 B110.00 F0
echo:; PID settings:
echo:  M301 P22.20 I1.08 D114.00
echo:; LCD Contrast:
echo:  M250 C255  
echo:; Power-Loss Recovery:
echo:  M413 S1
echo:; Stepper driver current:
echo:  M906 X500 Y500 Z700
echo:  M906 T0 E500

echo:; Driver stepping mode:
echo:  M569 S1 X Y Z
echo:  M569 S1 T0 E
ok
>

M503 Dump for Ashtar C

Ashtar C with 400×400 bed, 3 extruders with single nozzle:

> M503
-----
echo:  G21    ; Units in mm (mm)
echo:  M149 C ; Units in Celsius

echo:; Filament settings: Disabled
echo:  M200 T0 D1.75
echo:  M200 T1 D1.75
echo:  M200 T2 D1.75
echo:  M200 S0
echo:; Steps per unit:
echo: M92 X100.00 Y100.00 Z3200.00 E102.00
echo:; Maximum feedrates (units/s):
echo:  M203 X500.00 Y500.00 Z2.00 E120.00
echo:; Maximum Acceleration (units/s2):
echo:  M201 X9000.00 Y9000.00 Z50.00 E10000.00
echo:; Acceleration (units/s2): P<print_accel> R<retract_accel> T<travel_accel>
echo:  M204 P1500.00 R1500.00 T1500.00
echo:; Advanced: B<min_segment_time_us> S<min_feedrate> T<min_travel_feedrate> X<max_x_jerk> Y<max_y_jerk> Z<max_z_jerk> E<max_e_jerk>
echo:  M205 B20000.00 S0.00 T0.00 X10.00 Y10.00 Z0.20 E2.50
echo:; Home offset:
echo:  M206 X0.00 Y-5.00 Z0.15
echo:; Material heatup parameters:
echo:  M145 S0 H180.00 B70.00 F0
echo:  M145 S1 H240.00 B110.00 F0
echo:; PID settings:
echo:  M301 P22.20 I1.08 D114.00
echo:; LCD Contrast:
echo:  M250 C255
echo:; Power-Loss Recovery:
echo:  M413 S1
echo:; Stepper driver current:
echo:  M906 X700 Y700 Z1000
echo:  M906 T0 E700
echo:  M906 T1 E700
echo:  M906 T2 E700

echo:; Driver stepping mode:
echo:  M569 S1 X Y Z
echo:  M569 S1 T0 E
echo:  M569 S1 T1 E
echo:  M569 S1 T2 E
echo:; Tool-changing:
echo: Z2.00
ok
>

Fans

Part cooler fan is plugged into FAN0/J11, and if you enabled extruder fan (temperature dependent), plug it in FAN1/J12.

Part Cooler Fan (FAN0/J11) and Extruder Fan (temperature sensitive) FAN1/J12
  • Part Cooler Fan (FAN0): cools the extruded filament, the filament which becomes the part you print
  • Extruder Fan (FAN1): cools the heatsink near the heatbreak, when attached to FAN1/J12 it only runs when the hotend is hotter than 50C° as defined in Marlin.

The jumpers are needed next to the fan connectors to define the voltage, either Vin (left) which is 12V-24V depending on the power input of the board, or 12V (middle) or 5V (right).

MKS Monster8 V1.0 Pins
MKS Monster8 V2.0 Pins

Multiple Materials/Colors

With 8 stepper drivers one is able to run:

  • 3+1x motors for X, Y, Z(2)
  • 5x extruders (colors or materials), the board supports 3 hotends (3 different temperatures)

Monster8 V1.0 vs V2.0

The boards differ in physical layout such as connectors, but the firmware is the same, incl. the pin for the hotend cooler fan (which switches on conditionally when hotend heats up).

Update V2.0

Board Comparison 2022

As of 2022 (I intend to update this) following boards are suitable for my cases:

MKS Monster8 V1.0/V2.0 & 12864 displayMellow Fly Super8 V1.2 & 12864 displayDuet 3 Mini 5+ & Duet 3 Mini 2+Duet 3 MB 6HC & Duet 3 Expansion 3HC
Price55 EUR80 EUR155 EUR (120+35)385 EUR (255+130)
Stepper Drivers887 (5+2)9 (6+3)
Stepper Connectors9 (dual Z)879
Hotends345 (2+3)6 (3+3)
USBYES (USB-C)YES (USB-C)YES (MicroUSB)YES (MicroUSB)
WIFI– / YES3)YESYES1)YES1)
EthernetYES1)YES1)
FirmwareMarlin 2.xMarlin 2.x
RepRapFirmware 3.4.x
RepRapFirmwareRepRapFirmware

Alternatively, there are Duet 2 & 3 clones available on the market:

Duet 2 WIFI CloneDuet 2 WIFI OriginalDuet 3 6HC FYSETC Clone with Duet 3 3HCDuet 3 6HC Original with Duet 3 3HC
Price30-50 EUR2)175-185 EUR1) 225 EUR (150+75)385 EUR (255+130)
Stepper Drivers559 (6+3)9 (6+3)
Stepper Connectors6699
Hotends227 (4+3)6 (3+3)
USBYES (MicroUSB)YES (MicroUSB)YES (MicroUSB)YES (MicroUSB)
WIFIYESYES1)YES1)
EthernetYES1)
YES

YES1)
FirmwareRepRapFirmwareRepRapFirmwareRepRapFirmwareRepRapFirmware
  1. either WIFI or Ethernet
  2. without or with display
  3. MKS Monster8 V2.0 has Wifi module option

As of 2022, RepRapFirmware has become quasi standard in professional level 3D printing; while a lot of people run Klipper & Marlin together I can’t see the point doing this*) but rather have a more capable microcontroller like the Duet boards have to run the printer and manage WIFI / Ethernet at the same time. The only reason to run Klipper on a Single Board Computer (SBC) setup like Raspberry Pi is cost and enhance simple microcontrollers functionality this way.

MarlinKlipper & MarlinRepRapFirmware with Duet
CPUs1x Simple Microntroller1x SBC + 1x Simple Microcontroller1x Capable Microcontroller
ConnectivityUSB onlyUSB, Ethernet and/or WIFIUSB and Ethernet or WIFI
Configuration3x .h files, recompiling requiredsingle .cfg filesingle .g file**)
Boot Time3sKlipper 30s, Marlin 3s3s

*) running different kinematics on the SBC converting G-code on the fly might be a reason
**) multiple .g file can be used optionally

If you are cheap, buy the Duet clones, if you want to support Open Source and Open Hardware community, buy from Duet3d.com direct, pricing is +45% of the clone prices, whereas the Duet resellers add another +15% (Clone: EUR 150, Duet3d.com: 220 EUR, Reseller 255 EUR)

RepRapFirmware: Mind the SD Card

Whether to run an original Duet board or a clone, one thing though one might pay attention to is the SD card, it is the weakest link as far I can tell:

  • SD card needs to be present at all time to provide configuration
  • SD card is not written regularly to unless the logging is enabled

After power-cycling the board, as it was in a strange state no longer responding to G-code properly, the display remained blank, no response to G0/G1 – after investigation it turned out, a single file vanished from the SD card: config.g – the main configuration file, and that is bizarre. The board appeared to be broken, when in truth, the SD card came to its end of life of operating reliably already after only ~1.5 years. The SD card was the one originally shipped with. In this light, a Marlin-based board requiring no SD card being present operates more reliable, unless one uses an industrial grade SD card.

References

Misc: Mellow Fly Super8 V1.2 with RepRapFirmware for Ashtar C & D

Updates:

  • 2022/08/25: extending for more details of config.g limit switches
  • 2022/08/16: starting notes

Introduction

Fly Super8 V1.2 board

I have become a big fan of Duet3 boards running RepRapFirmware, and as I was looking for a suitable board, and I came across Mellow Fly Super8 V1.2 board, 8 steppers TMC 2209, and 4 possible hotends.

  • STM42F407ZGT6 (ARM Cortex-M4), 168MHz, 1MB Flash, 192KB RAM
  • 8 stepper drivers TMC2209, configured in UART mode
    • 3x X, Y, Z(2 using splitter)
    • 5x extruders
  • Fly MINI 12864 display
  • 12V power in/out
  • 4 hotends & bed heating
  • Price ~EUR 80 (2022/08) incl. 8 stepper drivers TMC 2209 and 12864 display

Pros:

  • cost effective, EUR 80 (2022/08) with 8x stepper drivers TMC 2209 and 12864 display
  • runs RepRapFirmware
    • most configuration is done with .g files using G-code notion
    • only new non-supported kinematics require recompiling
  • USB & Wifi connectivity (both simultaneously possible)
  • relative simple configuration (compared to Marlin firmware)

Cons:

  • no Ethernet (Wifi is less reliable)

Software Configuration

Majority of configuration is done via a file-system on a SD card which contains a bunch of .g files which define basic settings of the board and machine it operates:

I operate the board direct with USB and Wifi, not in SBC (Single Board Computer) setup.

  • download firmware, single .bin file from (e.g. firmware-stm32f4-wifi-3.4.1_102.bin) and put it into / (root) folder and rename to firmware.bin – it will vanish once installed on the board
  • download web GUI (e.g. DuetWebControl-SD.zip) and then unzip on the SD card, rename folder name as www/
  • run online configurator to get basic configuration config.g, board.txt and multiple other files (all zipped together)
    • enable Wifi: enter your Wifi Name and Wifi Password
    • you get a single zip file, unzip in the / (root) folder
  • insert SD card into the board, restart board
    • eventually the board will join your Wifi network, scan the network to find out which IP it has, then access the board via web-browser, e.g. http://192.168.1.174/
RepRapFirmware Web-GUI

I operate my 3D printers (3x Ashtar K, 1x Ashtar C, 1x CTC DIY I3 Pro) which use different controller boards all accessed via USB cables and Print3r as main interface (CLI) – having an additional Web-GUI aside allows to operate in parallel beside the USB connectivity.

  • 12864 display with knob to configure on the printer
  • USB connectivity to deliver print job
  • Wifi connectivity to access printer via Web-GUI (simultaneously to USB connectivity)

Hardware Configuration

Important is to put the fuses first, otherwise the board won’t operate, further the stepper driver settings, pluggeable fan MOS, limit switches:

Fly Super8 Pins

I configured the board first using simple USB power delivery, later when the 12V power supply is attached I remove the small jumper to avoid the USB powers the board.

Limit Switches / Endstops

In config.g following lines define the limit switches / endstops:

; Endstops
M574 X1 S1 P"io0"                            ; configure switch-type (e.g. microswitch) endstop for low end on X via pin io0
M574 Y1 S1 P"io1"                            ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin io1
M574 Z1 S1 P"io2"                            ; configure switch-type (e.g. microswitch) endstop for low end on Z via pin io2

therefore the endstops are laid out as such:

Attention: the limit switch with three wires must be inserted correctly, otherwise you short GND with 5V when pushing the switch. The proper layout of io[012] pins (left-to-right):

  • Signal
  • GND
  • 5V
Makerbot Endstop V1.2: Pin 1: Signal, Pin 2&3: GND, Pin 4: 5V

Bed Heating & Hotends

Given the config.g defines the heaters as such:

; Heaters
M308 S0 P"ADC_0" Y"thermistor" T100000 B4092 ; configure sensor 0 as thermistor on pin ADC_0
M950 H0 C"bed" T0                            ; create bed heater output on bed and map it to sensor 0
M307 H0 B0 S1.00                             ; disable bang-bang mode for the bed heater and set PWM limit
M140 H0                                      ; map heated bed to heater 0
M143 H0 S120                                 ; set temperature limit for heater 0 to 120C
M143 H0 S120                                 ; set temperature limit for heater 0 to 120C
M308 S1 P"ADC_1" Y"thermistor" T100000 B4092 ; configure sensor 1 as thermistor on pin ADC_1
M950 H1 C"heat0" T1                          ; create nozzle heater output on heat0 and map it to sensor 1
M307 H1 B0 S1.00                             ; disable bang-bang mode for heater  and set PWM limit
M143 H1 S280                                 ; set temperature limit for heater 1 to 280C

; Fans
M950 F0 C"fan0" Q500                         ; create fan 0 on pin fan0 and set its frequency
M106 P0 S0 H-1                               ; set fan 0 value. Thermostatic control is turned off

therefore the connections are:

  • Bed Temperature Sensor ADC0
  • Bed Heater BED_OUT
  • Hotend 1 Temperature Sensor ADC1
  • Hotend 1 Heater HEAT0
  • Part Cooler FAN0

M503 Dump for Ashtar D

M503 dump for Ashtar D (Classic XY) with 400×400 bed, single extruder:

> M503
; Configuration file for Fly Super8 (firmware version 3)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.4.0-LPC-STM32+4 on Tue Aug 16 2022 20:32:44 GMT+0200 (Central European Summer Time)

; General preferences
G90                                          ; send absolute coordinates...
M83                                          ; ...but relative extruder moves
M550 P"Ashtar D1"                            ; set printer name
;M669 K1                                      ; select CoreXY mode

; Network
M552 S1                                      ; enable network
M586 P0 S1                                   ; enable HTTP
M586 P1 S0                                   ; disable FTP
M586 P2 S0                                   ; disable Telnet

; Drives
M569 P0 S1                                   ; physical drive 0 goes forwards using default driver timings
M569 P1 S1                                   ; physical drive 1 goes forwards using default driver timings
M569 P2 S1                                   ; physical drive 2 goes forwards using default driver timings
M569 P3 S1                                   ; physical drive 3 goes forwards using default driver timings
M569 P4 S1                                   ; physical drive 4 goes forwards using default driver timings
M584 X0 Y1 Z2:3 E4:5                         ; set drive mapping: Z drivers port 3&4, E drives 4&5
M350 X16 Y16 Z16 E16 I1                      ; configure microstepping with interpolation
M92 X80.00 Y80.00 Z3200.00 E420.00            ; set steps per mm
M566 X900.00 Y900.00 Z30.00 E120.00          ; set maximum instantaneous speed changes (mm/min)
M203 X6000.00 Y6000.00 Z150.00 E1200.00      ; set maximum speeds (mm/min)
M201 X500.00 Y500.00 Z20.00 E250.00          ; set accelerations (mm/s^2)
M906 X800 Y800 Z800 E800 I30                 ; set motor currents (mA) and motor idle factor in per cent
M84 S30                                      ; Set idle timeout

; Axis Limits
M208 X0 Y0 Z0 S1                             ; set axis minima
M208 X380 Y380 Z380 S0                       ; set axis maxima

; Endstops
M574 X1 S1 P"!io0"                            ; configure switch-type (e.g. microswitch) endstop for low end on X via pin io0
M574 Y1 S1 P"!io1"                            ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin io1
M574 Z1 S1 P"!io2"                            ; configure switch-type (e.g. microswitch) endstop for low end on Z via pin io2

; Z-Probe
;M558 P0 H5 F120 T6000                        ; disable Z probe but set dive height, probe speed and travel speed
;M557 X15:215 Y15:195 S20                     ; define mesh grid

; Heaters
M308 S0 P"ADC_0" Y"thermistor" T100000 B4092 ; configure sensor 0 as thermistor on pin ADC_0
M950 H0 C"bed" T0                            ; create bed heater output on bed and map it to sensor 0
M307 H0 B0 S1.00                             ; disable bang-bang mode for the bed heater and set PWM limit
M140 H0                                      ; map heated bed to heater 0
M143 H0 S120                                 ; set temperature limit for heater 0 to 120C
M143 H0 S120                                 ; set temperature limit for heater 0 to 120C
M308 S1 P"ADC_1" Y"thermistor" T100000 B4092 ; configure sensor 1 as thermistor on pin ADC_1
M950 H1 C"heat0" T1                          ; create nozzle heater output on heat0 and map it to sensor 1
M307 H1 B0 S1.00                             ; disable bang-bang mode for heater  and set PWM limit
M143 H1 S280                                 ; set temperature limit for heater 1 to 280C

; Fans
M950 F0 C"fan0" Q500                         ; create fan 0 on pin fan0 and set its frequency
M106 P0 S0 H-1                               ; set fan 0 value. Thermostatic control is turned off

; Tools
M563 P0 D0 H1 F0                             ; define tool 0
G10 P0 X0 Y0 Z0                              ; set tool 0 axis offsets
G10 P0 R0 S0                                 ; set initial tool 0 active and standby temperatures to 0C

; Custom settings are not defined

; Miscellaneous
M501                                         ; load saved parameters from non-volatile memory

; 12864 Display                              ; https://teamgloomy.github.io/fly_super8_screen_12864.html
;M950 P1 C"LCD_D4"
;M42 P1 S0
;G4 P500
;M42 P1 S1
;M918 P2 C30 F100000 E4

; M918 P1 E-4 F2000000                        ; https://github.com/jadonmmiller/UltimateDuetMenuSystem

M950 P1 C"LCD_D4"
M42 P1 S0
G4 P500
M42 P1 S1
M918 P2 C30 F100000 E4

Multiple Materials/Colors

With 8 stepper drivers one is able to run:

  • 3x motors for X, Y, Z(2) – attach two Z stepper motors to one driver via splitter
  • 5x extruders (colors or materials), the board supports 4 hotends (4 different temperatures)

Gallery

Board Comparison 2022

As of 2022 (I intend to update this) following boards are suitable for my cases:

MKS Monster8 V1.0/V2.0 & 12864 displayMellow Fly Super8 V1.2 & 12864 displayDuet 3 Mini 5+ & Duet 3 Mini 2+Duet 3 MB 6HC & Duet 3 Expansion 3HC
Price55 EUR80 EUR155 EUR (120+35)385 EUR (255+130)
Stepper Drivers887 (5+2)9 (6+3)
Stepper Connectors9 (dual Z)879
Hotends345 (2+3)6 (3+3)
USBYES (USB-C)YES (USB-C)YES (MicroUSB)YES (MicroUSB)
WIFI– / YES3)YESYES1)YES1)
EthernetYES1)YES1)
FirmwareMarlin 2.xMarlin 2.x
RepRapFirmware 3.4.x
RepRapFirmwareRepRapFirmware

Alternatively, there are Duet 2 & 3 clones available on the market:

Duet 2 WIFI CloneDuet 2 WIFI OriginalDuet 3 6HC FYSETC Clone with Duet 3 3HCDuet 3 6HC Original with Duet 3 3HC
Price30-50 EUR2)175-185 EUR1) 225 EUR (150+75)385 EUR (255+130)
Stepper Drivers559 (6+3)9 (6+3)
Stepper Connectors6699
Hotends227 (4+3)6 (3+3)
USBYES (MicroUSB)YES (MicroUSB)YES (MicroUSB)YES (MicroUSB)
WIFIYESYES1)YES1)
EthernetYES1)
YES

YES1)
FirmwareRepRapFirmwareRepRapFirmwareRepRapFirmwareRepRapFirmware
  1. either WIFI or Ethernet
  2. without or with display
  3. MKS Monster8 V2.0 has Wifi module option

As of 2022, RepRapFirmware has become quasi standard in professional level 3D printing; while a lot of people run Klipper & Marlin together I can’t see the point doing this*) but rather have a more capable microcontroller like the Duet boards have to run the printer and manage WIFI / Ethernet at the same time. The only reason to run Klipper on a Single Board Computer (SBC) setup like Raspberry Pi is cost and enhance simple microcontrollers functionality this way.

MarlinKlipper & MarlinRepRapFirmware with Duet
CPUs1x Simple Microntroller1x SBC + 1x Simple Microcontroller1x Capable Microcontroller
ConnectivityUSB onlyUSB, Ethernet and/or WIFIUSB and Ethernet or WIFI
Configuration3x .h files, recompiling requiredsingle .cfg filesingle .g file**)
Boot Time3sKlipper 30s, Marlin 3s3s

*) running different kinematics on the SBC converting G-code on the fly might be a reason
**) multiple .g file can be used optionally

If you are cheap, buy the Duet clones, if you want to support Open Source and Open Hardware community, buy from Duet3d.com direct, pricing is +45% of the clone prices, whereas the Duet resellers add another +15% (Clone: EUR 150, Duet3d.com: 220 EUR, Reseller 255 EUR)

RepRapFirmware: Mind the SD Card

Whether to run an original Duet board or a clone, one thing though one might pay attention to is the SD card, it is the weakest link as far I can tell:

  • SD card needs to be present at all time to provide configuration
  • SD card is not written regularly to unless the logging is enabled

After power-cycling the board, as it was in a strange state no longer responding to G-code properly, the display remained blank, no response to G0/G1 – after investigation it turned out, a single file vanished from the SD card: config.g – the main configuration file, and that is bizarre. The board appeared to be broken, when in truth, the SD card came to its end of life of operating reliably already after only ~1.5 years. The SD card was the one originally shipped with. In this light, a Marlin-based board requiring no SD card being present operates more reliable, unless one uses an industrial grade SD card.

References

3D Printing: Slicing with Non-Planar Geometries

Updates:

  • 2022/04/25: added single photo with various 20mm cube prints
  • 2022/04/01: rewording to avoid confusion of “planar slicing” with non-planar geometries
  • 2022/03/26: finally published
  • 2022/03/25: adding “Benefits of Non-Planar Printing” and “Blind Spots of CAD Systems” and “Scale and Functional Quality”
  • 2022/02/18: getting ready to publish
  • 2022/02/15: adding different slicing geometries and the resulting G-code
  • 2022/02/12: starting write-up

Introduction

After researching non-planar slicing using planar slicers it was obvious to find a way to slice with any kind of geometry, and it meant to step back and formalize slicing procedure in a general manner like “Universal Slicing” – and look at the procedure of slicing itself.

Two classes were defined:

  • Class 1: using a geometry, either planar or non-planar, and slicing with a static slicing path
  • Class 2: slicing with variable slicing path and/or variable slicing geometry while slicing

This document/blog-post features a solution for Class 1 Universal Slicing.

My video Non-Planar 3D Printing: Slicing with Non-Planar Geometries goes through this information in an animated form, this is the textual form.

Slicing with Non-Planar Geometry (Class 1 Universal Slicing)

When using a static planar slicing vector one usually uses a plane, hence the term “planar slicing”, yet, there is also the possibility to use a non-planar geometry and slice in a planar direction (introducing ambiguity what planar and non-planar slicing actually mean). Regardless which slicing geometry is used in this procedure, the thickness of the sliced layer stays the same.

Slicing 20mm cube with wave-like geometry

In order to explore non-planar slices, using a wave-like geometry composed by Bezier curves and slice a 20mm cube:

Note: OpenSCAD is used solely used as 3D viewer, the slicing itself is performed by an experimental slicer.

Routing a single non-planar slice

A single slice is routed to wall/perimeter and infill extrusion:

There are several approaches to achieve this:

  • slice non-planar, map single slice 3d to 2d, route with 2d offsetting, and map back to 3d space (MetatronSlicer)
  • map entire mesh and slice planar, and map routes or resulting G-code back again (EnochSlicer)

and likely other more complex means.

Non-planar Printed Wave-like Sliced 20mm Cube

Preview of the complete G-code:

Preview the non-planar G-code of 20mm cube sliced with wave-like geometry

and a brief and fast printing simulation showing the entire print:

The computed G-code printed with a 3D printer, e.g. an ordinary 3-axis FDM:

Non-Planar 3D Printing: 20mm cube sliced with wave-like geometry (1x speed with a few skips)

and produces output like this:

left-to-right: wave-like geometry itself, progressive state of 20mm cube sliced with wave-like geometry at 0.25mm layer height

Implementing Non-Planar Slicing Geometries Slicer

The illustrations and actual G-code above were produced by two new in-house slicers which are in early development (2022/03):

20mm cube sliced with wave-like geometry
left-to-right: MetatronSlicer (0.0.7), EnochSlicer (0.0.2)
  • MetatronSlicer: boundary-based (BREP / OpenCASCADE) and voxel-based (OpenVDB) geometry engine, performing true non-planar slicing, and LabSlicer performing routing and G-code creation; slower slicing yet precise G-code
  • EnochSlicer: mesh and G-code transformation approach, fast slicing yet less accurate G-code

The extrusion precision is still rough, but overall concept and algorithms have been proven to work.

Results & Achievement

This work as presented here resolves a long pending issue of slicing meshs “non-planar”, or general “non-planar slicing” with all its inherent ambiguity – consider it as given that

one can use any 3D geometry with sufficient upper “surface” to slice a mesh with

and create printable G-code for 3- and 5-axis FDM:

  1. using a block as planar blueprint
  2. hemisphere, convex
  3. hemisphere reverse, concave
  4. cone, slicing conical like for Rotating Tilted Nozzle
  5. wave-like defined via Bezier curves
  6. wave-like defined via NURBS (Non-Uniform Rational B-Splines) curves
  7. tilted plane, slicing for belt printer with 45° tilted XY frame toward Z belt
  8. pimple-like

Along with volume segmentation as presented previously and conical, cylindrical and spherical slicing now any kind of slicing geometry can be used.

As pointed out in Universal Slicing, this “Planar Slicing with Non-Planar Geometries” is Class 1 of Universal Slicing whereas Class 2 covers changing slicing geometry and/or flexible slicing path along the slicing.

Limiting Non-Planar Height for 3-axis FDM

When using non-planar geometries to slice a model also non-planar G-code is produced and possibly significant Z motion occurs, and when printing with an ordinary 3-axis FDM 3D printer it may be suitable to limit the Z motion aka Z amplitude to 2-3mm in order to avoid part-cooler or other parts of the print head to collide with the already printed part:

left column: wave-like slicing, right column: hemisphere slicing
top row: full range, bottom row: limited to ~3mm Z amplitude

Future blog-posts will go into further details implementing Universal Slicing using those two slicers MetatronSlicer and EnochSlicer.

Regarding naming the slicers: Metatron is an archangel in jewish mythology – consider an “angel” as a fundamental intelligence, and in esoteric context Metatron is the being responsible for Form or Geometry itself – separating one into many in a spatial manner; whereas Enoch as a human, who ascended to become the archangel Metatron. I use those names in deep reverence for these two projects.

Blind Spot of CAD Systems

Current CAD systems (2022) neglect or actually are unaware of the inner vs outer structure – because only one kind of the “structure” is known, e.g. a piece is designed because of a certain function, which defines its outer form, e.g. a wrench to use a simple example – but how about the inner structure? This isn’t defined in the CAD, it is defined at the manufacturing stage, yet with 3D printing this can be described and designed even in a parametric way as well, the slicing or general 3D printing stage with different materials.

We require 2 or 3 abstraction layers to design a functional piece:

  1. the functional description (doesn’t exist yet)
  2. the inner structure (description how material is deposited in Additive Manufacturing, e.g. the infill geometry as of with FDM, incl. non-planar printing, or lattice structures as with SLA or SLS)
  3. the outer structure (e.g. mesh, boundaries)

So far CAD systems only covers the 3rd point, the outer structure.

The functional description is almost non-existent in the CAD world, and only becomes some attention when Finite Element Analysis is made and the form is changed, it is kind of hidden in plain sight.

In future blog-posts I will address and elaborate on these issues further.

Scale and Functional Qualities

To put the flexible slicing geometry in the grander context of 3D printing engineering:

3D printing engineering starts at nanometer scale (10-6mm) with material science level, over to filament composition at 1 to 10 micrometer scale (10-2mm) such as fibers, inner geometry where slicing geometry & procedure and infill geometry define strength properties at millimeter scale (100mm), and outer geometry with the shape of the object itself provide the final stage of mechanical properties.

This entire “scale chain” as a whole defines the mechanical property of the final 3D printed object.

That’s it.

References

Misc: XYZdims State 2022/02

Updates:

  • 2022/02/20: finally published
  • 2022/02/08: ready to publish finally with some delay
  • 2022/01/28: not yet published, removed Universal Slicing details for future blog-post, added more photos and illustrations
  • 2022/01/16: starting write-up

Introduction

Aside of the technical detailed filled blog-posts I like to start to post about the larger context of my inner motivations doing XYZdims.com – this is the first post “XYZdims State 2022/02”:

More Slicers

Recent in-house developments having more slicers to experiment with, in regards of slicing techniques as well lay the ground for more complex slicing and mapping/transformation operations to support arbitrary non-planar slicing (coming soon).

LabSlicer: The Mother

Big Picture of XYZdims – State 2022/02
(click on it and then zoom in, it’s a large image)

As I was working with Slicer4RTN and wrappers like Cura-CLI-Wrapper and Kiri:Moto Slicer (CLI wrapper), and adopting Mandoline fork – I realized I need to have my own slicer, so in November 2021 I started from scratch, as I thought I need to know every detail and so I exposed each step or stage:

  • mesh: load mesh, vertices & faces
  • slice: slice layers into sets of polygons
  • route: route the layer polygons with walls, infills etc
  • gcode: convert routes to G-code

A “lab(oratory) slicer” or simply LabSlicer was born – I defined each stage: API and file-format it takes in and spits out.

After a couple of weeks I had slicing into polygons, and routing of walls, basic infills, skirts, brims and eventually intermediary top & bottom layers resolved, and I was able to generate printable gcode:

Meanwhile LabSlicer as of version 0.1.5 has matured to print complex models reliably but rather performs slow compared to Slic3r or Cura.

As of 2022/02 I’m even use LabSlicer and its relatives (featured below) for productive 3D prints.

Vox3lSlicer: Voxels

Aside of LabSlicer I began to develop Vox3lSlicer which utilizes internally the OpenVDB voxel library, in order to slice planar and in the future non-planar as well, and also permit to slice voxel-based models efficiently.

A few tests with OpenSCAD Logo model (~20mm height) with various amount voxel samples, from low resolution to high resolution:

and with defined voxel sizes:

As LabSlicer matured and LabSlicerCore library came to life, Vox3lSlicer (2011/11) utilizes the stage route and gcode of LabSlicerCore to actually produce printable G-code.

Testing the retraction code and settings of Vox3lSlicer, rotating the model in order to avoid support structure altogether:

VoxGLSlicer: OpenGL Slicing

Early VoxGLSlicer tests

As I was looking for other slicing procedures I came across OpenGL-ST-Slicer, which utilizes a clever OpenGL setup with GLSL (Shader Language) to render a mesh to a framebuffer with the volume information, and so slicing is done solely in the GPU almost instantly – I extended this approach and glued it together with LabSlicerCore and I was able to produce also printable G-code – VoxGLSlicer was born (2022/01).

Due the limitation of the internal framebuffer width & height the resolution of the slicing changes with the size of the model aka “relative resolution”:

model width [mm]pixel size [mm] @ 2560 pixels
200.008 or 8 μm
500.019 or 19 μm
1000.039 or 39 μm
2000.078 or 78 μm
5000.19 or 195 μm
10000.39 or 390 μm

and just for illustration about “pixel size” related to a ~20mm model:

3 Slicers

After a few weeks coding (2021/11-2022/01), I was able to raise 3 slicers, each with their unique slicing approaches to create printable G-code, by having a common API and use symbiotic advantage of each other:

LabSlicerVox3lSlicerVoxGLSlicer
meshmesh.py1) multi-format mesh importeropenvdb STL importermesh.py1) multi-format mesh importer
sliceslicing mesh to polygons (vectorizing)slice voxels into polygons (vectorizing)screenbuffer into polygons (vectorizing)
routeroute polygons to routesLabSlicerCore’s routeLabSlicerCore’s route
gcodeconvert routes to G-codeLabSlicerCore’s gcodeLabSlicerCore’s gcode
+ traditional slicer with polygons
+ all stages fully implemented
– slow slicing2)
+ fast slicing
+ flexible resolution
+ reliable
+ fast slicing
– fixed screenbuffer size
– relative resolution

All three slicers are very experimental and play a significant role for the next step – Universal Slicing.

Footnotes:

  1. mesh.py is loading/saving 3d meshs/models and some simple manipulations tuned toward my use cases
  2. mesh slicing not yet optimized

So any optimizing of routing (wall, infill, intermediary top/bottom layers etc) and gcode optimizing all three slicers benefit from.

YAGV & Nautilus Thumbnailer Supporting ArcWelder

After the implementing G2/G3 emulation for gcode2png as part of the G-code thumbnailer, I also added it to G-code viewer yagv fork of mine:

Print3r

And just for sake of giving a bit of context, adding ArcWelderLib in the pipeline of Print3r via the configuration:

# first declare new post-processor named "arcwelder":
post_arcwelder = ArcWelder %i %o
# optionally, define it to be active (all the time):
post = arcwelder

or optionally enable it on the command-line:

% print3r print cube.stl --post=arcwelder

That’s it for now.

References

Misc: Formnext 2021 Review

My first Formnext in 2019 I realized there was no way to explore the expo in 1 day only, so I reserved for Formnext 2021 (Frankfurt, Germany) 4 days fully (November 16-19). Although the expo was smaller than in 2019, it was still massive to explore. I’m not even sure I saw all of the 600+ exhibitors despite roaming the two halls (12.0 ground floor, 12.1 first floor and 11.0 ground floor only) multiple times.

Inhouse Developments: ZPlusSlicer & 5DMaker

I presented my inhouse developments of ZPlusSlicer and 5DMaker for the first time in public (otherwise just illustrated in About: Big Picture), as of November 2021, it’s not yet published or otherwise documented.

About 40+ samples I handed out and alike amount some brief documentation (on paper) on ZPlusSlicer and 5DMaker (5MF processor) – both in early stage of development, and the “overhang stairs” a proof-of-concept of the benefit of both new conceptual layers on top of traditional slicing. By spring 2022 I will publish more publicly on both products once they matured to Beta stage.

Notables

  • Ultimaker: they didn’t have any booth, yet their machines were placed at many booths, resellers kind of represented them – combination of dominance and absence
  • Makerbot wasn’t there
  • Markforged considers itself as startup but outsiders consider them as big player already – impressive integration of machine, material and slicer, yet, all closed down; hard(er) to integrate with 3rd party software
  • nScrypt micro-dispensing on cylindrical or spherical surfaces, PCB 3d printing and pick-place SMD components:
  • Krause DiMaTec showed its EDDY 3D printer, slow Z axis, but quite affordable at ~8K EUR for the machine with 600 x 600 x 600mm build-volume, and the 3D metal printed hotend was quite an eye-catcher:
  • Duplex3D printer: two nozzles starting to print on upper & lower side of the build plate, once reached some distance, the plate is removed (!!) and 3D prints continues in both Z directions (the front glass is very glaring so not many details, also the representatives didn’t want to me to take too close photos):
  • Prusa Research released its Prusa XL – a Core XY based printer, I took a few photos with a lot of small innovations:
    • 360 x 360 x 360 mm build volume
    • mechanical pressure-based Z calibration built into the printhead (nozzle probes mechanical on the build plate)
    • segmented heating of build plate, heat there where the part is located
    • new printhead with geared filament drive motor
    • optional tool changer
    • optional foldable air-draft prevention
    • pricing from 2.5K EUR to 3.5K EUR
    • pre-order, delivery Q2/Q3 2022 (!!)
  • Modix as sold by 3Dmensional:
    • 600 x 600 x 600mm build-volume
    • fully enclosed
    • DIY kit or fully assembled
    • pricing 3.5K EUR (kit) to 6K EUR (assembled)
  • TreeDFilaments: 55 different materials
  • Kimya: materials too, great (paper) catalogue with detailed information on how to print their filaments and use-cases

Formnext 2021 Impressions

People vs Companies

Although all the companies appear quite anonymous, if you spend more than just a few minutes, and are able to talk to some technical skilled people – aside of the sales representative – you will notice “normal” people with the same passion like you and me: 3D printing enthusiasts, who turned their hobby into a professional passion, either as a startup or joining a bigger company to explore 3D printing further.

The most worthwhile and interesting interactions were the ones I had with little business aim but technical exchange on new slicing methods and algorithms, new G-code extensions or pre-/post-processing, and new hardware designs in particular 4-axis approaches by different individuals and companies based on my slicing software and hardware designs they found via my YouTube videos – which was quite a revelation for me.

Covid & Expo

As of November 2021, Covid-19 isn’t over but I was glad to explore Formnext 2021 in person, a “2G event”, means, either one had to be vaccinated or recovered from Covid. The first days most people worn masks, by each day less and less – me included, as it was hard to talk with the mask on and hear each other properly even standing close to each other due the overall noise level in the halls.

Mood

Certainly the overall mood was great among the exhibitors and visitors as well – professional interest, respectful cordial interactions – less noisy than in 2019 which was more hectic due more visitors overall. Tuesday (1st day) and Friday (last day) had less visitors, whereas Wednesday and Thursday was quite overwhelming and significant more visitors.

At last, some impressions of Frankfurt (Germany) itself . . .

That’s it.

References