跳到正文
PreciSim
physics

轴与误差

虚拟轴的运动学、反向间隙、螺距误差、重复定位误差是怎么算的。

运动学

默认梯形速度曲线,可切 S 曲线(七段 jerk 限制)。给定目标位置 x_t

t_acc = v_max / a_max
x_acc = ½ · a_max · t_acc²
若 |Δx| < 2·x_acc  →  三角形曲线,峰值速度 v_peak = sqrt(a_max·|Δx|)
否则               →  梯形曲线,匀速段时长 (|Δx| − 2·x_acc) / v_max

S 曲线在加速段两端各加一段 jerk 限制的过渡,总时间约增加 2·a_max/j_max教学上值得让学生对比一遍:同样的行程,S 曲线慢一点,但停稳时间短得多, 因为残余振动小——这解释了为什么高精度设备宁可慢。

指令位置 ≠ 实际位置

虚拟轴的实际位置是四项叠加:

x_actual = x_cmd + e_backlash(dir) + e_pitch(x_cmd) + e_random

反向间隙 e_backlash

丝杠/齿轮在换向时的空程。模型是方向相关的常数偏置

换向后的第一段行程内,实际位置滞后指令位置 b(默认 2.4 µm),
直到累计行程超过 b 后才开始跟随。

【坑】这是双向定位精度和单向定位精度差很多的根本原因。 标定时如果所有采集点都是单向走过去的,反向间隙会被完全隐藏, 到了产线上做往复运动时才暴露。实验 3 专门练这个。

螺距误差 e_pitch

沿行程的系统性误差,用查表 + 线性插值:

"pitchErrorTable": [
  { "posMm": 0,   "errUm": 0.0 },
  { "posMm": 50,  "errUm": 1.8 },
  { "posMm": 100, "errUm": 2.6 },
  { "posMm": 150, "errUm": 1.1 },
  { "posMm": 200, "errUm": -0.4 }
]

真机上这张表由激光干涉仪标出来。虚拟设备里它是你自己填的, 所以可以用来验证「补偿算法有没有真的把它补掉」。

重复定位误差 e_random

零均值高斯,标准差 repeatUm / 3(按 3σ 定义重复定位精度)。 每次到位独立采样,所以同一个指令位置连续走 10 次,实际位置各不相同—— 这正是真机的行为。

限位、回零、急停

行为 模型
软限位 超出行程时拒绝指令并报 E2101,不移动
硬限位 到达限位开关时立刻减速停止并报警,需要手动复位
回零 按配置的回零方式(限位+索引 / 绝对值编码器)走一遍,耗时真实
急停 立刻按 a_estop 减速(默认 10× a_max),停后需复位

回零后的位置定义了机械坐标系 M 的原点,这一点和真机一致: 回零精度直接影响所有后续标定,所以回零重复性本身也应该测(实验 3 里有)。

多轴联动

两轴直线插补按合成速度规划,保证路径是直线而不是先走 X 再走 Y。 平台正交度误差(X、Y 不严格垂直)作为一个小角度 ε 加在运动学里:

x_actual = x_cmd
y_actual = y_cmd + x_cmd · tan(ε)     ε 默认 80 µrad

这解释了一个常见现象:单轴走直线很准,走斜线就偏。 C6 平台几何标定就是为了解出这个 ε 并补掉它。

参数在哪改

设备 → 虚拟设备 → 轴 → 误差模型,或者直接改机台配置文件:

{ "id": "axisX", "type": "axis", "driver": "virtual", "params": {
  "travelMm": 200, "vMaxMmS": 200, "aMaxMmS2": 2000, "profile": "trapezoid",
  "backlashUm": 2.4, "repeatUm": 3.0, "squarenessUrad": 80,
  "pitchErrorTable": [ ... ]
}}

教学建议:把 backlashUm 调到 50,让学生自己发现「为什么往回走就不准了」。 比讲十遍都有效。

最后更新: 2026/9/21
这页有帮助吗?