查看完整版本: 基于Matlab的TMS320LF2407程序快速设计

liyf 发表于 2014-10-5 12:51:55

基于Matlab的TMS320LF2407程序快速设计

基于Matlab的TMS320LF2407程序快速设计

摘要在Matlab/Simulink环境下,用图形化的方式设计DSP程序,可简化程序的设计。利用Embedded Targetfor T1 C2000 DSP工具包,设计DSP的ADC转换程序;利用Simulink的数字信号处理工具包,设计FIR滤波嚣进行滤波处理;给出在修改生成的C语言程序时如何使DSP能正确运行。设计的程序在TM$320LF2407A处理器上运行正确。
关键词 数字信号处理 Matlab Embedded Target for TI C2000 工具箱 FIR滤波器   TMS320LF2407是TI公司主推的一种高性能、低价格DSP处理器,其处理速度达到30 MIPS,片内处理集成RAM、Flash及定时器外,还集成了A/D转换器、PWM控制器及CAN总线控制器等模块,特别适合于电机、电源变换等实时要求高的控制系统。但是通常设计DSP程序的方法是,在DSP的集成开发环境CCS中用C语言设计,需要花费大量的时间用来编写和输入程序代码。在Matlab中用图形化的方式设计DSP的程序,能够缩短产品的开发时间。

1 Embedded Target for T1 C2000 DSP介绍
    目前,新版本的Matlab软件(Matlab7.O)已经集成了TI公司C2000、C5000、C6000系列DSP的开发工具包,可在Matlab/Simulink环境中用图形化的方式进行DSP的设计及仿真验证。并能将设计的图形文件(.mdl)直接转换成C语言程序。其中C2000系列的开发工具是EmbeddedTarget for TI C2000 DSP。该工具包是TI公司与Math—Works公司共同开发的产品,在Matlab/Simulink中嵌入了eXpressDSP工具箱,支持C24x及C28x系列的DSP处理器。在C24x系列DSP工具箱中,包含DSP处理器中的模/数转换(ADC)、CAN发送及接收、PWM控制等模块。用户可以在Matlab中调用这些图形化的功能模块及Simulik中的其他模块建立数字信号处理的模型,并可以对模型进行仿真验证,然后生成TMS320C2000的C语言代码及CCS的工程项目文件,在CCS中经修改、编译后就可以下载到DSP目标板中运行。
2 ADC转换及FIR滤波处理程序的设计
    以下是用Embedded target for TI C2000工具包设计ADC转换及FIR滤波的步骤。

    步骤1,在新建的Simulink文件(.mdl)中,放入C2000 Target Preferences中的LF2407 eZdsp功能块,用于参数的初始化设置。对话框设置如图1所示。其中DSP定时器的时钟比例因子(Timer Clock Prescaler),可以选择I~128,则相应的定时器采样时间为:
   

    式中Timer Period是DSP的最大时钟计数周期,LF2407是16位定点处理器,所以Timer Period数是216-1。图1中设定的Timer Clock Prescaler数值是2,当LF2407的工作频率(CPU Clock Speed)为40MHz时,由上式计算出的定数器的采样时间是0.003 2 S。由于数据处理需要占用一定的运行时间,所以要通过试验选择适当的定时器采样时间。


    实现A/D转换的功能块是C24x ADC,其参数设置如图2所示。A/D转换通道可以选择模块A、B中的任一个通道,也可以选择多个通道,A/D转换的采样时间设置为64/80 000。

    步骤2,设计FIR滤波器。在Simulink的信号处理工具箱(Signal Processing Bloekset)中,将滤波器设计专用工具(FDAToo1)放入文件中,双击图符,弹出图3所示的滤波器设计对话框。

    在图3中,选择滤波器类型为FIR低通滤波器,采样频率为6kHz,低通频率为1kHz,截至频率为2 kHz。先点击对话框中的Design Filter,然后再点击图3中实现模型(Realize Model)图标进入模型实现对话框,选择Over-write generated“filter”block,则在设计框图中生成一个名称为“Filter”的FIR滤波器的功能框图,再将原先放入的FDATool图标删除,将Filter连接到图中,完成的设计如图4所示。


    图4中添加的增益模块(Gain)是为了实现数据类型的转换。由于ADC转换输出的是16位整型数据,而滤波器的输入需要双精度浮点数据,因此Gain的数据类型参数(Signal datatypes)设为float(“double”)。Gainl是将浮点数转换为整型数,因此数据类型参数设为uint(16)。图4中添加寄存器(C24x To Memory)模块是为了使设计完整。在生成的C程序中,增益模块Gainl的输出是rth-Gainl,可被其他应用程序调用。

    步骤3,将图形文件生成C程序。在图4中,运行Simulation菜单下的Configuration Parameters项,弹出配置对话框,选择其中的Real-Time WorkShop项,点击Build按钮,则将图4的框图转化为TI C2000DSP的C语言代码,并自动调用CCS2软件编译运行该程序。生成的C语言程序包括:中断向量文件vectors.asm、中断服务程序MW_c24xx_csl.C、ADC转换控制testADC.c、主程序TestADC_main.c等。
3 修改及完善程序
    由Matlab直接生成的程序能够实现ADC转换及数字滤波功能,但是由于程序中使用了许多缺省设置,在运行过程中还存在一些问题。用上述方法生成的程序中,中断处理程序中只对定时器中断进行处理。当由于干扰信号引起其他中断时,会造成DSP停机,因此要在中断向量定义无效中断(_nothing),并在中断响应程序中添加中断服务程序。修改后的程序中,斜体部分是修改的代码。修改程序如下:

    中断向量文件vectors.asm:
   
   

    在ADC转换处理程序中,每次ADC转换结束后没有复位DSP的排序器指针。虽然程序中设定的是只进行一个通道的A/D转换,但结果却是16个通道的循环转换,造成数字滤波器的输人数据不正确,因此程序要作修改,在testadc_c中添加:
    TestADC_B.C24xADC=MMREGS>>6;/*A/D转换结果右移6位*/
    MMREGS=MMREGSl0X4242;/*复位排序器指针并清除A/D中断标志*/

    如果需要通过t/o端口输出结果,则可以在testadc_c中定义一个I/o(portl00),然后将FIR滤波后的数据rtb-Gainl输出,程序如下:
   

4 试验结果及结论
    由上述方法设计的程序在TMS3201LF2407A处理器上能正常运行。试验结果证明,采用FIR滤波后,ADC转换的抗干扰能力有了明显的提高。用Matlab快速建立TI DSP模型及直接生成C语言程序的方法,简化了DSP软件的开发。在Embedded target for TI C2000工具箱中还包含其他工具,如PWM控制、CAN总线控制及通用I/O控制等。利用这些工具与Simulink中的其他工具相结合,能够完成复杂功能的DSP程序设计,并且只需进行少量的修改,就可以实现功能正确的C语言程序的设计,节省程序的编写及输入时间。

李小路 发表于 2021-6-30 17:24:20

谢谢分享!:D
页: [1]
查看完整版本: 基于Matlab的TMS320LF2407程序快速设计