一、抖动概述:什么是运动控制周期抖动

大家好,我是你们的老朋友。今天咱们聊聊运动控制里一个让人头疼的问题——周期抖动。

说白了,周期抖动就是运动控制系统中,每个控制周期实际执行时间与理想周期时间的偏差。举个例子,你设定了一个1ms的控制周期,理想情况下每1ms执行一次。但实际呢?有时候0.98ms,有时候1.03ms。这个偏差,就是抖动。

我在做数控系统那会儿,遇到过一台设备,加工出来的零件表面总有一圈圈的纹路。查来查去,最后发现是周期抖动在作怪。嗯,从那以后我对抖动就特别敏感。

1.1 抖动的数学定义

用公式说话:

Jitter = T_actual - T_ideal

其中:
T_actual = 实际控制周期时间
T_ideal = 理想控制周期时间
Jitter > 0 表示周期偏长
Jitter < 0 表示周期偏短

你想想看,如果抖动是随机的,那还好说。但很多时候它是周期性的,这就麻烦了。

1.2 抖动的分类

类型 特征 典型来源
确定性抖动 可预测、有规律 中断优先级、任务调度
随机性抖动 不可预测、无规律 电磁干扰、温度漂移
周期性抖动 固定频率出现 PWM更新、DMA传输

核心观点:抖动不是有没有的问题,而是多大的问题。我个人的经验是,把抖动控制在周期时间的1%以内,大部分应用都能接受。

二、抖动对系统的影响

抖动到底有多大的破坏力?我给大家讲几个真实案例。

2.1 位置精度下降

这是最直接的影响。你想想看,伺服系统每个周期计算一次位置误差。如果周期时间忽长忽短,位置环的增益就乱了套。

我曾经调试一台贴片机,抖动从50μs增加到200μs,贴装精度直接从±0.02mm掉到了±0.08mm。客户当场就不干了。

2.2 速度波动

速度环对抖动更敏感。因为速度计算依赖周期时间,周期抖一下,速度值就跟着抖。

// 速度计算伪代码
velocity = (position - last_position) / cycle_time

// 如果cycle_time有抖动
// velocity就会产生毛刺
// 导致电机运行不平稳

2.3 系统稳定性恶化

嗯,这里要注意。抖动会让控制器的相位裕度降低。说白了,就是系统更容易振荡。

  • 低频抖动:引起机械共振,产生噪音
  • 高频抖动:导致电流环不稳定,电机发热
  • 突发抖动:可能造成位置超调,甚至撞机

警告:我曾经见过一个案例,因为抖动导致伺服系统在高速运行时突然振荡,直接撞坏了刀具。损失十几万。所以抖动问题绝对不能忽视。

三、抖动来源分析

搞清楚了抖动的危害,咱们来看看抖动到底从哪来。我把它分成三大类。

3.1 软件层面的抖动

这是最常见的抖动来源,也是我们最能控制的。

  1. 中断延迟:高优先级中断打断控制周期
  2. 任务调度:RTOS的任务切换开销
  3. 代码执行时间:条件分支导致执行时间不一致
  4. 内存访问:Cache miss、DMA冲突

我记得有一次,一个客户说他们的系统周期抖动有500μs。我一看代码,好家伙,中断服务程序里居然调用了printf。这能不抖吗?

3.2 硬件层面的抖动

硬件抖动往往比较隐蔽,排查起来费劲。

硬件因素 典型抖动范围 排查方法
晶振精度 ±50ppm ~ ±100ppm 用频率计测量
电源噪声 ±10μs ~ ±100μs 示波器看电源纹波
电磁干扰 ±1μs ~ ±50μs 频谱分析仪
温度漂移 ±5μs ~ ±20μs 温箱测试

3.3 系统架构层面的抖动

这个层面往往被忽视,但影响最大。

  • 总线竞争:多个外设同时访问总线
  • DMA传输:占用总线带宽
  • 内存带宽:代码和数据争抢内存
  • 外设响应:ADC转换时间、编码器读取时间

经验之谈:我建议大家在设计初期就做抖动预算。比如目标抖动是100μs,软件分配50μs,硬件分配30μs,留20μs余量。这样后期调试会轻松很多。

四、知识体系框架

下面这张图,是我梳理的抖动知识体系。你一看就明白。

运动控制周期抖动 抖动定义 实际周期 - 理想周期 确定性 / 随机性 / 周期性 系统影响 位置精度下降 速度波动 系统稳定性恶化 抖动来源 软件层面 硬件层面 系统架构层面 核心目标:识别抖动 → 量化抖动 → 优化抖动 将抖动控制在周期时间的1%以内

这张图把抖动的定义、影响和来源串起来了。你仔细看看,会发现它们其实是环环相扣的。定义清楚了,才能分析影响;影响搞明白了,才能追溯来源。

总结一下:抖动是运动控制系统的"慢性病"。它不会让系统立刻崩溃,但会慢慢侵蚀性能。我做了十几年运动控制,见过太多因为抖动导致的问题。所以,从一开始就重视抖动,比后期补救要划算得多。

好了,这一章就讲到这里。下一章咱们聊聊如何测量抖动,以及用什么工具最靠谱。到时候我会分享一些我自己的调试经验。

专注资料整理