版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上DSP课程设计总结(2014-2015学年第2学期)题 目 : 数据采集处理和控制系统设计 专业班级 : 电子1202 学生姓名 : 李茹 学 号 : 指导教师 : 李莉 设计成绩 : 2015 年 7 月专心-专注-专业目 录一 设计目的.1二 系统分析.11.1 设计要求.11.2 主要任务.1三 硬件设计.23.1 硬件总体结构.23.2 DSP模块设计.43.3 电源模块设计.63.4 时钟模块设计.63.5 存储器模块设计.7四 软件设计.94.1 软件总体流程.94.2 核心模块及实现代码.9五 课程设计总结.29六 参考文献.29一 设计目的 此设计结合
2、硬件、软件得到一个基于TMS320VC5416芯片,能完成数据采集、频谱分析、滤波、LCD显示的DSP系统。以此加强了对DSP功能的认识,复习了Altium Designer软件的使用方法。并在此基础上利用CCS软件编程实现A/D采集,FFT变换处理,低通滤波,显示滤波成分等功能的完整的小型数字处理系统。二 系统分析1.1设计要求 (1)硬件设计要求 设计一个功能完备的,能够独立运行的精简DSP硬件系统,使用Altium Designer绘制出系统原理图和PCB图。 (2)软件设计要求 利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号叠加。在DSP中采集信号,并且对信号进
3、行频谱分析,滤波等。通过串口命令选择算法功能,将计算的信号频率或者滤波后的信号频率在LCD上显示。1.2主要任务(1)DSP 硬件系统设计 设计DSP基本结构并绘制单片机最小系统原理图和PCB图。 (2)数据采集处理和控制系统设计 利用CCS软件编程实现数据采集x(n)对数据FFT处理、分析频率成分根据频率成分设计FIR低通滤波器h(n)卷积x(n)*h(n)=y(n)得到滤波之后的信号分析滤波之后y(n)的频率成分LCD显示高频,低频和滤波器的截止频率。三 硬件设计3.1 硬件总体结构 1 FLASHWROE READYRS DSP _ R/W X2/CLKINA0-A19电源 D0-D15
4、复位电路JTAG晶振 图1 硬件总体结构本次实验使用TMS320VC5416芯片作为主芯片。外围电路包括:电源、复位电路、时钟发生器(外接晶振或外接晶体)、外部存储器FLASH、仿真接口电路JTAG、外部中断(不用:上拉)、I/O(不用:输出悬空,输入上拉)与主机通信的并行接口HPI(不用:悬空)。(1) 原理图设计 图2 单片机最小系统原理图 (2)PCB板设计 图3 PCB图(1) 图4 PCB图(2)如图所示,由于其右上部分地址线和数据线较多,铺铜不方便,所以Vcore层分布在TM320VC5416芯片的左下部分。+3.3V为顶层红色部分,GND为底层蓝色部分。3.2 DSP模块设计图5
5、DSP模块(1)上图为TMS320VC5416芯片的设计,该芯片不用的输入引脚要拉高,输出引脚悬空。本设计用到了该芯片的数据信号线,初始化、中断和复位线,部分存储器控制信号线,部分振荡器/定时信号线,串口信号线,电源引脚线和JTAG测试引脚线。主CPU每个电源管脚旁边都有一个0.1uF的去耦电容,去耦电容可以提供较稳定的电源,同时也可以降低元件耦合到电源端的,间接可以减少其他元件受此元件噪声的影响。CLKMOD1、CLKMOD2、CLKMOD3分别接1、1、0,表示锁相环一倍频 图6 DSP模块(2) 图6 DSP模块(3)3.3 电源模块设计图7 电源模块73HD316为DC-DC转换芯片,
6、将+5V电压转换成Vcore和+3.3V电压,电源和地之间要接滤波电容。Vcore为内核电压,+3.3V为外设电压,这样可以减小功耗。3.4 时钟模块设计 图8 时钟模块10MHZ晶振的输出接到TM320VC5416芯片的X2/CLKIN管脚,芯片的X1悬空,即使用外部晶振。3.5 存储器模块设计 图9 存储器模块存储器的数据线和地址线分别接CPU的数据线和地址线。DSP控制信号R/W_L接FLASH的WE_L和OE表示DSP向FLASH写和从FLASH读有效。当DSP从FLASH读时,DSP输出高电平,但FLASH的OE为低有效,应接一个非门。3.6 复位电路设计 图10 复位电路 如图所示
7、有两种复位方法:(1)上电复位,利用RC的延迟特性,刚开始上电,由于电容电压不能突变,RESET处为低,直到电容充电完毕,变高,实现复位;(2)手动复位,S1闭合,电容放电,电平变低,断开,电容充电过程与上电复位相同,实现复位。发光二极管用来表示DSP的工作状态三个电源是否正常工作。3.7 仿真接口电路设计 图11 仿真接口电路 JTAG仿真接口,用于将外部的程序、数据导入DSP内部,完成运算处理。是外部存储器与DSP的一个媒介。四 软件设计系统各模块初始化4.1 软件总体流程A/D采样对采样信号进行FFT运算,并求两频率值设计FIR低通滤波器调用卷积算法对信号进行处理LCD显示频率值返回第二
8、步4.2 核心模块及实现代码(1)主要代码/-头文件-#include "DspRegDefine.h" /VC5402 寄存器定义#include "stdio.h" /输入输出接口定义#include "math.h" /数学计算定义 /-/* * 宏定义 */#define UCHAR unsigned char#define UINT16 unsigned int#define UINT32 unsigned long#define TRUE 1#define FALSE 0#define Length 256 /FFT的点数
9、/-/- LCD 指令 -/基本指令集 RE = 0#define CLEAR 0x0001 /清除显示#define RESAC 0x0002 /位址歸位#define SETPOINT 0x0006 /進入點設定,游標右移,DDRAM 位址計數器(AC)加1#define CURSOR 0x000F /整體顯示,游標顯示,游標位置反白#define MCURSOR 0x0014 /游標向右移動,AC=AC+1#define FUCSET 0x0030 /功能設定,BIT MPU 控制界面,基本指令集,默认设置#define CGRAMAC 0x0040 /設定CGRAM 位址 #defin
10、e DDRAMAC 0x0080 /設定DDRAM 位址 /第一行AC 範圍為80H.8FH /第二行AC 範圍為90H.9FH /第三行AC 範圍為A0H.AFH /第四行AC 範圍為B0H.BFH/#define READBF RS=0,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0/ BF AC6 AC5 AC4 AC3 AC2 AC1 AC0/ 讀取忙碌旗標(BF)和位址/ 就是读取指令寄存器,PORT8006,BF=1,表示LCD忙碌/#define WRITERAM RS=1,RW=0,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0/ D7
11、 D6 D5 D4 D3 D2 D1 D0/ 寫入資料到RAM/ 就是写数据寄存器: PORT8005/#define READRAM RS=1,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0/ D7 D6 D5 D4 D3 D2 D1 D0/ 讀取RAM 的值/ 就是从数据寄存器讀取資料, PORT8007/擴充指令集 RE=1#define IDLE 0x01 /待命模式#define CGRAMSET 0x02 /捲動位址或RAM 位址選擇#define REVERSE 0x04 /反白選擇#define SLEEP 0x0c /脫離睡眠模式#define EF
12、UCSET 0x66 /擴充功能設定,8 BIT MPU 控制界面,為擴充指令集動作,繪圖顯示ON#define SISA 0x40 /設定IRAM 位址或捲動位址#define SETGDRAM 0x80 /設定繪圖RAM 位址/-/* 端口定义 */-ioport UINT16 port8002; /定义输出AD端口为0x8002;ioport UINT16 port8004; /写指令寄存器ioport UINT16 port8005; /写数据寄存器ioport UINT16 port8006; /读指令寄存器ioport UINT16 port8007; /读数据寄存器/-/* 全局
13、变量定义 */-int in_xLength; /数据缓冲数组 Lengthint i = 0;int s,m = 0;int intnum = 0;int flag = 0; /采集Length点的标志double xavg; double xLength,moLength,mo2Length,prLength,piLength;int n,l,il;int k=8; /k为Length相对于2的幂次double data_kfftLength ; /数据缓冲 256个数组double data_reLength ; /数据缓冲 256个数组double data_imLength ; /数
14、据缓冲 256个数组double data_buffimLength ; /数据缓冲 256个数组double data_out256 ; double data_temp256;double data_out1256;double h51 ; int x1=0;int x2=0;double fhz=0;double f1;double f2;double wc=0;int i; UINT16 temp; UCHAR data_buff110 = "低频: "UCHAR data_buff210 = "高频: " UCHAR data_buff310
15、= "滤波: " UCHAR data_buff416 = "liru " UCHAR num11 = "." int a;int b;int c; int d; /* * 所使用的函数原型 */void cpu_init(void); /初始化CPUvoid Delay(UINT16 numbers); /延迟void xint2_init(void); /外部中断2初始化子程序void kfft(double prLength,double piLength,int n,int k,double frLength,double f
16、iLength,int l,int il);/基2快速傅立叶变换子程序interrupt void ExtInt2(); /中断2中断子程序void firdes(double npass); /firvoid Convolveok( /卷积函数 double *x, /原始输入数据 double *h, /冲击响应 double *y, /卷积输出结果 UINT16 length, /序列长度 UINT16 fLen); extern void delay_100us(void); /100us延迟 -指令之间的延迟extern void delay_1us(void); /1us延迟 -时
17、钟之间的延迟void delay_50ms(void); /50ms延迟 -复位延迟void delay_20ms(void); /20ms延迟 -清屏延迟void SendByte(UCHAR dat); /串行发送一字节数据void SendCMD(UCHAR dat); /写指令寄存器 void SendDat(UCHAR dat); /写显示数据或单字节字符void Display(UCHAR x_add,UCHAR dat1,UCHAR dat2); /写汉字到LCD 指定的位置void Initlcm(void); /初始化 LCM/-/* 函数定义 */-/ 函数名称 : voi
18、d cpu_init(void)/ 函数说明 : 初始化CPU/ 输入参数 : 无/ 输出参数 : 无/-void cpu_init(void) asm(" nop ");asm(" nop ");asm(" nop ");/-/- *(unsigned int*)CLKMD=0x0; /switch to DIV mode clkout= 1/2 clkin while(*(unsigned int*)CLKMD)&01)!=0); *(unsigned int*)CLKMD=0x77ff; /switch to PLL X
19、 3 mode /-/*-*/*(unsigned int*)PMST=0x3FF2;/-/*-*/*(unsigned int*)SWWSR=0x7fff;/-/-*(unsigned int*)SWCR=0x0001;/-/- *(unsigned int*)BSCR=0xf800;/-asm(" ssbx intm "); /Disable all mask interrupts /-/-*(unsigned int*)IMR=0x0;/-/*-*/*(unsigned int*)IFR=0xffff;/- asm(" nop ");asm(&qu
20、ot; nop ");asm(" nop "); /*- 函数名称 : void Delay(int numbers)- 函数说明 : 延时- 输入参数 : numbers- 输出参数 : 无*/void Delay(UINT16 numbers) UINT16 i,j; for(i=0;i<4000;i+) for(j=0;j<numbers;j+); /-/ 函数名称 : void xint2_init(void)/ 函数说明 : 初始化XINT2/ 输入参数 : 无/ 输出参数 : 无/-void xint2_init() /外部中断2初始化子程
21、序 *(unsigned int*)IMR=0x0004;/使能int2中断 /* bit 15 1: XINT2 flag -write "1" to clear bit 14-3 0: reserved bit 2 1: XINT2 Polarity -"1" rising eage bit 1 0: XINT2 Priority -"0" High priority bit 0 1: XINT2 Enable -"1" Enable interrupt*/ asm(" rsbx INTM"
22、);/开总中断/-/ 函数名称 : void kfft(double prLength,double piLength,int n,int k,double frLength,double fiLength,int l,int il)/ 函数说明 : 基2快速傅立叶变换子程序/ 输入参数 : / 输出参数 : 无/-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
23、,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-2*j); m=j; frit=pris; fiit=piis; pr0=1.0; pi0=0.0; p=6./(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-
24、p-q; for (it=0; it<=n-2; it=it+2) vr=frit; vi=fiit; frit=vr+frit+1; fiit=vi+fiit+1; frit+1=vr-frit+1; fiit+1=vi-fiit+1; m=n/2; nv=2; for (l0=k-2; l0>=0; l0-) m=m/2; nv=2*nv; for (it=0; it<=(m-1)*nv; it=it+nv) for (j=0; j<=(nv/2)-1; j+) p=prm*j*frit+j+nv/2; q=pim*j*fiit+j+nv/2; s=prm*j+pi
25、m*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=0; i<=n-1; i+) pri=sqrt(fri*fri+fii*fii); if (fabs(fri)&
26、lt;0.*fabs(fii) if (fii*fri)>0) pii=90.0; else pii=-90.0; else pii=atan(fii/fri)*360.0/6.; void firdes(double npass)/fir滤波器,求出单位脉冲响应 int pi=3.14; int t; for (t=0; t<51; t+) if (t = (51-1)/2) ht=2*npass; else ht = sin(t-(51-1)/2.0)*npass*pi*2)/(pi*(t-(51-1)/2.0);/fir滤波器的函数 void Convolveok( /卷积函
27、数 double *x,/原始输入数据 double *h,/冲击响应 double *y,/卷积输出结果 UINT16 length, / 序列长度 UINT16 fLen) UINT16 m,p,j;double r,rm;double xmean = 0.0;double xmid100;h0 = 0.0;h50 = 0.0;for(m=0;m<fLen;m+)xmidm = 0.0; for (m=0; m<length; m+)xmean = xm + xmean;xmean = 1.0*xmean/length;for (m=0; m<length; m+)xm
28、= xm - xmean;for (m=0; m<length; m+)for (p=0; p<fLen; p+) xmidfLen-p-1 = xmidfLen-p-2; xmid0 = xm; r = 0.0;rm= 0.0; for (j=0; j<fLen; j+) r = xmidj * hj;rm = rm + r; ym = rm; /-/ 函数名称 : void delay_50ms(void) / 函数说明 : 50ms延迟/ 输入参数 : 无/ 输出参数 : 无/-void delay_50ms() UINT16 i,j; for(i=0;i<=10
29、00;i+); for(j=0;j<=2000;j+); /延迟250*1000*CLKOUT=*CLKOUT /1/CLKOUT=0.2us /-/ 函数名称 : void delay_20ms(void) / 函数说明 : 20ms延迟/ 输入参数 : 无/ 输出参数 : 无/-void delay_20ms() UINT16 i,j; for(i=0;i<=1000;i+); for(j=0;j<=400;j+); /延迟10*1000*CLKOUT=*CLKOUT /1/CLKOUT=0.2us / 函数名称 : void delay_100us(void) / 函数
30、说明 : 100us延迟/ 输入参数 : 无/ 输出参数 : 无/-void delay_100us() UINT16 i,j; for(i=0;i<=1000;i+); for(j=0;j<=2;j+); /延迟10*1000*CLKOUT=*CLKOUT /1/CLKOUT=0.2us / 函数名称 : void delay_1us(void) / 函数说明 : 1us延迟/ 输入参数 : 无/ 输出参数 : 无/-void delay_1us() UINT16 i; for(i=0;i<=20;i+); /延迟10*1000*CLKOUT=*CLKOUT /1/CLKO
31、UT=0.2us /-/ 函数名称 : void SendByte(UCHAR dat) 串行发送一字节数据/ 函数说明 : 串行发送一字节数据,在时钟的上升沿发送数据,在时钟为低电平时,数据变化/ 输入参数 : 发送的数据/ 输出参数 : 无/-void SendByte(UCHAR dat) UCHAR i; for(i=0;i<8;i+) temp = port8007; /读IO 8007 SCLK="0" if(dat & 0x0080) port8006 = 0; /写IO 8006 SID="1",发送数据"1&qu
32、ot; MSB先发送 else temp = port8006; /读IO 8006 SID="0",发送数据"0" MSB先发送 port8007 = 0; /写IO 8007 SCLK="1" dat = dat<<1; /数据左移,移位到dat.7 temp = port8007 ; /读IO 8007 SCLK="0" /-/ 函数名称 : void SendCMD(UCHAR dat) 写指令寄存器 / 函数说明 : 写指令寄存器 / 输入参数 : 输入的命令字/ 输出参数 : 无/- void SendCMD(UCHAR dat) SendByte(0x00F8); /11111,00,0 RW=0,RS=0 同步标志 SendByte(dat & 0x00F0); /高四位 S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防雨雪冰冻应急演练
- 颈椎病的预防与照护
- 花生酥课件教学课件
- 零售年中述职报告
- 精神科阿尔茨海默病
- 2.2 课时2 离子反应 课件 上学期化学鲁科版(2019)必修第一册
- 超市防盗标签的种类和使用方法
- 初中体育教案课后反思
- 角的平分线的性质说课稿
- 经济特区城市更新与社区服务
- GB/T 44421-2024矫形器配置服务规范
- DB50-T 771-2017 地下管线探测技术规范
- 2024年PMP项目管理师考试试卷及答案指导
- 宪法是根本法教案-2.宪法是根本法-六年级上册道德与法治(新版)
- 2024年全国普法知识考试题库与答案
- 商家入驻进场协议书范本
- 2024年全国职业院校技能大赛中职组(婴幼儿保育赛项)考试题库-下(多选、判断题)
- 争做“四有好老师”-当好“四个引路人”
- 机械工程导论-基于智能制造(第2版)第3章 机械设计与现代设计方法
- 4.19北朝政治和北方民族大交融 课件-2024-2025学年统编版(2024)七年级历史上册
- 机动车商业保险条款(2020版)
评论
0/150
提交评论