見出し画像

CAN インターフェース

Klipperではホットエンドのヒーター、センサー、E Mortor ,Endstop,ファン等を小さなコントローラーで制御しRasPIとのやり取りをCANインターフェースで行うというものである。これにより結線が4本で済み、可動部分の軽量化、配線の簡素化ができる。


CAN HAT と EBB42

色々と試しているが今のところ、うまくインストール出来たのが 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 & シリアル インターフェイスを有効にする

sudo raspi-config

  1. インターフェイスの選択

    1. SPI を選択

    2. はいを選択

  2. インターフェイスの選択

    1. シリアルを選択

    2. [終了して再起動する] オプションの両方で [はい] を選択します。



**シリアルを確認してオーバーレイを追加**

シリアル構成を確認する

nano /boot/cmdline.txt

以下の例のように少し見えるはずです。

console=tty1 console=serial0,115200 root=PARTUUID=8f81106e-02 rootfstype=ext4 fsck.repair=yes rootwait

Ctrl+Xを押して終了します。
最初に この記述が見つからない場合は、上記の何かを見逃しており、 SPI とシリアル インターフェイスを有効にするconsole=tty1 console=serial0で概説されている手順に従う必要があります。

不足しているオーバーレイを追加する
SSH経由で入る

sudo nano /boot/config.txt


一番最後の[all]の後ろに下記の記述を追加します。

[all]
dtoverlay=pi3-miniuart-bt
enable_uart=1
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
dtoverlay=spi1-1cs

CAN ネットワークを作成する

CAN ネットワークはまだ存在しないため、作成する必要があります。
このタイプを行うには

sudo nano /etc/network/interfaces.d/can0

以下をファイルに追加します
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 ネットワークが稼働していることを確認できます。

ifconfig 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 ネットワークのトラブルシューティング


can0: error fetching interface information: Device not found

みたいなメッセージはインターフェイスが正しく構成されていないことを示しているため、/etc/network/interfaces.d/can0ファイルを確認する必要があります。
補足 実働状態の時にUSBコネクタの接触不良などでmcuが見つからなくなる時があります。その時は再インストールした方が早いので再インストールするのですが、ここの時点までインストールすると現状復帰出来ます。
ただし、新しいEBBを繋げる場合はこの先のCANBOOTをインストールしなければいけません。

CanBoot ファームウェア ファイルの生成

    1. CanBoot リポジトリを pi にクローンします

      1. cd ~ && git clone https://github.com/Arksine/CanBoot

    2. 以下を実行します

      1. cd CanBoot

      2. make menuconfig

    3. STM32G0B1 を使用して EBB 36 / 42 v1.1/v1.2のメイクファイルを構成します

    1. make clean
      make


ブートローダーの書き込み

  1. USB経由で電源を供給するためUSB_5Vピンに ジャンパーを追加します。

  2. デバイスを USB 経由で PI に接続します

  3. 上記の RESET ボタンと BOOTボタン を長押しします。

    • リセットボタンを離す

    • ブートボタンを離す

  4. lsusbを使用して、デバイスがブートローダー モードであることを確認します。

    • 次のようなものが表示されるはずです
      Bus 001 Device 005: ID 0483:df11 STMicroelectronics STM Device in DFU Mode

    • ここで上記の ID 0483:df11が書き込みのIDになります。

  5. canboot ブートローダをボードにフラッシュします

  6. CANBOOT ファームウェアの消去とフラッシュ

    1. sudo dfu-util -a 0 -D ~/CanBoot/out/canboot.bin --dfuse-address 0x08000000:force:mass-erase:leave -d 0483:df11


注: 上記の後にエラーが表示された場合でも、「ファイルのダウンロードに成功しました」と上記のテキストがあれば問題ありません。

  1. ボードの電源を切り、CANBUS ケーブルを挿入します。

これで、HL24vGND CANBUSワイヤを使用してツールヘッド ボードを取り付けた状態で、プリンタの電源を入れることができます。

  1. デバイスが起動するのを待ち、CAN0 ネットワークが起動していて、デバイスが見えることを確認します

    1. ~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
      Found canbus_uuid=40a8f263e934, Application: CanBoot
      Total 1 uuids found と表示されます。

  2. 上記で UUID が得られたと仮定すると、CanBoot を介して Klipper をボードにフラッシュできます…


cd ~/klipper
make menuconfig


Qを入力して終了し、選択してY変更を保存します。

make clean
make

ボードをフラッシュできるようになりました


これを確認するには、次のようにcanbus uuidを問い合わせることができます。

  1. ~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0

  2. 下記のようなものが表示されるはずです。

  3. "Found canbus_uuid=XXXXXXXXXX, Application: Klipper"

では書き込んでみましょう。下記のコマンドでMYUUIDの部分は上記で確認したIDを入れます。

python3 ~/CanBoot/scripts/flash_can.py -i can0 -f ~/klipper/out/klipper.bin -u MYUUID

すべてが順調であれば、EBB に klipper ファームウェアがインストールされています。

  1. これを確認するには、canbus uuid をクエリできます。

  2. ~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0

  3. 次のようなものが表示されるはずです

  4. "Found canbus_uuid=XXXXXXXXXX, Application: Klipper"

上記の表示が出ればインストールは完了です。

CANBUSの動作確認


動作確認をしてみます。MainSailMACHINE画面から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で制御する部分を上記のように書き換えれば完成です。


センサーエラー表示
センサーを取り付けると…


なんだかんだとホットエンドへのケーブルが20本を超えてしまった(;^_^A


CANBUSでEBB42と繋ぎホットエンドすべてをコントロール。
たった4本で出来る。スッキリ!


Klipperをインストールしている方はお試しを!

いいなと思ったら応援しよう!