【Ender-3改造】Ender-3に32bitのメインボードを導入した(Marlin 2.0.x)

15,249 total views, 45 views today

32bitの3Dプリンター用マザーボードを購入して、Ender-3にファームウェアとしてMarlin 2.0を導入した。

目次

32bitメインボード

Ender-3の純正メインボードやMKS GEN LのようなメインボードはAtmel社の 8bitマイコン(ATmega1284P、ATmega2560等)を使用 している。

しかしながら、今では3Dプリター用メインボードは32bitが主流となってきているようである。

ということで、Ender-3に32bitのメインボードを導入してみた。

今回導入したボードはこれ↓、モータードライバー4個(TMC2130 SPI ×4)とのセットで4000円弱だった。

今なら「BIGTREETECH SKR mini E3」が、モータードライバが組込み済みで電流の調整もされているため、Ender-3のケーブル類をそのままつなぐだけで使えて、おすすめである。

なお、日本のAmazon(マーケットプレイス)でもBIGTREETECHの公式ストアが取り扱いを始めており、日本国内からの発送となっているので、購入の際はAmazonを使った方が早く届いて良いと思う。

このボードは、Ender-3用に特化していて、サイズがEnder-3の純正ボードと同じで、ピンの配置も純正ボードに非常に似通っているため、導入が容易であると思う。

上:Ender-3純正ボード、下:SKR E3 DIP

32bitメインボードの利点

コントールボードを8bitのものから32bitのものに変えることで、何が変わるのかを一言でというと、一度の演算で処理できるデータ量が大きくなるということになる。

3Dプリンターとは、複数のモーターの動作を制御しながら、溶融した熱可塑性樹脂を任意の形状に積層させる機械 (※FDM方式の場合)なのであるから、 3Dプリンターにおいて、多くの演算を要するものは何かといえば、ステッピングモーターの動作制御に他ならない。

ステッピングモーターの動作はプリント精度に関わるものであり、より複雑で微細なステッピングモーターの動作制御は、プリント精度を向上させるものである。

プリント精度向上のために、ステッピングモーターの動作をより滑らかにするには、より複雑で微細なステッピングモーターの動作制御が必要となり、より多くの演算が必要となる

ステッピングモーターの微細な動作制御の参考動画

このように、32bitのコントールボードは 、ステップ角0.9°のステッピングモータの導入であったり、ステッピングモータードライバでより細かなマイクロステップ(128マイクロステップや256マイクロステップ)での動作を有効にするときなどに力を発揮する。

「Marlin 2.0.x」

32bitのメインボードでは、ファームウェアとしてMarlin 2.0.xが使える。これはMarlin 1.1.xの発展版であるが、コンパイルするために必要な環境はMarlin 1.1.xとは異なっている。

PlatformIO IDEの導入

Arduinoベースの8bitメインボードでは、ファームウェアであるMarlin 1.1.xのコンパイルにArduino IDEが使えた。

しかし、Marlin 1.1.xの発展版であるMarlin 2.0.xについては、一部の32bitメインボードでArduino IDEが引き続きサポートされるようであるが、Marlin 2.0.xのコンパイルにはPlatformIO IDE を使うことが推奨されている。

PlatformIO IDE

PlatformIO IDEは、テキストエディタであるMicrosftのVisual Studio Codeの拡張機能として提供されている。

Visual Studio Codeのインストール

公式ページから、自分のPC環境にあったバージョンのものをダウンロードする。

インストーラ版をダウンロードした場合は、インストーラを起動し、使用許諾所に同意してインストール作業を進める。

インストール時のオプションを選択して、次の作業へ進む。

内容を確認して、インストールを行う。

しばらく待つとインストール作業が完了する。

ちなみに、この記事執筆時点(2019年8月19日)での最新版のバージョンは、↓となっている。

PlatformIO IDEのインストール

Visual Studio Codeウィンドウの左端一番下にある「Extensions」タブをクリックする。

検索窓に「platformio」と入力し、表示された検索結果の中から、「PlatformIO IDE」を選択する。

「Install」のボタンをクリックして、インストールを行う。

しばらく待つと、PlatformIO IDEのインストールが完了する。

PlatformIO IDEの起動

Open Project」ボタンをクリックして、Marlin 2.0.xのフォルダを開く。

PlatformIO IDEでのコンパイル

編集し終わったMarlin 2.0.xのソースファイルをコンパイルするには、画面の左下のほうにある、✔マークをクリックする。

何事もなければ、しばらく待つとコンパイルが完了する。エラーが出でコンパイルが完了しない場合には、内容を確認して該当箇所の修正を行う必要がある。

「Marlin 2.0.x」の書き込み

コンパイルが終わったら、Marlin 2.0.xフォルダ内の「BIGTREE_SKR_MINI」フォルダ( Marlin 2.0.x ⇒.pio⇒build⇒BIGTREE_SKR_MINI)内に「firmware.bin」というファイルが作成させる。このファイルを書き込んだSDカードをメインボードに差し込んだ状態で、メインボードの電源を入れれば自動的にファームウェアが書き込まれる。

Ender-3用Marlin 2.0の設定変更箇所覚え書き

Marlin 1.1.x同様、 Marlin 2.0.xでもEnder-3を含む各種3Dプリンター用の設定ファイルが同梱(※)されているので、ファームウェアのアップデート関しては該当機種用の設定ファイルをコピーしてきてコンパイルを行えば事足りる

※Ender-3の場合、 設定ファイルの場所は 「Marlin-bugfix-2.0.x/config/examples/Creality/Ender-3

しかしながら、オートレベリングを導入している場合や、メインボード、ホットエンド、ステッピングモーター、 モータードライバの交換といった改造を行っている場合には、それらの改造に合わせた設定を行わなければならないため、設定変更箇所を覚え書きとして残しておくことにする。

なお、ここではメインボードにBIGTREETECHのSKR-E3-DIPを使用する場合について書いている。

オートレベリング用センサーを導入した場合

配線

BLTOUCH系のセンサーを導入する場合、配線は↓の通りとなる。

  • SERVO:(左から順に)オレンジ、茶、赤
  • Z-STOP:(左から順に)黒、白

2019年12月20日追記:
ここで使用しているセンサーは、Trianglelab製のものであるがその他のメーカー製のものの中には、3ピンのコネクタで真ん中が赤なっている場合があるので、注意が必要である。
このようなセンサーをボードのピン配置に対応させないままボードに差し込んでしまうと、センサーが故障してしまう
そのため、配線を行う際にはボード裏のシルク印刷の表記をよく確認してピンとケーブルの接続を正しく行う必要がある。

ピンとケーブルの色の対応は以下の通り。

  • SERVO
    • GND ⇒ 茶
    • +5V ⇒ 赤
    • その他 ⇒ オレンジ
  • Z-STOP
    • GND ⇒ 黒
    • その他 ⇒ 白

※注:画像は、SKR E3-DIP V1.0の場合

「Configuration.h」の設定変更箇所

オートレベリング用のセンサーとしてBLTOUCH(互換品含む)を導入した場合、「BLTOUCH」の設定を有効にしておく。

変更前
  • コメントアウト解除
変更後
プローブオフセットの設定

プローブのノズルからのオフセット位置を設定する。

変更前
変更後

使用したい、オートベッドレベリングの方式を選択する。

変更前
  • コメントアウト解除
変更後
変更前
  • コメントアウト解除
変更後
エンドストップの設定

エンドストップ(MIN側)について、画像の通り設定を変更しておく。

変更前
  • コメントアウト解除
変更後
変更前
  • false ⇒ true
変更後

メインボードを交換した場合

「platformio.ini」の設定変更箇所

「default_envs」の値を使用するボードのものに変更する。ボードが「SKR E3 DIP」の場合、「STM32F103RC_btt」となる。

スポンサーリンク

default_envs = megaatmega2560 ⇒ default_envs = STM32F103RC_bigtree

変更前
補足

モータードライバにTMC2209を使用する場合は、追加で以下の変更が必要となる。

  • [common]
    • TMCStepper@>=0.5.0,<1.0.0 ⇒ #TMCStepper@>=0.5.0,<1.0.0
    • https://github.com/bigtreetech/TMCStepper を追加
変更前
変更後
  • [env:STM32F103RC_btt]
    • build_flags に -DHAVE_SW_SERIAL を追加
変更前
変更後

「Configuration.h」の設定変更箇所

ボード名の設定

「#define MOTHERBOARD」の値を変更する。ボードが「SKR E3 DIP」の場合、「 BOARD_BIGTREE_SKR_E3_DIP」となる。

変更前
  • #define MOTHERBOARD BOARD_RAMPS_14_EFB ⇒ #define MOTHERBOARD BOARD_BIGTREE_SKR_E3_DIP
変更後

ホットエンドを交換した場合

「Configuration.h」の設定変更箇所

ホットエンドのPIDの設定

E3Dv6(クローン品含む)などのホットエンドに交換をした場合には、PID Autotune実行し、得られたPIDの値に書き換える。

PID Autotuneの実行手順
  • PrintrunやOctoPrintなどターミナル機能を備えているものとEnder-3をUSB接続する。
  • ターミナルから、「M303 E0 S200 C8」を実行してPIDの値を得る。
  • 得られたPIDの値を「M301 P? I?? D??? 」を実行して入力する(※)。
  • M500」を実行し、入力したPIDの値をEEPROMに保存する。

※ 「?」、「??」、「???」には、それぞれ、「Kp」、「Ki」、「Kd」の値が入る

変更前
  • #define DEFAULT_Kp 15.16
  • #define DEFAULT_Ki 0.97
  • #define DEFAULT_Kd 59.22
変更後
ホットエンド用温度センサーの設定

Trianglelab製E3Dv6クローン品の場合、ホットエンド用温度センサーの設定を次のように変更する。

変更前
  • #define TEMP_SENSOR_0 1 ⇒ #define TEMP_SENSOR_0 5
変更後

エクストルーダーを交換した場合

エクストルーダーをE3DのTitan(タイタン)ExtruderやBondtechのBMG Extruderといったギアードエクストルーダー(クローン品含む)に交換した場合には、ギア比に応じてエクストルーダー用ステッピングモーターのステップ数を変更する必要がある。

なお、ステップ数の求め方については、次節「ステッピングモーターを交換した場合」の中で説明しているのでそちらを参照のこと。

ステッピングモーターを交換した場合

ステッピングモーターをステップ角1.8°のものから、ステップ角0.9°のものに交換した場合には、モーターのステップ数の値を変更する必要がある。

「Configuration.h」の設定変更箇所

モーターのステップ数の設定

各部モーターのステップ数を設定する。

X、Yモーター のステップ数の求め方

360° / モーターのステップ角 × マイクロステップ数 / タイミングプーリーの円周

例)1.8°角ステップモーター、1/16マイクロステップ、 20歯・歯ピッチ2mm(2GT)のタイミングプーリーの場合、360° / 1.8° × 16 / (2mm × 20) = 80 ステップ/mm

Zモーターのステップ数の求め方

360° / モーターの ステップ角 × マイクロステップ数 / リードスクリューのピッチ

例) 1.8°角ステップモーター、1/16マイクロステップ、8ミリピッチのリードスクリューの場合、 360° / 1.8° × 16 / 8 mm = 400 ステップ/mm

Eモーターのステップ数の求め方

360° / モーターの ステップ角 × マイクロステップ数 × ギア比 / ドライブギアの円周

例) 1.8°角ステップモーター、1/16マイクロステップ、ギア比1、ギアの直径11mmの場合、360° / 1.8° × 16 × 1 / (11mm × 3.14…) = 93 ステップ/mm

私の環境では、0.9°ステップ角のステッピングモーター(マイクロステップ1/64)とエクストルーダーにBondtech社のギアードエクストルーダーである「BMG Extruder」のクローン品(ギア比3)を使用している。

変更後
モーターの回転方向の設定

必要に応じて、モーターの回転方向を逆転させておく。

変更後
モータードライバのリファレンス電圧の設定

「#define X_CURRENT」、「#define Y_CURRENT」、「#define Z_CURRENT」、「#define E0_CURRENT」の値を変更する。

TMC製モータードライバのリファレンス電圧の計算についてはこのサイトが参考になるが、簡単に言えば、以下の通りとなる。

VREF = IRMS × √2 = IMAX

  • VREF:モータードライバのリファレンス電圧
  • IRMS:電流の実効値 ( = IMAX / √2)
  • IMAX:最大電流

Ender-3の純正モーター(X、Y、Z:0.84A、E:1.0A)の場合、

  • X、Y、Z:VREF = IMAX = 0.84 V
  • E:VREF = IMAX = 1.0V

となるが、ここではさらに0.9を乗じて、

  • 0.84 V× 0.9 = 0.756 V
  • 1.0 V× 0.9 = 0.9 V

としている。

変更前
  • X、YZ:800 ⇒ 756
  • E0:800 ⇒ 900
変更後

モータードライバを交換した場合

「Configuration.h」の設定変更箇所

使用するドライバとモードの設定

静音化等を目的にLV8729や、TMCシリーズのモータードライバに交換している場合には、該当するモータードライバの設定を有効にしておく

※TMCシリーズでは、 Step-Directionモードでの動作については、ドライバ名の後ろに「_STANDALONE」がついたものを選択し、それ以外のモード(SPI、UART)では、「_STANDALONE」のつかないものを選択する。

※ここではTMC2130のSPI通信を選択

変更前
変更後

「Configuration_adv.h」の設定変更箇所

モータードライバの電圧の設定

詳細は、ステッピングモーターを交換した場合の同項目を参照。

SPIモードの設定

TMC2130TMC5160でSPIモードをしない場合には設定不要。

変更前
  • コメントアウト解除
変更後
センサーレスホーミング

TMC2130TMC2209といったセンサーレスホーミングに対応したモータードライバを使用する場合、センサーレスホーミングの設定を有効にしておく。

変更前
  • コメントアウト解除
変更後

センサーレスホーミングの感度の設定はデフォルトの8前後にしておけば、特に問題ないように思う。

なお、Zモーターのセンサーレスホーミングに関しては、BLTOUCH互換品を使用するつもりなので無効にしている。

  • #define X_STALL_SENSITIVITY 8 ⇒ #define X_STALL_SENSITIVITY 7
  • #define Y_STALL_SENSITIVITY 8 ⇒ #define Y_STALL_SENSITIVITY 7
変更後

センサーレスホーミングを有効にする場合、HOME_BUMPを0にするよう推奨されているので、その通りにしておく。

  • #define X_HOME_BUMP_MM 2 ⇒ #define X_HOME_BUMP_MM 0
  • #define Y_HOME_BUMP_MM 2 ⇒ #define X_HOME_BUMP_MM 0

また、各エンドストップ(MIN側)のCOM(ground)とNC(Signal)を逆転させておく。

変更前
  • false ⇒ true
変更後

さらに、各エンドストップ(MIN側)をプルアップさせておく。

変更前
  • コメントアウト解除
変更後

まとめ

  • 32bitのメインボードをEnder-3に導入した。
  • 32bitのメインボードはステッピングモーターをより滑らかに動作させる際に有利。
  • 3Dプリンター改造時の「Marlin 2.0.x」の設定変更箇所についてまとめた。