4. 信号采集与预处理:霍尔传感器信号调理电路设计、ADC采样策略、抗混叠滤波与去噪

信号采集这步,说白了就是给霍尔信号“梳妆打扮”。传感器出来的原始信号,又脏又乱,直接送给ADC采样,结果肯定一塌糊涂。我早年吃过这个亏——信号调理没做好,后面算法写得再漂亮,伺服电机照样抖得像筛糠。

这一章,咱们把信号调理、ADC采样、抗混叠滤波、去噪这几个环节拆开揉碎。你跟着我的思路走一遍,以后遇到霍尔信号处理,心里就有底了。

4.1 霍尔传感器信号调理电路设计

霍尔元件输出的信号,通常是毫伏级的差分信号,还带着共模噪声。直接采样?不行。得先过三关:差分转单端、电平抬升、限幅保护。

4.1.1 差分转单端与电平抬升

我习惯用仪表放大器来做第一级。比如AD620或者INA128,增益设个10倍到50倍,把毫伏信号放大到ADC的输入范围。为什么用仪表放大器?因为它共模抑制比高,能把电源噪声、地弹干扰压下去。

放大之后,信号可能是双极性的(比如-2V到+2V)。但大多数ADC只能采0-3.3V或0-5V的单极性信号。怎么办?加一个电平抬升电路。用运放搭个加法器,把信号整体往上平移2V,变成0-4V。嗯,这里要注意:抬升电压的参考源必须干净,我一般用精密基准源,比如REF3033,而不是直接从电源分压。

4.1.2 限幅保护与驱动

ADC的输入引脚很娇贵,超过供电电压就可能烧掉。所以信号进ADC之前,必须加限幅保护。最简单的做法:两个肖特基二极管(比如BAT54S)反向并联到地和VCC。再串一个1kΩ电阻限流。

最后一级是驱动。运放输出要能快速驱动ADC的采样电容。我推荐用高速轨到轨运放,比如OPA2356,压摆率够高,建立时间短。

信号调理电路设计要点

  • 第一级:仪表放大器,增益10-50倍,滤除共模噪声
  • 第二级:电平抬升,将双极性信号平移至ADC单极性范围
  • 第三级:限幅保护,肖特基二极管+串联电阻
  • 第四级:高速运放驱动,确保ADC采样电容快速建立

4.2 ADC采样策略

ADC采样不是越快越好,也不是越慢越好。你得算一笔账。

4.2.1 采样率的选择

霍尔信号里,我们关心的最高频率成分是电机换向频率的几倍。比如电机最高转速6000rpm,极对数是4,那换向频率就是400Hz。为了捕捉换向时刻的细节,采样率至少要设到换向频率的10倍以上,也就是4kHz以上。

但我个人习惯留更多余量。一般设到换向频率的20-30倍。为什么?因为后面还要做数字滤波,采样率高一点,滤波后的相位延迟就小一点。伺服跟随最怕延迟。

电机转速 (rpm) 极对数 换向频率 (Hz) 建议采样率 (Hz)
3000 4 200 4000 - 6000
6000 4 400 8000 - 12000
10000 2 333 6660 - 10000

4.2.2 采样触发时机

霍尔信号是位置信号,采样时机很关键。我建议用PWM同步触发。在PWM周期的中间点触发ADC采样,这样能避开功率管开关带来的噪声尖峰。你想想看,功率管在PWM边沿开关时,电流突变会产生很大的di/dt噪声,会耦合到霍尔信号线上。在中间点采样,噪声最小。

实战技巧: 如果MCU支持,可以配置ADC为连续扫描模式,配合DMA自动搬运数据。这样CPU不用频繁进中断,省出来的算力可以跑更复杂的滤波算法。我在一个高速伺服项目里就是这么干的,采样率跑到20kHz,CPU负载才不到5%。

4.3 抗混叠滤波

抗混叠滤波,很多人不重视。其实这是信号链里最容易被忽略但后果最严重的一环。

4.3.1 为什么要抗混叠

根据奈奎斯特采样定理,采样率必须大于信号最高频率的两倍。但现实中的信号不是理想正弦波,它包含很多高频谐波。如果这些谐波频率超过采样率的一半,就会折叠回低频段,混在有用信号里,怎么滤都滤不掉。

我曾经在一个项目里遇到过:电机低速运行时,速度反馈信号里莫名其妙出现一个低频振荡。查了两天,最后发现是PWM开关频率的谐波混叠进了采样信号。加上一个简单的二阶低通滤波器,问题立刻消失。

4.3.2 硬件抗混叠滤波器设计

硬件抗混叠滤波器放在ADC之前,用运放搭一个二阶有源低通滤波器。截止频率一般设为采样率的1/4到1/3。比如采样率10kHz,截止频率就设在2.5kHz到3.3kHz。

我常用的拓扑是Sallen-Key结构。元件少,性能稳定。下面是一个典型设计:

// 二阶Sallen-Key低通滤波器参数
// 截止频率: 3kHz, 品质因数: 0.707 (巴特沃斯响应)
// 元件值:
R1 = R2 = 10kΩ
C1 = 4.7nF
C2 = 2.2nF

// 运放: OPA2356 (轨到轨, 高速)
// 实际截止频率:
fc = 1 / (2 * π * sqrt(R1 * R2 * C1 * C2))
   = 1 / (2 * π * sqrt(10k * 10k * 4.7n * 2.2n))
   ≈ 3.1kHz

注意: 电容要用C0G或NP0材质的,温度稳定性好。X7R的电容容值会随电压和温度变化,导致滤波器截止频率漂移。我在一个工业现场项目里吃过这个亏,夏天和冬天的滤波效果完全不一样。

4.4 数字去噪:均值滤波与中值滤波

硬件滤波之后,信号已经干净了不少。但伺服系统对噪声要求极高,还得加一道数字滤波。常用的有两种:均值滤波和中值滤波。它们各有各的脾气。

4.4.1 均值滤波

均值滤波,就是把最近N个采样值加起来除以N。简单,算得快,对高斯白噪声抑制效果好。但缺点也很明显:它对脉冲噪声(比如一个突然的尖峰)很敏感,一个坏点就能把平均值拉偏。

我一般把均值滤波用在电机匀速运行的场景。比如速度环的反馈信号,用4点或8点均值滤波,既能平滑噪声,延迟又不大。

// 均值滤波实现 (C语言)
#define FILTER_LEN 8
static uint16_t buffer[FILTER_LEN] = {0};
static uint8_t index = 0;
static uint32_t sum = 0;

uint16_t mean_filter(uint16_t new_sample) {
    sum -= buffer[index];
    buffer[index] = new_sample;
    sum += new_sample;
    index = (index + 1) % FILTER_LEN;
    return (uint16_t)(sum / FILTER_LEN);
}

4.4.2 中值滤波

中值滤波,是把N个采样值排序,取中间那个。它对脉冲噪声有奇效。一个尖峰进来,排序后要么在头要么在尾,根本影响不到中间值。

但中值滤波的缺点也明显:计算量大,排序耗时。而且它对高斯白噪声的抑制效果不如均值滤波。

我个人的经验是:在换向时刻附近用中值滤波。因为换向时霍尔信号最容易出现毛刺(开关噪声耦合过来的),中值滤波能干净利落地把这些毛刺剔除。而在匀速运行段,用均值滤波平滑噪声。

// 中值滤波实现 (C语言, 5点中值)
#define MEDIAN_LEN 5
static uint16_t window[MEDIAN_LEN] = {0};
static uint8_t pos = 0;

uint16_t median_filter(uint16_t new_sample) {
    uint16_t temp[MEDIAN_LEN];
    uint8_t i, j;
    
    window[pos] = new_sample;
    pos = (pos + 1) % MEDIAN_LEN;
    
    // 复制到临时数组并排序 (冒泡排序, 仅用于演示)
    for(i = 0; i < MEDIAN_LEN; i++) temp[i] = window[i];
    for(i = 0; i < MEDIAN_LEN - 1; i++) {
        for(j = 0; j < MEDIAN_LEN - 1 - i; j++) {
            if(temp[j] > temp[j+1]) {
                uint16_t t = temp[j];
                temp[j] = temp[j+1];
                temp[j+1] = t;
            }
        }
    }
    return temp[MEDIAN_LEN / 2];
}

4.4.3 两种滤波的对比与选择

特性 均值滤波 中值滤波
高斯白噪声抑制 优秀 一般
脉冲噪声抑制 差 优秀
计算量 低 (O(1)) 高 (O(n²) 或 O(n log n))
相位延迟 N/2 个采样周期 N/2 个采样周期
适用场景 匀速运行、速度环反馈 换向时刻、位置跳变检测

我的推荐策略: 先用3点中值滤波剔除明显的脉冲噪声,再用4点均值滤波平滑残余的高斯噪声。两级滤波加起来延迟只有3.5个采样周期,效果却比单用任何一种好得多。这个组合我在三个伺服项目里验证过,屡试不爽。

4.5 本章知识体系

下面这张图,把信号采集与预处理的整个流程串起来了。从霍尔传感器出来,到最终送给控制算法的干净信号,每一步都不能少。

霍尔信号采集与预处理流程 霍尔传感器 差分毫伏信号 信号调理电路 差分转单极 电平抬升+限幅 抗混叠滤波 二阶Sallen-Key 截止频率3kHz ADC采样 PWM同步触发 DMA自动搬运 数字去噪处理 (软件) 均值滤波 + 中值滤波 组合策略 干净的位置信号 送控制算法 关键参数 • 采样率: 8-12kHz • 抗混叠截止: 3kHz • 均值滤波: 4点 • 中值滤波: 3点

你看,从霍尔传感器到最终的控制算法,中间要经过信号调理、抗混叠滤波、ADC采样、数字去噪四个环节。每个环节都有坑,但只要你按照我上面说的来,基本不会出大问题。