3D プリンタのプログラミング(修理)

色々な部品やケースの製作に便利に使っていた 3D プリンタが壊れました。
プリントしても、指でつまむと壊れるほどスカスカな出来上がりです。

こういう時は、ヘッド部の目詰まりが原因なのでヘッド先端部を交換すると治ります。
しかし、今回はそれでも状況は変わらず、さらにヘッドのユニットごと交換しましたが改善しません。
その語、ヒートベットに定着もできなくなり、悪循環が続きました。

今回は、調子の悪くなった 3D プリンタのファームウエアを書き換えて、正常動作に戻します。

故障の状態

今までも 3D プリンタは細かな故障が起きたので、そのたびに色々と解決してきましたが、今回は少し違うようです。
そのうち「今回の不具合は、ヘッド部へ押し出されるフィラメントの量が、極端に減っている状態に似ているかも?」と気づきました。

FDM(プラスチックを熱で溶かして積層する形式)の 3D プリンタは、材料のフィラメントをモータで押し出し、ヘッド部分を加熱して溶かすことでプリントします。
この押し出す量は簡単に調整できます。

3D プリンタは、G-code と呼ばれるコード(テキスト形式)で制御されています。
例えば、「M503」を送るとプリンタの設置値が表示されます。

色々なコードがありますが「M92」を使うと、左・右・上下の動作設定値の「X.Y.Z」以外に、押出量の「E」の値を調整できます。
細かな説明は省きますが、(ヘッド部を加熱した後に)E のモータでフィラメントを 10 cm 送るコードを送信して、実際に出てきたフィラメントの長さで調整します。(「G1 E100 F100」を送信)

以前、フィラメントを押し出す部分を改造・交換した後に、調整した値が残っていました。
「M92 X80.0 Y80.0 Z400.0 E429.0」でした。

遠い記憶ですが、標準状態の「E」の値は 200 位だった?ので、設定した値が標準値以下に戻っていたら押し出される材料の量が半分以下になっている計算なので、スカスカになる状態も理解できます。

早速、再設定のためにパソコンを USB ケーブルで 3D プリンタに接続します。
3D プリンタ用のソフトを立ち上げて応答を見てみます。

通信エラーでつながりません。
あれ?そういえば、3D プリンタが調子よく動いていたので、何年も USB ケーブルでつないだ記憶がないなぁ。
接続速度が間違っている?

ターミナルソフトで直接つないで見てみます。
色々と通信速度を変えてみても、文字化けみたいな表示になります。

これは、制御ボードが壊れているか、ファームウエアに異常がありそうです。

使用している 3D プリンタ

現在使用している 3D プリンタは、AnyCubic 社の「I3 Mega」です。
多分、2019年ごろに購入しました。

もう5年以上前の商品なので最新式の物と比較すると、
・自動レベル調整がない
・動作音(特にファンとサーボモータの音)がうるさい
・プリント速度が遅い

という欠点だらけに見えますが、
・非常に頑丈な構造で簡単にはズレないので、調整の必要を感じない
・静かなファンに交換し、サーボモータのドライバ基板も変えれば静かになる
ので、動作が遅いことを除けば、今でも満足な性能です。

それよりも、5年以上壊れずに便利に使えている基本性能に満足しています。

使用している制御基板

3D プリンタをひっくり返して裏板を外して、I3 Mega の制御基板を確認します。

裏板を開いて思い出しましたが、モータ制御基板の交換や冷却ファンの追加など、中身も色々と改造していました。
問題の制御基板は左上側に見えます。
(電源部を封印する黄色いシールが切れているので、多分、電源の冷却ファンも交換したのかな?)

制御基板の写真です。
ゴリラのマークが目印の「TriGoRiLLa」が使われています。

製造会社の HP より引用(電源部のコネクタの色が違います。)

ネットで調べてみると、この基板は 3D プリンタを制御するために電源とモータの制御回路が載っていますが、中身は MCU に ATmega2560 を使用した「Arduino Mega2560」互換機のようです。

この基板(少なくとも I3 Mega)のブートローダは Arduino と同じで、制御プログラムも Arduino IDE で開ける「ino」形式でした。(今まで5年以上使ってきて、今気づきました。)

それなら簡単です。
早速、ファームウエアを探して、書き換えてみます。

ブートローダの書き換え

これで改善するとは思いませんが、一応、確認のためにブートローダを書き換えてみます。
余っている Arduino UNO 互換機をプログラマに書き換えて、3D プリンタの制御基板とつなぎます。

Arduino のブートローダの書き込み方の細部は、下のリンクをご覧ください。
(書き込み対象は、Arduino UNO ではなく「Arduino Mega2560」を選んでください。)

制御基板の接続場所(ISP 端子)は、この向きで右上が1番ピン、左下が6番ピンです。

制御基板の接続

制御基板にプログラマに書き換えた Arduino UNO をつなぎます。
制御基板の該当端子にはピン番号が書いてありますが、外部から電圧を加えるので、最低でもグランドとピン 6 がつながっているか確認しておきます。

Trigorilla ISP ピンArduino UNO ピン
112
25V
313
411
510
6GND

ブートローダの書き込み

接続も簡単だったので、一発で簡単にフブートローダの書き換え(上書き?)が出来ました。
3D プリンタの電源を落として、USB 接続の確認をしてみます。

少しは期待していましたが、この手順では USB の通信エラーは治りませんでした。
(3D プリンタのソフトは立ち上がるので、ブートローダの異常じゃないですね。)

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

ネットで I3 Mega の最新のファームウエアを探します。
「Marlin_TFT_MEGA_M_V1.1.5.ino.hex」という名前のファイルが見つかりました。
バージョンは 1.1.5 です。

そして、現在のファームウエアのバージョンを確認します。
1.1.0 ですね。
あれ?遠い記憶では最新版に更新していたはずなのに、古いバージョンでした。
ちょうど良い機会なので、最新式にバージョンアップしましょう。

ファームウエアのバージョンアップ方法を調べます。

公式の HP では、こんなことが書かれています。
「USB ケーブルで接続して、バージョンアップを行う。」

えっ?ファームウエアに異常があって USB 接続が出来ないのに、USB 接続でバージョンアップしろと?!
他の方法がないか調べます。

書き換えの方法

数年前なら、USB でつながらないとファームウエアの書き換えが出来ないと、あきらめてしまうところでしたが、Arduino UNO で色々なガジェットを作った経験が、こんなところで生きてきました。

ブートローダの書き換えは出来たので、最低でも USB シリアル回路以外の制御基板は生きているでしょう。
ファームウエアの書き換えは、Arduino IDE からプログラム(スケッチ)を書き換えるのと同じ手順で出来ます。

ところが、ファームウエアの書き換えは、ブートローダのように Arduino IDE からは出来ません。
接続方法は同じですが、ソフトウエアは avrdude を使います。

実は、Arduino IDE のフォルダには avrdude が入っていて、Arduino IDE はコンパイルしたバイナリを、このソフトを呼び出して対象の MCU に書き込んでいるので、Arduino IDE v.3 では メニュー内に「hex ファイルの書き込み」的なオプションが追加されることを期待します。

とりあえず、最新版の avrdude を探します。

avrdude を使用

作業時点での最新版は、GitHub にある avrdude V.8.1 でした。
これを入手します。

実際に実行形式が置いてあるページは、「Releases」です。
Windows パソコンで使うプログラム形式は、「avrdude-8.1.zip」ではなく「avrdude-v8.1-windows-x64.zip」をダウンロードします。
この圧縮ファイル内で使用するのは「avrdude.exe」とテキスト形式の設定ファイル「avrdude.conf」です。
回答したファイルを、適当な名前(日本語以外)のフォルダ(今回は「\data\I3 Mega」)に入れておきます。

そのフォルダに 3D プリンタのファームウエア(Marlin_TFT_MEGA_M_V1.1.5.ino.hex)も置いておきます。

それでは、久々に Windows のコマンドプロンプトで、CUI を使います。

C:\data\I3 Mega>avrdude -b 1152200 -c avrisp -P COM9 -p m2560 -U flash:w:Marlin_TFT_MEGA_M_V1.1.5.ino.hex

それぞれのオプションです。
-b : 通信速度
-c : 書き込み装置、今回は Arduino UNO を ISP として使うので「avrisp」
-P : パソコンが Arduino UNO を認識した COM ポート番号
-p : 対象 MCU(今回は M2569)
-U flash:w: 書き込むファイル名

書き込んでみますが、正常に書き込めません。
色々とやってみますがダメですね。
作業部屋のパソコンは ubuntu(Linux)なので、Linux 版の avrdude でも試してみましたが書き込みが成功しません。
USB ケーブルを交換したり、オプションを色々と変えてみましたが成功しません。

少し頭を冷やします。

書き込み成功

ネットで色々と調べてみると、I3 MEGA ではありませんが、海外で 3D プリンタの制御基板に avrdude を使って書き込む方法を紹介していました。
その中では、英語で「必ず通信速度は 19200 にすること」と書いてありました。
(MCU への書き込みに速度制限があるの?)

半信半疑で言われたとおりに「-b 19200」に書き換えて、再度実行してみます。

C:\data\I3 Mega>avrdude -b 19200 -c avrisp -P COM9 -p m2560 -U flash:w:Marlin_TFT_MEGA_M_V1.1.5.ino.hex

今までの苦労が嘘のように、ファームウエアの書き換えが成功しました。
成功すると、こんな感じの表示が返ってきました。

Reading 110294 bytes for flash from input file Marlin_TFT_MEGA_M_V1.1.5.ino.hex
Writing 110294 bytes to flash
Writing | ################################################## | 100% 103.93 s
Reading | ################################################## | 100% 61.88 s
110294 bytes of flash verified

Avrdude done.  Thank you.

動作確認

3D プリンタの電源を入れて、バージョンを確認してみます。
あれ?1.1.5 の書き換えが成功したのに、バージョンの数字がそのままです。

そして、USB ケーブルでパソコンに接続しましたが、接続エラーも解消しません。
落ち込みますね。

色々なバージョンや改造ファームウエアを試してみましたが、症状は同じでした。

画面のバージョン

ネットで I3 MEGA のバージョンアップ後の画像を調べたら、同じような症状が確認できました。
どうやら、情報画面の2行目に表示されるバージョンは、ディスプレイ用のファームウエアで制御基板の物ではないようです。
(納得できませんが、そういうものらしいです。)

フィラメント排出量の設定

3D プリンタでは、USB ケーブルで接続して G-code を送ることで色々と細かな設定をすることが出来ます。
フィラメントを送る量も G-code の「M92」を書き換えて(その後記憶させる)ことで調整できます。

ところが、現在は USB で接続することが出来ません。
行き詰ってしまいました。

数日、3D プリンタの事は横に置いておいて他の事をやっている時に、ふと思い出しました。
3D データを 3D プリンタで出力する時は、スライサ・ソフト(Cura を使っています。)で G-code に変換します。
その時に、Cura の設定画面で毎回行う特別な G-code を設定できます。

下の画面の「Start G-code」に書かれている命令が、毎回プリントする時に自動実行されます。
「そうだ、USB で接続できないなら、ここでプリント用の G-code に毎回組み込めば良いのでは?」

早速やってみます。
左下の枠内に、「M92 X80.0 Y80.0 Z400.0 E429.0」を追記します。
この状態で、Cura で 3D データを変換したものを 3D プリンタへ持ってきます。

そして、簡単なデータでテスト・プリントを行うと・・・
正常に出力できました。
これで、しばらくは I3 MEGA を使用できそうです。

今後の予定

プリントする 3D データは、毎回 SD カードで持ってきていたので、手順的には変わりません。
プリンタのファームウエアのバージョンアップも、古い製品なので、これ以上更新されることはないでしょう。

そのため、思ったよりも USB ケーブルでパソコンとつながらないことに不便は感じません。
しかし、これ以上の故障が起こった場合には、どのように修理するか悩みます。

例えば、制御基板を交換する方法がありますが、これ以上古い機材に手をかけるのはどうかなぁ?
制御基板は「Arduino Mega2560」とほぼ同じなので、USB シリアル変換部をジャンパして市販基板に接続すれば解決しそうですが・・・

この 3D プリンタは5年以上前の機材なので、前回行った電子工作用のブレッドボードの出力に8時間以上かかったので、この 3D プリンタが故障したら、直さずに新しいものに交換かな。

コメント