二极管峰值检波
01 二极管整流
一、前言
二极管检波电路, 对于输入交流电压进行包络检波。 下面通过简单的分析, 编写一个简单的Python 程序, 计算检波的结果。
二、仿真程序
二极管整流电路, 实质上是一个条件开关。 下面通过一个比较器控制的开关来替代二极管。 中间的比较器, 只是为了说明开关闭合的条件, 它对比开关左右两边的电压, 确定开关是否闭合。 当开关左边的电压高于右边时, 开关闭合, 否则, 开关就打开。 开关前面的 电池和电阻分别替代二极管前向导通电压以及导通电阻。 不同的二极管, 这两个参数有所区别。 在低频信号处理时, 电路省略了二极管寄生电容。 这是通过软件来模拟上述电路, 对输入 50Hz, 峰值为 6V的信号进行半波整流之后所获得的整流信号。 可以看到与平时所观察到的实际波形非常接近。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2024-03-02
#
# Note:
#============================================================
from headmm import *
ts = 0.1e-3 # Sample period
T1 = 0.2 # Total signal length
f1 = 50 # Signal as 50Hz
Up = 6
Vd = 0.1 # Diode forward voltage
Rd = 50 # Diode forward resistance
R1 = 10e3
C1 = 20e-6
Uo = 0
Ns = int(T1/ts)
T = linspace(0, T1, Ns)
ft = sin(2*pi*f1*T) * Up
#------------------------------------------------------------
Uout = [0]*len(T)
for id,f in enumerate(ft):
if f-Vd > Uo:
i1 = (f-Vd-Uo)/Rd
else:
i1 = 0
i2 = Uo/R1
Q = (i1-i2)*ts
dV = Q/C1
Uo += dV
Uout[id] = Uo
#------------------------------------------------------------
plt.plot(T, ft, lw=3, label='Origin')
plt.plot(T, Uout, lw=3, label='Rectified')
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.legend(loc='upper right')
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
▲ 图1.2.1 仿真的结果
▲ 图1.2.2 对调幅波的峰值检波
在这里, 利用Python程序来实现上述电路, 中间这部分是通过带有条件判断的循环来将输入信号转换成输出信号。 下面, 将二极管的导通电压修改为 0.5V, 导通电阻设为 50欧姆, 滤波电阻和电容分别取 10k欧姆和 20微法。 通过软件产生一个调幅信号, 通过刚才程序, 获得峰值检波输出信号, 可以看到滤波之后的信号反应了输入信号调幅的包络线。 检波结果, 反应了充放电过程。 不同的信号, 影响了充放电的变化。 此时, 对应的 输出信号滤波时间常数相对比较合适, 如果修改R1,C1, 对于输出信号会有比较大的影响。
取C1的容值为 100微法, 检波输出的信号出现了缓变的特征。 无法反映包络线的变化。 但如果将 C1改成5微法, 检波结果中出现了较大的波动。 因此对于不同的检波信号, 需要对输出RC滤波系数进行合理的设置。
▲ 图1.2.3 C1取100微法对应的输出结果

▲ 图1.2.4 C1取5微法对应的输出结果
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2024-03-02
#
# Note:
#============================================================
from headmm import *
ts = 0.1e-3 # Sample period
T1 = 2 # Total signal length
f1 = 50 # Signal as 50Hz
Up = 6
Vd = 0.25 # Diode forward voltage
Rd = 50 # Diode forward resistance
R1 = 10e3
C1 = 5e-6
Uo = 0
Ns = int(T1/ts)
T = linspace(0, T1, Ns)
ft = sin(2*pi*f1*T) * Up * (cos(2*pi*f1/20*T) * 0.25 + 1)
#------------------------------------------------------------
Uout = [0]*len(T)
for id,f in enumerate(ft):
if f-Vd > Uo:
i1 = (f-Vd-Uo)/Rd
else:
i1 = 0
i2 = Uo/R1
Q = (i1-i2)*ts
dV = Q/C1
Uo += dV
Uout[id] = Uo
#------------------------------------------------------------
plt.plot(T, ft, lw=3, label='Origin')
plt.plot(T, Uout, lw=3, label='Rectified')
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.legend(loc='upper right')
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
※ 总 结 ※
本文实现了对于二极管峰值检波电路的仿真。 利用一个理想开关近似普通的二极管。 通过对调幅信号检波仿真, 可以知道输出信号的好坏与检波低通滤波RC的常数有很大关系。
● 相关图表链接: