基于MATLAB的逆变电源研究(含完整程序 中英文翻译).doc
目录1 方案论证21.1 设计实现要求21.2 设计方案确定22 原理简介32.1 升压斩波电路32.1.1 升压电路原理图32.1.2 原理分析32.2 三相电压型桥式逆变电路42.2.1 逆变电路原理图42.2.2 逆变电路原理42.3 SPWM逆变器的工作原理52.4 Simulink仿真环境53 仿真建模53.1 斩波电路仿真建模63.2 逆变电路仿真建模73.3 逆变电源仿真建模84 仿真实现94.1 斩波电路仿真实现94.2 逆变电路仿真实现104.3 逆变电源仿真实现105 心得体会12参考文献12附录 逆变电源研究1 方案论证1.1 设计实现要求本次设计要求对逆变电源进行Matlab仿真研究,输入为100V,输出为380V、50Hz三相交流电,采用PWM斩波控制技术,建立Matlab仿真模型并得到实验结果。1.2 设计方案确定由于要求的输出为380V、50Hz三相交流电,显然不能直接由输入的100V直流电逆变产生,需将输入的100V直流电压通过升压斩波电路提高电压,再经过逆变过程及滤波电路得到要求的输出。根据课本所学的,可以采用升压斩波电路和三相电压型桥式逆变电路的组合电路,将升压后的电压作为逆变电路的直流侧,得到三相交流电,同时采用PWM控制技术,使其频率为50HZ。根据对输出电压平均值进行调制的方式不同,斩波电路分为脉冲宽度调制(PWM)、频率调制和混合型三种。在此使用第一种方法,也是应用最多的方法。通过控制开关器件的通断实现电能的储存和释放过程,输出信号为方波,调节脉宽可以控制输出的电压的大小。根据直流侧电源性质不同,逆变电路可分为电压型逆变电路和电流型逆变电路。这里的逆变电路属电压型。采用等腰三角波作为载波,用SPWM进行双极性控制。该电路的输出含有谐波,除了使波形具有对称性减少谐波和简化控制外,还需要专门的滤波电路进行滤波。滤波电路采用RLC滤波电路。直流斩波电路采用PWM斩波控制,输出的方波经过滤波电路后变为直流电送往逆变电路。逆变采用PWM逆变电路,采用SPWM作为调制信号,输出PWM波形,再经过滤波电路得到380V、50Hz三相交流电。系统总体框图如图1-1所示。图1-1 系统总体框图最后通过MATLAB集成环境simulink进行仿真,验证结果。2 原理简介2.1 升压斩波电路2.1.1 升压电路原理图图2-1 升压斩波电路原理图2.1.2 原理分析 假设L值、C值很大,V通时,E向L充电,充电电流恒为I1,同时C的电压向负载供电,因C值很大,输出电压uo为恒值,记为Uo。设V通的时间为ton,此阶段L上积蓄的能量为EI1ton,V断时,E和L共同向C充电并向负载R供电。设V断的时间为toff,则此期间电感L释放能量为 ,稳态时,一个周期T中L积蓄能量与释放能量相等,,化简得。输出电压高于电源电压,故称升压斩波电路,也称之为boost变换器。T与的比值为升压比,将升压比的倒数记作,由于+=1,故。升压斩波电路能使输出电压高于电源电压的原因 :L储能之后具有使电压泵升的作用,并且电容C可将输出电压保持住。2.2 三相电压型桥式逆变电路2.2.1 逆变电路原理图图2-2 三相桥式逆变电路原理图2.2.2 逆变电路原理 该电路采用双极性控制方式,U、V和W三相的PWM控制通常公用一个三角载波,三相的调制信号、和一次相差120°。U、V和W各相功率开关器件的控制规律相同,现以U相为例来说明。当>时,给上桥臂以导通信号,给下桥臂以关断信号,则U相相对于直流电源假想中点的输出电压。当<时,给以导通信号,给以关断信号,则。和的驱动信号始终是互补的。当给()加导通信号时,可能是()导通,也可能是二极管()续流导通,这要由阻感负载中电流的方向来决定。V相和W相的控制方式都和U相相同。2.3 SPWM逆变器的工作原理 由于期望的逆变器输出是一个正弦电压波形,可以把一个正弦半波分作N等分。然后把每一等分的正弦曲线与横轴所包围的面积都用个与此面积相等的等高矩形脉冲来代替,矩形脉冲的中点与正弦波每一等分的中点重合。这样,由N个等幅不等宽的矩形脉冲所组成的波形为正弦的半周等效。同样,正弦波的负半周也可用相同的方法来等效。 这一系列脉冲波形就是所期望的逆变器输出SPWM波形。由于各脉冲的幅值相等,所以逆变器可由恒定的直流电源供电,也就是说,这种交一直一交变频器中的整流器采用不可控的二极管整流器就可以了。逆变器输出脉冲的幅值就是整流器的输出电压。当逆变器各开关器件都是在理想状态下工作时,驱动相应开关器件的信号也应为与形状相似的一系列脉冲波形,这是很容易推断出来的。2.4 Simulink仿真环境Simulink是Matlab的仿真集成环境,是一个实现动态系统建模、仿真的集成环境。它使Matlab的功能进一步增强,主要表现为:模型的可视化。在Windows环境下,用户通过鼠标就可以完成模型的建立与仿真;实现了多工作环境间文件互用和数据交换;把理论和工程有机结合在一起。利用Matlab下的Simulink软件和电力系统模块库(SimPowerSystems)进行系统仿真是十分简单和直观的,用户可以用图形化的方法直接建立起仿真系统的模型,并通过Simulink环境中的菜单直接启动系统的仿真过程,同时将结果在示波器上显示出来。本文主要通过对逆变电源的Matlab仿真,研究逆变电路的输入输出及其特性,以及一些参数的选择设置方法,从而为以后的学习和研究奠定基础,同时也学习使用Matlab软件的Simulink集成环境进行仿真的相关操作。3 仿真建模 根据系统总体框图,可将其分为PWM升压斩波电路和三相逆变电路电路(含滤波电路),下面分别对其进行仿真建模。3.1 斩波电路仿真建模 斩波电路我采用了升压斩波电路,电路原理图如3-1所示,原理前面也讲得很清楚了。电路输出的电压还要经逆变后滤波,故对波形的要求不是很高,与负载并联的电容C取很大,就可以达到滤波的目的,因此不需另外添加滤波电路。图3-1 升压斩波电路该电路中开关器件用IGBT,控制IGBT的波形由PWM脉冲生成器Pulse Generator产生,Pulse Generator在Simulink Library Browser的Simulink下拉菜单Sources类别中。绘制仿真图时,打开Simulink Library Browser,可以在分类菜单中查找所需元件,也可以直接在查找栏中输入元件名称,如Pulse Generator,双击查找。找到元件后直接将其拖到新建Model文件窗口中即可。电路中其他元件按以上方法找出,放入Model文件窗口中。其中电阻、电感和电容元件,选择SimPowerSystems下拉菜单Elements类别中的Series RLC Branch,放入窗口后,双击该图标,在Branch Type中选择相应类型,如电阻选R,电感选L,选择完毕后单击OK按钮。放齐元件后,按升降压斩波电路原理图连接电路,为了方便观察输出,应在输出端加上电压测量装置Voltage Measurement,并在Simulink下拉菜单Commonly Used Blocks类别中选择Scope,即示波器,以观测输出电压波形。所构成的升降压斩波电路仿真模型,如图3-2所示。 图3-2 升压斩波电路仿真模型3.2 逆变电路仿真建模三相桥式PWM型逆变电路的模型可参考Marlab>Help>Demos>Simulink>SimPowerSystems>General Demos中的Three-Phase Two-Level PWM Voltage Source Converters。此电路采用了三相逆变桥集成块Universal Bridge 3 arms,滤波电路也已由Three-Phasse Parallel RLC Load模块构成,不需另加滤波电路。在此电路的基础上稍作修改,即构成三相桥式PWM型逆变电路模型,如图3-3所示。其中变压器仅起隔离作用,不对电压进行升降。图3-3 三相桥式PWM型逆变电路模型3.3 逆变电源仿真建模将斩波电路的输出接到逆变电路的输入,就得到逆变电源仿真模型,如图3-4所示。图3-4 逆变电源仿真模型4 仿真实现4.1 斩波电路仿真实现打开斩波电路窗口,根据参考资料设置初试参数,设置时双击元件图标。输入直流电设为100V,开关器件IGBT和二极管Diode使用默认参数。负载R=50 ,电感L=6e-04H(即0.6mH),电容C=3e-05F(即30uF)。设置PWM发生器周期Period为0.0001s,占空比Pulse Width(% of period)为84.1%,其他参数不变。单击Start simulation按键,开始仿真,双击示波器Scope,观察输出波形图。此时输出波形持续等副震荡,且幅值太高,很不理想。分析知升降压斩波电路中电感和电容值均应很大,将电容值改为500uF(C=5e-04F),电感值为3.8mH,观察波形,如图4-1 所示,输出电压约0.2s后稳定在630V。 图4-1逆变电路仿真波形通过几次调节各元件参数发现,改变电感和电容的值,输出电压稳定值也在变化。电容的作用主要是使输出电压保持住,电容值过小输出波形会持续震荡,应取较大,但过大的电容值会使输出电压稳定的时间太长。根据以上规律反复改变各元件参数,直到得到满意的结果。4.2 逆变电路仿真实现逆变电路中的参数主要有离散PWM生成器(Discrete PWM Generator)中的载波频率(Carrier frequency)、采样时间(Sample time)、调制参数(Modulation index)和输出电压频率(Frequency of output voltage),变压器(Transformer)中的绕组参数(Winding parameters),Three-Phasse Parallel RLC Load模块中的参考点相电压(Nominal phase-to-phase voltage)和频率(Nominal frequency)。由于要求输出交流电频率为50Hz,上述参数中的频率都应为50Hz。载波频率过小时,输出的波形有些跳动,和正弦波有一定的差距,如图4-2 逆变电路仿真波形所示。图4-2逆变电路仿真波形4.3 逆变电源仿真实现 首先应将斩波电路的输出电压调到630V左右,再对逆变电源进行仿真。反复调节参数知当斩波电路中PWM脉冲生成器的占空比达到84.1%时,输出的直流电压约为630V,此时的波形如图4-5 所示,输出电压先大幅震荡,大约0.2s后,稳定在630V左右。图4-3逆变电源斩波输出波形图4-4 逆变电源输出波形改变逆变电源仿真模型中的参数到要求值,单击Start simulation按键开始仿真,图4-4为逆变电源输出波形。有图可知,逆变电源输出三相交流电相电压波形幅值为311V,各相电压互差120°,周期为0.02s即频率为50Hz,满足任务要求。5 心得体会通过本次电力电子技术课程设计,我学会了使用Matlab软件仿真集成环境Simulink进行仿真的基本操作方法,熟悉了用protel画电路图,也对斩波电路、逆变电源的原理有了进一步的理解。电力电子技术是我们非常喜欢的一门课程,学到的知识非常实用,这次课设让我把书本上的理论知识和实际电路仿真联系起来,在增强实践能力的同时,我也学到了运用matlab仿真电力电子电路,以后有很多电路我都可以做出仿真来。在做此次课程设计中,我还是遇到了很多问题的,比如画图时找不到IGBT元件,设定电感电容参数时花了好多时间,仿真时还找不到所需的元件,最后还是通过问同学和上网查资料才完成,还真有点辛苦。Matlab很强大,以后还要继续研究啊!参考文献1王兆安等.电力电子技术.北京:机械工业出版社,20072薛定宇.基于Matlab/Simulink的系统仿真技术与应用.北京:清华大学出版社,20063王丹力等.Matlab控制系统设计、仿真、应用.北京:中国电力出版社,20074周建兴等. MATLAB从入门到精通.北京:人民邮电出版社,20085陈国呈.PWM逆变技术及应用.北京:中国电力出版社,2007附录一:程序代码(1):clear all;t=-2*pi:0.01:2*pi;y=3*sin(2*t);plot(t,y);xlabel ('时间');ylabel('信号强度');title('正弦信号');grid on;axis(-7 7 -3.5 3.5);实验结果:正弦序列:clear all;n=-20:20;y=sin(0.1*pi*n);stem(n,y);xlabel ('n');ylabel('信号强度');title('正弦信号序列');axis(-20 20 -3.5 3.5);grid on;输出结果:程序代码(2):fs=100;%设定采样频率N=256;n=0:N-1;t=n/fs;x=sinc(2*pi*t-8); %生成sa信号subplot(311);plot(t,x);%作sa信号的时域波形xlabel('t');ylabel('y');title('sa信号sinc(2*pi*t-8)时域波形');grid on;y=fft(x,N);%进行N点fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换subplot(312);plot(f,mag);%做频谱图axis(0,100,0,20);xlabel('频率(Hz)');ylabel('幅值');title('sa信号sinc(2*pi*t-8)时域波形幅频谱图N=256');grid on;z=angle(y);subplot(313);plot(f,z);%做相谱图axis(0,100,-5,5);xlabel('频率(Hz)');ylabel('角度');title('sa信号sinc(2*pi*t-8)相频图N=256');grid on;波形:程序代码(3):function varargout = two(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, . 'gui_Singleton', gui_Singleton, . 'gui_OpeningFcn', two_OpeningFcn, . 'gui_OutputFcn', two_OutputFcn, . 'gui_LayoutFcn', , . 'gui_Callback', );if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before erzhi is made visible.function two_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.-%接下来是菜单的程序-function file_Callback(hObject, eventdata, handles)-%文件打开程序function open_Callback(hObject, eventdata, handles) name,path=uigetfile('*.bmp','载入图像');if isequal(name,0)|isequal(path,0) errordlg('没有选中文件','出错'); return;else x=imread(path,name); axes(handles.axes1); imshow(x); handles.img=x; handles.noise_img=x; guidata(hObject,handles)end-function save_Callback(hObject, eventdata, handles)%文件保存 filename,pathname = uiputfile('*.bmp','图片保存为');if isequal(filename,pathname,0,0) errordlg('没有保存','出错'); return;elsefile=strcat(pathname,filename);(handles.axes2);i=getimage(gca);imwrite(i,file);end-function exit_Callback(hObject, eventdata, handles)clc;close all;close(gcf);-%编辑菜单的程序-function edit_Callback(hObject, eventdata, handles)-function huidu_Callback(hObject, eventdata, handles)%灰度处理axes(handles.axes2);if isrgb(handles.img) y=rgb2gray(handles.img); %RGBimshow(y);else msgbox('这已经是灰度图像','转换失败');end -function liangdu_Callback(hObject, eventdata, handles)%亮度处理 prompt='输入参数1','输入参数2','输入gamma' defans='0 0.7','0 1','1' p=inputdlg(prompt,'输入参数',1,defans); p1=str2num(p1); p2=str2num(p2); p3=str2num(p3); gamma=p3; x=(handles.img); y=imadjust(x,p1,p2,gamma); axes(handles.axes2); imshow(y);-function jietu_Callback(hObject, eventdata, handles)%截图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);y=imcrop(handles.img);imshow(y); handles.Timage=y;-function fangda_Callback(hObject, eventdata, handles)-function lingjz_Callback(hObject, eventdata, handles)%邻近插值放大axes(handles.axes2);prompt='输入放大倍数:'defans='2'p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'nearest'); %最近邻插值法放大imshow(y);-function shuangxianfa_Callback(hObject, eventdata, handles)%双线放大axes(handles.axes2);prompt='输入放大倍数:'defans='2'p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bilinear'); %最近邻插值法放大imshow(y); -function shuangsanci_Callback(hObject, eventdata, handles)%双三次放大axes(handles.axes2);prompt='输入放大倍数:'defans='2'p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bicubic'); imshow(y);-function suoxiao_Callback(hObject, eventdata, handles)%邻近插值缩小 axes(handles.axes2); prompt='输入放大倍数:' defans='0.2' p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'nearest'); %最近邻插值法缩小 imshow(y);-function shuangxian_Callback(hObject, eventdata, handles)%双线性缩小axes(handles.axes2);prompt='输入放大倍数:'defans='0.2'p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bilinear'); %最近邻插值法缩小imshow(y); -function shuangsancisuox_Callback(hObject, eventdata, handles)%双三次缩小axes(handles.axes2);prompt='输入放大倍数:'defans='0.2'p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p1);y=imresize(handles.img,p1,'bicubic'); imshow(y); -function xuanzhuan_Callback(hObject, eventdata, handles)-function updown_Callback(hObject, eventdata, handles)%上下翻转axes(handles.axes2);x=(handles.img);if isrgb(handles.img) for k=1:3 y(:,:,k)=flipud(x(:,:,k);%上下翻转函数endimshow(y);else x=(handles.img); y=flipud(x); imshow(y);end-function leftright_Callback(hObject, eventdata, handles)%左右翻转axes(handles.axes2);if isrgb(handles.img) x=(handles.img);for k=1:3 y(:,:,k)=fliplr(x(:,:,k);%左右翻转函数endimshow(y);else x=(handles.img); y=fliplr(x); imshow(y);end-function zeft90_Callback(hObject, eventdata, handles)%左转90度axes(handles.axes2);x=(handles.img);y=imrotate(x,90); imshow(y);-function right90_Callback(hObject, eventdata, handles)%右转90度axes(handles.axes2);x=(handles.img);y=imrotate(x,-90); imshow(y);-function other_Callback(hObject, eventdata, handles)%任意角度旋转axes(handles.axes2);prompt='输入参数1:'defans='30'p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p1);y=imrotate(handles.img,p1); imshow(y);-function gs_Callback(hObject, eventdata, handles)%加入高斯噪声 axes(handles.axes2); prompt='输入参数1:','输入参数2' defans='0','0.02' p=inputdlg(prompt,'输入参数',1,defans); p1=str2num(p1); p2=str2num(p2); y=imnoise(handles.img,'gaussian',p1,p2);imshow(y);handles.noise_img=y; guidata(hObject,handles);-function jy_Callback(hObject, eventdata, handles)%加入椒盐噪声prompt='输入参数1:' %对话框的设置,用户输入的是字符串defans='0.02' %缺省值p=inputdlg(prompt,'输入参数',1,defans); p1=str2num(p1); %字符串转化为数值axes(handles.axes2);x=(handles.img);y=imnoise(x,'salt & pepper',p1); imshow(y);handles.noise_img=y;guidata(hObject,handles);-function cx_Callback(hObject, eventdata, handles)%加入乘性噪声 axes(handles.axes2);prompt='输入参数1:'defans='0.02'p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p1);y=imnoise(handles.img,'speckle',p1);imshow(y); handles.noise_img=y;guidata(hObject,handles);-function zhifangtutongji_Callback(hObject, eventdata, handles)-function red_Callback(hObject, eventdata, handles)%R直方图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);x=imhist(handles.img(:,:,1); %直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255);-function gray_Callback(hObject, eventdata, handles)%G直方图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);if isrgb(handles.img) x=imhist(handles.img(:,:,2); %直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255);else msgbox('这是灰度图像','旋转失败');end-function blue_Callback(hObject, eventdata, handles)%B直方图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);if isrgb(handles.img) x=imhist(handles.img(:,:,3);