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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据采集处理和控制系统设计.docx

1、数据采集处理和控制系统设计DSP大作业题目: 数据采集处理和控制系统设计 院系名称: 电气工程学院 专业班级: 学生姓名: 学 号: 目 录1引言 22.系统分析 32.1主要任务 32.2设计要求 32.3 系统总体结构方框图 43. 硬件设计 53.1DSP模块设计 53.2 电源模块设计 63.3 时钟模块设计 63.4 存储器模块设计 73.5 TMS320VC5416最小系统PCB版图 84 软件设计 95 程序运行效果 105.1 采集的数据及其FFT计算结果 105.2 叠加波形与滤波后波形比较 105.3 滤波前后信号的频谱图比较 116 课程设计总结 117 参考文献 12附

2、录1 程序 131引言21世纪是数字化的时代,随着信息处理技术的飞速发展,DSP(数字信号处理器)技术逐渐发展成为一门主流技术,它在电子信息、通信、软件无线电、自动控制、仪表技术、信息家电等高科技领域得到了越来越广泛的应用。相对于模拟滤波器,数字滤波器没有漂移,能够处理低频信号,频率响应特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等,这些优势决定了数字滤波器的应用越来越广泛,工程上常用它来做信号处理、数据传送和抑制干扰等。同时DSP的出现和迅速发展也促进了数字滤波器的发展,并为数字滤波器的硬件实现提供了更多的选择。本课题主要应用应用DSP集成开发环境CCS调试C程序,用TMS3

3、20VC5416来实现信号采集处理与控制系统的设计。2.系统分析2.1主要任务 本系统设计的主要任务包括DSP硬件系统设计和软件系统设计。其中硬件设计要求设计一个精简的能独立运行的DSP系统,包括绘制系统的原理图和PCB版图;软件设计要求编写基于所设计的硬件系统的CCS程序使其能够完成数据采集处理和控制等功能。2.2设计要求利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号的叠加。在DSP中采集信号,并且对信号进行频谱分析,滤波等。通过键盘选择算法的功能,将计算的信号频率或者滤波后信号的频率在LCD上显示。主要功能如下:一、 对外部输入的模拟信号采集到DSP内存,会用CCS

4、软件显示采集的数据波形。二、 对采集的数据进行如下算法分析:(1) 频谱分析:使用fft算法计算信号的频率。(2) 对信号进行IIR滤波或FIR滤波,并且计算滤波前后信号的频率。三、 外部键盘选择算法功能,并且将结果在LCD上显示。2.3 系统总体结构方框图3. 硬件设计3.1DSP模块设计3.2 电源模块设计3.3 时钟模块设计3.4 存储器模块设计3.5 TMS320VC5416最小系统PCB版图板上包括了支持TMS320VC5416独立运行的时钟电路、复位电路、Flash模块、JTAG仿真接口电路以及电源模块等。所有的器件都放在了正面,电源、复位按键和JTAG接口放在了板子边缘方便连接和

5、调试。4 软件设计5 程序运行效果5.1 采集的数据及其FFT计算结果可见所采集的信号中仅含有多种频率分量,直流、低频和高频。5.2 叠加波形与滤波后波形比较可见滤波后信号中的高频分量得到了较大的衰减,滤波后波形变得平滑。5.3 滤波前后信号的频谱图比较由滤波前后高低频分量的相对大小再次证明低通滤波器对高频分量的衰减作用较强。6 课程设计总结DSP作为嵌入式处理器家族的一大类,其结构特点决定了它尤其适合做数字信号处理的应用,而学好数字信号处理对日后的信息处理的深入学习和应用有着重要意义,因而学好DSP技术也就有着深远的意义。通过此次课程设计我学习了一个实际的电子系统的完整的设计流程,掌握了PC

6、B设计软件Altium Designer的使用方法,并熟悉了CCS工程的建立和基于TMS320VC5416的DSP程序的编写。在此次课程设计中我也遇到了很多问题,首先是绘制PCB版图时的布局和布线问题,这是一个需要经验和技巧的问题,尤其是Flash器件与DSP的连线较多而DSP的所有数据线和地址线分布又较为分散,所以也就多画了几遍,争取精益求精还是能够画好的。还有创建CCS工程后cmd文件和中断向量表的详细配置,这两个文件的修改需要清楚DSP的结构以及存储器映射情况,通过阅读几本参考书和其他一些资料,自己已经基本明白了他们的作用和配置方法。还有就是程序的调试,DSP的结构比单片机要复杂的多,相

7、应的寄存器也就较多,而很多情况下编写DSP程序都需要操作和配置寄存器,这既要求对冯诺依曼体系结构的处理器的共性有一定了解,同时也要针对DSP的特点来进行,编程前需对各个硬件模块之间的内在联系进行整体考虑,这样可以训练自己的系统思维。当然这些问题都有一定的难度,但是想办法解决它们的过程也就是学习和进步的过程。通过此次课程设计我对TMS320C54x系列DSP的硬件结构有了较为深刻的认识,值得一提的是54x的DSP没有大量的GPIO可使用,这显然是不能满足实际应用的需求的,试验箱上采用的是使用CPLD作为DSP与其他器件之间的桥梁,通过IO端口的访问来进行输入和输出操作,同时使用AD7822时也是

8、通过CPLD来为它提供必要的时序,这样就大大简化了DSP对外围器件的控制任务,使其能够专注于运行各种算法,该设计方案为自己设计DSP系统提供了有益的参考。此次课程设计持续时间虽然不长,但是自己在设计过程中却学到了不少的知识和技能,包括从查阅和参考的各种资料中也学到了DSP的硬件和软件设计技巧,以及CCS的使用和常见问题的排除和程序的调试组装等等。7 参考文献【1】清源科技 . TMS320C54x DSP硬件开发教程M . 机械工业出版社,2003 【2】TMS320VC5416 Data Manual Texas Instruments,2005【3】江思敏,刘畅 . TMS320C54x

9、DSP的应用程序设计教程M . 机械工业出版社【4】TMS320C54x 系列DSP的CPU与外设 . 清华大学出版社附录1 程序 FFT算法程序:void kfft(double prLength,double piLength,int n,int k,double frLength,double fiLength,int l,int il) int it,m,is,i,j,nv,l0; double p,q,s,vr,vi,poddr,poddi; for(it=0;it=n-1;it+) m=it; is=0; for (i=0; i=k-1; i+) j=m/2; is=2*is+(m

10、-2*j); m=j; frit=pris; fiit=piis; pr0=1.0; pi0=0.0; p=6.283185306/(1.0*n); pr1=cos(p); pi1=-sin(p); if (l!=0) pi1=-pi1; for (i=2; i=n-1; i+) p=pri-1*pr1; q=pii-1*pi1; s=(pri-1+pii-1)*(pr1+pi1); pri=p-q; pii=s-p-q; for (it=0; it=0; l0-) m=m/2; nv=2*nv; for (it=0; it=(m-1)*nv; it=it+nv) for (j=0; j=(n

11、v/2)-1; j+) p=prm*j*frit+j+nv/2; q=pim*j*fiit+j+nv/2; s=prm*j+pim*j; s=s*(frit+j+nv/2+fiit+j+nv/2); poddr=p-q; poddi=s-p-q; frit+j+nv/2=frit+j-poddr; fiit+j+nv/2=fiit+j-poddi; frit+j=frit+j+poddr; fiit+j=fiit+j+poddi; if (l!=0) for (i=0; i=n-1; i+) fri=fri/(1.0*n); fii=fii/(1.0*n); if (il!=0) for (i

12、=0; i=n-1; i+) pri=sqrt(fri*fri+fii*fii); if (fabs(fri)0) pii=90.0; else pii=-90.0; else pii=atan(fii/fri)*360.0/6.283185306; 卷积程序:void convolve(double *Input,double *Impulse,double *Output,uint length1,uint length2) int p,j,k; for (k=0; klength2; k+) /仅计算256点有效 for (p=0; plength1; p+) midlength1-p-

13、1=midlength1-p-2;/移位操作 mid0 = Inputk; for (j=0; jlength1; j+)/MAC运算 Outputk+=midj * Impulsej; FIR滤波器设计函数:void firdes(double npass) /npass归一化的截止频率参数int t;for (t=0; tFLen; t+) ht=sin(t-(FLen-1)/2.0)*2*npass*3.1415926)/(3.1415926*(t-(FLen-1)/2.0); if (t = (FLen-1)/2) ht=npass;求最大值和次大值函数:int m1=0;int m2

14、=0;int fmax,smax;void findmax(double *p) /使用全局变量保存频谱最大点与次大点对应的K值 int i; double max=p5; /因存在直流分量,避开几个点防止干扰 for(i=5;imax) max=pi+1; m1=i+1; pm1=0; /清零最大值以便求次大值 max=p5; for(i=5;imax) max=pi+1; m2=i+1; if(m1m2) fmax=m1;smax=m2; else fmax=m2;smax=m1;外部中断2服务函数:interrupt void ExtInt2() /中断2中断子程序,负责数据采集和处理

15、*(unsigned int*)IFR=0xFFFF; /清除中断标志 data_buffi = port8002 & 0x00ff;/读取AD采样值 i+; if(i=256&flag=1) /flag控制当显示数据刷新后再处理 i = 0; /在此设断点,观察采集进来的信号 for(k=0;kLength;k+) realk=data_buffk; /解决格式不兼容问题 imgk=0.0; FMagk=0.0; kfft(real,img,256,8,Freal,Fimg,0,1);/求输入信号的频谱 for(k=0;kLength;k+) /至此已经完成的FFT变换工作 FMagk=sq

16、rt(Frealk*Frealk+Fimgk*Fimgk); findmax(FMag); freq1=(250.0*smax)/256; /信号频率=DFT分辨率*K freq2=(250.0*fmax)/256; convolve(data,h,y,51,256); /卷积滤波 for(k=0;kLength;k+) youtk=yk; /解决格式不兼容问题 imgk=0.0; /必须重新初始化 yFMagk=0.0; kfft(yout,img,256,8,yFreal,yFimg,0,1); for(k=0;kLength;k+)/至此已经完成的FFT变换工作 yFMagk=sqrt(

17、yFrealk*yFrealk+yFimgk*yFimgk); findmax(FMag); yfreq=(250.0*fmax)/256; k=0; /此处设置断点 flag=0; return;LCD显示控制文件lcd.c#include DspRegDefine.h /VC5402 寄存器定义#define uint unsigned int #define uchar unsigned char#define CLEAR 0x0001 /清除显示#define RESAC 0x0002 /位址歸位#define SETPOINT 0x0006 /進入點設定,DDRAM 位址計數器(AC

18、)加1#define CURSOR 0x000F /整體顯示,游標顯示,游標位置反白#define MCURSOR 0x0014 /游標向右移動,AC=AC+1#define FUCSET 0x0030 /功能設定,控制界面,基本指令集,默认设置#define CGRAMAC 0x0040 /設定CGRAM 位址 #define DDRAMAC 0x0080 /設定DDRAM 位址uint ioport port8006; /液晶串行数据端口uint ioport port8007;uchar first16 = 1 fft2 fir3 iir ; uchar second16= 低频: KH

19、Z;uchar third16 = 高频: KHZ;uchar fourth16 =滤波: KHZ;uchar number11 = 0123456789.; extern double freq1,freq2,yfreq; void Delay(uint numbers) uint i,j; for(i=0;i300;i+) for(j=0;jnumbers;j+);void SendByte(uchar dat) uchar i; uint temp; for(i=0;i8;i+) temp = port8007; /读IO 8007 SCLK=0; if(dat & 0x0080) po

20、rt8006 = 0; /写IO 8006 SID=1,发送数据1 MSB先发送 else temp = port8006; /读IO 8006 SID=0,发送数据0 MSB先发送 port8007 = 0; /写IO 8007 SCLK=1; dat = dat1; /数据左移,移位到dat.7 temp = port8007 ; /读IO 8007 SCLK=0; void SendCMD(uchar dat) SendByte(0x00F8); /11111,00,0 RW=0,RS=0 同步标志 SendByte(dat & 0x00F0); /高四位 SendByte(dat &

21、0x000F)4); /低四位 void SendDat(uchar dat) SendByte(0x00FA); /11111,01,0 RW=0,RS=1 SendByte(dat & 0x00F0); /高四位 SendByte(dat & 0x000F)4); /低四位 void Initlcm() SendCMD(FUCSET); /功能設定,8BIT 并口,基本指令集 Delay(1); SendCMD(FUCSET); /功能設定,8BIT 并口,基本指令集 Delay(1); SendCMD(CURSOR); /整體顯示,游標顯示,游標位置反白 Delay(1); SendCM

22、D(CLEAR); /清除显示 Delay(1); /需要50ms延时 SendCMD(SETPOINT); /進入點設定,游標右移,DDRAM 位址計數器(AC)加1 Delay(1);void display() /显示基本框架 uint i; Delay(500); SendCMD(0x0080); /第一行 Delay(1); for(i =0;i16;i+) SendDat(firsti); Delay(1); SendCMD(0x0090); /第二行 Delay(1); for(i =0;i16;i+) SendDat(secondi); Delay(1); SendCMD(0x

23、0088); /第三行 Delay(1); for(i =0;i16;i+) SendDat(thirdi); Delay(1); SendCMD(0x0098); /第四行 Delay(1); for(i =0;i16;i+) SendDat(fourthi); Delay(1); / SendCMD(CLEAR); /清除显示void display1() uint ge,shi,bai; SendCMD(0x0093); /可以设定基地址或者偏移地址 Delay(1); bai=(int)(freq1*10.0)/100; shi=(int)(freq1*10.0)%100/10; ge

24、=(int)(freq1*10.0)%10; /强制类型转换并提取各位显示 SendDat(numberbai); Delay(0); SendDat(numbershi); Delay(0); SendDat(number10); Delay(0); SendDat(numberge); Delay(0);void display2() uint ge,shi,bai; SendCMD(0x008b); /可以设定基地址或者偏移地址 Delay(1); bai=(int)(freq2*10.0)/100; shi=(int)(freq2*10.0)%100/10; ge=(int)(freq

25、2*10.0)%10; /强制类型转换并提取各位显示 SendDat(numberbai); Delay(0); SendDat(numbershi); Delay(0); SendDat(number10); Delay(0); SendDat(numberge); Delay(0);void display3() uint ge,shi,bai; SendCMD(0x009b); /可以设定基地址或者偏移地址 Delay(1); bai=(int)(yfreq*10.0)/100; shi=(int)(yfreq*10.0)%100/10; ge=(int)(yfreq*10.0)%10;/强制类型转换并提取各位显示 SendDat(numberbai); Delay(0); SendDat(numbershi); Delay(0); SendDat(number10); Delay(0); SendDat(numberge); Delay(0);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1