010 传感器与数据采集基础:从模拟到数字
一个让我熬夜到凌晨三点的ADC问题
去年做的一个工业振动监测项目,传感器输出0-5V模拟信号,STM32F4内置ADC采集,理论上12位分辨率,4096个码值对应0-3.3V。结果数据一出来,波形像被狗啃过——毛刺、跳变、偶尔还出现负值。用示波器看传感器输出,干净得像教科书上的正弦波。问题出在哪?折腾到凌晨三点,发现是ADC参考电压引脚上有个0.1μF的电容虚焊了。
这个教训让我明白:模拟信号采集,从传感器到数字量的每一毫米走线都是战场。今天这篇笔记,就把我这些年踩过的坑、焊过的飞线、改过的PCB,浓缩成你能直接用的经验。
传感器输出:不是所有电压都能直接进ADC
先搞清楚传感器在干什么。绝大多数传感器把物理量(温度、压力、加速度)转换成电信号,常见三种输出类型:
电压输出型:LM35温度传感器,每摄氏度输出10mV,0℃时0V,100℃时1V。这种最友好,但注意输出阻抗——有些传感器输出阻抗高达10kΩ,直接接ADC输入,采样电容充电时间不够,读数会偏低。解决办法:加一个电压跟随器(运放接成单位增益),输入阻抗高到MΩ级,输出阻抗接近0。
电流输出型:工业上常见的4-20mA,远距离传输抗干扰强。接收端用250Ω精密电阻转成1-5V电压。这里有个坑:电阻精度必须0.1%以上,普通1%电阻温度漂移会让你数据跟着室温跑。我吃过亏,后来一律用金属膜电阻,温漂25ppm/℃以下。