コンテンツにスキップ

Klipper の MCU

Klipper は 2 つの主要な部分で構成されています:

  • ホスト — Klipper を備えた Linux コンピュータ (Raspberry Pi、Orange Pi、ミニ PC など);
  • MCU — ピンを物理的に制御するマイクロコントローラボード。

ホストは高レベルの決定を行い、設定を読み込み、G コードを処理し、アクションを計画します。MCU はハードウェア上で正確なコマンドを実行します: 出力を切り替え、入力を読み取り、時間をカウント、PWM を生成し、ステータスをホストに報告します。

Klipper の MCU とは

MCU はマイクロコントローラユニット (MCU) を意味します。

Klipper のコンテキストでは、それは特定のボード です:

  • メイン 3D プリンタボード;
  • 別の RP2040 ボード;
  • 別の STM32 ボード;
  • CAN/ツールヘッドボード;
  • アディショナル I/O ボード。

MCU は「プリンタ全体のように考える」わけではありません。ホストから送信された低レベルのコマンドを実行します。この分離により Klipper は柔軟になります: 2 番目または 3 番目の MCU を追加し、その 1 つの共有設定でそのピンを使用できます。

どのように見えるか

簡略化されたスキーム:

Klipper ホストと複数の MCU

ホストは USB、UART、または CAN 経由で MCU と通信します。Klipper 設定では、各 MCU は独自のセクションを取得し、その MCU のピンはファン、センサー、ヒーター、出力、およびその他のモジュール設定で使用されます。

ホストが何をするか

ホストは:

  • printer.cfg を保存して読み込みます;
  • G コードとユーザーコマンドを受け入れます;
  • 高レベルのロジックを維持します;
  • 時間をかけてアクションをスケジュールします;
  • MCU との通信を同期します;
  • ファン、ヒーター、または他の出力をいつ切り替えるかを決定します;
  • MCU から読み取りとステータスを受け取ります。

ホストは、これらのピンが外部ボード上にある場合、直接ファンに電流を適用したり、サーミスタを読み取ったりしません。MCU に何をするかを指示するだけです。

MCU が何をするか

MCU は:

  • GPIO を物理的に制御します;
  • 入力とセンサーを読み取ります;
  • PWM を生成します;
  • 正しい時間にコマンドを実行します;
  • ホストに結果を報告します;
  • ファームウェアと設定がその方法で設定されている場合、エラーで シャットダウンします。

例えば、設定にピン PA8 のファンがある場合、そのピンを持つ MCU がその状態を変更します。ホストはコマンドのみを送信します。

[mcu] は何を意味するか

printer.cfg では、[mcu] セクションは Klipper が接続する必要があるマイクロコントローラを説明します。

USB/シリアルの例:

[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_...

アディショナル MCU の場合、名前を使用します:

[mcu chamber]
serial: /dev/serial/by-id/usb-Klipper_rp2040_...

その後、アディショナル MCU のピンはプレフィックスで指定できます:

[temperature_sensor chamber_air]
sensor_type: Generic 3950
sensor_pin: chamber:gpio26

[fan_generic chamber_fan]
pin: chamber:gpio15

ロジックはシンプルです: chamber:gpio15 は「MCU chamber 上のピン gpio15」を意味します。

ピン名とプレフィックス

Klipper はハードウェアピン名を使用します。

例:

  • STM32 の場合: PA4PB0PC13;
  • RP2040 の場合: gpio15gpio26;
  • Arduino/AVR の場合、独自のエイリアスがある場合があります。

ピン名の前に記号が付く場合があります:

  • ! — ロジックを反転する;
  • ^ — MCU がサポートする場合、プルアップを有効にする;
  • ~ — MCU がサポートする場合、プルダウンを有効にする。

例:

[gcode_button chamber_door]
pin: ^chamber:gpio12

これは「Klipper マジック」ではなく、特定の MCU 上の入力ピンの特定の設定です。したがって、ボードのピンアウトは正確である必要があります。

アディショナル MCU が必要な理由

アディショナル MCU は、ペリフェラルを別のブロックに分離する必要がある場合に便利です。

iDryer のようなデバイスの例:

  • チャンバー温度および湿度センサー;
  • 循環ファン;
  • フィルターファン;
  • バックライト;
  • ドアボタン;
  • リッドセンサー;
  • ダンパーサーボ;
  • ロードセル付きの別個のモジュール;
  • アディショナル OLED または RFID;
  • デバイスの近くでルーティングするのがより便利な緊急入力。

このアプローチは、デバイスが別の Wi-Fi ボックスではなく、Klipper システムの一部である必要がある場合に便利です。

MCU アプローチまたはスタンドアロンコントローラ

2 つの異なるパスがあります。

Klipper の MCU:

  • デバイスは printer.cfg から制御されます;
  • ピンは Klipper に見えます;
  • fan_generictemperature_sensorheater_genericoutput_pin などの既存のセクションを使用できます;
  • 状態は Klipper インターフェースに表示されます;
  • ホストとの通信が必要です。

スタンドアロンコントローラ:

  • デバイスは独自の決定を下します;
  • Wi-Fi、ウェブインターフェース、MQTT がある場合があります;
  • プリンタに依存する必要がありません;
  • 独自のファームウェアと安全ロジックが必要です;
  • Klipper の通常の [mcu] として接続しません。

ESP32 はスタンドアロン Wi-Fi デバイスに対して多くの場合良いです。RP2040 と STM32 は Klipper 内の有線 MCU としてより便利な場合が多いです。

USB、UART、および CAN

ホストと MCU 間の通信は異なる場合があります。

USB — ホスト付近のボード 1 つまたは 2 つに対する最も一般的でシンプルなオプション。Pico、STM32 ボード、および多くのプリンタボードに便利です。

UART — 別個の TX/RX ピン経由のシリアル通信。一部のボードで便利ですが、注意深い レベル、グラウンド、スピード接続が必要です。

CAN — リモートモジュール、ツールヘッドボード、およびより安定した有線アーキテクチャに便利です。ただし CAN は、サポートされるマイクロコントローラ、CAN トランシーバー、適切なバス、ターミネータ、および Linux インターフェース設定が必要です。

最初のアディショナルコントローラの場合、USB は通常よりシンプルです。CAN は実際の理由がある場合に意味があります: 長いワイヤリング、複数のノード、ツールヘッドボード、または既存の CAN インフラストラクチャ。

MCU は電力セクションを保護しません

重要: MCU を追加することは、負荷を安全にすることはありません。

MCU がファン、ヒーター、または SSR を制御する場合、それでも必要があります:

  • 正しい電源スイッチ;
  • 適切な電源;
  • 電流用のワイヤーとターミナル;
  • ヒューズ;
  • ヒーターのための独立した熱保護;
  • 安全なエンクロージャ;
  • 通信が失われた場合またはホストがオフの場合の動作の検証。

ホストが MCU との通信を失った場合、Klipper はシステムをシャットダウンできますが、これはハードウェア保護に代わるものではありません。ヒーターは、ファームウェア、センサー、SSR、または通信の単一の障害が安全でないモードにつながらないように設計する必要があります。

MCU を選択する前に確認すること

MCU 用のボードを購入する前に、確認してください:

  • マイクロコントローラが Klipper によってサポートされているかどうか;
  • ボードの準備ができた設定または命令があるかどうか;
  • 必要な通信方法: USB、UART、または CAN;
  • ボードのフラッシング方法;
  • 十分な GPIO、ADC、PWM、I2C、SPI、UART があるかどうか;
  • どのピンが本当に露出しているか;
  • GPIO ロジック: 通常 3.3V;
  • 負荷用のドライバー/MOSFET/SSR が必要かどうか;
  • 電力とピンアウトのドキュメントがあるかどうか;
  • MCU との通信が失われた場合に何が起こるか。

最初のアディショナル MCU の場合、通常は RP2040/Pico または明確な命令を持つよく知られた STM32 ボードを選択する方が簡単です。

一般的な間違い

  • MCU が Klipper のすべてのロジックを含むと思う;
  • ホストと MCU を混同する;
  • [mcu chamber] を追加するが、その後 chamber: プレフィックスなしでピンを指定する;
  • 他の誰かのピンアウトからピンを取る;
  • make menuconfig で間違ったマイクロコントローラタイプをフラッシュする;
  • ブートローダオフセットとボードのフラッシング方法をチェックしない;
  • 不安定な USB ケーブルを使用する;
  • 5V3.3V 入力に接続する;
  • GPIO から負荷に電力を供給する;
  • ソフトウェアのシャットダウンがヒューズと熱いヒューズに代わると思う。

要点

Klipper では、MCU はピンを物理的に制御するボードであり、ホストは作業を計画し調整します。アディショナル MCU を使用すると、システムを拡張し、ペリフェラルをデバイスの近くに移動できます。

iDryer のようなタスクの場合、これはファン、センサー、フィルター、バックライト、ボタン、およびいくつかのアクチュエータに便利です。ただし、電力セクションとヒーター安全性は別のハードウェアタスクのままです。

関連資料