ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

伺服压机控制器采样周期评估:两个数判断实时性够不够

伺服压机控制器采样周期评估:两个数判断实时性够不够

经常有做设备的朋友问我:伺服压机选型的时候,伺服电机功率好算,丝杠导程好选,唯独控制器的采样周期没人说得清楚。一台伺服压机控制系统稳不稳,说到底就是看压力/位移信号从传感器跑到驱动器输出这一趟,能不能在规定时间内完成,实时性全在这上面体现。采样周期如果给少了,力控过冲、曲线抖动;给多了,又白白增加硬件成本。我的经验是先不急着挑板子,拿起计算器算两个数:一个是需求侧允许的最大采样周期,一个是能力侧能实现的最小采样周期,两个数一比,方案行不行立刻有数。

这篇文章不是教科书式的理论推导,而是从实际项目出发,把这两个数怎么算、怎么测、怎么排查问题讲清楚。适合做伺服压机集成、运动控制系统调试的设备工程师,也适合正在评估控制器和采集方案的开发人员。你能学会一套通用的评估方法:不用拆机,不用做复杂的有限元分析,只要算两个数,就能判断当前架构够不够用,以及瓶颈在哪。

1. 实时性到底在卡谁:先理解整条控制链路

1.1 伺服压机不是“电机+控制器”那么简单

很多人以为伺服压机就是一个伺服电机带着丝杠往下压,控制器给个位置指令就完事,实时性要求没那么高。实际做过压装工艺的人都知道,伺服压机最值钱的地方在力控。装配轴承、压端子、铆接、折弯,这些工序对力的精度要求经常到±0.5%FS甚至更高,而且速度越快越考验动态响应。

这套系统的信号链路非常长:压力传感器和位移传感器的模拟信号,先进入ADC转换,再被控制器读取,经过力环或位置环的PID计算,输出给伺服驱动器,驱动器内部还要再走一遍电流环和速度环,最后才是电机输出扭矩。任何一个环节的周期变慢,都会直接反映到压装曲线上。你看着是压力值在抖,其实是整条链路的实时性不够。

我把这条链路简化成一个闭环:采样、控制计算、输出更新。所谓采样周期,指的就是这个闭环完整跑一遍的时间。注意,这里说的是“完整闭环”的时间,不是单纯ADC芯片的转换时间,也不是PLC程序扫描周期的名义值,而是从传感器信号进入到执行器动作生效的整个时间。

1.2 采样周期不够长什么样

采样周期跟不上,症状很有辨识度。第一是力控过冲,设定1200N的目标力,实际冲到1250N甚至更多才拉回来,超调量明显超标。第二是压力曲线抖动,明明压装过程很平稳,力值曲线上却出现周期性波动,像锯齿一样。第三是位置和力的曲线对不上,位移在匀速走,力却一顿一顿的,导致最终判定结果不稳定。

低速爬行阶段更明显。伺服压机在保压和低速压装时,速度可能只有1~5mm/s,这时候如果采样周期偏长,控制器对微小力变化的响应就会滞后,表现出来就是力值台阶或爬行现象,像蜗牛走路一停一冲。我还见过一种情况,整体力控还算稳,但上位机记录的数据曲线在高速采集时出现明显台阶,这通常是采样链路里某个中间环节丢数据或者定时不准造成的。

这些现象有一个共同根源:采样频率和系统闭环带宽之间的余量不足。好消息是,这个问题不需要等到设备装好才去试错,在方案设计阶段算两个数就能预判。

2. 第一个数:需求侧极限,工艺和机械允许你多慢

2.1 从控制带宽和机械固有频率反推采样频率下限

第一个数要从工艺需求反推。伺服压机的力控闭环本质上是一个高增益伺服系统,想要控制稳定,采样频率必须远高于系统闭环带宽。香农采样定理给出的最低要求是两倍带宽,但在工程上这个数是远远不够的。离散化带来的零阶保持器至少引入半个采样周期的纯滞后,采样频率越低,相位滞后越大,PID增益越高就越容易振荡。

实际经验值是采样频率至少是力控闭环带宽的10~20倍。举个例子:一个力控系统带宽设计20Hz,采样频率至少200~400Hz。为什么取10倍而不是3倍?因为在PID闭环里相位裕度非常宝贵,采样周期导致的延迟是额外加的,会吃掉整个系统好不容易攒出来的相位裕度。10倍是一个及格线,想要动态响应好、抗干扰强,通常奔着20倍去。

这里还没算机械固有频率的因素。压机结构、丝杠、压头、工装和工件,整体构成了一个弹簧质量系统。如果这个机械系统有谐振峰,比如实测在80Hz附近有一个明显的谐振,那么采样频率如果只有几百赫兹,就无法在这个谐振峰附近提供足够的控制抑制。机械谐振会反过来激发采样震荡。工程上我一般要求采样频率大于受控机械谐振点的3~5倍,这样控制器才有能力对谐振做抑制。

2.2 算例:一台1200N伺服压机需要多少采样率

拿我调过的一台1200N小型伺服压机来说,工况是压装精密轴套,要求力控精度±0.5%FS,最大压装速度50mm/s,保压阶段要求力值稳定在±0.3%FS以内。这套系统的力控闭环带宽目标取20Hz,取样频率按带宽的20倍是400Hz,对应采样周期上限2.5ms。

但是机械实测时发现整机在110Hz附近有一个结构谐振峰,如果只按400Hz采样,相当于每个周期只有不到4个采样点在谐振频率附近,控制器的抑制能力很弱。所以我按3倍谐振频率反推,最低采样频率要超过330Hz,这条约束比400Hz稍弱,但我不放心,又留了2倍余量,把目标采样频率提到800Hz到1kHz,也就是采样周期控制在1~1.25ms以内。

这一步算出来的采样周期上限是Ts_max≈1.25ms。这不是一个精确值,而是一个约束边界。实际设计时我不会卡着边界去选硬件,而是会把这个值再缩一半,取0.5~1ms作为设计目标。这样一来,即使现场机械刚度有波动或者负载变化导致频率下降,还有足够的余量。

约束来源计算方式得到的最小采样频率对应采样周期上限
力控闭环带宽20Hz,取20倍20×20400Hz2.5ms
机械谐振110Hz,取3倍110×3330Hz3.03ms
设计目标再留2倍余量400×2800Hz~1kHz1~1.25ms

2.3 别忽略外环和内环的耦合

伺服压机通常不是单一闭环,外环做位置或力控制,内环是驱动器里的速度环和电流环。电流环采样频率一般很高,驱动器内部做到16kHz不稀奇;速度环也有8kHz;位置环在专用运动控制器上能做到1kHz以上。真正容易出问题的,是外部压力传感器的采样环节。

压力采样往往通过外部模拟量模块或独立的ADC芯片接入控制器,采样周期可能只有200Hz到1kHz。如果你只盯着电机驱动器的响应速度,忽略了压力传感器这最慢的一环,就掉坑里了。我在做方案评估时,总是把整条链路里最慢的那个周期当作系统采样周期来用,因为闭环的规矩是木桶效应,最慢的环节决定整体实时性。

3. 第二个数:能力侧极限,ADC和通讯链路实际能跑多快

3.1 ADC采样周期和系统采样周期,到底差在哪

最近很多人问ADC采样周期这个概念,我发现一个普遍误区:大家把ADC芯片数据手册上的转换时间或吞吐率当成系统采样周期。ADC采样周期指芯片完成一次采样的时间,比如一个16位的SAR型ADC,200kSPS吞吐率,理论上转换一次只要5us,非常快。但是系统采样周期包含的远不止芯片转换那一下。

完整的采集链路包括信号调理、抗混叠滤波、采样保持、A/D转换、数据读取、数字滤波、同步处理、通讯上传。其中任何一环都可能成为瓶颈。我用过一个24位的delta-sigma型ADC,精度很高,但最高吞吐率也就30kSPS左右,再配合内部数字滤波,实际每次有效采样的时间远不止数据手册上那个标称值。选这种高精度ADC做力控制,如果采样周期预算很紧,就不能用最高分辨率档位,需要权衡。

SAR型和delta-sigma型的差异非常大。SAR型ADC转换快,延迟低,适合做闭环控制;delta-sigma型ADC精度高、噪声低,但内置数字滤波会引入额外延迟,适合做高精度测量和数据记录。伺服压机如果力控精度要求很高,我建议把两种ADC搭配用:控制回路用SAR型ADC保证实时性,数据记录和判定用delta-sigma型ADC保证精度。两个用途切成两条链路,互不干扰。

ADC类型典型转换时间优点缺点适合场景
SAR型,如AD76065us左右/通道转换快、延迟低、可同步采样精度通常16位,噪声略高控制闭环采样
Delta-Sigma型,如ADS1256几十us以上精度高(24位)、噪声低内置滤波引入延迟数据记录、高精度测量

多通道采样还牵扯同步问题。普通扫描型ADC用多路复用开关轮流切通道,通道之间的时间差很容易到几百微秒甚至毫秒级。压装过程位移和力是强耦合的,如果位移用1号通道、压力用2号通道,两个信号的采样时刻差了半毫秒,高速压装时计算出的力-位移曲线就可能出现一个明显台阶。要解决这个问题,优先选带同步采样保持的ADC,比如AD7606这种,所有通道同时采样、逐个转换,通道间没有时间偏移。

3.2 通讯和计算吃掉多少周期预算

ADC转换完只是第一步,数据还要通过总线送到控制器。传统PLC加模拟量模块的方案里,模拟量通道的数据往往跟随PLC扫描周期更新。如果PLC扫描周期是5ms,你的压力采样周期再快也快不过5ms。这就是一个隐蔽瓶颈:ADC芯片明明很快,但通讯架构把它拖慢了。

总线周期的影响更直接。EtherCAT目前是伺服压机控制器最常用的协议,典型周期1ms。如果你用EtherCAT总线去读压力传感器,采样周期最多只能跟总线周期一样,1ms已经算好的,实际情况还要考虑丢包重传和从站刷新率。想要更快的力控采样,有几个路子:让压力采集在伺服驱动器或本地FPGA上完成,力环不经过主站;或者用支持过采样功能的EtherCAT从站,在主站1ms周期里完成8次甚至16次采样,把等效采样周期压到125us或62.5us。

控制计算本身也要时间。一个普通的PID运算在Cortex-M系列单片机上是几十微秒,在FPGA里面可以做到微秒级。看起来占比不大,但如果你在控制任务里做了数字滤波、坐标变换、曲线记录、碰撞检测,CPU时间就紧张了。我在方案设计时习惯给CPU留50%以上的余量,因为现场加功能是很常见的,不留余量的系统维护起来非常痛苦。

3.3 把两个数放到一起比

现在把两个数放一起。需求侧,Ts_max约1.25ms;能力侧,如果用力控专用控制器配同步采样ADC,Ts_min可以做到0.25ms甚至更低,显然满足要求且余量充足。但如果用PLC加模拟量模块,Ts_min受限于5ms的扫描周期,那就不满足,方案不能直接用。

这个比较就是整个评估过程的核心:只要Ts_min明显小于Ts_max,并且留出2倍以上余量,采样周期就够用;如果两个数接近甚至Ts_min大于Ts_max,就必须改架构。改架构不一定是换控制器,很多时候只是把压力采样从“PLC模拟量模块”挪到“带过采样的EtherCAT从站”或者“本地FPGA快速采集通道”,问题就解决了,成本增加也不大。

还有一个容易忽略的点就是滤波器的滞后。很多工程师习惯在采样后面加均值滤波或滑动平均,比如取16点平均。16点平均会引入大约7.5个采样周期的固定滞后,这个滞后再叠加上采样周期和通讯周期,实际等效周期可能变成原来的好几倍。我在实时性评估里,会把滤波滞后也折算进等效采样周期。这个方法后面还有详细说明,因为这是调试中最常见的坑。

4. 实测确认:别信纸面参数,抓真实周期和抖动

4.1 用示波器抓真实采样节奏

算完两个数之后,不管纸面上多漂亮,我都建议在样机上实测确认。最简单的办法是用一个IO翻转法:在采样中断服务程序里写一个GPIO取反操作,用示波器量这个GPIO的波形。如果你的系统真的按1ms周期采样,GPIO波形就是精确的1kHz方波,高电平低电平各0.5ms。用示波器测量工具看一下频率和占空比,再打开余辉观察一下抖动,真实周期立刻现形。

这里要注意,GPIO翻转本身也会占用几条指令时间,但如果中断中只做这一件事,占用的时间可以忽略不计。用这个方法,我抓到过标称1kHz但实际上偶尔掉到800Hz的系统,原因是某些慢速任务长时间占用总线导致采样中断被阻塞。

逻辑分析仪更细致一些。如果ADC是通过SPI接口读取的,可以直接抓SPI片选信号,看相邻两次片选之间的时间间隔。配合ADC芯片的忙信号引脚,能精确到微秒级看到每次转换结束和数据读取的时刻。这样不仅验证周期,还能看出转换时序是否符合芯片手册要求。有过一次经历,我在现场发现一个ADC因为外部时钟配置不对,实际转换时间比标称慢了3倍,不用逻辑分析仪根本查不出来。

4.2 软件里统计任务周期与最坏情况延迟

示波器看的是外部结果,想看控制器内部的调度情况,就得在软件里打时间戳。做法很直接:在采样任务里记录高精度定时器的计数值,每个周期存到一个环形数组里,运行一段时间后统计相邻两次采样的时间差,看平均值、最大值、最小值和抖动。

// 采样任务时间戳统计伪代码 uint32_t last_tick = 0; uint32_t interval_max = 0; uint32_t interval_min = 0xFFFFFFFF; uint32_t interval_sum = 0; uint32_t sample_count = 0; void adc_isr(void) { uint32_t now = timer_get_us(); uint32_t interval = now - last_tick; last_tick = now; if (interval > interval_max) interval_max = interval; if (interval < interval_min) interval_min = interval; interval_sum += interval; sample_count++; // 翻转测试IO GPIO_Toggle(GPIO_TEST_PIN); }

统计结果的判断标准很简单:平均周期是名义周期,而最大周期代表最坏情况延迟。采样间隔的抖动通常要控制在采样周期的10%以内,如果抖动达到20%以上,控制算法就会明显感受到时间不均匀。我最怕遇到那种“平均1ms但偶尔跳出2ms”的系统,平均周期看起来漂亮,但这个2ms的偶发周期恰好发生在快压到底的时候,就是一次过冲。所以看数据必须盯最大值,而不是平均值。

4.3 阶跃和扫频试验检验闭环余量

周期测量验证的是“采样时间准不准”,但采样时间准不等于控制品质好,还得验证闭环余量。最实用的两个试验是阶跃响应和扫频。

阶跃试验就是给一个突变的力指令,比如从100N一步跳到500N,记录实际力的响应曲线。看三个指标:超调量、上升时间、振荡次数。如果系统稳定且无明显振荡,说明采样频率和带宽的余量正常。如果响应曲线出现明显的等幅振荡,且振荡频率贴近机械固有频率,那就是采样频率过低的典型表现,优化PID参数往往治标不治本,必须缩短采样周期。

扫频试验相对专业,做法是让控制器输出一个频率从1Hz到200Hz扫过的正弦力指令,同时记录实际响应。通过幅值衰减和相位滞后,可以推算出系统在当前采样周期下的实际带宽。这个方法对技术能力要求高一些,但结论最有说服力。扫频结果显示系统的相位滞后明显超过预期时,第一个怀疑对象就是采样链路里的额外延迟,比如滤波滞后和通讯同步误差。

5. 常见问题与排查技巧实录

5.1 抖动:标称1ms,压力曲线却有毛刺

这个问题的根源通常是中断优先级被抢占或者任务调度不合理。测量结果往往是平均周期是1ms,但最大间隔到了1.5ms甚至2ms,压力曲线在过冲附近表现出毛刺。排查思路是配合RTOS的任务统计信息,看采样中断在哪些时刻被延后。

我处理过的一个真实案例,问题不在优先级,而是另一个任务频繁关中断去读外部存储器,导致采样中断最多被卡了800us。后来把外部存储读取改到DMA方式,关中断时间从800us降到了不到10us,采样抖动立刻恢复到正常水平。

还有一个经验是,采样中断里面尽量不要做滤波、协议解析这类耗时操作。中断里只负责读ADC、打时间戳、存原始数据,滤波放到控制主循环里去做。中断越短,被其他因素延后的可能性越小,实时性也就越稳定。

5.2 多通道扫描式ADC造成力值台阶

位移和压力如果走同一个扫描式ADC的不同通道,通道切换的顺序会造成几十到几百微秒的时间偏差。在高速压装中,这个偏差会直接导致力-位移曲线出现台阶。排查手段是把两个通道短接输入同一个信号,观察两路数字量读数对应的时间差,立刻真相大白。

解决通道间偏差有两个路子。硬件上换同步采样ADC,所有通道同一时刻采样,转换顺序只影响读取顺序,不影响采样时间。软件上如果不换硬件,就要在算法里做时间补偿,比如把位移信号根据压装速度折算到和压力同一个采样时刻。软件补偿效果不如同步采样彻底,但在硬件已经定型的情况下是一个还能接受的补救方案。

5.3 滤波器的滞后陷阱

伺服压机现场信号难免有噪声,很多人习惯加均值滤波。均值滤波的公式是把最近N个采样值取平均,等效滞后时间是(N-1)/2个采样周期。如果原来采样周期1ms,做了16点均值滤波,滞后就有7.5ms。这个滞后量已经比采样周期本身还大好几倍,直接降低系统的相位裕度,表现出来的现象就是低速时有爬行感,力控精度越调越差。

我的建议是控制闭环里别用均值滤波,改用一阶低通滤波。一阶低通的滞后和截止频率有关,截止频率选在力控带宽的5倍以上,相位滞后可以控制在可接受范围内。如果实在对噪声敏感,先把硬件滤波器做好,比如传感器信号线上加RC低通,再在控制里配合适的截止频率,而不是无脑堆均值滤波。

现象可能原因排查手段解决方案
压力曲线毛刺采样中断被抢占GPIO翻转测间隔统计调整中断优先级,缩短关中断时间
力-位移曲线台阶多通道扫描时间差双通道短接测时间差换同步采样ADC或软件补偿
低速爬行、力控不稳均值滤波滞后过大断开滤波对比响应改用一阶低通,控制环不用滑动平均
1ms周期偶发跳到2ms总线占用或任务饥饿记录时间戳看最大间隔把慢速任务优先级调低或改DMA

6. 我的一些实际操作体会

这套两个数的评估方法我用过很多次,说实话它最大的价值不是算出某个精确参数,而是逼着你在做方案阶段把整条采样链路画出来。很多问题都是画链路的时候才暴露的,比如发现压力传感器卡在一台PLC的模拟量模块后面,采样周期根本无法缩小,那这个方案从一开始就该换掉。

我个人在现场还有一个习惯,做试验之前会先看一遍每台设备实际采集数据的时间戳,统计最大抖动和99.9%置信区间。如果能保证最慢的那一次采样也在需求范围之内,这台设备才算真正过了实时性这关。调试不只看平均表象,最坏情况下的表现才是最终决定设备稳定性的关键。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进