CAN インターフェース
Klipperではホットエンドのヒーター、センサー、E Mortor ,Endstop,ファン等を小さなコントローラーで制御しRasPIとのやり取りをCANインターフェースで行うというものである。これにより結線が4本で済み、可動部分の軽量化、配線の簡素化ができる。
色々と試しているが今のところ、うまくインストール出来たのが RS485CAN HAT と BTT EBB42 の組み合わせである。
追記 インストールの手順を間違わなければ BTT U2C と EBB42,EBB36,EBB SB2809でもインストール出来た。
参考にした動画、およびサイト
Canbus (can bus) - EBB36 / EBB42 Install with Klipper on Core-XY Voron 2.4
https://www.youtube.com/watch?v=jgE3XMM9PBk&list=WL&index=2&t=596s
参考になったサイト
https://maz0r.github.io/klipper_canbus/
下準備 CANBUSケーブルの作成
ケーブルの作成
CANHAT(Pi4)とEBBを繋げるCANBUSケーブルを作成しなけばならない。
私は0.5sqのダブルコードと古いLANケーブルからばらしたツイスト線を使用している。
VORON ステルスバーナー用にEBB SB2209CAN というパーツが販売されたこれには専用のCANケーブルが付属している。
基準クロックを特定する(CANHATのみ)
CAN HAT のクロック チップを見つけて、上から番号を読み取ります。次のステップでこれを知る必要があります。12000と読める。
インストールの手順
ラズパイ CAN HAT の設定
1.CANネットワークの作成
Enable SPI & Serial Interfaces
不足しているオーバーレイを追加する
2.CanBootのインストール
ラズパイにBanBootをインストールする
3.Install Bootloader for the EBB
コンパイルしたファイルをUSB接続したEBBにブートローダーを書き込む。
4.EBBのファームウェアの書き込み
CANHATとEBBをCANBUSケーブルを繋ぎ、EBBのファームウェアを書き込む
といった流れでインストールを行います。
** インストール **
PI にターミナルソフトで入る。
SPI & シリアル インターフェイスを有効にする
インターフェイスの選択
SPI を選択
はいを選択
インターフェイスの選択
シリアルを選択
[終了して再起動する] オプションの両方で [はい] を選択します。
**シリアルを確認してオーバーレイを追加**
シリアル構成を確認する
以下の例のように少し見えるはずです。
console=tty1 console=serial0,115200 root=PARTUUID=8f81106e-02 rootfstype=ext4 fsck.repair=yes rootwait
Ctrl+Xを押して終了します。
最初に この記述が見つからない場合は、上記の何かを見逃しており、 SPI とシリアル インターフェイスを有効にするconsole=tty1 console=serial0で概説されている手順に従う必要があります。
不足しているオーバーレイを追加する
SSH経由で入る
一番最後の[all]の後ろに下記の記述を追加します。
[all]
dtoverlay=pi3-miniuart-bt
enable_uart=1
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
dtoverlay=spi1-1cs
CAN ネットワークを作成する
CAN ネットワークはまだ存在しないため、作成する必要があります。
このタイプを行うには
auto can0
iface can0 can static
bitrate 250000
up ifconfig $IFACE txqueuelen 256
pre-up ip link set can0 type can bitrate 250000
pre-up ip link set can0 txqueuelen 256
Ctrl+を押してXプロンプトに従い、名前を変更せずに保存します。
注意!: CAN ネットワークとツールヘッドが同じビットレートを使用することが重要です!
これで、sudo rebootコマンドを使用して PI を再起動し、CAN0 ネットワークが稼働していることを確認できます。
以下のようなものが表示された場合は、すべて問題なく、ツールボードのフラッシュ/配線に進むことができます。
$ can0: flags=193<UP,RUNNING,NOARP>
$ unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 256 (UNSPEC)
$ RX packets 4 bytes 32 (32.0 B)
$ RX errors 0 dropped 0 overruns 0 frame 0
$ TX packets 4 bytes 32 (32.0 B)
$ TX errors 1 dropped 1 overruns 0 carrier 1 collisions 0
CAN ネットワークのトラブルシューティング
みたいなメッセージはインターフェイスが正しく構成されていないことを示しているため、/etc/network/interfaces.d/can0ファイルを確認する必要があります。
補足 実働状態の時にUSBコネクタの接触不良などでmcuが見つからなくなる時があります。その時は再インストールした方が早いので再インストールするのですが、ここの時点までインストールすると現状復帰出来ます。
ただし、新しいEBBを繋げる場合はこの先のCANBOOTをインストールしなければいけません。
CanBoot ファームウェア ファイルの生成
CanBoot リポジトリを pi にクローンします
cd ~ && git clone https://github.com/Arksine/CanBoot
以下を実行します
cd CanBoot
make menuconfig
STM32G0B1 を使用して EBB 36 / 42 v1.1/v1.2のメイクファイルを構成します
make clean
make
ブートローダーの書き込み
USB経由で電源を供給するためUSB_5Vピンに ジャンパーを追加します。
デバイスを USB 経由で PI に接続します
上記の RESET ボタンと BOOTボタン を長押しします。
リセットボタンを離す
ブートボタンを離す
lsusbを使用して、デバイスがブートローダー モードであることを確認します。
次のようなものが表示されるはずです
Bus 001 Device 005: ID 0483:df11 STMicroelectronics STM Device in DFU Modeここで上記の ID 0483:df11が書き込みのIDになります。
canboot ブートローダをボードにフラッシュします
CANBOOT ファームウェアの消去とフラッシュ
sudo dfu-util -a 0 -D ~/CanBoot/out/canboot.bin --dfuse-address 0x08000000:force:mass-erase:leave -d 0483:df11
注: 上記の後にエラーが表示された場合でも、「ファイルのダウンロードに成功しました」と上記のテキストがあれば問題ありません。
ボードの電源を切り、CANBUS ケーブルを挿入します。
これで、H、L、 24v と GND CANBUSワイヤを使用してツールヘッド ボードを取り付けた状態で、プリンタの電源を入れることができます。
デバイスが起動するのを待ち、CAN0 ネットワークが起動していて、デバイスが見えることを確認します
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
Found canbus_uuid=40a8f263e934, Application: CanBoot
Total 1 uuids found と表示されます。
上記で UUID が得られたと仮定すると、CanBoot を介して Klipper をボードにフラッシュできます…
Qを入力して終了し、選択してY変更を保存します。
ボードをフラッシュできるようになりました
これを確認するには、次のようにcanbus uuidを問い合わせることができます。
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
下記のようなものが表示されるはずです。
"Found canbus_uuid=XXXXXXXXXX, Application: Klipper"
では書き込んでみましょう。下記のコマンドでMYUUIDの部分は上記で確認したIDを入れます。
すべてが順調であれば、EBB に klipper ファームウェアがインストールされています。
これを確認するには、canbus uuid をクエリできます。
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
次のようなものが表示されるはずです
"Found canbus_uuid=XXXXXXXXXX, Application: Klipper"
上記の表示が出ればインストールは完了です。
CANBUSの動作確認
動作確認をしてみます。MainSailのMACHINE画面からprinter.cfgを開きます。
[mcu] の直後に
[mcu can0]
canbus_uuid: d51375d39b6b
このuuidは先ほど
dev/serial/by-id/usb-Klipper_lpc1769_0B500113C09869AF2DDD405EC72000F5-if00
で出た
Found canbus_uuid=d51375d39b6b, Application: Klipper
Total 1 uuids found のを使います。
次に[extruder]セクションの
sensor_pin: P0.24 を sensor pin: can0: PA3 と書き換え、SAVE & RESTART を押して再起動します。
黄色いエラーメッセージが出ると思います。これはうまく切り替わったのですがセンサーが接続されていないため"ADC out of range"のエラーになったためです。センサーをEBBに繋げて確認してみましょう。
センサーを繋げてRESTART 、FIRMWARE RESTARTで再起動すると正常になります。
この後、EBBで制御する部分を上記のように書き換えれば完成です。