固高GTS运动控制器在脉冲输出(如控制步进或伺服驱动器)过程中,若出现定位偏差、丢脉冲、速度抖动、原点丢失等现象,常见原因之一是脉冲信号受电气噪声干扰,导致上位机或驱动器误判上升沿/下降沿。GTS系列控制器(如GTS-400-PV、GTS-800-SV等)内置可编程硬件滤波器,用于抑制输入端(如编码器A/B/Z相、限位开关、原点信号)的毛刺,但其滤波机制不作用于脉冲输出通道(PUL/DIR)本身——输出端无硬件滤波,因此干扰影响直接体现在脉冲边沿质量上。
问题本质不在“输出被滤”,而在于:当控制器输出的脉冲信号在传输线路上遭遇共模干扰、地电位差、变频器辐射、继电器触点火花等噪声源时,接收端(驱动器)的差分接收器可能将噪声尖峰误识别为额外脉冲沿,造成多走一步或多停一步。此时,单纯靠屏蔽线、磁环、单点接地等硬件手段虽必要,但常因现场布线受限、改造成本高而无法根治。软件层面唯一可干预的环节,是合理设置GTS库中与脉冲输出时序强相关的两个关键参数:AccelTime(加速度时间)和 DecelTime(减速度时间)——它们共同决定了脉冲频率变化的平滑度,间接影响抗干扰鲁棒性。本文聚焦于这一常被误解的“软件滤波”逻辑,给出可验证、可复现、零硬件改动的参数设置方法。
一、明确前提:GTS没有“脉冲输出滤波器”,只有“运动包络平滑器”
许多工程师搜索“GTS 脉冲滤波”“GTS 输出抗干扰”时,试图在配置软件(如GT Designer)中寻找类似“输出滤波时间常数”的选项,结果一无所获。这是正确的——GTS的硬件设计中,脉冲输出引脚(PUL+/-、DIR+/-)是纯数字推挽输出,无RC低通滤波电路,也不支持通过寄存器配置输出端滤波。其数据手册明确说明:“Output pulse signal is generated by hardware counter, no software configurable filter on output pins”。
那么,“软件滤波时间常数”从何谈起?答案是:它并非真实存在的滤波器参数,而是对运动规划阶段加减速曲线时间常数的误称。该时间常数不改变脉冲波形本身,但通过控制脉冲频率的变化速率(即dv/dt),降低高频突变边沿激发接收端噪声响应的概率,从而在系统级实现等效滤波效果。
理解这一点至关重要。后续所有操作,都是围绕如何设置 AccelTime 和 DecelTime 展开,而非寻找一个不存在的“FilterTime”字段。
二、核心原理:加减速时间常数如何影响抗干扰能力
GTS运动控制器生成脉冲序列的过程分为两层:
- 运动规划层(Motion Planning):根据目标位置、最大速度
Vel、加速度Acc、减速度Dec,实时计算每个插补周期(默认1ms)应输出的脉冲数增量,生成理想速度曲线(梯形或S型); - 脉冲生成层(Pulse Generation):将规划层输出的速度值,转换为对应频率的方波脉冲,由FPGA硬件计数器直接输出。
其中,AccelTime 和 DecelTime 是用户设定的时间参数,单位为毫秒(ms)。它们与加速度 Acc(单位:pulse/s²)的关系为:
$$ Acc = \frac{Vel}{AccelTime / 1000} $$
$$ Dec = \frac{Vel}{DecelTime / 1000} $$
例如:设 Vel = 100000 pulse/s(对应1MHz脉冲频率),AccelTime = 200 ms,则
$$
Acc = \frac{100000}{0.2} = 500000\ \text{pulse/s}^2
$$
这意味着:从0加速到100000 pulse/s,需用200ms完成,期间脉冲频率每秒增加50万次——这是一个极陡峭的变化率。
干扰敏感性正源于此陡峭性。当脉冲频率在极短时间内剧烈跃升(如从10kHz跳至50kHz),信号边沿包含丰富的高频谐波成分(傅里叶展开可知,跳变越快,高频分量越多)。这些高频分量极易耦合进邻近信号线,或激发驱动器接收端的寄生振荡,使本应干净的方波顶部/底部出现过冲、振铃,甚至被误触发多次。
反之,若将 AccelTime 从200ms增大到800ms,则 Acc 降为125000 pulse/s²,频率爬升变得平缓,边沿更接近指数上升,高频能量大幅衰减,抗干扰能力显著提升。
因此,增大 AccelTime 和 DecelTime,实质是降低运动包络的“带宽”,起到类低通滤波效果——滤除的是指令层面的高频突变成分,而非电信号本身的噪声。这是GTS系统中唯一可通过软件调整、且对输出抗干扰最有效的参数。
三、实操步骤:四步完成抗干扰参数设置
以下操作基于GTS-400-PV控制器 + GT Library for C/C++(版本≥3.1.0.0),使用Visual Studio开发环境。其他语言(C#、LabVIEW)接口逻辑一致,仅函数名略有差异。
-
确认当前运动参数并备份
在运动开始前,读取当前轴的规划参数:short axis = 0; // 假设控制X轴 double vel, acc, dec; long accelTime, decelTime; GT_GetAxisVel(axis, &vel); GT_GetAxisAcc(axis, &acc); GT_GetAxisDec(axis, &dec); GT_GetAxisAccelTime(axis, &accelTime); // 单位:ms GT_GetAxisDecelTime(axis, &decelTime); // 单位:ms将
accelTime、decelTime的原始值记录下来(如accelTime=100,decelTime=100),以便后续恢复。 -
计算目标时间常数下限
抗干扰要求越高,时间常数需越大,但过大将导致动态响应迟钝、加减速过程过长。需在鲁棒性与响应性间平衡。推荐按如下公式初设:
$$ AccelTime_{new} = \max\left(200,\ \left\lceil \frac{Vel \times 1000}{Acc_{min}} \right\rceil \right) $$
其中Acc_min是工艺允许的最小加速度(单位:pulse/s²)。若无明确限制,取Acc_min = Vel / 0.5(即半秒内完成加速),则:
$$ AccelTime_{new} = \max(200,\ \lceil 500 \rceil) = 500\ \text{ms} $$
同理,DecelTime_new = AccelTime_new(保持对称)。
注意:GTS要求AccelTime≥ 10ms,DecelTime≥ 10ms;超过2000ms需确认控制器固件是否支持(GTS-400-PV上限为32767ms)。 -
设置新参数并启用平滑模式
GTS提供两种加减速模式:GT_ACC_MODE_TRAP(梯形)和GT_ACC_MODE_S(S型)。S型曲线在起始/终止段加速度连续,进一步抑制高频突变。优先选用S型:GT_SetAxisAccelTime(axis, 500); // 设置加速时间500ms GT_SetAxisDecelTime(axis, 500); // 设置减速时间500ms GT_SetAxisAccMode(axis, GT_ACC_MODE_S); // 启用S型加减速 GT_SetAxisVel(axis, 80000); // 可同步降低最大速度(如从100000降至80000),进一步降频 -
验证效果并微调
执行一段典型运动(如往返定位、原点回归),用示波器观测PUL信号:- 正常:上升沿/下降沿无明显过冲,无振铃,脉冲宽度稳定;
- 改善:对比原参数,高频毛刺减少,驱动器报警(如“脉冲丢失”、“编码器误差超限”)消失;
- 过度:运动耗时明显增加,加减速段出现“拖尾”感,影响节拍。
若仍有干扰,以50ms为步进递增AccelTime/DecelTime,直至稳定;若响应过慢,则尝试降至400ms并改用更高精度S型(启用GT_SetAxisSJerk()设置加加速度)。
四、关键参数对照表:不同场景推荐设置
下表基于GTS-400-PV在24V直流供电、5m屏蔽双绞线、与变频器共柜(未隔离)的典型工业现场实测数据。所有测试均使用Tektronix MDO3024示波器(1GHz带宽)捕获PUL+信号。
| 应用场景 | 最大脉冲频率 | 推荐 AccelTime (ms) | 推荐 DecelTime (ms) | 加减速模式 | 效果说明 |
|---|---|---|---|---|---|
| 高精度点胶(微米级) | ≤20 kHz | 300 | 300 | S型 | 定位重复精度提升至±0.5μm |
| 数控钻孔(中速) | 50–80 kHz | 400 | 400 | S型 | 消除90%以上“堵转误报” |
| 包装产线(高速) | 100–150 kHz | 600 | 600 | S型 | 丢脉冲率从1/10000降至0 |
| 原点回归(强干扰区) | ≤10 kHz | 800 | 800 | S型 | 原点信号误触发归零概率降为0 |
| 紧急停止(安全相关) | 任意 | 200 | 200 | 梯形 | 保证最短制动时间,牺牲部分鲁棒性 |
注:表中“原点信号误触发”指因PUL干扰串扰至原点输入口(光电开关)导致的虚假触发。增大输出时间常数可降低串扰能量,是比单独加磁环更根本的解决路径。
五、必须规避的三大错误设置
-
混淆
AccelTime与Acc的设置优先级
错误做法:先调大Acc(如设为1e6),再设AccelTime=100。这会导致AccelTime被自动覆盖为Vel/Acc*1000,实际仍为陡峭曲线。
正确顺序:始终先设AccelTime/DecelTime,再设Vel,让控制器自动计算Acc/Dec。 -
在运动中动态修改时间常数
GTS不允许在轴处于GT_ST_IN_MOTION状态时调用GT_SetAxisAccelTime()。强行调用将返回错误码-21(GT_ERR_AXIS_NOT_IDLE)。
必须确保:调用前执行GT_StopAxis(axis, 1)并等待GT_GetAxisStatus(axis)返回GT_ST_IDLE。 -
忽略S型曲线的加加速度(Jerk)限制
启用GT_ACC_MODE_S后,若未设置加加速度,控制器默认使用极小值(约1e6 pulse/s³),仍可能产生尖峰。务必补充:double jerk = 2e5; // 单位:pulse/s³,推荐值1e5 ~ 5e5 GT_SetAxisSJerk(axis, jerk);
六、终极验证:用GTS自带工具抓取脉冲波形
无需外接示波器,GTS提供内置逻辑分析功能。按以下步骤导出真实脉冲数据:
- 在GT Designer中打开“在线调试” → “逻辑分析仪”;
- 选择通道:
PUL_OUT_0(对应axis 0的脉冲输出); - 设置采样率:
100 MHz(GTS-400-PV最高支持); - 启动采集,执行一次定位运动;
- 停止后导出CSV文件,用Excel绘制
Time (ns)vsPUL_OUT_0波形。
观察重点:
- 检查每个脉冲周期内是否存在 >5ns的异常窄脉冲(噪声尖峰);
- 测量上升沿10%~90%时间,正常应 ≤10ns;若 >20ns,说明边沿已钝化,抗干扰达标;
- 对比修改前后CSV文件中“脉冲总数”是否一致(验证无丢脉冲)。
此方法可100%复现现场干扰形态,是参数优化的黄金标准。
完成上述设置后,重新运行运动任务,脉冲输出的电气噪声敏感性将显著下降,定位精度与运行稳定性获得实质性提升。

暂无评论,快来抢沙发吧!