見出し画像

Orange Pi Zero2のKlipperに加速度センサーADXL345の接続&共振測定によるInput Shaperの調整をやってみた

Orange Pi Zero2のKlipperが普通に動作したので、Klipperの特徴である加速度センサーADXL345の接続をして、共振測定を実施してみました。
測定結果をもとにInput Shaperの設定を行うことにより、大幅にリンギング(ゴースティング)が改善されることを期待されます。
Linuxは素人なので、おかしい等のツッコミは優しくご指摘いただければ、修正していきたいと思いますのでよろしくお願いします。

■センサ、部材準備

自分は以前にまとめ買いしてしまったADXL345を使用しました。KlipperのドキュメントによるとSPI接続をサポートしている必要があるので注意が必要です。

ケーブルは、手持ちのフラットケーブルと、デュポンコネクタを流用しました。フラットケーブルは昔から持っているやつだったので失念しました。

■結線&取り付け

ピンアサインは、OrangePiZero2とRaspberryPiのものとほぼ同じような並びなので、悩まずに接続できるました。
ADXL345 pin   OrangePi pin name
 VCC               ー 17 3.3V
 GND               ー 20 GND
 CS                  ー 24 SPI1 CS
 SDO               ー 21 SPI1 MISO
 SDA                ー 19 SPI1 MOSI
 SCL                ー 23 SPI1 CLK
OrangePi側は丁度4x2のコネクタに収まる範囲だったので4x2のデュポンコネクタを利用しました。
ADXL345側は横一列8ピンだったので、4ピンのデュポンコネクタを2つ並べて接続しました。マウントはエクストルーダのモータの背面にネジで固定するようにしました。

コネクタ OrangePi側
コネクタ ADXL345側
コネクタ ADXL345側
コネクタ ADXL345側

■設定

■■klipper_mcuの作成

詳細な設定はKlipperの公式ドキュメントに記載されていますので、これに沿って設定を進めます。

KlipperのインストールされているOrangePiにsshでログインし設定を行います。
まずは、Pythonのnumpyとmatplotlibのインストールと、お決まりのパッケージのアップデート。

~/klippy-env/bin/pip install -v numpy
sudo apt update
sudo apt install python3-numpy python3-matplotlib

RPi microcontorollerのセットアップを行います。詳細は、下記ドキュメントの記載がありますので、これに沿って設定を進めます。

klipper_mcuの自動起動設定を行います

cd ~/klipper/
sudo cp "./scripts/klipper-mcu-start.sh" /etc/init.d/klipper_mcu
sudo update-rc.d klipper_mcu defaults

klipper_mcuのコードをビルドします。
メニューから"Microcontroller Architecture" で "Linux process" を選択して保存します。

cd ~/klipper/
make menuconfig
make menuconfig

ビルド&インストールして、起動します。

sudo service klipper stop
make flash
sudo service klipper start

■■printer.cfgの編集

下記内容をprinter.cfgへ追記します。
・probe_points:は大体ビルドプレートの真ん中くらいの位置が良いと思います。
・spi_bus:は、orangePiZero2のインタフェースを調べたらこの設定をしないと動作しませんでした。
・max_freq:で上限周波数をこれくらいにしないと、マシンパワー不足なのか、klipperのタイマに引っ掛かってしまい、mcuが強制再起動してしまうので、デフォルトの133.33から少し下げた数字にしています。これがわかるまで苦労しました。。。環境によっては、個体差があると思うのでもう少し下げる必要があるかもしれません。

[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None
spi_bus:spidev1.1

[resonance_tester]
accel_chip: adxl345
probe_points:  80, 85, 20  # an example
max_freq: 125

■動作テスト&測定

■■動作テスト

以上で一通りセットアップができたのでテストです。
まずは、印刷ヘッドをホーム位置へ移動させましょう。(MainsailのContorolsのALLボタン等で)
そして、MainsailのConsoleから、下記コマンドを入力してみましょう。
問題なければ、adxl345 values (x, y, z): 535.443090, -458.951220, 9637.975620 のように応答があると思います。

ACCELEROMETER_QUERY

もし、Invalid adxl345 id (got xx vs e5)等のエラーメッセージが返ってきたら、なにか結線か設定が誤っていると思われますので、チェックしてみてください。

次に、加速度センサーのノイズ測定です。
MainsailのConsoleから、下記コマンドを入力してみましょう。
問題がなければ、Axes noise for xy-axis accelerometer: 26.612939 (x), 21.487746 (y), 93.417799 (z)のような応答があると思います。
通常は、xyzそれぞれ100以下の数字のようです。大きい場合は、ファン等による振動等による影響と思います。

MEASURE_AXES_NOISE

■■共振の測定

以上で準備が出来たので、実際の測定をしてみましょう。
MainsailのConsoleから、下記コマンドを入力すると、印刷ヘッドが左右に高速で振動を開始すると思います。徐々に高速になっていき最終的に、結果がファイルに出力された旨応答があると思います。
Wait for calculations..
Resonances data written to /tmp/resonances_x_yyyymmdd_hhmmss.csv file

TEST_RESONANCES AXIS=X

Y軸についても測定しておきましょう。今度は、印刷ヘッドが前後に高速で振動を開始し、結果がファイルに出力されます。

TEST_RESONANCES AXIS=Y

■■測定結果の解析

解析するためのスクリプトが用意されており、orangepi上で実施する必要があります。
orangepiにsshログインして下記コマンドを実行します。すると、それぞれ結果が表示されるとともに、グラフが下記画像ファイルとして出力されます。
 /tmp/shaper_calibrate_x.png
 /tmp/shaper_calibrate_y.png

~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png

結果は下記のような出力になると思います。

orangepi@orangepizero2:~ $ ~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
Fitted shaper 'zv' frequency = 59.2 Hz (vibrations = 43.7%, smoothing ~= 0.051)
To avoid too much smoothing with 'zv', suggested max_accel <= 13700 mm/sec^2
Fitted shaper 'mzv' frequency = 40.6 Hz (vibrations = 24.0%, smoothing ~= 0.124)
To avoid too much smoothing with 'mzv', suggested max_accel <= 4900 mm/sec^2
Fitted shaper 'ei' frequency = 55.6 Hz (vibrations = 25.4%, smoothing ~= 0.104)
To avoid too much smoothing with 'ei', suggested max_accel <= 5800 mm/sec^2
Fitted shaper '2hump_ei' frequency = 47.2 Hz (vibrations = 14.7%, smoothing ~= 0.242)
To avoid too much smoothing with '2hump_ei', suggested max_accel <= 2400 mm/sec^2
Fitted shaper '3hump_ei' frequency = 48.0 Hz (vibrations = 9.5%, smoothing ~= 0.356)
To avoid too much smoothing with '3hump_ei', suggested max_accel <= 1500 mm/sec^2
Recommended shaper is zv @ 59.2 Hz

orangepi@orangepizero2:~ $ ~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png
Fitted shaper 'zv' frequency = 43.4 Hz (vibrations = 49.2%, smoothing ~= 0.087)
To avoid too much smoothing with 'zv', suggested max_accel <= 7300 mm/sec^2
Fitted shaper 'mzv' frequency = 28.6 Hz (vibrations = 30.2%, smoothing ~= 0.249)
To avoid too much smoothing with 'mzv', suggested max_accel <= 2400 mm/sec^2
Fitted shaper 'ei' frequency = 38.8 Hz (vibrations = 32.9%, smoothing ~= 0.214)
To avoid too much smoothing with 'ei', suggested max_accel <= 2800 mm/sec^2
Fitted shaper '2hump_ei' frequency = 42.0 Hz (vibrations = 25.7%, smoothing ~= 0.306)
To avoid too much smoothing with '2hump_ei', suggested max_accel <= 1800 mm/sec^2
Fitted shaper '3hump_ei' frequency = 51.4 Hz (vibrations = 25.0%, smoothing ~= 0.310)
To avoid too much smoothing with '3hump_ei', suggested max_accel <= 1800 mm/sec^2
Recommended shaper is zv @ 43.4 Hz
X軸グラフ
Y軸グラフ

■■input shaperの設定

上記解析結果で推奨された値をもとに、printer.cfgのinput_shaperの設定を行います。

[input_shaper]
shaper_freq_x: 59.2
shaper_type_x: zv
shaper_freq_y: 43.4
shaper_type_y: zv

[printer]
max_accel: 7000  # should not exceed the estimated max_accel for X and Y axes

■■まとめ

以上で、設定完了となりますので、printer.cfgの保存&klipper の再起動を行なってテストしてみてください。
この設定により、大幅にリンギング(ゴースティング)が改善されると思います。
設定を煮詰めていくには、まだまだ書き足りないことはありますが、あとは公式ドキュメント等を参考にどうぞ。。。

ここから先は

0字

¥ 100

よろしければ、サポートお願いします。今後の活動費に使わせていただきたいと思います!