CANbus基板 SB2040で配線をシンプルにする


FLY-SB2040を導入してみました. VORONに限らずごちゃっとしがちなツールヘッド~メインボード間の配線を電源線とCAN通信(CANbus)線の4本に置き換えられる基板です.

Mellow Fly-SB2040 V1 Board For Voron 2.4 R2 Trident Stealthburner CW2 Extruder Klipper Hotend Canbus HeadTool Usb PT1000 – 3d Printer Parts & Accessories – AliExpress

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

たぶん随時更新します


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です