2. 步进电机驱动配置
任务目标
在LinuxCNC中配置步进电机的引脚映射与运动参数,建立开环脉冲输出通道,并通过LinuxCNC内置的测试信号功能验证脉冲输出是否正确。
环境与前置条件
- 已安装LinuxCNC(推荐2.8或2.9版本),并具备可用的并行口或扩展板卡(本例以并行口为例)
- 内核实时补丁已正确加载(或使用模拟模式运行)
- 当前用户具有
sudo权限以加载实时模块
配置实现
创建步进电机配置文件stepper_2axis.hal,内容如下:
# 加载并行口驱动,基地址0x378为标准LPT1
loadrt hal_parport cfg="0x378 out"
setp parport.0.reset-time 1000
# 加载步进发生器,2轴
loadrt stepgen step_type=0,0
# 将并行口引脚连接到步进发生器
# X轴:方向=pin2,步进=pin3
net x-step ⇒ stepgen.0.step
net x-dir ⇒ stepgen.0.dir
net x-enable ⇒ parport.0.pin-2-out
# Y轴:方向=pin4,步进=pin5
net y-step ⇒ stepgen.1.step
net y-dir ⇒ stepgen.1.dir
net y-enable ⇒ parport.0.pin-4-out
# 将步进发生器输出映射到并行口物理引脚
net x-step ⇒ parport.0.pin-3-out
net x-dir ⇒ parport.0.pin-2-out
net y-step ⇒ parport.0.pin-5-out
net y-dir ⇒ parport.0.pin-4-out
# 设置使能信号(低有效)
setp parport.0.pin-2-out-invert 1
setp parport.0.pin-4-out-invert 1
# 配置步进参数
setp stepgen.0.position-scale 8000
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 1
setp stepgen.0.dirhold 1
setp stepgen.0.dirsetup 1
setp stepgen.0.maxaccel 1000
setp stepgen.0.maxvel 10
setp stepgen.1.position-scale 8000
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 1
setp stepgen.1.dirhold 1
setp stepgen.1.dirsetup 1
setp stepgen.1.maxaccel 1000
setp stepgen.1.maxvel 10
# 加载实时线程
loadrt threads name1=servo-thread period1=1000000
addf parport.0.read servo-thread
addf stepgen.capture-position servo-thread
addf stepgen.update-freq servo-thread
addf parport.0.write servo-thread
创建对应的stepper_2axis.ini配置文件:
[EMC]
MACHINE = Stepper 2-Axis Demo
DEBUG = 0
[DISPLAY]
DISPLAY = axis
[TRAJ]
AXES = 2
COORDINATES = X Y
[AXIS_0]
TYPE = LINEAR
UNIT = mm
MAX_VELOCITY = 10
MAX_ACCELERATION = 1000
STEPGEN_MAXVEL = 10
STEPGEN_MAXACC = 1000
[AXIS_1]
TYPE = LINEAR
UNIT = mm
MAX_VELOCITY = 10
MAX_ACCELERATION = 1000
STEPGEN_MAXVEL = 10
STEPGEN_MAXACC = 1000
[HAL]
HALFILE = stepper_2axis.hal
[TASK]
TASK = milltask
CYCLE_TIME = 0.001
运行与验证
- 启动LinuxCNC并加载配置:
linuxcnc stepper_2axis.ini - 在AXIS界面中,将X轴移动到任意非零位置(如X=10mm)
- 打开终端执行
halcmd show pin stepgen.0.step,观察stepgen.0.step引脚值是否随运动变化 - 使用示波器或逻辑分析仪连接并行口pin3(X步进)与pin2(X方向),手动执行Jog操作
通过条件:
- 执行Jog时,示波器在pin3上观察到与设定速度匹配的脉冲串(8000脉冲/mm对应10mm/s时约80kHz)
- 改变Jog方向时,pin2电平发生翻转
- 运动停止时,pin3无脉冲输出
- 若使用逻辑分析仪,可验证脉冲宽度约为1μs(steplen=1,线程周期1ms)
验证说明:上述验证方法基于配置逻辑推导,实际脉冲频率与位置精度需在真实硬件上测量确认。若使用模拟模式(无硬件),可通过
halcmd show pin stepgen.0.position-cmd观察位置指令变化,但无法验证物理引脚输出。
常见问题
- 无脉冲输出:检查
parport.0.reset-time是否设置,确认引脚映射无冲突(同一引脚被多个信号占用) - 方向错误:交换
dirsetup与dirhold值,或调整position-scale正负号 - 使能无效:确认驱动器使能电平极性,必要时修改
pin-out-invert设置