基于MAST语言的虚拟数字信号处理器
2011-02-27谢银银裴雪军
谢银银,裴雪军,康 勇
(华中科技大学电气与电子工程学院,武汉 430074)
引言
Saber[1]软件是一个功能强大的仿真软件,其仿真器采用的算法可极大地提高仿真计算收敛性,缩短仿真时间。另外,Saber还提供了适合于建立混合仿真模型的硬件描述语言——MAST语言[2-5],它不仅可以建立模拟元件的模型,还可以建立数字元件的模型,包括电、机械、光和流体等,用户可以直接建立满足自己需要的元件模型。相比MATLAB[6],Saber软件具有更丰富的器件库,支持多种分析,可考虑器件非理想因素,使得仿真结果更加真实可信,因此在元件级的电路仿真领域得到了广泛应用。在电力电子产品设计之初,若利用Saber仿真软件对电路及其控制进行仿真验证,可以及早地发现电路设计中存在的问题,大大缩短开发周期。
目前数字信号处理器(DSP)[7]已成为电力电子电路数字控制中的核心部件。然而,在利用Saber仿真软件对DSP控制的电力电子系统进行仿真建模的时候,存在若干问题。如图1(a)所示,首先需要在Saber仿真环境中搭建主电路与控制电路的仿真模型。由于Saber软件中关于DSP芯片的仿真模块并不多,因此一般要用各种已有的分立模块搭建实现DSP的功能。另外,注意到实际的系统是DSP控制的离散数字系统,在仿真环境中调试完毕后,还需要进行参数的离散化与编程实现,因此最终的实验结果将与仿真结果有较大的误差。为此,需在Saber仿真环境中重新进行参数调整。如此反复,从而增加了开发周期。
为了克服上述设计方案的缺点,人们提出了改进的设计方案,利用MATLAB强大的控制工具箱实现控制功能,充分利用了两者的优点而避免了各自的缺点,文献[8]通过Saber与MATLAB进行联合仿真。如图1(b)所示,利用Saber组建主电路,利用MATLAB组建控制电路;另外,利用Saber仿真软件中提供的MAST编程语言,可以直接编程实现控制功能,或是以MAST语言为对外接口,进一步调用外部程序(如C语言)来实现复杂的控制方案,如图1(c)所示。这些改进方案避免了在Saber中用分立元件搭建控制电路,因此大大缩短了建模和仿真时间。然而,上述改进方案通用性不强(针对不同主电路要编写不同的控制程序),仿真调试完毕后仍需离散化并需转换成DSP可运行的程序。
为改进上述设计方案的缺点,本文利用Saber仿真软件自带的MAST语言编写了一个虚拟的数字信号处理器(DSP)模块。本文以DSP中的事件管理器的实现与控制为例,说明该虚拟模块的设计方法及工作原理。
图1 传统的DSP应用系统设计流程
1 改进的DSP应用系统设计流程
本节以Buck电路为例说明本文提出的电路仿真方法。
如图2(a)所示,对于一个 DSP控制的BUCK电路,其包括了BUCK主电路和DSP控制电路两部分。控制电路从BUCK主电路的输出电压中得到反馈信号,通过DSP内部的A/D转换模块转化成数字量,该数字量将作为PI调节器的输入,并通过一定的算法得到输出的控制量。该控制量将送入DSP的事物管理器模块,以产生占空比可变的脉宽信号,用于驱动主电路的MOSFET。DSP的上述功能均通过在CCS中编写不同的程序并烧写至DSP中实现。在传统的仿真验证方法中,BUCK主电路的仿真可以方便地用Saber软件中自带的模块来搭建,但DSP及其程序所实现的功能则要利用各种引言中提出的不同的方法来代替。因此,设计者无法直接验证所设计的程序是否正确与有效。
图2 Buck电路应用系统设计流程
为解决上述问题,本文提出的改进型仿真方法如图2(b)所示。BUCK主电路仍然利用Saber自带的模块来搭建;同时利用MAST语言进行编程,在Saber仿真环境中同时实现DSP中的A/D转换、事件管理器的功能。注意到真正的DSP中的事件管理器与A/D转换模块一旦设定后将以一定的模式进行工作,因此这两个部件的功能利用MAST语言编程直接实现;而实现DSP中的PI控制算法是通过CCS中程序来进行实现的,因此该虚拟DSP中还包括了一个可实现直接调用CCS中PI控制算法程序的模块。通过该改进仿真方法,可以直接在Saber环境里对BUCK主电路的运行状态与CCS中的程序的控制效果进行仿真验证;得到较为满意的结果之后CCS中的程序不经过任何修改,直接进行编译后烧写到真正的DSP中,对实际主电路进行控制。
该改进仿真方法有如下优点:
(1)参数设计、控制器设计及程序调试的过程均可以在Saber中仿真完成,编写的程序在仿真中得出满意的效果后,可直接应用于实现的系统。
Performance of liquid whitening agent CBW-04 and its application in laundry detergent 1 24
(2)该虚拟DSP可作为一个标准的仿真部件,和真正的DSP一样,可以通过编写不同的程序,使该虚拟DSP实现不同的调制和控制方法。
2 MAST语言实现虚拟的DSP
2.1 用MAST语言实现事件管理器功能
DSP中事件管理器的一个重要功能是通过设置相关的寄存器,发出期望的驱动波形[9]。相关的寄存器有周期寄存器、比较寄存器、通用定时控制寄存器、比较控制寄存器等等。而MAST语言有自带的事件驱动函数可以实现该功能:
schedule_envent(time,state_var,values)其中:time为指定时刻;state_var为指定变量;values为指定变量的值。
以图2中BUCK电路所用到的连续递增模式的产生为例。定时器计数器计数值T1CNT按图3所示的阶梯式连续递增计数。
事件管理器的功能可以用下面的MAST语句实现:
其中,cycle_end是一个周期结束下一个周期开始的标志位;b对应于计数器的值从0增加至T1CMP所需要的时间;c对应于计数器的值从0增加至T1PR所需要的时间:
根据式 (1) 计算得到 b,MAST语句 schedule_event(time+b,dpwm1,l4_1),到b时刻时将PWM波置为高电平。在实际DSP里,计数器计数值T1CNT计数到T1CMP时,发生匹配,PWM输出信号反转。
MAST语句 schedule_event(time+c,cycle_end,~cycle_end),使得c时刻即一个周期结束时,将标志位cycle_end的值取反,语句when(event_on(cycle_end)),表示当cycle_end的值有变化时,开始执行下一个时刻的事件,即执行语句schedule_event(time+b,dpwm1,l4_1)。在实际DSP里,当计数器的值(T1CNT)计数到周期寄存器的值(T1PR)之后,计数器的值清零,置位下溢中断标志而后继续递增计数,如此循环。
用MAST语言实现事件管理器功能,生成虚拟DSP模板。该MAST语言也可以实现其他情况的PWM波,比如,连续递增计数模式下的低电平有效或者连续增/减计数模式下的高有效或低有效。图3(c)是用MAST语言实现递增计数模式且高电平有效时的PWM波。
图3 连续递增计数模式下的驱动波形
综上所述,MAST语言可以模拟实际DSP发PWM波的功能。
2.2 MAST语言调用VC++里的程序
由于上述的MAST语言只能实现虚拟DSP发PWM波的功能,不能体现控制器的作用,因此MAST语言需要调用控制器程序,该程序需在VC++[10,11]里编译。在VC++里新建一个工程,如图4所示,在工程里新建一个以cpp为后缀的文本,编写C程序,在定义变量名时,需要采用结构体和指针对事件管理器的相关寄存器进行预处理,使其能等效于DSP的相关寄存器。将设计好的控制器数字化转化为C代码,在VC++里编译,编译成功后会生成一个dll文件。dll是一个可执行的二进制文件,将该文件与MAST编写的模板放在同一文件目录中,在MAST语言的模板体里编写语句foreign Name,成功地调用外部VC++里的程序。
利用Saber搭建的主电路,其输出电压V0作为虚拟DSP模板的输入,在VC++里,语句V0=in[0]表示将输出电压调入VC++里并作为控制器的输入(其中in[0]是MAST语言传递给VC++的第一个数据),通过一定的算法得到输出的控制量,在此文中指的是比较寄存器的值T1CMP,将VC++编译,生成一个dll文件,在MAST语言的模板体里编写语句foreign Name,成功调用该文件,将T1CMP的值赋给MAST语言,再在MAST语言模板里,根据式(1)计算得到b。同理,将T1PR的值赋给MAST语言,根据式(2)计算得到c。
通过dll文件实现MAST与VC++的接口技术及其混合编程。MAST语言里的语句:(out[0],out[1],out[2],out[3]…)=Name(in[0],in[1],in[2],in[3]...)(其中out[0]是VC++传递给MAST语言的第一个数据),实现MAST与VC++间的数据传递,从而构成闭环系统。这种方法极大地提高了开发效率,缩短了开发周期,同时也有利于提高软件质量。因此,dll文件是MAST语言与外部程序连接的桥梁。
用MAST语言编写代码虚拟DSP事件管理器的主要功能,构造了系统的核心模块,实现闭环控制策略。这样,数据直接在Saber与VC++之间进行传递,使系统工作在统一的仿真环境里。若把很多通用的功能放在dll中,可以供多个应用程序调用,不仅大大的减少外部存储空间的占有量,而且能实现代码的共享。
图4 MAST语言调用VC++里的程序
3 仿真和实验结果
Saber里的元器件搭建的主电路接近实际主电路,所以直接用Saber里自带的模块搭建主电路,以Buck电路为例,如图5所示,用Saber自带的模块搭建主电路,编写MAST语言实现虚拟的DSP,在VC++里编写控制器的C程序,然后MAST语言调用该程序,这样,MAST与外部C语言联合起来生成控制模块,在Saber环境下仿真整个系统,主要技术参数:输入直流电压40~65 V,输出为30 V,滤波电感0.2 mH,滤波电容47 μF,开关频率为24 K。在t=0.2 s时,负载由 40 Ω 切到 10 Ω。
图5 用Saber仿真Buck电路闭环系统
本文设计了两种控制器来验证该方法。控制器1是简单的PI调节器,其表达式为:
如图6所示。其中,当直流输入电压为65 V时,其对应的仿真和实验波形为图 6(a)、(c),由仿真和实验波形可知,系统达到稳定后0.2 s,将负载由40 Ω切到10 Ω时,仿真得到的输出电压与实验得到的输出电压瞬间跌落都是10 V,经过约20 ms的调节时间,系统再次达到稳定,仿真波形和实验波形基本一致;当直流输入电压为50 V时,其对应的仿真和实验波形为图 6(b)、(d)。由仿真和实验波形可知,系统达到稳定后0.2 s,将负载由40 Ω切到10 Ω时,仿真得到的输出电压瞬间跌落8 V,而实验得到的输出电压瞬间跌落9 V,经过约20 ms的调节时间经过约20 ms的调节时间,系统再次达到稳定,仿真波形和实验波形基本一致。控制器2是一个较复杂的二阶控制器,其表达式:
图6 控制器1下的仿真和实验波形
图7 控制器2下的仿真和实验波形
由图7可知,仿真波形和实验波形基本一致。
综上所述,采用MAST语言生成模拟的DSP模块去控制仿真电路的效果等同于采用真正的DSP控制实际电路,即能准确模拟实际系统的特性,设计及试验的过程可以在仿真软件中完成。这种方法既能有效地控制实际系统又能大大地缩短设计与调试周期。
4 结论
本文采用MAST语言生成了虚拟的DSP模块,只需将设计在Saber软件中验证。在Saber软件平台上,实现了Buck电路的系统仿真。仿真结果和实验结果表明,该方法简单、可靠,能准确模拟实际系统的特性。设计及试验的过程可以在仿真软件中很快地完成,取代了传统的硬件调试过程,可以较快地给出满意的设计结果,大大地缩短设计与调试周期。该方法可以拓展到用于各种电源电路中,具有广泛性和普遍性。因此,基于MAST语言的虚拟DSP实现方法对于控制模型仿真来说,具有重大的理论意义和一定的实际应用价值。
[1] 李晶,刘进军,王兆安,等.基于saber的风力发电系统建模及仿真分析 [J].太阳能学报,2008,29(12):1471-1476.
[2] 管福初,钟炎平.基于Saber的空间矢量PWM实现方法[J].空军雷达学院学报,2010,24(3):203-206.
[3] 吴俊强,曾国宏.“交直交”电力机车saber仿真方法[J].铁路计算机应用,2005,14(1):7-8.
[4]Viach M.Modeling and Simulation with Saber[C].ASIC Seminar and Exhibit,1990.Proceedings,Third Annual IEEE,T/11.1-T/11.9.
[5]Kolessar R and Nee H-P.A New Physics-based Circuit Model for 4H-SIC Power Diodes Implemented in Saber[C].APEC,2001,(2):989-994.
[6]Gilbert Sybille,Hoang Le-Huy.Digital Simulation of Power Systems and Power Electronics using the MALAB/Simulink Power System Blockset[C].Power Engineering Society Writer Meeting,.IEEE.2000,(4):2973-2981.
[7] Rahman M F and Baburaj K V.A DSP Laboratory Platform for Teaching Power Electronics and Drivers[C].Power Electronic Drivesand Energy SystemsforIndustrial Growth of International Conference,IEEE,1998, (2):751-756.
[8]Zhenhua Jiang,Roger Dougal.A Novel Approach to Simulating Power Electronic System by Embedding MATLAB Objects into Saber [C].IEEE ICECA,Wuhan,China,2001.
[9] 苏奎峰,吕强,常天庆,等.TMS320X281X DSP原理及C程序开发[M].北京:北京航空航天大学出版社,2008.
[10]Zhang Sijin,Wei Ming,Liu Yan-an.The Weather Radar Product Synthetic Programming by VC++&MATLAB[C].CISE,2009.
[11] Fu Hudai,Wang Hua,Yang Wei.Applocation of Mixed Programming between MATLAB and Visual C++on Circles Detection[C].IHMSC,2009.