李逸飞,王秀莲
(沈阳理工大学自动化与电气工程学院,沈阳110000)
随着电力电子信息技术、微电子技术、新材料技术的迅猛发展,具有高速运算能力和强控制能力的DSP芯片在电机控制、逆变器等控制领域也得到了广泛的应用。DSP 同其他MCU 类似,其传统的开发方式一般可以分为两种:第一种方式是利用自身的汇编指令集编写源程序,再经过汇编器和连接器,然后进行汇编链接后生成目标可执行的代码;另一种方式是利用标准C/C++语言进行代码编写,然后再经过C/C++编译器、汇编器和链接器分别进行编译链接,最后同样生成目标可执行代码。这两种开发方式在较大的项目中,会使得开发人员必须要花费大量的时间进行代码的设计和编写,从而加大了产品开发难度和耗费了开发人员的精力,进而延长了产品的开发周期,最终影响了产品的开发效率。
为了降低代码编写难度,提高产品开发效率,Math Works 公司和TI 公司联合开发了一种C2000 系列的DSP 硬件支持包——Embedded Coder Support Package for Texas Instruments C2000 Processors。利用这个工具包,用户可以在Simulink 环境下搭建好控制系统的模型,然后自动生成DSP 的C 代码。
Simulink 是MATLAB 软件的扩展,它提供了一个动态系统建模、仿真和综合分析的集成环境,是MAT⁃LAB 最重要的组成部分之一。Simulink 是实现动态系统建模和仿真的一个软件包,MATLAB 语言与Simu⁃link 的区别主要在于,Simulink 是以模块为功能单位,通过信号线进行相互连接,它与用户交互接口是基于Windows 的模型化图形输入,其重点是使得开发者可以把更多的精力投入到构建系统模型划上,而不是语言编程上。
Simulink 是一个模块图形化环境,它提供了大量的系统模块,广泛应用在图像、航天航空、电力电子和嵌入式设计等方面,其中包括了信号、运算、显示和系统等方面的功能,可以创建各种类型的仿真系统,实现丰富的仿真功能。用户也可以定义自己的模块,进一步扩展模型的范围和功能,以满足不同的需求。这些模块懂得运行依托于Simulink 的结算期,包含了各种经典的数值分析思想和算法。为了创建大型系统,Simulink 提供了系统分层排列的功能,类似于系统的总体设计,在Simulink 中可以将系统分为从高级到低级的几个层次,每层又可以分为几个部分,各层子系统构建完成之后,将各层连接起来,然后构成一个完整的系统。模型创建完之后,启动系统的仿真功能来分析系统的动态特性,Simulink 内置的分析工具包括有各种系统线性化、仿真算法、寻求平衡点等,更令人满意的是,Simulink 完全无缝地融合到MATLAB 大环境中,使用M 语言就可以直接进行模型的建立、仿真、属性设置、在不同工作空间之间传递数据,还可以绘图与分析,仿真结果可以以图形的方式显示在示波器窗口,方便用户更加直观地观察系统的输出结果;Simulink 也可以将输出结果以变量的形式保存起来,随后输出到MATLAB 工作空间中以完成进一步的分析。
Simulink 支持多采样频率的系统,可以仿真庞大且复杂的系统。
本文中使用的MATLAB R2018a,该版本的进行自动代码生成前的配置更加人机友好,简化了很多低版本的繁琐配置。
DSP 也称数字信号处理器(Digital Signal Proces⁃sor),是一种具有特殊结构的微处理器。DSP 芯片采用的是哈佛结构,它的数据空间和存储空间是分开的。而MCU 采用的是冯·诺依曼结构。很显然,在运算处理能力上,MCU 不如DSP。DSP 具有专门的硬件乘法器,广泛的采用流水线操作方法,提供特殊的DSP 指令集,可以快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP 芯片一般具有如下特点:
(1)在一个指令周期内可完成一次乘法和一次加法。
(2)程序和数据空间分开,CPU 可以同时访问指令和数据。
(3)片内具有快速RAM,通常可通过独立的数据总线在程序空间和数据空间同()时访问。
(4)具有低开销或无开销循环及跳转的硬件支持。
(5)具有快速地中断处理功能和硬件I/O 的支持。
(6)可以并行执行多个操作。
(7)支持流水线操作,使取址、译码和执行等操作可以重叠执行。
DSP 芯片诞生以来,DSP 芯片得到了飞速的发展。DSP 芯片的高速发展离不开工艺的发展和产业化进程的不断加快。一方面得益于集成电路技术得到发展,另一方面也得益于巨大的市场。在近30 年的时间里,DSP 芯片已经在通信、信号处理、电机控制、电力电子逆变、雷达等许多领域得到了广泛的应用。
TI 公司生产DSP 芯片种类繁多,但依照面向领域的不同可以分成三大类:TMS320C2000 系列(实时控制)、TMS320C5000 系列(低功耗)和TMS320C6000 系列(高性能)。
(1)TMS320C2000 系列,称为DSP 控制器(DSP)。继承了FLASH 存储器、高速A/D 转换器、完备的通信接口及数字电动机控制的外围电路,适用于电动机、变频器、UPS、风能及光伏等需数字化控制的高速实时领域。
(2)TMS320C5000 系列,该系列是业界功耗最低的16 位DSO,主要应用于通信领域。
(3)TMS320C6000 系列,采用新的超长指令字结构设计的芯片,是TI 公司的高端系列产品,主要应用于数字通信、音频和视频技术领域。
本文采用具有浮点计算功能的TMS320F28335芯片。
F28335 的内部结构由4 部分组成:中央处理器CPU(即C28x+FPU)、存储器、系统控制逻辑及片上外设。F28335 的各部分通过内部系统总线有机统一起来,它的组成结构决定了该款DSP 在CPU 数据处理能力、使用灵活性和存储器容量、片上外设的种类和功能等方面都具有优秀品质。
(1)For Iterator Subsystem 模块是一个预先配置的Subsystem 模块,可以作为一个起点,用于创建在仿真时间步期间重复执行指定的迭代次数的子系统。
(2)Terminator,使用Terminator 模块终止输出端口未连接其他模块的模块。
(3)Constant 模块生成实数或复数常量值。
(4)Logical Operator 模块对其输入执行指定的逻辑运算。
(5)Unit Delay 模块按指定的采样期间保持和延迟输入。
(6)Lamp 模块显示指示输入信号值的颜色。
(7)Scope 模块显示信号波形。
首先,新建一个空的Simulink 模型,命名为28335_led 并保存,在模块浏览器中找到Constant、Logi⁃cal Operator、Unit Delay、For Iterator Subsystem、Out1 模块。其中,Constant 模块中的参数可以设置为任意整数,在这里取50;将Logical Operator 中的AND 改为XOR;双击进入For Iterator Subsystem 中,将In1 和Out1 删除,在加入一个Terminator 并与For Iterator 连接,如图1 所示。For Iterator 中的Iteration limit 参数控制LED 闪烁的频率,这里取3000000。
图1 For Iterator Subsystem配置
将所有模块连接,如图2 所示。至此,LED 闪烁的控制模块搭建完成。
图2 各模块的连接
在搭建完闪烁模型之后,现在Simulink 中仿真一下模型是否可以正常工作。加入Lamp 和Scope 模块。双击进入Lamp 模块,设置如图3 所示。
图3 Lamp设置
连接各模块如图4 所示。运行之后,Lamp 模块会进行红绿色的交替闪烁。
图4 连接方式
验证完模型功能之后,将Lamp 和Scope 模块删掉,加入Digital Output(C2833x)模块,与Logical Opera⁃tor 模块连接,如图5 所示。
图5 代码模型
打 开Model Configuration Parameters,选 择Hard⁃ware Implementation,在Hardware board 中选择TI Del⁃fino F28335。双击打开Digital Output 模块配置输出引脚,因为开发板的布线原因,这里使用GPIO23 引脚。
按照上述步骤设置完成之后,将开发板连接到主机上,然后点击编译按钮,生成代码的报告如图6所示。
代码生成完成之后,再用CCS 对其建立工程并编译,如图7 所示。
图8 测试结果
图7 CCS6.0编译界面
图6 自动生成代码报告
编译完成后进入调试状态,LED 会不停闪烁,如图8 所示。与Simulink 中仿真结果一样,说明自动生成的代码完全实现了模型中的所有功能。
这是Simulink 自动生成的引脚配置的代码:
可以看到,在引脚功能配置的时候,与传统配置方法一致,而且还会考虑到更加细节性的部分,比传统的编码方法的稳定性更高。
这部分代码的功能是控制LED 进行闪烁:
其中,闪烁的条件是判断LogicalOperator 里面的值,当其为1 时,LED 点亮;反之,LED 熄灭。
这是主函数部分代码:
自动生成的代码与我们一般的编写习惯相类似。
在使用Simulink 进行自动代码生成之前,一定要对DSP 已经有了一定的理解及对其的传统编程使用能力,以及各个寄存器的功能。如果在测试的时候用的是TMS320F281x 系列的DSP,一定要注意它的ccxml文件,需要在CCS 里配置好之后,然后导入到Simulink中。直接使用Simulink 自带的ccxml 文件,编译器会报错,无法通过编译。
对CCS 编译软件也一定要熟悉其操作过程,将CCS 和Simulink 两个软件结合使用时,对软件的操作能力也是有一定要求的。但是相对于直接对DSP 编写程序来说,还是相对要容易一些。
用Simulink 建立DSP 模型并直接生成C 代码的方法,简化了DSP 的开发过程,并且给开发人员提供了直观的可视化界面,使开发人员更容易对开发细节的把控,提升了开发的质量及效率。开发人员不需要写一行代码便可实现想要的功能。学习这种方法对广大DSP 应用开发人员具有较大的使用意义。