网站所有权查询,手机网站关键词优化,小程序登录入口网页版官网,打开一个不良网站提示创建成功文末有仿真模型下载方式1.1 基于C语言的SIMULINK仿真模型使用C语言在MATLAB/SIMULINK中仿真#xff0c;需要借助s-function builder模块实现。七段式SVPWM仿真模型如图1-1所示。仿真解算器#xff08;Solver#xff09;选择变步长#xff08;Variable-step#xff09;、od…文末有仿真模型下载方式1.1 基于C语言的SIMULINK仿真模型使用C语言在MATLAB/SIMULINK中仿真需要借助s-function builder模块实现。七段式SVPWM仿真模型如图1-1所示。仿真解算器Solver选择变步长Variable-step、ode23最大仿真步长Max step size设置为1e-6其余参数保持默认值。模型参数具体设置为直流母线电压Udc 100VUalpha 50sin50ωtUbeta 50cos50ωtPWM开关周期Ts取为0.0001s对应开关频率10kHz则对应的仿真模型中PWM一个周期计数值Tcnt15000假设实际DSP的PWM外设时钟频率为150MHz则Tcnt 150MHz/10kHz 15000。图1-1 SVPWM仿真模型双击Sfunction builder模块设置即图1-1中的SVPWM首先填写S-function nameSVM然后在Initialization选项卡中选择Sample mode为Discere意味着使用离散采样模式在Sample time value中设置采样周期这里采用1e-4单位秒这里与PWM开关周期设置为同一时间如图1-2所示。图1-2 Initialization选项卡设置Data Properties选项卡用来设置模块的输入/输出接口。首先选择Input Ports子选项卡进行输入接口设置分别添加名为“Ualpha”、“Ubeta”、“Udc”、“Tcnt”的4路输入接口如图1-3所示。然后选择Output Ports子选项卡进行输出接口设置添加名为“Tcm”的3维度输出接口和名为“Sec”的扇区输出接口如图1-4所示。图1-3 Initialization选项卡设置图1-4 Data Properties选项卡Output Ports设置Librabies选项卡用来指定所需的源文件、头文件、库文件等如图1-5所示在左侧窗口用来指定头文件路径和C源文件含路径。这里举例头文件路径为INC_PATH ../Include源文件为SRC_PATH ../Source Svpwm.c。图1-5 Libraries选项卡设置Ouputs选项卡中用来写测试用的代码C语言一般格式为1将模块输入量赋值给测试代码接口2调用相关计算函数3将计算结果或测试变量赋值给输出接口。具体视实际项目需要而定如图1-6所示另外所需的SVPWM核心代码为I_Svpwm.c和I_Svpwm.h需要将这两个文件分别放入Library中指定的路径下。Ouputs选项卡中测试代码举例如下#include Svpwm.h
static SVPWM Svpwm SVPWM_DEFAULTS;Svpwm.Input.Ualpha Ualpha[0];
Svpwm.Input.Ubeta Ubeta[0];
Svpwm.Input.Udc Udc[0];
Svpwm.Input.Tcnt Tcnt[0];
Svpwm.Calc(Svpwm);
Tcmp[0] Svpwm.Output.Tcm1;
Tcmp[1] Svpwm.Output.Tcm2;
Tcmp[2] Svpwm.Output.Tcm3;图1-6 Outputs选项卡设置最后在配置完成并将相关被测试代码I_Svpwm.c和I_Svpwm.h放置到相关文件夹Include和Source后点击界面右上角的Build按钮进行代码编译在系统提示无错误无警告后即可进行仿真如图1-7所示。图1-7 编译完成提示信息SVPWM程序如下1Svpwm.h#ifndef __SVPWM_H__
#define __SVPWM_H__// Input interface
typedef struct { float Ualpha;float Ubeta;float Udc;unsigned int Tcnt;
} SVPWM_INPUT;#define SVPWM_INPUT_DEFAULTS { 0,0,0,1
}// Output interface
typedef struct { float Tcm1;float Tcm2;float Tcm3;
} SVPWM_OUTPUT;#define SVPWM_OUTPUT_DEFAULTS { 0,0,0
}// Temporary variables
typedef struct { unsigned int A;unsigned int B;unsigned int C; unsigned int Sector;float X;float Y;float Z;float T1;float T2;float T3;float Ta;float Tb;float Tc;float M;
} SVPWM_TEMP;#define SVPWM_TEMP_DEFAULTS { 0,0,0,0,0,0,0,0,0,0,0,0,0,0
}// Struct of space vector PWM
typedef struct { SVPWM_INPUT Input;SVPWM_OUTPUT Output;SVPWM_TEMP Temp;void (*Calc)();
} SVPWM;#define SVPWM_DEFAULTS { SVPWM_INPUT_DEFAULTS,SVPWM_OUTPUT_DEFAULTS,SVPWM_TEMP_DEFAULTS,(void (*)(long))SvpwmGen
}// Function declaration
void SvpwmGen(SVPWM *);
#endif2Svpwm.c#include Svpwm.hvoid SvpwmGen(SVPWM *Var)
{float TempT1, TempT2;if(Var-Input.Ubeta 0){Var-Temp.A 1;}else{Var-Temp.A 0;}if((1.732 * Var-Input.Ualpha - Var-Input.Ubeta) 0){Var-Temp.B 1;}else{Var-Temp.B 0;}if((1.732 * Var-Input.Ualpha Var-Input.Ubeta) 0){Var-Temp.C 1;}else{Var-Temp.C 0;}Var-Temp.Sector Var-Temp.A 2 * Var-Temp.B 4 * Var-Temp.C; Var-Temp.X 1.732 * Var-Input.Ubeta * Var-Input.Tcnt / Var-Input.Udc;Var-Temp.Y (1.5 * Var-Input.Ualpha 0.866 * Var-Input.Ubeta) * Var-Input.Tcnt / Var-Input.Udc;Var-Temp.Z (-1.5 * Var-Input.Ualpha 0.866 * Var-Input.Ubeta) * Var-Input.Tcnt / Var-Input.Udc;switch(Var-Temp.Sector){ case 1:Var-Temp.T1 Var-Temp.Z;Var-Temp.T2 Var-Temp.Y;break;case 2:Var-Temp.T1 Var-Temp.Y;Var-Temp.T2 -Var-Temp.X;break; case 3:Var-Temp.T1 -Var-Temp.Z;Var-Temp.T2 Var-Temp.X;break;case 4:Var-Temp.T1 -Var-Temp.X;Var-Temp.T2 Var-Temp.Z;break; case 5:Var-Temp.T1 Var-Temp.X;Var-Temp.T2 -Var-Temp.Y;break;case 6:Var-Temp.T1 -Var-Temp.Y;Var-Temp.T2 -Var-Temp.Z;break;default:break;}if((Var-Temp.T1Var-Temp.T2) Var-Input.Tcnt){TempT1 Var-Temp.T1;TempT2 Var-Temp.T2;Var-Temp.T1 (TempT1 / (TempT1 TempT2)) * Var-Input.Tcnt;Var-Temp.T2 (TempT2 / (TempT1 TempT2)) * Var-Input.Tcnt;}Var-Temp.Ta (Var-Input.Tcnt - Var-Temp.T1 - Var-Temp.T2) * 0.25;Var-Temp.Tb Var-Temp.Ta Var-Temp.T1 * 0.5;Var-Temp.Tc Var-Temp.Tb Var-Temp.T2 * 0.5;switch(Var-Temp.Sector){case 1:Var-Output.Tcm1 Var-Temp.Tb;Var-Output.Tcm2 Var-Temp.Ta;Var-Output.Tcm3 Var-Temp.Tc;break;case 2:Var-Output.Tcm1 Var-Temp.Ta;Var-Output.Tcm2 Var-Temp.Tc;Var-Output.Tcm3 Var-Temp.Tb;break;case 3:Var-Output.Tcm1 Var-Temp.Ta;Var-Output.Tcm2 Var-Temp.Tb;Var-Output.Tcm3 Var-Temp.Tc;break;case 4:Var-Output.Tcm1 Var-Temp.Tc;Var-Output.Tcm2 Var-Temp.Tb;Var-Output.Tcm3 Var-Temp.Ta;break;case 5:Var-Output.Tcm1 Var-Temp.Tc;Var-Output.Tcm2 Var-Temp.Ta;Var-Output.Tcm3 Var-Temp.Tb;break;case 6:Var-Output.Tcm1 Var-Temp.Tb;Var-Output.Tcm2 Var-Temp.Tc;Var-Output.Tcm3 Var-Temp.Ta;break;default:break;}
}为了验证算法的正确性图1-8给出了SVPWM 算法的仿真结果。由图1-8(a)可知扇区N值为3→1→5→4→6→2且交替出现与表1-4所示的结果相同由图1-8(b)可知由SVPWM算法得到的调制波呈马鞍形这样有利于提高直流电压利用率有效抑制谐波。(a) 扇区计算结果(b) 切换点调制波Tcmp1、Tcmp2、Tcmp3波形图1-8 仿真结果1.2 基于SVPWM模块的仿真上一小节是根据SVPWM算法的基本工作原理搭建的SVPWM模块可使读者更加深入地了解SVPWM算法的工作原理和实现方法同时基于C语言的仿真具有移植到微控制器如DSP快无须修改等特点。另外MATLAB/SIMULINK内提供了SVPWM模块所在位置Simscape SimPowerSystems Specialized Technology Control and Measurements Library Pulse . Signal Generators SVPWM Generator (2-Level)。下面就该模块的参数设置作以详细说明。1、Data type of input reference vector (Uref参考电压矢量输入类型Data type of input reference vector (Uref参考电压矢量输入类型的下拉列表中包括3种类型Magnitude-Angle (rad)电压的幅值和相角、alpha-beta components静止坐标系下α-β分量和Internally generated内部模式。1 Magnitude-Angle (rad)电压的幅值和相角当选择Magnitude-Angle(rad)时SVPWM模块显示如图1-9所示。值得说明的是电压的幅值u采用的是标么值0 u l而非实际值电压的相角∠u的单位为弧度rad。图1-9 选择Magnitude-Angle (rad) 时SVPWM模块2 alpha-beta components静止坐标系下α-β分量当选择alpha-beta components时SVPWM模块显示如图1-10所示。需要说明的是静止坐标系下的α-β分量Uα、Uβ采用的同样是标么值而非实际值。图1-10 选择alpha-beta components 时SVPWM模块3 Internally generated内部模式当选择Internally generated时SVPWM模块显示如图1-11所示。采用该类型时不需要外部变量的输入只须在该界面对调制度、相位和频率进行设置。值得说明的是输出电压的相位Phase的单位是电角度°而不是弧度rad。图1-11 选择Internally generated 时SVPWM模块2、Switching pattern开关模式SVPWM 模块中包含两种开关模式Pattern #1和Pattern #2。实际上Pattern #1模式就是七段式SVPWM而Pattern #2模式就是五段式SVPWM关于两者的基本工作方式在1.1.6节已进行详细论述此处不再赘述。3、PWM frequency(Hz)PWM开关频率此处用来设置PWM开关频率三角载波fpwm它与开关周期Tpwm的关系为4、Sample time采样时间此处用来设置SVPWM模块的采样时间单位为秒s设置0时代表连续采样。最后使用SVPWM Generator (2-Level)模块搭建仿真模型如图1-12所示。参数设置为 Ualpha 0.7sin50ωtUbeta 0.7cos50ωtPWM开关频率为10kHz如图1-13所示。SVPWM Generator (2-Level)模块的输出P为6路PWM驱动波形为了验证正确性在输出端添加低通滤波器实际使用中无须滤波器其截止频率要设置在开关频率10kHz以下。图1-12 基于SVPWM Generator (2-level) 的仿真模型图1-13 SVPWM Generator (2-level) 参数设置SVPWM输出的6路波形为等幅不等宽的脉冲其经过低通滤波器滤掉开关频次的谐波后应该呈马鞍波状取Sa、Sb、Sc三路观测其相位互差120°如图1-14所示。图1-14 SVPWM三路驱动波形Sa、Sb、Sc滤波后的马鞍波文中涉及的仿真模型可在公众号 iFTrue未来已来 中获取在公众号后台回复以下关键字获取SVPWM仿真模型SVPWM模型