基于Matlab的TMS320LF2407程序快速设计
扫描二维码
随时随地手机看文章
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。该工具包
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。
[!--empirenews.page--]
点击看原图
步骤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等。 [!--empirenews.page--]
3 修改及完善程序
由Matlab直接生成的程序能够实现ADC转换及数字滤波功能,但是由于程序中使用了许多缺省设置,在运行过程中还存在一些问题。用上述方法生成的程序中,中断处理程序中只对定时器中断进行处理。当由于干扰信号引起其他中断时,会造成DSP停机,因此要在中断向量定义无效中断(_nothing),并在中断响应程序中添加中断服务程序。修改后的程序中,斜体部分是修改的代码。修改程序如下:
中断向量文件vectors.asm:
点击看原图
点击看原图
在ADC转换处理程序中,每次ADC转换结束后没有复位DSP的排序器指针。虽然程序中设定的是只进行一个通道的A/D转换,但结果却是16个通道的循环转换,造成数字滤波器的输人数据不正确,因此程序要作修改,在testadc_c中添加:
TestADC_B.C24xADC=MMREGS[RESULT0]>>6;/*A/D转换结果右移6位*/
MMREGS[ArN2TRL2]=MMREGS[ADCTRL2]l0X4242;/*复位排序器指针并清除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语言程序的设计,节省程序的编写及输入时间。