
简介传感器信号链的完整性直接决定机器人力控性能的下限。从应变片微应变到数字力矩值需要经历全桥组桥、仪表放大、模拟滤波、ADC采样与标定等多个环节任何一处噪声和漂移都会在后级被放大最终影响关节力控的平滑性与安全性。本文从基础测量原理切入梳理机器人关节力矩传感器中全桥组桥的选型与贴片工艺、仪表放大器的关键参数、数据采集通道的采样率与分辨率设计并结合工程实践分析温度梯度、装配应力、线缆屏蔽和PCB接地等典型干扰问题最后给出标定矩阵求解与零点在线校正的完整方法。适用于协作机械臂、外骨骼和四足机器人的力控开发为工程师提供从硬件电路到软件标定的可落地参考。1. 机器人关节力矩传感器为什么采集链路比传感器本体更决定力控下限把力矩传感器订制回来第一次上电某开发者的关节读数在静止状态下每秒跳十几个码值零点还匀速往下漂。拆开检查发现应变片满量程输出才几毫伏还没电路噪声大。机器人关节力矩传感器电路与数据采集处理系统设计就是把应变片的微伏级形变信号变成力控闭环里能直接信任的力矩数字。它决定了拖拽示教手顺不顺、碰撞检测灵不灵也决定了这台关节是像“有手感”还是像“装了个弹簧秤”。这套链路从组桥、放大、采集到标定都藏着坑下面按完整信号链走一遍适合正在做协作机械臂、外骨骼和四足腿关节的工程师。2. 从应变片到电压信号全桥组桥、激励与仪表放大的关键参数2.1 应变片选型与全桥组桥灵敏度、温漂与贴片工艺怎么取舍机器人关节力矩传感器里最常用的敏感元件是金属箔式应变片而不是很多人以为的半导体应变片。半导体应变片的灵敏度能比金属箔高几十倍但它的温漂和非线性也大得吓人用在关节这种需要长期稳定读数的场景里调试起来基本靠玄学。我一般选金属箔式灵敏系数在 2 左右线性度好温度系数低唯一的缺点是满量程输出只有每伏激励 1 到 2 毫伏这恰恰是电路部分要解决的核心矛盾。组桥方式上全桥是关节力矩传感器的底线配置。四分之一桥只有一个应变片参与温度变化引起的应变和真实载荷混在一起没法区分半桥能抵消一部分共模温度影响但补偿不彻底全桥把四个应变片贴在弹性体的上下表面或左右对称面上让相邻桥臂的应变方向相反温度引起的等效应变在电桥里互相抵消。对于扭矩测量常见贴片方向是沿弹性体轴向成 45 度角布置这样切应力能最大程度转化为应变片感受到的正应变。贴片工艺这一关不过后面电路做得再好也白搭。表面要用细砂纸交叉打磨出纹路再用丙酮或酒精脱脂胶水固化时要有均匀的压紧力不能局部气泡。固化完成后不能直接使用先做几次预加载循环让粘贴层内部的残余应力释放掉否则零点会在装机后的头几个小时里持续漂移。这个预加载的力一般取满量程的 80% 到 100%循环次数不少于 3 次。全桥输出的基本关系可以写成一个很简单的式子桥路输出电压约等于激励电压乘以灵敏系数再乘以应变量级。举个具体数字如果弹性体满量程时应变是 500 微应变5V 激励下满量程输出大约是 5V × 2 × 500e-6 5mV。这意味着后级放大电路要把 5 毫伏放大几百倍才能送到 ADC 的输入范围而噪声也跟着被放大同样的倍数所以组桥、屏蔽、滤波必须一开始就整体考虑。2.2 仪表放大器为什么普通运放做不了这件事应变片桥路的输出是差模小信号叠加在较大的共模电压上普通运放直接做差分放大共模抑制比通常只有 60 到 70 dB在 5V 激励下桥路共模电压有 2.5V 左右换算过来就有接近毫伏级的误差和小信号本身一个数量级。仪表放大器是标准答案内部是三运放结构第一级做输入缓冲和第二级差分放大共模抑制比能做到 90 dB 以上而且输入偏置电流低不会给桥路带来额外负载。选择仪表放大器时我重点看四个参数增益误差、温漂系数、噪声密度和共模抑制比。增益误差影响标定线性度温漂系数直接决定零点和灵敏度的温度稳定性噪声密度决定信号质量下限。关节力矩传感器的工作带宽通常不超过几百赫兹所以不需要高速运放反而要选单位增益带宽适中、低噪声的型号带宽太宽会把高频干扰引进来。增益电阻的计算方式很简单单增益电阻仪表放大器的典型表达式是 G 1 Rfixed / Rg其中 Rfixed 是片内精密电阻网络决定的常数Rg 是外接电阻。选增益时不要卡着满量程去算我习惯留出 20% 余量防止个别传感器灵敏度偏高造成 ADC 饱和。同时要考虑输出摆幅单电源供电时输出需要叠加一个偏置电压通常偏置到量程中点这样正负力矩都有对应输出电压空间。2.3 用一个计算脚本确定激励电压、增益和量程映射以下这段脚本是我每个传感器调试前都会跑一遍的估算用来把传感器标称灵敏度和 ADC 输入范围对上。# 全桥输出与增益估算脚本 gf 2.0 # 金属箔应变片灵敏系数典型值 2 strain_full 500e-6 # 满量程应变 500 微应变来自弹性体设计 vin 5.0 # 桥路激励电压 V # 全桥满量程输出电压估算 vout_full vin * gf * strain_full print(f满量程桥输出: {vout_full * 1000:.2f} mV) print(f灵敏度: {vout_full / vin * 1000:.2f} mV/V) # ADC 双极性输入范围 ±2.5V adc_range 2.5 gain adc_range / vout_full print(f所需增益: {gain:.1f} 倍) # 留 20% 余量 gain_safe gain / 0.8 print(f建议增益(留余量): {gain_safe:.1f} 倍)这段脚本的逻辑是先从弹性体应变量级出发估算满量程电压再反推放大增益。参数里最需要改的是 strain_full这个值由应变梁结构决定有限元分析或者厂商标称会给如果手头已经有传感器标称灵敏度直接用标称 mV/V 乘激励电压能跳过应变量级这一步。输出里有两个值要对照看满量程桥输出和所需增益如果增益超过几百倍意味着信号链路噪声会成为大问题这时候优先考虑提高激励电压而不是继续加增益用 5V 甚至 10V 激励能把桥路信号幅度做上去信噪比更划算。另一个容易被忽略的点是偏置。如果 ADC 输入范围是 0 到 5V而力矩有正有负就要把仪表放大器的参考端接到 2.5V让满量程正向对应 5V满量程负向对应 0V。这个偏置电压要用精密基准源产生不能直接从电源分压否则电源噪声会直接调制到输出上。我见过不止一次因为偏置电压噪声大导致低速转动时力矩波形上叠加了明显纹波的情况。3. 数据采集通道设计采样率、ADC 位数、同步与接口选型3.1 从力控带宽反推采样参数先定控制周期再谈分辨率数据采集参数不能拍脑袋定正确做法是从关节力控的带宽要求往回推。常见的关节力矩控制周期是 1 到 4 kHz也就是控制器每 0.25 到 1 毫秒要用一次力矩值。采样率至少要高于控制频率的 5 到 10 倍我一般取 2 kHz 以上让软件滤波有足够的数据量做平滑同时不引入明显相位滞后。如果目标是碰撞检测冲击信号的频率成分更丰富采样率还要再往上提有些方案做到 4 kHz 到 8 kHz。分辨率这块很多人被“24 位”这个数字迷惑。24 位 ADC 的实际有效位数取决于噪声硬件做得好时有效位数能有 18 位左右布局布线粗糙时可能连 15 位都保不住。判断够不够用有一个粗略标准分辨率的量化噪声要低于传感器本身噪声和放大链路噪声否则 ADC 会成为新瓶颈。力矩传感器的满量程精度通常做到 0.5% 到 1%对应 7 到 8 位有效精度但这是静态指标动态信号下需要更多余量来避免量化噪声影响平滑度所以 16 位起步、24 位更稳妥是工程上的常见选择。采样率和滤波是一对组合。硬件抗混叠滤波器必须存在否则带外噪声折叠进目标频带软件怎么滤都救不回来。对 Σ-Δ 型 ADC 来说它内部有数字抽取滤波器采样速率降低时等效于数字滤波加强这算是天然优势而 SAR 型 ADC 外部必须加模拟低通。无论是哪种滤波器截止频率都不要设得太靠近控制带宽我一般放在目标带宽的 5 到 10 倍这样相移在控制频段内可控。3.2 ADC 选型Σ-Δ 型与 SAR 型的分工关节力矩采集常用的 ADC 分两大类Σ-Δ 型适合高分辨率、低速率、通道少的场景SAR 型适合多通道、高速率、中等分辨率的场景。Σ-Δ 型通过过采样和噪声整形把量化噪声推到高频段再用数字滤波器滤除低速下能做到很高有效位数缺点是有建立时间切换通道或改变采样率之后要等若干个数据周期才能读准。SAR 型每次转换一个样本速度可以做到很快但线性度和噪声性能拼的是内部电容匹配和比较器设计整体指标比同价位的 Σ-Δ 型差一些。我给关节模块选型的经验是单关节独立采集板用 Σ-Δ 型把模拟前端和采样电路放在关节内部通过数字总线把结果发给主控多关节集中采集则用 SAR 型追求通道间同步和吞吐率。无论选哪种转换结束后的数据读取都要小心24 位数据通过 SPI 读出时是三字节字节顺序、补码格式、数据就绪信号都必须在驱动里处理对否则会出现“读数偶尔跳一个巨大值”的诡异现象。下面是一段通用的 24 位 ADC SPI 读取代码用 Python 伪代码描述具体库函数替换成你自己平台上的写法。def read_adc_24bit(spi, cs): # 拉低片选开始一次转换读取 cs.value(0) raw spi.read(3) # 读取 3 字节高位在前 cs.value(1) # 拼合成 24 位整数 value (raw[0] 16) | (raw[1] 8) | raw[2] # 判断最高位符号位做二进制补码转换 if value 0x800000: value - 0x1000000 # 归一化到 -1.0 ~ 1.0后续再乘基准电压 return value / 0x800000这段代码看起来简单但两个地方决定成败。第一是字节序多数 ADC 默认高位在前但有些型号支持低位在前配置读错顺序时数字会呈现一种有规律的乱跳。第二是补码转换24 位 ADC 的输出范围是 -8388608 到 8388607直接转成有符号整数后才能正确映射正负力矩。返回的归一化值再乘以基准电压和增益系数就能换算成实际电压。注意 SPI 时钟频率不要拉太高我习惯压在 1 MHz 以下数据线在 PCB 上和模拟电路靠得太近时高速翻转的时钟信号会通过地平面耦合进采样结果。3.3 多关节同步采样与总线接口从板内同步到分布式采集做单关节采集时只需要保证这一个通道稳定但机器人有多个关节力矩数据必须时间对齐否则主控算动力学和碰撞检测时会看到虚假的关节间耦合。常见做法有两种一是每个关节一个 ADC所有 ADC 的 SYNC 引脚接在一起由主控同时触发转换启动二是使用多通道同步采样的 ADC 芯片内部同时保持多个通道的采样值。前一种扩展性好后一种单板集成度高。如果关节板与主控之间走分布式总线我一般用差分信号的总线而不是单端 UARTCAN 或 RS-485 都行。电机驱动器通常也在同一关节附近噪声环境恶劣单端信号线哪怕只有几厘米都可能引入共模干扰。总线上每个采样帧里要带关节 ID、数据序号和时间戳主控收到后可以判断数据是否连续丢帧时及时报警而不是继续用旧数据。时间戳比想象中重要数据采集系统最怕的不是误差而是不确定性——一个偶尔延迟几毫秒的采样值会让力控在个别控制周期里突然跳变这种问题在示波器上很难抓。CAN 总线的波特率要根据控制周期选1 kHz 控制率下每毫秒要发一个帧波特率低于 1 Mbps 时总线负载会偏高。帧格式建议把力矩原始值、温度值、状态字打包在一个帧里温度值是标定补偿的必需品后面章节会专门讲为什么不能省。4. 标定与干扰排查力矩信号不稳定的几个血泪经验4.1 上电即漂移零点在头几分钟里缓慢移动现象传感器上电后零点不固定前面几分钟读数缓慢变化幅度可以达到满量程的 0.5% 到 1%之后慢慢稳定下来。原因应变片自热是主要贡献者。激励电压通过应变片电阻产生热量热平衡需要时间另外粘贴胶层在应力释放过程中也有一个缓慢的蠕变过程。这两个因素叠加让零点像热机一样在启动阶段慢慢爬升。解决把这个当作正常现象处理而不是故障。电路设计上可以降低一点激励电压减少自热但牺牲信噪比我更推荐在软件里做上电零点采集延迟上电后等 3 到 5 分钟再校准零点或者持续记录零点变化曲线在标定流程里剔除这一段不稳定的数据。如果产品不允许等待就额外加一个小功率预热回路让应变片在上电瞬间就达到接近稳态的温度。注意软件零点校准应该在机械臂处于已知空载姿态时执行不能让机构重量压在传感器上。4.2 全桥不等于全补偿温度梯度让“补偿”失效现象关节运行一段时间后力矩读数出现缓慢单调偏移方向和大小跟关节温度有明显的相关性但全桥结构理论上应该抵消温度影响。原因全桥抵消的是均匀温度场下四个桥臂的共同变化实际情况中电机热量从一侧传入弹性体靠近电机一侧的应变片温度比另一侧高好几度形成温度梯度。梯度作用下四个应变片的温漂不相等桥路便输出一个虚假的“力矩”。这是全桥组桥方式的固有限制。解决把温度传感器放在弹性体上、尽量靠近应变片的位置而不是贴在外壳上。外壳温度永远慢半拍测出来的温度无法表征应变片真实温度。标定时做温箱实验记录不同温度下零点的变化拟合一条温度补偿曲线在运行时用实时温度修正零点。更彻底的方案是选用温度自补偿型应变片让它的温度系数与弹性体热膨胀系数匹配但这会增加成本和采购周期。4.3 标定时很准装回关节就变差现象传感器在台架上标定静态精度很好装到关节模组里再测零点偏移一大截标定的斜率也变了。原因装配应力在作怪。法兰面不平整会引入弯矩螺栓的拧紧力矩不一致会改变弹性体的应力分布这些应力不是标定时测到的载荷却会叠加到传感器读数里。解决标定之后要加一道整机零点校准流程。正确顺序是先装配、再零点校准、最后做整机标定而不是在传感器单件状态就认定一切完成。批量生产时把装配后的零点偏移量写入传感器 Flash每台的偏移量可能不同必须要逐台记录。遇到反复拧紧后读数不稳定的优先查法兰面平面度和螺栓拧紧顺序而不是怀疑电路。4.4 线缆整理好后噪声反而变大现象原本散开测试时信号还不错把线束扎带固定后噪声明显变大读数抖动加剧。原因线缆被捆扎后改变了走线路径让传感器信号线靠近电机动力线扎带绑紧的位置也可能压迫屏蔽层改变屏蔽结构。另一个常见原因是屏蔽层两端都接地形成了地环路电流流过屏蔽层时产生干扰电压。解决遵循“屏蔽层单端接地”原则通常是在采集板侧接地传感器侧悬空。动力线和信号线分开走线槽实在无法分离时要保持至少 5 到 10 厘米的距离。屏蔽层不要随意剥皮露出一段再重新包工艺上要求屏蔽层连续覆盖到连接器外壳。信号线最好使用绞合线节距均匀让两根信号线受到的干扰尽量共模再由后级仪表放大器抑制掉。4.5 PCB 布局踩坑模拟地与数字地“一刀切”现象ADC 输出数据在某个固定码值附近反复跳动用示波器看电源纹波也不大但数据就是不干净。原因模拟地和数字地直接单一接地点原则没做好。许多人把地平面切成两块冰刀一样的分割槽结果信号线跨越分割处回流路径变得很长形成一个巨大天线。规则本身没有错错在机械套用。解决在混合信号板上用完整地平面模拟电路和数字电路分区布局而不是分地平面分割。ADC 的数字信号翻转产生的高频电流只在地平面极小的局部流动只要模拟区域远离这个局部完整地平面反而更干净。如果数据仍然脏再检查 ADC 参考电压的去耦电容位置参考电压是决定转换精度的基准它的去耦电容必须靠近芯片引脚参考走线越短越粗越好。5. 数据处理到力控接口滤波、标定矩阵与零点在线校正5.1 标定矩阵从单轴系数到轴间解耦关节力矩传感器在理想情况下每个通道只响应一个方向的力矩但实际弹性体加工误差、贴片位置偏差、电路串扰会让通道间出现耦合。六维力矩传感器用 6×6 矩阵解耦是常规操作单轴扭矩传感器也建议至少做零点和斜率两项校正。标定矩阵的求解不复杂给传感器加已知载荷记录原始输出然后用最小二乘求解映射矩阵。下面是用 NumPy 求解标定矩阵的标准做法。import numpy as np # M: N 组原始读数矩阵每行包含 6 个通道的 ADC 归一化值 # F: N 组已知载荷矩阵每行是施加的六维力/力矩 M np.array([[...], [...], ...]) # shape (N, 6) F np.array([[...], [...], ...]) # shape (N, 6) # 最小二乘解: C (M^T M)^-1 M^T F C, residuals, rank, sv np.linalg.lstsq(M, F, rcondNone) # 验证: 用另一组没参与标定的数据 predicted M_valid C error predicted - F_valid print(f最大残差: {np.abs(error).max():.4f})这段代码用最小二乘直接求解映射矩阵输入输出都做归一化处理时矩阵元素量级合理数值稳定。参数上最需要注意的是 M 和 F 要使用标定时记录的真实数据而不是理想的仿真数据。标定加载序列要覆盖正负两个方向、不同量级并且包含随机顺序避免所有数据点都落在同一条直线上导致矩阵病态。验证时必须用未参与求解的独立数据集否则只会看到“拟合一百分、泛化零分”的假象。最后把求得的矩阵系数换算成整型存进传感器 Flash运行时做一次矩阵乘法就能得到解耦后的力矩值。5.2 滤波硬件、软件、截止频率和相位滞后的平衡采集链路的滤波分为三层硬件抗混叠是刚需软件低通是常规状态估计是进阶。硬件抗混叠在采集章节讲过这里重点说软件滤波。最常用的一阶低通滤波计算量小适合 1 kHz 力控主循环里跑几十个通道def lowpass(x, alpha): y 0.0 out [] for v in x: y alpha * v (1 - alpha) * y out.append(y) return outalpha 的取值直接决定截止频率常用换算公式是 alpha 1 - exp(-2π fc / fs)其中 fc 是期望截止频率fs 是采样率。比如采样率 4 kHz想要 100 Hz 截止频率alpha 大约 0.15。然后要算一下相位滞后一阶低通在 fc 处相位滞后 45 度在更低频处滞后更小。如果力控回路本身有积分项滞后过大容易引起振荡。移动平均滤波看起来很直观但 N 点滑动平均其实相当于一个 FIR 滤波器阻带衰减只有 20 dB/十倍频衰减不干净还会把采样间隔的整数倍频率形成凹槽滤掉。我一般只在示波器上看波形时用滑动平均正式控制代码里用一阶或二阶 IIR。IIR 滤波器的坑是数字溢出和系数选择写完之后要做一次阶跃仿正确认输出不超调、不震荡。5.3 零点在线校正后知后觉还是未雨绸缪温度变化和胶层蠕变会让零点随时间缓慢漂移一次标定不能管一辈子。常见做法是在关节处于静止状态时持续跟踪零点检测到电机速度为零、指令力矩近似为零且持续超过设定时间就把当前传感器读数作为新的零点偏移量用缓慢的低通滤波去更新。这个思路是对的但要防止误更新机器人静止时如果还夹持着工件传感器承受的是真实负载此时不能把它当作零点。一个更稳妥的方案是只有在关节处于已知空载姿态时才更新零点结合机械臂正运动学判断当前位姿是否为标定时的参考位姿。如果追求更高精度可以在每个控制周期里用动力学模型计算预测力矩传感器实测值与模型预测值的差值作为“广义扰动”其中包含零漂也包含外部接触力这种方式顺手能做碰撞检测。我这里有一个前置条件动力学模型参数必须足够准否则扰动项里全是模型误差。软件在实现上要把零点偏移量单独保存不叠加到标定矩阵里。标定矩阵负责线性映射零点偏移负责平移修正两者分离之后温度补偿、零点更新和矩阵求解各管一块现场排查问题不用把所有环节混在一起猜。6. 验证方法与进阶用法从台架试验到关节内电流交叉验证6.1 系统合不合格四个测试说了算第一是静态精度测试用砝码或标准传感器逐级加载、逐级卸载记录每个载荷下的读数画出曲线看线性度、迟滞和重复性。第二是温漂测试把整个关节模组放进温箱从 20℃ 升到 60℃隔一段时间记录一次零点温度每变化一度零点偏移多少需要用曲线量化。第三是动态阶跃测试给传感器一个阶跃力矩记录超调量和稳定时间这直接反映采样率和滤波参数是否匹配。第四是做一次真实的力控闭环测试用手握住关节末端慢慢推动感受是否顺滑、有没有细微的停顿感。这四个测试能筛掉大多数电路和参数问题。6.2 进阶用关节驱动电流交叉验证传感器健康度关节电机电流和力矩之间有一个近似换算关系虽然受电机常数、摩擦力、温度影响不算精确但长期趋势很有参考价值。慢速匀速旋转时电流估算力矩与传感器实测力矩的差值应该稳定在一个区间内。如果某天发现差值缓慢变大大概率不是传感器坏了而是标定偏移、润滑状态变化或弹性体发生残余变形。这套交叉验证不需要额外加硬件在日常运行数据里就能做我习惯把差值统计为滑动窗口的均值和方差超过阈值时报警。6.3 我的习惯与收尾所有调试好的参数包括激励电压、增益、滤波系数、标定矩阵、温度补偿系数我都会存成一个独立的配置文件写入传感器 Flash而不是烧死在主控代码里。换一块主控板不需要重新标定传感器传感器坏了换备件也不用改代码。调这类系统最大的教训是“不要追着单个噪声点死磕”先把零漂、温漂、装配应力这三座大山移开剩下的干扰用屏蔽和滤波清理顺序反了会浪费大量时间。稳定的重复性比绝对标称精度更值钱读数漂移但有规律可补偿方差大则是硬件或结构在恶化。希望帮到你。本文还有配套的精品资源点击获取