4. 主轴变频器控制

任务目标

在LinuxCNC中配置主轴变频器控制,实现通过模拟量电压(0~10V)控制主轴转速、通过数字量I/O控制主轴启停,并读取变频器反馈的转速信号用于闭环监控。

环境与依赖

  • LinuxCNC 2.8+(本案例基于模拟器测试,无需真实硬件)
  • 使用LinuxCNC自带的hal组件:sim_encoder(模拟编码器反馈)、siggen(模拟速度指令源)
  • 配置文件:.hal(HAL实时线程连接)、.ini(LinuxCNC启动配置)

实现方案

采用LinuxCNC的HAL(硬件抽象层)方式实现。核心思路:将LinuxCNC的spindle.0.speed-cmd(速度指令,RPM)通过scale组件转换为0~10V模拟量输出;将spindle.0.on(启停指令)映射到数字量输出引脚;将变频器反馈的脉冲信号通过encoder组件计数,换算为实际转速并反馈给spindle.0.speed-in。

关键完整代码

以下为完整的HAL配置文件(spindle_control.hal),可直接加载运行:

# 加载实时组件
loadrt trivkins
loadrt hostmot2
loadrt probe_parport
loadrt encoder
loadrt scale
loadrt sim_encoder
loadrt siggen

# 创建线程
addf trivkins.read servo-thread
addf encoder.update servo-thread
addf scale.update servo-thread
addf sim_encoder.update servo-thread
addf siggen.update servo-thread

# 模拟量输出:速度指令(RPM) → 0~10V
# 假设主轴最高转速为 3000 RPM,对应 10V
setp scale.0.gain 0.003333    # 10V / 3000RPM
setp scale.0.offset 0.0
setp scale.0.scale 1.0
net spindle-speed-cmd spindle.0.speed-cmd => scale.0.in
net spindle-speed-dac scale.0.out => hal_parport.0.pin-14-out   # 模拟量输出引脚

# 数字量输出:主轴启停 → 继电器控制变频器运行端子
net spindle-on spindle.0.on => hal_parport.0.pin-16-out

# 转速反馈:模拟编码器 → 实际转速计算
# 假设编码器每转 60 脉冲,变频器反馈频率 0~3000Hz 对应 0~3000RPM
setp sim_encoder.0.ppr 60
setp sim_encoder.0.speed 0.0
net spindle-feedback sim_encoder.0.velocity => scale.1.in
setp scale.1.gain 60.0       # 脉冲频率(Hz) → RPM (60脉冲/转)
setp scale.1.offset 0.0
net spindle-speed-in scale.1.out => spindle.0.speed-in

# 模拟速度指令源(测试用)
setp siggen.0.frequency 10.0   # 10Hz 正弦波,模拟速度变化
net test-speed-cmd siggen.0.sine => scale.2.in
setp scale.2.gain 1500.0       # 正弦波幅值±1 → ±1500RPM
setp scale.2.offset 1500.0     # 偏移使速度在 0~3000RPM 范围
net spindle-speed-cmd scale.2.out => spindle.0.speed-cmd

运行与验证

  1. 启动LinuxCNC模拟器:使用linuxcnc命令加载包含上述HAL文件的配置。
  2. 加载HAL配置:在LinuxCNC启动后,通过halcmd source spindle_control.hal加载配置。
  3. 验证信号连接:执行halcmd show sig spindle-speed-cmd确认速度指令信号已连接。
  4. 测试启停:在LinuxCNC界面中点击“主轴正转”按钮,观察spindle.0.on是否为TRUE(可通过halcmd getp spindle.0.on查看)。
  5. 测试调速:在MDI中输入M3 S1500启动主轴并设定1500RPM,执行halcmd getp scale.0.out应输出约5.0V(对应1500RPM)。
  6. 验证反馈:执行halcmd getp spindle.0.speed-in,应显示接近1500的值(模拟器反馈存在微小延迟)。

通过条件:spindle.0.speed-in的值与spindle.0.speed-cmd的设定值误差在±5%以内,且启停信号能正确跟随界面操作。

常见问题

  • 模拟量输出无变化:检查scale.0.gain极性,若输出为负电压需设置scale.0.offset或调整接线。
  • 反馈转速波动大:在encoder组件后增加低通滤波器(如lowpass组件),或增大sim_encoder.0.ppr提高分辨率。
  • 启停信号不动作:确认hal_parport.0.pin-16-out对应的物理引脚接线正确,且变频器运行端子为低电平有效时需添加反相器。