全国大学生电子设计竞赛
  • 首页
  • 历届试题
  • 器件手册
  • 资料笔记
    • 资料
    • 稳压与基准
    • 741 运放
    • RC4558 运放
    • 定性使用 BJT 三极管
    • 二极管基础知识复习
    • BJT 三极管基础知识复习
  • 关于
  • Previous
  • Next
  • GitHub
  • 二极管基础知识复习
    • Shockley 公式
    • 小信号模型
    • 温度特性
    • Schottky 二极管
    • 发光二极管 LED
    • 整流滤波电路
    • 稳压二极管

二极管基础知识复习¶

Shockley 公式¶

William Shockley 于 1949/07 在 BSTJ 发表了 "The theory of p-n junctions in semiconductors and p-n junction transistors" https://ieeexplore.ieee.org/document/6773080 $\newcommand{\li}[1]{{i_\mathrm{#1}}}$ $\newcommand{\ui}[1]{{I_\mathrm{#1}}}$ $\newcommand{\lv}[1]{{v_\mathrm{#1}}}$ $\newcommand{\uv}[1]{{V_\mathrm{#1}}}$ $\newcommand{\sm}[2]{{{#1}_\mathrm{#2}}}$

$\li{D}=\ui{S}\Big(\exp\dfrac{\lv{D}}{n \uv{T}}-1\Big)\approx\ui{S}\exp\dfrac{\lv{D}}{n \uv{T}}$

$\uv{D} - \ui{D}$ 呈指数关系,如果 $n=1$,那 $\uv{D}$ 每增加 60mV,$\ui{D}$ 增大 10 倍,因为 $60 / 26\approx 2.3$, $e^{2.3}\approx 10$.

$\ui{D}\propto \exp \uv{D}$ $\ui{S}=0.1\mathrm{fA}$ $\ui{S}=1\mathrm{fA}$ $\ui{S}=10\mathrm{fA}$
$\uv{D}=0.64$V 0.00576 mA 0.0576 mA 0.576 mA
$\uv{D}=0.70$V 0.0576 mA 0.576 mA 5.76 mA
$\uv{D}=0.76$V 0.576 mA 5.76 mA 57.6mA
Copied!
Vt = 25.865

# import tabulate ?
print('           Id =', end='')
for I in [0.001, 0.01, 0.1, 1]:
    print('%4.0f mA  ' % (I * 1000), end='')
print()

#for Is in [1e-11, 1e-12, 1e-13, 1e-14, 1e-15]:
for Is in [1e-15, 1e-14, 1e-13, 1e-12, 1e-11]:
    print('Is = %g A ' % Is, end='')
    for I in [0.001, 0.01, 0.1, 1]:
        print("  %4.0f mV" % (Vt * log(I / Is)), end='')
    print()
Vt = 25.865 # import tabulate ? print(' Id =', end='') for I in [0.001, 0.01, 0.1, 1]: print('%4.0f mA ' % (I * 1000), end='') print() #for Is in [1e-11, 1e-12, 1e-13, 1e-14, 1e-15]: for Is in [1e-15, 1e-14, 1e-13, 1e-12, 1e-11]: print('Is = %g A ' % Is, end='') for I in [0.001, 0.01, 0.1, 1]: print(" %4.0f mV" % (Vt * log(I / Is)), end='') print()
           Id =   1 mA    10 mA   100 mA  1000 mA  
Is = 1e-15 A    715 mV   774 mV   834 mV   893 mV
Is = 1e-14 A    655 mV   715 mV   774 mV   834 mV
Is = 1e-13 A    596 mV   655 mV   715 mV   774 mV
Is = 1e-12 A    536 mV   596 mV   655 mV   715 mV
Is = 1e-11 A    476 mV   536 mV   596 mV   655 mV

这个指数关系高度非线性,简单的工作点就不好算。解析解要用 Lambert W 函数,一般模拟电路书上不会讲。

No description has been provided for this image
Copied!
ng.circ('''
  V  vcc  0  1V
  R  vcc  d  1k
  D  d    0  D
  .model D D(IS=1fA)
''')
ng.operating_point()
ng.circ(''' V vcc 0 1V R vcc d 1k D d 0 D .model D D(IS=1fA) ''') ng.operating_point()
{'v#branch': array([-0.00031519]),
 'd': array([0.68481116]),
 'vcc': array([1.])}

近似估算 $\uv{D}\approx 0.7\,$V,$\ui{D}=\dfrac{1-0.7}{1\,\mathrm{k}\Omega}=0.3$mA,与仿真结果相去不远。

小信号模型¶

$\sm{r}{d}=\dfrac{\lv{d}}{\li{d}}$

小信号计算 $\Delta \lv{D}=5.2$mV @ $\ui{D}=1$mA, $\Delta \li{D}=\dfrac{5.2}{26}=0.2$mA.

大信号计算 $\Delta \li{D}= \ui{S}\Big(\exp\dfrac{\uv{D}+\Delta\lv{D}}{\uv{T}}-\exp\dfrac{\uv{D}}{\uv{T}}\Big)=\ui{D}\Big(\exp\dfrac{\Delta\lv{D}}{\uv{T}}-1\Big) = 0.2214$mA

利用 Taylor 展开,对于 PN 节的指数特性,一般教材认为 $\lv{i}\le 5$mV 算小信号。

$\sm{r}{d}=\dfrac{\Delta \lv{D}}{\Delta \li{D}}=\dfrac{\uv{T}}{\ui{D}}$,即 $\sm{r}{d}\propto \dfrac{1}{\ui{D}}$,换言之电流越大,$\sm{r}{d}$ 越小。

$\uv{T}=26\mathrm{mV}$ $\sm{r}{d}$
$\ui{D}=0.1$mA $\sm{r}{d}=260\,\Omega$
$\ui{D}=1$mA $\sm{r}{d}=26\,\Omega$
$\ui{D}=10$mA $\sm{r}{d}=2.6\,\Omega$
$\ui{D}=100$mA $\sm{r}{d}=0.26\,\Omega$
Copied!
exp(5.2/26)-1
exp(5.2/26)-1
0.22140275816016985
Copied!
print('Error %.2f %%' % (100 * (0.2/0.2214-1)))
print('Error %.2f %%' % (100 * (0.2/0.2214-1)))
Error -9.67 %
Copied!
for vd in [0.1, 0.2, 0.5, 1, 2, 5, 10]:
    Vt = 26
    actual = exp(vd / Vt) - 1
    estimate = vd / Vt
    print('vd = %4.1f mV, error = %5.2f %%' % (vd, 100 * abs(estimate / actual-1)))
for vd in [0.1, 0.2, 0.5, 1, 2, 5, 10]: Vt = 26 actual = exp(vd / Vt) - 1 estimate = vd / Vt print('vd = %4.1f mV, error = %5.2f %%' % (vd, 100 * abs(estimate / actual-1)))
vd =  0.1 mV, error =  0.19 %
vd =  0.2 mV, error =  0.38 %
vd =  0.5 mV, error =  0.96 %
vd =  1.0 mV, error =  1.91 %
vd =  2.0 mV, error =  3.80 %
vd =  5.0 mV, error =  9.31 %
vd = 10.0 mV, error = 18.00 %

SPICE

Copied!
ng.circ('''
  D anode 0 D
  V anode 0 DC 0.7V AC SINE(0.7 10m 1k)
  .model D D(IS=10fA)
''')
ng.operating_point()
ng.circ(''' D anode 0 D V anode 0 DC 0.7V AC SINE(0.7 10m 1k) .model D D(IS=10fA) ''') ng.operating_point()
{'v#branch': array([-0.00567035]), 'anode': array([0.7])}

这里为了展示失真,特意取 $\lv{i}=10$mV.

Copied!
ng.cmd('dc v 0.69 0.71 10u')
Vd = 1e3*ng.vector('anode')
Id = -1e3 * ng.vector('v#branch')
plt.plot(Vd, Id)
ng.cmd('dc v 0.69 0.71 10u') Vd = 1e3*ng.vector('anode') Id = -1e3 * ng.vector('v#branch') plt.plot(Vd, Id)
[<matplotlib.lines.Line2D at 0x7fe979511510>]
No description has been provided for this image
Copied!
ng.cmd('tran 1u 3m')
t = ng.vector('time')
Vd = ng.vector('anode')
Id = -1e3 * ng.vector('v#branch')
fig, ax = plt.subplots()
plt.plot(t, Vd)
ax2 = ax.twinx()
plt.plot(t, Id, 'orange')
ng.cmd('tran 1u 3m') t = ng.vector('time') Vd = ng.vector('anode') Id = -1e3 * ng.vector('v#branch') fig, ax = plt.subplots() plt.plot(t, Vd) ax2 = ax.twinx() plt.plot(t, Id, 'orange')
[<matplotlib.lines.Line2D at 0x7f7e8e154ed0>]
No description has been provided for this image

为了更明显看到非线性失真,用三角波做输入信号。

Copied!
ng.circ('''
  V anode 0 PULSE(0.69V 0.71V 0 1m 1m 1u 2m)
  D anode 0 D
  .model D D(IS=10fA)
''')
ng.cmd('tran 1u 6m')
plt.plot(ng.vector('time'), -1e3*ng.vector('v#branch'))
ng.circ(''' V anode 0 PULSE(0.69V 0.71V 0 1m 1m 1u 2m) D anode 0 D .model D D(IS=10fA) ''') ng.cmd('tran 1u 6m') plt.plot(ng.vector('time'), -1e3*ng.vector('v#branch'))
[<matplotlib.lines.Line2D at 0x7f1a55e0e890>]
No description has been provided for this image

小信号例子

No description has been provided for this image

$R=1\,$kΩ,$\uv{D}\approx 0.7\,$V,$\ui{D}\approx 0.3\,$mA, $\sm{r}{d}=\dfrac{\uv{T}}{\ui{D}}=86.7\,\Omega$

$\lv{i}=10\,$mV,$\lv{d}=\dfrac{\sm{r}{d}}{R+\sm{r}{d}} \lv{i}=\dfrac{86.7}{1000 + 86.7}\lv{i}=0.798\,$mV

Copied!
ng.circ('''
  V  vcc  0  DC 1V SINE(1V 10mV 1k)
  R  vcc  d  1k
  D  d    0  D
  .model D D(IS=1fA)
''')
ng.operating_point()
ng.circ(''' V vcc 0 DC 1V SINE(1V 10mV 1k) R vcc d 1k D d 0 D .model D D(IS=1fA) ''') ng.operating_point()
{'v#branch': array([-0.00031519]),
 'd': array([0.68481116]),
 'vcc': array([1.])}
Copied!
ng.cmd('tran 1u 3m')
t = ng.vector('time')
Vin = ng.vector('vcc')
Vd = ng.vector('d')
Id = -1e3 * ng.vector('v#branch')
fig, ax = plt.subplots()
# plt.plot(t, Vin)
plt.plot(t, 1e3*(Vd - 0.6848112))
#ax2 = ax.twinx()
#plt.plot(t, Vd, 'orange')
ng.cmd('tran 1u 3m') t = ng.vector('time') Vin = ng.vector('vcc') Vd = ng.vector('d') Id = -1e3 * ng.vector('v#branch') fig, ax = plt.subplots() # plt.plot(t, Vin) plt.plot(t, 1e3*(Vd - 0.6848112)) #ax2 = ax.twinx() #plt.plot(t, Vd, 'orange')
[<matplotlib.lines.Line2D at 0x7fedb3fbc810>]
No description has been provided for this image

温度特性¶

https://en.wikipedia.org/wiki/Silicon_bandgap_temperature_sensor

Schottky 二极管¶

发光二极管 LED¶

Copied!

Copied!
ng.circ('''
  I1 0 vd 10mA
  D1 vd 0 LED
  .model LED D(Is=1e-22 n=1.5)
  ''')
ng.operating_point()
ng.circ(''' I1 0 vd 10mA D1 vd 0 LED .model LED D(Is=1e-22 n=1.5) ''') ng.operating_point()
{'vd': array([1.78668524])}

整流滤波电路¶

No description has been provided for this image

稳压二极管¶

No description has been provided for this image
No description has been provided for this image

温度补偿¶

No description has been provided for this image
No description has been provided for this image

Documentation built with MkDocs.

Keyboard Shortcuts

Keys Action
? Open this help
n Next page
p Previous page
s Search