3D Printer Hardware Upgrades


Table of contents
- Intro
- Electronics Case Design
- Control Board
- Serial
- Mini UPS
- Display
- Smart Filament Sensor
- Relay Mount
- 3D Touch
- Hard Silicone Bed Mounts
- Drylin Bearings
- Neopixel LED Strip
- Optical Endstops
- 0.9 Degree Motors
- PEI Flex Plate
- BMG Direct Drive
Intro
This page contains information about how I upgraded my Anet A8 to add various hardware mods including swapping out the control board to a BigTreeTech SKR 1.4.
Electronics Case Design

The case was designed to hold the BigTreeTech Mini UPS V2.0 along with 2 large BIQU116-A2 Mosfets, one for the Heated Bed and one for the Hotend. I have made a few updates to the design to allow access to the USB port and to fit the TF Cloud V1.0. The design also includes a pocket to house the BTT EEPROM module however, I have not yet printed this so there may be some issues with sizes & support of the holes in the back, and the size of the pocket for the EEPROM module.

| Item | Quantity | Material | Size | Weight | Cost | Printed | Notes | 
|---|---|---|---|---|---|---|---|
| Anet A8 Electronics Case (No Access Holes) | 1 | PrimaValue PLA (Dark Grey) | 25.74m | 76.77g | £1.52 | ✔️ | |
| Anet A8 Electronics Case (With Access Holes) | 1 | PrimaValue PLA (Dark Grey) | ❌ | ||||
| Anet A8 Electronics Case Top | 1 | PrimaValue PLA (Dark Grey) | 24.22m | 72.24g | £1.43 | ✔️ | 
Note
Adapted from Anet A8 Electronics Case by FqFKrazz

Control Board
Wiring
In addition to upgrading the heated bed cables as part of the safety upgrades I also have replaced the original 12V wiring with thicker 18AWG cables.

I made adapter cables by following the guide at Caggius Interweb blog so that I did not need to repin the existing cables if i ever need to go back to using the original Anet A8 control board.
Firmware

The full configured firmware to run the printer and all of the mods I have made is available on my Marlin Github repository.
Info
In Marlin/Configuration.h Update:
#define STRING_CONFIG_H_AUTHOR "(Mike Thomas, Anet A8 SKR 1.4)"
Create the following files to add the BigTreeTech logo on boot and display Anet A8 on the status screen:
In Marlin/Configuration_adv.h Enable:
#define SHOW_CUSTOM_BOOTSCREEN
#define CUSTOM_STATUS_SCREEN_IMAGE
Machine
In Marlin/Configuration.h Update:
#define MOTHERBOARD BOARD_BTT_SKR_V1_4
Serial
In Marlin/Configuration.h Update:
#define SERIAL_PORT_2 -1      // USB emulated serial port
#define SERIAL_PORT_3 3       // BTT ESP-01 Wifi Module
#define CUSTOM_MACHINE_NAME "Anet A8 SKR 1.4"
Stepper Drivers
In Marlin/Configuration.h Update:
#define X_DRIVER_TYPE  TMC2209
#define Y_DRIVER_TYPE  TMC2209
#define Z_DRIVER_TYPE  TMC2209
#define Z2_DRIVER_TYPE TMC2209
#define E0_DRIVER_TYPE TMC2209
EEPROM
BigTreeTech EEPROM Module V1.0
The module needs to be set up for Mode 2 on the SKR 1.4. This is done by setting the DIP Switches to:
- On (Down)
- On (Down)
- Off (Up)
- Off (Up)
In Marlin/Configuration.h Enable:
#define EEPROM_SETTINGS
In Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h Enable:
#define I2C_EEPROM
Mini UPS
Firmware
In Marlin/Configuration.h Enable:
#define SDSUPPORT
In Marlin/Configuration_adv.h Update:
#define POWER_LOSS_RECOVERY
#if ENABLED(POWER_LOSS_RECOVERY)
  #define PLR_ENABLED_DEFAULT   true  // Power Loss Recovery enabled by default. (Set with 'M413 Sn' & M500)
  #define BACKUP_POWER_SUPPLY         // Backup power / UPS to move the steppers on power loss
  #define POWER_LOSS_ZRAISE         2 // (mm) Z axis raise on resume (on power loss with UPS)
  #define POWER_LOSS_PIN        P1_25 // Pin to detect power loss. Set to -1 to disable default pin on boards without module.
  #define POWER_LOSS_STATE       HIGH // State of pin indicating power loss
  #define POWER_LOSS_PULLUP           // Set pullup / pulldown as appropriate for your sensor
  //#define POWER_LOSS_PULLDOWN
  #define POWER_LOSS_PURGE_LEN     10 // (mm) Length of filament to purge on resume
  #define POWER_LOSS_RETRACT_LEN   10 // (mm) Length of filament to retract on fail. Requires backup power.
Display

TFT24 Case
| Item | Quantity | Material | Size | Weight | Cost | Printed | Notes | 
|---|---|---|---|---|---|---|---|
| TFT24_AnetA8_Base | 1 | PrimaValue PLA (Dark Grey) | 16.47m | 49.11g | £0.97 | ✔️ | This is a mod by joeleonardo | 
| TFT24_AnetA8_Cover | 1 | PrimaValue PLA (Dark Grey) | 3.99m | 11.90g | £0.24 | ✔️ | This is a mod by joeleonardo | 
I used this design to locate the new display in the same place as the original, to cover up the holes at the top of the frame. I may replace this at a later date with a blanking plate and relocate the screen somewhere else as this one blocks the gantry at about a height of 200mm and therefore I have lost approximately 40mm of Z travel.
Firmware
I mainly use the screen in Marlin Mode.
In Marlin/Configuration.h Enable:
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
However I have also configured the Touch Mode's Marlin Depencencies in case I ever want to use it.
General options which MUST be always activated
In Marlin/Configuration.h Enable:
#define EEPROM_SETTINGS
In Marlin/Configuration_adv.h Enable:
#define BABYSTEPPING
#define AUTO_REPORT_TEMPERATURES
#define AUTO_REPORT_POSITION
#define EXTENDED_CAPABILITIES_REPORT
#if ENABLED(EXTENDED_CAPABILITIES_REPORT)
  #define M115_GEOMETRY_REPORT
#define M114_DETAIL
#define REPORT_FAN_CHANGE
Options to support printing from onboard media
In Marlin/Configuration.h Enable:
#define SDSUPPORT
In Marlin/Configuration_adv.h Enable:
#define LONG_FILENAME_HOST_SUPPORT
#define AUTO_REPORT_SD_STATUS
#define SDCARD_CONNECTION ONBOARD
Options to support dialog with host
In Marlin/Configuration_adv.h Enable:
#define EMERGENCY_PARSER
#define SERIAL_FLOAT_PRECISION 4
#define HOST_ACTION_COMMANDS
#if ENABLED(HOST_ACTION_COMMANDS)
  //#define HOST_PAUSE_M76                // Tell the host to pause in response to M76
  #define HOST_PROMPT_SUPPORT             // Initiate host prompts to get user feedback
  #if ENABLED(HOST_PROMPT_SUPPORT)
    #define HOST_STATUS_NOTIFICATIONS     // Send some status messages to the host as notifications
Options to support M73 with host
In Marlin/Configuration_adv.h Enable:
#define SET_PROGRESS_MANUALLY
#define M73_REPORT
Options to support ADVANCED_OK with host
In Marlin/Configuration_adv.h Enable:
#define ADVANCED_OK
Options to support M600 with host & (Un)Load menu
In Marlin/Configuration.h Enable:
#define NOZZLE_PARK_FEATURE
In Marlin/Configuration_adv.h Enable:
#define ADVANCED_PAUSE_FEATURE
#define PARK_HEAD_ON_PAUSE
#define FILAMENT_LOAD_UNLOAD_GCODES
Options to fully support Bed Leveling menu
In Marlin/Configuration.h Enable:
#define Z_MIN_PROBE_REPEATABILITY_TEST
#define G26_MESH_VALIDATION
In Marlin/Configuration_adv.h Enable:
#define Z_STEPPER_AUTO_ALIGN
Smart Filament Sensor
BigTreeTech Smart Filament Sensor V1.0
| Item | Quantity | Material | Size | Weight | Cost | Printed | Notes | 
|---|---|---|---|---|---|---|---|
| Mount_BTT_smart_filament_sensor_V1 | 1 | PrimaValue PLA (Dark Grey) | 4.41m | 13.14g | £0.26 | ✔️ | This is a mod by StonehengeFR | 
| Support_Smart_Filament_Sensor_without_arm_v1 | 1 | PrimaValue PLA (Dark Grey) | 3.75m | 11.19g | £0.22 | ✔️ | This is a mod by StonehengeFR | 
I used the original design with the arms as the updated design without the arms was too loose and would not hold the sensor in an upright position.

Firmware
In Marlin/Configuration.h Update:
#define FILAMENT_RUNOUT_SENSOR
#define FILAMENT_RUNOUT_DISTANCE_MM 200
#define FILAMENT_MOTION_SENSOR
Relay Mount
| Item | Quantity | Material | Size | Weight | Cost | Printed | Notes | 
|---|---|---|---|---|---|---|---|
| Anet A8 Relay Mount | 1 | PrimaValue PLA (Dark Grey) | 23.75m | 70.84g | £1.40 | ✔️ | 
Note
Adapted from PSU Cover Remix by MakerDan55
I updated the PSU Cover to hold the relay which allows me to safely turn off the printer when a print has finished and to save electricity.

Firmware
In Marlin/Configuration.h Update:
#define PSU_CONTROL
#define PSU_NAME "Power Supply"
#define PS_OFF_SOUND
#define PSU_ACTIVE_STATE HIGH
#define POWER_OFF_WAIT_FOR_COOLDOWN
#define AUTO_POWER_E_TEMP          50
3D Touch
My inductive probe did not sense the bed underneath the borosilicate glass plate I purchased to make my prints have a smoother appearance on the first layer so I installed a 3D Touch sensor in place of it to physically touch the bed and get more accurate bed mesh.
I used Anet A8 BL Touch Mount by spencerx4 to mount the 3D Touch to the printer.
Hard Silicone Bed Mounts

The stock bed springs can vibrate at high accelerations and cause ripples in the prints. I have replaced them with hard silicone mounts to help stop these.
Drylin Bearings

To make the movement of the printer smoother I decided to replace the stock metal linear bearings with Drylin ones.
Neopixel LED Strip

I followed this guide to add 20 Neopixel LED lights to the bottom of the X gantry. This also required the DCDC Power adapter to allow higher power draw from the main board.
Firmware
In Marlin/Configuration.h Update:
#define NEOPIXEL_LED
#define NEOPIXEL_TYPE          NEO_GRB
#define NEOPIXEL_PIXELS              20
#define NEOPIXEL_BRIGHTNESS         255
#define NEOPIXEL_STARTUP_TEST
Optical Endstops

The stock clicky switches are only rated to a certain number of presses before they fail. I wanted to try out optical endstops to replace the clicky switches to stop any extra stresses of the gantry constantly hitting the frame.
0.9 Degree Motors

Since tuning the printer to remove as many imperfections in my prints as possible, I started to notice Vertical Fine Artifacts in my prints:

This page on the Prusa Printer Forums suggests replacing the stock 1.8 degree motors with higher resolution 0.9 degree stepper motors.
I have mainly been printing with Matt ABS filament since fitting the motors and therefore have not really seen any improvements in print quality. I will have to print with some glossy black PETG to see some like for like results before recommending the upgrade.
PEI Flex Plate
When I first started printing with this machine I printed directly on the bed, covered in painters masking tape.
After having to replace the tape after pretty much every print I purchased a piece of tempered glass to print on, however when I added an inductive bed level sensor the sensor could not sense the metal through the glass pane so I switched to using cheap buildtack clone build surfaces.

I really liked the glossy look of printing on the glass so after I added a 3D Touch sensor I moved back to printing on the glass build surface. To get the prints to adhere to the glass, I had to use glue stick or Magigoo and wash the glass clean after a few prints.

More modern printers have moved over to using magnetic PEI Flex plates. The PEI has excellent print adhesion without adding anything extra and as the flex plate is removable, once the bed has cooled you can easilly pop off the print by slightly flexing the plate.

BMG Direct Drive
I have purchased parts to install the ANET A8 E3DV6 BMG Direct Drive X Carriage, the adapter plate should be a direct bolt on to the X Carriage of the Anet A8. This was chosen as the parts that are required for this are the exact same parts that are required to build the Voron Afterburner.
Motion
| Item | Quantity | Received | Notes | 
|---|---|---|---|
| BMG Extruder Kit | 1 | 1 | 
Electronics
| Item | Quantity | Received | Notes | 
|---|---|---|---|
| 3D Touch | 1 | 1 | |
| 50x50x15 Centrifugal Fan (12V) | 1 | 1 | |
| 40x40x10 Axial Fan (12V) | 1 | 1 | |
| E3D V6 Bowden Hotend Kit (12V) | 1 | 1 | |
| NEMA17 Motor | 1 | 1 | Using stock Anet A8 Extruder Motor | 
Printed Parts
| Item | Quantity | Material | Printed | Notes | 
|---|---|---|---|---|
| StepperBMG_holder | 1 | PrimaValue ABS (Dark Grey) | ❌ | Version with Cable Chain Mount | 
| BLtouch_support | 1 | PrimaValue ABS (Dark Grey) | ❌ | |
| Fan_holder | 1 | PrimaValue ABS (Dark Grey) | ❌ | |
| Baseplate_BMG | 1 | PrimaValue ABS (Dark Grey) | ❌ | |
| Mistral_V2.1a_Leo_N | 1 | PrimaValue ABS (Dark Grey) | ❌ | |
| E3D_Fan_Duct | 1 | PrimaValue ABS (Dark Grey) | ❌ | 
