ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:628.06KB ,
资源ID:7821244      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7821244.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP实验报告Word下载.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

DSP实验报告Word下载.docx

1、是介于0 的一个值。A、B、C分别为和输入波形相交的三点,则A、C两点之间为一个周期,只要测得A、C两点之间的时间就可以得到周期值,从而进行后面的计算。本算法的主要核心是进行比较。当A/D采样值大于时,开启定时器,第二次A/D采样值小于时即B点,第三次A/D采样值大于时即C点时关闭定时器,读取定时器的值,从A-C是一个周期,这样就可以通过程序测得波形的周期T。每次A/D采样间隔的时间一样为7.5 ,这样就可以算出来一个周期需要采集的点数N=T/7.5 然后根据公式和算出平均值和有效值。图3 输入采样真实波形如图3所示,在具体实验时遇到测周期不准的问题,后面发现是因为输入波形不是理想的,在和固定

2、比较值比较的时候会有抖动,这样的话可能会在一个点重复比较好几次。后面在程序里面加了防抖动的程序,有效的解决了这个问题。在采样后与比较一次在继续比较5个点,如果有5个点都比大或者小才确认比较了一次,这样有效地解决了波形的抖动问题,使测得的周期准确稳定。四、程序流程图如图4所示,为程序的总流程图,包括DSP的初始化,A/D采样,比较通过定时器算出周期,然后根据上面所提的公式计算有效值和平均值,最后把得到的值发送到上位机上实时画图显示并且在数码管上显示出来。图4 程序流程图五、实验结果和分析1、试验平台本试验实验平台为CCS3.3,主界面如图所示。图5 CCS3.3平台主界面2、试验步骤(1) 实验

3、准备:给实验板加电,启动CCS,打开工程,连接目标板。(2) 通过键盘设置输入信号。(3) 编写好程序,编译并下载程序。(4) 在PC机上打开串口调试助手,在CCS中打开观察波形和一些变量的窗口,启动程序,观察相关波形和参数。3、试验波形和结果通过键盘设置信号发生器输出的波形形状、幅值和频率,然后去观察测得的周期值,有效值和平均值来检测算法的正确性和通用性。如图6所示输入1000Hz/1000mV的正弦波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。图6 1000Hz/1000mV正弦波波形及参数如图7所示输入1000Hz/2000mV的正弦波的采样波形,数码

4、管有效值显示,watch window相关变量值的照片如下所示。图7 1000Hz/2000mV正弦波波形及参数如图8所示输入2000Hz/1000mV的正弦波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。图8 2000Hz/1000mV正弦波波形及参数如图9所示输入1000Hz/1000mV的方波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。图9 1000Hz/1000mV方波波形及参数如图10所示输入1000Hz/1000mV的三角波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。图10 1

5、000Hz/1000mV三角波波形及参数如图11所示为通过串口把有效值发送到串口助手的截图,可以看出DSP可以成功的通过SCI把测得的数据发送到上位机上。同时也可以把发送的数据用MATLAB画出来。图11 串口发送有效值显示4、试验结果分析通过实验可以看出可以看出A/D采样显示正常,所用的程序可以较好的测得正弦波、方波、三角波的周期值、平均值。另外可以通过串口把需要测得的参数发送到串口助手上,或者自己编写的MATLAB上位机实时显示波形。通过键盘修改输入波形的频率和周期也可以很稳定的测得波形的周期、有效值、平均值,从而验证了算法正确性。5、试验中的问题及解决(1) 实验板加电后第二次烧写程序后

6、,总是进不了A/D采样中断程序,每次运行一次都要重启一下实验板。经过分析应该是程序在运行一次后,让程序停止后A/D中断的一些中断标志位没有清零。所以我在程序的一开始加上了清A/D中断标志位的程序,有效的解决了这个问题。(2) 在想好测量周期算法后,写好程序验证时发现,测得的周期值很不稳定。经过观察波形分析,是因为实际采样波形会有波动。加了防抖动算法后有效解决了这个问题。(3) 在编写MATLAB上位机实时显示波形时,发现由于串口一次只能发送一个字节,最大只能到255,而需要发送的参数值大于255。经过查询资料,我把每个参数分高八位和低八位发送,然后在上位机上再把这两个八位数据合并成一个十六位数

7、据。(4) 开始程序计算波形周期、有效值、平均值算法都放在A/D中断里面,结果发现会影响A/D的采样,经过分析发现,因为算法计算量挺大,在中断里面算不完。所以我在A/D中断里面设置了一个标志位,当采样完一个周期以后置位,然后在main函数的for循环里面判断计算,提高了CPU的计算效率。六、实验总结通过这段时间的DSP的学习和实验,让我对TMS320F28335各个模块有了一定深度的理解和认识,让我更好的把握了这款DSP的相关知识,同时也让我对其他DSP的学习打好基础。通过这次实验,也遇到了很多问题,自己和同学仔细去分析,一步一步去解决问题,锻炼了我们分析DSP相关问题的能力。另外结合上学期学

8、习的MATLAB知识,自己查询资料,在MATLAB里面写了串口的程序,把发送过来的数据通过画图画出来。感觉学习狠多。另外非常感谢崔江老师和沈乐同学的指导和帮助。七、DSP MAIN函数源程序清单(双栏)#include DSP2833x_Device.h / DSP2833x Headerfile Include FileDSP2833x_Examples.h / DSP2833x Examples Include Filemath.h/#include #define SCI 1#define UART_INT 0/ Prototype statements for functions fo

9、und within this file.interrupt void adc_isr(void);interrupt void ISRTimer2(void);interrupt void scicTxFifoIsr(void);interrupt void scicRxFifoIsr(void);interrupt void scibTxFifoIsr(void);interrupt void scibRxFifoIsr(void);void scib_fifo_init();void scic_fifo_init();void error(void);#if (CPU_FRQ_150MH

10、Z) / Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz#endif#if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0x2 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz#define ADC_CKPS 0x1 / ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12

11、.5MHz#define ADC_SHCLK 0xf / S/H width in ADC module periods = 16 ADC clocks#define AVG 1000 / Average sample limit#define ZOFFSET 0x00 / Average Zero offset#define BUF_SIZE 160 / Sample buffer size/ Global variables used in this example:/ Global variablesUint16 dataC; / Received data for SCI-AUint1

12、6 dataB; / Rceived data for SCI-AUint16 ConversionCount=0;Uint16 Voltage11024;Uint32 jifen=0;Uint32 vrms=0;Uint32 vavg=0;Uint32 voltage=0;Uint16 cnt=0;Uint32 Vdc;Uint32 ACpeak;Uint32 peak10;int Led_Flag;int Comp_Flag=0;Uint32 Period=0;Uint32 Freq=0;Uint32 fangdoucnt=0;Uint32 fangdou1cnt=0;Uint32 plo

13、tnum=200;int startflag=0;int jifencnt=0;int i=0;void write();void txnum(int a);main()/ Step 1. Initialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl();/ Step 2. Initialize GPIO:/ This example function is found

14、in the DSP2833x_Gpio.c file and/ illustrates how to set the GPIO to its default state. InitGpio(); / Skipped for this example InitSciGpio();/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU interrupts DINT;/ Initialize the PIE control registers to their default state./ The

15、 default state is all PIE interrupts disabled and flags/ are cleared./ This function is found in the DSP2833x_PieCtrl.c file. InitPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt/ S

16、ervice Routines (ISR)./ This will populate the entire table, even if the interrupt/ is not used in this example. This is useful for debug purposes./ The shell ISR routines are found in DSP2833x_DefaultIsr.c./ This function is found in DSP2833x_PieVect.c. InitPieVectTable(); #if UART_INT/ Interrupts

17、that are used in this example are re-mapped to/ ISR functions found within this file. EALLOW; / This is needed to write to EALLOW protected registers#if SCI PieVectTable.SCIRXINTB = &scibRxFifoIsr; PieVectTable.SCITXINTB = &scibTxFifoIsr; #else PieVectTable.SCIRXINTC = &scicRxFifoIsr; PieVectTable.S

18、CITXINTC = &scicTxFifoIsr;#endif EDIS; / This is needed to disable write to EALLOW protected registers/ Step 4. Initialize all the Device Peripherals:/ This function is found in DSP2833x_InitPeripherals.c/ InitPeripherals(); / Not required for this example#if SCI scib_fifo_init(); / Init SCI-B scic_

19、fifo_init(); / Init SCI-C/ Step 5. User specific code, enable interrupts:#if UART_INT/ Enable interrupts required for this example PieCtrlRegs.PIECTRL.bit.ENPIE = 1; / Enable the PIE block PieCtrlRegs.PIEIER9.bit.INTx3=1; / PIE Group 9, INT3 RE PieCtrlRegs.PIEIER9.bit.INTx4=1; / PIE Group 9, INT4 TX

20、 IER = 0x100; / Enable CPU INT PieCtrlRegs.PIEIER8.bit.INTx5=1; / PIE Group 8, int5 RE PieCtrlRegs.PIEIER8.bit.INTx6=1; / PIE Group 8, INT6 TX IER = 0x080; EINT; / This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; PieVectTable.TINT2 = &ISRTimer2; InitXintf(); InitA

21、dc(); / For this example, init the ADC InitCpuTimers(); ConfigCpuTimer(&CpuTimer2, 150, 1000000); StopCpuTimer2(); /StartCpuTimer2(); CpuTimer2Regs.TCR.all = 0x4001; / Use write-only instruction to set TSS bit = 0/ CpuTimer2Regs.TIM.all=0; max7219_data_send(0x090f);/设置译码方式寄存器, max7219_data_send(0x0a

22、05);/设置亮度调整寄存器 max7219_data_send(0x0b03);/设置扫描控制寄存器 max7219_data_send(0x0c01);/设置掉电模式寄存器 max7219_data_send(0x0f00); DELAY_US(1000);/ Enable ADCINT in PIE PieCtrlRegs.PIEIER1.bit.INTx6 = 1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; IER |= M_INT1; / Enable CPU Interrupt 1 IER |= M_INT14; / Enable Global inte

23、rrupt INTM ERTM; / Enable Global realtime interrupt DBGM LoopCount = 0; ConversionCount = 0; AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; / 0 Non-Cascaded Mode; 1 Cascaded Mode AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; AdcRegs.ADCTR

24、L2.bit.RST_SEQ1 = 0x1; AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x6; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15; AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; / write(1234);/ Wait for ADC interrupt AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; / Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / Acknowledge interrupt to PIE /LoopCount=sqrt(199); for(;) if(startflag=1) jifen=0; startflag=0; for(i=0;i8; while(ScibRegs.SCIFFTX.bit.TXFFS

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2