引言
随着现代电力电子技术的迅猛发展,兼有高运算速度和强控制能力的DSP在逆变器、电机等电力电子设备的控制领域得到了广泛应用。通用DSP的源代码开发都可以采用两种方法:一种是直接利用其提供的汇编指令编写源代码,然后经汇编器和链接器进行汇编链接后生成目标可执行代码;另一种方法是利用标准C/C++语言编写源代码,然后经C/C++编译器、汇编器和链接器进行编译链接,最后生成目标可执行代码。这两种代码开发方法都使得开发人员不得不花费大量的时间在代码的编写上面,增大产品开发难度,延长产品开发周期,从而影响开发效率[1]。
Math Works公司和TI公司联合开发的工具包——Matlab Link for CCS Development Tools,已经能把Matlab和TI公司的DSP集成开发环境CCS(Code Composer Stadiu)及目标DSP连接起来。利用此工具可以像操作Matlab变量一样来操作TI DSP的存储器或寄存器,即整个目标DSP对于Matlab像透明的一样,开发人员在Matlab环境下,就可以完成对CCS的操作。Matlab Link for CCS Development Tools可以支持CCS能够识别的任何目标板,包括TI公司的DSK、EVM板和用户自己开发的目标DSP板。如果把Matlab Link for CCS Development Tools与MathWorks公司和TI公司联合开发的另外一个工具包——Embedded Target for the TI TMS320C2000 DSP Platform配合使用,则可以直接由Matlab的Simulink模型生成DSP的可执行代码,即在集成的、统一的Matlab环境下可完成DSP开发的整个过程。1DSP代码自动生成流程
首先,根据系统的设计思路在Matlab/Simulink平台下搭建系统模型(.mdl),仿真满意后通过Matlab提供的Real Time Workshop(RTW)生成面向TI编译器的工程文件代码(.prj),并进一步完成代码的编译,链接生成DSP可执行机器码(.out),最后下载到目标DSP板上运行,完成系统的开发[2]。
上述开发过程全部在Matlab/Simulink环境下进行,开发人员不需要写任何代码,只需利用Matlab的模型模块完成系统设计即可;而且开发人员在系统设计过程可对系统进行仿真验证,保证系统设计的正确性。图1为DSP代码自动生成的开发流程。
图1 DSP代码自动生成开发流程
2 三相异步电机转速控制系统的设计
本设计采用开环恒压频比(VVVF)与空间矢量脉宽调制(SVPWM)相结合的算法,驱动控制三相异步电动机。控制系统主要模块及其功能如下:
① RAMP_CNTL缓升缓降模块。该模块类似低通滤波器,实现给定信号的缓慢变化,避免信号的突变给电机造成冲击。
② V/F模块。基频以下,通过对定子电压幅值与频率的协调控制,保持定子磁通恒定,实现恒转矩控制,在低频段,系统要补偿定子压降;基频以上,保持额定电压,实现恒功率控制。
③ IPARK模块。该模块实现PARK逆变换,实现两相旋转坐标到两相静止坐标的转换。
④ SVGEN模块。该模块计算出应用SVPWM产生给定定子参考电压所需的3个比较值Ta、Tb、Tc,再经DSP的比较单元,产生控制功率器件的开关信号。
⑤ PWM模块。配置该模块,控制DSP PWM的工作模式,包括载波频率、有效电平、工作时钟频率等。
图2为控制系统的原理框图。
图2 电机控制算法框图
3 控制系统的实现
3.1 Matlab/Simulink平台下系统的建模及仿真
根据系统控制算法,利用Matlab Link for CCS Development Tools工具包和Simulink常用工具包的功能模块,搭建控制系统的仿真模型,如图3所示。
建模过程中要处理好数据格式的设置。TMS320F2812是一款定点DSP,为了能进行浮点运算,一般会在DSP数据处理中使用Q格式。所以在建立模型的时候就要设置好数据格式,尤其要注意那些和前后两级模块都有连接的数据格式的设置。为方便处理,这里将所有可设置的数据都配置为Q24格式。在空间矢量发生模块和C28x PWM之间要加一个数据转换模块,因为空间矢量发生模块输出是一个归一化的Q24数据,而C28x PWM的默认输入数据格式是16位整数,所以直接将这两级连在一起可能会导致出错。转换公式为:W(1,2,3) =T(a,b,c) &pide;224 ×216
根据实际的电路配置C28x PWM参数,可以设定合适的死区、PWM信号的有效电平等。
最后要注意的是,一定要加入F2812 eZdsp模块。虽然该模块对模型的仿真无影响,但是在实现代码自动生成的时候需要通过模块进行相关参数的设置。
完成系统建模后,对模型进行仿真验证。试验中,将给定的频率分别设置为0.5 Hz和5 Hz两种情况。根据理论设计,在给定输入条件下,空间矢量发生模块的输出Ta、Tb、Tc对应为0.5 Hz和5 Hz的马鞍波。Ta仿真输出波形如图4所示。通过观察对比,验证了模型的正确性。
3.2 DSP代码的直接生成
下面介绍通过Matlab/Simulink仿真模型实现DSP代码直接生成的方法。
(1) 配置F2812 eZdsp模块主要配置信息包括BuildAction和DSPBoardLabel,其中BuildAction配置代码生成的功能。有4种功能模式可供用户选择:Code模式,只生成C代码;Project模式,只生成工程文件;Build模式,生成工程文件并编译、链接;Build and Load模式,生成工程文件,编译链接并下载到目标板。DSP BoardLabel配置用户所用仿真器型号,如果配置型号不对将无法生成代码。此处所用仿真器为F2812 XDS510 Emulator,选择Build and load功能模式。
(2) 配置RealTime Workshop
进入Simulink的SimulationConfiguration Parameters,单击RealTime Workshop进入配置界面。具体配置
图3 控制系统仿真模型
图4 Ta仿真输出波形
如下:
System target file: ti_c2000_grt.tle。
Make command: make_rtw。
Template makefile: ti_c2000_grt.tmf。
RealTime Workshop的具体配置方法可参考参考文献[3]。
(3) 代码自动生成
在RealTime Workshop界面点击generate code按钮。Matlab将根据设置自动生成DSP工程文件自动连接打开CCS开发环境,并且对C代码进行编译、链接,下载到目标板。通过CCS IDE可以看到,RTW代码的生成过程中建立了Project.prj工程文件,其中包括:源文件、库文件、链接文件等。
(4) 代码验证
通过示波器观察DSP的PWM1、PWM3、PWM5引脚的输出波形(接示波器脚针前PWM信号要先经过低通滤波器)。理论上,经过低通滤波器后,PWM输出信号应该为频率与给定频率一致的马鞍波。图5为通过示波器观测到的PWM1引脚的波形输出,根据输出波形可判断代码的正确性。
最后,进行带电机运行测试。实验中,使用110 V交流电供电的80 W三相异步电动机。运行实验中,电机转速运行平稳,变速平滑,控制系统达到预期设计要求。
由于生成的代码是C代码,因此在后期,还可以根据需要方便地修改生成的代码,完善设计。
图5 PWM1输出波形
4 结论
通过上述例子,验证了通过Matlab/Simulink直接生成DSP代码开发方法的可行性。采用这种开发方法,开发人员不需写一行代码就可实现DSP系统的代码开发,极大地减轻了开发人员的工作负担,提高了工作效率。学习使用该开发方法对广大DSP应用开发人员具有很大的实用意义。