Klipper firmwareインストール(アップデート)覚書

3Dプリンター
記事内に広告やアフィリエイトリンクが含まれています。これらのリンクから商品を購入すると売り上げの一部が管理人に還元され今後の活動の助けになります。

調子よく動いていたSnakeOil-XYですが庫内温度が55℃位(温度計は天板から20cm位下、ファーストレイヤープリント時のベッドよりちょい下)まで上がっているとフィラメントの押し出しがおかしくなったり、z-offsetが狂いまくる(アルミフレームの伸び?)のでBTT EBB36からBTT EBB36 GEN2に変えてみました。

最近は自作系は下火だと思うので参考になるケースは少ないでしょうが自分のための覚書として残しておきます。

スポンサーリンク

CAN接続からUSB接続へ

EBB36 GEN2へ変えたものの結局ABS-GFでプリントテストしているとEBB36 GEN2の接続が切れプリントが止まってしまうことが何度かありました。

つまりはまぁ交換前より悪化しているわけで原因を探ります。
あやしいのはツールヘッドに付けるコネクタが大きすぎる事、XT30 (2+2)というコネクタですがコネクタの上に断線を防ぐためかノイズ除去かわかりませんがコネクタより大きなパーツが付いていてコネクタ周りが大きすぎてケーブルが天井や周りに当たってしまう事、あとはファームウェアのバージョンがズレている事でした。
コネクタは注文したのでとりあえずファームを揃えます。
SnakeOil-XYはBTT Octopus Pro V1.0(F429)、BTT EBB36 GEN2、ラズパイにklipperファームが入っています。

ラズパイに入れるとラズパイのGPIOをklipperから使えるようになります、庫内温度を測る温度計にi2cを使うので入れています。

ラズパイで動かしているメインのKlipperのバージョンは0.13 今回入れたEBB36 GEN2のファームは0.13、Octopus proとラズパイのファームは0.12でした。
今回入れたEBB36 GEN2はUSB接続、Octopus proはCAN接続のためそれも併せてUSBにしようと思います。

CAN接続とUSB接続の違い

最初に入れていたEBB36 GEN1を使う場合CAN接続が一般的でしたがCANは設定が面倒で今となってはメリットが少ないのでUSB接続をお勧めします。
GEN1はメインのポートがCAN、USBもファームウェアを入れるためにType-Cの端子付いてるけどそのままでは接触不良が起こりやすく工夫が必要でした。

ちなみにCANというかEBB36等のツールヘッド用ボードを使わない場合はメインのMCUからプリントヘッドへ必要本数分のケーブルを配線することになります、モーターで4本、ノズルヒーター2本、サーミスター2本、ファンが2つで4本、Xエンドスイッチで2本などで何か追加しようとするたびその配線をMCUから配線し直す必要があります、ツールヘッドボードを使うとMCUからツールヘッドまでの配線が4本もしくは6本で済むようになります(ツールヘッドからの配線は別途必要ですが非常に楽になります)。

CAN接続のメリット

  • デイジーチェーン接続(数珠繋ぎ)ができる
  • ノイズに強い
  • ケーブルが24v+/- CAN H/Lの4本で済む

CAN接続のデメリット

  • CANのセッティングが複雑
  • 通信速度がUSBに比べて遅い

USB接続のメリット

  • セッティングが簡単
  • 通信速度が速い
  • GEN2の場合ケーブルが24v+/- USB D+/-の4本で済む

USB接続のデメリット

  • ノイズに弱い
  • EBB36 GEN1の場合24v+/-と  USB 5v +/- D+/-の4本が必要
  • 接続を増やすときハブが必要(GEN2はハブ内蔵らしい)

ざっくりとこんな感じです、まだまだあったら教えてください。
CANは最初の設定がとにかく面倒で推奨はありますが自分で通信速度や帯域を決め、問題が出れば設定変更にファームを焼き直す必要が有りそこでつまづく人がほとんどです。
対してUSBだとファームを焼くことが出来てls /dev/serial/by-id/*でIDがわかればそれだけで接続することが出来ます。

ファームを焼く

Katapultとは??

CANでもUSBでもklipperをMCU(EBBやOctopus)に焼く前にKatapultというものを焼きます。
Katapultを焼いてからKlipperを焼くので焼き直すの?となり何のためにしているのかよく分かってませんでしたがKatapultはBootloaderなのだそうです、Windowsで言うとOSが起動する前に立ち上がるUEFI(旧BIOS)がファームウェアこれがklipper Firmwareで、さらに前に立ち上がるのがBootloaderつまりKatapultです。

通常MCUにファームウェアを焼くためにはDFUモードというファームを焼くことが出来る状態にしてやる必要が有ります、基本的にはBootピンにジャンパー刺したりとボードを触ってDFUモードにします。
Katapultを入れることによりその工程をスキップしてファームを焼くことが出来ます。
一度焼いておしまいなら直接Klipperを焼いても良いんですがアップデートした際MCUのファームとのバージョンが離れてくると入れ直しが必要になります。
3DプリンターにもよりますがMCUが底面についていたりするのでKatapultを入れておくとその時かなり楽が出来ます。

ただまぁ焼き直すころにはファームの焼き方をすっかり忘れているので最初から調べ直しですね…

KatapultにはUSBやCANなどの接続方式についての設定も入っているためKatapultの焼き直しからスタートです。

Katapultは元々はCanBootという名前でしたがUSBにもUARTにも使えるという事で名称変更になったようです。

Katapultの準備

まずはラズパイにkatapultを入れます。
MacでやったのでMacでのやり方になります。
ターミナルを開きSSHでラズパイに接続してから下記コマンドでKatapultを入れます。

cd ~/
git clone https://github.com/Arksine/katapult

git cloneでラズパイの~/katapult/にkatapultの最新版がダウンロードされます。
すでにKatapultを入れていて今回のようにkatapultを焼き直す場合最新版を下記コマンドでダウンロードし直します。

cd ~/katapult/
git pull

これだけでgithubから最新版との差分がダウンロードされます。

katapultの焼き込み(DFUモードで焼き込み)

BTT Octopus Pro V1.0の場合

cd ~/katapult/⁠
make clean
make menuconfig

ここで3行目にある「Build Katapult deployment application (32KiB bootloader)」が Katapultが使用する領域です。

一番下のEnable Status LEDにカーソルを合わせスペースを押すとチェックが付きGPIO Pinを指定できます、ココでLEDを指定しておくとDFUモードに入った時にLEDが点滅したりしてモードの確認が簡単になります、なりますがKatapultを入れておけばDFUモードにするのはKatapultを焼きなおす時くらいなのであんまり意味がないかもしれません。

make 

コマンドを実行したあとしばらくすると処理が終わります、終わったらターミナルを別ウィンドウで新しく開いてラズパイからファームをMacへダウンロードします。

scp pi@snakeoil.local:~/katapult/out/katapult.bin ~/

PCとUSBでOctopusProを繋ぎDFUモードにする USBBoot とBoot0にジャンパー接続

右リセットボタンダブルクリック等

MacとOctopus ProをUSBで繋ぎSTM32CubeProgrammerで接続してKatapultを焼く
接続できないときはUSBのポートを変えるなり試してみてください、Octopus Pro V1.0はDFUモードに入りにくいことがあるので何度も試すしかないようです。

STM32CubeProgrammer

最初DFUモードに入らずSDカードにファームを入れて焼こうとしましたが何故かSDでは焼けなかったのでSTM32CubeProgrammerで焼くことにしました。

EBB36はラズパイから繋いでDFUモードでKatapult焼けますがOctopus ProはSTM32CubeProgrammerを使います。

ここでは詳細は省略させてもらいます。

EBB36 GEN1 & GEN2の場合

cd ~/katapult/⁠
make clean
make menuconfig

リセットボタンとBootボタンを両方推して、先にリセットボタンを離してDFUモードで起動ラズパイから焼きます、EBB36はOctopus Pro V1.0と違いまだDFUモードに入りやすいですが、たまに失敗するのでDFUモードで接続できない場合は何度かボタンの下りを試してください。

make 
lsusb

makeでkatapult.binを作成します。DFUモードで起動していればlsusbを実行した時にUSBデバイスのリストが出るのですが、そこにSTM Device in DFU Modeというものが出ます。
この行のIDを下記の様に入れますBTTのデバイスであれば0483:df11になっていると思います。

make flash FLASH_DEVICE=0483:df11

File downloaded successfullyと出ればその後にErrorが出ていても問題なく焼けています。

これもよく分からずにエラーコードを調べたりしていました。

ls /dev/serial/by-id/*

このコマンドで下記の様に出ていればkatapultで焼けているのが確認できます。

/dev/serial/by-id/usb-katapult_stm32g0b1xx_420007000F504D4D37393820-if00

lsusbで出てきたのはVendor IDなのでBTTやMellowで共通ですがそれだと同じVendorの製品を複数使うとIDが被るので製品ごとのIDもあり、最近はさらに被らないようにこのような桁数の多いものが用意されています。

make コマンドの説明

make menuconfig

MCUに合わせた設定ファイルを作成します。

MCUが使っているコントローラーやメインのチップ、クロックなどを指定します。

make clean

前回makeした際のゴミを消去します。
消去しないと前回の物が混ざったファームが作成されるので毎回make前にこのコマンドで削除します。

make

make menuconfigで指定した通りのファームを準備します。

make flash FLASH_DEVICE=******************

make flash でKatapult(場合によってはklipper)を焼きます。

ちなみにcdはチェンジディレクトリ (change directory) の略です。
cd ~/ はユーザーのHomeディレクトリへの移動という意味になります。

Klipperの準備

cd ~/
git clone https://github.com/Klipper3d/klipper

このコマンドでklipperが~/klipper/に入ります。
katapultと同じように下記コマンドで最新版がダウンロードできます。

cd ~/klipper/
git pull

Klipperの焼き込み

準備

cd ~/klipper/⁠
git pull
make menuconfig

Katapult使用時はBootloader offsetが必要です、せっかく焼いたkatapultを消さないようにBootloaderをkatapult分避けて焼きます。
オフセットしないと上書きしてしまうのでkatapultから焼き直す羽目になります。

menuconfigは下記の様に設定しました。別のMCUの場合はメーカーのgithubなどを参考に入れてください。場合によってはesotericalに設定一覧があると思います。
esotericalは基本CANでインストールしているのでそちらを見た場合はCommunication interfaceだけUSBに置き換えて設定してください。

BTT Octopus Pro V1.0

4行目の「Bootloader offset (32KiB bootloader)」が先ほどKatapultを焼いている領域なのでKatapult分避けてKlipper Firmwareを焼いてねという指示です。なのでKatapultを焼いていない場合このBootloader offsetは不要です。

EBB36 GEN1 & GEN2

Qを押してmenuconfigを抜けてYで保存します。

klipperをMCUに焼く

katapultが入っている環境だとDFUモードに入らずに焼くことができます。

make clean
make
ls /dev/serial/by-id/*

下記の様なIDがでるのでFLASH_DEVICE=の後を実際に出たものに置き換えます。

/dev/serial/by-id/usb-katapult_stm32g0b1xx_420007000F504D4D37393820-if00

FLASH_DEVICE=の後を実際に出たものに置き換えてください。

make flash FLASH_DEVICE=/dev/serial/by-id/usb-katapult_stm32g0b1xx_420007000F504D4D37393820-if00

もう一度確認すると先ほどまでusb-katapult_~となっていた部分がusb-klipper_~になって後ろの数字も変わっていると思います。

出た値をどこかにコピーしておいてください。

ls /dev/serial/by-id/*

ラズパイへKlipperを焼く

下記ページを参考にラズパイにKlipperファームを入れます。
https://www.klipper3d.org/RPi_microcontroller.html

Klipper をインストールした後、スクリプトをインストールします。

cd ~/klipper/
sudo cp ./scripts/klipper-mcu.service /etc/systemd/system/
sudo systemctl enable klipper-mcu.service

Klipper マイクロコントローラ コードをコンパイルするには、まず「Linux Process」用に設定します。

cd ~/klipper/
make menuconfig

メニューで、「Micro-controller Architecture」を「Linux Process」に設定し、qでメニューをぬけYで保存します。

一度klipperを停止しファームを焼いてklipperを再開します。 make flashだけで焼けるのが特徴的ですね。

sudo service klipper stop
make flash
sudo service klipper start

接続時にklippy.logに「Permission denied」エラーが表示される場合は、/tmp/klipper_host_mcuユーザーをttyグループに追加する必要があります。以下のコマンドを実行すると、「pi」ユーザーがttyグループに追加されます。

sudo usermod -a -G tty pi

まとめ

これで一通りの作業は終了です。

あとは下記コマンドで出たIDをprinter.cfgに入れると接続できます。ラズパイだけ自分自身への接続なので特殊ですね。

ls /dev/serial/by-id/*

Printer.cfg

各mcuへの接続は下記の様に書きます、CANのようにcanbus_uuid: ではなくserial:で書きます。

[mcu]
serial:/dev/serial/by-id/usb-Klipper_stm32f429xx_0D0020001647323037343634-if00
[mcu EBB]
serial:/dev/serial/by-id/usb-Klipper_stm32g0b1xx_3C000D000450315741363420-if00
[mcu rpi]
serial: /tmp/klipper_host_mcu

klipperファームをアップデートする際はgit pullしてからmakeしていけば大丈夫です。

cd ~/klipper/
git pull
make clean
make menuconfig
make
ls /dev/serial/by-id/*
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32f429xx_0D0020001647323037343634-if00

個人的に苦労したのはやはりDFUモードに入れないOctopus Proの問題です。
DFUでkatapultを焼いた後もまたDFUに入らないといけないと思い込んだせいもあって時間がかかりましたが今回やってその辺りが判明したのでよかったです、次アップデートする時も怖くないですね多分。

ちなみにEBB36 GEN1でUSB接続するための工夫ですが、type-CのコネクタだけをAliexpressで買ってDAISOで買ったUSBケーブルに移植しました。そのあとType-Cが接触不良にならないように固まるシリコンでがっちり固めて完成です。
これでUSBケーブルが飛び出さないのでヘッドが動いても降られにくい接続が完成しました、かなり良い感じです。

まぁこの後トラブルに遭遇して1週間ほどロスするんですがそれはまた次回…

コメント

タイトルとURLをコピーしました