【Ender-3改造】3Dプリンターのメインボードとモータードライバを取り替えて静音化した(TMC2208)

 94,067 total views,  26 views today

Ender-3のメインボード(以下、ボード)を交換して、TMC2208というモーターの動作音が静音化されるモータードライバを取り付けた。

モータードライバの交換前と後で動作音の比較をすると↓こんな感じで、モーターの動作音が劇的に小さくなる(その分、ファンの音がうるさく感じる)。

【Ender-3改造】Ender-3に32bitのメインボードを導入した(Marlin2.0.x)
【Ender-3改造】3Dプリンターにオートレベリングを追加した(BLTouch互換品)
【Ender-3改造】3Dプリンターのファームウェアを書き換えた(Marlin1.1.9)

ボードの交換

ボードは、「MKS GEN L V1.0」というものをAliExpressで2000円強で買った。

このようなボードの場合、モータードライバを一緒に用意しておく必要がある。

AliExpressのほかAmazonからも入手可能である。

モータードライバはTMC2208を選んだ。これもAliExpressで買って、5個1セット2500円くらいだった。

TMC2208はAliExpressのほかAmazonからも入手可能である。

なお、ボードを「MKS GEN L」に交換すると、SDカードスロットがないため、SDカードが使えなくなる

※2019年9月3日追記

今からボードの交換をするなら、32bitボードがおすすめである。値段は8bitボードの「MKS GEN L」と変わらないうえ、SDカードスロットがついている。

「MKS GEN L」でG-codeを読み込ませるためには、3通りの方法が考えられる。

  1. PCとUSB接続する
  2. Wi-Fi化する
  3. SDカードリーダーを追加する

1.では「Printrun」を使ったり、「Cura」などのスライサーソフトを使ってUSB経由でG-codeを読み込ませる方法がある。

2.では、「OctoPrint」や「Repetier-Host」を導入してWi-Fi経由でG-codeを読み込ませる方法がある。

3.では、MKSのボード用「SDカードリーダー」を追加し、SDカード経由で読み込ませる方法がある。

配線

  1. Xモーター
  2. Yモーター
  3. Zモーター
  4. Eモーター
  5. Xモータードライバ
  6. Yモータードライバ
  7. Zモータードライバ
  8. Eモータードライバ
  9. ノズルファン
  10. ホットエンドファン
  11. ホットエンド
  12. ヒートベッド
  13. 電源
  14. Xリミットスイッチ
  15. Yリミットスイッチ
  16. Zリミットスイッチ(BLTouch(白、黒))
  17. ディスプレイ
  18. ディスプレイ(リボンケーブル2本運用時のみ使用)
  19. BLTouch(茶、赤、オレンジ
  20. ヒートベッドサーミスタ
  21. ホットエンドサーミスタ

配線は、基本的にはボードに印字されている通りに接続すればよいが、ホットエンド用のファンのみ変則的にホットエンド用のコネクタに接続する。

また、ディスプレイに関しては2通りの接続方法があるようだが、どちらも一長一短である。

  • パターン1:追加のリボンケーブルが必要
  • パターン2: リボンケーブルの追加は必要ないが、ボード側のコネクタのト取り付け方向を逆にしなければならない。

ディスプレイの配線:パターン1

パターン1を選んだ場合、追加のリボンケーブルが必要となる。

  • 配線
    • EXP1(ディスプレイ側) → EXP1(ボード側)
    • EXP2 (ディスプレイ側)→ EXP2(ボード側)

ディスプレイの配線:パターン2

パターン2を選んだ場合、ボード側のソケットを180°反転させる必要がある。

  • 配線
    • EXP3(ディスプレイ側) → EXP1(ボード側)※ソケットの向きは180°反転させる
ソケットを180°反転させる方法

ボードとソケットの間に、デザインナイフの刃などを差し込み、少しずつボードとコネクタの隙間を広げていれば、ソケットを引き抜くことができるので、そ180°反転させたのち、再び差し込めばよい。

ボードとソケットの間にデザインナイフの先を差し込んだ
ソケットをボードから引き抜いた
ソケットを180℃反転させて差し込んだ

私は、ちなみにリボンケーブルを1本追加するパターン1を選んだ。

そのほか、リミットスイッチのコネクタはピンの数が異なっているので、コネクタの返しを切り取るような加工をするか、ピンの数があったコネクタに付け替える必要がある

100均で売ってる5本一組の精密ドライバーの一番小さいやつを使って、ピンの返しを押しつぶしてコネクタから引き抜いた後、押しつぶした返しを元に戻して、別のコネクタに付け替えればよい。

なお、リミットスイッチのピンは、はじめに示したボードの画像の方向で見たときに、3つあるピンのうち下2つのピンを使用する。

このような場合には、↓こういうコネクタのセットを1つ持っておくと何かと都合が良い。

なお、ピンのかしめは普通のペンチではうまく行えず、すぐにピンが抜けてしまうため、かしめ専用の工具が必要である。

TMC2208のマイクロステップの設定

TMC2208では、「MS1」と「MS2」というピンのHIGNとLOWの組み合わせにより、マイクロステップのステップ数を設定できるようになっている。

マイクロステップの設定は下表のとおりである。

マイクロステップMS1MS2
1/2 STEPHIGHLOW
1/4 STEP LOWHIGH
1/8 STEP LOWLOW
1/16 STEP HIGHHIGH

ここでは、1/16 STEPを選択しているので、ジャンパーピンは何もいじらず、TMC2208をそのままボードに差し込むだけとなっている。

ほかのSTEP数を選択する場合、STEP数に応じてボード側のジャンパーピンの位置を変える必要がある。

TMC2208をボードに取り付けるときは、GND側が黒いソケット、DIR側が緑色(黒以外の色)のソケットになる向きで取り付ける。

TMC2208のリファレンス電圧調整

※TMC2208のリファレンス電圧調整に関しては、このサイトが参考になる。

Ender-3に使われているステッピングモーターの定格電流(IMAX)は以下の通りである

モーター IMAX (A)
X0.84
Y0.84
Z0.84
E1.00

参考: Creality Ender 3 Stock Factory Vref -GitHub

TMC2208のリファレンス電圧を求める式

TMC2208の製造元であるTrinamicの資料によれば、TMC2208のリファレンス電圧を求める式は↓の通りである

出典:How to replace Allegro A4988 with TMC2208 – Trinamic

ただし、TMC2208に取り付けられている抵抗値が画像のように110mΩの場合、上の式は次のように単純化される。

VREF = IRMS × √2 = IMAX

※ IRMS: 電流の実効値 = IMAX / √2

以上のことを踏まえると、Ender-3の各モーター用のTMC2208のリファレンス電圧(VREF)は下表のとおりとなる。

モーターVREF (V)
X0.84
Y0.84
Z0.84
E1.00

しかし、ここでは安全面を考慮して、VREF0.9を乗じた値を実際に用いるリファレンス電圧とした。

モーターVREF (V) × 0.9
X 0.84 × 0.9 = 0.756
Y 0.84 × 0.9 = 0.756
Z 0.84 × 0.9 = 0.756
E 1.00 × 0.9 = 0.900

※ここで示したリファレンス電圧の例は、TMC2208に取り付けられている抵抗値が110mΩの場合のものであり、それ以外の場合については、先に示した式からリファレンス電圧を求める必要がある

なお、リファレンス電圧の調整は、TMC2208についているポテンショメーター(画像赤囲み部分)により行うが、電圧の値を読み取るためには、マルチメータが必須となる。

ファームウェアの書き換え

ファームウェアの書き換えには、「Arduino IDE」を使用するので、あらかじめPCにインストールしておく必要がある。

Marlin1.1.9の導入

Marlinの公式ページから最新のファームウェア(Latest releaseと書かれているもの)をダウンロードしてくる。

次に、ダウンロードが完了したらzipファイルを任意の場所に解凍し、解凍してできた「Marlin」フォルダを開く。

Marlin」フォルダを開いたら、今度はその中にある「example_configurations」というフォルダを開く。

その次に、「Creality」というフォルダを開く。

Ender-3」というフォルダを開く。

Ender-3」フォルダ内にあるファイルをすべて選択し、右クリックメニューからコピーを選択する。

スポンサーリンク

そうしたら「Marlin」フォルダまで戻り、コピーしたファイルを右クリックメニューから貼り付ける。

この時、上書きの確認ダイアログが出るが、上書きしてしまって問題ない。

コピーしたファイルの貼り付けが終わったら、同じ「Marlin」フォルダ内にある「Marlin.ino」という名前のファイルを開く。

すると、自動的にArduino IDEが立ち上がる。

ライブラリの追加

モータードライバにTMC2208を使用する場合、「Arduino IDE」でライブラリを追加しておく必要がある。

具体的には、Arduino IDEで「ツール」→「ライブラリをインクルード」→「ライブラリを管理」の順に選択し、

ライブラリマネージャ」が立ち上がったら、「TMC2208」で検索し、見つかったライブラリをインストールする。

ファームウェアの編集

「Configuration.h」と「Configuration_adv.h」の2つのファイルを編集する。

「Configuration.h」の変更箇所

まずは、「Configuration.h」の変更箇所を示す。

ちなみに以下全て、

  • 変更前:赤
  • 変更後:緑

となっている。

ボード名の設定
#define MOTHERBOARD BOARD_MELZI_CREALITY

#define MOTHERBOARD BOARD_MKS_GEN_L
Zリミットスイッチの設定

オートレベリングを使用しない場合、この変更を行う必要はない。

//#define ENDSTOPPULLUP_ZMIN_PROBE

#define ENDSTOPPULLUP_ZMIN_PROBE
#define MIN_SOFTWARE_ENDSTOP_Z

//#define MIN_SOFTWARE_ENDSTOP_Z
モータードライバの設定
//#define X_DRIVER_TYPE  A4988
//#define Y_DRIVER_TYPE  A4988
//#define Z_DRIVER_TYPE  A4988
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define E0_DRIVER_TYPE A4988

#define X_DRIVER_TYPE  TMC2208_STANDALONE //A4988
#define Y_DRIVER_TYPE  TMC2208_STANDALONE //A4988
#define Z_DRIVER_TYPE  TMC2208_STANDALONE //A4988
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE TMC2208_STANDALONE //A4988
オートレベリングの設定

オートレベリングを使用しない場合、この変更は必要ない。

なお、ここではオートレベリング用のセンサーにBLTouch(コピー品含む)を使用し、オートレベリングの方式として、Unified Bed Leveling(UBL)を選択した場合の設定となっている。

//#define BLTOUCH
#if ENABLED(BLTOUCH)
  //#define BLTOUCH_DELAY 375   // (ms) Enable and increase if needed
#endif

#define BLTOUCH
#if ENABLED(BLTOUCH)
  #define BLTOUCH_DELAY 375   // (ms) Enable and increase if needed
#endif
#define X_PROBE_OFFSET_FROM_EXTRUDER 10
#define Y_PROBE_OFFSET_FROM_EXTRUDER 10

#define X_PROBE_OFFSET_FROM_EXTRUDER -44 //10
#define Y_PROBE_OFFSET_FROM_EXTRUDER -14 //10
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING
//#define RESTORE_LEVELING_AFTER_G28

#define RESTORE_LEVELING_AFTER_G28

これは「G26 P10」実行時の設定で、ノズルサイズやレイヤーの高さのほか、使用するフィラメントに合わせてノズルとベッドの温度を設定する必要がある。

//#define G26_MESH_VALIDATION

#define G26_MESH_VALIDATION

ガラス板やビルドシートなどをベッド上にクリップ留めしている場合、ここの値を大きめに設定しておかないと、クリップ留めしている部分までレベリングの範囲に含まれてしまう。

ベッド上をすべてレベリング範囲として設定したい場合には、ここの値を変更する必要はない。

Zセーフホーミング
//#define Z_SAFE_HOMING

#define Z_SAFE_HOMING
ディスプレイの設定

この設定はリボンケーブル2本運用時のもので、1本で運用する場合には必要ない。

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define CR10_STOCKDISPLAY

//#define CR10_STOCKDISPLAY
サーボの設定
#define NUM_SERVOS 3

#define NUM_SERVOS 1 //3

「Configuration_adv.h」の変更箇所

次に、「Configuration_adv.h」の変更箇所を示す。

ホットエンド用ファンの設定
#define E0_AUTO_FAN_PIN -1

#define E0_AUTO_FAN_PIN 7 //-1

なお、「#define EXTRUDER_AUTO_FAN_TEMPERATURE」により、ファンが回転し始める温度を設定することができる(ここではデフォルトの50℃のままにしている)。

ベイビーステップの設定
#define BABYSTEP_MULTIPLICATOR 1

#define BABYSTEP_MULTIPLICATOR 10 //1

ファームウェアの書き込み

ツール」→「ボード」→「ボードマネージャー」の順に選択し、以下のとおりに設定する。

  • ボード:Sanguino
  • プロセッサ:ATmega 1284 or ATmega 1284P (16MHz)
  • シリアルポート:ボードをつないだポート
  • 書込装置:AVRISP mkII

設定が終わったら、画面左上にある➡マークをクリックして、ファームウェアを書き込む。

しばらく待つと、書き込みが完了する。

まとめ

  • Ender-3のボードを交換した。
  • モータードライバをTMC2208にした。
  • モーターの動作音が劇的に小さくなった。