刚刚比较系统地学了一遍Matlab(主要是基础知识和电力电子方面的使用),专门撰写此文,写一下自己对于matlab及Power electronic方面的应用的总结和心得。
因为笔者也只是个菜鸡大学生,只能根据自己的经验写一下自己在课程中和平时经常使用的例子和函数,抛弃了很多冗杂的入门技巧,让更多的Matlab小白能更快的上手matlab,向大家介绍一些自己最常用的函数和用法。
MATLAB作为一款矩阵运算的科学计算软件,发展至今,已经有丰富的库函数和例程,可以说除了不会生孩子,其它的都会了。Matlab作为一款交互式面向对象的软件,目前笔者已经在信号与系统、控制理论、电力电子等课程都有相关使用,在数模、美赛里也都有过使用matlab。此外,由于笔者经常需要处理实验数据,因此时常会用matlab导入数据,拟合图像。
1. matlab的命令行窗口中可以像计算器一样,加减乘除,做各类运算操作。如果是矩阵运算,注意区分点乘和普通矩阵相乘,如果是普通矩阵相乘,按照线性代数知识做矩阵运算即可。如果是两个矩阵点乘,那么就是两个矩阵对应位置上的元素一对一乘积。
2. 常用命令行系统操作
clc :清除命令行内容。 clear all : 清除工作区内容。
4. 常用命令
对于Matlab常用函数,主要有以下几个:
plot(x,y) %最最用的多的函数,用于绘制xy轴图像。subplot() 函数可以在同一个figure图上显示
axis([xmin xmax ymin ymax]) %设置xy坐标的范围
xlable("??") / ylable("??") %设置横纵坐标的名字
title("??") %设置标题名
上述主要是画图使用的函数,用的确实是很广泛,如果是想处理批量数据,可以先用Excel保存数据,然后在matlab主页导入数据,最后绘制图像即可。
其他常用函数:
G=tf([ ],[ ]) %建立传递函数G,两个[ ]中依次为分子分母的最简多项式的系数的值
conv([ , ],[ , ]) %两个多项式乘积,比如(s+1)*(s+3)可以表示为conv([1 1],[1 3])
step(G) % 传递函数G的阶跃函数图像
impulse(G) % 传递函数G的脉冲响应的图像
bode(G) %波特图绘制
rlocus(G) %根轨迹绘制
pzmap(G) %零极点图
% This program is used for demostrating buck converter simulation
%component parameters
Vin = 100;
Vtri = 0.1;
Kpwm = Vin/Vtri;
L = 10e-3;
C = 10e-5;
R = 100;
%===============
z=2000;
%==================
% 1/[s^2*LC+(L/R)s+1]
num_g = Kpwm;
den_g = [L*C L/R 1];
% feedback filter parameters
K_h = 0.02;
Tor = 1e-4;
num_h = K_h;
den_h = [Tor 1];
% adding an integrater
num_gc = [1 z];
den_gc = [1 0];
num_g2 = conv(num_g,num_gc);
den_g2 = conv(den_g,den_gc);
% openloop parameter again
num_o2 = conv(num_g2,num_h);
den_o2 = conv(den_g2,den_h);
W = logspace(2,4,1000);
clf
sys=tf(num_o2,den_o2);
figure(1)
rlocus(sys);
axis([-z,z,-10000,10000]);
k=rlocfind(sys)
%k=0.2;
figure(2)
bode(k*num_o2,den_o2);
margin(tf(k*num_o2,den_o2));
grid
% close loop parameter again
[num_bk2,den_bk2] = feedback(k*num_g2,den_g2,num_h,den_h);
t = 0:0.0001:0.1;
[yo2] = step(num_bk2,den_bk2,t');
figure(3)
plot(t,yo2)
%axis([0 1e2 0 2])
grid
clear all
VDC=100; Lf=0.01;
Cf=10e-6; RL=200;D1=0.5;
%For current regulator
z1=1500;z2=1000;
num_i=(VDC/D1)*[Cf 2/RL];
den_i=[Lf*Cf Lf/RL D1^2];
gi_i=tf(num_i,den_i);
gc_i=tf([1, z1],[1 0]);
sys_i=series((gi_i*RL)/VDC, gc_i);
figure(1)
rlocus(sys_i)
% axis([-400 100 -1000 1000])
k_i=rlocfind(sys_i)
sys_ic = feedback(k_i*sys_i,1);
num_u=D1*[-Lf/D1^2/RL 1];
den_u=[Cf 2/RL];
sys_u=tf(num_u,den_u);
sys_u1=series(sys_ic,sys_u);
gc_u=tf([1, z2],[1 0]);
sys_u2=series(sys_u1/VDC, gc_u);
figure(2)
rlocus(sys_u2)
axis([-2000 100 -10000 10000])
k_u=rlocfind(sys_u2)
sys_uc = feedback(k_u*sys_u2,1);
figure(3);
t = 0:0.0001:0.2;
[yo2] = step(sys_uc,t');
figure(3)
plot(t,yo2)
%axis([0 1e2 0 2])
grid
simulink作为一款面向过程的软件,是对matlab的图形化仿真补充,更加直观。
在这里主要是以buck电路为例,做个简单的介绍。(simulink用的不多,buck电路也是用老师的例子)
注意: