首页资源分类DSP > 北理工dsp实验报告

北理工dsp实验报告

已有 445005个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:dsp基础

    分    享:

    文档简介

    小弟第一次注册只为求几个积分下载个东西

    文档预览

     DSP实验报告 组长:吕则伦 学号:1120111753 组员:马举猛 11201117 田昊雷 11201117 金光太 1120111748 实验一 PC-Master实验 一:实验目的 1、熟练怎样创建一个工程 2、熟悉开发环境的使用及调试 3、掌握PC-Master的使用 二、实验设备 1、计算机 2、MC56F8013EVM实验板 3、相应接线 三、实验原理 通过PC-Master观察变量的值,并显示变量的曲线。 硬件连接图如下图所示: 如图所示连线,用UsB串口线将仿真器与主机的USB口相连,用串口线将 RS232与主机的串口相连。 四、实验步骤 1、打开codeWarrior IDE,在File菜单中选择New命令。按图中选择Processor Expert Stationery并输入要建立工程的名称和路径。如下图:如工程名称为8013 pcmaster,保存的路径为E:\experimentation\8013 pcmastero 点击确定以后会出现New Projeet对话框,选择CPU类型为 MC56F8013VFAE。创建完工程后并没有生成代码,这时候需要“Make'’一下工程, 创建代码。 点击图中红圈内的任意一个按钮即可Make工程,Malce后会生成所有的用 户文件,就可以开始编写自己的工程。 至此就建立了一个工程。 2、添加组件 在这个程序里面用户只需要添加组件(Components )来完成所有的工作。组 件的概念类似于VB里面的控件,代码由编译器维护,用户可以调整它的属性、 调用它的成员函数((Function),响应它的事件(Events ) o 下面来添加一个组件: 在PE ( Processor Expert)选项卡的Components下面单击鼠标右键,在弹出 的菜单种选择Add Component (s) 按图中选择“PC Master',并按Add&Close按钮,添加一个用于观察变量的组件。 3、编写程序 首先打开PE选项卡,打开_8013-pcmaster.c:main,编写程后 /*Including used modules for compiling procedure*/ #include "Cpu.h" #include "Events.h" #include "PC Ml.h`' #include "Inhrl.h" /*Include shared modules, which are used for whole project*/ #include "PE一 Types.h" #include "PE Error.h" #include "PE Const.h" #include "1C-Map.h" int disp-data1=0; int count=0; int i=0; int disp_data2=0; void main(void) { /* Write your local variable definition here */ /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/ PE_low_level_init(); /*** End of Processor Expert internal initialization. ***/ /* Write your code here */ for(;;) { for(i=0;i<25000;i++) { count=count+1; count=count-1; } } if(disp_data1==0) { disp_data1=20; } else { disp_data1=0; } if(disp_data2<20) { disp_data2++; } else { disp_data2=0; } } 4、调试运行 编译链接后,点击运行图标(Debug)将程序下载到目标板上,再点击运行 图标(Debug),程序开始运行。 5, PC-Master的使用 PC_ Master Component是codewarrior PE自带的一个组件。通过串口连接上 位机的PCwe Master tool与下位机目标板,可以在PC_一aster tool的界面上以图形 或数值的方式观察下位机发送的数据。目标板上有一个Recorder,用于快速存储 实时变量,存储的时间间隔和存储的变量均可设置选择。 在第二步一添加组件中,我们己经添加了PC-Master,下面将对详细讲解如何 使用PC-Mastero A、找到PCMaster的执行文件位于安装根目录下的位置(D:\Progrann Files\Freescale\FreeMAS'd'ER 1.3\PCMaster.exe)双击打开。 B、从project中导入MAP文件:project--options-MAP files。在default sym bol中导入程序自动生成的output文件夹内的elf文件,路径为E:\experimentation\80 13 pcmaster\output;在file一栏的下拉菜单中添加第一项,点击确定。此步骤是 把目标板上程序中的变量导入到PC_ Master tool的界面内。 C、添加要显示的变量:proj ect-} variables--- generate。在弹出的界面中选择 要显示的变量(按住Ctrl键可进行多选),点击右侧的generate single variables 选择完所有要显示的变量后点击close关闭窗口。 D、添加变量值显示窗口:Item-;properties--} watch。将左侧的变量添加到右 侧watched一栏(按住Shift键可全选),点击确定。在PC_ Master主界面右下角 将显示个变量的值。 E、添加示波器观察变量随时间变化的图形:Item- ereat---} scope-} main o选 择period为2see} X-axis width为40,在setup选择轴的最大值为25,并选择变 量和曲线颜色,点击确定。双击主界面左侧的New scope,在P C_ Master主界面 右上角示波器中将显示各变量的曲线。 五、程序流程图 Y n y n Pc-master波形图: 六、思考题 1、观察PC-Master的波形时,使用不同的采样时间(period ),会出现什么样的波形。 2、观测时,将PC_ Master的“变量”C Variable)选项中的“Type”选为“signed fixed point”如下图。显示的值和曲线会有什么样的变化?(点击要显示的变量右键即可进行此项设置) 实验二SCI串行通信实验 一、实验目的 1、熟练怎样创建一个工程 2、熟悉开发环境的使用 3、熟悉RS-232口的应用,熟悉CodeWarrior的使用及调试 二、实验设备 1、计算机 2, MC56F8013EVM实验板 3、相应接线 三、实验原理 在串口调试助手输入区中输入数据,通过芯片的RS-2犯口传输数据,在串口 调试助手的输出区中显示数据。 四、实验内容与步骤 1、创建一个工程 打开CodeWarrior IDE,在File菜单中选择New命令。按图中选择Processor Expert Stationery并输入要建立工程的名称和路径。如下图:如工程名称为Serial Interface,保存的路径为E:\experimentation\serial interface。 点击确定以后会出现New Project对话框,选择CPU类型为MC56F8013VF AE。创建完工程后并没有生成代码,这时候需要“Make"一下工程,创建代码。 点击图中红圈内的任意一个按钮即可Make工程,Make后会生成所有的用 户文件,就可以开始编写自己的工程。 至此就建立了一个工程。 2、添加组件 在PE(Processor Expert)选项卡的Components下面单击鼠标右键,在弹出的 菜单种选择Add Component(s)… 按图中选择“AsynchioSerial”并按Add&Close按钮,添加一个用于同步串行 通讯的组件。 双击所添加的豆子即可在出现的EXPERT的属性对话框里设置它的属性,主 要修改以下选项:Interrupt service/events改为Enable } Input和Output的buffer Size 均为8, Baud rate设置为9600 baud。 3、编写程序 首先打开PE选项卡,打开Serial_ Inter face. c:mai n,把需要的函数从相应的组 件下面拖到主函数中。还可以在serial interface.c:main文件中直接输入程序。 /** ################################################################### ** Filename : serial_interface.C ** Project : serial_interface ** Processor : 56F8013VFAE ** Version : Driver 01.14 ** Compiler : Metrowerks DSP C Compiler ** Date/Time : 2014/5/14, 21:59 ** Abstract : ** Main module. ** This module contains user's application code. ** Settings : ** Contents : ** No public methods ** ** ###################################################################*/ /* MODULE serial_interface */ /* Including needed modules to compile this module/procedure */ #include "Cpu.h" #include "Events.h" #include "AS1.h" /* Including shared modules, which are used for whole project */ #include "PE_Types.h" #include "PE_Error.h" #include "PE_Const.h" #include "IO_Map.h" unsigned char data=0; void main(void) { /* Write your local variable definition here */ /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/ PE_low_level_init(); /*** End of Processor Expert internal initialization. ***/ /* Write your code here */ for(;;) { if(AS1_GetCharsInRxBuf()!=0) { AS1_RecvChar(&data); AS1_SendChar(data); } } } /* END serial_interface */ /* ** ################################################################### ** ** This file was created by Processor Expert 3.00 [04.35] ** for the Freescale 56800 series of microcontrollers. ** ** ################################################################### */ 4、调试运行 编写好程序,就可以进行DEBUG调试了,点击绿色按钮进行调试。 调试成功之后就可以运行程序进行检测实验结果了。单击“RUN'’按钮运行程 序,程序运行后打开串口调试助手进行数据收发测试。 五、运行结果 六、思考题 连续发多个字符时会出现缺字符的情况,应该如何解决这个问题(提示:可 以加长buffer size,并加入接收发送数据延迟程序,以防止串口接收发送数据时 间过短,引起冲突)。 实验三ADC模数转换实验 一、实验目的 1、熟练怎样创建一个工程和开发环境的使用 2、掌握Freescale系列DSP56F80x模/数转换模块的典型应用 J、掌握用中断方式完成模数转换程序的编写方法 4、熟悉PC-Master的使用 二、实验设备 1、计算机 2、 MC56F8013EVM实验板 3、相应接线 4、电位器 三、实验原理 本实验使用DSP56F8013EVM, ADC模块由二个12位高速多功能模一数转换器 组成,总共六路模拟量输入通道。AD模块的转换是以参考电压为基准成比例进 行的转换。ADC共有12位,因此,转换的最大结果为4095。但是,在DSP56F805 中,为了方便信号处理,12位的转换结果在16位的数据总线上会左移三位,因此, 实际转换结果的最大值为32760。实际转换结果可以由下面的公式得出: 其中,为ADC的转换结果,为单端输入的模拟信号电压幅值,为ADC模块的参考电压值。 描述:通过ADc模块对两路输入信号顺序采样,分别用两组指示灯(每组 3个)表示采样值大小。输入电压范围为0-3.3V,对应的转换结果为0-32760 结果按Q15定标表示,其表示范围为。-0.998。将此值用三个LED灯表示出来。 亮表示“1”,灭表示“0"。 硬件连接图如下图所示: 如图所示连线,用USB串口线将仿真器与主机的USB口相连,用串口线将 RS232与主机的串口相连。电位器接线示意图与实物图如下图所示。 注:电位器靠近旋钮端的引脚为引脚3,中间的引脚为引脚1。 电位器如图连接,3脚接GND ,2脚接ANA2(位于图示板子方向左侧), 脚接3.3V(位于图示板子方向右侧接线端子靠里一排,即以1打头一排的第三 个引脚处,此处标有3.3V ) 。 四、实验内容与步骤 1、像实验一那样创建一个工程,名字为ADC. 2、添加组件 首先在PE选项卡的Components下面单击鼠标右键,在弹出的菜单中选择Add Component(s). ..,添加1个BitsIO和1个ADC模块; 在组件监视器窗口中对Bits 1进行设置,选择GPIOA端口,Bits I的三个引 脚选择为GPIOAO P}VMO-}-GPIOAO P}VM2,引脚均为输出(即Driection设为 Output,初始值设定为O。 对ADC模块进行设置:选择ADCA作为模数转换器,选择允许ADC中断, AD转换通道选择ANA2 VREFH_ GPIOC2,输入模式选择单端输入,转换模式 选择顺序扫描,AD samples选择samples0,其他采用默认设置。 在组件监视器窗口中对Bits 1的Methods选项中设置需要生成的模块子程 序。由于BitsIO模块仅需要输出高低电平来控制LED灯,因此只需要选中PutVal 函数即可。 在组件监视器窗口中对ADCA模块的Methods选项中设置需要生成的模块子 程序。选中中断使能“Enable''、ADC启动“Start、ADC停止“Ctop ;'、读取转换结果“GetChannelValue”等几个子程序。 由于本例程需要在ADC转换结束中断中断处理转换结果并控制LED灯输出, 所以需要对“Evens”选项进行选择。 3、编写程序 点击“Proj ect”下面的“Make”选项,PE将自动生成组件子程序。 编写主程序和ADC转换结束中断服务程序。 中断event实验程序: /** ################################################################### ** Filename : Events.C ** Project : adc ** Processor : 56F8013VFAE ** Component : Events ** Version : Driver 01.03 ** Compiler : Metrowerks DSP C Compiler ** Date/Time : 2014/4/19, 17:03 ** Abstract : ** This is user's event module. ** Put your event handler code here. ** Settings : ** Contents : ** No public methods ** ** ###################################################################*/ /* MODULE Events */ #include "Cpu.h" #include "Events.h" #include "AD1.h" #include "Bits1.h" /* User includes (#include below this line is not maintained by Processor Expert) */ #include "PE_Types.h" #include "PE_Error.h" #include "PE_Const.h" #include "IO_Map.h" /* ** =================================================================== ** Event : AD1_OnEnd (module Events) ** ** Component : AD1 [ADC] ** Description : ** This event is called after the measurement (which consists ** of <1 or more conversions>) is/are finished. ** The event is available only when the property is enabled. ** Parameters : None ** Returns : Nothing ** =================================================================== */ int data_temp; int *pointer; static int data; #pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */ /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR) */ void AD1_OnEnd(void) { /* Write your code here ... */ pointer=&data_temp; AD1_GetChanValue(0,pointer); data=data_temp/4096; Bits1_PutVal((unsigned char)data); } /* END Events */ /* ** ################################################################### ** ** This file was created by Processor Expert 3.00 [04.35] ** for the Freescale 56800 series of microcontrollers. ** ** ################################################################### */ 流程图 实验结果:转动滑动变阻器改变输入后波形如下 六、思考题 1、中断响应是怎样进行的? 答:中断请求,中断判优,中断响应,中断处理,中断返回 2、模数转换的工作原理以及定标问题和溢出饱和问题的处理。 答:模数转换(ADC)亦称模拟一数字转换,与数/模(D/A)转换相反,是将连续的模拟量(如象元的灰阶、电压、电流等)通过取样转换成离散的数字量。例如,对图象扫描后,形成象元列阵,把每个象元的亮度(灰阶)转换成相应的数字表示,即经模/数转换后,构成数字图象。通常有电子式的模/数转换和机电式模/数转换二种。在遥感中常用于图象的传输,存贮以及将图象形式转换成数字形式的处理。数的定标 在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。溢出饱和处理:饱和算法定义:当发生计算结果大于可表示的最大值或者小于可表示的最小值的时候,结果为这个最大值或者最小值。非饱和算法:如果结果溢出 则直接去掉溢出位,剩下的就是结果。 3、随着输入电压的增大或减小,LED指示灯是怎样变化的。模数转换结果从0-7,以1表示led灯亮,0表示灭。变化过程:000→001→010→011→100→101→110→111 实验四 定时器实验 一、实验目的 1、了解DSP中的正交定时器的结构原理 2、学会怎样使用定时器模块进行编程 3、熟练掌握PC-Master 二、实验设备 1、计算机 2、MC56F8013EVM实验板 3、相应接线 三、实验原理 1、正交定时器 DSP56F800系列最多可以有4个正交定时器。每个定时器模块有4个相同 的计数器/定时器组,也称为通道。每个16位定时、计数器组包含一个预分频器, 一个计数器,一个装载寄存器,一个保持寄存器,一个捕获寄存器,两个比较寄 存器,一个状态寄存器和一个控制寄存器。所有的寄存器(除预分频器)均可读 写。根据具体任务的不同,可以分别使用定时器或者计数器这两个术语,但它们 都是指正交定时器模块。 预分频器为计数器/定时器的时钟提供不同的时基。计数器能够对内部事件 或者外部事件进行计数。装载寄存器在计数器计数达到最终值时,提供初始值。 当其它寄存器被读取时,保持寄存器保存了本计数器的当前值,这种特性支持两 个的计数器的级联,可以扩大计数器的计数范围。捕获寄存器在外部信号触发下 保存计数器的当前值。比较寄存器提供了一个数值供计数器进行比较,如果出现 相等的情况,OFLAG信号就被置位,清零,或翻转。在比较条件成立时,如果 进行了使能,将会产生一个中断。在定时器模块中,可以将输入引脚按需要分配 给4个计数器/定时器。 四、实验内容与步骤 1、创建工程:创建一个新的工程newboard 。 2、添加组件。 添加一个BitsIO,具体设置如下图: 再添加一个TimerInt具体设置如下图: 再添加一个PC-Master组件。添加完成之后点击Make按钮。 3编写程序,编写完成之后点击Make按钮。 /** ################################################################### ** Filename : Events.C ** Project : newboard ** Processor : 56F8013VFAE ** Component : Events ** Version : Driver 01.03 ** Compiler : Metrowerks DSP C Compiler ** Date/Time : 2014/4/19, 20:41 ** Abstract : ** This is user's event module. ** Put your event handler code here. ** Settings : ** Contents : ** No public methods ** ** ###################################################################*/ /* MODULE Events */ #include "Cpu.h" #include "Events.h" /* User includes (#include below this line is not maintained by Processor Expert) */ /* ** =================================================================== ** Event : TI1_OnInterrupt (module Events) ** ** Component : TI1 [TimerInt] ** Description : ** When a timer interrupt occurs this event is called (only ** when the component is enabled - and the events are ** enabled - ). This event is enabled only if a ** is enabled. ** Parameters : None ** Returns : Nothing ** =================================================================== */ #pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */ int count=0; int channel=0; /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR) */ void TI1_OnInterrupt(void) { count++; if(count>=20) { count=0; Bits1_SetBit((unsigned char)channel); if(channel>=1) { Bits1_ClrBit((unsigned char)(channel-1)); } channel++; if(channel>6) { channel=0; } }/* Write your code here ... */ } /* END Events */ /* ** ################################################################### ** ** This file was created by Processor Expert 3.00 [04.35] ** for the Freescale 56800 series of microcontrollers. ** ** ################################################################### */ 4如实验二所示步骤,在PC-Master中添加count, channel两个变量。 5调试运行 五:实验结果: 现象:每隔50ms,一个LED灯灭,其相邻的一个LED灯亮。通过PC-Maste:可 以观察到count, channel的变化情况。 六、思考题 1、复习定时一器的各种定时/计数模式。 2、根据不同的定时/计数模式说明各种模式的使用情况。 答1,2: 定时器/计数器共有11种模式: 1)停止模式:计数器不工作,不进行计数。 2)计数模式:计数器对选定的时钟源信号的上升沿计数。 3)边沿计数模式:计数器会在选定的时钟源的两个边沿计数。这种模式适合计 数外部环境的变化,例如一个简单的码盘。 4)门控计数模式:需要主、次两个输入信号,其中主信号为时钟源,次信号为 计数门控信号。计数器会在选定的次输入信号为高电平时计数。这种模式用 于测量外部事件的持续时间。 5}正交计数模式:计数器将对主、次两个外部输入的正交编码信号进行解码。 正交信号通常是由电机轴或机械装置上的旋转或直线传感器产生的。两路正 交信号为方波信号,相位相差9}度。通过对正交信号的解码,可以得到计 数信息和转向信息。 6)可控增减计数模式:需要主、次两个输入信号,计数器对主信号(时钟源) 进行计数,选定的次信号决定计数方向(递增或递减)。如果次信号输入是 高电平,则计数器按递减方向计数:反之,则计数器按递增方向计数。 7)触发计数模式:需要主·次两个输入信号,在次信号发生正跳变后,计数器 对主时钟源的上跳沿计数。计数将一直持续到发生比较事件或检测到次信号 新的有效跳变。其中,在次信号的奇数边沿重新计数。在次信号的偶数边沿 或者发生比较事件时,停止计数。 R)级联计数模式:需要主、源2个计数器。源计数器的输出作为主计数器的输 入。主计数器对源计数器发生的比较事件进行递增或递减计数。 9)脉冲输出模式:可以控制时钟的输出。计数器输出与所选定的时钟源同频率 的脉冲序列。也就是说,可以输出的脉冲个数和脉冲频率均可以设定。这种 模式适于控制步进电机系统。 10)固定频率PWM模式:采用循环连续计数,计数器输出形成PWM信号,其 频率为计数时钟频率除以b5536,占空比为比较值除以65536。这种模式主 要用来驱动PWM放大器。 11)频率可调PWM模式:计数器输出形成PWM信号,这种产生PWM的方式 有许多优点:可以产生几乎任何频率的PWM频率,并且输出的导通时间(或 者关断时间)可为固定值。这种模式经常用来驱动用于电机控制的功放或者 逆变器。 实验五 PWM控制实验 一、实验目的 1、了解DSP中脉宽调制模快(CPWM)的工作原理 2、学会产生PWM波的编程方法 二、实验仪器 1、计算机及MC56F80I SEVM实验板 2、示波器一台 3、相应接线 三、实验原理 1、描述:通过ADC模块对一路输入信号采样,输入电压范围为0-3.3V 对应的转换结果为0-32760。将此值作为一路PWM占空比的调节值,另一路 PWM占空比固定为50%} PWM模块采用中心对齐方式半周期重载,从而实现 相位差可调的两路PWM输出。 2, PWM模块引脚说明 脉宽调制模块(PWM)在功能上具有以下外部引脚: 1) PWMO-PWMS是六路PWM通道的输出引脚; 2) FAULTO一一FAULT3是故障状态输入引脚; 3) ISO-IS2是电流状态引脚,用于在互补通道方式下死区补偿。 3 , PWM模块的中断请求 PVi}'M源可以产生两个CPU中断请求: 1)重载标志((PWMF): PWMF在每个参数重载周期开始时置I。重载中断使能 位PWMRIE允许PWMF产生CPU中断请求。PWMF和PWMRIE位都在 PWM控制寄存器((PMCTL)中。 2)故障标志(FFI}AGO-FFLAG3):当FAL1LTx引脚上出现逻辑高电平时,FFLAGx 位置位。故障引脚中断使能位FIEO-FIE3允许FFLAGx z位产生CPU中 断请求。FFLAGO-FFLAG3在故障状态寄存器((PMFSA)中。FIFO-FIE3在故障控制寄存器((PMFCTL)中。 如图所示连线,用USB串口线将仿真器与主机的USB口相连,用串口线将 RS232与主机的串口相连。示波器接线图如下所示: PWM0-PWM5位于图示板子位置左侧两排接线端子右边孤立的6个端子 处,AND位于左侧接线端子第三排外侧。 四、实验内容与步骤 1、把示波器探头连接在相应的PWM输出口。 2、按提供的参考步骤进行设置,观察并记录实验效果。 I)创建工程:打开CodeWarrior IDE,在File菜单中选择New命令。按图中 选择Processor Expert Stationery并输入要建立工程的名称和路径。该工程名为 FWI}}I C ontrol。 2)添加组件:首先在PE选项卡的Components下面单击鼠标右键,在弹出的菜单中选择Add Component(s)...,添加1个PWM; 3)在组件监视器窗口中对PWM模块进行设置,选择中心对齐方式·耳补 通道模式、半周期重载、中断使能、开关频率1 OK、死区时间3微秒。 4)添加DSP Func一 TFR Components。添加该组件时,还有两个附加组件, 点击OK添加即可。 5)在组件监视器窗口中对PWMA模块的Methods选项中设置需要生成的 模块子程序。 6)点击“Project”下面的“Make”选项,FE %}自动生成组件子程序。 7)编写主程序和PWM重载中断服务程序。 void main(void) { /* Write your local variable definition here */ /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/ PE_low_level_init(); PWMC1_Enable; PWMC1_OutputPadEnable(); for(;;) { } /*** End of Processor Expert internal initialization. ***/ /* Write your code here */ for(;;) {} } #pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */ /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR) */ void PWMC1_OnReload(void) { /* Write your code here ... */ duty=TFR1_tfr16SinPIx(angle); PWMC1_SetRatio15(0,duty); PWMC1_SetRatio15(2,32767-duty); PWMC1_SetRatio15(4,angle); angle=angle+1; if(angle>=32767) { angle=0; } PWMC1_Load(); } 8)编译运行。 9)示波器观察到的PWM0-PWM5渐变波形如下图所示,PWM0(PWM2/PWM4)接CH1,波形图如图中上半部分图所示:PWM1 (PWM3/PWM5)接CH2,波形图如图中下半部分图所示,其中,占空比从10% 变化到80% 。 五、实验结果 六、思考题 不使用示波器,把生成的PWM波用PC-Master显示出来。(提示:把频率降 低到人眼可以分辨得频率之下。)并考虑在降低频率时遇到的问题以及解决方法。 思路:由于pc-master只能观测全局变量。则分别定义全局变量,用线将PWM输出口与ADC转换口相连,令全局变量等于Getvalue()模拟量的值,再用pc-master观察这6个全局变量,可显示6路PWM波形。 实验六DSP四则运算 一、实验目的 1、理解并掌握DSP Q15定标的运算规则 二、实验仪器 1、计算机及MC56F8013EVM实验板 2、相应接线 三、实验原理 加减法运算:采用QIS的固定定标值的加/减运算只需要考虑饱和处理即可, 不需要在计算过程中进行移位处理。 乘法运算:两个以Q15定标的I5位定点数相乘得到32位结果,由于乘积 也需要用16位按去Q15定点数表示,因此只需要将32位乘积左移1位后,取 高16位作为最终乘积即可。 除法运算:两个以QIS定标的I6位定点数相除,先将被除数左移15位, 也就是说用32位数表示被除数,得到商。注意:被除数应小于除数。 四、实验步骤 1、创建一个工程,命名为value caculation。 2、添加PCse Master Components。 3、添加DSP Funes MFR Componentso。 4、点击“Project”下面的“Make”选项,PE将自动生成组件程序。 5、编写主程序,编写完成后,点击Debug按钮下载程序。 6、按实验一的方法使用PC Master,观察各个变量的值。 /** ################################################################### ** Filename : caculation.C ** Project : caculation ** Processor : 56F8013VFAE ** Version : Driver 01.14 ** Compiler : Metrowerks DSP C Compiler ** Date/Time : 2014/4/20, 20:14 ** Abstract : ** Main module. ** This module contains user's application code. ** Settings : ** Contents : ** No public methods ** ** ###################################################################*/ /* MODULE caculation */ /* Including needed modules to compile this module/procedure */ #include "Cpu.h" #include "Events.h" #include "PC_M1.h" #include "Inhr1.h" #include "MFR1.h" /* Including shared modules, which are used for whole project */ #include "PE_Types.h" #include "PE_Error.h" #include "PE_Const.h" #include "IO_Map.h" Frac16 value1=15000; Frac16 value2=26000; Frac16 sat_value_1; Frac16 sat_value_2; Frac16 sat_value_3; Frac16 sat_value_4; Frac16 sat_unit_value_1; Frac16 sat_unit_value_2; Frac16 sat_unit_value_3; Frac16 sat_unit_value_4; Frac16 unsat_value_1; Frac16 unsat_value_2; Frac16 unsat_value_3; Frac16 unsat_value_4; Frac16 unsat_unit_value_1; Frac16 unsat_unit_value_2; Frac16 unsat_unit_value_3; Frac16 unsat_unit_value_4; void main(void) { /* Write your local variable definition here */ /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/ PE_low_level_init(); /*** End of Processor Expert internal initialization. ***/ /* Write your code here */ for(;;) { turn_on_sat(); sat_value_1=value1+value2; sat_value_2=value1-value2; sat_value_3=value1*value2; sat_value_4=value1/value2; sat_unit_value_1=add(value1,value2); sat_unit_value_2=sub(value1,value2); sat_unit_value_3=mult(value1,value2); sat_unit_value_4=div_s(value1,value2); turn_off_sat(); unsat_value_1=value1+value2; unsat_value_2=value1-value2; unsat_value_3=value1*value2; unsat_value_4=value1/value2; unsat_unit_value_1=add(value1,value2); unsat_unit_value_2=sub(value1,value2); unsat_unit_value_3=mult(value1,value2); unsat_unit_value_4=div_s(value1,value2); } } 五、实验结果: 六、思考题 观察实验结果,比较下面4组值是否相同,并对结果进行分析。 1)sat value_1与sat_unit_value_1;相同,同为32767 2)sat value_2与sat_unit_value_2;相同,同为54536 3)sat value_3与sat_unit_value_3;不同,前者为60800,后者11901 4)sat value_4与sat_unit_value_4;不同,前者为0,后者18904 实验七DAC数模转换实验 一、实验目的 I、了解DSP中数模转换器的工作原理 2、掌握Freescale系列DSP56F80x数/模转换模块的典型应用 二、实验仪器 1、计算机及NIC56F80I3EVM实验板 2, SV供电电源 3、示波器一台 4、相应接线 三、实验原理 电路的输入为PWM脉冲信号,此电路的作用是将PWM信号进行低通滤波, 使得输出DAO/DAl的模拟电压值与PWM信号的占空比成正比。 PWM信号电压范围:OV}3.3V; PWM的输出为方波信号,经过低通滤波, 得到模拟量信号。 电路的输入输出关系为:0%占空比→1.24V ; 100%占空比→-1.24V 。 如图所示连线,用USB串口线将仿真器与主机的USB口相连,用串口线将 RS232与主机的串口相连 2、程序运行连接图 (此实验需5V供电) 该实验需要5V供电,故下载完程序后,需拔除下载器,接上SV电源。 3、示波器接线图如下所示: DAO/DA1位于图示板子位置右侧接线端子第二排,GNI?位于左侧接线端子 第三排外侧。 四、实验内容与步骤 按提供的参考步骤进行设置,观察并记录实验结果。 1)创建工程:打开:codewarrior IDE,在Mlle菜单中选择new命令。按图中选择Processor Expert Stationery并输入要建立工程的名称和路径。该工程名为DAC。 2)添加组件:首先在PE选项卡的Components下面单击鼠标右键,在弹出的菜单中选择Add Component(s)...,添加1个PWM 3)在组件监视器窗口中对PWM模块进行设置,选择中心对齐方式、独立 通道模式、中断使能、开关频率10khz。 4)添加DSP_Func_TFR Components。 5)在组件监视器窗口中对PWMA模块的Methods选项中设置需要生成的 模块子程序。 6)点击“Project”下面的“Make”选项,PE将自动生成组件子程序。 7)编写主程序和PWM重载中断服务程序。 #include "PE_Const.h" #include "IO_Map.h" void main(void) { /* Write your local variable definition here */ /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/ PE_low_level_init(); /*** End of Processor Expert internal initialization. ***/ /* Write your code here */ PWMC1_Enable(); PWMC1_OutputPadEnable(); for(;;) {} } 重载中断服务程序: int Duty1; int Duty2; int theta; #pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */ /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR) */ void PWMC1_OnReload(void) { /* Write your code here ... */ turn_off_sat(); theta=theta+131;//10Khz turn_on_sat(); Duty1=TFR1_tfr16SinPIx(theta)/2+16384; Duty2=TFR1_tfr16CosPIx(theta)/2+16384; turn_off_sat(); if(Duty1<0)Duty1=0; if(Duty2<0)Duty2=0; PWMC1_SetRatio15(0,Duty1); PWMC1_SetRatio15(1,Duty2); PWMC1_Load(); } 8)编译运行。 9)移除Freescale仿真器 10)接上5v电源 11)打开示波器, 把示波器探头连接在DA输出口DAO/DA 1,观察输出波形。 示波器观察到的DAO/DA 1波形如下图所示: 五、实验结果: 六、思考题 1、数模转换的工作原理。 答:数字量是用代码按数位组合起来表示的,对于有权码,每位代码都有一定的位权。为了将数字量转换成模拟量,必须将每1位的代码按其位权的大小转换成相应的模拟量,然后将这些模拟量相加,即可得到与数字量成正比的总模拟量,从而实现了数字—模拟转换。这就是组成D/A转换器的基本指导思想。 图11.1.1表示了4位二进制数字量与经过D/A转换后输出的电压模拟量之间的对应关系。 由图11.1.1还可看出,两个相邻数码转换出的电压值是不连续的,两者的电压差由最低码位代表的位权值决定。它是信息所能分辨的最小量,也就是我们所说的用1LSB(Least Significant Bit)表示。对应于最大输入数字量的最大电压输出值(绝对值),用FSR(Full Scale Range)表示。 D/A转换器由数码寄存器、模拟电子开关电路、解码网络、求和电路及基准电压几部分组成。数字量以串行或并行方式输入、存储于数码寄存器中,数字寄存器输出的各位数码,分别控制对应位的模拟电子开关,使数码为1的位在位权网络上产生与其权值成正比的电流值,再由求和电路将各种权值相加,即得到数字量对应的模拟量。 2、随着占空比的增大或减小,LED指示灯一是怎样变化的。 答:000→001→010→011→100→101→110→111

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。