Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FR] Creality Ender 3 V2 with SKR Mini E3 V2.0 #535

Closed
blazewicz opened this issue Jul 1, 2021 · 21 comments
Closed

[FR] Creality Ender 3 V2 with SKR Mini E3 V2.0 #535

blazewicz opened this issue Jul 1, 2021 · 21 comments

Comments

@blazewicz
Copy link

blazewicz commented Jul 1, 2021

Updates

  • 25-07-2021: Updated build environment info.
  • 25-07-2021: Added info about auxiliary serial port
  • 25-07-2021: Updated info about display ribbon mod

Description

The BIGTREETECH SKR Mini E3 V2.0 board is viable drop-in replacement for Creality's v4.2.2 board. Mine got fried (bed heater MOSFET blew up) and SKR seemed to be the best alternative to buying new board from Creality.

Unlike previous versions of Ender 3 (1, 2), the V2 doesn't have upstream configurations for this board. It was already discussed in MarlinFirmware/Marlin#19858, but at that point adding support for DWIN display wasn't possible without modifications to Marlin's code.

One culprit is that SKR display port has slightly different pinout than DWIN and requires slight modification to the ribbon cable. There is an #error added to Marlin source that needs to be commented out, above that line there is graphical instruction on how to modify the connection. (MarlinFirmware/Marlin#22288)

Full board documentation can be found in BIGTREETECH's GitHub, there is active discussion with success stories here:

Configuration Details

  • Manufacturer: Creality
  • Model: Ender 3 V2
  • Motherboard: SKR Mini E3 V2.0
  • Environment: STM32F103RC_btt, STM32F103RC_btt_USB, STM32F103RE_btt, STM32F103RE_btt_USB

Note about build environments

The _btt_USB variants seems to work out-of-the box but USB connection might be unstable (see MarlinFirmware/Marlin#22431).

Variants without _USB i.e. STM32F103RC_btt and STM32F103RE_btt are stable but require slight modification to local Arduino framework files:

--- ~/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/usb/usbd_ep_conf.c	2021-07-19 00:26:39.000000000 +0200
+++ ~/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/usb/usbd_ep_conf.c	2021-07-19 00:26:30.000000000 +0200
@@ -37,7 +37,7 @@
 #else
   {0x00,       PMA_EP0_OUT_ADDR, PCD_SNG_BUF},
   {0x80,       PMA_EP0_IN_ADDR,  PCD_SNG_BUF},
-  {CDC_OUT_EP, PMA_CDC_OUT_ADDR, PCD_DBL_BUF},
+  {CDC_OUT_EP, PMA_CDC_OUT_ADDR, PCD_SNG_BUF},
   {CDC_IN_EP,  PMA_CDC_IN_ADDR,  PCD_SNG_BUF},
   {CDC_CMD_EP, PMA_CDC_CMD_ADDR, PCD_SNG_BUF}
 #endif
@blazewicz
Copy link
Author

blazewicz commented Jul 2, 2021

Installation is very easy and board has exactly same dimmensions as Creality v4.2.2 and v4.2.7, connector layout is also very similar.

Only hardware modification required is a display cable adapter made with 8 dupont F-M cables.

Ender3_V2_BTT_SKR_Mini_V2_Board

Wiring diagram:

Zrzut ekranu 2021-07-3 o 12 59 57

below are all required modifications to Ender 3 V2 configurations (thanks @jernejp21, bigtreetech/BIGTREETECH-SKR-mini-E3#424 (comment)):

--- ../Configurations/config/examples/Creality/Ender-3 V2/Configuration.h	2021-07-02 10:58:20.000000000 +0200
+++ Marlin/Configuration.h	2021-07-02 12:38:43.000000000 +0200
@@ -104,7 +104,7 @@
  *
  * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
  */
-#define SERIAL_PORT 1
+#define SERIAL_PORT -1

 /**
  * Serial Port Baud Rate
@@ -141,9 +141,17 @@

 // Choose the name from boards.h that matches your setup
 #ifndef MOTHERBOARD
-  #define MOTHERBOARD BOARD_CREALITY_V4
+  #define MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V2_0
 #endif

 // Name displayed in the LCD "Ready" message and Info menu
 #define CUSTOM_MACHINE_NAME "Ender-3 V2"

@@ -833,9 +841,9 @@
  *          TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
  * :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
  */
-#define X_DRIVER_TYPE TMC2208_STANDALONE
-#define Y_DRIVER_TYPE TMC2208_STANDALONE
-#define Z_DRIVER_TYPE TMC2208_STANDALONE
+#define X_DRIVER_TYPE TMC2209
+#define Y_DRIVER_TYPE TMC2209
+#define Z_DRIVER_TYPE TMC2209
 //#define X2_DRIVER_TYPE A4988
 //#define Y2_DRIVER_TYPE A4988
 //#define Z2_DRIVER_TYPE A4988
@@ -844,7 +852,7 @@
 //#define I_DRIVER_TYPE  A4988
 //#define J_DRIVER_TYPE  A4988
 //#define K_DRIVER_TYPE  A4988
-#define E0_DRIVER_TYPE TMC2208_STANDALONE
+#define E0_DRIVER_TYPE TMC2209
 //#define E1_DRIVER_TYPE A4988
 //#define E2_DRIVER_TYPE A4988
 //#define E3_DRIVER_TYPE A4988
@@ -1293,9 +1301,9 @@
 // @section machine

 // Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR false
-#define INVERT_Z_DIR true
+#define INVERT_X_DIR true
+#define INVERT_Y_DIR true
+#define INVERT_Z_DIR false
 //#define INVERT_I_DIR false
 //#define INVERT_J_DIR false
 //#define INVERT_K_DIR false
@@ -1303,7 +1311,7 @@
 // @section extruder

 // For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
+#define INVERT_E0_DIR true
 #define INVERT_E1_DIR false
 #define INVERT_E2_DIR false
 #define INVERT_E3_DIR false

--- ../Configurations/config/examples/Creality/Ender-3 V2/Configuration_adv.h	2021-07-02 10:58:20.000000000 +0200
+++ Marlin/Configuration_adv.h	2021-07-02 15:13:14.000000000 +0200
@@ -469,7 +469,7 @@
  * The fan turns on automatically whenever any driver is enabled and turns
  * off (or reduces to idle speed) shortly after drivers are turned off.
  */
-//#define USE_CONTROLLER_FAN
+#define USE_CONTROLLER_FAN
 #if ENABLED(USE_CONTROLLER_FAN)
   //#define CONTROLLER_FAN_PIN -1        // Set a custom pin for the controller fan
   //#define CONTROLLER_FAN_USE_Z_ONLY    // With this option only the Z axis is considered
@@ -2550,7 +2550,7 @@
   #define INTERPOLATE      true

   #if AXIS_IS_TMC(X)
-    #define X_CURRENT       800        // (mA) RMS current. Multiply by 1.414 for peak current.
+    #define X_CURRENT       580        // (mA) RMS current. Multiply by 1.414 for peak current.
     #define X_CURRENT_HOME  X_CURRENT  // (mA) RMS current for sensorless homing
     #define X_MICROSTEPS     16        // 0..256
     #define X_RSENSE          0.11
@@ -2568,7 +2568,7 @@
   #endif

   #if AXIS_IS_TMC(Y)
-    #define Y_CURRENT       800
+    #define Y_CURRENT       580
     #define Y_CURRENT_HOME  Y_CURRENT
     #define Y_MICROSTEPS     16
     #define Y_RSENSE          0.11
@@ -2586,7 +2586,7 @@
   #endif

   #if AXIS_IS_TMC(Z)
-    #define Z_CURRENT       800
+    #define Z_CURRENT       580
     #define Z_CURRENT_HOME  Z_CURRENT
     #define Z_MICROSTEPS     16
     #define Z_RSENSE          0.11
@@ -2649,7 +2649,7 @@
   #endif

   #if AXIS_IS_TMC(E0)
-    #define E0_CURRENT      800
+    #define E0_CURRENT      700
     #define E0_MICROSTEPS    16
     #define E0_RSENSE         0.11
     #define E0_CHAIN_POS     -1
@@ -2813,7 +2813,7 @@
    * Define your own with:
    * { <off_time[1..15]>, <hysteresis_end[-3..12]>, hysteresis_start[1..8] }
    */
-  #define CHOPPER_TIMING CHOPPER_DEFAULT_12V        // All axes (override below)
+  #define CHOPPER_TIMING CHOPPER_DEFAULT_24V        // All axes (override below)
   //#define CHOPPER_TIMING_X  CHOPPER_TIMING        // For X Axes (override below)
   //#define CHOPPER_TIMING_X2 CHOPPER_TIMING_X
   //#define CHOPPER_TIMING_Y  CHOPPER_TIMING        // For Y Axes (override below)

Note that enabling SERIAL_PORT_2 will cause compilation errors, this is due to:

@blazewicz
Copy link
Author

Here's Proof-Of-Concept 3DBenchy:

Ender3_V2_BTT_SKR_Mini_V2_Benchy

Ender3_V2_BTT_SKR_Mini_V2_DWIN

@blazewicz
Copy link
Author

blazewicz commented Jul 5, 2021

Env used in BTT repo, i.e. STM32F103RC_btt_maple (link) compiles, but neither display nor serial over USB works.

With STM32F103RC_btt it works, but without USB CDC. Everything works only with STM32F103RC_btt_USB.

@blazewicz
Copy link
Author

At the moment enabling serial port simultaneously on USB (serial port -1) and TFT pins (serial port 2) is impossible due to: MarlinFirmware/Marlin#22299

@looxonline
Copy link

Env used in BTT repo, i.e. STM32F103RC_btt_maple (link) compiles, but neither display nor serial over USB works.

With STM32F103RC_btt it works, but without USB CDC. Everything works only with STM32F103RC_btt_USB.

You can get serial to work by editing the STM32Duino code and changing the USB_EP to single buffer instead of double buffer.

@RipperDrone
Copy link

RipperDrone commented Jul 18, 2021

@blazewicz Did u test this combo long enough to tell for sure it does not create freeze issues on the printer anymore? Have it up and running now, but getting random freezes... :-( (have created a new issue ticket with more description today. I know this has been a subject in the past already, but latest fixes in serial comm should have fixed it, but apprently haven't for me... my env is STM32F103RC_btt_512K)

@blazewicz
Copy link
Author

@RipperDrone I'm not sure if this is the same issue you're refering to, but every few hours USB serial connection resets and so I can't run longer prints from Octoprint. It might be related to USB serial buffer, but I haven't verified it yet.

Also once in a while I get random Z offset error. Once it prints perfect and at next print, after homing nozzle is too high and I get no adhesion. Only full printer restart helps. I use standard Z stop, no ABL.

@blazewicz
Copy link
Author

@RipperDrone have you checked whether your board has original ST chip or GigaDevice clone?

@RipperDrone
Copy link

@blazewicz Thank you for following up.

  • no, it's not like an occasional USB buffer overflow every couple hours, it freezes after few minutes already when the printer is warm. After cold start, I MIGHT be able to finish one xyz test cube, but printer will hang on the second already. After that it will hang on every single print, from the point it's starting - sometimes during heating phase already. This, it might be related to so e thermal issue / not necessarily to USB? It happens as well when disconnecting PC from USB and printing from SD card. Of course, the 2 USB ports are opened by Malin, anyways...
  • I have not checked for the chip version, but ordered from BTT store directly on Amazon since I was afraid of clones. Cannot check anymore, sending it back and will try a replacement one next week, just to be sure that hardware is ok
  • I read that some boards might have flawed 512k flash. Emory in upper half, and I compiled in _btt_512k eng so far. Should I rather try _btt eng instead when firmware filesize fits in?

@blazewicz
Copy link
Author

no, it's not like an occasional USB buffer overflow every couple hours, it freezes after few minutes already when the printer is warm. After cold start, I MIGHT be able to finish one xyz test cube, but printer will hang on the second already. After that it will hang on every single print, from the point it's starting - sometimes during heating phase already. This, it might be related to so e thermal issue / not necessarily to USB? It happens as well when disconnecting PC from USB and printing from SD card. Of course, the 2 USB ports are opened by Malin, anyways...

Oh, ok, I was able to successfully run 10h+ prints from SD card so I guess its not related to the firmware, maybe your hardware is faulty.

I have not checked for the chip version, but ordered from BTT store directly on Amazon since I was afraid of clones. Cannot check anymore, sending it back and will try a replacement one next week, just to be sure that hardware is ok

Sadly now, during the chip shortage its a lottery what you get.

I read that some boards might have flawed 512k flash. Emory in upper half, and I compiled in _btt_512k eng so far. Should I rather try _btt eng instead when firmware filesize fits in?

I don't think it matters, nothing in linker script is aligned to the end of flash, so as long as binary is <256k there's no difference. Of course its better when linker knows actual size of target flash.

BTW I think _btt_512k env was replaced with STM32F103RE_btt, you should update your repo.

@blazewicz
Copy link
Author

You can get serial to work by editing the STM32Duino code and changing the USB_EP to single buffer instead of double buffer.

@looxonline: true, I changed following and USB serial works. I wish there was a switch.

--- ~/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/usb/usbd_ep_conf.c	2021-07-19 00:26:39.000000000 +0200
+++ ~/.platformio/packages/framework-arduinoststm32/cores/arduino/stm32/usb/usbd_ep_conf.c	2021-07-19 00:26:30.000000000 +0200
@@ -37,7 +37,7 @@
 #else
   {0x00,       PMA_EP0_OUT_ADDR, PCD_SNG_BUF},
   {0x80,       PMA_EP0_IN_ADDR,  PCD_SNG_BUF},
-  {CDC_OUT_EP, PMA_CDC_OUT_ADDR, PCD_DBL_BUF},
+  {CDC_OUT_EP, PMA_CDC_OUT_ADDR, PCD_SNG_BUF},
   {CDC_IN_EP,  PMA_CDC_IN_ADDR,  PCD_SNG_BUF},
   {CDC_CMD_EP, PMA_CDC_CMD_ADDR, PCD_SNG_BUF}
 #endif

@Ulvhedin
Copy link

I can confirm above solution works: Ender 3 Pro, SKR Mini E3 v2.0, chipset GigaDevice GD32F103RET6.

@MakManIfest
Copy link

MakManIfest commented Oct 1, 2021

I have followed this mod to the T for a Voxelab Aquila but I'm having issues with freezing and resetting when I home Z. I am using a 3D touch setup on the probe port of the BTT SKR mini e3 v2. I've triple checked all the pins are connected correctly and figure it is something in the firmware.
Started by checking the code in the sections that were modified and discovered in pins_BTT_SKR_MINI_E3_common.h that the USB connect pin is set to PA14 which is the same as one of the signal lines on the probe port. What should I change this to?

EDIT: Never mind, signal line on probe is PC14 not PA14.

Another issue is that the input on the screen is backward. Previously I would rotate the knob clockwise to increase numbers ie nozzle temp, or to scroll down the menus, Now I have to rotate counter clockwise. Not a huge issue but it is annoying. How can I change that as well?

@MakManIfest
Copy link

Update: Turns out the screen freezing and reset was happening after completion of homing any axis. Home X only... freeze. Home All, it homes all axis then freezes.

However, I tried applying blazewicz changes (including those found here https://github.com/MarlinFirmware/Marlin/pull/22288/files#diff-5a0102cf6df090779b130b924a2511da4922373bfc60c8c4eca427343ba6cc73R120-R124) to Alexqzd's fork V1.3.5 for the Aquila and everything seems to be working fine on the initial testing. I'll go ahead and finish applying my personal settings and run some test prints.

@jrneulight
Copy link

Is the freezing issue fixed and USB issue fixed now? If so, what changes need to be made to fix those issues. I am planning on ordering an SKR Mini E3 V2 for my Ender 3 v2 to use with separate Dual Z and Octoprint. Thank you

@blazewicz

@ColinM9991
Copy link

I'll be going through this process in the coming days as my SKR mini has arrived this week.

Are these steps still accurate for the latest revision or is it now easier to use the SKR

@ColinM9991
Copy link

ColinM9991 commented Nov 3, 2021

Are there any other wiring diagrams that are more comprehensible?

It is unclear what the viewing angle is of the diagram attached and the pin-out table in the common.h

Which wires exactly should be crossed? Any examples that respect the original colour coding of the Ender 3 v2 display cable?

Update Got there in the end. Soon I'll upload a colour chart for the stock display/IDC cable.

@Jaans
Copy link

Jaans commented Nov 4, 2021

Are there any other wiring diagrams that are more comprehensible?

It is unclear what the viewing angle is of the diagram attached and the pin-out table in the common.h

Which wires exactly should be crossed? Any examples that respect the original colour coding of the Ender 3 v2 display cable?

Update Got there in the end. Soon I'll upload a colour chart for the stock display/IDC cable.

FWIW, I found the following from @Damquis to be very helpful:
bigtreetech/BIGTREETECH-SKR-mini-E3#424 (comment)
The colors used match my Creality ribbon cable colors so that made the mapping easier.

I now have a fully working Ender3v2 with the following configured:

  • BTT SKR Mini E3 v2.0 motherboard
  • EZ ABL Pro 18mm probe sensor
  • OctoPI working over USB
  • BondTech Extruder (bowden)
  • Linear Advance
  • Marlin 2.0.9.2 and DWIN Enhanced (Rotary working)
    Site Note: Still working out exactly why, but the printed surface deposits are so much smoother than when I used the Creality 4.2.2 board.

A big thanks to everybody for their help and contribution!

@ColinM9991
Copy link

ColinM9991 commented Nov 4, 2021

Are there any other wiring diagrams that are more comprehensible?
It is unclear what the viewing angle is of the diagram attached and the pin-out table in the common.h
Which wires exactly should be crossed? Any examples that respect the original colour coding of the Ender 3 v2 display cable?
Update Got there in the end. Soon I'll upload a colour chart for the stock display/IDC cable.

FWIW, I found the following from @Damquis to be very helpful: bigtreetech/BIGTREETECH-SKR-mini-E3#424 (comment) The colors used match my Creality ribbon cable colors so that made the mapping easier.

I now have a fully working Ender3v2 with the following configured:

  • BTT SKR Mini E3 v2.0 motherboard
  • EZ ABL Pro 18mm probe sensor
  • OctoPI working over USB
  • BondTech Extruder (bowden)
  • Linear Advance
  • Marlin 2.0.9.2 and DWIN Enhanced (Rotary working)
    Site Note: Still working out exactly why, but the printed surface deposits are so much smoother than when I used the Creality 4.2.2 board.

A big thanks to everybody for their help and contribution!

Thank you!

Mine was slightly different. It was
1 Black
2 White
3 Grey
4 Purple
6 Yellow
8 Orange
9 Blue
10 Green

As it was my first time crimping an IDC connector there was a bit of confusion as to what the orientation was of the diagrams.

In the end I managed to crimp a cable and the printer is now up and running with BLTouch, just have to calibrate again and shift my calibration to the Conf file do I don't have to do that every time.

Also, a big thank you to everybody who has been looking at this!

@MarlinFirmware MarlinFirmware deleted a comment from manpres2 Nov 14, 2021
@MarlinFirmware MarlinFirmware deleted a comment from manpres2 Nov 14, 2021
@MarlinFirmware MarlinFirmware deleted a comment from thisiskeithb Nov 14, 2021
@MarlinFirmware MarlinFirmware deleted a comment from ellensp Nov 14, 2021
@MarlinFirmware MarlinFirmware deleted a comment from manpres2 Nov 14, 2021
@MarlinFirmware MarlinFirmware deleted a comment from manpres2 Nov 14, 2021
@MarlinFirmware MarlinFirmware deleted a comment from ellensp Nov 14, 2021
@MarlinFirmware MarlinFirmware deleted a comment from ellensp Nov 14, 2021
@awrabb6
Copy link

awrabb6 commented Nov 25, 2021

How can I go about local adruino framework? I can not compile my firmware with flashing from SD, I get an error saying SD flashing was only compatible with atmega2560 boards so I suspect this might fix my issue

@thinkyhead
Copy link
Member

Duplicate of #649

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants