站内搜索
发作品签到
专业版

3D打印涡流调平线圈-小螃蟹扫床线圈

工程标签

326
0
0
1

简介

3d打印涡流调平, idm调平, 扫床线圈, ldc1612, 温漂, 线圈

简介:3d打印涡流调平, idm调平, 扫床线圈, ldc1612, 温漂, 线圈
复刻成本:10

开源协议

GPL 3.0

创建时间:2025-12-12 10:22:56更新时间:2025-12-17 11:11:04

描述

1.3d打印涡流调平, 无接触扫床速度快精度高, 是个不可多得的调平方式;
2.该项目旨在使用klipper自带的涡流扫床实现,  只需要使用I2C通信即可, 不用CANUSB通信, 简化接线, 任意工具头都可用, 固件随klipper版本而升级;
3.板子分为单线圈和带LDC1612的线圈, 单线圈为工具头上集成LDC1612芯片(stm32f446小螃蟹工具头)使用的,  集成LDC1612的线圈任意工具头可用,单线圈接线不要太长;
4.带LDC1612的线圈还集成lis2dw加速度传感器和AHT20温度传感器, 这三个芯片共用I2C通信,  接线最少, 板子制作成本很低, 只需10元,  加速度计放在线圈上, 离喷嘴近, 共振补偿效果好, 其中AHT20需要升级到最新的klipper版本才能使用;
5.该线圈谐振频率在5Mhz左右, 线圈频率高, 采用40Mhz的有源晶振, 实测在线圈在喷嘴上方2mm处, klipper校准后的频率在0-4mm处的频率变化率超过7%,  在z-offset为 1mm处, 频率变化高达6Khz/0.04mm, 变化相当灵敏, 线圈静止时频率波动在100hz左右;

6. 视频介绍见B站, 该线圈我起名为: 小螃蟹扫床线圈;

 

一. LDC1612芯片报错问题:

这个是用klipper自带的涡流, 不是第三方插件, 目前只能扫床, 没有tap功能, 但是可以用来做Z限位, 温漂是关键, klipper自带涡流驱动, 近期有人已经提交了pull request准备支持tap功能, 嫩不能成为正式功能还未知

1. Unable to obtain 'i2c_read_response' response

发送命令LDC_CALIBRATE_DRIVE_CURRENT chip=eddy_probe 就报这个, 说明芯片虚焊, 或者压根i2c引脚配置的不对

2.  Failed calibration - incomplete sensor data

上机测试时, 发送自动校准命令PROBE_EDDY_CURRENT_CALIBRATE CHIP=eddy_probe, 发现也能正常校准, 但是最后保存时提示这个问题, 也是芯片虚焊导致的

3. Failed calibration - frequency not increasing each step

发送自动校准命令PROBE_EDDY_CURRENT_CALIBRATE CHIP=eddy_probe,  前边正常校准, 但是在最后保存配置时提示这个, 说明芯片焊接是没问题的, 是探测到的最前边几个数据有问题, 出现了距离越远频率越高的情况, 可能是热床太重导致距离喷嘴很近时发生了震动所致, 这种需要抬高喷嘴, 避免离热床太近造成震动

4.  Error during homing z: Eddy current sensor error

这个要重点说明, 这个报错主要原因的是ldc1612的振幅错误报告引起的, 因为校准驱动电流是在热床上方20mm处测量得到的驱动电流, ldc1612最佳测量线圈的振幅在1.2V-1.8V之间, 这个最佳驱动电流只在当前高度, 当前温度下适用, 当高度降低到2mm左右时, 驱动电流不再适用, 会引起ldc1612的振幅错误报告, 而klipper中又启用了这个错误报告, 一旦出现振幅错误, ldc1612就报告这个错误,这就是为什么总是报告这个错误, 我们测量的是频率, 不需要振幅必须在这个最佳区间内, 因此直接改动klipper代码. 修改ldc1612的寄存器配置来禁用这个错误报告.

最佳驱动电流受温度, 线圈谐振频率, 传感器安装高度等方面的影响, 在20mm处测量的最佳驱动频率不满足这些情况,  这个错误报告很灵敏, 振幅错误报告分为振幅高错误和振幅低错误, 而驱动电流的设置只能在1-31之间设置, 可调范围有限, 你很有可能安装的高度差那么一点点, 你就永远无法得到最佳驱动电流,不是高了就是低了, 因此就出现了你无论如何调整驱动电流, 始终会报这个错误的问题, 因此必须禁用这个错误报告.

其他错误参考fly文档:  https://mellow.klipper.cn/docs/DebugDoc/faq/eddy/

 

二. 修改klipper 涡流驱动代码:

1. 进入ssh找到klipper目录
打开 /klipper/klippy/extras/ldc1612.py 文件
 
2.修改LDC1612相关寄存器配置
SETTLETIME = 0.0002  #原来为0.005, 改为0.0002, 确保在线圈断线时, ldc1612有数据返回, 不至于撞机, 否则断线之后, ldc1612无数据返回, klipper迟迟收不到信号而撞机
self.set_reg(REG_ERROR_CONFIG, (0x1c << 11) | 1)  # 修改 REG_ERROR_CONFIG寄存器,原来为0xff, 改为0x1c, 禁用振幅错误报告, 解决传感器报错问题
self.set_reg(REG_CONFIG, 0x001 | (1<<12) | (1<<10) | (1<<9) | (1<<6))  #添加(1<<6) 使用高电流驱动 9:使用外部晶振 6:使用高电流驱动, 使用内部时钟的话就把(1<<9)去掉
 
3.修改完成重启klipper生效
修改完成后保存文件, 然后重启klipper服务(可以在Fluidd页面右上角点重启klipper服务)

 

三. 关于首次校准涡流时的命令:

1.驱动电流校准命令  LDC_CALIBRATE_DRIVE_CURRENT CHIP=eddy_probe

这个校准驱动电流校准不要在离热床20mm处校准, 而要在喷嘴接近热床的位置校准, 高度2mm左右, 不用很准, 因为已经禁用了振幅错误报告

2.eddy频率高度校准命令 PROBE_EDDY_CURRENT_CALIBRATE CHIP=eddy_probe

①在校准之前, 先要手动调平热床, 热床不能歪的厉害;

②如果你打算使用这个涡流来做虚拟Z限位, 那么首先要加热热床到80度, 喷嘴温度在150度, 保持喷嘴清洁;

③如果你当前没有没有Z限位, 那么你要先使用这个命令来设置一个当前的Z位置,  SET_KINEMATIC_POSITION Z=填写最大Z高度 , 这样就不用Z归位了

④然后执行 LDC_CALIBRATE_DRIVE_CURRENT CHIP=eddy_probe 命令, 然后klipper进入手动probe的页面, 在页面手动控制Z轴移动到喷嘴跟热床接近的地方

⑤如果用来Z限位那么用A4纸的手感必须到位, 不用来做Z限位, 随便就行了, 差个0.2mm也不要紧;

⑥设置完了之后, klipper会自动获取高度跟频率的对应关系, 最后保存配置就可以了;

 

四. 关于温漂:

1.在不封箱的条件下, 温漂很低, 通常在0.04mm以下, 也不一定, 不好说

z-offset=1mm, 热床温度从常温到100度, eddy线圈温度从常温到60度, 频率变化率为3Khz, 温漂造成的z偏移为0.02mm左右, 影响并不大, 可以用来Z限位

2.在封箱条件下, 温漂不可接受

z-offset=1mm, 热床温度从常温到108度, eddy线圈温度从常温到80度, 长时间频率漂移可达26Khz, 温漂造成的z偏移为0.2mm左右, 这样的温漂不可接受, 具体漂多少这个需要看机器自身的情况,  温漂主要发生在在eddy温度从65度-80度之间, 封箱下温漂应该与打印机整体结构的温漂有关, 单纯线圈的温漂不会这么大, 如果安装线圈的支架和整个工具头都温漂了, 这就难顶了, 闷的时间越长形变越大;

3. 如何对抗温漂

初始校准时就热床加热到80度, 喷嘴温度150度, 把温差范围缩小下, 在打印前, 热床加热时抬升z, 远离热床避免线圈温度过度增加, 必要时或许可以打开冷却风扇给线圈降下温;

4.做温度校准

如何操作具体看klipper文档, 就是线圈温度每隔3-4度执行下校准, 非常耗时, 因为温漂不仅仅与线圈的温度有关, 如果整个机器都形变了的话, 温度校准也不能解决温漂, 封箱难顶;

从室温温加热到热床108度时的频率漂移图, 该机器封箱, 温漂较大,频率漂移26Khz以上,误差0.2mm, 可能与我的机器打印件多有关

我另外一台机器, 同样加热到108度, 半封箱, 这个机器全温度范围温漂就小了, 频率漂移8Khz以下,温漂影响误差0.05mm左右

 

五. klipper参考配置文件:

#1.驱动电流校准命令  LDC_CALIBRATE_DRIVE_CURRENT CHIP=eddy_probe
#2.eddy频率高度校准命令 PROBE_EDDY_CURRENT_CALIBRATE CHIP=eddy_probe
#3.无Z限位第一次使用涡流时使用 PROBE_EDDY_CURRENT_CALIBRATE_AUTO
 
[probe_eddy_current eddy_probe]
sensor_type: ldc1612
i2c_address: 42
i2c_mcu: toolhead
frequency: 40000000
 i2c_speed: 400000
# i2c_bus: i2c1
i2c_software_scl_pin: toolhead:PB6
i2c_software_sda_pin: toolhead:PB7
reg_drive_current: 25      #驱动电流, 改klippy/extras/ldc1612.py 代码, 把REG_ERROR_CONFIG 改成0x1c, REG_CONFIG 添加 (1<<6), SETTLETIME = 0.0002
x_offset: 0                  #记得设置x偏移
y_offset: 15                #记得设置y偏移
z_offset: 1 .5               #记得设置z偏移, 差不多就行, 1-3mm都行, 已经禁用振幅错误报告了, 不用担心报错
speed: 5                     #探测速度
samples: 3                   #采样次数
sample_retract_dist: 5.0     #采样时喷嘴抬升距离
samples_tolerance: 0.05
samples_tolerance_retries: 3
 
#独立线圈的加速度计配置
[lis2dw]
i2c_address: 25
i2c_mcu: toolhead
# i2c_bus: i2c1
i2c_software_scl_pin: toolhead:PB6
i2c_software_sda_pin: toolhead:PB7

[resonance_tester]
accel_chip: lis2dw
accel_per_hz: 50
probe_points: 100, 100, 20
 
#独立线圈的NTC热敏电阻配置
[temperature_probe eddy_probe]
sensor_type: Generic 3950
sensor_pin: toolhead:T2
horizontal_move_z: 1
 
# 板载AHT20温度传感器配置, 需要升级到最新版的klipper版本才能用
#[temperature_probe eddy_probe]
#horizontal_move_z: 1
# sensor_type: AHT2X
# i2c_mcu: toolhead
# i2c_speed: 400000
# i2c_address: 56
# i2c_software_scl_pin: toolhead:PB6
# i2c_software_sda_pin: toolhead:PB7

# eddy 快速Z调平
[gcode_macro Z_TILT_ADJUST]
rename_existing: _Z_TILT_ADJUST
gcode:
    {% set PROBE_Z_OFFSET = printer.configfile.settings['probe_eddy_current eddy_probe'].z_offset|float %}
    # ========== State Save ==========
    SAVE_GCODE_STATE NAME=STATE_Z_TILT
   
    # ========== Environment Preparation ==========
    BED_MESH_CLEAR # Clear existing bed mesh data
   
    # ========== Main Leveling Process ==========
    # 第一次调平前先慢慢调平, 三点之差在很小范围内再扫床, 避免撞床
    {% if not printer.z_tilt.applied %}
        # Initial coarse adjustment
        _Z_TILT_ADJUST horizontal_move_z=8 retry_tolerance=1
    {% endif %}
   
    # Fine secondary leveling
    _Z_TILT_ADJUST horizontal_move_z={PROBE_Z_OFFSET} retry_tolerance=0.0075 retries=20 METHOD=rapid_scan ADAPTIVE=1
    G0 Z10 F6000                     # Use standard G-code commands instead of HORIZONTAL_MOVE_Z

    # ========== Post-Processing ==========
    G90                                 # Force absolute coordinate mode
    G0 Z10 F6000                        # Raise Z axis to safe height
    M117 Z_tilt Completed               # Display completion status
    #G28                                 # Return to origin
    # ========== State Restore ==========
    RESTORE_GCODE_STATE NAME=STATE_Z_TILT
    M400

# eddy 快速网床
[gcode_macro BED_MESH_CALIBRATE]
rename_existing: _BED_MESH_CALIBRATE
gcode:
    {% set PROBE_Z_OFFSET = printer.configfile.settings['probe_eddy_current eddy_probe'].z_offset|float %}
    _BED_MESH_CALIBRATE horizontal_move_z={PROBE_Z_OFFSET} METHOD=rapid_scan {rawparams}

[gcode_macro PROBE_EDDY_CURRENT_CALIBRATE_AUTO]
description: 第一次使用涡流时, 校准使用
gcode:
  BED_MESH_CLEAR
  G28 X Y
  G90 # Abs positioning
  G1 X20 Y20 F6000
  {% if 'z' not in printer.toolhead.homed_axes %}
    SET_KINEMATIC_POSITION Z={ printer.toolhead.axis_maximum.z-1 } # Allows the user to work it down until it touches.
  {% endif %}
  PROBE_EDDY_CURRENT_CALIBRATE CHIP=eddy_probe

 

六. 我的klipper校准的一些频率-高度对应数据, 这个线圈安装高度距离喷嘴1.6mm处测量到的数据:

#*# [probe_eddy_current eddy_probe]
#*# calibrate =
#*#   0.050000:5664466.232,0.090000:5647568.212,0.130000:5631459.747,
#*#   0.170000:5615556.830,0.210000:5600586.992,0.250000:5585590.998,
#*#   0.290000:5571393.383,0.330000:5557380.050,0.370000:5544212.634,
#*#   0.410000:5530978.721,0.450000:5518498.266,0.490000:5506066.275,
#*#   0.530000:5494415.412,0.570000:5482569.510,0.610000:5471407.384,
#*#   0.650000:5460237.569,0.690000:5449775.904,0.730000:5439200.068,
#*#   0.770000:5429253.632,0.810000:5419316.813,0.850000:5409973.289,
#*#   0.890000:5400499.600,0.930000:5391606.712,0.970000:5382694.490,
#*#   1.010000:5374314.266,1.050000:5365819.150,1.090000:5357697.848,
#*#   1.130000:5349716.210,1.170000:5342112.094,1.210000:5334526.032,
#*#   1.250000:5327288.881,1.290000:5320116.180,1.330000:5313218.886,
#*#   1.370000:5306312.336,1.410000:5299713.935,1.450000:5293216.151,
#*#   1.490000:5286953.759,1.530000:5280698.637,1.570000:5274690.443,
#*#   1.610000:5268799.663,1.650000:5263096.405,1.690000:5257456.036,
#*#   1.730000:5252005.607,1.770000:5246640.819,1.810000:5241447.805,
#*#   1.850000:5236285.310,1.890000:5231280.512,1.930000:5226377.901,
#*#   1.970000:5221642.585,2.010000:5216917.879,2.050000:5212375.617,
#*#   2.090000:5207866.765,2.130000:5203567.110,2.170000:5199219.024,
#*#   2.210000:5195085.871,2.250000:5190943.995,2.290000:5187001.353,
#*#   2.330000:5183010.882,2.370000:5179208.449,2.410000:5175405.046,
#*#   2.450000:5171791.589,2.490000:5168095.654,2.530000:5164627.855,
#*#   2.570000:5161140.058,2.610000:5157822.621,2.650000:5154450.703,
#*#   2.690000:5151235.380,2.730000:5147973.543,2.770000:5144945.514,
#*#   2.810000:5141809.291,2.850000:5138849.722,2.890000:5135866.272,
#*#   2.930000:5133052.087,2.970000:5130191.346,3.010000:5127474.534,
#*#   3.050000:5124747.163,3.090000:5122151.878,3.130000:5119536.327,
#*#   3.170000:5117012.918,3.210000:5114505.500,3.250000:5112090.763,
#*#   3.290000:5109662.699,3.330000:5107327.342,3.370000:5105014.831,
#*#   3.410000:5102762.804,3.450000:5100521.177,3.490000:5098353.648,
#*#   3.530000:5096214.892,3.570000:5094147.070,3.610000:5092072.040,
#*#   3.650000:5090054.184,3.690000:5088052.955,3.730000:5086096.847,
#*#   3.770000:5084179.014,3.810000:5082317.976,3.850000:5080490.255,
#*#   3.890000:5078694.385,3.930000:5076897.001,3.970000:5075151.349,
#*#   4.010000:5073426.751,4.050000:5071761.954
#*# reg_drive_current = 25
#*#
#*# [temperature_probe eddy_probe]
#*# calibration_temp = 24.806942

 

七. 关于线圈设计:

线圈形状不会对使用造成影响, 无论是8边形还是圆形,还是超圆线圈, 影响微乎其微

为此我还开发一个在线工具来设计超圆线圈:  https://demo.chengxg.top/eddy_coil_designer.html

TI官方的线圈设计工具: https://webench.ti.com/wb5/LDC/#/spirals

我设计的LDC1612线圈频率在线实时监控传感器:  https://oshwhub.com/cxg01/3d-printer-weighing-hot-bed-sensor,  也可以用来当做普通的接近开关使用

 

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
暂无数据
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航