前言
在DC-DC电路控制算法中,PID控制是最常见且实用的,但实现前提有二,一是需要手算电路传递函数,二是需要将实际电路元件数值代入计算,第一步无法避免,但是在进行第二步时,存在大量基础、细致的数值计算,容易混淆,并且最终目的是获取电路传函的bode图。针对上述问题,本文通过m文件,将第二步程序化,以最简便的方式绘制出传函相关图像。
一、表示传递函数
在传递函数中,需要保留 s s s表示状态变量,这里借助符号函数实现,程序如下;
syms s R_c C_dc R_L L
G_IV = ((s*R_c*C_dc+1)+s*C_dc*(R_L+s*L))/((s*R_c*C_dc+1)*(R_L+s*L))
运行结果如下:
此时就可以将syms中的参数R_c、C_dc、R_L、L替换为电路实际值,就可以直接计算传递函数,按照下表参数计算传函:
参数 | 取值 |
---|---|
R_c | 0.5 |
C_dc | 100e-6 |
R_L | 0.5 |
L | 100e-3 |
二、获得传递函数
上一步获得的公式仍旧为符号函数,需要将其转化为传递函数,即提取出符号函数中的分子、分母系数:
[num,den]=numden(G_IV);% 提取符号表达式分子和分母
Num=sym2poly(num); % 返回多项式项式系数
Den=sym2poly(den);
tf_T_u = tf(Num,Den);
运行结果如下:
三、绘图
最后绘制获得的传递函数图像,代码如下:
figure('Name','nyquist曲线','Color','white');
nyquist( tf_T_u );
figure('Name','根轨迹','Color','white');
rlocus( tf_T_u );
figure('Name','波特图','Color','white');
bode( tf_T_u );
figure('Name','闭环传递函数的零极点图','Color','white');
pzmap( tf_T_u );
运行结果如下:
总结
本文提及的传函计算与绘图仅适用于较简单的情况,如果面对传函存在 s s s嵌套运算的情况,需要提前化简,具体化简方法列在参考文献中。
参考文献
[1]使用MATLAB传递函数的绘制伯德图
[2]Matlab化简符号表达式