2024年4月25日 星期四

Klipper 的 TMC 驅動設定

很辛苦的把舊的 3D 印表機改成 TMC2209 的靜音驅動,發現 microstep 仍然只能設到 16,噪音無法減少多少,有點失望。

不想換主板,因為這台機器會不會繼續用都不確定,因為已有太多機器了。只好細讀相關資料,看能有多大的改善。

MCU 是 ATmega2560,調到 64 microstep,一執行 home 功能,就出現像上面的錯誤。

TMC2209 靜音驅動的考量

參考 TMC drivers

  • StealthChop:是一种使用 PWM 电压而不是电流来驱动电机的技术。结果在低速时几乎听不见。StealthChop 具有较低的步进速度限制,如果您需要更快地移动,您可能需要使用 spreadCycle 或配置混合模式。
  • SpreadCycle:是另一种步进模式。驱动器将使用四个阶段将所需的电流驱动到步进电机中。SpreadCycle 提供更大的扭矩。缺点是噪音水平略高。

兩種模式不要混用。低速時用 StealthChop,安靜。高速時用 SpreadCycle,較有力,較吵。

8 位元 CPU,如 Atmega2560,microstep 只能設到 16。使用 TMC 驅動的好處,是能透過 interpolation 降低噪音。但是 Klipper 的指引建議關閉 interpolation,使用 spreadCycle 或 stealthChop,其中 spreadCycle 為優先。截錄說明如下


The TMC driver interpolate setting may reduce the audible noise of printer movement at the cost of introducing a small systemic positional error. This systemic positional error results from the driver's delay in executing "steps" that Klipper sends it. During constant velocity moves, this delay results in a positional error of nearly half a configured microstep (more precisely, the error is half a microstep distance minus a 512th of a full step distance). For example, on an axis with a 40mm rotation_distance, 200 steps_per_rotation, and 16 microsteps, the systemic error introduced during constant velocity moves is ~0.006mm.

For best positional accuracy consider using spreadCycle mode and disable interpolation (set interpolate: False in the TMC driver config). When configured this way, one may increase the microstep setting to reduce audible noise during stepper movement. Typically, a microstep setting of 64 or 128 will have similar audible noise as interpolation, and do so without introducing a systemic positional error.

If using stealthChop mode then the positional inaccuracy from interpolation is small relative to the positional inaccuracy introduced from stealthChop mode. Therefore tuning interpolation is not considered useful when in stealthChop mode, and one can leave interpolation in its default state.




2024年4月23日 星期二

Anycubic Kossel 整理及安裝 Klipper

參考 Anycubic Kossel Klipper guide

設定檔,klipper/config /printer-anycubic-kossel-plus-2017.cfg

機器簡要資料

此機器一般稱為 Anycubic Kossel Linear Plus 3D printer。控制板為 YJYGR 的 TriGorilla,為 Mega2560 & RAMPS1.4 相容板。電源輸入為 12-24V,有些說可以到 35V。有不同的版本,如下圖的標誌中沒有版本註記,為 Trigorilla 1.0。


這一台機器,中文資料不多,倒是英文資料慢慢挖可以找到不少。

先放上來參考。

改靜音驅動

沒找到詳細的資料,只有查到 Amazon 的商品簡介,有一個是配 FYSETC 的 TMC2209 (V2.0) 驅動,PIN 不太一樣。要支援 TMC2209 靜音驅動,必須自己修改,有點囉唆,看看是否改用 MKS Gen l v2.1,不用煩惱。

要接 TMC2209,使用 UART mode,可參考 UART This! Serial Control of Stepper Motors With the TMC2208, Ramps 1.4 and Marlin

MKS 和 FYSETC 的 TMC2209,PIN4-RX,PIN5-TX。TMC2209 只有一個 PIN,即 PIN14 為 PDN/UART,用 20K 的電阻 pull down,接到插槽的 PIN4-RX。插槽的 PIN4 和 PIN5 之間可能是短路,或經 1K 電阻接在一起。假如 PIN5 是要連到一般 UART 的 TX,就必須用 1K 電阻,不能直接短路。如上述文章使用 Marlin,serial_tx_pin 和 serial_rx_pin 都用到。至於 Klipper 只需定義一個 uart_pin,就直接短路吧。

參考 FYSETC 的 Spider 2.3 的說明,它連到 PIN5-TX,所以 PIN4 和 PIN5 短路的話,就可以正常運作。


比對 A4988 的 PIN,PIN4-RESET,PIN5-MS3。假如沒跳線的話,那就要把 PIN4 和 PIN5 都斷開。

因為電路板已固定為使用 16 microstep,亦即 MS1, MS2, M3 都接高電位。RESET 那一腳則未直接接地或高電位。我使用的是 TMC2226,和 TMC2209 相容,可把它們當成一樣。確定驅動板的 PIN4-PIN5短路。

對板子做了一些改造。只會使用 UART mode,確定 MS1 和 MS2 永遠不會用到,直接把 PIN 拔掉。有很多網路的作法是把 PIN4, PIN5 往上推到正面,但正面有很大的散熱片,感覺很不可靠。我是把 PIN4 彎90度,剪短,焊引線。PIN5則不處理。以後用在其他支援靜音驅動的板子上,大部份都把 UART 接到 PIN5,只要把引線解焊,PIN 做一下絕緣即可。

另外,在廠家提供的控制板的電路圖或說明書,有些會把 PIN5 標成 CS。

在 TriGorilla 的板子上,有一排 5組 PIN 的預留焊點,標示 servo,可能是有其他用途。把驅動的 UART 信號連到這 5組 PIN 的控制信號即可。上圖只改了 X, Y, Z 軸的驅動。

TriGorilla 的板子有不同的版本,那 5組 PIN 對應的信號有些不同。像我使用的板子只有 TriGorilla 的標誌,沒有版本標示,那就是 1.0 版了。

建立及燒錄 Firmware

$ cd klipper
$ make menuconfig

[*] Enable extra low-level configuration options
    Micro-controller Architecture (Atmega AVR)
    Processor model (atmega2560)

$ make
..........
  Building out/compile_time_request.o
Version: v0.12.0-171-g2f6e94c9
  Linking out/klipper.elf
  Creating hex file out/klipper.elf.hex

$ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0

$ make flash FLASH_DEVICE=/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0

重新啟動系統。

Atmega2560 的 PIN 對照


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

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



網誌存檔