Matlab-Simulink的DSP代码生成
- 格式:pdf
- 大小:444.67 KB
- 文档页数:15
在simulink下开发dsp首先以matlab下的help里的一个例子来说明在simulink里仿真的电路转换为ccs里的c语言程序。
下面的例子主要功能是应用ad转换模块采集的信号来控制输出的pwm波形:原理图形如下:上述模块可以在simulink下的target for c2000的c2000 target preferences和c281x chip support 里找到。
其中F2812 eZdsp可以配置使用的dsp芯片以及相关的存储器映射和外围设备。
其双击打开为:ADC模块的初试化配置为:PWM模块的配置为:本例仅仅对采集进来的信号做了放大的作用,故只用了一个放大器。
在此基础上,打开窗口菜单的simlation里的configuration parameter,对其里的各个参数进行配置如图:首先对solver进行配置:其次是硬件配置(hardware implemenlation):这里最重要是对real-time workshop的配置:里面的配置如图:在以上配置好之后,确定并按ctrl+b,计算机将会在ccs环境下自动生成c语言代码。
如图:以上是基本的操作流程.。
个人的理解、体会及问题:整个过程是matlab里的embedded target for the ti tms320c2000 dsp platform模块,简称为ETTIc2000.此模块利用real-time workshop通过ccslink模块直接将simulink模型生成c语言代码。
通过学习发现我们可以单独的将几个模块放在一起,中间不做任何连接,也可以运行生成代码,这样在模型用simulink很难搭建情况下,我们可以省去编程里复杂的初始化,应用此系统进行初始化,之后再进行算法编程。
在学习过程中的问题:(1)在对configuration parameter里的solver设置时,为何要用固定步长和离散的,起初以为是采样的原因,之后发现没有ADC 转换时也为相同设置,其他均会出错。
Simulink代码⾃动⽣成(⼆)前⾯⼀篇介绍了Simulink代码⾃动⽣成的基本步骤,虽然⽣成了符合模型逻辑的代码,但有些部分还需要进⾏进⼀步优化才能更便于我们使⽤和代码的集成编译。
这⼀篇将从实⽤的⽬的作为出发点,将模型⽣成代码植到51单⽚机上,周期的点亮板⼦上的LED发光⼆极管。
在移植的过程中,我们在根据需求对之前模型进⾏优化Matlab版本:R2018B⼀、软件的设计思路上⼀篇中实现的计数器的模型,当计数使能时模型每运⾏⼀次计数器的值加1,当计数器达到设定⽬标值时,计数到达标志位置位。
如果我们将该计数模块放在10ms周期任务中运⾏,设置计数⽬标值为100,当计数到达标志位置位时刚好1s时间到。
我们可以以此为基础,使得LED发光⼆极管的状态每隔1s时间进⾏翻转⼀次。
计数模块输⼊使⽤了TarVal、InitVal、B_Init、B_Calc等变量,我们将这些变量在bsp_led.c模块中定义,bsp_led.c与⽣成代码TimerCnt.c之前的变量关系如下图所⽰:bsp_led.c是与底层有关,通过⼿写实现的。
其中实现了有两个函数,⼀个是bsp_led_initialize⽤于初始化时相关变量,另⼀个是bsp_led_10msTrg每10ms周期调⽤⼀次。
两个函数中的内容如下:void bsp_led_initialize(void){TarVal = 100;InitVal = 0;B_Init = 0;B_Calc = 1;}void bsp_led_10msTrg(void){if(B_En == 1){led = ~led;B_Init = 1;B_Calc = 0;}else{B_Init = 0;B_Calc = 1;}}bsp_led_initialize:设置计数器⽬标值、计数初始化设定值、使能计数bsp_led_10msTrg:检测计时时间到让LED状态翻转,初始化计数模块。
matlab生成DSP可执行算法的研究编写:徐鹏利用RTW-EC(Real-Time Workshop Embedded Code)等工具为用户算法自动生成嵌入式代码,这是一种高效、实用的方法,他的核心思想是让工程师把主要精力集中于算法的研究上,把枯燥、困难的代码编写工作留给计算机自动完成,这样可以大大缩短产品的开发周期,降低市场风险。
目前matlab主要支持的处理器有:TI几乎全系列的DSP、X86架构等处理器,提供几乎全部的驱动,使得开发DSP不需要在CCS中编代码,非常方便做算法。
下面我以2阶倒立摆的LQR(最优化控制)为例子,介绍一下matlab 自动生成dsp全部代码、工程的过程:第一步:安装CCS v3.3,usb100仿真器驱动,配置CCS等,见附件视频。
第二步:安装matlab,最好安装2008b及以上版本,这里我用的是matlab2010b。
第三步:建立simulink模型,我们知道,倒立摆有两个角度,分别为主动臂和从动臂,这两个角度用位置式编码器来采集,而主动臂由一个直流电机驱动,直流电机驱动器输入需要-10伏到+10伏,以控制电机的正转、反转。
点击,打开simulink。
新建一个model。
在simulink库中找到,选中其中的,然后看右边的框,选择,添加到model中。
配置,双击此图标,出现配置如上,因为我们使用的是Tms320F2812这款DSP。
这是配置模块生成代码的目标dsp的型号,以便生成相应的DSP代码,它本身无连接线,放在model中即可。
下面我们使用DSP的QEP及通用IO来获取我们想要的通道及数据,QEP是DSP中可以计算电机转子转的脉冲数,只要将它取到,除以转一周的总脉冲数,再乘以π,就转换成角度了。
下面我们把SIMULINK中打包好的dsp外设模块拿进来,在simulink库中刚才位置找到,看到有c2812,双击可以看到很多2812的外设,这些都可以直接使用。
本操作步骤依据的是NXP-FRDM-K64F。
一、首先要安装对应板子的硬件支持包,具体步骤如下:
1.启动MATLAB
2.找到主页的“附加功能”,如图1
图1
3.在附加功能的下拉菜单中选择最后一个“获取硬件支持包”,如图2
图2
4.然后在搜索框内打字“FRDM-K64F”搜索,之后会出现对应的硬件支持包,如图3
图3
5.点开之后下载安装即可,如图4(安装完成后“安装”按钮会变为“管理”),如图4
图4
6.安装过程会出现一个对话框,每完成一项会有标志,等待一会即可。
二、代码生成
1.首先打开simulink,打开library browser,如图5
图5
2.在目录检索中会找到NXP FRDM-K64F 库,如图6
图6
3.进行编程,我这里举一个简单的例子,点亮一个灯。
只需简单拖动模块更改参数即可。
如图7
图7
4. 接下来可以参考网址
https:///help/supportpkg/freescalefrdmk64fboard/examples/gettin
g-started-with-simulink-coder-support-package-for-nxp-frdm-k64f-board.html 至此,一个简单的代码生成结束了。
MATLAB平台下DSP代码⾃动⽣成技术研究及实现毕业设计(论⽂)摘要传统的DSP设计开发流程分为开发设计和产品实现两个环节,这样的开发流程存在许多问题,针对DSP编程难度⼤,耗时长的问题,给出了⼀种综合运⽤Matlab软件、Code Compose Studio(CCS)软件及其内嵌⼯具和连接软件进⾏⾃动代码⽣成的⽅法。
本⽂重点研究TMS320F2812 DSP的⾃动代码⽣成⽅法,基于Matlab/Simulink模型的构建,完成了从概念设计、软件仿真、硬件测试全过程在软件算法仿真测试后直接⽣成⾯向数字信号处理(DSP)芯⽚的代码,有利发现系统设计的错误。
DSP代码⾃动⽣成⾸先根据系统的设计思路在Matlab平台下搭建模型(.mdl);其次在Simulink中对于算法进⾏仿真,在仿真中遇到问题后可反复修改参数;仿真满意后通过Matlab提供的Real Time Workshop⽣成⾯向CCS的⼯程⽂件代码(.prj),并进⼀步完成代码的编译,链接⽣成DSP可执⾏机器码(.out),最后下载到⽬标DSP板上运⾏,完成系统的开发。
在Matlab平台下代码的⾃动⽣成可以代替⼈⼯编写程序,这不仅⼯作者们从枯燥的编程中解放出来,⽽且还⼤⼤简化了开发复杂程度,节约了时间,提⾼了准确率。
这将在以后的⽣活中得到⼴泛的应⽤。
关键词:DSP;Matlab/Simulink;代码⾃动⽣成;CCSAbstractTraditional DSP development, design and product design and development process is divided into two links, so many problems in the development process, in view of the DSP programming is difficult and time-consuming long problem, presents an integrated use of Matlab software, the Code composer Studio (CCS) and embedded software tools and the connection method for automatic Code generation software. This article focuses on automatic code generation method of TMS320F2812 DSP, based on the Matlab/Simulink model building, completed the whole process from concept design, software simulation and hardware test after the software algorithm simulation test directly generate code for digital signal processing (DSP) chip, in favor of the error of discovery system design.DSP code automatically generated based on the system the design train of thought in the Matlab platform to build model (.mdl); Secondly in the Simulink simulation for the algorithm, after the problems encountered in the simulation can be repeatedly modified parameters; Satisfaction after through Matlab simulation to provide the Real Time Workshop generating code for CCS project file (. prj), and further complete the code to compile, link generation DSP executable machine code (.out), finally downloaded to the target run on DSP board, the implementation of the system.Code automatically generated in the Matlab platform can replace artificial program, it not only liberate workers from boring programming, but also greatly simplifies the development complexity, saves time, improves the accuracy. This will be widely used in later life.Keywords:DSP; Matlab/Simulink; Code automatically generated; CCS⽬录引⾔ ....................................................................................................................................... - 1 -第1章绪论....................................................................................................................... - 2 -1.1课题研究的意义............................................................................................................. - 2 -1.2 课题研究的内容............................................................................................................ - 2 -1.3课题研究的现状和发展趋势......................................................................................... - 2 -第2章⼯具及开发环境的介绍......................................................................................... - 4 -2.1 MATLAB的介绍............................................................................................................ - 4 -2.2 DSP芯⽚介绍................................................................................................................. - 4 -2.2.1 什么是DSP芯⽚........................................................................................................ - 4 -2.2.2 DSP的选择.................................................................................................................. - 5 -2.2.3 TMS320F2812的介绍................................................................................................. - 6 -2.3 DSP的软件开发............................................................................................................. - 9 -2.3.1 集成开发环境CCS .................................................................................................. - 11 -2.3.2 代码⽣成⼯具........................................................................................................... - 11 -第3章DSP硬件电路的设计.......................................................................................... - 13 -3.1 基于TMS320F2812的最⼩系统................................................................................ - 13 -3.2 基于F2812外围电路设计.......................................................................................... - 13 -3.2.1 电源电路设计........................................................................................................... - 13 -3.2.2 复位部分设计........................................................................................................... - 14 -3.2.3 时钟电路部分设计................................................................................................... - 15 -3.2.4 JATG部分设计.......................................................................................................... - 15 -第4章MATLAB平台下DSP代码⾃动⽣成的⽅法................................................... - 17 -4.1 设计流程 ...................................................................................................................... - 17 -4.2具体步骤 ...................................................................................................................... - 19 -第5章举例说明............................................................................................................... - 24 -5.1 Matlab平台下DSP代码⾃动⽣成的实例................................................................. - 24 -5.1.1 Simulink中PID控制的设计 .................................................................................... -24 -5.1.2 正弦波的产⽣ ........................................................................................................... - 28 -5.2 DSP平台下通过⼈⼯编写程序⽣成正弦波............................................................... - 29 -5.2.1 DSP的正弦波信号发⽣器的实现............................................................................ - 29 -5.2.2 DSP的正弦波程序调试............................................................................................ - 33 -结论与展望......................................................................................................................... - 36 -结论..................................................................................................................................... - 36 -展望..................................................................................................................................... - 36 -致谢 ..................................................................................................................................... - 37 -参考⽂献............................................................................................................................. - 38 -附录A TMS320F2812 原理图.............................................................. 错误!未定义书签。
MATLAB中提供了多个例子,例如:F281x based board: c281x_adcpwmasynctestc281x_adcpwmasynctestF280x/F2823x/F2833x based board: c280x_2833x_adcpwmasynctestPiccolo F2802x/F2803x/F2806x based board: c280xx_adcpwmasynctes在不熟悉DSP生成代码使用方法的情况下,可以直接使用,或者在此基础上进行修改,本文利用的是F281x based board: c281x_adcpwmasynctestc281x_adcpwmasynctest。
本例几乎是全部适用Code Composer Studio™ 3.3 (CCSv3.3)的,可以直接按Ctrl+B快捷键生成代码。
但是对于Code Composer Studio™ 4 or 5 (CCSv4/5)则需要做适当的修改。
示例中的芯片配置模块(Target Preferences)在MATLAB的高版本中已经被移除。
取而代之,选择芯片型号的方法被添加到了Simulation >Model Configuration Parameters > Code Generation > Coder Target > Target Hardware Resources选项卡中。
在高版本的MATLAB中打开示例,如图所示。
按Ctrl+E可以打开Model Configuration Parameters窗口,选择Coder Target > Target Hardware Resources选项卡。
选择适合芯片的参数。
但是,仅选择Target Hardware Resources的参数还是不行的,MATLAB会在生成过程中报错,生成代码失败。
那就是还要对MakeFile进行配置。
在simulink下开发dsp首先以matlab下的help里的一个例子来说明在simulink里仿真的电路转换为ccs里的c语言程序。
下面的例子主要功能是应用ad转换模块采集的信号来控制输出的pwm波形:原理图形如下:上述模块可以在simulink下的target for c2000的c2000 target preferences和c281x chip support 里找到。
其中F2812 eZdsp可以配置使用的dsp芯片以及相关的存储器映射和外围设备。
其双击打开为:ADC模块的初试化配置为:PWM模块的配置为:本例仅仅对采集进来的信号做了放大的作用,故只用了一个放大器。
在此基础上,打开窗口菜单的simlation里的configuration parameter,对其里的各个参数进行配置如图:首先对solver进行配置:其次是硬件配置(hardware implemenlation):这里最重要是对real-time workshop的配置:里面的配置如图:在以上配置好之后,确定并按ctrl+b,计算机将会在ccs环境下自动生成c语言代码。
如图:以上是基本的操作流程.。
个人的理解、体会及问题:整个过程是matlab里的embedded target for the ti tms320c2000 dsp platform模块,简称为ETTIc2000.此模块利用real-time workshop通过ccslink模块直接将simulink模型生成c语言代码。
通过学习发现我们可以单独的将几个模块放在一起,中间不做任何连接,也可以运行生成代码,这样在模型用simulink很难搭建情况下,我们可以省去编程里复杂的初始化,应用此系统进行初始化,之后再进行算法编程。
在学习过程中的问题:(1)在对configuration parameter里的solver设置时,为何要用固定步长和离散的,起初以为是采样的原因,之后发现没有ADC 转换时也为相同设置,其他均会出错。
Simulink代码⾃动⽣成(⼀)前⾯介绍了MDB的设计思想并对⽐了它和传统的嵌⼊式软件开发之间的差异,现在开始使⽤Simulink⼯具演⽰模型的搭建和C代码的⾃动⽣成过程。
Matlab版本:R2018B⼀、算法模型的搭建搭建⼀个具有计数功能模型,当使能计数时,每运⾏⼀次该计数模块计数值加1,当计数值⼤于⽬标值时,相应的使能标志位置位,当初始化计数使能时,计数值被初始化为特定的输⼊值模型的输⼊量描述:InitVal:计数器初始化值B_Init:为1时,计时器模块被初始化成InitVal值B_Calc:为1时,计数器模块每运⾏⼀次⾃加1模型内部变量:CntTimer:存储当前计数值模型输出量描述:B_En: 使能标志位,计数值⼤于⽬标值时被置1CurTimer:当前计数值设置const、switch block的输出数据类型为Inherit:Inherit via back propagation(继承后项的数据类型)⼆、代码的⽣成1、使⽤数据管理,设置变量属性数据据管理主要是对Simulink/Stateflow模型中的两类数据进⾏管理,⼀是信号,⼀是参数。
对应于C代码,我们可以简单的把信号对应到变量上,⽽参数,则是不通过程序运⾏⽽发⽣变化的,参数的变化,⼀般是通过⼈⼯调节完成的,也就是参数调节,参数调节的⽬的是为了选择合适的参数以得到最佳的性能。
数据管理的⽅式,使⽤的是数据对象进⾏数据管理,这⾥的“对象”⼆字,和我们经常听到的“⾯向对象编程”⾥⾯的“对象”意义相同。
Simulink 为⽤户事先定义好两个包,⼀个是Simulink Package,⼀个是mpt Package。
以Simulink Package为例,包⾥⾯有类,分别为Simulink.Signal和Simulink.Parameter两个类。
⽤户可以通过这两个类定义相应的对象(Object),然后通过类提供的属性(Property)定义数据的属性。