Wanhao i3 32bit upgrade

Maker Select 32Bit Upgrade

I decided to make the jump to 32bit printing. I upgraded from a stock Melzi on a Monoprice Maker Select v2.1 (a rebranded Wanhao i3, Cocoon Create). I had no real reason to other than I wanted something to do and I figured this would be a good project, and as always I’m looking for better prints. So why not? I got a BIGTREETECH SKR 1.3 and five (5) TMC2208 v3.0 UART ready steppers. I pulled the trigger and went all in head first after a single night of research. To be honest though when I started this journey there was not a lot of info for doing this just yet, the SKR was still pretty new. What info I have found came mostly from some facebook groups (BIGTREETECH) I am in and a few YouTube videos. But as I type this there is now tons of info available, just most of seems to be directed towards the Ender printers, yay.

 

Things to note up front:

This guide is a long one, I would read this all the way through first it’ll save you a headache. From what I read the TMC2208s don’t support Linear Advance while in stealthchop. It must be disabled and used as spreadcycle over UART instead if you want Linear Advance. The other option is to use a different driver than a 2208 for the extruder. This would get around the Linear Advance issue. It may also be fixed in Marlin further down the line, who knows.

Getting everything setup including the new programming environment was a pain in the ass, hopefully this “guide” will alleviate some of the pain.

I recommend that you DO NOT buy the TFT35 or any TFT (except maybe the new dual mode TFTs). The dual screens can switch between TFT mode and 12864 LCD mode. The TFTs do not have all the functionality of a regular LCD screen. I ordered the TFT35 at first and after two days I sent it back and got a LCD12864 Graphical display instead. Thats the route I am gonna go. The stock screen on a Wanhao i3 is not compatible with the SKR as far as I have been able to find, unless you rewire the plug. The TFT35 was $32 and the LCD12864 was only $12. Heres a good video showing the TFT35.

 

This is what you will need (what I used)

  • (1) BIGTREETECH SKR 1.3 (the 32bit main board)
  • (5) BIGTREETECH TMC2208 3.0 UART Stepper drivers (or 4 drivers and a Z splitter)
  • (1) TFT32 LCD screen (DON’T do it, get a LCD12864 instead!)
  • (1) LCD12864 Graphical LCD Screen
  • (1) Type A USB cable (no more micro USB crap yay!)
  • (1) ANTLABS BLTouch (plus extension cable, or extra wire they send stuff to make cables. I am using a v3 BLTouch.)
  • (1) JST-HX connection kit and crimper (you will need this for the extruder stepper and the part fan, as well as any plugs you may break off cause the wiring is pretty fragile on some of them)
  • (1) Your power supply (12v or 24v – the MS 2.1 is 12v by default)
  • Platformio installed, no more Arduino IDE (Atom or VSCode with the Platformio extension. I use VSCode on MacOS)
  • If not using VSCode then you need to install Clangd to build the firmware (just use VSCode its much easier).
  • Some sort of of case or mount and cooling solution for the SKR 1.3

Steps you will need to take

  1. Install an editor and Platformio
  2. Configure and build Marlin 2.0 (config.h, config_adv.h)
  3. Flashing the SKR 1.3
  4. Installing the steppers and checking to see if they’re working
  5. Installing the SKR 1.3 to your printer
  6. BLTouch
  7. Test print!

 

Install Platformio

You will need Platformio installed along with an editor. Since the board is now 32bit we can no longer use the Arduino IDE like we did with Marlin 1.1.x. I use Atom on my Mac as my default editor so it made sense to stick with that and get Platformio. There are plenty of guides on how to install Platformio and Atom so I won’t explain that here, but you will also need Clangd installed if you are using Atom. After a few weeks of using Atom/Platformio I started to run into issues with it uploading the firmware as well as Atoms load times were insanely high. So I switched to VSCode and I have been chugging along happily ever since. So I’d recommend using VSCode over Atom, much easier. Atom will even give you a popup reminder to try VSCode for Platformio, it has greater support and more features I believe.

But if you are on a Mac and you do want to use Atom this is what I had to do:

Install Clangd

Homebrew can install clangd along with LLVM on a Mac (this is what I used):

And done.

If you don’t want to use Homebrew, you can download the a binary release of LLVM from releases.llvm.org. Alongside bin/clangd you will need at least lib/clang/*/include:

 

Download and configure Marlin 2.0

As of this writing Marlin 2.0 is still in bugfix mode. Visit Marlin 2.0 at Github.

Open up a project with Platformio and select the folder of Marlin 2.0 that contains the platformio.ini file. Open the platformio.ini file, we need to edit a line to include the SKR processor. Once open we need to change the line env_defaults line. Change it to say env_default = LPC1768 . Save and close. Now we can open the configuration.h and configuration_adv.h files, those are the only two that need to be edited. We are going to be uncommenting sections to enable the features. To uncomment something remove the two slashes  //  at the beginning of the line.

For example:

 

 

Configuration.h

Some guides/people say to remove one of the serial ports, but I have not had any issues with both enabled.

I lowered the baud rate.

#define BAUDRATE 115200

You will need to specify the motherboard type.

#define MOTHERBOARD BOARD_BIGTREE_SKR_V1_3

You can change the machine name to anything you want, this will display on the LCD screen.

#define CUSTOM_MACHINE_NAME "SKR v1.3 i3"

We have 1 extruder (usually) and the filament is 1.75mm

We don’t have a fancy power supply. If you are not using the stock supply and have an ATX psu then you will need to change it otherwise, 0.

#define POWER_SUPPLY 0

We need to specify the type of thermistors we are using. If you are using the stock Maker Select ones then use these values.

I cannot remember if I had to change the max bed temp or not?

#define BED_MAXTEMP 160

You want to make sure you enable PID tuning so we can tune our bed and nozzle temps nicely, uncomment the line. If they are left commented out the Marlin will use bang-bang instead.

And for the bed.

Make sure we don’t extrude any filament unless we hit a certain temperature.

#define EXTRUDE_MINTEMP 180

Prevent long extrusions, change this higher if you have a bowden. You probably know already.

#define EXTRUDE_MAXLENGTH 200

Make sure you have thermal runaway enabled. Make sure these are uncommented.

Specify which endstops we are using.

Specify if the endstops are inverted or not.

Now we need to specify which stepper drivers we are using and on what axis. I am using TMC2208 drivers for all axis and extruder. I am also using the E1 output as my Z2 stepper instead of using a slitter cable.
Set the steps per MM, max feed rate, acceleration and default acceleration. I set the max acceleration values here, but I lower it later via the LCD or Octoprint. I usually lower it to about 1000, or 800 if you want to really get rid of the ghosting/ringing.

Set the default jerk settings, they have been lowered from stock for better prints.
enable Z min endstop.

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

If you are using a BLTouch like I am then you need to uncomment this line, otherwise leave it commented out.

#define BLTOUCH

For a v3 BLTouch you need to enable 5v mode.

#define BLTOUCH_SET_5V_MODE

If using a BLTouch you will also need to set you probe offset values here. If you are using the same BLTouch adjustable mount I am you can probably get away with the same offset values I am using, except you will need to find your own Z offset most likely.

Let’s increase the probing travel speed, we don’t want this taking 5 minutes…

#define XY_PROBE_SPEED 10000

I adjusted the offset range, I found it was recommended in a video I saw. There is no reason we should need an offset of -20mm. But you could leave it.

Let’s slow down the delay on the probe to speed things up.

#define DELAY_BEFORE_PROBING 100

All of my steppers are LOW enable pins.

We need to invert the stepper direction on the axis for 2208s.

Same for the extruder.

Direction of the endstops.

Set the bed size, we have 200×200.

The default Z max height is stated as 180mm. But, if you go this high without turning your extruder stepper so the wires point the back then the stepper cable and jack will hit and rub against the top gantry. So either turn your extruder stepper or lower the max height to 175mm.

#define Z_MAX_POS 175

If you are using the BLTouch you need to set what kind of leveling you are going to use. At the moment I am using bilinear leveling. But I may change to unified bed leveling (UBL) in the future. I am reading that it is better.

Uncomment this if using a BLTouch.

#define RESTORE_LEVELING_AFTER_G28

If using a BLTouch we need to set the size of the bed mesh. 3×3, 5×5, etc… The more the better but don’t go crazy.

#define GRID_MAX_POINTS_X 5

Again, if using a BLT (LOL) we want to be able to adjust it from the LCD. We also want to enable safe homing. This will home Z in the center of the bed for safety.

We can change the default preheat options to our liking here. Set them to what you usually print with.

I have nozzle park enabled for using the M600 filament change command. This also requires some configuration_adv.h changes, but we’re not there yet. Leave nozzle park disabled if you don’t care about M600.

#define NOZZLE_PARK_FEATURE

You can change the style of the LCD to that of the Prusa machines if you wish, or leave it.

#define LCD_INFO_SCREEN_STYLE 0

If we are using a LCD or TFT screen with a SD card slot we need to enable support for it.

#define SDSUPPORT

I found I had to reverse the encoder direction for my screen.

#define REVERSE_ENCODER_DIRECTION

I like to be able to home my axis individually if I want to from the LCD, enable this.

#define INDIVIDUAL_AXIS_HOMING_MENU

I am using a standard 12864 LCD so I needed to enable support for it.

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

And last but not least for the config.h file, if you are using a BLTouch or anything that requires servo control you need to enable the servo pin.

#define NUM_SERVOS 1

Thats it for configuration.h!

 

Configuration_adv.h

If you are going to use dual Z steppers like I am you need to tell Marlin that we are.

#define Z_DUAL_STEPPER_DRIVERS

Let’s enable Babystepping on our Z axis so we can get that perfect first layer.

#define BABYSTEPPING

For the M600 filament change we also need to enable the pause feature. If you don’t care about M600 leave this alone.

#define ADVANCED_PAUSE_FEATURE

Time to configure the TMC2208s. We need to set the default current, microsteps and rsense values. From my digging around FB groups and such these are the values I have found that are most used/recommended. We only need to set the values for the axis we are going to use (I only listed the ones I am using). 760mA, 16 microsteps (we have 256 interpolation enabled) and 0.11 rsense for axis X, Y, and Z. E needs to be a tad higher I have found (in my research) at 900mA, 16 microsteps and 0.11 rsense. These values are the defaults, they are configurable via a terminal window and some commands as well as the LCD menu.

If you are using Linear Advance on the extruder with TMC2208s it is advised (at this time) to not use stealhchop. It can also be disabled via the terminal or TMC LCD menu options. You may comment this out here or deal with it via the LCD menu like I did.

//#define STEALTHCHOP_E

If you are using TMC2208s with UART lets enable the driver status. Uncomment the line.

#define MONITOR_DRIVER_STATUS

We can also enable the hybrid threshold between stealthchop and spreadcycle. I am using the stock values at the moment. Uncomment the line.

#define HYBRID_THRESHOLD

If using TMC drivers enable the debug feature for the M122 command, very handy.

#define TMC_DEBUG

And thats it for configuration_adv.h!

 

Flashing the SKR

First you need to build the firmware. Once you have made all of your changes you will need to build. The IDE you are using should give you an output window to display the build status. If all goes well go and head and upload the firmware. If it fails you will need to hunt down the issue. The status window should give you an error to hunt down if it fails.

There are two ways to flash the SKR 1.3. Either plug the board directly into your computer after moving the jumper from INT/5V to 5V/USB. It will then show up and now you can upload via VSCode/Atom and it should hit the SKR. The other way is to take the SD card out of the SKR and insert it into the computer. Upload the same way via VSCode/Atom and it will hit the card instead. Once flashed it is recommended to press the reset button once it first boots. You should then be good to go.

 

Steppers & Test

So steppers, so many kinds. I am using five TMC2208 v3.0 UART drivers. They came pre-soldered for UART. I got them from BIGTREETECH, same place that makes the board. AliExpress or Amazon under Kingprint. Otherwise if you have a different driver you will need to find directions somewhere on using them with the SKR and how to set them up. I have been assuming you’re using TMC2208s. If you do have 2208s but they are a different version or non UART (they are all UART capable they are just not pre-soldered so they’re not called UART) then you will need to do some soldering. This instructable has examples on the soldering required, if needed.

Now you need to set the jumpers for UART on the 2208s. Remove all the jumpers from the board except on the INT/5V pins.

2208 Mode on the SKR 1.3Official pinout diagram from BIGTREETECHs Github

Time to install and test the steppers. Go with just one first. Install one stepper on the board, make sure you install it correctly. They can go in both way but one way lets the magic smoke out. Usually they are colored on one side. Match the colored side of the stepper pins with the colored set on the SKR (usually red). One thing to note is that the steppers will not power on via USB power. The board needs 12v or 24v DC power to enable the steppers. You can connect both, the USB to a computer and 12v/24v power with no problems if you wish. Or you can connect Octoprint on a Raspberry Pi no problems as well. Once the board is booted up you can send a M122 command via a terminal in either Pronterface or Octoprint. This command should spit back a whole bunch of crap. You want to scroll to the bottom and look for “Driver Registers”. This will tell you the overall status of the stepper. If it looks like this (see image) for your stepper that you have installed you can stick the rest of the sticks in.

M122 output

Plug one of the steppers in, X axis for example and power on the board. See if the stepper moves in the direction you are telling it to. If it does you are good to go, proceed with the other steppers. If you notice your steppers are backwards, going in the wrong direction, you can change #define INVERT_X_DIR or #define INVERT_Y_DIR etc, instead of rewiring the stepper harness. To change the direction of a stepper change #define INVERT_Y_DIR  (or X, Z or E) between true and false. If it is homing in the wrong direction change #define Y_HOME_DIR  1 or -1.

 

Installing the SKR

Once you have a stepper or two moving correctly plug them all in and wire up the board. You will need a JST-XH plug kit for the extruder and cooling part fan. The stock Maker Select extruder is on a green screw terminal plug. It needs to be moved over to a JST-XH plug. Same with the part fan, make sure you pay attention to the polarity when you make the plug.

The Green/Orange connectors need to be JST-XH plugs
The Green/Orange connectors need to be JST-XH plugs

The case fan and cooling block fan still connect directly to the power supply. You could take the block fan and connect it to the 12/24v plug next to the steppers I am told but I have not tried it. There are all kinds of neat options for fans in Marlin 2, take a look sometime.

Now the biggest issue with the SKR 1.3 upgrade on a Maker Select is the control box. There are options on Thingiverse for mounting the SKR inside the original case. But they all require you to either sacrifice the USB cable or purchase a new right angled USB plug. Getting a new USB plug and keeping the case is probably by far the easiest option but it is not the route I went. Also doesn’t work if you upgrade the screen to a 12864 or a TFT. I modified an existing 3d model to match my needs. I printed a new case for a SKR 1.3 with an 80mm fan. If that doesn’t work for you search Thingiverse for SKR_13 and SKR13. The MKS Gen L also has the same footprint as the SKR 1.3 so those mounts may work as well. I also printed a case for the 12864 LCD screen. Because I ditched the case I also needed some kind of cover for the power supply that came with the Maker Select. So I remixed an existing psu cover. I also needed a bracket so I remixed and printed two brackets. This is for a Sompom 12v 20A power supply.

 

 

SKR V1.3 Wiring diagramOfficial diagram from BIGTREETECH Github

 

BLTouch

If your BLTouch is in alarm mode when it powers up (blinking), it is most likely due to failing a self test. Either the Z axis is too low when you powered on the printer and there is not enough room to deploy the probe. Or your wiring is wrong, this is what happened to me. The BLTouch wiring must be changed to match the SKRs pinout (which is not standard). I had to flip flop the BLTouches wiring to be RED-BROWN-ORANGE. The SKRs pinout is 5v-Gnd-Signal. After that (and having room to deploy) everything is good.

 

After you finally get everything put together and you are ready for a test print start slow, very slow, and have the gantry nice and high and in the middle. Give room for error and ready that power button! You want to make sure the probe will stow itself when you touch it and the Z axis stops moving. If it does you are probably ok, I’d test it a few times. If it doesn’t stop the Z axis from moving when you touch the probe you’re probably gonna have to kill power. It is most likely the endstop plug of the BLT. Switch it around and try again.

Now you have new things to add to OctoPrint, like the BLTouch Control and Bed Level Visualization plugins.

 

Test Print!

Go on and get to printing with your new 32bit SKR 1.3!

 

Here is a copy of my current Marlin 2.0 bugfix configuration.h and configuration_adv.h files. They are not the same as above, it is NOT a drop in replacement. But it should help cut down on the editing/typing. If you choose to download the files I still highly recommend you dig through it and compare it to what I have typed to double check the values for your machine. There may be some things enabled that are not mentioned here.

Download my copy of Marlin 2.0 bugfix config files

Download my updated copy of Marlin 2.0 bugfix (lowered accelerations, enabled babystepping, and added firmware.bin)

 

This was how I did it on my printer, I take no responsibility for anything that may happen to yours. Try this at your own risk.

 

Here is a list of some commands that I have found to be useful, here is the full list (I’d recommend skimming through it)

  • G28 – Home all
  • G29 – Start auto bed leveling
  • M119 – Checks endstops and reports open/triggered
  • M122 –  Spits out TMC stepper diagnostics, this is super helpful
  • M280 P0 S10 – BLTouch probe down
  • M280 P0 S90 – BLTouch probe up
  • M280 P0 S160 – clear BLTouch alarm (flashing red)
  • M290 Z# – Replace # with a value, for example 0.25 would move up 0.25mm on the Z axis
  • M420 – Displays on/off for ABL and fade height
  • M420 Z# – Replace # with a positive value, sets the fade height.
  • M420 V – Displays mesh details
  • M500 – Store settings in eeprom
  • M501 – Load settings from eeprom
  • M502 – Restores board defaults (from firmware)
  • M851 – Will display current Z offset
  • M851 Z# – Replace # with a negative number, this is how you set your Z offset
  • M906 – Reports the current on the steppers
  • M907 – Sets the current on the steppers

 

 

EDITED 08/07/2019: Added TMC2208 configuration info and some basic gcode commands.
EDITED 08/16/2019: Added a new copy to download and updated the guide to include babystepping, lowered accelerations, esteps.

 

SKR 1.3 with Marlin 2.0 bugfix on a Wanhao i3 and a BLTouch with a LCD12864 screen.

Some helpful links

https://github.com/bigtreetech/BIGTREETECH-SKR-V1.3

BIGTREETECH video on programming the SKR and BLTouch (quick video only, no dialog)

SKR 1.3  Setup guide

SKR 1.3 and BLTouch Setup

Instructable SKR and TMC2208s

The TMC2208 in UART mode

Tutorial on the TMC2208 in standalone mode

Another good video on TMC2208s

How to use Platformio

Unboxing the SKR 1.3

SKR 1.3 install with TMC2208s

SKR 1.3 Wanhao case mounting bracket

BigTreeTech Youtube on installing/configuring firmware for SKR 1.3

Configuring SKR 1.3 and TMC2130s

Melzi specifics for i3

Case for a MKS Gen L (same dimensions as the SKR 1.3?) and a 80mm fan

Another similar case for MKS Gen L and 80mm fan

Adjustable mount for the BLtouch and Wanhao i3 (requires 2 8mm M3 screws and nuts)

BLTouch advanced guide

BLT tips n tricks

Calibrate the Z offset

Babystepping

4 Comments

  1. Fredrik
    September 2, 2019 / 8:57 pm

    Nice guide. Are you planning to add photos of the wiring and such?

    • Justin
      Author
      September 12, 2019 / 10:55 pm

      Thanks for the reminder, I did have a couple of extra pictures to add.

  2. Henrik
    October 28, 2019 / 10:24 am

    Thanks for this very detailed guide. Now im with less money in my wallet, but an old Wanhao with a brand new SKR board 😀
    For those who struggles to connect the stock wanhao i3 1.2 LCD display. I got it working by connecting the following pins:
    pin 1 LCD CS –> 1.19 EXP 1
    pin 2 Encoder B –> 3.25 EXP 2
    pin 3 LCD Data –> 1.18 EXP 1
    Pin 4 Encoder A–> 3.26 EXP 2
    pin 5 LCD SCLK –> 1.20 EXP 1
    pin 6 Encoder Button –> 0.28 EXP 1
    pin 7 ESTOP –> I dont use that one- so did not try to find it
    pin 8 Beeper –> 1.30 EXP 1
    Pin 9 5v –> 5V EXP 1
    pin 10 GND –> GND EXP 1

    LCD pins should like this:
    1 2
    3 4
    5 6
    7 8
    9 10

    Once again, thanks for this guide!

    • Justin
      Author
      October 29, 2019 / 1:27 pm

      Awesome, thanks for the LCD pinout!

Leave a Reply

%d bloggers like this: