使用 LinuxCNC 进行 CNC 机床控制

June 24, 2026 · View on GitHub

简介

LinuxCNC 是一个开源软件系统,用于计算机控制铣床、车床、等离子切割机和机器人等机床。它提供步进电机和伺服电机的实时控制。

什么是 CNC?

计算机数控 (CNC) 使用计算机控制机床。LinuxCNC 解释 G-code 指令并将其转换为精确的电机运动。

组件功能
计算机运行 LinuxCNC 软件
运动控制器生成步进脉冲
电机驱动机床轴
机床物理切削工具

LinuxCNC 特性

特性描述
实时控制精确的电机控制时序
G-code 解释器处理加工指令
刀路显示切削路径可视化
配置工具机床设置向导
HAL硬件抽象层

系统要求

硬件要求

组件最低推荐
CPU1 GHz2+ GHz 多核
内存1 GB4 GB
存储10 GB50 GB
网络可选远程以太网

实时要求

方面要求
延迟< 50 微秒抖动
内核PREEMPT_RT 补丁内核
BIOS禁用电源管理
USB避免 USB 用于运动控制

支持的硬件

硬件类型示例
步进驱动TB6600、DM542、Gecko G203V
伺服驱动Mesa 7i77、Granite Devices
转接板Mesa 7i76、C10
接口卡Mesa 5i25、6i25

安装

安装 LinuxCNC

# 下载 LinuxCNC ISO
# 从 USB 启动安装
# 或在现有 Debian/Ubuntu 上安装
sudo apt update
sudo apt install linuxcnc-uspace

安装后设置

# 检查延迟
latency-test

# 验证安装
linuxcnc --version

延迟测试

延迟值质量用例
< 15,000 ns优秀伺服系统
15,000-30,000 ns良好步进系统
30,000-100,000 ns一般基本操作
> 100,000 ns不推荐

配置

配置向导

LinuxCNC 包含分步配置向导:

向导用途
步进配置配置步进电机系统
伺服配置配置伺服电机系统
主轴配置配置主轴速度控制
车床配置配置车床特定设置

INI 文件结构

[EMC]
MACHINE = My Mill
VERSION = 1.0

[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL

[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = inch
ANGULAR_UNITS = degree

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

轴配置

[AXIS_0]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 5.0
MAX_ACCELERATION = 50.0
SCALE = 4000
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
参数描述
TYPELINEAR(线性)或 ANGULAR(角度)
HOME原点位置
MAX_VELOCITY最大速度(单位/秒)
MAX_ACCELERATION最大加速度
SCALE每单位步数

硬件抽象层 (HAL)

什么是 HAL?

HAL 允许将软件组件连接在一起,创建自定义控制配置。

组件类型示例
Pin输入/输出信号
Signal引脚之间的连接
Function处理模块
Thread执行时序

基本 HAL 命令

# 列出所有引脚
halcmd show pin

# 连接信号
halcmd net signal-name pin1 pin2

# 设置值
halcmd setp pin-name value

# 加载组件
halcmd loadrt component_name

HAL 文件示例

# 加载实时组件
loadrt stepper_gen step_type=0,0,0
loadrt pid names=pid.x,pid.y,pid.z

# 连接步进发生器到位置命令
net x-pos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd
net x-pos-fb stepgen.0.position-fb => joint.0.motor-pos-fb

# 连接 PID 控制器
net x-pos-cmd pid.x.command
net x-pos-fb pid.x.feedback
net x-output pid.x.output => stepgen.0.velocity-cmd

G-code 编程

基本 G-code 命令

代码功能示例
G0快速移动G0 X10 Y10
G1直线插补G1 X10 Y10 F100
G2顺时针圆弧G2 X10 Y10 I5 J0
G3逆时针圆弧G3 X10 Y10 I5 J0
G90绝对定位G90
G91增量定位G91

常用 M-code

代码功能
M0程序停止
M1选择性停止
M2程序结束
M3主轴正转 (CW)
M4主轴反转 (CCW)
M5主轴停止
M6换刀
M8冷却液开
M9冷却液关

示例程序

(Header)
G21 G90 G17

(Tool change)
T1 M6
S1000 M3

(First cut)
G0 X0 Y0 Z5
G1 Z-2 F100
G1 X50 F200
G1 Y50
G1 X0
G1 Y0

(End)
G0 Z25
M5
M2

刀具管理

刀具表

刀具描述直径长度
T1立铣刀 6mm6.0 mm50 mm
T2钻头 3mm3.0 mm40 mm
T3球头铣刀 4mm4.0 mm45 mm

刀具长度补偿

G43 H1 (应用 T1 刀具长度补偿)
G49 (取消刀具长度补偿)

坐标系

工件坐标系

代码描述
G54工件坐标系 1
G55工件坐标系 2
G56工件坐标系 3
G57工件坐标系 4
G58工件坐标系 5
G59工件坐标系 6

设置工件零点

G10 L20 P1 X0 Y0 Z0 (将 G54 设为当前位置)

安全功能

急停

组件功能
急停按钮立即停止所有运动
软件急停软件触发的停止
限位开关防止超程

安全配置

[EMC]
EMCIO = io

[TRAJ]
MAX_VELOCITY = 10.0
MAX_ACCELERATION = 100.0

常见操作

回零序列

G28.1 (所有轴回零)
G28 X0 Y0 (返回原点)

探测

G38.2 Z-10 F100 (向下探测)
G92 Z0 (将当前位置设为零)

故障排除

常见问题

问题可能原因解决方案
丢步加速度太高降低最大加速度
表面质量差振动检查机械刚性
通信错误USB 延迟使用并口或 Mesa 卡
急停触发限位开关检查接线和配置

诊断命令

# 检查 HAL 状态
halcmd show

# 实时监控引脚
halcmd show pin -t

# 查看错误日志
dmesg | grep -i linuxcnc

总结

概念描述
INI 文件机床配置
HAL 文件硬件连接
G-code加工指令
实时精确运动控制
安全急停和限位开关