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

运行与验证

  1. 启动LinuxCNC并加载配置:linuxcnc stepper_2axis.ini
  2. 在AXIS界面中,将X轴移动到任意非零位置(如X=10mm)
  3. 打开终端执行halcmd show pin stepgen.0.step,观察stepgen.0.step引脚值是否随运动变化
  4. 使用示波器或逻辑分析仪连接并行口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设置