《基于Simulink模块的dsPIC单片机开发1021final精品资料.doc》由会员分享,可在线阅读,更多相关《基于Simulink模块的dsPIC单片机开发1021final精品资料.doc(84页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第7章 基于Simulink模块的dsPIC单片机开发前面几章讲述了模型代码加手工代码的方式,开发单片机的新技术,不过这种方法也存在重复编写器件配置代码的问题。为了加快项目的开发速度和避免不必要的重复劳动,Microchip公司针对dsPIC30和dsPIC33 DSC等器件,提供了一套接口兼容的配置和运行时外设模块集-MATLAB Plug-in blockset。它可以使MATLAB/SIMULINK/Stateflow与MATLAB Plug-in blockset/MPLAB IDE无缝连接,利用Real-time Workshop Embedded Coder代码生成工具,自动生成应
2、用的实时嵌入式C代码。可极大的提高工作效率和降低开发成本,同时也可降低了运用dsPIC3x DSC器件开发工程师的门槛。下面对MATLAB Plug-in blockset作一简单介绍:模块集的主要特性: 模块适用于dsPIC3x系列的所有外设 可通过“cCall”模块方便地集成经过验证C代码 从MATLAB环境中构建环境配置版本2.0的新增功能: 支持dsPIC30F系列器件 电机控制算法库 缺陷修正和改进 演示版免费评估版 与MPLAB的MATLAB插件更好地集成在一起 与从R2007a到R2009b的所有MATLAB版本兼容,不过也支持R2010a、R2010b版(作者安装的版本是R20
3、10b)。模块适用于dsPIC3x系列的所有外设本章的主要内容:l MPLAB开发工具简介l dsPIC外围驱动模块介绍及应用l 无对应驱动模块时的应用7.1 MPLAB嵌入式开发环境及工具MPLAB IDE是microchip公司开发的基于Windows 操作系统的集成开发环境,适用于PICmicro MCU 系列和dsPIC数字信号控制器的开发。同时,MPLAB IDE还将其他microchip工具集和第三方软件集成到一个图形用户界面之中。其主要功能有:l 使用内置的编辑器创建和编辑源代码。l 汇编、编译和链接源代码。l 通过使用内置的软件模拟器观察程序流程,或者使用在线仿真器或在线调试器
4、以实时方式观察程序流程来调试可执行逻辑。l 用软件模拟器或仿真器进行时序测量。l 查看Watch 窗口中的变量。MATLAB/Simulink device blocksets向Simulink模型库中添加了dsPIC模块。这些模块既可以单独使用,也能和Simulink模块混合建模,并通过Real-time Workshop Embedded Coder自动生成嵌入式实时C代码,再经MPLAB IDE实现嵌入式应用的基于模型设计的开发。MPLAB C30 Compiler是针对16位dsPIC芯片dsPIC30 和 dsPIC33设计的高度优化的编译器,通过MPLAB C30 Compiler
5、或其他第三方编译器可以用C语言实现dsPIC开发。7.1.1 软件的下载和安装用户在浏览器地址栏中输入网址:图7.1.1 MPLAB下载网页在网页下方点击链接MPLAB IDE v8.56 Full Release Zipped Installation和MATLAB Device Blocks for dsPIC DSCs即可下载MPLAB IDE 和MATLAB/Simulinkdevice blocksets。用户如果使用过MPLAB的较早版本,或将V8.53版本安装在非默认路径下,请首先将其卸载,不然在后续使用过程中,系统有可能无法定位到需要的文件。单击windows开始菜单,选择控制
6、面板卸载程序,在列表中选中MPLAB Tools V8.53,单击卸载,将其完全移除。如图7.1.2所示:图7.1.2 卸载早期版本的MPLAB1 安装MPLAB IDE打开MPLAB IDE安程序,按照安装向导的提示进行安装,在Setup Type对话框中尽量选择Complete,如图7.1.3 所示。图7.1.3 MPLAB安装界面如果选择了Custom,则在Select Features对话框中应选中MPLAB IDE Tools的MATLAB选项,以便能够使用MATLAB Plug-in,如图7.1.4所示。图7.1.4 MPLAB安装界面在Choose Destination Loc
7、ation对话框中选用默认路径,不要做任何修改。其他对话框不用做修改,点击“下一步”即可,如图7.1.5所示。图7.1.5 MPLAB安装界面2 安装C30 Compiler打开C30 Compiler安装程序,按照安装向导的提示进行安装,在Setup Type对话框中选择Complete,如图7.1.6所示。图7.1.6 C30编译器安装界面在Choose Destination Location对话框中选用默认路径,不要做任何修改,如图7,1,7所示。图7.1.7 C30编译器安装界面下面安装程序会询问是否同意修改环境变量和注册表以便MPLAB IDE能够识别到C30 Compiler,点
8、击“是”,允许其修改。其他对话框不用做修改,点击“下一步”即可,如图7.1.8,7.1.9所示。图7.1.8 C30编译器安装界面图7.1.9 C30编译器安装界面3 安装MATLAB-Blocksets此处下载的MATLAB Blockset是V2.10版,如果读者机器中安装了其他版本的MATLAB Blockset,有可能和V2.10版间会产生一些冲突,这里仅就V2.10版的MATLAB Blockset进行讨论。 打开MATLAB Blocksets安程序,按照安装向导的提示进行安装,在Choose Destination Location对话框中选用默认路径,不要做任何修改。如图7.1
9、.10所示:图7.1.10 MATLAB-Blocksets安装界面由于这是较早期的MATLAB Blocksets,其支持的最高版本MATLAB是R2009b,但对R2010b版也仍然兼容,此处选择R2009b。其他对话框不用做修改,点击“下一步”即可。如图7.1.11所示:图7.1.11 MATLAB-Blocksets安装界面安装完MATLAB Blockset后,dsPIC模块并没有立即添加到Simulink模块库当中,用户还需要在MATLAB环境中进行添加。打开MATLAB,并将当前目录(current folder)设置为Microchip root:MPLAB IDEToolsM
10、ATLABdsPIC_Matlab,在当前目录下的文件列表中可以发现一个Install_dsPIC_Matlab.p文件。如图7.1.12所示:图7.1.12定位到安装目录在左侧的文件列表中右键单击该文件并在弹出菜单中选择“Run”,如图7.1.13所示。图7.1.13运行Install_dsPIC_Matlab.p文件命令行中会出现如下信息:- INSTALLING Target for Microchip(TM) dsPIC 2.10 - Target for Microchip(TM) dsPIC 2.10 is Installed and ready to use.这时再打开Simul
11、ink模块库浏览器,就可以看到安装的模块了。如图7.1.14所示:图7.1.14 dsPIC模块库7.1.2 利用MPLAB及Proteus进行虚拟硬件调试MPLAB IDE集成了大量的调试工具,既包括MPLAB ICD等仿真器,也能使用Proteus软件进行虚拟硬件调试。打开MPLAB IDE,选择菜单栏的DebuggerSelect ToolProteus VSM即可在MPLAB IDE中打开Proteus界面。如图7.1.15,7.1.16所示:图7.1.15 选择Proteus VSM调试工具图7.1.16 调试界面1 绘制原理图作者目前使用的Proteus7.7版本,仅支持dsPIC
12、33系列中的一部分芯片,不过Labcenter公司即将推出的Proteus8.0版本将会支持更多dsPIC33芯片,开拓虚拟硬件测试范围。本例利用dsPIC33FJ12GP201芯片搭建一个能够点亮发光二极管的最简系统,演示如何在MPLAB IDE中使用Proteus VSM进行虚拟硬件调试。参考第5.1节的内容,不难搭建出如图7.1.17所示的原理图。图中仅包含驱动电路工作所必须的电源,晶振和复位电路。图7.1.17 Proteus原理图Proteus中,该元件封装将13,17,18管脚隐藏了,因此未显示出VDD,VSS。双击dsPIC33FJ12GP201芯片,打开其属性对话框。如图7.1
13、.18所示:图7.1.18 芯片属性设置页面点击对话框右侧的Hidden Pins即可查看隐藏管脚的连接情况。由下图可知,隐藏管脚已经与VDD,VSS相连。如图7.1.19所示:图7.1.19 隐藏管脚页面2 建立MPLAB工程打开MPLAB IDE,选择菜单栏上的ProjectProject Wizard,在弹出的工程向导提示下,可以快速新建一个MPLAB工程。如图7.1.20所示:图7.1.20 选择工程向导在工程向导的Step one对话框中指定芯片dsPIC33FJ12GP201,如图7.1.21所示。图7.1.21 指定芯片在工程向导的Step two对话框中,在Active Too
14、lsuit下拉菜单中选择之前安装过的MPLAB C30 Toolsuit。然后需要在Location中为Toolsuit的每一个组件指定路径,不然MPLAB IDE无法定位到这些组件。如图7.1.22所示:图7.1.22 选择工具在工程向导的Step Three对话框中,确定工程的名称和保存路径,如图7.1.23所示。图7.1.23 确定名称及路径在工程向导的Step Three对话框中,可以直接将已存在的文件添加到工程中,如果没有需要添加的文件,直接点击下一步即可。如图7.1.24所示:图7.1.24 向工程添加文件工程建立后会同时生成工作空间,保存到同一目录下即可,如图7.1.25所示。图
15、7.1.25 保存工作空间编写闪烁灯程序。点击工具栏按钮,在编辑窗口中编写如下程序:#include#define uint unsigned intvoid delay(uint a) /延时程序Uintx,y;for(x=a;x0;x-)for(y=100;y0;y-);void main()TRISBbits.TRISB0=0; /设置RB0口为输出while(1)PORTBbits.RB0=1; /点亮LEDdelay(1000);PORTBbits.RB0=0; /熄灭LEDdelay(1000);点击工具栏按钮保存文件为.c格式。在弹出对话框中勾选Add File To Proje
16、ct并保存,直接将文件添加到工程的Source File中,然后向Header File目录中添加芯片头文件p33FJ12GP201.h。如图7.1.26所示:图7.1.26 MPLAB工程为了提高dsPIC芯片的灵活性和可靠性,Microchip公司为其设计了一些特殊功能,如看门狗、代码保护、JTAG边界扫描接口、在线串行编程和在线仿真。为了控制芯片和使用这些特殊功能,需要用户对其配置位进行适当调整。在菜单栏中选择ConfigureConfiguration Bits,打开配置位对话框,如图7.1.27所示。图7.1.27 配置位在配置位对话框中取消Configuration Bits se
17、t in code复选框,然后用户就可以在此处修改配置位了。如果用户对配置位比较熟悉,则应选中Configuration Bits set in code,并直接在代码中使用_Config()进行修改。本例并未使用到芯片的特殊功能,使用默认设置即可。关于配置位的介绍可参考芯片的数据手册。如图7.1.28所示:图7.1.28 配置位设置页面点击工具栏按钮编译程序,输出如下信息,如图7.1.29所示:图7.1.29 编译MPLAB工程3 调试选择MPLAB IDE菜单栏的DebuggerSelect ToolProteus VSM,在MPLAB IDE中打开Proteus界面。在Proteus界面
18、中点击按钮打开之前绘制的原理图。如图7.1.30所示:图7.1.30 使用Proteus VSM调试工具点击工具栏右侧的按钮,或选择菜单栏的DebuggerStart Simulation开始仿真。这时调试工具栏处于激活状态。点击按钮,进入全速运行状态,可以看到二极管不停的闪烁。如图7.1.31所示:图7.1.31 LED灯闪烁除此之外,MPLAB还提供了其他观察芯片内部数据变化的工具,例如在菜单中选择viewSpecial Function Registers,可以实时观察芯片的特殊功能寄存器的值,发生变化的寄存器以红色标出,如图7.1.32所示。图7.1.32 特殊功能寄存器若选中view
19、Disassenbly Listing,可以看到程序的反汇编指令,并以箭头标注下一步执行指令的位置,如图7.1.33所示。图7.1.33 反汇编指令列表7.1.3 dsPIC外围驱动模块简介MATLAB/Simulink device blocksets与dsPIC芯片的外围驱动模块一一对应,用户可以通过这些模块创建模型,直接由概念生成可执行的代码。Embedded Target for the Microchip dsPIC DSC集成了MATLAB/Simulink和MPLAB IDE工具,通过RTW生成的C代码与MPLAB IDE达到Simulink模型的基于C的嵌入式实时实现。模块简介
20、ADC Config模数转换配置模块。该模块可设置模拟量的输入端口,输出数字量的格式,转换结果寄存器,AD控制寄存器等,驱动芯片的AD设备正常工作。Write Port Output写入输出端口模块。该模块可指定将数据写入到哪一个端口,即能按位指定,也能按字节指定端口。dsPIC33FXX MaindsPIC33FXX芯片配置模块。每个基于dsPIC芯片的模型都需要使用该模块。它和芯片的配置位相对应,例如设置晶振,计时器等。Port Config端口配置模块。该模块指定端口的输入输出状态,技能按位指定,也能按字节指定。在MATLAB/Simulink device blocksets的安装目录
21、下有更加详细的帮助文件。如果用户安装MPLAB IDE和MATLAB/Simulink device blocksets时选择了默认目录,则可在C:Program FilesMicrochipMPLAB IDEToolsMATLABdsPIC_Matlabdochelp目录下找到每一个模块的html格式的帮助文件例如打开文件dsPIC ADC Read.html,则出现如图7.1.34所示的帮助信息。图7.1.34 ADC Read模块帮助信息7.2 dsPIC外围驱动模块应用7.2.1 数模转换实验ADCREAD模型实现了控制dsPIC33FJ12GP202的片内ADC,将模拟电压输入转换为
22、数字量输出的功能。本模型用到了dsPIC Configuration模块库中的dsPIC33fXX Main、ADC Config和Port Config;dsPIC Run Time Library模块库中的ADC Read和Write Port Output模块。建立如图7.2.1所示的模型,并将其命名为adc.mdl。图7.2.1 ADC模型1 模块设置双击ADC Read模块,打开设置页面。选择片内1号ADC,由buffer0读出数据,输出数据类型为uint16,如图7.2.2所示。图7.2.2 ADC Read模块设置双击Write Output Port模块,打开设置页面。选择B端
23、口,并具体指定输出到B端口的015号管脚。如图7.2.3所示:图7.2.3 Write Output Port模块设置dsPIC33fXX Main、ADC Config和Port Config模块用于设置芯片的配置位和特殊功能寄存器,以确定芯片的工作方式。如果用户对dsPIC芯片比较熟悉,设置这些模块并不困难。dsPIC33FXX Main模块对应于芯片的配置位,双击打开其设置页面。在Oscillator Configuration子页面,选择芯片型号为dsPIC33FJ12GP202,计时器选择Timer1。振荡器选择快速RC振荡器(Fast RC oscillator)。由于未选用主振荡
24、器,其模式设置为禁用(Primary Disabled)。看门狗和代码保护功能本例并未用到,因此Watchdog Configuration和Code Protect Configuration子页面采用默认设置即可(默认为disable状态),如图7.2.4所示。图7.2.4 dsPIC33FXX Main模块设置ADC Config对应于芯片的ADxCONx控制寄存器,双击打开其设置页面。在ADC选择中选用1号ADC;数据输出格式为整数右对齐(Integer(Dout=0000 dddd dddd dddd));采样时钟源选择内部时钟源,时钟源结束采样后自动启动转换(Internal co
25、unter ends sampling and starts convertion(auto-convert));由于选用单通道采样,因此同步采样选择位无效;使能ADC采样自动启动(ADC Sample Auto-Start);转换的参考电压分别设为VDD和VSS(ADREF+=Avdd;ADREF-=Avss);转换模式选择10位AD(10-bit 4-channel ADC operation);将AN1设置为模拟输入通道,并启用输入扫描(Scan Input Selections for CH0+ during Sample A bit),如图7.2.5所示。图7.2.5 ADC Con
26、fig模块设置在通道选择中选择转换CH0通道(Converts CH0);在交替输入选择中选择只作为采样A的输入(use channel input for Sample A);将AN1设为通道CH0采样A的同向输入(AN1);由于未选择CH1、CH2、CH3及采样B,其他三项同向输入设置位无效;每完成一次采样-转换就产生一次中断,读出转换结果(SMPI设为1),如图7.2.6所示。图7.2.6 ADC Config模块设置在ADC转换时钟源中选择系统时钟(Clock derived from system clock);自动采样时间设置为12个AD周期(12Tad),其实只要保证其不小于AD
27、所需的最短时间要求即可;芯片数据手册中介绍,完成一次10位AD转换需要12个AD周期,因此AD转换时间设置为12个AD周期;使能中断后,会在稍后的生成代码中出现一个中断服务程序框架,用户可以手动添加所需代码,本例中不需要使用,如图7.2.7所示. 图7.2.7 ADC Config模块设置Port Config模块对应于特殊功能位TRISx,双击打开其设置页面。选择端口B,并将其015管脚设置为输出状态。如图7.2.8所示:图7.2.8 Port Config模块设置2 模型参数设置在模型窗口的菜单栏选择SimulationConfiguration Parameters,设置模型参数。在So
28、lver页面,设置仿真截止时间为“inf”,设置求解器为定步长离散求解器,步长可根据需要另行指定,或使用auto。如图7.2.9所示:图7.2.9 设置仿真时间,求解器在Hardware Implimentation页面,设置器件类型为dsPIC,如图7.2.10所示。图7.2.10 指定芯片Real-Time Workshop页面,设置TLC文件为dsPIC_stf.tlc,如图7.2.11所示。图7.2.11 设置tlcReport页面,勾选所有选项,便于后期检查及跟踪,如图7.2.12所示。图7.2.12 报告页面设置3 自动生成代码完成这一系列的设置,按下模型工具栏的按钮,即生成代码,
29、报告如图7.2.13。图7.2.13 代码生成报告代码位于MATLAB当前目录下的adc_dspic_ertsrc文件夹,并且已经自动产生了可执行的.hex、.cof文件,如图7.2.14所示:图7.2.14 自动生成hex和cof文件4 虚拟硬件测试在Proteus中建立测试原理图,选用dsPIC33FJ12GP202芯片,其外围电路与第7.1.2节中介绍的dsPIC33FJ12GP201基本相同,只是将晶振频率设置为8MHz。在AN1端口连接了一个电位器,可以调整输入模拟电压的大小。在RB0RB9连接了发光二极管,用来显示AD转换结果,如图7.2.15。图7.2.15 Proteus原理图
30、双击芯片,打开设置页面,在Program File中指定生成的adc.hex或adc.cof文件,如图7.2.16所示。图7.2.16 加载可执行文件运行测试原理图。当调整电位器时,AN1端模拟电压发生变化,右侧的发光二极管也随之亮灭变化。实验结果显示由模型自动生成的代码完全实现了模型所表达的功能,如图7.2.17所示。容易看出,在Microchip公司提供的Blocksets帮助下,配合dsPIC_stf.tlc,用户完全可以使用由模型自动生成的代码实现嵌入式系统的开发,而不需要添加一行手写代码,这将极大的提高开基于dsPIC芯片的嵌入式系统发效率。图7.2.17 仿真结果更进一步看,10位
31、ADC输出的转换数据其实就是01023间某个值的二进制表示,这10位由0,1组成的二进制编码输出到B端口便表现为二极管的亮灭。为了更直观的显示测试结果,下面将采用数码管来显示转换结果。相应的,代码和测试原理图需要一定修改。参考第7.1.2节内容在MPLAB中建立工程,将生成的代码添加到工程中,如图7.2.18所示。图7.2.18 MPLAB工程由于数码管并不能直接将这些二进制编码转换为对应的十进制数字显示出来,因此还需要一段数码管显示程序来完成这项功能。打开adc.c文件,做如下修改:#include adc.h#include adc_private.h/* Real-time model
32、*/RT_MODEL_adcadc_M_;RT_MODEL_adc *adc_M = &adc_M_;const uint16_T table=0x00FC,0x0060,0x00DA,0x00F2,0x0066, /数码管可识别的09编码0x00B6,0x00BE,0x00E0,0x00FE,0x00F6;void delay() /延时函数uint16_T i;for(i=2000;i0;i-);void disp(uint16_T a,uint16_T b,uint16_T c,uint16_T d) /显示函数LATB=0x7000|tablea;/数码管显示千位数字delay();L
33、ATB=0xB000|tableb;/数码管显示千位数字delay();LATB=0xD000|tablec;/数码管显示千位数字delay();LATB=0xE000|tabled;/数码管显示千位数字delay();/* Model step function */void adc_step(void) /* local block i/o variables */ uint16_T rtb_ADCRead,a,b,c,d; /声明中间变量 /* S-Function (dsPIC_ADCread_sfun): /ADC Read */rtb_ADCRead = ReadADC1(uint
34、8_T)0); /Read ADC Buffera=rtb_ADCRead/1000; /计算转换结果的千位数值b=rtb_ADCRead%1000/100; /计算转换结果的百位数值c=rtb_ADCRead%100/10; /计算转换结果的十位数值d=rtb_ADCRead%10; /计算转换结果的个位数值 /* S-Function (dsPIC_portWrite_sfun): /Write Port Output */disp(a,b,c,d); /调用显示函数保存文件后重新编译,生成.hex文件。之后打开测试原理图,添加4位共阴极数码管,并将二极管删去,如图7.2.19所示。图7.
35、2.19 Proteus原理图通过第5.1.2节介绍的连线标签将数码管的段选端口与RB70连接,分别标注为a,b,f,g,dp。位选端口与RB1512连接,分别标注为1,2,3,4。打开在MPLAB中建立的工程,选择MPLAB IDE菜单栏的DebuggerSelect ToolProteus VSM,打开修改过的原理图。按下开始调试,点击按钮进入全速运行状态后,数码管上显示了模数转换的十进制结果,如图7.2.20所示。其表示的实际模拟电压量为Vref*788/1024,如果读者对用二进制数显示的电压观看不习惯,自己可以进一步用Vref*788/1024公式把它变成易于观察的用十进制显示的电压
36、值。图7.2.20 仿真结果7.2.2 闪烁灯1闪烁灯驱动模型本例选用的处理芯片dsPIC33FJ12GP202,支持16位的数据类型,可直接定义y的数据类型为unit16,如图7.2.21所示。图7.2.21闪烁灯驱动模型数据类型建立如图7.2.22所示闪烁灯驱动模型,8个状态的y值对应的二进制数如表7.2.1所示,将输出y与一组LED灯相连,即可实现LED灯按y值顺序点亮。表7.2.1 二进制十进制对照327691000,0000,0000,0001163860100,0000,0000,001081960010,0000,0000,010041040001,0000,0000,10002
37、0640000,1000,0001,000010560000,0100,0010,00005760000,0010,0100,00003840000,0001,1000,0000图7.2.22 闪烁灯驱动模型2闪烁灯功能验证模型完成闪烁灯驱动模型之后,在Simulink模块库中找到如图7.2.23,7.2.24所示各模块,并按图7.2.25连接。图7.2.23 Circle Meter模块图7.2.24 数据类型转换模块图7.2.25 功能验证模型选择模型主窗口的菜单项SimulationConfiguration Parameters,打开模型参数对话框,在Solver面板,设置求解器为定步
38、长离散求解器,步长为0.01,如图7.2.26所示。图7.2.26 求解器设置设置Circle Meter模块LED灯数量为16,输入数据模式为1-Bitwise,如图7.2.27。图7.2.27 Circle Meter模块设置完成以上设置后执行仿真,即得到设计所需的亮灯图样,如图7.2.28、图7.2.29所示。图7.2.28 功能仿真结果图7.2.29功能仿真结果3 软件在环测试软件在环测试(SIL)是在主机上对仿真中生成的函数或手写代码进行非实时性联合仿真评估,当软件组件包含需要在目标平台上执行的生成代码和手写代码的组合时,应该考虑进行软件在环测试,完成对模型生成代码的早期验证。软件在
39、环测试不需要硬件,只是对算法代码进行测试,具体做法是对要进行测试的子系统编译可生成SIL模块,比较原模块与SIL模块的输出,以此确认算法的正确性。 数据类型转换在模块库SimulinkPorts & Subsystems中找到模块,替换上述图7.2.25中的Circle Meter模块,并将模型另存。 按下模型窗口的按钮,打开模型浏览器,闪烁灯驱动模型里变量的数据类型已设置为uint16,Simulink模型中的Out模块的数据类型可设为自动继承,也可强制设置为uint16如图7.2.30所示。图7.2.30 修改端口数据类型修改后的模型如图7.2.31。图7.2.31 代码生成模型 模型参数
40、设置打开模型参数对话框,在Real-Time Workshop页面设置TLC文件为ert.tlc,如图7.2.32。图7.2.32 设置tlcReal-Time WorkshopInterface页面,取消不必要的选项,如图7.2.33。图7.2.33 Interface页面设置Real-Time WorkshopReport页面,勾选所有选项,便于后期检查及跟踪,如图7.2.34。图7.2.34 报告页面设置 生成SIL模块在Real-Time WorkshopSIL and PIL Verification页面的Create block项,选中SIL,如图7.2.35。图7.2.35 SI
41、L设置之后按下模型工具栏的按钮,得到代码生成报告,如图7.2.36所示与SIL模块如图7.2.37所示。图7.2.36 代码生成报告图7.2.37 SIL模块按图7.2.25,以SIL模块替换原有的闪烁灯驱动模型,重建验证模型,该模型的运行结果与功能验证模型是一致的,说明自动生成的代码能实现驱动模型的功能。如图7.2.38所示:图7.2.38 软件测试结果4 代码生成模型及设置在Simulink Target for Microchip dsPIC子模块库找到以下模块,如图7.2.397.2。42所示,并按图7.2.43连接。图7.2.39 Write Port Out put模块图7.2.4
42、0 Config模块图7.2.41 Port Config模块图7.2.42 dsPIC33fxx Main模块图7.2.43 闪烁灯模型 双击dsPIC33fxx Main模块,选择振荡源为Low power RC oscillator,Fcy显示默认值16384,如图7.2.44所示。图7.2.44 dsPIC33fxx Main模块设置 双击Write Port Output模块,选择输出口为B,不勾选Write to selected Pin/s,如图7.2.45所示。图7.2.45 Write Port Output模块设置 双击Port Config模块,选择端口B的方向为Outp
43、ut,不勾选Configure selected Pin/s,如图7.2.46所示。图7.2.46 Port Config模块设置 双击Config模块,系统自动设置tlc文件为dsPIC_stf.tlc,并在模型参数对话框中添加一个dsPIC Options页面。在生成代码前,用户应事先检查该页面所有条目对应的文件是否存在,如图7.2.47。图7.2.47 Config模块设置 在Hardware Implementation页面,选择硬件设备为Microchip公司的dsPIC,如图7.2.48所示。图7.2.48 选择芯片 将Real-Time WorkshopSIL and PIL V
44、erification页面的Create block项,恢复成none,如图7.2.49所示。图7.2.49 SIL/PIL设置 按下模型工具栏的按钮,生成代码,报告如图7.2.50所示。图7.2.50 代码生成报告5 虚拟硬件测试不同于第5章,dsPIC的自动代码生成过程并不打开IDE编译环境,而是直接生成hex文件,生成的源代码保存在模型当前目录的modelname_dspic_ert子目录下。当MATLAB命令行显示大致如图7.2.51所示时,即生成了modelname.hex与modelname.cof文件。图7.2.51编译信息搭建proteus模型,加载生成的hex文件,按下仿真按
45、钮,得到与功能验证模型一致的亮灯图样,如图7.2.52、图7.2.53所示。图7.2.52 仿真结果图7.2.53 仿真结果用户也可以用逻辑分析仪替换LED灯,如图7.2.54所示,详细分析亮灯的时序,如图7.2.55所示。图7.2.54 逻辑分析仪替换LED灯图7.2.55 逻辑分析仪波形7.2.3 调用现有C函数1 创建功能验证模型在Simulink模块库中找到图7.2.56,7.2.57所示模块,并按图7.2.58连接,建立一个简单的加法模型,对于实际应用,加法模块可以替换成各种具体的算法。图7.2.56 sum模块图7.2.55 generic numeric led模块图7.2.58 功能验证模型1位十进制整数加法的和最多为2位十进制整数,因此设置数码管的显示位数为2位整数、0位小数,图7.2.5