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.