FLY-SB2040を導入してみました. VORONに限らずごちゃっとしがちなツールヘッド~メインボード間の配線を電源線とCAN通信(CANbus)線の4本に置き換えられる基板です.
CANbusに対応した基板は複数のメーカーから何種類か出ており,主に押出機の背面に取り付けるものが多いようです. FLY-SB2040はSBの名の通りStealthburner向けに最適化されていて, 付属の専用基板で冷却ファンやNeoPixelなども扱えるようになっています.
配線
主にPHコネクタで接続します. ホットエンドヒータはそのまま接続できます(Trianglelab CHCの場合).
X軸リミットスイッチ | GPIO29(2ピン エンドストップポート) |
Y軸リミットスイッチ | GPIO28(3ピン エンドストップポート) |
プローブ(TL-Q5MC2) | GPIO25(3ピン HVエンドストップポート) |
TEMP(サーミスタ) | GPIO27 |
HEAT(ホットエンドヒータ) | GPIO6 |
Eモータ | GPIO7~10 |
CANbus | GPIO4(RX), 5(TX) |
この他にもCANbusの終端抵抗ジャンパや, 必要に応じてPT1000用の1kΩジャンパを取り付けます. 特に終端抵抗は必ず取り付けてください.
配線長はいい感じに最適化してください. (投げやり)
ちなみにXYリミットスイッチはこのような基板を自作しました.
ファームの書き込み
今回はU2C(USB to CANbus変換)基板を使わずにBTT Octopusをブリッジにします. したがって通常のKlipperファームビルドとは少し異なります.
$ cd ~/klipper
$ make menuconfig
[*] Enable extra low-level configuration options
Micro-controller Architecture (STMicroelectronics STM32) --->
Processor model (STM32F446) --->
Bootloader offset (32KiB bootloader) --->
Clock Reference (12 MHz crystal) --->
Communication interface (USB to CAN bus bridge (USB on PA11/PA12)) --->
CAN bus interface (CAN bus (on PD0/PD1)) --->
USB ids --->
[*] USB serial number from CHIPID
(1000000) CAN bus speed
() GPIO pins to set at micro-controller startup // 使用しません
QキーとYキーでメニューを閉じます
先程ビルドしたbinファイルをMainsail/Fluidd UIからダウンロードして「firmware.bin」にリネームし, SDカードへ入れてOctopusを再起動します.
$ make -j`nproc`
$ cp ./out/klipper.bin ~/printer_data/config/klipper_octopus_canbridge.bin
ここでOctopusのUUIDを取得します
$ python3 ~/klipper/lib/canboot/flash_can.py -q
printer.cfgを開き, mcuセクションの
[mcu]
serial: /dev/serial/by-id/*******
を
[mcu]
canbus_uuid: 先程取得したUUID
に変更してKlipperを再起動します.
fly-sb2040のブートローダを書き込む
基板右端のBOOTボタンを押しながらFLY-SB2040にUSBケーブルを接続します. lsusbでシステムから見えているか確認します.
$ lsusb | grep Rasp
Bus 001 Device 008: ID 2e8a:0003 Raspberry Pi RP2 Boot
続いてCanBootのコンパイルに進みます. CANbusビットレートはOctopusで指定した1000000bps(1Mbps)にします. なおこの後にLinux側でインタフェースを定義する際にもビットレートを指定する項目がありますが, Klipper側から無視されるようですので同じ値を指定しておくことをおすすめします.
$ git clone https://github.com/Arksine/CanBoot
$ cd ~/CanBoot
$ make menuconfig
Micro-controller Architecture (Raspberry Pi RP2040) --->
Flash chip (W25Q080 with CLKDIV 2) --->
Build CanBoot deployment application (Do not build) --->
Communication interface (CAN bus) --->
(4) CAN RX gpio number
(5) CAN TX gpio number
(1000000) CAN bus speed
() GPIO pins to set on bootloader entry // 使用しません
[*] Support bootloader entry on rapid double click of reset button
[ ] Enable bootloader entry on button (or gpio) state // 使用しません
[*] Enable Status LED
(gpio24) Status LED GPIO Pin
$ make -j`nproc`
$ make flash FLASH_DEVICE=2e8a:0003
書き込みが終わったら一度電源を切り, CANインタフェースの定義をします.
sudo nano /etc/network/interfaces.d/can0
allow-hotplug can0
iface can0 can static
bitrate 1000000
up ifconfig $IFACE txqueuelen 128
もう一度BOOTボタンを押しながら電源を入れます.
$ python3 ~/klipper/lib/canboot/flash_can.py -q
を実行し
Detected UUID: xxxxxxxxxxxx, Application: CanBoot
Query Complete
UUIDが表示されたらコピーして控えておきます
FLY-SB2040にKlipperを書き込む
Klipperのディレクトリに戻り, 再度コンパイルします
$ cd ../klipper
$ make clean
$ make menuconfig
[*] Enable extra low-level configuration options
Micro-controller Architecture (Raspberry Pi RP2040) --->
Bootloader offset (No bootloader) --->
Flash chip (W25Q080 with CLKDIV 2) --->
Communication interface (CAN bus) --->
(4) CAN RX gpio number
(5) CAN TX gpio number
(1000000) CAN bus speed
(gpio24) GPIO pins to set at micro-controller startup
※「[sb2040-uuid]」は先程コピーしておいたUUIDを入力します.
$ make -j`nproc`
python3 ~/klipper/lib/canboot/flash_can.py -i can0 -f ~/klipper/out/klipper.bin -u [sb2040-uuid]
最後にprinter.cfgへ新たにmcuを追加します.
[mcu sb2040]
canbus_uuid: [sb2040-uuid]
参考
Install CanBoot on SB2040 – Voron 2 – Questions – Team FDM
CanBoot uses – Fly Klipper Docs
たぶん随時更新します