摘 要: 随着数字芯片速度的提高和数字信号技术的发展,DSP被广泛应用于工业控制等领域,系统开发的效率得到普遍的关注,传统的MATLAB仿真与产品硬件实现相分隔的方式已经无法满足设计的需求。提出一种基于MATLAB的DSP实时控制软件自动生成方案,并通过Simulink模型自动生成TI C2812 DSP的目标代码的应用实例,验证了代码自动生成的可执行性。
0 引言
传统的DSP软件设计开发一般分为两个阶段:设计仿真和源代码开发实现[1]。设计仿真阶段根据系统开发的需要,以DSP算法研究与仿真验证为主,这阶段可以利用MATLAB的Simulink模块仿真来实现;源代码开发通常采用汇编指令或C语言编写源代码,由汇编器和连接器进行链接后生成目标可执行代码。源代码开发完成后,功能的实现主要在硬件电路板上来验证设计方案的正确性,对于软件开发者关于DSP数字芯片与硬件电路的原理有一定程度的要求,特别是各个寄存器的作用和存储空间的特性和扩展。这两个部分通常是在不同阶段相互独立地完成,因此大大增加了系统开发的时间,系统设计的实时性也不能得到保证。本文介绍了MATLAB中的MATLAB与CCS的接口和Embeded Target for TIC2000 DSP,提出了一种基于TI C2812的软件设计思路,实现将设计仿真和源代码开发在同一平台下开展,从而有效地将开发过程中的两大阶段有机地结合在一起,大大缩短了开发周期,并通过应用实例进行验证。
1 ETTIC2000概述
Embedded Target for the TI TMS320C2000TM为TI C2000 DSP实时控制软件的自动生成的模型仿真、源代码开发、目标代码自动生成、实时调试等各个环节都提供了技术方面的支持[2]。
1.1 ETTIC2000的功能和特点
ETTIC2000首先利用Real-Time Workshop从Simulink模型生成标准C语言程序代码,然后通过MATLAB Link for CCS Development Tools调用CCS开发工具,编译链接Simulink所生成的程序,自动生成目标板(C2812 Simulator)的可执行代码(.out文件),最后把生成的可执行代码加载到目标板中,并利用嵌入式对象对程序运行进行实时监控和调试。
Embedded Target for the TI C2000 DSP、Simulink、Real-Time Workshop、CCS和TI目标之间的关系如图1所示。
1.2 C281×DSP模块库
ETTIC2000提供了多个Simulink模块,以支持不同型号的DSP,在MATLAB窗口中执行命令C2000lib,就会显示对应型号的DSP芯片模块。其中,本文使用的C281×的各模块如图2所示。
2 MATLAB与TI CCS的接口
2.1 CCSLink的功能及特点
MATLAB Link for CCS Development Tools作为MATLAB的一个工具箱被集成在MATLAB中,可以支持CCS能够识别的任何目标板。利用此工具箱,将调用函数、读写存储器或寄存器中的数据、实时测试等工作统一在MATLAB平台下进行,把MATLAB和TI CCS及目标DSP连接起来。其功能图如图3所示。
2.2 CCSLink的连接方式
利用CCSLink提供的MATLAB函数可以完成MATLAB与TI CCS、目标板的存储器或寄存器的数据及信息的交换。
CCS IDE的连接对象用于创建CCS与MATLAB的连接。从MATLAB的命令窗中可以运行CCS IDE中的程序,向目标板的存储器或寄存器读取数据,检查DSP的运行状态,而且可以控制DSP上运行程序的起止。
在MATLAB环境中可以创建一个嵌入式对象访问目标板的存储器或寄存器中的变量,即把C语言代码中的变量作为MATLAB的一个变量处理。转变数据类型,创建函数声明,改变变量值,读取DSP中的数据与信息,所有这些操作都在MATLAB平台下进行。
在MATLAB中,对所有对象的操作方式是一样的,只是对应的属性及属性值不同而已。
3 应用实例
32位的TMS320C281×系列芯片融合了DSP和微控制器的最佳特性,能够完成64位的数据处理,专门的分支硬件减少了条件指令执行的反应时间,使该处理器能够实现更高精度的处理任务[3]。
在TMS320F281×DSP中,ADC模块是一个12位带流水线的模/数转换器,由16个结果寄存器ADCResult存放ADC的转换结果,转换的计算过程为:
本系统搭建的是一个由AD模块采集来的数字信号量来控制PWM输出的占空比的模型。通过读取AD转换的数据与信息,同时,利用示波器显示的PWM输出波形,分析由CCS实时控制的DSP代码自动生成的效果。
具体步骤如下:
(1)在MATLAB中的Simulink环境搭建模型如图4所示,选用ADC模块中A0通道,由PWM1通道输出结果,设置参数并进行仿真。
(2)配置CCSLink。 验证CCS是否在PC上安装并配置好,在MATLAB命令窗中输入命令:ccsboardinfo,则MATLAB命令窗中会返回图5所示的板卡信息。
图5证明CCS已经安装并配置好。CCSLink工作时CCS将自动启动。
(3)在Real-Time Workshop中设置编译链接(Build)选项。
指定ti_c2000.tlc作为系统目标文件(system target file)。设置好Build选项后,通过编译链接选项,Real-Time Workshop会自动产生实时可执行代码,同时,可通过设置将可执行代码自动加载到指定的目标板上并且开始运行。图6为MATLAB命令窗口显示。
(4)实时代码调试。
在MATLAB环境下编辑m文件,并运行以下代码:
cc=ccsdsp(′boardnum′,0,′procnum′,0)
//创建一个连接对象
visible(cc,1)//CCS IDE窗口在桌面上可见
linkinfo=info(cc)//测试DSP目标板的状态信息
projfile=fullfile(matlabroot,′work′,…);
projpath=fileparts(projfile);
open(cc,projfile)//加载工程文件
build(cc)//编译文件
load(cc,′.out′)//可执行文件加载到DSP中
run(cc)//运行
halt(cc)//停止
ddatv=read(cc,address(cc,′ddat′),′double′,2)
//访问嵌入在目标DSP存储器中的值
在MATLAB环境下完成了对工程文件的调入、编译,生成可执行文件并将其加载到DSP目标板。切换到已经打开的CCS界面,可以看到在MATLAB环境下已经完成了对CCS的各种操作。
(5)运行结果。
当由变位器给定模拟电压输入为1 V时,加载自动生成代码到DSP后,读取DSP寄存器的值如图7所示。
自动生成代码F2812.ADC=(AdcRegs.ADCRESULT0)>>4;之所以右移4位,是因为在级联序列发生器模式中,读取时,ADCRESULTn寄存器为左对齐,应向右平移4位后读取[4]。 结果寄存器存放的数字量与计算得出的理论值 1 355非常接近,如图8所示,验证目标板AD转换有效。
程序的目标板输出波形比较如图9所示。
图9证明了由MATLAB模型生成的代码是有效的,运行结果也与理论输出占空比近似,进而证明这种设计方法快捷、高效。
4 结论
应用MATLAB自动生成DSP代码的方案,有效地克服了传统DSP代码设计方法效率低、难度大等缺点,快速生成了标准化的C语言代码和DSP可执行文件,极大地缩短了代码的开发时间。实验结果表明,自动生成的代码运行效果良好,可以应用于项目的设计与实现,体现了方案的实用性与可行性。
参考文献
[1] 李利.DSP原理及应用[M].北京:中国水利水电出版社,2004.
[2] 李真芳,苏涛,黄小宇.DSP程序开发:MATLAB调试及直接目标代码生成[M].西安:西安电子科技大学出版社,2003.
[3] 苏奎峰,吕强,常天庆,等.TMS320281×DSP原理及C程序开发[M].北京:北京航空航天大学出版社,2008.
[4] 张雄伟,陈亮,徐光辉.DSP芯片的原理与开发应用[M].北京:电子工业出版社,2003.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。