经常有做设备的朋友问我:伺服压机选型的时候,伺服电机功率好算,丝杠导程好选,唯独控制器的采样周期没人说得清楚。一台伺服压机控制系统稳不稳,说到底就是看压力/位移信号从传感器跑到驱动器输出这一趟,能不能在规定时间内完成,实时性全在这上面体现。采样周期如果给少了,力控过冲、曲线抖动;给多了,又白白增加硬件成本。我的经验是先不急着挑板子,拿起计算器算两个数:一个是需求侧允许的最大采样周期,一个是能力侧能实现的最小采样周期,两个数一比,方案行不行立刻有数。
这篇文章不是教科书式的理论推导,而是从实际项目出发,把这两个数怎么算、怎么测、怎么排查问题讲清楚。适合做伺服压机集成、运动控制系统调试的设备工程师,也适合正在评估控制器和采集方案的开发人员。你能学会一套通用的评估方法:不用拆机,不用做复杂的有限元分析,只要算两个数,就能判断当前架构够不够用,以及瓶颈在哪。
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×20 | 400Hz | 2.5ms |
| 机械谐振110Hz,取3倍 | 110×3 | 330Hz | 3.03ms |
| 设计目标再留2倍余量 | 400×2 | 800Hz~1kHz | 1~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型,如AD7606 | 5us左右/通道 | 转换快、延迟低、可同步采样 | 精度通常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%置信区间。如果能保证最慢的那一次采样也在需求范围之内,这台设备才算真正过了实时性这关。调试不只看平均表象,最坏情况下的表现才是最终决定设备稳定性的关键。