Appearance
模拟电子基础:BJT、MOS 放大区、运放
概念
数字电路里只有两个电平,看着很干净。但真实世界不是:
- 传感器输出是 μV 级的小信号,得先放大才能被比较器认出
- 时钟要摆到满幅,得靠驱动能力强的缓冲器
- 电源上有纹波和噪声,得滤波
- ADC 前面的信号调理(放大、滤波、限幅)全是模拟活
模拟电子要解决的问题是:怎么让一个器件把微弱信号"放大"出干净的、能当数字电平用的输出。
一句话:数字是模拟的极限情形——当增益足够大、非线性和噪声足够小,放大器就变成了"比较器",模拟就变成了数字。
原理
一、放大器到底是什么
放大器是把"小变化"变成"大变化"的电路。它的核心指标有四个:
| 指标 | 符号 | 含义 |
|---|---|---|
| 增益 | 输出/输入(电压、电流、功率) | |
| 输入电阻 | 对信号源来说"吃"多少电流(越大越好,别拖垮源) | |
| 输出电阻 | 带负载能力(越小越好,别被负载拉低) | |
| 带宽 | 增益保持在 3 dB 以内的频率范围 |
理想放大器:
现实:四个指标互相打架——增益大则带宽小,输入阻抗高则噪声大。工程就是取舍。
二、非线性 → 线性:为什么必须"先偏置,再小信号"
晶体管本身是强非线性器件。但把它偏置在一个固定的工作点
在
这个
关键理解:放大器不是"把信号变大",而是"用大电源去复制一个小信号"。管子只是个阀门,能量来自电源。
三、BJT:电流控制,三个组态
结构与电流关系
NPN 三极管有两结:发射结(B-E) 和 集电结(B-C)。按两结的偏置组合分三个区:
| 区 | 发射结 | 集电结 | 用途 |
|---|---|---|---|
| 截止 | 反偏 | 反偏 | 电子开关:断开 |
| 放大 | 正偏 | 反偏 | 放大器 |
| 饱和 | 正偏 | 正偏 | 电子开关:闭合 |
放大区的基本关系(
小信号参数:
三个组态
| 组态 | 输入 | 输出 | 增益 | 特点 | ||
|---|---|---|---|---|---|---|
| 共射 CE | B | C | 大、反相 | 中( | 高( | 电压增益主力 |
| 共集 CC(射随) | B | E | 很高 | 很低 | 缓冲/阻抗变换 | |
| 共基 CB | E | C | 大、同相 | 很低 | 高 | 高频/宽带 |
共射的电压增益(考虑信号源内阻
理想电压源驱动(
为什么是负号:
上升 → 上升 → 上的压降增大 → 输出电压( )下降。这就是"反相"的物理来源。
四、MOS:电压控制,三个区
三个工作区
| 区 | 条件 | |
|---|---|---|
| 截止 | ||
| 线性/三极管区 | ||
| 饱和区 |
其中过驱动电压
概念撞车警告:MOS 的"饱和区"和 BJT 的"饱和区"含义完全不同。BJT 的饱和是"开关导通"(两结都正偏),MOS 的饱和是"恒流"(能当放大器用)。这是模拟电子最经典的混淆点。
MOS 的小信号跨导:
三个表达式的用途:知道
与 BJT 的对比:
| BJT | MOS | |
|---|---|---|
| 控制量 | 电流( | 电压( |
| 输入电阻 | 有限( | 理论上无穷大(栅是绝缘的) |
| 1 mA 时的 | 约 38.7 mS | 取决于 |
| 匹配性 | 差( | 好(差分对靠它) |
关键结论:BJT 在同样电流下
共源放大器的增益:
五、运放:一个"增益无穷大"的受控源
理想运放的三个假设:
负反馈接法下,这三条推出两大"定理":
虚短(virtual short)
注意:是近似相等,不是真的短接。实际差值在 μV 量级。
虚断(virtual open)
虚短的前提是"有负反馈"。开环或正反馈(比较器)时没有虚短,这是最常见的致命错误。
两个基本电路
反相放大器:
推导:
同相放大器:
推导:分压点虚短,
增益带宽积(GBW)
运放的开环增益随频率下降,GBW 是常数:
工程含义:增益和带宽是同一个"预算"。要高增益就没带宽,要带宽就得降增益。这是"为什么运放都工作在高频窄带或低频宽带"的原因。
再谈转换速率与摆率
运放还有一个大信号限制:压摆率(slew rate, SR)。
区分两件事:
- 小信号带宽(GBW 决定):小幅度信号的正弦响应
- 大信号压摆率(SR 决定):大幅度方波的边沿速度
一个运放可能"带宽 10 MHz",但方波边沿还是慢——因为压摆率不够。这在驱动时钟和 ADC 采样保持时必须分开检查。
六、比较器:把模拟变成数字的那一步
比较器 = 没有负反馈的运放(开环,或加正反馈做迟滞)。
关键区别:
| 运放(负反馈) | 比较器(开环/正反馈) | |
|---|---|---|
| 虚短 | ✅ 成立 | ❌ 不成立 |
| 用途 | 放大、滤波、积分 | 判决、整形、阈值检测 |
| 输出 | 干净放大波形 | 迅速饱和到电源轨 |
| 常见器件 | LM358、OPA333 | LM393、TLV3501 |
迟滞(施密特触发器):加正反馈制造两个不同的阈值,防止噪声在阈值附近造成输出抖动。
这是"模拟如何变成数字"的那道门。ADC 前端、按键去抖、方波整形,全靠它。
七、数字电路里到处是模拟问题
别以为学完数字就把模拟丢了:
| 问题 | 本质 |
|---|---|
| 上升/下降时间 | RC(上一篇) |
| 传输线反射、振铃 | 模拟波动 |
| 电源纹波、去耦电容 | 模拟滤波 |
| 亚稳态 | 模拟的"阈值附近不确定" |
| 时钟抖动 | 模拟噪声 → 相位误差 |
| DDR 眼图 | 模拟信号完整性 |
| 电平匹配、扇出 | DC 模拟(L0 数据手册那篇) |
PLL(锁相环,做倍频和时钟恢复)更是纯模拟模块:鉴相器 + 环路滤波器 + 压控振荡器。
示例
例 1:共射放大器完整分析(完整计算)
电路:
, ,基极偏置电阻 接 , , , 。求静态工作点、 、 ,以及不同信号源内阻下的电压增益。
VCC = 12V
│
┌────┴────┐
│ │
┌┴┐ RB │ R_C = 2.2kΩ
└┬┘ 470kΩ │
│ ├─────● v_out
┌─┴─┐ │
│ B ●───────┤
└─┬─┘ ┌─┴─┐ C
│ │ ▶ │
v_in └─┬─┘
──┴── GND (发射极接地)第一步:求
第二步:求
第三步:求
第四步:小信号参数。
第五步:电压增益(理想驱动,
第六步:考虑信号源内阻。
| 说明 | ||
|---|---|---|
| 0 Ω | −204.6 | 理想电压源驱动 |
| 600 Ω | −131.33 | 常见信号源 |
| 1 kΩ | −106.02 | 与 |
| 2.2 kΩ | −67.17 | 信号源已严重"拖累"输入 |
第七步:输入输出电阻。
结论:
- 静态工作点:
, , ,- 理想增益 −204.6;
时降到 −106(掉了近一半)
这张表是共射的最大教训:
太小,信号源内阻会分掉一半信号。工程解是:前面加共集(射随)做缓冲,或者用 MOS 输入。 另一个观察:
看起来很猛,但代价是 上要一直流过 2.4 mA,静态功耗 ——增益是拿电流换的。
例 2:共源放大器(完整计算,含 )
MOS 共源:
, , ,输出电阻 。求 与增益。
第一步:跨导。
第二步:忽略
第三步:计入
第四步:对比几组参数。
| 1.0 mA | 0.20 V | 4.7 kΩ | 50 kΩ | 10.0 mS | −47.0 | −43.0 |
| 0.5 mA | 0.25 V | 10 kΩ | 100 kΩ | 4.0 mS | −40.0 | −36.4 |
| 2.0 mA | 0.40 V | 2.2 kΩ | 30 kΩ | 10.0 mS | −22.0 | −20.5 |
结论:要增益就压
注意
的影响:第三组的 相对 小,增益从 −22.0 掉到 −20.5(−7%);第一组 相对 大得多,影响较小。判据: 时可忽略。
例 3:运放电路与带宽(完整计算)
用
的运放, 、 。分别做反相和同相放大,求增益与闭环带宽。
反相:
同相:
对比几组取值:
| 反相 | 同相 | 同相带宽 | ||
|---|---|---|---|---|
| 100 kΩ | 10 kΩ | −10.00 | 11.00 | 90.91 kHz |
| 47 kΩ | 4.7 kΩ | −10.00 | 11.00 | 90.91 kHz |
| 10 kΩ | 10 kΩ | −1.00 | 2.00 | 500.00 kHz |
结论:比值决定增益,绝对值不影响(前两行增益完全相同)。增益降 11 倍,带宽升 11 倍——GBW 守恒。
实战选择:同相 11 倍带宽只有 90.91 kHz,反相 10 倍有 100 kHz。同相多出的"1"是白白损耗的带宽(因为它不能低于 1)。要增益恰好为
时,反相更"带宽经济";但要高输入阻抗时,同相不可替代。
用程序复算
#include <stdio.h>
int main(void) {
/* --- 例1 共射 --- */
printf("--- 例1 共射放大器 ---\n");
double VCC = 12.0, RC = 2.2e3, RB = 470e3, beta = 100.0, VBE = 0.7;
double VT = 25.85e-3;
double IB = (VCC - VBE) / RB;
double IC = beta * IB;
double VCE = VCC - IC * RC;
double gm = IC / VT;
double rpi = beta / gm;
printf(" IB = %.3f uA\n", IB * 1e6);
printf(" IC = %.4f mA\n", IC * 1e3);
printf(" VCE = %.4f V (放大区: %s)\n", VCE, VCE > 0.3 ? "是" : "否");
printf(" gm = %.4f mS, rpi = %.1f ohm\n", gm * 1e3, rpi);
printf(" Av(理想) = %.1f\n", -gm * RC);
double Rs[3] = {600.0, 1000.0, 2200.0};
for (int i = 0; i < 3; i++)
printf(" Av(Rs=%.0f ohm) = %.2f\n", Rs[i], -beta * RC / (rpi + Rs[i]));
printf(" Rin = %.1f ohm, Rout ~ %.1f kohm\n", rpi, RC / 1e3);
/* --- 例2 共源 --- */
printf("--- 例2 共源放大器 ---\n");
double ID[3] = {1e-3, 0.5e-3, 2e-3};
double Vov[3] = {0.2, 0.25, 0.4};
double RD[3] = {4.7e3, 10e3, 2.2e3};
double ro[3] = {50e3, 100e3, 30e3};
for (int i = 0; i < 3; i++) {
double g = 2 * ID[i] / Vov[i];
double rp = RD[i] * ro[i] / (RD[i] + ro[i]);
printf(" ID=%.1fmA Vov=%.2fV RD=%.1fk ro=%.0fk -> gm=%.2fmS"
" Av=-%.1f (含ro=-%.1f)\n",
ID[i]*1e3, Vov[i], RD[i]/1e3, ro[i]/1e3,
g*1e3, g*RD[i], g*rp);
}
/* --- 例3 运放 --- */
printf("--- 例3 运放 ---\n");
double Rf[3] = {100e3, 47e3, 10e3}, Ri[3] = {10e3, 4.7e3, 10e3};
double GBW = 1e6;
for (int i = 0; i < 3; i++) {
double inv = -Rf[i] / Ri[i];
double non = 1 + Rf[i] / Ri[i];
printf(" Rf=%.0fk Rin=%.1fk -> 反相 %.2f, 同相 %.2f, 同相带宽 %.2f kHz\n",
Rf[i]/1e3, Ri[i]/1e3, inv, non, GBW/non/1e3);
}
return 0;
}
c 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
print("--- 例1 共射放大器 ---")
VCC, RC, RB, beta, VBE, VT = 12.0, 2.2e3, 470e3, 100.0, 0.7, 25.85e-3
IB = (VCC - VBE) / RB
IC = beta * IB
VCE = VCC - IC * RC
gm, rpi = IC / VT, beta / (IC / VT)
print(f" IB = {IB*1e6:.3f} uA")
print(f" IC = {IC*1e3:.4f} mA")
print(f" VCE = {VCE:.4f} V (放大区: {'是' if VCE > 0.3 else '否'})")
print(f" gm = {gm*1e3:.4f} mS, rpi = {rpi:.1f} ohm")
print(f" Av(理想) = {-gm*RC:.1f}")
for Rs in (600.0, 1000.0, 2200.0):
print(f" Av(Rs={Rs:.0f} ohm) = {-beta*RC/(rpi+Rs):.2f}")
print(f" Rin = {rpi:.1f} ohm, Rout ~ {RC/1e3:.1f} kohm")
print("--- 例2 共源放大器 ---")
for ID, Vov, RD, ro in [(1e-3, 0.2, 4.7e3, 50e3),
(0.5e-3, 0.25, 10e3, 100e3),
(2e-3, 0.4, 2.2e3, 30e3)]:
g = 2 * ID / Vov
rp = RD * ro / (RD + ro)
print(f" ID={ID*1e3:.1f}mA Vov={Vov}V RD={RD/1e3:.1f}k ro={ro/1e3:.0f}k -> "
f"gm={g*1e3:.2f}mS Av=-{g*RD:.1f} (含ro=-{g*rp:.1f})")
print("--- 例3 运放 ---")
GBW = 1e6
for Rf, Ri in [(100e3, 10e3), (47e3, 4.7e3), (10e3, 10e3)]:
inv, non = -Rf/Ri, 1 + Rf/Ri
print(f" Rf={Rf/1e3:.0f}k Rin={Ri/1e3:.1f}k -> 反相 {inv:.2f}, "
f"同相 {non:.2f}, 同相带宽 {GBW/non/1e3:.2f} kHz")
python 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
输出(节选):
IB = 24.043 uA
IC = 2.4043 mA
VCE = 6.7106 V (放大区: 是)
gm = 93.0079 mS, rpi = 1075.2 ohm
Av(理想) = -204.6
Av(Rs=1000 ohm) = -106.02
ID=1.0mA Vov=0.2V RD=4.7k ro=50k -> gm=10.00mS Av=-47.0 (含ro=-43.0)
Rf=100k Rin=10.0k -> 反相 -10.00, 同相 11.00, 同相带宽 90.91 kHz考点
考点
1. 三个工作区(BJT 与 MOS 的"饱和"不是一回事)
| BJT | MOS | |
|---|---|---|
| 截止 | 两结反偏, | |
| 放大 | 发射结正偏、集电结反偏 | 饱和区: |
| 饱和 | 两结都正偏(当开关用) | 线性区: |
这是最高频的概念陷阱。记忆口诀:BJT 的"饱和"是导通到底;MOS 的"饱和"是能放大。名字撞了,含义相反。
2. 必背小信号公式
锚点:
3. 三种组态(BJT)/ 三种接法(MOS)对比
| 组态 | 增益 | 用途 | ||
|---|---|---|---|---|
| 共射 CE | 大、反相 | 中( | 高 | 电压增益 |
| 共集 CC(射随) | 高 | 低 | 缓冲 | |
| 共基 CB | 大、同相 | 低 | 高 | 高频 |
MOS 对应:共源 CS(增益)、共漏 CD(源随,缓冲)、共栅 CG(高频)。
核心用途要背:射随/源随的唯一使命是阻抗变换——
4. 运放两大定理及其前提(★ 高频)
- 虚短必须有负反馈。比较器(开环/正反馈)没有虚短,这是最容易丢分的点。
- 反相放大器:
,输入端是虚地( ) - 同相放大器:
,增益不可能小于 1 - 电压跟随器:
, 极高,最常用的缓冲器
5. 增益带宽积(★ 常考)
含义:增益与带宽共用同一个预算。增益 10 → 带宽
易错:反相放大器用
6. 大信号 vs 小信号:两个独立限制
| 限制 | 参数 | 影响 |
|---|---|---|
| 小信号 | GBW | 小幅正弦的带宽 |
| 大信号 | 压摆率 SR(V/μs) | 大幅方波的边沿斜率 |
判据:方波/阶跃信号的边沿由 SR 决定,不是 GBW。两者要分别校核。
7. 易错点清单
- 把 BJT 的饱和区当放大区(或反过来)。BJT 饱和 =
,不能放大。 - MOS 的"饱和"当成"开关导通"。MOS 饱和区恰恰是放大区。
- 忘了
与电流的关系:BJT 是 ;MOS 是 (固定 时)。BJT 的 与 无关——常有人以为 大就 大。 - 在比较器上用虚短。开环没有虚短,输出只有两种状态。
- 忽略信号源内阻对 CE 的影响。
只有 kΩ 级,源内阻一大增益就腰斩(例 1:−204.6 → −106.0)。 - 把
上的直流压降当成"增益"。增益是交流小信号比,不是直流。 - 忽略
。当 与 同量级时误差可达 10% 以上。 - 混淆"虚地"和"真的接地"。虚地是运放强制的结果,电位≈0 但没有实际接地通路。
- 同相放大器指望增益 < 1。做不到——最小就是 1(跟随器)。
小结
- 放大器 = 偏置 + 小信号线性化;
是全部数学内容,能量来自电源。 - BJT:
(只跟电流有关), ;共射增益 ,但 只有 kΩ 级,源内阻一大增益腰斩。 - MOS:
;共源增益 ; 无穷大,但同电流下 低于 BJT。 - 三组态的分工:共射/共源管增益,共集/共漏(射随/源随)管缓冲,共基/共栅管高频。
- 运放:虚短 + 虚断(前提是负反馈);反相
、同相 ;增益带宽积恒定;方波边沿看压摆率而不是 GBW。 - 比较器是无负反馈的运放——它是"模拟变数字"的那道门。
回到主线:L1 的电路基础三篇到这里结束。软前置讲完了,接下来进入硬前置——离散数学(布尔代数)与数字逻辑。
前两篇给了"电平"和"延迟",这一篇给了"信号怎么被放大到能被认出来"。但数字电路真正需要的不是"放大信号",而是**"用逻辑算东西"**。那么问题来了:既然 MOS 只能导通/截止,怎么让一堆开关去"算"布尔函数? 这就是下一篇的主题。
下一篇:布尔代数与卡诺图化简
评论(0)
当前浏览器不允许本地存储,评论无法保存。
还没有评论,来说两句。