产品的宣传购买链接:Cartographer 涡流调平传感器 IDM scanner调平传感器 - 3D打印 - 天云物联网 (anah.cc)
教程链接:Sgr A* VMT/IDM documents (gitee.com)
一、教程
开始前请确保你是用的是python3.6以上的klipper,klipper最好在440版本以上,自适应网床要高版本的klipper和切片里面标注对象。建议用下面代码安装kiauh助手,这个kiauh更新的快。可以将老的kiauh删掉。重新安装。打开助手后卸载klipper,再重新安装。就会出现高版本的klipper。截止到2024年3月20日,版本是v0.12.0-470。
git clone https://gitee.com/miroky/kiauh.git
使用本模块需要对klipper使用有一定知识和经验积累,请在使用前确保你具备自己进行配置修改的能力
为了保证精度,请安装时尽可能让传感器线圈板的顶面低于加热块的底面。
教程里没有提到的不要做(尤其是G28),提到的请务必做
在用户目录下执行下方git命令来下载配套脚本
git clone https://gitee.com/NBTP/IDM.git
执行下方指令赋予文件可执行权限:
chmod +x IDM/install.sh
如果你不确定自己的pip源是否是国内源或者能否正常下载新的库,或者你完全不知道pip是什么,建议使用以下命令将pip设置为清华源:
~/klippy-env/bin/pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
然后执行下方命令进行安装
IDM/install.sh
下方为添加到klipper的printer.cfg中的配置示范
[idm]serial:#canbus_uuid:# Path to the serial port for the idm device. Typically has the form# /dev/serial/by-id/usb-idm_idm_...speed: 40.# Z probing dive speed.lift_speed: 5.# Z probing lift speed.backlash_comp: 0.5# Backlash compensation distance for removing Z backlash before measuring# the sensor response.x_offset: 0.# X offset of idm from the nozzle.y_offset: 21.1# Y offset of idm from the nozzle.trigger_distance: 2.# idm trigger distance for homing.trigger_dive_threshold: 1.5# Threshold for range vs dive mode probing. Beyond `trigger_distance +# trigger_dive_threshold` a dive will be used.trigger_hysteresis: 0.006# Hysteresis on trigger threshold for untriggering, as a percentage of the# trigger threshold.cal_nozzle_z: 0.1# Expected nozzle offset after completing manual Z offset calibration.cal_floor: 0.1# Minimum z bound on sensor response measurement.cal_ceil:5.# Maximum z bound on sensor response measurement.cal_speed: 1.0# Speed while measuring response curve.cal_move_speed: 10.# Speed while moving to position for response curve measurement.default_model_name: default# Name of default idm model to load.mesh_main_direction: x# Primary travel direction during mesh measurement.#mesh_overscan: -1# Distance to use for direction changes at mesh line ends. Omit this setting# and a default will be calculated from line spacing and available travel.mesh_cluster_size: 1# Radius of mesh grid point clusters.mesh_runs: 1# Number of passes to make during mesh scan.
请注意调整配置中的x y方向偏移。确保校准过程中喷头会将线圈移动到原先喷嘴所在xy位置。
将这段配置放进printer.cfg并将serial修改为你查询到的idm的串口号,查询指令为
ls /dev/serial/by-id/*
对于can版本,将使用canbus_uuid代替serial
使用下方命令,搜索can的uuid并填入
~/klippy-env/bin/python ~/klipper/lib/canboot/flash_can.py -q
请注意,填入uuid后请删掉serial:
在配置里再加入(你不加有你好果子吃)
[force_move]enable_force_move: true
之后把[probe]模块删除
如果你是用过klicky,请记得移除它的相关脚本的引用
并将z限位(stepper_z的endstop_pin:后面)修改为probe:z_virtual_endstop
还需要设置
[safe_z_home]home_xy_position: <你的x轴中心坐标>,<你的y轴中心坐标>z_hop: 10
如果你已经配置过safe_z_home或者homing_override,可以忽视这一步
记得设置[bed_mesh]不然会报错
bed_mesh中的zero_reference_position不要配置
重启之后归零x和y(g28 x y ,不要归零z),并将打印头移动到热床正中央
然后输入SET_KINEMATIC_POSITION z=80
之后就可以控制z方向移动,将喷嘴贴到平台上(也可以垫A4纸确保间隙合适)
再输入SET_KINEMATIC_POSITION z=0(注意,这和之前那条不一样)
之后执行idm_calibrate的指令
弹出的偏移控制框,请点击-0.1的偏移后确认,会自动进行校准
如果校准后重启之后,无法归零,报错no model,那么你的配置文件的自动生成配置格式错误,请修正格式。
如果你的机器是诸如VORON2.4这样的4z机器,请加入以下配置到配置文件中
[gcode_macro QUAD_GANTRY_LEVEL]rename_existing: _QUAD_GANTRY_LEVELgcode: SAVE_GCODE_STATE NAME=STATE_QGL BED_MESH_CLEAR {% if not printer.quad_gantry_level.applied %} _QUAD_GANTRY_LEVEL horizontal_move_z=10 retry_tolerance=1 {% endif %} _QUAD_GANTRY_LEVEL horizontal_move_z=2 G28 Z RESTORE_GCODE_STATE NAME=STATE_QGL
如果你的机器是诸如VORON三叉戟这样的3z机器,请加入以下配置到配置文件中
[gcode_macro Z_TILT_ADJUST]rename_existing: _Z_TILT_ADJUSTgcode: SAVE_GCODE_STATE NAME=STATE_Z_TILT BED_MESH_CLEAR {% if not printer.z_tilt.applied %} _Z_TILT_ADJUST horizontal_move_z=10 retry_tolerance=1 {% endif %} _Z_TILT_ADJUST horizontal_move_z=2 G28 Z RESTORE_GCODE_STATE NAME=STATE_Z_TILT
建议在moonraker.conf配置文件中加入下方配置,便于后续自动更新IDM的脚本
[update_manager idm]type: git_repochannel: devpath: ~/IDMorigin: https://gitee.com/NBTP/IDM.gitenv: ~/klippy-env/bin/pythonrequirements: requirements.txtinstall_script: install.shis_system_service: Falsemanaged_services: klipperinfo_tags: desc=idm
含加速计(lis2dw)的版本可以在配置中添加以下内容启用加速计: 请注意,加速计的配置务必放置到IDM配置的后面。
[lis2dw]cs_pin: idm:PA3spi_bus: spi1[resonance_tester]accel_chip: lis2dwprobe_points: 125, 125, 20 #此处设置为你进行共振测量时喷头所处坐标
配置好之后使用shaper_calibrate进行共振测量
准备工作结束后调一下z偏移再打印,z偏移保存在model_offset变量中
调整z偏移前请务必关闭网床,完成机械调平,调平后要再归零一次
Z轴微调校准
## 喷嘴的Z轴位置 (mm) 到Z限位,与打印表面的相对位置 (Z0)
## 按(+) 增加距离, 按(-) 减少距离
## 调整距离使喷嘴非常接近打印表面
## 当你运行完成 Z_ENDSTOP_CALIBRATE 后 endstop 位置将被记录
推荐使用 [axis_twist_compesation] 来确保网床的效果
二、CAN频率切换_固件更新方法
提醒注意:下面的内容 填写自己的数据,记得删除”<>”括号
固件更新和CAN频率切换
首先连接上位机
将与上位机直接连接的can通讯设备(U2C或者Can桥接)重新编译固件并频率设置为1M以与IDM通讯
用下方命令查询IDM的uuid
~/klippy-env/bin/python ~/klipper/lib/canboot/flash_can.py -q
从网盘下载所需频率IDM固件和canboot覆盖固件 执行以下命令
~/klippy-env/bin/python ~/klipper/lib/canboot/flash_can.py -f -u <查到的uuid>
上述”canboot更新固件存放路径”例如~/Canboot 1M.bin 等待执行完成后,之后输入:
~/klippy-env/bin/python ~/klipper/lib/canboot/flash_can.py -f <新频率的IDM固件存放路径> -u <查到的uuid>
上述”新频率的固件存放路径”例如~/IDM_CAN_8kib_offset_1M.bin 上述的内容填写自己的数据,记得删除”<>”括号
如果想改成usb通讯,可以按上述方式刷入带USB字样的固件,并将idm背面的模式设置跳线改焊到usb的一侧。
举个栗子:
输入:~/klippy-env/bin/python ~/klipper/lib/canboot/flash_can.py -f /home/pi/klipper/IDM_CAN_1M_8kib_offset.bin -u 6e6d2851a1bc
开始编译-编译成功-重启。其他刷机也是同理。
如果你当前使用的是USB的固件想要更新固件或者切换到CAN模式:
cd ~/klipper/scripts ~/klippy-env/bin/python -c 'import flash_usb as u; u.enter_bootloader("<你的设备串口地址>")'
cd ~~/klippy-env/bin/python ~/klipper/lib/canboot/flash_can.py -f <固件所在路径> -d <你的设备串口地址>
设备串口地址指的是/dev/serial/by-id/****这种格式的地址
请注意第二次串口号应与第一次不同,请重新查询
上述的内容填写自己的数据,记得删除”<>”括号
通过dfu上传固件
如果你通过短接boot0再上电的方式使得你的idm进入了dfu模式
可以通过下方指令上传canboot
如果你在试图刷入CAN通讯的canboot,请勿使用这个指令,请使用第二条指令刷入0x08002000地址,并重启设备
sudo dfu-util -d ,0483:df11 -R -a 0 -s 0x8000000:leave -D <文件路径>
还可以通过下方指令上传主固件
sudo dfu-util -d ,0483:df11 -R -a 0 -s 0x8002000:leave -D <文件路径>
上述的内容填写自己的数据,记得删除”<>”括号,请注意两个指令是不一样的
三、 温补参数测算教程
本教程旨在针对性优化温补参数,降低温飘,进行本优化耗时较长(1h以上),如果不温补已经能满足需求则不需要进行本操作。
首先将下方宏粘贴到配置文件中
[gcode_macro DATA_SAMPLE]gcode: {% set bed_temp = params.BED_TEMP|default(90)|int %} {% set nozzle_temp = params.NOZZLE_TEMP|default(250)|int %} {% set min_temp = params.MIN_TEMP|default(40)|int %} {% set max_temp = params.MAX_TEMP|default(70)|int %} M106 S255 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MAXIMUM={min_temp} M106 S0 G28 G0 Z1 M104 S{nozzle_temp} M140 S{bed_temp} TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MINIMUM={min_temp} IDM_STREAM FILENAME=data1 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MINIMUM={max_temp} IDM_STREAM FILENAME=data1 M104 S0 M140 S0 M106 S255 G0 Z80 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MAXIMUM={min_temp} M106 S0 G28 Z0 G0 Z2 M104 S{nozzle_temp} M140 S{bed_temp} G4 P1000 IDM_STREAM FILENAME=data2 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MINIMUM={max_temp} IDM_STREAM FILENAME=data2 M104 S0 M140 S0 M106 S255 G0 Z80 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MAXIMUM={min_temp} M106 S0 G28 Z0 G0 Z3 M104 S{nozzle_temp} M140 S{bed_temp} G4 P1000 IDM_STREAM FILENAME=data3 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MINIMUM={max_temp} IDM_STREAM FILENAME=data3 M104 S0 M140 S0 M106 S255 G0 Z80 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MAXIMUM={min_temp} M106 S0 G28 Z0 G0 Z5 M104 S{nozzle_temp} M140 S{bed_temp} G4 P1000 IDM_STREAM FILENAME=data4 TEMPERATURE_WAIT SENSOR='temperature_sensor IDM_coil' MINIMUM={max_temp} IDM_STREAM FILENAME=data4 M104 S0 M140 S0
使用DATA_SAMPLE BED_TEMP=指定热床温度 NOZZLE=指定喷嘴温度 MIN_TEMP=采集温度范围最小值 MAX_TEMP=采集温度范围最大值
(若不输入自定义参数,宏将按默认值运行(BED_TMEP=90 NOZZLE_TEMP=250 MIN_TEMP=40 MAX_TEMP=70))
即可开始采集数据,之后会在klipper文件夹中生成data1,data2,data3,data4 四个文件,耗时较长。
完成后将4个文件移动到用户目录下的IDM文件夹中。 然后执行
cd ~/IDM~/klippy-env/bin/python arg_fit.py
(请在执行前确认当前使用的是最新的脚本包,如果不是 请重新git clone)
运行后会生成出三个参数,并在IDM文件夹中生成一张图片。(这个过程运算量很大,需要一段时间)
请检查该文件名为fit_result.png的图片,并判断拟合效果,图片示例如下:
第一行为原始数据,第二行为温补后的数据。可以看到这是一个拟合效果比较好的,偏移都被控制在3位数内。
还没有评论,来说两句吧...