Kossel 升级记 - 增加断料检测

简介: 由于Kossel是使用远程挤出机,那么如果手动更换打印耗材就是一件非常麻烦的事,要将耗材从远程挤出机中抽出或者插入都是一件极为麻烦的事,甚至某些时候可以说是一团糟。

由于Kossel是使用远程挤出机,那么如果手动更换打印耗材就是一件非常麻烦的事,要将耗材从远程挤出机中抽出或者插入都是一件极为麻烦的事,甚至某些时候可以说是一团糟。如果LCD控制菜单或者通过GCode指令能帮助我们完成这一项工作那将是一种福音。

Marlin支持一个非常棒的GCode那就是M600,这是一个指示打印机更换打印耗材的半自动化功能。

但如果要打开这个功能就需要在固件中更改不少的地方,首先要找到FILAMENT_RUNOUT_SENSOR的定义并取消注释,使耗材检测传感器处于可用状态。然后要将FIL_RUNOUT_INVERTING设置为true,具体代码如下:

/**
 * Filament Runout Sensor
 * A mechanical or opto endstop is used to check for the presence of filament.
 *
 * RAMPS-based boards use SERVO3_PIN.
 * For other boards you may need to define FIL_RUNOUT_PIN.
 * By default the firmware assumes HIGH = has filament, LOW = ran out
 */

#define FILAMENT_RUNOUT_SENSOR

#if ENABLED(FILAMENT_RUNOUT_SENSOR)
  #define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
  #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
  #define FILAMENT_RUNOUT_SCRIPT "M600"
#endif

此时需要在将的 pins_RAMP.h 文件中的FIL_RUNOUT_PIN指向当前使用的跳线,如果采用Y-MIN则要改成以下的设定

#define FIL_RUNOUT_PIN      14 // 现在采用 Y-Min // 4

如果不清楚传感器的状态可以输入M119来查看断料传感器的状态,插入耗材后filament的状态应该为Tiggered, 在Pronterface的输出如下所示:

>>> M119
SENDING:M119
Reporting endstop status
x_max: open
y_max: open
z_min: open
z_max: open
filament: TRIGGERED

当然此时你还没有上传固件,因为现在的状态是不能成功进行编译的FILAMENT_RUNOUT_SENSOR是需要在Configuration_adv.h文件中启用ADVANCED_PAUSE_FEATURE才能成功编译。打开Configuration_adv.h文件找到以下的代码行:

/**
 * Advanced Pause
 * Experimental feature for filament change support and for parking the nozzle when paused.
 * Adds the GCode M600 for initiating filament change.
 * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
 *
 * Requires an LCD display.
 * Requires NOZZLE_PARK_FEATURE.
 * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
 */
#define ADVANCED_PAUSE_FEATURE

这个选项实际的意义就是让3d打印机可以暂停打印并进行停靠,当然你还得在Configuration.h 文件中将NOZZLE_PARK_FEATURE启用起来:

/**
 * Nozzle Park
 *
 * Park the nozzle at the given XYZ position on idle or G27.
 *
 * The "P" parameter controls the action applied to the Z axis:
 *
 *    P0  (Default) If Z is below park Z raise the nozzle.
 *    P1  Raise the nozzle always to Z-park height.
 *    P2  Raise the nozzle by Z-park amount, limited to Z_MAX_POS.
 */
#define NOZZLE_PARK_FEATURE

#if ENABLED(NOZZLE_PARK_FEATURE)
  // Specify a park position as { X, Y, Z }
  #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
  #define NOZZLE_PARK_XY_FEEDRATE 100   // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
  #define NOZZLE_PARK_Z_FEEDRATE 5      // Z axis feedrate in mm/s (not used for delta printers)
#endif

其中的三个变量的定义的意思如下:

  • NOZZLE_PARK_POINT - 指定效应器的停靠位置
  • NOZZLE_PARK_XY_FEEDRATE - 指定效应器在停靠时XY轴方向(水平)运行速度
  • NOZZLE_PARK_Z_FEEDRATE - 指定效应器在停靠时Z轴方向(垂直)运行速度

然后回到 Configuration_adv.h 文件中,还需要对 ADVANCED_PAUSE_FEATURE内的具体选项进行修改,否则在更换耗材时耗材只会被拖出一点点或者送进一点点,因为Marlin是对近程挤出机进行设置的所以出料与入料都设得很短,因此我们得将FILAMENT_CHANGE_UNLOAD_LENGTHFILAMENT_CHANGE_LOAD_LENGTH设置得长一些,我这里是设置成为500,也就是50CM,代码如下所示:

#if ENABLED(ADVANCED_PAUSE_FEATURE)
  // ... 省略
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 500   // Unload filament length from hotend in mm

  #define FILAMENT_CHANGE_LOAD_LENGTH 500     // Load filament length over hotend in mm
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
  // ...
#endif

上传,然后运行。成功?

不好意思,你的打印机一定只会不停地出现要你插入耗材的提示而且根本没有按照我们所想那样退料50cm或者进料50cm,这是什么鬼?如果打开Pronterfont来观察打印机的日志输出你会发现这么一行:

echo: too long extrusion prevented

然后打印机的LCD控制面板就会提示你插入耗材(即使现在已经插入了耗材)。这是由于被EXTRUDE_MAXLENGTH这个选项给限制了,它是阻止挤出过多地挤出耗材设定的,默认值只有200,对于远程挤出机来说根本不够,那就将它改成600吧,在Configuration.h你可以找到它,代码如下所示:

#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 600

上传固件,大功告成!

注意 : 如果你没有将挤出头的温度加热到170度以上,LCD中是不会出现更换耗材菜单的,记得想更换耗材之前要预热哦。

相关文章
|
算法 应用服务中间件 Go
国密算法证书及CFCA操作流程
国密算法证书及CFCA操作流程
5038 0
|
Windows
Anaconda卸载与重装过程记录
本文记录了博主Anaconda卸载与重装过程记录,此为博主电脑环境发生变化,无奈之举,希望对大家有所帮助
3189 0
Anaconda卸载与重装过程记录
|
9月前
|
算法 安全 数据安全/隐私保护
Python随机数函数全解析:5个核心工具的实战指南
Python的random模块不仅包含基础的随机数生成函数,还提供了如randint()、choice()、shuffle()和sample()等实用工具,适用于游戏开发、密码学、统计模拟等多个领域。本文深入解析这些函数的用法、底层原理及最佳实践,帮助开发者高效利用随机数,提升代码质量与安全性。
1250 0
|
Ubuntu 网络安全 图形学
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
在Ubuntu 20.04系统中解决网络图标消失和无法连接有线网络问题的方法,其中第三种方法通过检查并确保Windows防火墙中相关服务开启后成功恢复了网络连接。
5494 0
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
|
存储 安全 算法
鸿蒙NEXT如何保证应用安全:详解鸿蒙NEXT数字签名和证书机制
本文对鸿蒙NEXT公开资料进行了深入分析和解读,梳理了鸿蒙单框架应用的签名机制,拆解每一步的实操过程和背后的实现原理,并对源码分析整理签名的校验机制。从中管中窥豹,探究鸿蒙系统的安全设计思路,给从事鸿蒙研发的同学提供一些借鉴。
1635 3
|
移动开发 Dart JavaScript
Flutter for Web 首次首屏优化——JS 分片优化
Flutter for Web 首次首屏优化——JS 分片优化
1975 1
Flutter for Web 首次首屏优化——JS 分片优化
|
小程序 前端开发 API
一文就知道uniapp等跨端开发的使用场景,学习成本,如何快速使用,基本语法等
uniapp是一个跨平台开发各种各样应用的一套框架。只需要写一套代码,可以适配多达14种产品类型,比如H5移动端、微信小程序及各种其他小程序,ios、安卓等接近原生APP的应用(可以上架到App Store或应用商店)。所以这里的多端,指的并不是PC、平板、手机端,而是移动端优先,开发者可以一次编码,分别编译为小程序和 Android 以及 iOS 应用,实现多端开发
1488 0
|
前端开发 关系型数据库 测试技术
django集成pytest进行自动化单元测试实战
在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率,相比于Django自带的测试框架,Pytest提供了更为丰富和强大的测试功能。本文通过一个实际项目ishareblog介绍django集成pytest进行自动化单元测试实战。
437 3
django集成pytest进行自动化单元测试实战
|
存储 编解码 边缘计算
从RTMPS到MPEG-DASH:直播带货背后的秘密流程
大家好,我是小米,今天聊聊“社区直播带货”的技术流程。文章介绍了RTMPS协议的安全可靠传输,MPEG-DASH的自适应比特率流媒体技术,以及直播数据如何通过边缘节点和数据中心进行高效处理与分发,确保用户流畅观看。通过这些技术,直播带货不仅画质清晰,还保障了安全性和用户体验。希望本文能帮助你深入了解这一流程。如果有任何问题,欢迎留言讨论!
329 2
|
SQL 关系型数据库 MySQL
一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解
一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解
1526 0
一文速学-玩转MySQL中INTERVAL关键字和INTERVAL()函数用法讲解