数字电源中知道了BUCK Gp(s)传递函数如何生成Gc(s)函数?
知道了Gc(s)如何生成Gc(z)?
数字电源中知道了BUCK Gp(s)传递函数如何生成Gc(s)函数?
知道了Gc(s)如何生成Gc(z)?
引自免费微信小程序:皆我百晓生
在数字电源设计中,我们通常会先建立连续时间系统(Analog Domain)的数学模型,然后通过数字控制技术将其转换为离散时间系统(Digital Domain)。在这个过程中,我们会经历从传递函数到Z变换的过程。
首先,假设我们有一个Buck转换器的连续时间闭环传递函数Gp(s),它描述了输出电压对输入参考信号的响应。这个传递函数通常是基于电路参数计算得到的,可能包括开环增益、电感L、电容C等参数。对于一个基本的Buck转换器,闭环传递函数可能如下所示:
[ G_p(s) = \frac{K}{s(LCs + 1)} ]
其中:
要将这个连续时间传递函数转换为离散时间传递函数Gc(z),我们需要应用零阶保持器(Zero-Order Hold, ZOH)和理想采样定理。这涉及到将连续时间系统的冲激响应进行采样,然后应用Z变换。由于ZOH假设输入信号在整个采样周期内恒定,我们可以将Gp(s)乘以单位阶跃函数e^(st),然后对其进行Z变换。
然而,实际的数字控制器可能会采用更高阶的保持器(比如一阶保持器),这样可以减少高频噪声,提高精度。在这种情况下,我们将需要更复杂的数学处理,但这已经超出了基础的ZOH方法。
在MATLAB中,你可以使用c2d
函数将连续时间传递函数转换为离散时间传递函数。下面是一个例子,假设采样频率fs=10kHz,我们使用零阶保持器进行转换:
% 定义参数
K = 1; % 放大系数
L = 1e-3; % 电感值 (亨利)
C = 1e-6; % 电容值 (法拉)
% 计算闭环传递函数
Gp_continuous = K / (s * (LC*s + 1));
% 定义采样频率
fs = 10e3; % Hz
% 将连续时间传递函数转换为离散时间传递函数
Gp_discrete = c2d(Gp_continuous, 1/fs, 'zoh');
% 显示离散时间传递函数
disp(Gp_discrete);
接着,如果你想要从Gc(s)到Gc(z),实际上已经在上面的步骤中完成了。因为在MATLAB的c2d
函数中,'zoh'选项就是使用零阶保持器进行离散化,结果已经是Gc(z)的形式。
如果你想手动计算Gc(z),你需要使用Z变换表,但是这通常非常复杂,并且不推荐手工完成。使用工具包中的函数是更便捷的方法。
最后,如果你需要将离散时间传递函数Gc(z)转换为数字滤波器结构(例如IIR或FIR),可以使用MATLAB的tf2ss
和butter
、fir1
等函数。但这是另一个话题,如果你需要这部分的帮助,请告诉我。