问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

LLC电路的传递函数和频响曲线(增益与伯德图)推导

创作时间:
作者:
@小白创作中心

LLC电路的传递函数和频响曲线(增益与伯德图)推导

引用
CSDN
1.
https://blog.csdn.net/twicave/article/details/143909458

LLC(Inductor-Inductor-Capacitor)电路是一种常用的谐振变换器电路,广泛应用于开关电源、逆变器等电力电子设备中。本文将从理论推导和仿真分析两个方面,详细介绍LLC电路的传递函数和频响特性。

1.实验 - 高通滤波电路频响特性

先尝试一下高通滤波的传递函数和伯德图,测试一下推导和Python伯德图绘制是否正常。

1.1 推导传递函数

高通滤波是RC串联,输出电压取R两端电压,所以:

1.2 伯德图绘图

源码参见附录B,确认无误。幅频特性,-3db位置和曲线整体特征正常。

2 LLC电路频响特性

2.1 推导开环传递函数

2.1.1 电路参数 - 谐振前级回路等效电路

  1. LLC阻抗分别为:Lr,Lm,Cr
  2. 负载电阻为Rout
  3. LLC回路,负载等效阻抗为N*Rout,记作Rac

2.1.2 推导开环传递函数

下面的推导中出现的一些临时变量:

  • H是传递函数。
  • Zm是LLC电路的复阻抗
  • Lr,Cr串联联,所以,输入电压Vin减去Lr,Cr的分压,就是输出电压Vout
  • 绘图时要求把传递函数写为基于s的多项式形式(分子/分母)所以有下面的化简过程。

2.2 系统频响

2.2.1 线性增益图及伯德图

为了验证正确性,我把系统增益也画出来了,在上方,这次是对的,下方左侧是伯德图幅度谱,下方右侧是相位角随频率变化。注意伯德图的x轴是弧度,比频率大2*pi,那个值会大6倍多。

2.3 相位裕度

添加相位裕度指示后,开环相位调整裕度足够。

附录A:LLC谐振电路- python频响曲线源码

# -*- coding: gb2312 -*-
from re import S
from token import RBRACE
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
llc_params = {
    "Lr":35e-6,
    "Cr":40e-9,
    "N":26/2,
    "Pr":1.5e3,
    "Vo":27.5,
    "K":5,
    "Vin":27.5*26/2}
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
param = llc_params
# 定义滤波器参数
Lr = param["Lr"] 
Lm = param["Lr"]*param["K"]
Cr = param["Cr"]
Rac = param["N"]*param["Pr"]/np.power(param["Vin"],2)
# 定义滤波器参数
Lr = param["Lr"] 
Lm = param["Lr"]*param["K"]
Cr = param["Cr"]
Rac = param["N"]*np.power(param["Vo"],2)/param["Pr"]
Freq_r = 1/(2 * np.pi * np.sqrt(Lr*Cr))
Freq_min = 1/(2 * np.pi * np.sqrt((Lr+Lm)*Cr))
# 传递函数分子和分母
num = [Lm*Rac*Cr, 0, 0]
den = [Lr*Cr*Lm, (Lr*Cr*Rac + Lm*Rac*Cr), Lm, Rac]  # 分母系数
# 创建传递函数对象
sys = signal.TransferFunction(num, den)
# 计算伯德图
w, mag, phase = signal.bode(sys, np.arange(10e0*(2*np.pi), 300e3*(2*np.pi), 50))
freq_in_hz = [rad/(2*np.pi) for rad in w]
gain = [np.power(10, mag/20) for mag in mag]
plt.figure(figsize=(12, 8))
plt.subplot(2, 1, 1)
plt.plot(freq_in_hz, gain)  
plt.title(f'Gain of LLC DC-DC at Power_out={param["Pr"]/1e3:.2f}kW')
plt.ylabel('Frequency [Hz]')
plt.ylabel('Gain [percent vo/vi]')
plt.axvline(x=Freq_r, color='g', linestyle='--', label=f'谐振频率 频率{Freq_r/1e3:.2e}kHz = {Freq_r*2*np.pi:.2e}rad')
plt.axvline(x=Freq_min, color='r', linestyle='--', label=f'低频 频率{Freq_min/1e3:.2e}kHz = {Freq_min*2*np.pi:.2e}rad')
#plt.axhline(y=-3, color='g', linestyle='--', label='-3dB 增益 -3=20log(Vout/Vin) Vout/Vin=0.707')
plt.legend()
plt.grid(True, which="both")
# 绘制伯德图
plt.subplot(2, 2, 3)
plt.title(f'Bode Plot [Gain Figure] of LLC DC-DC')
plt.semilogx(w, mag)  # 绘制增益曲线semilogx
plt.ylabel('Magnitude [dB]')
plt.axvline(x=Freq_r*2*np.pi, color='g', linestyle='--', label=f'谐振频率 频率{Freq_r/1e3:.2e}kHz = {Freq_r*2*np.pi:.2e}rad')
plt.axvline(x=Freq_min*2*np.pi, color='r', linestyle='--', label=f'低频 频率{Freq_min/1e3:.2e}kHz = {Freq_min*2*np.pi:.2e}rad')
#plt.axhline(y=-3, color='g', linestyle='--', label='-3dB 增益 -3=20log(Vout/Vin) Vout/Vin=0.707')
#plt.legend()
plt.grid(True, which="both")
plt.subplot(2, 2, 4)
plt.title(f'Bode Plot [Phase Figure] of LLC DC-DC')
plt.semilogx(w, phase)  # 绘制相位曲线
# 绘制竖线
y_min, y_max = plt.ylim()  # 获取当前 y 轴的范围
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Phase [degrees]')
plt.axvline(x=Freq_r*2*np.pi, color='g', linestyle='--', label=f'谐振频率 频率{Freq_r/1e3:.2e}kHz = {Freq_r*2*np.pi:.2e}rad')
plt.axvline(x=Freq_min*2*np.pi, color='r', linestyle='--', label=f'低频 频率{Freq_min/1e3:.2e}kHz = {Freq_min*2*np.pi:.2e}rad')
#plt.legend()
plt.grid(True, which="both")
plt.tight_layout()
plt.show()  

附录B:RC一阶高通滤波伯德图源码

# -*- coding: gb2312 -*-
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# 定义滤波器参数
R = 1000  # 电阻值,单位:欧姆
C = 1e-6  # 电容值,单位:法拉
# 计算截止频率
fc = 1 / (2 * np.pi * R * C)
print(f"截止频率: {fc:.2f} Hz")
# 定义传递函数
num = [R*C, 0]  # 分子系数
den = [R * C, 1]  # 分母系数
# 创建传递函数对象
sys = signal.TransferFunction(num, den)
# 生成频率范围
w, mag, phase = signal.bode(sys)
# 绘制伯德图
plt.figure()
# 绘制幅频响应
plt.subplot(2, 1, 1)
plt.semilogx(w, mag)  # 使用对数坐标
plt.grid(True, which="both")
plt.title('伯德图 - 幅频响应')
plt.xlabel('频率 (rad/s)')
plt.ylabel('增益 (dB)')
# 标出-3dB位置
plt.axvline(x=2 * np.pi * fc, color='r', linestyle='--', label=f'-3dB 频率{fc}Hz = {fc*2*np.pi}rad')
plt.axhline(y=-3, color='g', linestyle='--', label='-3dB 增益 -3=20log(Vout/Vin) Vout/Vin=0.707')
plt.legend()
# 绘制相频响应
plt.subplot(2, 1, 2)
plt.semilogx(w, phase)  # 使用对数坐标
plt.grid(True, which="both")
plt.title('伯德图 - 相频响应')
plt.xlabel('频率 (rad/s)')
plt.ylabel('相位 (度)')
plt.tight_layout()
plt.show()  

附录C: 显示相位裕度不稳定区域的代码片段

#绘制相位余量 - 红色半透明带状区域
y_min = np.full(len(w), -180 + 45)
y_max = np.full(len(w), -180 - 45)
plt.fill_between(w, y_min, y_max, where=(y_min>=y_max), color='red', alpha=0.5, label=f'相位裕度unstable Zone: [-180±45] degree')  

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号