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
运行与验证
- 启动LinuxCNC模拟器:使用
linuxcnc命令加载包含上述HAL文件的配置。 - 加载HAL配置:在LinuxCNC启动后,通过
halcmd source spindle_control.hal加载配置。 - 验证信号连接:执行
halcmd show sig spindle-speed-cmd确认速度指令信号已连接。 - 测试启停:在LinuxCNC界面中点击“主轴正转”按钮,观察
spindle.0.on是否为TRUE(可通过halcmd getp spindle.0.on查看)。 - 测试调速:在MDI中输入
M3 S1500启动主轴并设定1500RPM,执行halcmd getp scale.0.out应输出约5.0V(对应1500RPM)。 - 验证反馈:执行
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对应的物理引脚接线正确,且变频器运行端子为低电平有效时需添加反相器。