嘿!我是来萌
最近使用香橙派Zero发现测量共振ADXL345需要的环境中部署numpy环境会出现失败的情况,主要的原因还是因为内存不足为主,下面是提供问题解决的思路。
此教程一共有两个章节:
一,ADXL345与香橙派如何接线。
二,配置环境然后使用Klipper进行测试。
三,测试后,手动填入数据和自动填入数据。

一,ADXL345与香橙派如何接线
这一步是最简单,但是出错也是最致命的一步,所以一定要认真看清每一个细节,否则要么香橙派开始冒烟要么ADXL345开始冒烟。
1,首先你需要准备不劣质的杜邦线六根或者你自己用不劣质的电线焊接也可以,单根长度不要超过50cm,这个是拿来跟ADXL345通信的,如果太长会导致数据传输出现干扰。
2,这一步,你需要清晰地认知,该如何接线。如果不是这样的排序,请自行判断接线。
| GY-291 ADXL345 —— 香橙派
| GND —— GND
| 3.3V/VCC —— 3.3V
| CS —— CS(PA13)
| SDO —— MISO(PA16)
| SDA —— MOSI(PA15)
| SCL —— CLK(PA14)

3,接线完之后,必须使用刚性连接的方式去固定ADXL345在你的打印机的轴上,最好X方向对应X轴,如果实在麻烦可以X轴使用Y方向,甚至X轴使用Z方向,同时也尽量保持与轴平行或垂直。

二,配置环境然后使用Klipper去进行测试。
1,接线完之后,我们输入“sudo free -m”并回车,之后需要输入密码的话进行密码输入,会发现香橙派实际可用的RAM为491MB,系统默认给的Swap为245MB。这样的内存量太低了,导致numpy安装的失败的概率非常高。
sudo free -m

2,输入下面的命令,来创建Swap分页文件。
sudo touch /root/swapfile

3,输入下面的命令,来创建用户交换内存用的2GB分页文件,这一步时间较长主要取决于你的TF卡性能。需要等待片刻,直到成功的提示弹出。
sudo dd if=/dev/zero of=/root/swapfile bs=1M count=2048

4,输入下面的命令,格式化交换用的分页文件。
sudo mkswap /root/swapfile

5,输入下面的命令,来启用刚刚创建的分页文件用于Swap。
sudo swapon /root/swapfile

6,设置开机自动启用刚刚分配的分页文件,输入下面的命令进入配置界面。
sudo nano /etc/fstab

7,最后一行输入下面的文字,来创建配置内容。
/root/swapfile swap swap defaults 0 0

8,按下“Ctrl+O”,然后按下“回车”进行保存,之后按下“Ctrl+X”来退出。
9,输入下面的指令来打开启动环境配置。
sudo nano /boot/armbianEnv.txt

10,在最底下输入这行代码,如果你是香橙派Zero的Bullseye系统无法开启SPI需要自行更换内核,其他设备请自行查询手册。
param_spidev_spi_bus=1
overlays=spidev

11,按下“Ctrl+O”,接着按下“回车”进行保存,然后按下“Ctrl+X”来退出配置。
12,接着我们需要输入"sudo armbian-config"进入设置来打开香橙派的SPI功能。
sudo armbian-config 13,选中“System”回车,然后选中“HardWare”并回车进入硬件配置界面。


14,键盘按方向键“↓”,选中“spi-spidev”,然后按下“空格”来启用设备,接着按下“回车”保存设置,保存后按方向键“→”选中Back,最后按下“回车”。

15,此时系统会提示你是否要重启来开启新功能,我们这里按下“回车”来重启设备。

16,等待设备重启完毕,然后重新连接香橙派,输入下面的指令来检查SPI是否已经启用,如果启用成功则会显示SPI接入位置。
sudo ls /dev/spi*

17,输入“sudo free -m”并回车来检查是否成功配置了我们的虚拟内存,如果成功了Swap分区会增大。
sudo free -m

18,我们使用Klipper官方里提供的内容来进行接下来的部署,这里来萌给Klipper使用的用户名是“pi”,如果你的是别的用户名请自行替换,逐步输入下面的指令。这一步的安装时间相当慢,可能甚至需要20分钟的时间。
su pi
cd ~
~/klippy-env/bin/pip install -v numpy

19,成功安装完numpy之后,接着输入“sudo apt update”并回车,之后输入密码,接着更新库源来准备下一步的安装。
sudo apt update

20,输入下面的指令来安装依赖,否则后续无法分析数据,这一步安装时间较久。
sudo apt install python3-numpy python3-matplotlib

21,这一步我们将要让开发板作为辅助MCU来使用,逐步运行以下命令来安装。
cd ~/klipper/
sudo cp "./scripts/klipper-mcu-start.sh" /etc/init.d/klipper_mcu
sudo update-rc.d klipper_mcu defaults

22,这一步我们要编译Klipper用的辅助MCU的固件,此处不要去使用Kiauh的脚本去操作,逐步输入下面的命令来进入编译固件的配置界面。
cd ~/klipper/
make menuconfig
23,我们选中“微控制器架构”并回车。

24,我们选中“Linux进程”并回车。

25,按下“Q”来退出,然后按下“Y”来保存配置。

26,刷写固件之前我们要先停止Klipper进程的运作,输入以下命令,等待服务停止。
sudo service klipper stop

27,我们输入“make flash”来进行固件刷写。
make flash

28,我们输入下面的命令,来启动Klipper进程。
sudo service klipper start

28,修改你的“printer.cfg”,来支持ADXL345的使用,加入下面的代码,然后保存并重启Klipper。
【这里是香橙派Zero使用的,请自行修改cs和spi脚位内容】
[mcu OrangeZero]
serial: /tmp/klipper_host_mcu
[adxl345]
cs_pin: OrangeZero:gpio13
spi_bus: spidev1.0
[resonance_tester]
accel_chip: adxl345
probe_points:
100, 100, 20
# 根据你想要测试的位置进行修改

29,此时如果你前面正确配置了,则在Klipper的控制台输入下面的指令来进行测试,如果返回信息则成功和ADXL345进行了通信。
ACCELEROMETER_QUERY

30,接着我们检查通讯质量,输入下面的命令,值低于100为优秀,超过1000则意味着存在严重问题,比如线缆质量,电源质量或你的风扇震动幅度太大。
MEASURE_AXES_NOISE

如果上面你没有出现问题,接下来我们可以开始下一阶段了。

三,测试共振然后得出结果并使用。
1,自动测量数据并自动填入结果
①,先把打印机放置在你一直打印用的位置【因为不同位置的震动情况是不同的】,归位完全部轴之后,输入下面的命令来开始测量。【最后的X这里填入你要测试的轴(XY)】【当然你要是甚至想测Z轴,也可以】
SHAPER_CALIBRATE AXIS=X

②,这个时候输入“SAVE_CONFIG”命令到控制台,进行保存测量数据,并自动应用。
【如果你要分别测两个轴,你需要先测一次X然后保存,然后再测一次Y然后再一次保存即可】

2,手动测量数据并手动填入结果
①,先把打印机放置在你一直打印用的位置【因为不同位置的震动情况是不同的】,归位完全部轴之后,输入下面的命令来开始测量。【最后的X这里填入你要测试的轴(XY)】【当然你要是甚至想测Z轴,也可以】
TEST_RESONANCES AXIS=X

②,测量完后会自动计算,并且会将数据存放在图内位置。

③,这个时候在SSH里输入下面的指令,来输出X轴或者Y轴计算的数据变成推荐数据和图标。【当然你要是想输出Z轴,也可以】
X轴使用下面命令:
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png Y轴使用下面命令:
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png ④,等待计算完,然后下面会弹出推荐值,你需要记住的是 @前面和后面跟着的内容。
这里是X轴用的"mzv @ 79.2Hz",所以需要记下“mzv"和"79.2hz"【当然你如果精通这一方面你可以自行选择值和种类】。同时,输出的图片会放置在/tmp的位置,请自行查找在/tmp/位置的"shaper_calibrate_x.png"文件。


⑤,打开你的“printer.cfg”,将下面的内容填入到你的配置文件中。因为来萌这里X轴是"mzv @ 79.2Hz",所以如下填写,你需要自行去填写内容,保存并重启之后你就可以实现功能了。
[input_shaper]
shaper_freq_x: 79.2 #填写数值
shaper_type_x: mzv #填写种类
shaper_freq_y: #填写数值
shaper_type_y: #填写种类