PROJECT: PC Upgrade & Benchmark Results

Since 2011 I have been rocking on an Intel i5 2500K (man this thing should go into a museum for how well it has aged...), and only a couple of years ago did I "upgrade" to a Intel i7 3770K. I did this primarily for VR, as my old motherboard did not support the correct USB 3.0 specification... 

Well early this year I decided to do a proper upgrade, but before doing so I ran some benchmarks to compare the old/new PC. Turns out the new hardware is at least twice as fast, so I am a happy camper :D

Old/New PC Specifications

  Old PC Specs New PC Specs
CPU Intel i7 3770K Intel i7 10700KF
CPU Cooler Hyper 212 EVO be quiet! Dark Rock 4
RAM Kingston HyperX Beast 2x8GB 2133MHz DDR3 Team T-Force Dark Z 2x8GB 3200MHz DDR4
GPU ASUS GTX 1060 6GB Gigabyte RTX 3070 Gaming OC 8GB
SSD Samsung 860 Evo SATA III 250GB SSD Kingston A2000 M.2 NVMe 1TB SSD
MOBO Gigabyte GA-Z77MX-D3H Gigabyte Z490-GAMING-X
PSU Corsair HX650W 650W Gigabyte AP850GM 850W

Benchmark Results

  Old PC New PC
3DMark CPU ("Time Spy" test) 4398 9857
3DMark GPU ("Time Spy" test) 4162 14086
Steam VR Score 7.1 11.0
SOLIDWORKS (_AR2_Assembly.SLDASM) 17sec 12sec
Altium (Solar-heart_MAIN_v11b.PcbDoc) 12sec 3sec

Benchmark Results (Extra)


PROJECT: Prusa i3 MK3S Extruder Heatsink

It may come as a surprise but some 3D printer extruder stepper motors tend to run quite hot, like +25°C above ambient hot. This is not too bad when your ambient/room temp is ~20°C, but boy do the summers in Australia get toasty... and if things get toasty enough the heat can creep through the shaft/driver gears and warm up the filament surface, making it that much harder to feed in controllably

Now as far as I am aware I have not run into this issue with my Prusa i3 MK3S + MMU2S, however I was curious to see:

  1. What is the typical temperature rise of the extruder stepper motor
  2. If installing a passive (no fans) heatsink could help lower the above temperature

The Setup

I tested the extruder stepper motor of my Prusa i3 MK3S under 3 scenarios:
  1. Original (no heatsink)
  2. Dense fin pattern heatsink (ATS-FPX040040025-05-C1-R0)
    • Single fin dimensions are 0.8 x 8.5 x 22.2mm and there are 50 of them
    • Weight 29.6g
    • Thermal resistance 8.7°C/W (unducted flow)
  3. Light fin pattern heatsink (ATS-CPX040040025-116-C1-R0)
    • Single fin dimensions are 0.9 x 8.5 x 22.2mm and there are 32 of them
    • Weight 21.4g
    • Thermal resistance 4.1°C/W (unducted flow)
    • Suspect this will be the winner due to the spread fins 

In each case I logged the stepper motor & room temperature, from which the temperature rise (above ambient) value was calculated. I should point out that comparing the Δ/change in temperature is more suitable here instead of say comparing the absolute peak temperature in each scenario 

Also to make sure I was testing the heatsink performance (and not how well it coupled to the stepper motor) I used a crazy high thermal conductivity pad. The EYG-A091202DM, which is graphite based and has a thermal conductivity of 1850W/m·K! (two orders of magnitude higher than your typical thermal pad)
NOTE: To mount the heatsinks I had to change the M3 screws from 30mm to 35mm

Finally, for those curious this is the model I was printing for the test:

The Results

As I suspected the lighter fin pattern heatsink (ATS-CPX040040025-116-C1-R0) gave the lowest temperature rise, reducing it by a cool 7°C compared to no heatsink

On paper this may sound surprising, as this heatsink has a lower thermal resistance (4.1°C/W vs 8.7°C/W) which in theory should mean worse performance. BUT what one must realise is that we are extracting/exchanging the heat from the heatsink via convection currents (not forced air flow), and in this case it's easier for the air to couple into a less dense fin pattern


PROJECT: Half-Life 2 AR2, Update #7 - Receiver Progress


With this update I though I would show what a typical evenings worth of SOLIDWORKS looks like, and what better way to do it than a cool timelapse video: 

Here I am working on the AR2 "Receiver", the part that hold all things relevant to the "firing pin" as well as trigger. In the video you see me fix up small issues (like unexpected collisions), as well as figure out how each part will fit and fasten together

Once that stage is complete then plan is to then figure out how on earth I am going to find the space to fit all the extra components/electronics...


PROJECT: Half-Life 2 AR2, Update #6 - Now with Sound


Quick update... I have the sound part of the AR2 prototype working :D

To give you a quick rundown. Initially I went with a VS1000 based dev-board but soon found that this chipset does not support polyphonic playback, as in a sound must finish playing before another can be played. Well this is where the WAV Trigger (a crazy flexible WAV player designed by Jamie Robertson) comes in, as this STM32 based dev-board allows you to play up to 14 tracks at the same time! Which is perfect for blending the firing/reloading sounds the AR2 makes 

Also with the current prototype I am using a Class AB amplifier to drive a 4Ω 3W speaker. I did have a quick play around with a Class D amplifier, but found that it slightly distorted the firing sound

With all that said, the next step is to fix up the 3D model (note all the black marker markers...) and start thinking about combining all these dev-boards into one (as in put my Altium hat on)


PROJECT: Half-Life 2 AR2, Update #5 - The Prototype


The Rundown

After burning a few months getting the MMU2S up and running, figuring out the MMU2S is not multi-material, and releasing my custom firmware for the MK3S... I have finally got back to working on the AR2 ( ͡° ͜ʖ ͡°)

In my last update I had figured out the shell reload movement, so now it was time to 3D print the remaining parts and test how well everything works together. But before we get to the cool footage I want to show the functional blocks I plan to implement in the AR2. Currently I have the basic blocks (in green) up an running, these include things like servo/solenoid drivers as well as the main controller itself. In the future I plan to add extra features (in red), these are things like lights, sound, and safety measures

The Assembled Prototype

With all the "boring" stuff out of the way, here is some footage of the current AR2 prototype. You might notice that the body has strange arrows/scribbles, this is me marking what needs to be fixed in the final model...

Some Advice

Whatever you are working on, don't be afraid of making a rough prototype!

A personal example is that with my first professional job I was tasked with making a lead-acid battery charger. I recall spending many weeks simulating the circuit to make sure it was perfect. Looking back, I could have easily halved my development time by making up a crude prototype, and if anything this prototype would have shown me things that my simulation could not...

So the lesson is, don't be afraid of making mistakes and get that prototype out there ASAP


PROJECT: MMU2S & Filament Diameter Irregularities

This is a follow up to my previous post, Prusa i3 MK3S + MMU2S

Here I describe how I modified the printer firmware (FW) to better handle filament diameter irregularities. The FW I produce is 3.9.0-ANT, which is a slight modification of the vanilla Prusa i3 MK3S 3.9.0 FW. Also you can get the compiled .hex file here: 



The Problem

Turns out that printing with lighter colour filaments can be a pain in the butt on the MMU2S, as (for me at least) lighter colours are more likely to make "double up" tips during unload. These create a diameter irregularity which if bad enough will cause load issues, as the IR sensor (at extruder) will get confused by the sudden "lack" of filament

The Solution

After creating an issue/suggestion on the Prusa GitHub (issue #2797) I got to work trying to modify the printer FW to be more resilient against such anomalies

Initially I had some trouble getting the build environment up and running, as for the vanilla 3.9.0 FW my .hex file was vastly different to what Prusa produced. But after some help from 3d-gussner we were able to figure out that Prusa's compile instructions for Linux OS were a bit outdated, as I should have been compiling with "./PF-build.sh" and not "./build.sh" like the instructions said ;^)

With all that said, let me introduce my first custom 3D printer FW 3.9.0-ANT. As mentioned before this guy is much more resilient to filament diameter anomalies, and with one tool change heavy job managed to reduce the load errors from 10 to 0! 

More Info

Luckily making 3.9.0-ANT FW was quite easy, and only required me to change a single number

In "mmu.cpp" there exists a function called "can_load()", this function is called whenever the printer is asked to load filament. During a load the counter "filament_detected_count" is incremented whenever the IR sensor detects that filament is present, and when a load is finalised the counter is compared against a threshold to see if the load was successful

As of 3.9.0 this threshold value is 26 ((6.0 / 0.2) - 4), meaning the IR sensor must see 26 positive instances for the load to be considered successful

Well with my 3.9.0-ANT FW I lower the threshold from 26 ((6.0 / 0.2) - 4) to 5 ((6.0 / 0.2) - 25), by changing:

if (filament_detected_count > steps - 4)


if (filament_detected_count > steps - 25)


PROJECT: Just How Multi-Material Is The MMU2S?

TL;DR: The "Multi-Material Upgrade" should really be called the "Multi-Colour Upgrade", as printing with different materials requires crazy amounts of purging (>2500mm³) between swaps. If you want true multi-material capability then you need a printer with at least two separate hotends

Following on from my previous post on the MMU2S, I decided to test out just how multi-material it actually is. I did this by printing some PLA & PETG samples, and testing their layer adhesion strength. The reason for this somewhat strange combo is that both PLA & PETG stick reasonably well to each other when being printed, however once the part cools the two plastics are easy to separate. Making them an ideal combo to print 0mm interface supports 

The Setup

Filament used for tests:

Believe it or not but the stock PrusaSlicer (as of v2.2.0) does not have the capability to smoothly transition between different material temperatures. For example, say you want to print PLA at 200°C and PETG at 225°C. With the stock slicer when you change from: 
  • PLA → PETG, the PLA will be unloaded at 225°C, leading to stringy tips
  • PETG → PLA, the old PETG will be purged at 200°C, making it impossible to purge old material
To get around this I recommend using PrusaSlicer 2.2.0 DRIBBLING by antimix, as it allows you to control the load/unload temperature

Below is how the 10 samples were configured in PrusaSlicer, as well as what they looked like when printed:

Finally, to test the layer adhesion strength I made up a simple three-point bending flexural test jig:

The Results

Before we get to the data, I need to first raise a few points:
  1. For the single material layer strength (Single Mode) I manually purged ~2500mm³ of PLA/PETG before starting the print by feeding ~1m of filament though the hotend. This will be considered as the maximum possible layer adhesion strength for each material
  2. The 500mm³ Purge has two data points, one for a purge temperature of 235°C and the other for 260°C. As you would expect purging old PETG at 260°C (loading PLA) helps with PLA layer strength as it's easier for the old PETG to exit the hotend. Interestingly purging old PLA at 260°C (loading PETG) has the opposite effect, I suspect this is due to old PLA carbonising in the hotend
  3. To get the break weight of each sample I recorded the scales display at 1080p 60fps and then played the video back at half speed on my PC
  4. The largest purge volume I did when using the MMU2S is 1250mm³. I decided to stop things here and extrapolate the data I had with an exponential relationship 
  5. Lastly, you might say that PETG is quite a "sticky" material and that it's difficult to fully purge it from the hotend. Turns out that same is true for PLA (and I suspect other materials), as in both cases you need crazy purge volumes (>2500mm³) to fully clear the hotend
With that out of the way, here is all the data I collected:

Outcome & Tips

Basically there is no easy way out when printing different materials on the MMU2S. You need to purge at least 2500mm³ if you want to have any chance of removing the old material (same is true for both PLA & PETG). Turns out the same holds true in the injection moulding world, "General-purpose nozzles have a dead spot in the nose and take about 50 shots to purge clean"

To give you an idea, here is how a 2500mm³ block looks like in PrusaSlicer:

With all that said, if you do decide to use the MMU2S for multi-material prints then I highly recommend getting an E3D v6 Pro Sock. As earlier on I found that swapping between PLA/PETG creates little beads which if left for long enough merge and grow in size, eventually making a big blob on the nozzle that knocks anything in it's path. Swapping the normal silicone sock to the Pro solved this for me:

So looks like I won't be having 0mm interface supports with my Half-Life 2 AR2 project D: