
有些做嵌入式开发的同学遇到 ADC 采样电压不准、传感器信号波动大、输出波形带毛刺时第一反应是改软件加滤波、加延时、换采样频率。改了半天问题还在。这时候才意识到信号的源头在芯片外面在传感器、运放、匹配电路里而这一块知识恰恰是《模拟电子技术基础》这门课要解决的。我不是想说“每个人都必须精通模电”。但对做嵌入式、硬件、信号链相关工作的开发者来说模拟电路决定了你能否正确理解数据手册里的参数能否在电路板上快速定位信号异常。数字电路给的是 0 和 1而传感器产生的压力、声音、温度、光强都是连续变化的物理量要先被放大、滤波、调理成适合 ADC 输入的电压范围才能进入单片机。这个“调理”的过程全部发生在模拟域。这篇文章会用偏工程、偏实践的思路重新讲一遍模拟电子技术基础中最核心的部分三极管放大电路、静态工作点、失真现象、仿真验证方法以及工程中更常用的运算放大器。读完你可以做三件事算出一个单管共射放大电路的静态工作点用仿真软件搭一个放大电路并判断失真理解运放“虚短虚断”背后的逻辑知道 ADC 前级电路应该在什么时候介入。1. 这门课到底在解决什么问题很多人对《模拟电子技术基础》的第一印象是“理论课”内容从 PN 结开始然后是二极管、三极管、场效应管、运放、负反馈、功率放大、直流电源。教材很厚公式很多而且一开始接触很难把这些内容和实际开发关联起来。但如果从工程问题倒推这门课回答的是几个非常具体的问题传感器输出的信号太弱怎么把它放大到单片机 ADC 能识别的范围放大之后的波形为什么变形了是电路设计问题还是参数选择问题温度变化之后电路的放大倍数和输出电压为什么飘了一个运放的增益带宽积、压摆率、输入偏置电流分别在什么场景下会坑你这些问题本质上都属于“模拟信号链”的范畴。数字电路关心的是逻辑正确模拟电路关心的是“电压到底是多少、波形到底长什么样”。很多嵌入式工程师写代码很熟练但是面对示波器上的波形不会分析内核原因就是缺少模拟电路的基本功。所以这篇不是要把教材压缩一遍而是用“如果需要设计一个传感器采集电路你到底需要掌握哪些知识点”的线索来讲。换句话说这篇文章真正要解决的是你拿着一块单片机开发板遇到模拟信号采集问题时有没有一个系统的排查思路。2. 模拟电子的核心概念先建立框架在进入具体的放大电路之前先把几个高频概念解释清楚。这些概念在芯片数据手册里也会反复出现理解了它们读手册就不会太吃力。2.1 模拟信号与放大器模拟信号是在时间和幅值上都连续的信号。声音经过麦克风变成的电压、热敏电阻分压产生的电压、压力传感器输出的毫伏级差分信号都是典型的模拟信号。放大器的作用是把小幅值信号按比例放大成更大的信号同时尽量保持原始波形的形状。最简单的理想模型是Vout A × Vin其中 A 是增益可以是电压增益、电流增益或功率增益。实际放大器的问题在于增益不是恒定的带宽有限还会引入噪声和失真。2.2 增益、带宽与失真增益决定了信号放大多少倍单位常用 V/V、dB。dB 的计算公式是Gain_dB 20 × log10(Vout / Vin)带宽决定了放大器能够正常处理的频率范围。如果一个放大器增益很高但带宽很窄输入一个 1MHz 的信号输出可能已经衰减得不成样子。这也是运放数据手册里“增益带宽积”这个参数的意义所在增益和带宽是需要折中并权衡的。失真是指输出波形相对于输入波形发生了不希望的变化。常见的失真类型有削波失真输出超过电源电压范围波形顶部或底部被“削平”。非线性失真三极管工作区设置不对波形上下半周不对称。相位失真不同频率成分的延迟不一样波形形状改变。对于初学者最值得关注的判断标准是输出波形是不是“看起来像”输入波形只是被放大了。2.3 阻抗匹配模拟电路里阻抗无处不在。信号源有输出阻抗后级电路有输入阻抗。如果前级输出阻抗很高后级输入阻抗很低信号就会在连接处被分压衰减导致你测到的电压低于预期。举个最常见的例子单片机 ADC 的采样电容在采样瞬间会吸取电流如果前级是一个高阻抗的传感器直接连到 ADC 引脚采样值就会不准确。这也是为什么要放一个运放做缓冲器的原因运放输入阻抗高、输出阻抗低能把传感器信号“无损地”传给 ADC。3. 三极管放大电路为什么它是学习路线的第一站现在嵌入式领域直接设计三极管分立放大电路的机会确实变少了但三极管放大电路依然是理解模拟电路的基础。原因有两个第一运放的内部结构本质上就是一大堆三极管和电阻第二很多功率输出级的末级仍然在用三极管或场效应管做电流放大。3.1 NPN 型三极管的放大原理NPN 三极管有三个引脚基极 B、集电极 C、发射极 E。它的基本特征是基极电流 IB 的微小变化会引起集电极电流 IC 的较大变化。两者之间的关系是IC β × IBβ 是电流放大倍数与工艺和型号有关常见小信号三极管在 100 到 300 之间。但这里有一个容易误解的点三极管本身并不“产生”能量。它通过控制集电极电流把直流电源的能量转化为输出信号的能量。本质上它是一个电流控制的“阀”不是能量制造机。3.2 共射放大电路入门标准款共射放大电路是教材里最经典的电路信号从基极输入从集电极输出发射极作为公共端。它的特点是既有电压增益又有电流增益是三种基本组态共射、共集、共基里增益能力最完整的。一个最简共射放大电路包括直流电源 Vcc。基极偏置电阻 Rb用来给三极管建立静态工作点。集电极电阻 Rc把集电极电流的变化转换成电压变化。耦合电容 C1、C2隔离直流、传递交流信号。为什么要用耦合电容因为信号源和下一级电路通常不需要直流成分。耦合电容的作用是“隔直通交”只让交流信号通过。3.3 静态工作点为什么如此关键这是初学者最容易忽略的点。三极管要正常放大必须先工作在放大区也就是发射结正偏、集电结反偏。如果静态工作点设置不对输入信号的正半周或负半周可能让三极管进入截止区或饱和区导致输出波形被“切掉”一部分这就是失真。可以把静态工作点理解成“平衡点”在没有输入信号时集电极电压 VCE 应该落在电源电压和 GND 之间的合理位置。这样当输入信号叠加上来时集电极电压才可能上下对称摆动。如果 VCE 设得太接近 0三极管容易进入饱和区输出波形下半周被削平如果 VCE 设得太接近 Vcc三极管容易进入截止区输出波形上半周被削平。这个理解非常重要后面排查失真时首先就是看静态工作点。4. 静态工作点的工程计算与实操静态工作点计算不是纯数学游戏它能直接指导你选择电阻值。下面用一个最经典的分压偏置共射电路来展示计算过程。4.1 分压偏置电路的结构相比单电阻偏置分压偏置电路在工作点稳定性上要可靠得多。它用 R1 和 R2 组成分压器固定基极电压再在发射极串入 Re形成直流负反馈抑制温度变化引起的 Q 点漂移。电路参数按教材常用值取方便验证VCC 12VR1 47kΩR2 12kΩRc 2kΩRe 1kΩβ 200VBE 0.7V硅管4.2 计算步骤第一步计算基极电位 VB。三极管基极电流 IB 一般远小于 R1、R2 的分压电流可以先近似忽略 IBVB ≈ VCC × R2 / (R1 R2) 12 × 12 / (47 12) 12 × 12 / 59 ≈ 2.44V第二步计算发射极电压 VEVE VB - VBE 2.44 - 0.7 1.74V第三步计算发射极电流 IEIE VE / Re 1.74V / 1kΩ 1.74mA在放大区IE ≈ IC因此集电极电流 IC 约为 1.74mA。第四步计算集电极电压 VCVC VCC - IC × Rc 12 - 1.74mA × 2kΩ 12 - 3.48 8.52V第五步计算集电极-发射极电压 VCEVCE VC - VE 8.52 - 1.74 6.78V这个结果说明什么VCE 大约是电源电压的一半左右说明静态工作点基本在放大区中部输入信号有一定动态范围后正负半周都有裕量不容易失真。4.3 用 Python 自动计算静态工作点手工算一次没问题但换一组电阻就要重新算很容易出错。可以用 Python 写一个小脚本批量计算。# q_point.py def calc_q_point(vcc, r1, r2, rc, re, beta, vbe0.7): # 近似忽略基极电流对分压电路的影响 vb vcc * r2 / (r1 r2) ve vb - vbe ie ve / re ic ie vc vcc - ic * rc vce vc - ve return { VB: round(vb, 2), VE: round(ve, 2), IC: round(ic, 2), VC: round(vc, 2), VCE: round(vce, 2), } params { vcc: 12e0, r1: 47e3, r2: 12e3, rc: 2e3, re: 1e3, beta: 200, } q calc_q_point(**params) print(q) # 输出示例 # {VB: 2.44, VE: 1.74, IC: 1.74, VC: 8.52, VCE: 6.78}运行方式python q_point.py再验证一下 VCE 是否在合理范围内vce q[VCE] if vce 1.0: print(警告三极管可能接近饱和区) elif vce q[VC] * 0.9: print(警告三极管可能接近截止区) else: print(静态工作点基本合理)如果计算出来的 VCE 太小说明集电极电流太大需要增大 Re、增大 R2、减小 R1 或者减小 Rc。如果 VCE 太接近 VCC说明电流太小需要反向调整。4.4 温度漂移问题教材反复强调分压偏置电路“稳定工作点”原因在于三极管的 VBE 和 β 都会随温度变化。温度升高时β 增大IC 增大如果没有 Re 的负反馈作用工作点会越偏越远最后导致波形失真。Re 的反馈逻辑是IC 增大 → IE 增大 → VE 升高 → VBE 减小 → IB 减小 → IC 回落。它是一个自动调节环路。这也是为什么实用电路中Re 基本不会被省略。5. 用 LTspice 仿真验证放大电路手工计算得到的是直流工作点但放大电路的最终性能要看交流波形。没有示波器也没关系可以用电路仿真软件验证。这里以 LTspice 为例它是软件免费、体积小、社区资料多适合做模电仿真。5.1 搭建共射放大电路你可以用 LTspice 原理图方式拖拽元件也可以使用文本网表方式。为了展示清晰我给出一个可以直接在 LTspice 中运行的网表对应 4.1 节的分压偏置共射放大电路并加入耦合电容和负载电阻* Common-Emitter Amplifier Simulation VCC VCC 0 12 VIN IN 0 SINE(0 10m 1k) C1 IN BASE 10u R1 VCC BASE 47k R2 BASE 0 12k RC VCC COLLECT 2k RE EMIT 0 1k CE EMIT 0 10u Q1 COLLECT BASE EMIT 0 Q2N2222 C2 COLLECT OUT 10u RL OUT 0 10k .model Q2N2222 NPN(IS1e-14 BF200 VAF100) .tran 0 5m .plot tran V(IN) V(OUT) .end5.2 网表里每一行的含义VCC 是 12V 直流电源。VIN 是输入信号源设置为 10mV 幅值、1kHz 的正弦波。10mV 是故意设置的小信号方便观察线性放大效果。C1 和 C2 是耦合电容隔离直流。R1/R2 是分压偏置电阻RC/RE 是集电极电阻和发射极电阻。CE 是发射极旁路电容让交流信号不经过 Re从而保证交流增益。Q1 是 NPN 三极管型号使用 2N2222。.model 行定义三极管模型BF 200 是直流电流放大倍数。.tran 指令做 5ms 瞬态仿真覆盖 5 个完整波形周期。.plot 用来输出输入和输出的电压波形。5.3 仿真结果分析从仿真波形可以看到V(OUT) 的波形幅度大约在几百毫伏级别相对于 V(IN) 的 10mV 有明显放大。如果电路工作正常输出是光滑的正弦波。如果你把输入信号幅值调大比如从 10mV 改成 100mV输出波形顶部或底部就会变平这就是削波失真。通过不断调整输入幅值你可以直观地观察到“静态工作点限制了最大不失真输出摆幅”这个结论。如果仿真时波形异常先看静态工作点是否合理。LTspice 中可以直接查看节点电压。一个有效的排查方式是把输入信号源改成 0V先看 V(BASE)、V(COLLECT)、V(EMIT) 的直流电压再与手工计算值对比。如果不一致优先检查模型参数和电阻值。6. 从三极管到运放工程中的主流选择三极管放大电路适合理解原理但实际做产品时大部分信号调理电路会用运算放大器也就是运放。运放本质上是一个高增益的差分放大器加上外围反馈网络后可以非常方便地实现精密放大、滤波、比较、缓冲等功能。6.1 运放的“虚短虚断”是怎么回事这是运放应用中最核心的概念。很多初学者第一次听到“虚短”“虚断”觉得很玄其实它是由两个事实推导出来的运放的开环增益非常大通常有几万到上百万倍。运放工作在线性区时输出电压必然是有限值。那么输入端的差分电压必须非常小。小到什么程度小到可以忽略不计于是 V 和 V- 电位几乎相等这就是“虚短”。“虚断”则是因为运放的输入阻抗非常高输入端几乎没有电流流入因此可以认为输入引脚是断开的。但这里的“断开”是因为电流小到可忽略不是真正的断路。6.2 反相放大器设计反相放大器的输出与输入反相增益由两个电阻决定Vout -Vin × Rf / Rin这是一个非常可靠的电路设计方式增益只取决于电阻比值而不是三极管的 β。实际工程中电阻精度可以做到 1% 甚至 0.1%所以增益精度很高。例如传感器输出 0V 到 0.5V想放大到 0V 到 3.3V 给单片机 ADC可以设计增益为 6.6 倍。取 R1 1kΩRf 6.6kΩ用 6.8kΩ 标准电阻近似再通过软件校准微调。Rin 1kΩ Rf 6.8kΩ 增益 -6.8注意反相放大器的输入阻抗约等于 Rin所以如果信号源内阻很大要先做缓冲再接反相放大否则信号会被分压。6.3 同相放大电路设计同相放大器的输出与输入同相增益公式为Vout Vin × (1 Rf / R1)它的优点是输入阻抗非常高非常适合直接接高阻抗传感器。缺点是没有“虚地”概念输入端存在共模电压对运放的共模抑制比有要求。6.4 运放与 ADC 的接口在实际的嵌入式信号链中运放最常见的任务就是把传感器信号调整到 ADC 的量程范围内同时起到阻抗变换和滤波作用。一个典型结构是传感器 → 差分放大/仪表放大 → 低通滤波 → 运放缓冲 → 单片机 ADC如果 ADC 是 12 位、参考电压 3.3V那么 1 个 LSB 对应约 0.8mV。这意味着前级运放的输出噪声、电源纹波、接地噪声都必须控制在这个水平以下否则采样的低位就会一直抖动。这也能解释为什么很多人发现“ADC 读到的值跳动大”不一定是代码问题更可能是模拟前级噪声过大。这里补充一段嵌入式代码示例把 ADC 采样值反算为真实物理电压。假设运放增益是 10 倍ADC 是 12 位// adc_signal_chain.c #include stdio.h #include stdint.h #define ADC_REF_VOLTAGE 3.3f #define ADC_RESOLUTION 4096.0f #define AMP_GAIN 10.0f float adc_to_sensor_voltage(uint16_t adc_value) { float voltage_at_adc (float)adc_value * ADC_REF_VOLTAGE / ADC_RESOLUTION; float sensor_voltage voltage_at_adc / AMP_GAIN; return sensor_voltage; } int main(void) { uint16_t sample 2048; float result adc_to_sensor_voltage(sample); printf(ADC sample: %d\n, sample); printf(voltage at ADC: %.3f V\n, sample * ADC_REF_VOLTAGE / ADC_RESOLUTION); printf(sensor voltage: %.3f V\n, result); return 0; }编译运行后可以看到 ADC 采样值 2048 对应 ADC 引脚电压约 1.65V反算到传感器端为 0.165V。这个例子把运放增益、ADC 参考电压和实际物理量串联了起来本质上就是“模拟前端 数字后端”的信号链思维。7. 常见问题与排查思路模拟电路的问题有时候比较隐蔽但也遵循“先直流、后交流、再功率”的排查顺序。下面整理几个最常见的问题。问题现象可能原因排查方式解决方案输出波形削底静态工作点偏低信号负半周进入截止区用万用表测 VCE和理论值对比增大 IB增大 R2 或减小 R1让 VCE 落到中间区域输出波形削顶静态工作点偏高信号正半周进入饱和区测 VCE看是否接近 0.3V 以下减小 IB减小 R2 或增大 R1或增大 Rc/Re放大倍数远低于理论值发射极旁路电容 CE 失效或未接检查电容焊接测量 CE 两端交流电压补焊或更换电容确认极性正确输出叠加明显 50Hz/100Hz 纹波电源滤波不足或接地不合理用示波器探头夹子靠近测试点观察噪声加强电源去耦增加 100nF 陶瓷电容检查单点接地运放输出自激振荡电源去耦不足负反馈相位裕度不够观察输出波形是否高频振荡在电源引脚加 100nF 10uF 去耦电容必要时减小反馈电阻ADC 读数随温度漂移模拟前端受温度影响或基准源温漂测基准电压和零点电压随温度变化更换低漂移基准源检查运放失调电压指标信号源一接上电压就下降后级输入阻抗太低信号被分压计算前端输出阻抗与后端输入阻抗增加高输入阻抗缓冲级或增大后端输入阻抗7.1 第一个排查动作测静态工作点当你的放大电路出现失真或波形异常时不要急着改电阻先用万用表测三个直流电压VB、VE、VC。这三个数据能告诉你三极管处在什么状态VC 在 VCC 和 GND 之间说明三极管在放大区的可能性很大。VC 接近 VCC说明集电极电流太小可能截止。VC 低于 1V说明三极管深度饱和。VE 和 VB 相差超过 0.7V 很多说明基极和发射极之间可能有问题。记住一个原则直流工作点不对交流行为一定不对。7.2 第二个排查动作看波形形状用示波器观察输出波形重点关注“对称性”。如果上半周和下半周明显不对称优先考虑工作点位置问题。如果是叠加了高频振荡优先考虑电源去耦和接地。示波器还有一个常见误操作地线夹子过长。长地线会引入耦合噪声导致你看到的“噪声”其实是测量方式造成的。排查时尽量用地弹簧或最短接地路径。8. 学习与工程实践建议模拟电子技术基础这门课很多人觉得难是因为它不追求一个“绝对正确”的答案而是充满了工程折中。同一个电路电阻取值不同可能都“能用”但稳定性、失真、温漂差异很大。以下是几条比较实用的实践方法。8.1 先算后仿先仿后焊现在做模拟电路实验成本很低。设计一个放大电路先用公式估算静态工作点和增益再用 LTspice 或 Multisim 做仿真验证最后才焊板实测。三步都走过一遍你会对“理论值和实际值之间的差距”有非常直观的感受。之所以强调“先算”是因为仿真软件能告诉你结果但不能告诉你为什么。如果你不会手算看到仿真结果异常时也没有办法判断是模型问题、参数问题还是电路结构问题。8.2 保留测试点做 PCB 时在关键节点预留测试点比如运放输出、基准电压、ADC 输入引脚。模拟电路调试离不开示波器和万用表如果每个关键信号都要靠刮开铜箔去测效率非常低。印制板上建议把测试点做成标准的排针或焊盘直径 1.0mm 以上方便夹探头。8.3 电源去耦不是可选项很多初学者把去耦电容当成“玄学”但实际上它非常重要。每个运放的电源引脚附近都应该放置一个 100nF 陶瓷电容并尽可能靠近引脚大电流或有噪声的模块附近再放置一个 10uF 到 100uF 的电容。去耦电容的目的是给高频开关电流提供就近的低阻抗回路避免它在电源走线上产生压降噪声。做 ADC 采样电路时模拟电源和数字电源要分开最后用磁珠或 0Ω 电阻单点连接。8.4 增益不要一次加满如果一个传感器信号只有 10mV需要放大到 3.3V也就是约 330 倍不要把这一级放大都压在一个运放上。增益太高带宽会被严重压缩噪声也会被同比例放大。更好的做法是分两级第一级放大 20 倍第二级放大 16.5 倍中间插入一阶低通滤波。这样可以在保证总增益的同时改善信噪比和稳定性。8.5 关注数据手册里的“非理想参数”实际运放和理想运放有差距。做高精度采集时重点关注四个参数输入失调电压输出会出现一个固定误差。输入偏置电流高阻抗信号源对它非常敏感。增益带宽积决定不同增益下的可用带宽。压摆率决定大信号快速变化时是否失真。如果只是做 LED 控制这类对精度要求不高的电路这些参数可以忽略但如果做传感器采集、称重、电流检测就必须逐项核对。9. 总结与后续学习方向这篇文章用一条“传感器信号 → 三极管放大 → 静态工作点 → 仿真验证 → 运放调理 → ADC 采样”的线索梳理了模拟电子技术基础中最核心的知识点。重点不是背公式而是建立排查问题的思路直流工作点决定放大器的状态交流参数决定信号质量电源和接地决定整体噪声水平。如果接下来的学习方向是嵌入式硬件设计建议顺序是先仔细学运算放大器的典型应用电路然后是 RC 滤波和有源滤波接着是 ADC 前级设计最后再回到三极管和场效应管的开关应用。学完这部分内容你再看传感器模块的数据手册读到“rail-to-rail”“输入失调电压”“增益带宽积”这些词时就不会觉得只是营销参数而是能真正理解它对应到电路上的实际影响。遇到波形失真或者 ADC 采样跳动时也可以回到这篇文章的排查表先测直流工作点再看交流波形再查电源去耦。记住模拟电路里大部分“奇怪问题”最后都能落到工作点、阻抗匹配、电源噪声和接地这四个方向上。先把这篇收藏起来下次调电路的时候就能少走很多弯路。