用S函数来描述PWM控制算法,S函数的实质是使用特殊调用方法的MATLAB函数,它利用计算机程序语言来描述动态系统。S函数的功能十分强大,它不仅支持连续系统和离散系统,还支持混合系统。因此,绝大部分Simulink仿真模型均可以有S函数进行描述。虽然S函数的编写十分简单方便,但是它却可以实现非常复杂的功能。
在S函数程序编写完成之后,可以通过Simulink的Function的Table子模块库中的S函数模块添加到Simulink仿真模型中,并可以通过S函数模块参数设置对话框指定的S函数的名称以及需要传递的附加参数进行设置。
图3-3 PWM控制系统仿真模型
Figure 3-3 The simulation model of PWM control system
创建一个S-函数后,双击S-Function框架模块,在“S-function name”栏中填写函数名pwm,在“S-function parameters”栏中填写函数pwm的第四个函数名T。为了保证PWM控制系统模型的运行,应保证pwm.m在MATLAB搜索路径上,还要对模型运行所需的参数T进行设置。如在MATLAB指令窗中运行以下指令:
Clear T=1;
在PWM控制系统中,我们用一个S-函数来实现PWM控制器,根据PWM波的数学表达式(2-1), (2-2)编写的S函数如下:
function [sys,x0,str,ts] = pwm(t,x,u,flag,T) switch flag, case 0,
[sys,x0,str,ts]=mdlInitializeSizes(T); case 3,
sys=mdlOutputs(t,x,u,T); case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u,T); case{1,2,9}, sys=[]; otherwise
error(['Unhandled flag = ',num2str(flag)]); end
function [sys,x0,str,ts]=mdlInitializeSizes(T) sizes = simsizes;
sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = []; str = []; ts = [-2 0];
function sys=mdlOutputs(t,x,u,T) if t-fix(t/T)*T==0 sys=sign(u); else
sys=0; end
function sys=mdlGetTimeOfNextVarHit(t,x,u,T) if mod(t,T)==0&abs(u)>0 H=abs(u)*T;disp('b'); else
H=T-mod(t,T);disp('c'); end disp([H,u,t]);
sys=t+H;
采用S函数构造PWM并不能直观的观察到幅值M,周期T及比例系数的值,因此下面尝试用LabVIEW的NI仿真模块来仿真PWM系统。
因篇幅问题不能全部显示,请点此查看更多更全内容