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または共通基準線; - 必要に応じてモジュール電源を別途。
信号は CANH と CANL の差として伝送されます。これが CAN が単一信号線よりもノイズに強い理由です。
簡略図:

出典: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 つです。
電源オフ状態で、正しくターミネーターが設置されたバスでは、CANH と CANL 間のテスターが約 60 Ohm を示すことが多くなります。これは 120 Ohm の抵抗 2 つが並列接続されているためです。
多くのボードにはターミネータージャンパーがあります。便利な無効化手段のない内蔵ターミネーターを持つボードもあります。そのため、組み立て前にバス上の全ボードの回路図を確認してください。
ビットレート¶
CAN の速度はすべてのノードで一致させる必要があります。Klipper では CAN で 1000000(つまり 1 Mbit/s)がよく使われますが、具体的な値はファームウェア、設定、バス長によって異なります。
ビットレートが異なると、ノードは正常に通信できません。
長距離または問題のある配線では、速度が重要になる場合があります。速度が高いほど、バスはトポロジー、ターミネーター、配線品質に対してより厳しい要件を持ちます。
Klipper での CAN¶
Klipper において、CAN は MCU との通信手段として使用されます。
CAN 上のデバイスは通常 serial: で指定しません。代わりに、設定では canbus_uuid を使用します:
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 トランシーバーがあるか;
CANHとCANLはどこにあるか;- ターミネーターがあり、どのように有効化するか;
- 使用されているコネクターは何か;
- ボードへの電源供給方法;
- ボードのフラッシュ方法;
canbus_uuidの手順が用意されているか;- 別途 USB-CAN アダプターが必要か;
- 回路図とピン配置図があるか;
- 利用可能なピンと電源出力は何か。
販売者がチップが理論的に CAN をサポートするという理由だけで「CAN」と記載しているにもかかわらず、ボードにトランシーバーもドキュメントもない場合は、良い選択ではありません。
よくある間違い¶
CANHとCANLを入れ替えた;- CAN トランシーバーが必要であることを忘れた;
- ターミネーターを 2 つではなく 1 つにした;
- すべてのボードでターミネーターを有効にした;
CANHとCANL間の抵抗を確認しなかった;- ノード間でビットレートを異なる値に設定した;
- 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 は実際に配線を簡素化するか、接続の堅牢性を向上させる場合に使用してください。
関連資料¶
- Klipper: CANBUS - Klipper 公式 CAN ドキュメント:ハードウェア、ホストアダプター、
can0、canbus_uuid、ターミネーター、USB-to-CAN ブリッジ。 - Klipper: CANBUS protocol - Klipper が CAN ノード ID を割り当て、
canbus_uuidを使用する方法。 - CAN Bus Debugger: CAN Bus Termination Explained - 2 つの
120 Ohmターミネーター、60 Ohm測定値、よくある間違いの実践的な説明。 - DigiKey: CAN Bus explained - CAN バス、差動通信、および分散システムへの応用の概要。
- Texas Instruments: Introduction to CAN - CAN 物理層、トランシーバー、および標準的なネットワークの基本説明。