# HyperCube 3Dプリンターを作ってみる その12
###### tags: `3D Printer` `HyperCube3D`
## CoreXY、TMC2209用にファーム書き換え
CoreXY対応、TMC2209のURATモード用に、ファームウェアを書き換えます。
### Robin Nano v2用ファームウェアのソースコードを取得
[makerbase\-mks/Mks\-Robin\-Nano\-Marlin2\.0\-Firmware: The firmware of Mks Robin Nano, based on Marlin\-2\.0\.x, adding the color GUI\.](https://github.com/makerbase-mks/Mks-Robin-Nano-Marlin2.0-Firmware)
上記の場所から、ソースコードを取得してきます。
```
$ git clone https://github.com/makerbase-mks/Mks-Robin-Nano-Marlin2.0-Firmware.git
```
### TMC2209のUARTを使うようにソースコードを修正
[Drivers\_MKS\_TMC2209\_2225\_2208 · makerbase\-mks/MKS\-Robin\-Nano\-V2\.X Wiki](https://github.com/makerbase-mks/MKS-Robin-Nano-V2.X/wiki/Drivers_MKS_TMC2209_2225_2208)
ここに、前回設定したジャンパーのことや、ソースコードの修正箇所も書かれています。
自分の場合は、以下のような変更をしました。
* Marlin/Configuration.h
``` diff
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -104,13 +104,13 @@
*
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
-#define SERIAL_PORT 3
+#define SERIAL_PORT -1
/**
* Select a secondary serial port on the board to use for communication with the host.
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
-//#define SERIAL_PORT_2 1
+#define SERIAL_PORT_2 3
/**
* This setting determines the communication speed of the printer.
@@ -613,7 +613,7 @@
// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
// either in the usual order or reversed
-//#define COREXY
+#define COREXY
//#define COREXZ
//#define COREYZ
//#define COREYX
@@ -687,15 +687,15 @@
* 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 A4988
-//#define Y_DRIVER_TYPE A4988
-//#define Z_DRIVER_TYPE A4988
+#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
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
-//#define E0_DRIVER_TYPE A4988
+#define E0_DRIVER_TYPE TMC2209
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
```
* Marlin/Configuration_adv.h
``` diff
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -2465,7 +2465,7 @@
* STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
- //#define HYBRID_THRESHOLD
+ #define HYBRID_THRESHOLD
#define X_HYBRID_THRESHOLD 100 // [mm/s]
#define X2_HYBRID_THRESHOLD 100
```
### ビルド
VSCodeとPlatformIO IDE拡張を使ってビルドしました。
自分は既に環境があったので、すんなりできましたが、以下の記事が参考になると思います。
[【Ender\-3改造】Ender\-3に32bitのメインボードを導入した(Marlin 2\.0\.x) \| あること・ないこと日記](https://terutakke.com/2019/08/marlin2-settings-of-ender-3/)
### ファームウェア書き換え
ビルドに成功すると、`.pio\build\mks_robin_nano35`フォルダに、
* `assets`フォルダ
* `Robin_nano35.bin`
が出来ています。(他にもいろいろなファイルやフォルダが出来ていますが、使うのは上記2つです)
assetsフォルダが作られないことがたまにありますが、何度かビルドしてたら、できてました。
上記2つを、SDカードのルートにコピーします。
Robin Nanoに、SDカードをセットして、電源を入れると、ファームウェアの書き換えが行われます。
書き換え終了後、アイコンがおかしくなってたりした場合は、assetsフォルダがちゃんとあるか確認しましょう。
### 確認
TMC2209に対応したファームウェアになったかどうかは、
Machine Setting > Motor settingで、
`TMC Current setting`などの、メニューがあれば成功です。

次は、XY軸のステッピングモーターをつないで、XY軸を動かします。
### 全制作工程
[HyperCube 3Dプリンターを作ってみた-目次](https://hackmd.io/@seya128/HyperCube-Book)