1. 从一个“不平衡”的电路说起为什么传感器信号调理总绕不开惠斯通电桥很多人第一次接触传感器信号调理都是从称重传感器、压力传感器或者应变片开始的。你兴冲冲地买了一个应变片照着教程贴好接上电源结果用万用表一测——输出几乎是零。不是传感器坏了而是你还没有把惠斯通电桥这个最基础的电路结构搭对。惠斯通电桥本质上就是四个电阻组成的菱形结构两个分压支路并联中间跨接一个测量端。当四个电阻满足特定比例关系时测量端电压为零这叫“平衡”只要任何一个电阻发生变化测量端就会输出一个微弱的差分电压这叫“不平衡”。传感器信号调理的核心任务就是把这个微弱的、带着共模噪声的差分电压放大到单片机ADC能可靠采样的范围。我见过太多初学者在学STM32的ADC采样时直接拿一个电位器分压就往ADC引脚上怼然后发现读数跳动得厉害或者线性度极差。问题不在于STM32的ADC不行而在于信号源本身没有经过调理。惠斯通电桥输出的差分电压通常在毫伏级别比如一个350欧姆的应变片满量程输出可能只有10mV到20mV。STM32的12位ADC在3.3V参考电压下最小分辨率为0.8mV左右看起来好像够用但实际噪声容限、参考电压漂移、地弹等因素会让有效位数大幅下降。所以必须先用运放做差分放大把信号抬到ADC量程的中间区域比如1.65V附近再进行采样。这个“不平衡”的惠斯通电桥电路之所以值得花5分钟搞懂是因为它串联了传感器原理、运放电路设计、ADC采样三大核心知识点。你搞懂了它就等于打通了从物理世界到数字世界的信号链路。不管你是做STM32毕业设计还是搞工业控制、医疗电子、汽车电子这套思路都是通用的。接下来的内容我会从电路原理、运放选型、参数计算、STM32 ADC配置、常见问题排查几个维度把这条链路彻底拆开讲透。2. 惠斯通电桥的“不平衡”到底怎么产生信号2.1 平衡状态与差分电压的数学关系惠斯通电桥有四个桥臂假设左上为R1右上为R2左下为R3右下为R4。激励电压Vex加在桥的上下两端输出电压Vout取左右两个中点的差值。当R1/R2 R3/R4时电桥平衡Vout 0。这个条件可以等价写成R1×R4 R2×R3这就是惠斯通电桥的平衡条件。现在假设R1是应变片其他三个是固定电阻。当应变片受力变形时R1变成R1ΔR。此时电桥不再平衡输出电压可以近似表示为Vout ≈ Vex × (ΔR / (4R 2ΔR))当ΔR远小于R时分母可以近似为4R于是Vout ≈ Vex × ΔR / (4R)。这个公式就是传感器信号调理中最常用的线性近似。举个例子Vex 5VR 350ΩΔR 1Ω那么Vout ≈ 5 × 1 / (4×350) 3.57mV。这个电压非常小直接送ADC几乎没法用。注意这里说的“不平衡”是相对于平衡状态而言的。实际电路中即使没有受力由于电阻公差和粘贴工艺电桥也可能有几十毫伏的初始失调。这个失调必须在后续调理电路中处理掉否则会吃掉放大器的动态范围。2.2 为什么全桥比半桥和四分之一桥更常用惠斯通电桥有三种常见配置四分之一桥、半桥、全桥。四分之一桥只有一个桥臂是应变片另外三个是固定电阻。这种配置灵敏度最低而且温度漂移严重因为应变片的电阻温度系数和固定电阻不一致。半桥有两个桥臂是应变片灵敏度提高一倍温度补偿效果也更好。全桥四个桥臂都是应变片灵敏度是四分之一桥的四倍而且温度变化时四个桥臂同时变化共模漂移可以相互抵消。在实际项目中如果成本允许我强烈建议用全桥。虽然应变片数量多了但后续调理电路可以简化很多。全桥输出的差分电压幅值更大对运放的失调电压和噪声要求相对宽松。而且全桥的四个应变片贴在同一个弹性体上受力时两个受拉、两个受压输出信号是四倍叠加信噪比天然就高。2.3 激励方式的选择恒压还是恒流惠斯通电桥的激励源有两种常见方式恒压激励和恒流激励。恒压激励最简单一个基准电压源加一个缓冲运放就行。但恒压激励有个问题应变片的电阻会随温度变化导致桥臂电流变化进而影响输出电压。恒流激励则可以保持桥臂电流恒定温度引起的电阻变化不会影响输出但电路复杂一些需要恒流源电路。对于大多数STM32项目我建议用恒压激励因为STM32系统里通常已经有3.3V或5V的基准电压直接拿来用很方便。但要注意激励电压的稳定性直接影响测量精度。如果直接用STM32的3.3V电源做激励ADC也用同一个3.3V做参考那么电源波动会同时影响激励和参考理论上可以相互抵消这叫“比例式测量”。但前提是ADC的参考电压和电桥激励来自同一个源而且走线要尽量短、尽量粗。3. 运放差分放大电路把毫伏信号抬到ADC量程3.1 经典三运放差分放大电路的结构惠斯通电桥输出的是差分信号需要差分放大电路来提取。最经典的结构是“三运放差分放大电路”也叫仪表放大器。它由两级组成第一级是两个同相放大器分别放大正负输入信号第二级是差分放大器把第一级的输出相减。这种结构的特点是输入阻抗极高共模抑制比很好增益可以通过一个电阻精确设定。第一级的两个运放配置成同相放大增益为1 2R/Rgain。第二级的差分放大器增益为R3/R2。总增益是两级增益的乘积。这种电路的优点是共模抑制比取决于电阻匹配精度只要电阻匹配好共模抑制比可以做到80dB以上。缺点是需要四个匹配电阻成本高一些。对于STM32项目如果精度要求不是特别高可以用一个运放搭成差分放大电路也就是“单运放差分放大器”。这种电路只需要一个运放和四个电阻成本低但输入阻抗较低共模抑制比也差一些。如果电桥输出阻抗不高比如350Ω单运放差分放大器也能用。3.2 运放选型的关键参数失调电压、温漂、增益带宽积选运放不是随便拿一个NE5532就能用的。对于惠斯通电桥信号调理最关键的参数是输入失调电压和失调电压温漂。因为电桥输出只有几毫伏如果运放的失调电压有5mV那信号直接被淹没了。所以必须选低失调运放比如OPA333、AD8237、INA333这些。OPA333的失调电压只有10μV温漂0.05μV/°C非常适合直流信号放大。增益带宽积也要考虑。假设你需要100倍增益信号带宽是100Hz那么运放的增益带宽积至少需要100×100 10kHz。看起来要求很低但实际电路中如果运放带宽太窄阶跃响应会变慢影响动态测量。我一般会留10倍余量选增益带宽积在100kHz以上的运放。还有一个容易被忽略的参数是输入偏置电流。如果电桥电阻较大比如10kΩ偏置电流在电阻上产生的电压会引入误差。比如偏置电流1nA在10kΩ上产生10μV误差对于微伏级信号来说不可忽略。所以高阻抗电桥要选CMOS输入运放偏置电流在pA级别。3.3 增益电阻的计算与选择假设电桥满量程输出为20mVSTM32 ADC参考电压3.3V希望满量程时ADC读数为3.0V左右那么总增益需要150倍。如果采用三运放结构第一级增益设为15倍第二级设为10倍。第一级增益公式为1 2R/Rgain如果R10kΩ要得到15倍增益Rgain 2×10k / (15-1) 1.43kΩ。第二级增益为R3/R2如果R21kΩR310kΩ增益就是10倍。实际选电阻时要用精密电阻精度至少0.1%温漂25ppm/°C以下。普通5%精度的碳膜电阻会导致共模抑制比严重下降。我试过用普通电阻搭差分放大结果共模抑制比只有40dB左右换成0.1%精密电阻后直接提升到80dB以上。这个差距在ADC读数上非常明显。提示增益电阻Rgain最好用可调电阻或者多电阻串联方便调试时微调。但最终产品中要用固定电阻避免振动导致阻值变化。4. STM32 ADC采样从模拟电压到数字量的最后一公里4.1 ADC参考电压的选择与比例式测量STM32的ADC参考电压可以选内部参考、外部参考或者电源电压。内部参考精度一般温漂较大不适合精密测量。外部参考可以用REF3033、LM4040这些基准芯片精度高温漂小。但更巧妙的方法是“比例式测量”让电桥激励和ADC参考来自同一个电压源。这样电源电压波动时激励电压和参考电压同时变化ADC读数不变。具体做法是用STM32的3.3V电源同时给电桥激励和ADC参考供电。但STM32的3.3V电源噪声较大直接给电桥激励会引入噪声。所以中间要加一个LC滤波或者LDO稳压。我一般用AMS1117-3.3给电桥激励供电ADC参考也用同一个AMS1117的输出。这样虽然AMS1117的输出有1%左右的初始误差但比例式测量可以抵消掉。4.2 ADC采样周期与滤波算法STM32的ADC采样周期需要根据信号源阻抗来设置。信号源阻抗越高采样电容充电时间越长需要的采样周期就越多。惠斯通电桥经过运放放大后输出阻抗通常很低比如运放输出阻抗在几十欧姆以内所以采样周期可以设短一些。但为了稳定我一般设采样周期为71.5个ADC时钟周期对应采样时间约1.2μsADC时钟14MHz时。ADC采样值会有噪声必须做滤波。最简单的滤波是多次采样取平均比如连续采16次去掉最大值和最小值剩下14次取平均。这种“去极值平均滤波”对脉冲噪声很有效。如果信号变化缓慢还可以用一阶低通滤波公式是Y(n) α×X(n) (1-α)×Y(n-1)α取0.1到0.3之间。我试过在STM32上用这个算法配合DMA搬运CPU占用率几乎为零。4.3 DMA与定时器触发解放CPU的采样方案如果让CPU轮询ADC采样率高了会占用大量CPU时间。更好的方案是用定时器触发ADCDMA搬运数据。配置TIM2或TIM3产生固定频率的触发信号比如1kHz连接到ADC的外部触发输入。ADC每次转换完成后DMA自动把数据搬到内存数组里。CPU只需要在数组填满后处理一次数据。这种方案的好处是采样率精确不受CPU中断延迟影响。我做过对比轮询方式采样1kHz信号抖动在几十微秒定时器触发DMA方式抖动在纳秒级。对于需要精确时间间隔的应用比如测频、相位分析必须用定时器触发。注意STM32的ADC在DMA模式下要注意数据对齐方式。12位ADC结果可以左对齐或右对齐。如果后续要做滤波和计算建议右对齐直接得到0到4095的整数方便处理。5. 实操过程从零搭建一套完整的信号调理链路5.1 元器件准备与电路搭建先列一下我最近一个项目用的物料清单应变片用BF350-3AA350Ω灵敏度系数2.0运放用INA333集成仪表放大器省去了匹配电阻的麻烦基准电压用REF30333.3V输出初始精度0.05%STM32用STM32F103C8T612位ADC电阻用0.1%精密电阻温漂25ppm。电桥激励直接用REF3033的输出经过一个OPA333缓冲后给电桥供电。电路搭建时电桥的四个电阻要尽量靠近走线对称。运放的输入引脚要远离数字信号线避免耦合噪声。REF3033的输出要加10μF钽电容和100nF陶瓷电容滤波。STM32的ADC参考引脚也要加100nF陶瓷电容。这些细节看起来小但实际调试时少一个电容就可能导致读数跳动。5.2 运放增益的实测与调整焊好电路后先不接传感器用万用表测运放输出。理论上电桥平衡时输出应该接近0V但实际会有几十毫伏的失调。INA333的REF引脚可以接一个电压用来调整输出偏置。我把REF引脚接1.65V这样零受力时输出就是1.65V正好在ADC量程中间。然后加标准砝码测输出电压。比如加1kg砝码输出从1.65V变到1.85V变化200mV。如果满量程是5kg那么满量程输出变化1V对应ADC读数从2048变到3290左右。这个范围很合适既没有超出量程也没有浪费分辨率。如果增益不对可以调整INA333的增益电阻。INA333的增益公式是G 1 100kΩ/Rg。要得到100倍增益Rg 100k / 99 ≈ 1.01kΩ。我用1kΩ电阻串联一个100Ω可调电阻实测调整到1.01kΩ时增益正好100倍。5.3 STM32端代码配置与数据读取STM32的ADC配置用CubeMX生成代码最方便。选ADC1的IN0通道设置采样时间为71.5周期连续转换模式关闭外部触发选TIM2 TRGO。DMA设置为循环模式数据宽度半字。TIM2配置为1kHz更新频率TRGO输出选更新事件。代码里定义一个uint16_t adc_buffer[64]DMA搬运满64个数据后触发中断。在中断里做去极值平均滤波然后通过串口打印出去。我实测这个方案从加砝码到串口输出稳定读数延迟在10ms以内完全满足一般称重需求。提示STM32F103的ADC在DMA模式下如果同时用多个通道要注意规则组和注入组的区别。单通道采样用规则组就够了配置简单。6. 常见问题与排查技巧实录6.1 ADC读数跳动大怎么排查读数跳动是最常见的问题。先看电源用示波器测STM32的VDDA和VREF引脚如果有几十毫伏的纹波那读数肯定跳。解决办法是加LC滤波或者换LDO。再看地线模拟地和数字地要单点连接不能形成地环路。我遇到过一块板子模拟地和数字地通过两个过孔连接结果ADC读数跳了20个LSB改成单点连接后降到3个LSB。如果电源和地都没问题检查运放输出。用示波器看运放输出是否有高频振荡。运放驱动容性负载容易振荡比如输出直接接ADC引脚引脚有几十皮法的电容。解决办法是在运放输出串联一个50Ω电阻隔离容性负载。6.2 线性度差可能是电桥非线性惹的祸惠斯通电桥的输出和ΔR/R并不是完全线性的前面用的近似公式Vout ≈ Vex × ΔR / (4R) 只在ΔR远小于R时成立。如果应变片变形较大ΔR/R达到1%以上非线性误差就不可忽略了。比如ΔR/R 1%时实际输出比线性近似值小约0.5%。对于高精度应用要么用软件做非线性校正要么选非线性更小的传感器。软件校正的方法很简单在量程内取多个校准点比如0%、25%、50%、75%、100%记录ADC读数然后用多项式拟合。我一般用二次多项式拟合误差可以降到0.1%以内。STM32做二次多项式计算用浮点运算单元的话一次计算不到1μs。6.3 温漂问题从元器件选型到软件补偿温漂是精密测量的天敌。电桥的四个电阻温度系数不一致会导致零点漂移。运放的失调电压温漂也会叠加。我实测过用普通电阻搭的电桥温度从25°C升到50°C零点漂移了50个LSB。换成低温漂电阻后漂移降到5个LSB以内。软件补偿可以用温度传感器比如STM32内部的温度传感器或者外接DS18B20。先测出零点随温度的变化曲线然后在代码里做线性补偿。我一般会在开机时做一次零点校准把当前温度下的零点存到Flash里运行时根据温度查表补偿。问题现象可能原因排查方法解决措施ADC读数跳动大电源纹波大示波器测VDDA加LC滤波或LDOADC读数跳动大地环路检查模拟地数字地连接单点连接线性度差电桥非线性多点校准多项式拟合温漂大电阻温漂大加热测试换低温漂电阻运放输出振荡容性负载示波器看输出串联50Ω电阻增益不准电阻精度低万用表测电阻换0.1%精密电阻6.4 运放相位补偿与稳定性问题运放电路如果出现自激振荡输出会有高频正弦波ADC读数会乱跳。相位补偿的方法是在运放的反馈电阻上并联一个小电容比如10pF到100pF。这个电容会在高频时降低反馈系数从而降低环路增益保证相位裕度。具体容值需要实验确定一般从10pF开始试用示波器看输出是否干净。还有一个常见问题是运放的共模输入范围。如果电桥输出共模电压接近电源轨运放可能工作不正常。比如单电源供电时电桥中点电压是Vex/2如果Vex3.3V共模电压就是1.65V大多数轨到轨运放都能处理。但如果电桥有失调共模电压可能偏离要选共模范围更宽的运放。7. 从惠斯通电桥延伸出去这套思路还能用在哪搞懂了惠斯通电桥加运放加ADC这套链路你会发现很多传感器信号调理都是类似的套路。比如热电偶输出是微伏级的差分电压需要仪表放大器放大然后冷端补偿。比如光电二极管输出是电流信号需要跨阻放大器转换成电压再送ADC。比如麦克风输出是毫伏级交流信号需要放大并偏置到ADC量程中间。甚至一些数字传感器比如HX711内部就是集成了仪表放大器和ADC专门为惠斯通电桥设计。你用HX711时本质上还是在用这套原理只是芯片帮你把运放和ADC集成进去了。理解了底层原理再看HX711的数据手册就会发现所有参数都似曾相识。我在实际项目中的体会是信号调理电路的设计三分靠计算七分靠布局布线和调试。计算只能给你一个起点真正决定性能的是PCB布局、电源质量、地线处理这些细节。我踩过最大的坑就是一开始只关注电路原理图忽略了PCB布局结果同样的原理图重新画板后噪声降了一半。所以如果你正在做STM32的ADC采样项目不妨先把惠斯通电桥这个基础电路搭一遍把每一个节点的波形都测一遍把每一个参数都算一遍。这个过程花不了多少时间但收获绝对比死记硬背公式大得多。