コンテンツにスキップ

CAN インターフェース

CAN は、共通の差動ラインに複数のデバイスを接続するための通信インターフェースです。正式名称:Controller Area Network

CAN は自動車・産業用電子機器から生まれましたが、3D プリンターではツールヘッドボード、リモート MCU、および I2C/SPI よりも長くて信頼性の高い通信が必要なモジュールで広く普及しています。

CAN が役立つ場面

プリンターや iDryer のような周辺機器では、CAN は以下の用途に使用されます:

  • プリンターヘッド上のツールヘッドボード;
  • リモートブロック内の追加 MCU;
  • ケーブルバンドル内の配線数削減;
  • CAN フィルター、カメラ、またはドライヤーボードとの通信;
  • 複数コントローラーの分散システム;
  • USB や長距離 I2C/SPI が不便な場合。

CAN は、ノードがホストやメインボードから離れており、近くにモーター、ヒーター、その他のノイズ源がある場合に特に有効です。

CANH、CANL、GND

物理的な CAN バスは通常以下を使用します:

  • CANH
  • CANL
  • 場合によっては GND または共通基準線;
  • 必要に応じてモジュール電源を別途。

信号は CANHCANL の差として伝送されます。これが CAN が単一信号線よりもノイズに強い理由です。

簡略図:

複数のノードとターミネーターを持つ高速 CAN ISO 11898-2 バス

出典:Wikimedia Commons、EE JRW、CC BY-SA 4.0

配線には CANH/CANL にツイストペアがよく使用されます。GND は具体的な回路・ボード・ドキュメントによりますが、小規模な DIY システムでは、安定動作とインターフェースの安全性のために共通基準が必要なことが多いです。

CAN トランシーバーが必要

重要:マイコンが CAN をサポートしていることと、ボードに CAN が搭載されていることは同じではありません。

CAN を動作させるには以下が必要です:

  • CAN コントローラーまたは適切なファームウェアサポートを持つマイコン;
  • ボード上の CAN トランシーバー;
  • 正しい CANH/CANL コネクター;
  • トランシーバーへの電源;
  • ターミネーター;
  • CAN 用にビルドされたファームウェア。

マイコンのデータシートに CAN が記載されていても、ボードにトランシーバーがない場合、CAN バスに直接接続することはできません。

トポロジーとターミネーター

CAN はバスです。適切なトポロジーは、ノードが短いブランチで接続された直線状の構成です。

通常、120 Ohm のターミネーターが 2 つ必要です:

  • バスの一方の物理的な端に 1 つ;
  • もう一方の物理的な端に 1 つ。

1 つでも 3 つでもなく、「各ボードに 1 つ」でもありません。両端にそれぞれ 1 つずつ、合計 2 つです。

電源オフ状態で、正しくターミネーターが設置されたバスでは、CANHCANL 間のテスターが約 60 Ohm を示すことが多くなります。これは 120 Ohm の抵抗 2 つが並列接続されているためです。

多くのボードにはターミネータージャンパーがあります。便利な無効化手段のない内蔵ターミネーターを持つボードもあります。そのため、組み立て前にバス上の全ボードの回路図を確認してください。

ビットレート

CAN の速度はすべてのノードで一致させる必要があります。Klipper では CAN で 1000000(つまり 1 Mbit/s)がよく使われますが、具体的な値はファームウェア、設定、バス長によって異なります。

ビットレートが異なると、ノードは正常に通信できません。

長距離または問題のある配線では、速度が重要になる場合があります。速度が高いほど、バスはトポロジー、ターミネーター、配線品質に対してより厳しい要件を持ちます。

Klipper での CAN

Klipper において、CAN は MCU との通信手段として使用されます。

CAN 上のデバイスは通常 serial: で指定しません。代わりに、設定では canbus_uuid を使用します:

[mcu toolhead]
canbus_uuid: 11aa22bb33cc

Linux 側では通常 can0 インターフェースが必要です。ホストには CAN アダプターが必要です:

  • USB-CAN アダプター;
  • USB-to-CAN ブリッジモードのボード;
  • SBC 用 HAT/アダプター;
  • その他サポートされた回路。

Klipper には、未初期化の新しいデバイスの canbus_uuid を検索するツールがあります。重要な点として:デバイスがすでに Klipper によって設定されている場合、「新規」デバイスとしてリストに表示されなくなることがあります。

USB-to-CAN ブリッジ

一部のボードは USB-to-CAN ブリッジモードでフラッシュできます。このモードでは、ボードは USB でホストに接続し、Linux には CAN アダプターとして認識されます。

これは便利ですが、重要な制限があります:ブリッジモードは実際の CAN バスや他の CAN ノードとの通信に必要です。ホストの近くにボードが 1 枚しかなく、実際の CAN バスがない場合は、通常の USB/シリアルモードを使用する方が簡単です。

また、USB-to-CAN ブリッジは /dev/serial/by-id/... として認識されません。CAN インターフェースとして設定され、serial: ではなく canbus_uuid を使用します。

CAN が適切な場合

CAN の採用を検討すべき状況:

  • ツールヘッドボードを接続する必要がある場合;
  • 長いケーブルバンドルを通して通信を通す必要がある場合;
  • 複数のリモート MCU が必要な場合;
  • 可動部とエンクロージャー間の配線を減らしたい場合;
  • すでに CAN インフラがある場合;
  • 選択したボードが Klipper CAN として十分にドキュメント化されている場合。

CAN が不要な場合:

  • ボードがホストの近くにある場合;
  • 追加 MCU が 1 つだけ必要な場合;
  • USB が安定して動作している場合;
  • フラッシュ、can0、ターミネーター、Linux ネットワーキングの経験がない場合;
  • 選択したボードのドキュメントが不十分な場合。

初めての単純な追加コントローラーでは、USB の方が速くて明確なことが多いです。CAN は、配線の実際の問題やボードの分散配置の問題を解決する場合に意味を持ちます。

CAN は負荷に電力を供給しない

CAN は通信のみです。

CAN ボードがファン、ヒーター、SSR、またはサーボを制御する場合、以下が依然として必要です:

  • ボード電源;
  • 負荷電源;
  • MOSFET/ドライバー/SSR;
  • ヒューズ;
  • 適切な端子;
  • ヒーターの熱保護;
  • 安全なエンクロージャー。

CAN はパワーエレクトロニクスの代替にならず、ヒーターを安全にするものでもありません。

購入前に確認すること

CAN ボードを購入する前に確認すべき事項:

  • 使用されているマイコンは何か;
  • ボードが Klipper CAN をサポートしているか;
  • CAN トランシーバーがあるか;
  • CANHCANL はどこにあるか;
  • ターミネーターがあり、どのように有効化するか;
  • 使用されているコネクターは何か;
  • ボードへの電源供給方法;
  • ボードのフラッシュ方法;
  • canbus_uuid の手順が用意されているか;
  • 別途 USB-CAN アダプターが必要か;
  • 回路図とピン配置図があるか;
  • 利用可能なピンと電源出力は何か。

販売者がチップが理論的に CAN をサポートするという理由だけで「CAN」と記載しているにもかかわらず、ボードにトランシーバーもドキュメントもない場合は、良い選択ではありません。

よくある間違い

  • CANHCANL を入れ替えた;
  • CAN トランシーバーが必要であることを忘れた;
  • ターミネーターを 2 つではなく 1 つにした;
  • すべてのボードでターミネーターを有効にした;
  • CANHCANL 間の抵抗を確認しなかった;
  • ノード間でビットレートを異なる値に設定した;
  • USB-to-CAN ブリッジから /dev/serial/by-id を期待した;
  • USB 用にフラッシュしたボードを CAN として接続した;
  • CAN 用にフラッシュしたが can0 を設定しなかった;
  • バスではなく長いブランチによるスター構成にした;
  • CAN が負荷に電力を供給する手段だと思っている。

まとめ

CAN は、プリンター内のリモート MCU、ツールヘッドボード、分散システムに適したインターフェースです。差動ペア CANH/CANL を使用し、CAN トランシーバー、正しいトポロジー、バス両端への 2 つのターミネーターが必要です。

Klipper において CAN は有用ですが USB より複雑です:ボードを CAN 用にフラッシュし、アダプター/can0 を設定し、canbus_uuid を検索し、物理バスを確認する必要があります。CAN は実際に配線を簡素化するか、接続の堅牢性を向上させる場合に使用してください。

関連資料