引言
刚刚比较系统地学了一遍Matlab(主要是基础知识和电力电子方面的使用),专门撰写此文,写一下自己对于matlab及Power electronic方面的应用的总结和心得。
Matlab入门
因为笔者也只是个菜鸡大学生,只能根据自己的经验写一下自己在课程中和平时经常使用的例子和函数,抛弃了很多冗杂的入门技巧,让更多的Matlab小白能更快的上手matlab,向大家介绍一些自己最常用的函数和用法。
MATLAB作为一款矩阵运算的科学计算软件,发展至今,已经有丰富的库函数和例程,可以说除了不会生孩子,其它的都会了。Matlab作为一款交互式面向对象的软件,目前笔者已经在信号与系统、控制理论、电力电子等课程都有相关使用,在数模、美赛里也都有过使用matlab。此外,由于笔者经常需要处理实验数据,因此时常会用matlab导入数据,拟合图像。
基础运算
1. matlab的命令行窗口中可以像计算器一样,加减乘除,做各类运算操作。如果是矩阵运算,注意区分点乘和普通矩阵相乘,如果是普通矩阵相乘,按照线性代数知识做矩阵运算即可。如果是两个矩阵点乘,那么就是两个矩阵对应位置上的元素一对一乘积。
2. 常用命令行系统操作
clc :清除命令行内容。 clear all : 清除工作区内容。
- 创建 .M文件
一条一条在命令行敲代码实在太累,因此可以像c那样创建一个demo脚本,写完后编译运行文件就好。(具体语法可以查看其它详细科普贴)
点击新建脚本,写完代码后保存。注意如果想编译运行demo,需要设置文本路径,即把下图中的E:/Matlab/bin路径改成自己保存的demo的文件夹路径即可。
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) %零极点图
Buck电路的代码
% 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
Boost例程
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使用
simulink作为一款面向过程的软件,是对matlab的图形化仿真补充,更加直观。
在这里主要是以buck电路为例,做个简单的介绍。(simulink用的不多,buck电路也是用老师的例子)
注意: