3d printing

Creality Ender 3 V 1.1.3 TMC2208 UART Mod

My Ender 3 had a Creality v 1.1.3 board with A4988 drivers which drive the motors with a fair bit of noise. Trinamic offer two drop-in replacements, the TMC2208 and TMC2209, so a couple of months ago i thought I’d try swapping out the drivers instead of buying a replacement board and drivers. I had three spare new TMC2208s too, so this option was free!

Originally I thought swapping out the X,Y and E would be best, as these three drivers are the ones that are most active, however after swapping the drivers I found that Marlin’s linear advance doesnt play nicely with the TMC2208 and I couldnt get any filament to extrude, so I swapped the E and Z axis in my Marlin config, swapped the plugs over on the board and everything worked fine. Details on how to perform this upgrade can be found in the TCM2208 Application Note AN045 (on this page) – pretty much just a case of swapping the chip, the cap on pins 4 & 5 from 0.1uf to 0.022uf, removing the resistors from pins 11 & 12 and re-setting the v-ref.

Fast forward to yesterday, I thought why not remove the connections to the SD card slot which I havent used in months, and use the newly available pins on the mcu to connect to the uart pins on the TMC2208s, it was a simple case of cutting 6 traces and adding three jumper wires, it took longer to get the board in and out of the printer than it did to do the mod work! You could also just cut the traces for PDN_UART on each chip, remove the IC U2, a 74HC541, (or lift pin 1 and pull it high) and connect to the pins on the ISP header instead of cutting the traces for PB5, PB6 & PB7 if you to cut less traces.

If you have the 1.1.4 or 1.1.5 with TMC2208s already on then this mod should also work, the boards look very similar but I’d double check the traces to cut with a multimeter first!

This is the front of the board showing the required trace cut and front side connection:

This is the back of the board, showing trace cuts and connections. Also visible is the beefed up ground connection – the white wire to the right and the always-on board fan – the trace cut and solder bridge at the bottom.

I made the following connections:

  • X axis UART to pin 1/PB5 on the MCU
  • Y axis UART to pin 37/PA0 on the MCU
  • Z(E Driver) axis UART to pin 3/PB7 on the MCU

Bear in mind I only have TMC2208s on X,Y and Z (using the E driver), if you plan on doing this to your Z axis as well you will need to cut the circled un-cut trace to another spare pin, I suspect that PB6/PA2 will work fine – PA2 is the bottom pin on the EXT-A2 connector.

I tried PB6 for my Y axis at first but couldnt get it to work, it seems that it was the connection to the via for the TMC2208 UART pin that was the issue – I might have been a bit too vigorous when scraping the solder mask from the trace and broke the via. I manage to get the connection working by poking a piece of wire down the via before soldering it, which seemed to work – this was after moving the other end of the connection from PB6 to PA0). I had the board in the printer, connected and working, so I left it as is – if i have the board out in the future i’ll move the PA0 connection back to PB6 and update this post.

To get this working with klipper you’ll just need to add the following to your printer.cfg (might need to change the x,y,z uart_pin settings if you use other pins on the mcu)

[tmc2208 stepper_x]
uart_pin: PB5
microsteps: 16
run_current: 0.800
hold_current: 0.500
stealthchop_threshold: 250

[tmc2208 stepper_y]
uart_pin: PA0
microsteps: 16
run_current: 0.800
hold_current: 0.500
stealthchop_threshold: 250

[tmc2208 stepper_z]
uart_pin: PB7
microsteps: 16
run_current: 0.650
hold_current: 0.450
stealthchop_threshold: 30

Another way of possibly doing this in klipper would to make the trace cuts for the PDN_UART connections, connect these traces to an arduino and add an extra mcu entry to the printer.cfg, like in sample-multi-mcu.cfg in the klipper repo on github, you’ll then just need to prefix the pin names with the name of the mcu in your printer.cfg. I had a quick chat with the people on the klipper discord who confirmed this should work fine and would retain the use of the sd card.

3d printing

First printing issues resolved!

After printing a couple of calibration pieces and a fan guard i thought i had the printer ready to print, but i noticed i was getting ‘elephant’s foot’, what looked like under extrusion and top scoring. After re-tramming the bed and leaving a slightly larger gap, of 0.25mm, than the suggested ‘1 sheet of paper’ – my paper measured 0.10mm I printed one last calibration print – which was five 20mm squares. Each square i upped the feed rate 5% and I found that the squares printing at 120% and 125% were close to perfect – no gaps and each line was securely attached to the previous.

Following this i printed an X-Axis cable guide with these new settings and there’s no more elephants foot and top scoring is drastically reduced – I might try the ironing settings in cura.

Links to guide to help with print issues:


Ender 3 Firmware update – TH3D

Edit: After completing the steps below, I found the following video with a USBASP that makes this process simpler (typical):

Original Post:

I decided to flash the TH3d firmware to my new Ender 3 – mainly for the thermal runaway protection and bed mesh levelling.

I used the following videos to flash the firmware, with a couple of changes:

I used a USBASP to flash the bootloader instead of an Arduino Uno, as that’s all i had to hand. Just ignore the steps where the ArduinoIsp sketch is flashed to the Arduino and connect the USBASP to the Ender 3 via the following pinouts:

USBASP – looking into connector with notch at the top:


Ender 3 – looking at the board from the front of the printer:


Leave VCC Disconnected as the USBASP doesnt provide enough power to power the board.

Turn on the Ender 3, select tools -> programmer -> usbasp in arduino, then click tools -> burn bootloader.

The bootloader is now burned onto the chip. Now this has been done TH3D can be compiled and uploaded via the Ender 3’s usb port.

Turn off the Ender 3, unplug the USBASP and plug in the Ender 3’s usb cable,  in Arduino select tools -> programmer -> AVRISP mkII and select the Ender 3’s com port, set the board to sanguino, compile and upload!

3d printing

Creality Ender 3

I decided to buy myself an early christmas present and bought an Ender 3. I found that the build process was mainly straight forward but tricky when it came to squaring the x axis against the z axis – I found using the top 2020 extrusion as a guide to get both sides level was helpful.

I think the first three things i will print will be the Z axis motor spacer from here as the alignment out of the box isn’t ideal, the fan guard from here and the filament guide from here.

Here’s some of the videos i used to build and level it.

Raspberry Pi


I came across a great piece of software for the Raspberry Pi the other day called PiKrellCam (not sure why its took me this long to find, it’s been around since 2015!). It allows you to create a motion capturing cctv system out of a raspberry pi and camera connected via CSI. The motion detection is pretty good and more advanced than most available on domestic cctv systems and its FREE!!

It even supports the use of servos for pan and tilt!

I recommend using atleast a Raspberry Pi 2 with the v2 8mp camera – the NoIR camera is a good choice to pair with an infrared illuminator for night time capture.

I’ve currently got mine to email me a thumbnail of the motion that triggered the capture.

Code Snippets

AutoHotkey PuTTY restart session shortcut

A handy AutoHotkey snippet to restart a PuTTY session after it gets disconnected, press Ctrl + R in the session to restart.

More ids for putty shortcuts can be found here.

if WinActive("ahk_class PuTTY") {
^r:: ; ^r = Ctrl + R
TrayTip, PuTTY, Restarting Session...
WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
WinGetClass class, ahk_id %hwnd%
;0x112 = SYS_COMMAND, 0x40 = IDM_RESTART
PostMessage, 0x112, 0x40,,, ahk_id %hwnd%



Hi, I’m Simon – a father, cyclist, maker, VW Camper enthusiast and software developer in the UK.

This is just a place for me to post thoughts, ideas, snippets and links to interesting things i find.