1. 文件位置

LinuxCNC 在启动时会去特定目录查找配置和 G 代码文件,而具体目录取决于你是通过图形界面运行还是命令行运行。

1.1. 安装

当你用 Live CD 或 .deb 安装包运行 LinuxCNC,并通过菜单里的配置选择器启动时,LinuxCNC 会自动在指定的默认目录里查找配置和 G 代码文件:

  • LinuxCNC的目录位于'/home/user-name/linuxcnc'。

  • 配置文件目录位于'/home/user-name/linuxcnc/configs'。

    • 配置文件位于 /home/user-name/linuxcnc/configs/name-of-config.

  • G代码文件位于/home/user-name/linuxcnc/nc_files'。

例如,对于一个名为 Mill 的配置和用户名为 Fred 的情况,目录和文件结构将如下所示。

  • /home/fred/linuxcnc

  • /home/fred/linuxcnc/nc_files

  • /home/fred/linuxcnc/configs/mill

    • /home/fred/linuxcnc/configs/mill/mill.ini

    • /home/fred/linuxcnc/configs/mill/mill.hal

    • /home/fred/linuxcnc/configs/mill/mill.var

    • /home/fred/linuxcnc/configs/mill/tool.tbl

1.2. 命令行

如果你从命令行运行 LinuxCNC 并指定 INI 文件的名称和位置,文件位置可以在不同的地方。要查看从命令行运行 LinuxCNC 的选项,请运行 linuxcnc -h。

某些文件的位置可以在 INI 文件中配置。请参阅[DISPLAY]部分和[RS274NGC]部分。

2. 文件

每个配置目录至少需要包含以下文件:

  • 一个INI文件.ini

  • 一个HAL文件.hal和HALTCL文件.tcl 在INI配置文件的HAL节指定。

某些图形用户界面可能需要其他文件。

你也可以选择:

  • 一个变量文件.var

    • 如果你在某个目录中省略了 .var 文件,但在 <<sub:ini:sec:rs274ngc,[RS274NGC]>> 中包含了 PARAMETER_FILE=somefilename.var,当 LinuxCNC 启动时,将会为你创建该文件。

    • 如果您省略 .var 文件并且省略条目 [RS274NGC] PARAMETER_FILE,当 LinuxCNC 启动时,会创建一个名为 rs274ngc.var 的 var 文件。如果省略了 [RS274NGC] PARAMETER_FILE,可能会出现一些令人困惑的信息。

  • 一个工具表文件.tbl,如果在 INI 文件中指定了 <<sub:ini:sec:emcmot,[EMCMOT]>> TOOL_TABLE。有些配置不需要工具表。

3. 步进系统

3.1. 基准周期

基准周期 是您 LinuxCNC 计算机的“心跳周期”。
[本节涉及使用 stepgen,即 LinuxCNC 内置的步进生成器。一些硬件设备有自己的步进生成器,而不使用 LinuxCNC 的内置生成器。在这种情况下,请参考您的硬件手册。]
每个周期,软件步进生成器都会决定是否该发出另一个步进脉冲。较短的周期允许您在一定限度内每秒生成更多的脉冲。但如果周期太短,计算机将花费过多时间生成步进脉冲,导致其他操作极度缓慢,甚至可能死机。延迟和步进驱动器的要求会影响您能使用的最短周期。

最坏情况的延迟可能每分钟只发生几次,而且在电机改变方向的同时发生延迟的可能性很低。因此,你可能会偶尔遇到极少的错误,这些错误会毁掉零件,而且几乎无法排查。

避免这个问题的最简单方法是选择一个 基准周期,其值等于驱动器最长时序要求与计算机最坏情况下延迟的总和。但这并不总是最佳选择。例如,如果你使用的驱动器方向信号保持时间要求为 20 µs,而延迟测试显示最大延迟为 11 µs,那么如果你将 基准周期 设置为 20+11 = 31 µs,你会在一种模式下得到不太理想的 32,258 步每秒,在另一种模式下得到 16,129 步每秒。

问题出在20微秒的保持时间要求。再加上11微秒的延迟,这就迫使我们使用较慢的31微秒周期。但LinuxCNC软件的步进生成器有一些参数,可以让你将不同的时间从一个周期增加到多个周期。例如,如果将“steplen”(注:steplen指的是一个参数,用于调整LinuxCNC内置步进生成器stepgen的性能,这是一个HAL组件。该参数调整步进脉冲本身的长度。继续阅读,最终会有解释。)从1改为2,那么在步进脉冲的开始和结束之间就会有两个周期。同样,如果将“dirhold”(注:dirhold指的是一个参数,用于调整方向保持时间的长度。)从1改为3,那么在步进脉冲与方向针变化之间至少会有三个周期。

如果我们可以使用“dirhold”来满足20µs的保持时间要求,那么下一个最长的时间是4.5µs的高电平时间。将11µs的延迟加到4.5µs的高电平时间上,你得到的最小周期是15.5µs。当你尝试15.5µs时,会发现计算机反应迟钝,因此你最终选择16µs。如果我们将“dirhold”保持在1(默认值),那么步进信号和方向信号之间的最小时间就是16µs周期减去11µs延迟=5µs,这是不够的。我们需要额外的15µs。由于周期为16µs,我们需要再增加一个周期。因此我们将“dirhold”从1改为2。现在,从步进脉冲结束到方向引脚变化的最小时间为5+16=21µs,并且我们不必担心驱动因延迟而朝错误方向步进。

有关stepgen的更多信息,请看 stepgen section

3.2. 步进时序

在某些驱动器中,步进脉冲的时序 (Step Timing) 和 脉冲间隔 (Step Space) 要求不同,此时必须关注驱动器识别脉冲的边沿。如果驱动器在 下降沿识别脉冲,就需要在 LinuxCNC 中 反转输出引脚,以确保脉冲被正确触发。

4. 伺服系统

4.1. 基础流程

伺服系统在速度和精度方面比同等的步进系统更高,但成本更高且更复杂。与步进系统不同,伺服系统需要某种类型的位置反馈装置,并且必须进行调整或“调试”,因为它们不像步进系统那样开箱即用。这些差异的存在是因为伺服系统是“闭环”系统,而步进电机通常是“开环”运行。“闭环”是什么意思呢?让我们来看一个简化的伺服电机系统连接示意图。

伺服电机系统连接的简化示意图

该图表显示输入信号(以及反馈信号)驱动求和放大器,求和放大器驱动功率放大器,功率放大器驱动电机,电机驱动负载(以及反馈装置),反馈装置(以及输入信号)驱动电机。这看起来非常像一个循环(闭环),其中 A 控制 B,B 控制 C,C 控制 D,D 控制 A。

如果你以前没有接触过伺服系统,一开始这无疑会显得非常陌生,尤其是与更常见的电子电路相比,那里的输入可以平滑地传递到输出,并且永远不会回退。脚注:[如果有帮助的话,在数字世界中最接近的等价物是“状态机”、“顺序机”等等,其中输出的“当前”行为取决于输入(以及输出)之前的状态。如果这没帮助,那就算了。] 如果“每样东西”都控制“其他一切”,怎么可能运作呢,谁来掌控?答案是,LinuxCNC“可以”控制这个系统,但它必须通过选择几种控制方法之一来实现。LinuxCNC所使用的控制方法,其中一种最简单且最佳的方法,叫做PID。

PID代表比例、积分和微分。比例值决定对当前误差的反应,积分值决定基于最近误差之和的反应,微分值决定基于误差变化速率的反应。它们是三种常用的数学技术,用于使工作过程能够跟随设定点。在LinuxCNC的情况下,我们想要控制的过程是实际轴位置,而设定点是指令的轴位置。

PID 控制环路,PID 代表比例、积分和微分

通过调整PID控制器算法中的三个常数,控制器可以提供针对特定工艺要求的控制动作。控制器的响应可以通过其对误差的响应速度、对设定点的超调程度以及系统振荡的程度来描述。

4.2. 比例项

比例项(有时称为增益)会根据当前误差值的大小对输出进行调整。较高的比例增益会导致输出对给定误差变化产生较大的响应。如果比例增益过高,系统可能会变得不稳定。相反,较低的增益会导致输出对较大输入误差的响应较小。如果比例增益过低,控制动作在应对系统扰动时可能会过小。

在没有干扰的情况下,纯比例控制不会达到目标值,而是会保持一个稳态误差,该误差与比例增益和过程增益有关。尽管存在稳态偏差,调节理论和工业实践都表明,输出变化的大部分应由比例项贡献。

4.3. 积分项

积分项(有时称为复位)的贡献与误差的大小和持续时间成正比。随着时间对瞬时误差进行求和(积分误差),可以得到之前应该被纠正的累计偏差。然后,将累计误差乘以积分增益,并加到控制器输出中。

积分项(当与比例项相加时)加快了过程向设定点运动的速度,并消除了仅使用比例控制器时出现的残余稳态误差。然而,由于积分项对过去累积的误差作出响应,它可能导致当前值超过设定点值(越过设定点,然后在相反方向产生偏差)。

4.4. 微分项

过程误差的变化率是通过确定误差随时间变化的斜率(即对时间的一阶导数)来计算的,并将该变化率乘以微分增益。

微分项可以减缓控制器输出的变化速率,这一效果在接近控制器设定点时最为明显。因此,微分控制用于减小积分组件产生的超调幅度,并提高控制器与过程的整体稳定性。

4.5. 环路调节

如果PID控制器参数(比例、积分和微分项的增益)选择不当,被控过程的输入可能会不稳定,即其输出会发散,可能伴随振荡,也可能不振荡,其限制仅由饱和或机械损坏决定。控制环路的调节是将其控制参数(增益/比例带、积分增益/复位、微分增益/速率)调整到所需控制响应的最佳值的过程。

4.6. 手动调节

一种简单的调节方法是,首先将 I(积分项) 和 D(微分项) 的数值设为零。逐步增加 P(比例项),直到环路输出开始振荡,然后将 P 设置为该值的大约一半,以获得“四分之一幅衰减”类型的响应。接着增加 I,直到系统能够在合理时间内消除偏差。但 I 过大将导致不稳定。最后,如果需要的话,增加 D,使环路在负载扰动后能够较快地回到参考值。但 D 过大则会引起过度响应和超调。快速的 PID 环路调节通常会允许系统略微超调,以便更快达到设定值;然而,有些系统不能接受超调,这种情况下就需要一个“过阻尼”的闭环系统,此时 P 的设定必须显著低于引起振荡时 P 值的一半。

5. S 曲线轨迹规划

S型曲线轨迹规划限制了加加速度(加速度的变化率),以提供更平滑的运动。这可以减少机器振动并改善表面质量,但需要调节额外的参数。

5.1. 启用

在 INI 文件中设置:

[TRAJ]
PLANNER_TYPE = 1              # 0=trapezoidal (default), 1=S-curve
MAX_LINEAR_JERK = 1000.0      # Machine units/s^3

[JOINT_n]
MAX_JERK = 1000.0

S-curve planning is only active when PLANNER_TYPE = 1 and MAX_LINEAR_JERK > 0.

If MAX_LINEAR_JERK is not specified, it defaults to 1e9 (1 billion), which effectively disables jerk limiting while maintaining S-curve calculations. This produces motion similar to trapezoidal planning but not identical. The maximum allowed value is 1e9 to prevent numerical instability.

5.2. 调节

Start with a conservative jerk value and increase gradually:

MAX_JERK ≈ 10 to 100 × MAX_ACCELERATION

Typical values: 100-100,000 units/s3 depending on machine rigidity and units (mm values are typically 1000x larger than inch values).

Increase MAX_LINEAR_JERK until motion becomes sluggish or following errors increase, then reduce slightly. Test with coordinated moves and arcs.

Values above 1e9 are automatically clamped to 1e9 to avoid numerical issues in the S-curve trajectory calculations.

6. RTAI

实时应用接口(RTAI)用于提供最佳的实时(RT)性能。RTAI 打补丁的内核允许您编写具有严格时间约束的应用程序。RTAI 使您能够实现诸如软件步进生成等需要精确时序的功能。

6.1. ACPI

高级配置与电源接口(ACPI)有很多不同的功能,其中大多数会影响实时(RT)性能(例如:电源管理、CPU 关机、CPU 频率调节等)。LinuxCNC 内核(可能还有所有经过 RTAI 补丁的内核)默认禁用了 ACPI。ACPI 还负责在系统启动关机后关闭电源,这就是为什么你可能需要按电源按钮才能完全关闭计算机的原因。RTAI 团队在最近的版本中对这一点进行了改进,因此你的 LinuxCNC 系统最终可能会自动关机。

7. Computer/Machine Interface Hardware Options

7.1. litehm2/rv901t

Litehm2 is a board-agnostic port of the HostMot2 FPGA firmware. The first board it supports is the linsn rv901t, which was originally built as a LED controller board, but due to the available I/O it is well suited to act as a machine controller. It offers around 80 5V-buffered I/O ports and can switch between all input and all output. it is also easily modified to split the ports half/half between input and output. The rv901t interfaces to the computer via Gigabit or 100Mbit Ethernet.

Litehm2 is based on the LiteX framework which supports a wide range of FPGA boards. Currently only the rv901t is supported, but support for more boards is under development.

More information can be found at https://github.com/sensille/litehm2.