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.

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.

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.