最前面的
Klipper本身是不支持断电续打的,这些天陆续刷到了一些断电续打的视频,进行了一些思考,在这里总结一下。
参考
3D打印机Klipper固件相关分享计划 8. 断料检测、断电模型保护/续打
不回零不给移动电机?Klipper直接重新定义M84命令 强制移动!
概论
这几天陆陆续续看了一些断电续打的方案。
大概就是在断电时利用UPS供电触发一个自定义的macro,然后这个macro控制关闭热床和喷头加热,移开打印头(断电保护)。写坐标文件到硬盘。之后就是改代码上机打印了。大抵如下啊
断电 ->把喷嘴从模型上已开(断电保护模型) -> 恢复供电 -> 断点续打
但是目前搞不到UPS,也就是没法断电时瞬间写入坐标。那就只能效仿malin,每隔一定时间写一次坐标,然后在删除代码打印,比如2S?还是10S???
或者另一种方案,换层时写入,这样是不是对性能要求没那么高呢?
本来想每秒存一次位置的,但是。。。从主板那里得到消息存储芯片会出问题。那每层存一次位置呢??
24/8/1 断电续打基本完结了,实际测下来,接缝的痕迹还是很明显的,续打的效果非常差,不建议。。。
获取坐标
启用save_variables配置分段
用来将变量保存到磁盘,以便在重新启动时使用。所有存储的变量在启动时会被加载到printer.save_variables.variables
dict 变量中
启用功能
这里注意启用之后会直接创建文件
还有就是直接输入文件名无效比如ccvariables.cfg。反正我是没找到创建的文件去哪里了。 要选择路径带文件名1
2
3[save_variables]
filename:~/printer_data/config/tempVariables.cfg
# 必须提供一个可以用来保存参数到磁盘的文件名。将变量保存到磁盘
SAVE_VARIABLE VARIABLE=<名称> VALUE=<值>
取数据
1
2{% set svv = printer.save_variables.variables %}
{svv.<名称>}
提取坐标保存到文件
1 | [gcode_macro save_LOCATION] |
切片软件处理
每层图层改变后执行一次坐标存取
处理打印文件
第一种方案直接强制z坐标
- 参考不回零移动电机的方法第二种
- 删除打印层之前所有代码
先点击开头,然后滑动滚轮到末尾,按住shift在点击末尾,就可以选中多行了。
- 增加打印头
1
2
3
4
5; M190 S50 ; 设置床温度并等待达到设定温度
; M109 S180 ; 设置挤出头温度并等待达到设定温度
M106 S255 ; 开风扇
SET_KINEMATIC_POSITION Z=??? ; 设置动力学位置,Z轴高度为12.3毫米
G28 X0 Y0 ; 将X和Y轴归零
第二种方案
找到一个角落,自定义g代码让打印头归零获得z坐标。
然后打印?
不回零移动电机的方法
因为Klipper默认不允许在不回原的情况下移动xyz坐标
首先
1 | [force_move] |
第一种官方指令
FORCE_MOVE stepper=stepper_x distance=1 velocity=100 accel=300
强制移动某个轴,设定移动距离,移动速度,加速度。
第二种改写喷头坐标实现
1 | #重写解锁电机的M84指令,然后设置当前位置(类似G92指定位置;强制设定低级运动学代码使用的打印头位置。) |
- 我使用
SET_KINEMATIC_POSITION X=252.49 Y=175 Z=0
之后z坐标显示的是-0.11
。实验以后是受到床网的影响。当开启床网渐退功能,在大于fade_end
之后的坐标就正常显示,不会受到影响。
第三种重写M84指令(关闭电机指令)
1 | [gcode_macro M84] |