如何使用 Python 计算电容器通过电阻的充放电时间

你可以使用 UliEngineering Python 库轻松计算电容器通过电阻充放电所需的时间:

capacitor_resistor_charge_discharge_time.py
from UliEngineering.Electronics.Capacitors import *
from UliEngineering.EngineerIO import *

# 计算 100uF 电容器通过 10k 电阻从 5V 电源充电的时间
# 经过正向压降为 0.3V 的肖特基二极管,充电至 3.0V
charge_time = capacitor_resistor_charge_time(
    capacitance="100uF", resistance="10kΩ", source_voltage="5V",
    initial_voltage="0V", target_voltage="3.0V", diode_voltage="300mV"
)

# 计算同一电容器通过 10k 电阻放电至 1.0V 的时间
# 经过正向压降为 0.7V 的硅二极管
discharge_time = capacitor_resistor_discharge_time(
    capacitance="100uF", resistance="10kΩ", initial_voltage="5.0V",
    target_voltage="1.0V", diode_voltage="700mV"
)

# 自动格式化并打印结果
print(f"Charge time: {format_value(charge_time, 's')}")
print(f"Discharge time: {format_value(discharge_time, 's')}")

示例输出

capacitor_charge_discharge_time_output.txt
Charge time: 1.02 s
Discharge time: 2.66 s

电容器充电时间图

电容器通过电阻的充放电遵循由 RC 时间常数 τ = R × C 描述的指数曲线。时间常数决定了电容器充放电的速度:经过一个时间常数后,充电时电容器达到最终电压的约 63.2%,放电时衰减至 36.8%。

上图展示了 100 µF 电容器通过 10 kΩ 电阻从 5V 电源充电的典型 RC 充电曲线。红色虚线标记了时间常数(τ、2τ、3τ、4τ、5τ),表明电容器在 5 个时间常数后达到电源电压的 99.3%。这说明了为什么时间常数是定时电路、滤波器和脉冲整形应用的基础。


绘图生成脚本

plot_capacitor_charge_time.py
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
import sys
sys.path.insert(0, '/home/uli/dev/UliEngineering')

from UliEngineering.Electronics.Capacitors import capacitor_resistor_charge_time

# 绘图的时间范围
t = np.linspace(0, 0.005, 200)  # 0 到 5ms

# 创建图形
plt.figure(figsize=(10, 6))

# 固定参数
C = 100e-6  # 100 µF
R = 10e3  # 10 kΩ
V_source = 5.0  # 5V
V_initial = 0.0

# 计算 RC 充电的电压随时间变化
tau = R * C
V = V_source + (V_initial - V_source) * np.exp(-t / tau)

plt.plot(t * 1000, V, color='blue', linewidth=2)
plt.xlabel('Time (ms)', fontsize=12)
plt.ylabel('Capacitor Voltage (V)', fontsize=12)
plt.title('RC Capacitor Charging Curve (R=10kΩ, C=100µF)', fontsize=14, fontweight='bold')
plt.grid(True, alpha=0.3)

# 标记时间常数
for n in [1, 2, 3, 4, 5]:
    t_n = n * tau
    V_n = V_source + (V_initial - V_source) * np.exp(-n)
    plt.axvline(x=t_n * 1000, color='red', linestyle='--', alpha=0.3)
    plt.text(t_n * 1000, V_n + 0.1, f'{n}τ', fontsize=9, color='red')

plt.tight_layout()
plt.savefig('capacitor_charge_time_plot.svg', format='svg', dpi=300)

Check out similar posts by category: Electronics, Python