オートレベリングの導入後、特に不満もなく使ってきた3Dプリンタ(ANYCUBIC i3 Mega-S)だが、動画サイトに見る3Dプリンタに比べ、動作音の大きいことが気になりだした。そこでモータードライバを TMC2208 に交換した。結果は効果絶大で、別物と思えるほど静かな3Dプリンタになった。
TMC2208 について WEB検索してみると、その使い方として、(1) スタントアロンモード(Standalone mode)と (2) UARTモード(Universal Asynchronous Receiver/Transmitter mode)の2種類あることが分かった。
スタンドアロンモードは、あらかじめドライバボードの動作を設定しておき、ソケットに挿されている既存のドライバボードと挿し替えるだけなので、交換は容易である。ファームウェアを変更する必要はあるが、設定ファイルを数行編集するだけだ。ただ、電流値を変更する際は、その都度3Dプリンタの裏蓋を外し、ドライバボードの電圧を計測しながら可変抵抗器を調整するのが面倒である。それと、励磁方式を変えてしまうと元の励磁方式に戻すことができないのが難点だ。
一方、UARTモードは、 Gコードによって励磁方式や電流値を設定することができるので、明らかに使いやすい。しかし、配線を追加し、配線に合わせたファームウェアのビルドが必要になる。
UARTモードによるANICUBIC i3 Mega-S の運用方法をWEB検索してみた。スタンドアロンモードの記事は見つかるものの、UARTモードでの運用記事は見つからない。交換作業は困難を伴うだろうが、運用の利便性を追求してUARTモードで使うことにした。
※ご注意:投稿内容はボードの改造が含まれますので、こちらを一読ください。
UARTに必要なリソース
UART には送受信用に2本のポートが必要である。ANYCUBIC i3 Mega-S には、ステッピングモーターが5個あるのでの、10本のポートが必要になる。さらに、受信ポートにはピン変化割込(PCINT)かハードウェアシリアルが必要である。
TRIGORILLA 上のピン割り当ては下図を参照した。この情報を元に下表のとおりピンを割り当てることにした。
設定するピン割り当て表
コントローラ(TORIGORILLA)の改造
上図 Servo Ports(1) のピンヘッダが付いていないピン(D4・D5・D6・D12)にピンヘッダをハンダ付けする。
ピンD18・D19は図1のとおり HUB(11) のコネクタに接続されており、これをUARTで使用するための改造が必要になる。ライザカードとコントローラを接続するピンのうち Limit Switches(9) の D18・D19 のソケットを外し、ライザカードと縁切りする。
縁切りした端子を別のピンに振り替えるため、ピンヘッダをハンダ付けする。
QIコネクタとリード線で配線を振り替える。
コンデンサーの除去
配線完了後、ピンD66 だけ受信が出来ない現象が生じた。原因を探るため、Arduino MEGA2560 に Marinファームウェアをインストールしてみた。Arduino では通信できたので、TRIGORILLA との違いを追ってみた結果、TRIGORILLA にはピンD66 と GND の間にコンデンサーが接続されていた。コンデンサーが信号を平滑にしているのではないかと考え、ピンD66 に接続されているコンデンサーを除去した結果、通信できるようになった。
TMC2208ドライバボードの改造
下図のとおり、UARTのソケット側のピンを切除する。ソケット側の配線が他のピンと接続されているので、切り離すのが目的である。
TMC2208ドライバボードとTRIGRILLAの配線
TMC2208ドライバボードとTRIGORILLAの配線は下図のとおりである。
送信はダイレクトに、受信は1kΩの抵抗を介して接続を行う。
Marlinファームウェアのビルド
ファームウェアはMarlin Firmwareを使用した。marlinfw.org のダウンロードページから“Marlin-bugfix-2.0.x.zip”と“Configurations-bugfix-2.0.x.zip”ファイルをダウンロードして使用した。設定ファイル“Configuration.h” と “Configuration_adv.h” は “Configurations-bugfix-2.0.x.zip\Configurations-bugfix-2.0.x\config\examples\AnyCubic\i3 Mega” フォルダ下のファイルを用いる。下記のファイルを編集し、platformIO でビルドした。
Configuration.h の編集
26: #define I3MEGA_HAS_BLTOUCH // -> enable
27: #define I3MEGA_HAS_TMC2208 // -> enable
737: #define Z2_MIN_ENDSTOP_INVERTING true // -> add line
762: #define ALL_DRIVERS_TYPE TMC2208 // TMC2208_STANDALONE -> TMC2208
849: #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 60, 10000 } // org.{ 3000, 2000, 60, 10000 }
865: #define DEFAULT_RETRACT_ACCELERATION 2000 // 3000 -> 2000
866: #define DEFAULT_TRAVEL_ACCELERATION 2000 // 3000 -> 2000
1082: #define NOZZLE_TO_PROBE_OFFSET { 0, -22, -2.78 } // { 0, -23, -1.54 } -> { 0, -22, -2.78 }
1134: //#define EXTRA_PROBING 1 // -> commentout
1219: #define INVERT_X_DIR false // true -> false
1220: #define INVERT_Y_DIR true // false -> true
1221: #define INVERT_Z_DIR true // false -> true
1226: #define INVERT_E0_DIR true // false -> true
Configuration_adv.h の編集
2752: // #define MONITOR_DRIVER_STATUS // -> commentout
2767: #define HYBRID_THRESHOLD // -> enable
2849: #define TMC_DEBUG // -> enable
4010: #define PINS_DEBUGGING // -> enable
pins_RAMPS.h の編集
68: #define SERVO0_PIN 4 // 11 -> 4 for BLTouch
72: #define SERVO1_PIN -1 // 6 -> -1
75: #define SERVO2_PIN -1 // 5 -> -1
78: #define SERVO3_PIN -1 // 4 -> -1
102: #define Z_MIN_PIN 20 // 18 -> 20
105: #define Z_MAX_PIN 21 // 19 -> 21
174: #define MAX6675_SS_PIN -1 // 66 -> -1
312: #define X_HARDWARE_SERIAL Serial1 // add line PIN 18,19
319: #define E0_HARDWARE_SERIAL Serial2 // add line PIN 16,17
330: #define X_SERIAL_TX_PIN 18 // 40 -> 18
333: #define X_SERIAL_RX_PIN 19 // 63 -> 19
343: #define Y_SERIAL_TX_PIN 5 // 59 -> 5
346: #define Y_SERIAL_RX_PIN 11 // 64 -> 11
356: #define Z_SERIAL_TX_PIN 6 // 42 -> 6
359: #define Z_SERIAL_RX_PIN 12 // 65 -> 12
362: #define Z2_SERIAL_TX_PIN 37 // -1 -> 37
365: #define Z2_SERIAL_RX_PIN 66 // -1 -> 66 remove Condenser
369: #define E0_SERIAL_TX_PIN 16 // 44 -> 16
372: #define E0_SERIAL_RX_PIN 17 // 66 -> 17
pins_TRIGORILLA_14.h の編集
118: #define FIL_RUNOUT_PIN 21 // 19 -> 21
通信状態の確認
ANYCUBIC i3 Mega-s と PC を USB で接続すると、ターミナルに次のとおりレスポンスがある。着色行のとおり “OK” の表示があれば TORIGORILLA と TMC2208 の通信が正常に行われている。
> start
> Marlin dir bugfix-2.0.8
>
> echo: Last Updated: 2021-05-27 | Author: (none, default config)
> echo:Compiled: May 27 2021
> echo: Free Memory: 1106 PlannerBufferBytes: 1312
> TFT Serial Debug: Main board reset... J17
> TFT Serial Debug: Ready... J12
> TFT Serial Debug: Finished startup
> //action:notification Anycubic i3 Ready.
> echo:V83 stored settings retrieved (789 bytes; crc 23743)
> //action:prompt_end
> Testing X connection... OK
> Testing Y connection... OK
> Testing Z connection... OK
> Testing Z2 connection... OK
> Testing E connection... OK
> echo:SD card ok
TMC2208 がどのように設定されているか詳細を確認するには Gコード M122 を送信する。
M122
> X Y Z Z2 E
> Enabled false false false false false
> Set current 800 800 800 800 800
> RMS current 795 795 795 795 795
> MAX current 1121 1121 1121 1121 1121
> Run current 25/31 25/31 25/31 25/31 25/31
> Hold current 12/31 12/31 12/31 12/31 12/31
> CS actual 12/31 12/31 12/31 12/31 12/31
> PWM scale
> vsense 1=.18 1=.18 1=.18 1=.18 1=.18
> stealthChop true true true true true
> msteps 16 16 16 16 16
> interp true true true true true
> tstep max max max max max
> PWM thresh. 98 98 658 658 65
> [mm/s] 100 100 3 3 30
> OT prewarn false false false false false
> pwm scale sum 14 14 14 14 14
> pwm scale auto 0 0 0 0 0
> pwm offset auto 36 36 36 36 36
> pwm grad auto 14 14 14 14 14
> off time 3 3 3 3 3
> blank time 24 24 24 24 24
> hysteresis
> -end -1 -1 -1 -1 -1
> -start 1 1 1 1 1
> Stallguard thrs
> uStep count 8 8 8 8 8
> DRVSTATUS X Y Z Z2 E
> sg_result
> stst
> olb
> ola
> s2gb
> s2ga
> otpw
> ot
> 157C
> 150C
> 143C
> 120C
> s2vsa
> s2vsb
> Driver registers:
> X 0xC0:0C:00:00
> Y 0xC0:0C:00:00
> Z 0xC0:0C:00:00
> Z2 0xC0:0C:00:00
> E 0xC0:0C:00:00
>
>
> Testing X connection... OK
> Testing Y connection... OK
> Testing Z connection... OK
> Testing Z2 connection... OK
> Testing E connection... OK
> ok
TMC2208 の設定に関わる主な G-code は次のとおり。
M122:ドライバーの現在の設定を返す
M350:マイクロステップの設定
M569:stelthChop と SpreadCycle を切り替え
M906:ステッピング モーターの電流をミリアンペア単位で設定
コメント
Appreciated.