2024年4月15日 星期一

ADXL345谐振测量 - 各種派

參考網址

此文件是依購買套件所提供的文件整理的,方便自己參考。

这是什么?

一种可用于减少打印中震纹(也称为重影或波纹)的技术。震纹是一种表面打印缺陷。


震纹是由打印机中的机械振动引起的,原因是打印方向的快速变化。请注意,震纹通常有机械原因:打印机框架刚性不足、皮带不紧或弹性太大、机械部件对齐问题、移动质量大等。如果可能,应首先检查和修复这些问题。

谐振补偿是一种开环控制技术,它创建一个命令信号来取消其自身的振动。谐振补偿需要一些调整和测量才能启用。除了震纹之外,谐振补偿通常会减少打印机的振动和晃动,并且还可以提高 Trinamic 步进驱动器的 StealthChop 模式的可靠性。

以下将提供 ADXL345 模块进行谐振测量的教程

第一步,材料准备

ADXL345 加速度传感器一块

必须采购如上图所示的模块,其他模块可能无法识别。

第二步,安装及接线

这是官方的接线图,不过研究下来其实 3.3V 和 GND 可以直接图中箭头指的这两个,这样就可以直接压一个 4×2 的插头一次性解决了。板子上應有 5V-3.3V 的降壓 IC,可以用 5V 的電源。

Orange PI Zero 3 的 IO 接線。

ADXL 345 SPI PIN 對應

  • MISO - DO  - SDO
  • MOSI - DI  - SDA
  • SCK  - SCK - SCL
  • CS   - CS

安装位置可以参考這個


安装有幾個要注意的点:

1)具体安装位置其实没有太大講究,毕竟这个模块作用只是测试,测试好后可以拆掉,但是一定要尽量靠近喷嘴。

2)ADXL345 板子上有 XYZ 的方向指向,但是按照资料好像说方向不一定非要和打印机的方向一致,但是每个轴必须平行,譬如 ADXL345 板子上的 Z 轴可以对着打印机的 X 轴,但是 Z 轴和 X 轴平行。(轴方向不需要一致这一点其实不是非常确认,如果有不同意见的可以反馈)

第三步,配置树莓派

硬件接好之后就可以试着软件的安装了。

因为Klipper需要通过树莓派的SPI针脚读取加速度传感器的数据,所以需要先将树莓派变成klipper的一块mcu板子,这样klipper才能读取到加速度传感器的数据。这一步在klipper官方的教程中是没有的,所以很多人这一步会忽略。

下面的命令都是在树莓派系统中执行,使用 putty 软件登录树莓派按步骤执行以下命令

首先安装 Python 的科学计算库,用作分析计算共振数据(实际执行的pip路径需要根据你klipper的venv环境的实际安装的路径来定,绝大部分情况是home目录下的klippy-env中)

~/klippy-env/bin/pip install -v numpy

安装系统依赖库

sudo apt install python-numpy python-matplotlib

将树莓派变成 klipper 的一块 mcu,复制官方提供的系统启动脚本,并设置成系统自动启动

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

systemd 的環境,執行下列指令安裝 service

sudo cp ~/klipper/scripts/klipper-mcu.service /etc/systemd/system/
sudo systemctl enable klipper-mcu.service

配置并编译树莓派的固件

cd ~/klipper/
make menuconfig

配置的控制器类型的时候,切记得要选择Linux process的



配置完成后按 Q 键保存退出,就可以编译固件了

按顺序运行以下命令

$ sudo service klipper stop
$ make flash
  Flashing
  Installing micro-controller code to /usr/local/bin/
    => 檔名為 /usr/local/bin/klipper_mcu
$ sudo service klipper start
$ sudo usermod -a -G tty pi  (pi 為安裝 klipper 的普通使用者,依自己選擇修改,如 mks)

或者執行 sudo sh ./scripts/flash-linux.sh,也可以安裝。

树莓派必須再執行 raspi-config 打开的SPI的接口。其他各家相容的 pi,依相關說明做設定。

如 Orange Pi Zero3,修改 /boot/orangepiEnv.txt,加上 spi1 的 overlay 設定。

 ...
rootfstype=ext4
overlays=spi1-cs1-spidev
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

重開機後,就會出現 /dev/spidev1.1,因為 Orange Pi Zero3 的 IO 較少,只能用一個 spi port,假如使用 spi 連接 LCD,此時必須先將 LCD 取消掉。

Orange Pi Zero 3 無法啟動 klipper_mcu

無法啟動 klipper_mcu.service,沒有 /tmp/klipper_host_mcu 檔案,查看詳細的 systemctl log 如下。

 $ journalctl -u klipper-mcu | more
Oct 08 23:32:09 orangepizero3 systemd[1]: Started klipper-mcu.service - Starts the MCU Linux firmware for klipper on startup.
Oct 08 23:32:09 orangepizero3 klipper_mcu[615]: Got error -1 in sched_setscheduler: (1)Operation not permitted
Oct 08 23:32:09 orangepizero3 systemd[1]: klipper-mcu.service: Main process exited, code=exited, status=255/EXCEPTION
Oct 08 23:32:09 orangepizero3 systemd[1]: klipper-mcu.service: Failed with result 'exit-code'.
Oct 08 23:32:15 orangepizero3 systemd[1]: klipper-mcu.service: Scheduled restart job, restart counter is at 1.
Oct 08 23:32:15 orangepizero3 systemd[1]: Stopped klipper-mcu.service - Starts the MCU Linux firmware for klipper on startup.
Oct 08 23:32:15 orangepizero3 systemd[1]: Started klipper-mcu.service - Starts the MCU Linux firmware for klipper on startup.
Oct 08 23:32:15 orangepizero3 klipper_mcu[1249]: Got error -1 in sched_setscheduler: (1)Operation not permitted

參考下列說明,Klipper 討論 Orange pi zero 3 with ADXL,以及  Armbian kernel & Klipper host mcu: “Got error -1 in sched_setschedule”

執行下列指令。
$ sudo sysctl -w kernel.sched_rt_runtime_us=-1
$ echo "kernel.sched_rt_runtime_us = -1" | sudo tee /etc/sysctl.d/10-disable-rt-group-limit.conf

再重新啟動,即可成功啟動。

第四步,配置Klipper

在网页操作界面中打开Klipper的配置文件printe.cfg,在合适的地方加入下面的配置代码

[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None

[resonance_tester]
accel_chip: adxl345

probe_points:
    150,150,20  # 这个地方建议配置成热床的中间(此150参数配置为300热床)

MKS-Pi 的設定

[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None
spi_bus: spidev0.2

Fly-Pi 的設定

[mcu host]
serial: /tmp/klipper_host_mcu

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

配置完成后重启一下Klipper

在控制台中输入以下命令


ACCELEROMETER_QUERY 这个命令是查询加速器的参数,如果前面的软硬件安装正常的话,就会收到返回的加数据传感器参数,类似于下面内容……如果返回其他则可能是接线问题或adxl345模块问题

.....Recv: // adxl345 values (x, y, z): 470.719200, 941.438400, 9728.196800...

第五步,测试加速度

开始测试前,先把打印机的加速度配置调大(这个测试完之后可以还原回去)码

[printer]
max_accel: 7000
# max_accel_to_decel: 7000 # 停用
# minimum_cruise_ratio: 0.5  # 改用這個, default 0.5

如果你之前有配置过input_shaper的功能,需要先关掉之前配置好的参数

SET_INPUT_SHAPER SHAPER_FREQ_X=0 SHAPER_FREQ_Y=0

然后就开始可以测试共振了,比较省事的就是直接用自动测试配置命令

SHAPER_CALIBRATE

测试的时候,刀头会从 0MHz~120MHz 震动,逐渐测试 x轴和 y轴数据,期间声音会逐渐增大,如果机子组装过程没有太大问题的话,机子不应该会有太剧烈反应(如果有太剧烈的反应建议检查组装过程)

或手動分開執行

TEST_RESONANCES AXIS=X
TEST_RESONANCES AXIS=Y
# M112 太劇烈的話,緊急停止

測試頻率,在 5Hz ~ 133Hz 之間。

測試後,會產生 /tmp/resonances_x_*.csv and /tmp/resonances_y_*.csv。用下列指令產生圖檔。

~/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

完成测试后会进行一下计算,然后会显示出x轴和y轴推荐的配置方法和配置值,你可以根据这个配置方法和值手工配置 input_shaper 参数,类似这种

[input_shaper]
shaper_type_x = 3hump_ei
shaper_freq_x = 52.4
shaper_type_y = 2hump_ei
shaper_freq_y = 37.5

不过也能直接使用

SAVE_CONFIG

命令直接保存进配置文件

保存完毕后需要回到 printe.cfg 配置文件中,拉倒最底部可以找到被注释的内容,如下

#*# [input_shaper]
#*# shaper_type_x = mzv
#*# shaper_freq_x = 58.4
#*# shaper_type_y = mzv
#*# shaper_freq_y = 44.2

整个复制,替换原来的参数,并取消注释,最后保存并重启即可



沒有留言:

張貼留言

網誌存檔