跳转至

常见问题

我如何向项目捐款?

感谢您的支持。请参阅赞助商页面以获取信息。

如何计算 rotation_distance 配置参数?

参见旋转距离文档

我的串口在哪里找?

查找 USB 串行端口的一般方法是从主机上的 ssh 终端运行 ls /dev/serial/by-id/*。 它可能会产生类似于以下内容的输出:

/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0

在上述命令中找到的名称是稳定的,可以在配置文件中使用它,同时可用于刷写微控制器的代码。 例如,一个 flash 命令:

sudo service klipper stop
make flash FLASH_DEVICE=/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
sudo service klipper start

更新后的配置可能如下所示:

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0

请务必从上面运行的“ls”命令中复制并粘贴名称,因为每个打印机的名称都不同。

如果您使用多个微控制器并且它们没有唯一的 ID(在带有 CH340 USB 芯片的板上很常见),那么请按照上面的说明使用命令 ls /dev/serial/by-path/* 代替。

当微控制器重新启动设备更改为/dev/ttyUSB1

按照“我的串行端口在哪里找?”部分中的说明来防止这种情况发生。

“make flash”命令不起作用

该代码尝试使用每个平台最常用的方法来刷写设备。 不幸的是,刷写方法存在很多差异,因此“make flash”命令可能不适用于所有主板。

如果您遇到间歇性故障或您确实有标准设置,请仔细检查刷写时 Klipper 是否未运行(sudo service klipper stop),确保 OctoPrint 未尝试直接连接到设备(打开 网页中的连接选项卡,如果串行端口设置为设备,则单击断开连接),并确保为您的电路板正确设置了 FLASH_DEVICE(请参阅上面的问题)。

但是,如果“make flash”对您的电路板不起作用,那么您将需要手动刷写。 查看 config directory 中是否有一个配置文件,里面有刷机的具体说明。 此外,请查看电路板制造商的文档,看看它是否描述了如何刷写设备。 最后,可以使用诸如“avrdude”或“bossac”之类的工具手动刷写设备——有关更多信息,请参阅引导加载程序文档

如何更改串行波特率?

Klipper的推荐波特率是 250000。这个波特率在 Klipper 支持的所有微控制器板上都很好用。如果你发现网上的指南推荐了一个不同的波特率,那么请忽略这部分指南,继续使用默认值 250000。

如果你还是想改变波特率,那么需要重新配置微控制器为新的波特率(在make menuconfig过程中),然后将更新的代码编译并刷写到微控制器中。Klipper 的 printer.cfg 文件也需要更新以匹配该波特率(详见配置参考。例如:

[mcu]
baud: 250000

OctoPrint 网页上显示的波特率对内部 Klipper 微控制器的波特率没有影响。使用 Klipper 时,始终将 OctoPrint 的波特率设置为250000。

Klipper 微控制器的波特率与微控制器启动引导程序的波特率无关。有关启动引导程序的额外信息请参阅启动引导程序文档

我可以在 Raspberry Pi 3 以外的其他设备上运行 Klipper 吗?

The recommended hardware is a Raspberry Pi Zero2w, Raspberry Pi 3, Raspberry Pi 4 or Raspberry Pi 5. Klipper will also run on other SBC devices as well as x86 hardware, as described below.

Klipper will run on a Raspberry Pi 1, 2 and on the Raspberry Pi Zero1, but these boards don't have enough processing power to run Klipper well. It is common for print stalls to occur on these slower machines when printing (The printer may move faster than Klipper can send movement commands.) It is not reccomended to run Klipper on these older machines.

要在Beaglebone上运行,请参阅Beaglebone特别安装说明

Klipper 可以在其他计算机上运行。Klipper 主机软件只需要在Linux(或类似)系统的计算机上运行 Python。然而,如果你想在其他计算机上运行它,你将需要一些 Linux 管理知识来安装该计算机上系统的依赖包。参见 install-octopi.sh 脚本,以进一步了解必要的 Linux 安装方法。

如果你想在低端处理器上运行 Klipper 主机软件,请注意,你至少需要一台具有 "双精度浮点 "运算硬件的计算机。

如果你想在共享的通用计算机或服务器上运行 Klipper 主机程序,请注意 Klipper 有一些实时调度要求。如果在打印过程中,主机也在执行密集型的通用计算任务(如硬盘碎片整理、3D渲染、大量swapping (虚拟内存交换)等),可能会导致 Klipper 报告打印错误。

注意:如果你没有使用 OctoPi 镜像,一些Linux发行版启用了一个 "ModemManager"(或类似的)软件包,它干扰串行通信。(这可能导致 Klipper 报告看似随机的 "与MCU失去通信 "错误)。如果你在这些发行版上安装Klipper,你可能需要禁用该软件包。

我可以在同一台主机上运行多个 Klipper 实例吗?

可以运行 Klipper 主机软件的多个实例,但这样做需要一定的 Linux 知识。 Klipper 安装脚本最终会导致运行以下 Unix 命令:

~/klippy-env/bin/python ~/klipper/klippy/klippy.py ~/printer.cfg -l /tmp/klippy.log

只要每个实例都有自己的打印机配置文件、自己的日志文件和自己的伪 tty,就可以运行上述命令的多个实例。 例如:

~/klippy-env/bin/python ~/klipper/klippy/klippy.py ~/printer2.cfg -l /tmp/klippy2.log -I /tmp/printer2

如果你选择这样做,你将需要实现必要的启动、停止和安装脚本。install-octopi.shklipper-start.sh脚本提供了一些例子。

我必须使用 OctoPrint 吗?

Klipper 不依赖 OctoPrint。其他软件也可以向 Klipper 发送命令,但这样做可能需要一些 Linux 管理知识。

Klipper 通过 “/tmp/printer” 文件创建了一个“虚拟串口”,该文件模拟了一个标准的3D打印机串口。理论上任何能配置并使用 “/tmp/printer” 作为打印机串口的软件都可以与Klipper一起工作。

为什么在归位打印机之前我不能移动步进电机?

代码这样做是为了减少意外将头撞到床或墙壁的机会。 打印机归位后,软件会尝试验证每个移动是否在配置文件中定义的 position_min/max 范围内。 如果电机被禁用(通过 M84 或 M18 命令),那么电机将需要在运动前再次归位。

如果您想在通过 OctoPrint 取消打印后移动打印头,请考虑更改 OctoPrint 取消顺序来为您执行此操作。 它是通过 Web 浏览器在 OctoPrint 中配置的:设置-> GCODE 脚本

如果您想在打印完成后移动头部,请考虑将所需的移动添加到切片机的“自定义 g 代码”部分。

如果打印机归位过程中需要一些额外的移动(或者根本上没有归位运动),那么可以在配置文件中定义safe_z_home或 homing_override分段。如果你需要为诊断或调试目的移动一个步进,可以在配置文件中添加一个 force_move 分段。参见配置参考以了解关于这些选项的详情。

为什么 Z position_endstop 在默认配置中设置为 0.5?

对于笛卡尔式打印机,Z position_endstop 定义了当限位触发时喷嘴离床的距离。如果可能的话,建议使用 Z-max 限位使归位时打印头远离床(因为这可以减少碰撞的发生)。如果必须朝向床归位,那么建议将限位固定在喷嘴距离床还有一小段距离时触发。这样,当归位 Z 轴时,喷嘴会在接触床之前停止。有关详细信息,请参阅 打印床调平文档

我从 Marlin 转换了我的配置并且 X/Y 轴工作正常,但是在归位 Z 轴时我只听到刺耳的噪音且打印机不动

长话短说:首先,请确保您已按照 配置检查文档 中描述的步骤验证了步进驱动配置。如果问题仍然存在,请尝试降低打印机配置中的 max_z_velocity 设置。

具体原理:在实践中,Marlin 通常只能以每秒 10000 步左右的速度发送步进。如果要求它以需要更高的步进率的速度移动,那么 Marlin 会尽可能快地步进。Klipper 能够实现更高的步进率,但步进电机可能没有足够的扭矩以更高的速度移动。因此,对于一个具有高传动比或高微步设定的 Z 轴,实际的最大速度可能小于 Marlin 中配置的值。

我的 TMC 电机驱动在打印过程中关闭了

如果在“独立模式”中使用 TMC2208(或 TMC2224)驱动,那么请确保您正在使用最新版本的 Klipper。2020年3月中旬,Klipper 中修复了 TMC2208 “StealthChop” 驱动的问题。

我不断收到随机的"与MCU失去通信"错误

这通常是由主机和微控制器之间的 USB 连接中硬件错误引起的。注意这些问题:

  • 在主机和微控制器之间应该使用高质量USB线,并确保插头牢固。
  • 如果使用树莓派,请为树莓派使用优质电源,并使用优质USB电缆将该电源与Pi连接。如果你从OctoPrint得到 "电压不足 "的警告,这也与电源有关,必须解决。
  • 请确保打印机的电源没有过载。(微控制器 USB 芯片的电压波动可能会导致该芯片欠压复位。)
  • 确认步进电机、加热器和其他打印机电线没有被压坏或磨损。(打印机移动时可能对故障的电线施加压力,导致其失去接触、短暂短路或产生过多的噪音。)
  • 有报告称,当打印机的电源和主机的5V电源混合时,USB噪音很大。(如果你发现当打印机的电源打开或USB电缆插入时,微控制器会通电,那么这表明5V电源被混用了)。配置微控制器,使其只使用一个电源可能会有帮助。(另外,如果微控制器主板不能配置其供电来源,也可以修改USB电缆,使其主机和微控制器之间不共享5V电源。)

我的树莓派在打印时不断重启

这很可能是由于电压波动引起的。请遵循"与MCU失去通信"错误同样的故障排除步骤。

当设置restart_method=command时, AVR 设备在重启时就会死机

一些旧版本的AVR引导程序在看门狗事件处理方面有一个已知的错误。这通常表现在printer.cfg文件中的restart_method设置为 "command"的时候。当这个错误发生时,AVR设备会死机直到电源被移除并重新上电(电源或状态LED也可能不停的闪烁直到断电)。

解决办法是使用 "command "以外的重启方法,或者在AVR设备上刷写一个新的引导程序。刷写一个新的引导程序是一个一次性的步骤,通常需要一个外部编程器--更多细节请参见Bootloaders

如果 Raspberry Pi 崩溃了,加热器会一直加热吗?

The software has been designed to prevent that. Once the host enables a heater, the host software needs to confirm that enablement every 3 seconds. If the micro-controller does not receive a confirmation every 3 seconds it goes into a "shutdown" state which is designed to turn off all heaters and stepper motors.

详情请见MCU 命令文档中的 "config_digital_out" 命令。

此外,微控制器软件在启动时为每个加热器配置了最低和最高温度范围(详见配置参考中的min_temp和max_temp参数)。如果微控制器检测到温度超出了该范围,那么它也将进入 "关机 "状态。

另外,主机软件还实现了检查加热器和温度传感器是否正常工作的代码。详情见配置参考

如何将 Marlin 引脚编号转换为 Klipper 引脚名称?

简要回答:在sample-aliases.cfg文件中有一个映射。使用该文件作为指引来寻找实际的微控制器引脚名称。(也可以将相关的board_pins配置部分复制到你的配置文件中,在你的配置中使用别名,但最好是翻译并使用实际的微控制器引脚名称。) 请注意,sample-aliases.cfg文件使用以 "ar "开头的引脚名称替换 "D"(例如,Arduino引脚D23是Klipper别名ar23)和以 "analog "开头的引脚名称替换 "A"(例如,Arduino引脚A14是Klipper别名analog14)。

详细答案:Klipper使用微控制器定义的标准引脚名称。在 Atmega 芯片上,这些硬件引脚的名称类似于PA4PC7PD2

很久以前,Arduino项目决定避免使用标准的硬件名称,而采用他们自己的基于递增数字的引脚名称--这些Arduino名称一般看起来像D23A14。这是一个不幸的选择,导致了大量的混乱。特别是Arduino的引脚号码经常不能转换为相同的硬件名称。例如,D21在一个常见的Arduino板上是PD0,但在另一个常见的Arduino板上是PC7

为了避免这种混淆,Klipper 核心代码使用微控制器定义的标准引脚名称。

我必须将设备连接到特定类型的微控制器引脚吗?

这取决于设备和引脚的类型:

ADC 引脚(或模拟引脚):热敏电阻和类似的“模拟”传感器必须连接到微控制器上具有“模拟”或“ADC”功能的引脚。如果您在 Klipper 上为一个模拟传感器配置为使用不具备模拟功能的引脚,Klipper 将报告“Not a valid ADC pin”错误。

PWM引脚(或定时器引脚)。Klipper默认不在任何设备上使用硬件PWM。因此,一般来说,可以将热端、风扇和类似的设备连接到任何的通用IO引脚。然而,风扇和output_pin设备可以选择配置为使用hardware_pwm: True,在这种情况下,微控制器在这个引脚上必须支持硬件PWM(否则,Klipper将报告 "不是有效的PWM引脚 "错误)。

IRQ引脚(或中断引脚)。Klipper不使用IO引脚上的硬件中断,所以没有必要将设备连接到这些微控制器引脚上。

SPI 引脚:使用硬件 SPI 时,需要将引脚连接到微控制器的 SPI 引脚。但是,大多数设备都可以配置为使用“软件 SPI”,在这种情况下,可以使用任何通用 IO 引脚。

I2C 引脚:使用 I2C 时,必须将引脚连接到微控制器支持 I2C 的引脚。

其他设备可以连接到任何通用的IO引脚。例如,步进电机、加热器、风扇、Z探头、舵机、LED、通用的hd44780/st7920液晶显示器和Trinamic UART控制线都可以连接到任何通用的IO引脚。

如何取消 M109/M190 "等待达到目标温度"的请求?

导航到OctoPrint终端标签页,在终端框中输入M112命令。M112命令将使Klipper进入 "关机 "状态,它将使OctoPrint从Klipper断开。导航到OctoPrint连接区,点击 "连接",使OctoPrint重新连接。导航回到终端标签页,输入FIRMWARE_RESTART命令以清除Klipper的错误状态。完成这一系列操作将取消先前的加热请求,可以开始新的打印。

怎么检查打印机是否发生了丢步?

在某种程度上,是的。将打印机归位,发出 GET_POSITION命令,运行打印,再次归位,再发出 GET_POSITION。然后比较 mcu:行中的值。

这可能有助于调整步进电机电流、加速度和速度等设置,而不需要实际打印东西和浪费材料:只要在 GET_POSITION命令之间运行一些高速移动。

请注意,限位开关本身的触发位置略有不同,所以导致限位开关触发结果可能有几个微步的误差。步进电机本身只能以4个整步为增量损失步数。(因此,如果使用16个微步,那么步进器电机上的失步将导致 "MCU: "步进计数器偏离64微步的倍数。)

为什么 Klipper 会报错?我收了一盘面条(我又打废了)!

简短的回答:我们想知道打印机是否检测到问题,这样就可以解决潜在的问题,就可以获得高质量的打印件。我们绝对不希望打印机默默地生产低质量的打印件。

详细答案:Klipper被设计成能够自动解决许多瞬时问题。例如,它自动检测到通信错误,并会重新传输;它提前安排行动,并在多层缓冲命令,以便即使有间歇性干扰也能精确控制时序。然而,如果软件检测到它无法恢复的错误,或者它被命令采取无效的行动,或者它检测到它无法执行其被命令的任务,那么Klipper将报告错误。在这些情况下,产生低质量印刷件(或更糟)的风险很大。我们希望通过提醒用户,使他们有能力解决潜在的问题,提高打印的整体质量。

有一些相关的问题。为什么Klipper不暂停打印?为什么不先警告?为什么不在打印前检查错误?为什么不忽略用户输入的命令中的错误?等等?目前,Klipper使用G-Code协议读取命令,不幸的是,G-Code命令协议不够灵活,导致现在并不能使用这些替代方案。开发者对改善异常事件中的用户体验很感兴趣,但预计这将需要大量的底层工作(包括从G-Code的迁移到别的方式)。

我怎样才能升级到最新的软件?

升级软件的第一步是查看最新的配置变更文件。作为软件升级的一部分,偶尔有时候软件会有一些变化需要用户更新他们的设置。在升级前最好查看该文件。

当准备升级时,一般的方法是ssh进入树莓派并运行:

cd ~/klipper
git pull
~/klipper/scripts/install-octopi.sh

然后可以重新编译和刷写微控制器的代码。例如:

make menuconfig
make clean
make

sudo service klipper stop
make flash FLASH_DEVICE=/dev/ttyACM0
sudo service klipper start

然而,通常是只有主机软件发生变化。这时可以只更新和重新启动主机软件:

cd ~/klipper
git pull
sudo service klipper restart

如果在使用这个快速方式后,软件警告说需要重新刷写微控制器或出现其他不常见的错误,那么请按照上面所述的完整升级步骤进行。

如果任何错误持续存在,那么请仔细检查config changes文件,因为可能需要修改打印机配置。

请注意,RESTART和FIRMWARE_RESTART g-code命令不会加载新的软件--需要使用上述 "sudo service klipper restart "和 "make flash "命令才能使软件变化生效。

如何卸载Klipper?

在固件端,没有什么特别需要做的。只要刷写新固件就可以了。

在树莓派上,卸载脚本在这里scripts/klipper-uninstall.sh。例如:

sudo ~/klipper/scripts/klipper-uninstall.sh
rm -rf ~/klippy-env ~/klipper
回到页面顶部