基于TMS320C2812的SVPWM算法的S-Function仿真实现
利用MATLAB仿真CCS算法的方法在很多文章中都有介绍,归纳起来主要有两类:一类是利用MATLAB/Simulink中的S-Function编写所需算法模块,仿真成功后将算法移植到CCS中建立新的算法工程;另一类是在MATLAB中建立仿真模型,然后通过CClink的直接代码生成法建立CCS工程文件。这两类方法都有各自的缺点。第一类方法只注重对算法思想的验证,要在CCS中实现却要经过很复杂的算法移植过程,增加了算法实现的难度。第二类方法避免了此类问题,而将MATLAB仿真模型直接生成CCS代码,省略了再移植的过程,然而这种方法形成的代码具有可读性差、缺乏优化、占用资源大等缺点,使得TMS320F2812芯片的内存利用率大大降低。结合这两种方法的优点和弊端,本文利用C-MEXS-Func-tion提出了一种全新的将CCS程序与MATLAB仿真联系起来的方法,实现了CCS程序到MATLAB仿真的简单移植。该方法高效、简单并且易于理解和实现,可以通过S-Function作为接口直接使用CCS编写的SVPWM程序在MATLAB环境下进行仿真,算法验证正确后不用再修改程序可直接在CCS中编译并下载到目标板使用。这就大大降低了仿真与实际应用之间转化的难度,也简化了软件人员在几种编程环境中反复修改程序的过程。
1 S-Function程序建立方法
S-Function有两种建立方式,一种是用M文件来实现,另一种是用C-MEX来实现。前者效率低下,但是开发速度快,可以方便调用MATLAB和工具箱函数;后者支持不同的编程语言,如:C、c++、Fortran等,运行速度快,满足实时性要求,可以实现M文件不能实现的许多功能,如复数的处理等。
考虑到基于TMS320F2812的SVPWM算法仿真对实时性要求比较高,且CCS工程是用C语言编写的,因此本文选用C-MEX形式来建立S-Function程序。在MATLAB的安装根目录matlabroot/simulink/src下有一个用C语言编写的C-MEX S-Function文件模板:sfuntmpl basic.c。该模板几乎包含了所有C-MEXS-function文件可执行的必需和可选的回调函数的基本结构,只需要进行少许改动,就可以实现各种功能的函数。
建立S-Function可以按以下步骤进行:
首先进行环境设置。初次使用C-MEX S-Function之前,需要在MATLAB中激活,可以在命令窗口键入mex-setup,然后根据提示设置编译器。
然后打开C-MEX S-Function文件模板,将模板另存为svpwm.c文件,然后再进行必要的设置,这样不会破坏模板,当需要其中的一些必要函数时还可以再查阅。模板中的第一行代码#define S_FUNCTION_NAME XXX是用来设置函数名的,这是调用函数时的唯一标识,这里可以将其改为#define S_FuNCTION_NAME svpwm,那么svpwm就是该函数的函数名。
最后编译动态链接库。S-Function函数编写完成后,需要在MTLAB中进行编译生成动态链接库与Simulink链接,这样才能在模型中调用S-Function模块。注意编写的文件与生成的文件以及建立的模型都必须在同一目录下。在MATLAB的命令窗口输入mex svpwm.c,这样就会在当前目录下创建一个svpwm.dll文件。在模型中加入S-Function模块,并双击它,在sfunction name一栏填入函数名svpwm。注意这个函数名要与接口程序中设置的函数名保持一致。这样就可以在模型中使用S-Function函数模块了。
2 实现CCS中SVPWM算法移植
2.1 SVPWM算法原理简单介绍
空间矢量调制(SVPWM)技术即是将3个互为120°的电压矢量投影到两相静止坐标系中,通过三相逆变器开关组合,合成一个空间电压矢量的方法。
三相逆变器电路如图1所示,用Sa、Sb和Sc分别表示三组开关的通断状态。采用180°导通方式,“1”表示上桥臂导通,“0”表示下桥臂导通。这样就形成了8种开关组合状态,分别是100、110、010、011、001、101、111、000。
每个开关序列对应一个基准电压矢量,按空间位置排列正好形成了一个六边形。其中,有6个有效电压空间矢量(V1~V6)和2个零矢量(V7、V8),选用对称的空间矢量调制序列以消除偶次谐波。具体开关状态Sa、Sb、Sc与电压矢量在两相静止坐标系中的关系以及各扇区和开关序列图如图2所示。
无论电压矢量落在哪个扇区,都可以用相邻的两个有效电压矢量和零矢量对其合成。这里以扇区3为例,Vref=Vα+jVβ,Vx、Vy代表相邻电压矢量(即V1、V2)。Tpwm是开关周期,To、Tx、Ty分别是零矢量、Vx、Vy的作用时间。当开关周期远小于信号周期时,在一个开关周期中可以认为电压矢量是不变的,即:
为了保证波形对称,把每个状态的作用时间一分为二,正如图2中的开关序列图所示,这样既能控制电压输出的大小,又能消除偶次谐波。
将每个扇区中各电压矢量作用时间都计算出来,按照图2所
TMS320C2812 S-Function 相关文章:
- TMS320C2812在无刷直流电动机控制中的应用(06-27)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)