3. 关节力矩传感器:应变片原理、力矩传感器标定、温度补偿与滤波
聊到关节级力矩控制,传感器就是我们的“眼睛”。没有它,你所谓的力控就是开环瞎蒙。我个人习惯把力矩传感器看作是机器人关节的“肌腱”,它直接告诉你真实受力是多少。
这一节,我们深入拆解三个核心问题:它怎么感知力?怎么保证测得准?怎么对抗温度和噪声?
3.1 应变片原理:从电阻变化到力矩信号
说白了,绝大多数工业关节力矩传感器,核心元件就是应变片。它的原理其实很简单:金属导体在受力变形时,电阻值会发生变化。这个现象叫“应变效应”。
你想想看,一根金属丝被拉长,截面积变小,电阻自然就变大了。反过来,被压缩,电阻就变小。我们就是利用这个微小的电阻变化,来反推受力大小。
核心公式: ΔR/R = K * ε
其中 ΔR 是电阻变化量,R 是初始电阻,K 是应变片灵敏系数(通常约 2.0),ε 是应变。
但有个问题——单个应变片的电阻变化太微弱了,而且容易受温度干扰。所以工程上几乎不用单臂电桥,而是用全桥电路。
全桥电路有四个应变片,两两配对。一个受拉,一个受压。这样不仅信号放大了四倍,还能自动抵消温度带来的共模误差。嗯,这里要注意:贴片方向必须精确,否则你测出来的力方向都是歪的。
我的经验: 我在项目里遇到过贴片工人把方向贴反了,结果传感器输出反向。后来我要求每批贴片后必须做 X 光检测,确认栅丝方向。这个坑,踩一次就够了。
3.2 力矩传感器标定:把电压变成牛顿米
应变片输出的是电压信号,但我们想要的是力矩值。这中间需要一条“转换曲线”,也就是标定。
标定说白了就是:给传感器施加已知的力矩,记录对应的电压输出,然后拟合出关系式。
我个人习惯把标定分成两步:
- 静态标定:在恒温、无振动的环境下,用砝码或力矩扳手施加标准力矩。从 0 到满量程,逐点记录。
- 多轴耦合标定:关节力矩传感器往往同时受弯矩和扭矩。你需要施加不同方向的力,解耦出各个通道的串扰系数。
下面是一个典型的标定数据表示例:
| 施加力矩 (Nm) | 通道1输出 (mV/V) | 通道2输出 (mV/V) | 通道3输出 (mV/V) |
|---|---|---|---|
| 0 | 0.002 | 0.001 | -0.003 |
| 10 | 1.245 | 0.032 | 0.015 |
| 20 | 2.491 | 0.061 | 0.028 |
| 50 | 6.228 | 0.155 | 0.071 |
标定完成后,你会得到一个 3x3 的耦合矩阵。每次采集到原始电压,乘以这个矩阵的逆,就能得到解耦后的真实力矩。
避坑指南: 我曾经遇到过标定台刚性不足,导致施加力矩时传感器底座变形,标定曲线非线性严重。后来我改用铸铁底座加预紧螺栓,才把线性度做到 0.1% 以内。标定台的刚度,往往比传感器本身还关键。
3.3 温度补偿:为什么传感器会“漂”?
温度是力矩传感器的天敌。应变片本身的电阻会随温度变化,弹性体的杨氏模量也会随温度变化。这两个因素叠加,会让你的零点和灵敏度都发生漂移。
补偿策略通常有三种:
- 硬件补偿:在电桥中串联热敏电阻或恒流源,抵消温度影响。优点是实时性好,缺点是补偿范围有限。
- 查表补偿:在多个温度点下标定零点和灵敏度,存成表格。运行时根据当前温度插值修正。我比较推荐这种方法,精度高。
- 模型补偿:建立温度与漂移量的数学模型,用公式实时计算。适合对存储空间敏感的场景。
下面是一个温度补偿前后的对比:
| 温度 (°C) | 补偿前零点 (Nm) | 补偿后零点 (Nm) |
|---|---|---|
| 20 | 0.05 | 0.01 |
| 40 | 0.32 | 0.02 |
| 60 | 0.78 | 0.03 |
| 80 | 1.45 | 0.04 |
你看,80°C 时如果不补偿,零点漂了 1.45 Nm,这力控还怎么玩?补偿后压到 0.04 Nm,才算可用。
3.4 滤波:别让噪声毁了你的力控
传感器信号里除了有用的力矩,还有高频噪声——电机 PWM 干扰、机械振动、电磁耦合。如果不滤波,控制器会把这些噪声当成真实力,导致系统抖动甚至振荡。
我常用的滤波策略分三级:
- 硬件低通滤波:在 ADC 前端加 RC 滤波器,截止频率通常设在 100-500 Hz。先把高频毛刺干掉。
- 软件均值滤波:对连续 N 个采样点取平均。适合抑制周期性噪声。N 一般取 4 或 8,太大则延迟增加。
- 二阶巴特沃斯低通滤波:在控制循环里做数字滤波。截止频率根据控制带宽来定,通常设在 20-50 Hz。
下面是一个简单的二阶低通滤波代码片段:
// 二阶巴特沃斯低通滤波器,截止频率 30Hz,采样率 1kHz
float b0 = 0.0201;
float b1 = 0.0402;
float b2 = 0.0201;
float a1 = -1.5610;
float a2 = 0.6414;
float x[3] = {0}; // 输入历史
float y[3] = {0}; // 输出历史
float filter(float input) {
x[2] = x[1];
x[1] = x[0];
x[0] = input;
y[2] = y[1];
y[1] = y[0];
y[0] = b0*x[0] + b1*x[1] + b2*x[2] - a1*y[1] - a2*y[2];
return y[0];
}
我的建议: 滤波器的截止频率不要设得太低。我曾经为了追求平滑,把截止频率降到 5 Hz,结果力控响应慢得像在泥里走路。后来我根据关节的机械谐振频率来设定,一般取谐振频率的 1/3 到 1/5,既滤掉噪声,又不牺牲带宽。
3.5 知识体系总览
为了让你更直观地理解这一章的结构,我画了一张图:
这张图把四个核心模块串起来了。从应变片原理出发,经过标定得到准确的转换关系,再用温度补偿对抗环境变化,最后用滤波把干净的信号送给控制器。每一步都缺一不可。
最后提醒一句: 传感器是力控的基石。如果这块没做好,后面再高级的控制算法都是空中楼阁。我见过太多团队花大价钱买高端控制器,却在传感器上省钱,结果系统性能一塌糊涂。该花的钱,别省。