dsp课程设计报告Word文档格式.docx

上传人:b****6 文档编号:16881531 上传时间:2022-11-26 格式:DOCX 页数:38 大小:551.97KB
下载 相关 举报
dsp课程设计报告Word文档格式.docx_第1页
第1页 / 共38页
dsp课程设计报告Word文档格式.docx_第2页
第2页 / 共38页
dsp课程设计报告Word文档格式.docx_第3页
第3页 / 共38页
dsp课程设计报告Word文档格式.docx_第4页
第4页 / 共38页
dsp课程设计报告Word文档格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

dsp课程设计报告Word文档格式.docx

《dsp课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《dsp课程设计报告Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。

dsp课程设计报告Word文档格式.docx

以此加强了对DSP功能的认识,复习了AltiumDesigner软件的使用方法。

并在此基础上利用CCS软件编程实现A/D采集,FFT变换处理,低通滤波,显示滤波成分等功能的完整的小型数字处理系统。

二系统分析

1.1设计要求

(1)硬件设计要求

设计一个功能完备的,能够独立运行的精简DSP硬件系统,使用AltiumDesigner绘制出系统原理图和PCB图。

(2)软件设计要求

利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号叠加。

在DSP中采集信号,并且对信号进行频谱分析,滤波等。

通过串口命令选择算法功能,将计算的信号频率或者滤波后的信号频率在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

图1硬件总体结构

本次实验使用TMS320VC5416芯片作为主芯片。

外围电路包括:

电源、复位电路、时钟发生器(外接晶振或外接晶体)、、外部存储器FLASH、仿真接口电路JTAG、外部中断(不用:

上拉)、I/O(不用:

输出悬空,输入上拉)与主机通信的并行接口HPI(不用:

悬空)。

(1)原理图设计

图2单片机最小系统原理图

(2)PCB板设计

图3PCB图

(1)

图4PCB图

(2)

如图所示,由于其右上部分地址线和数据线较多,铺铜不方便,所以Vcore层分布在TM320VC5416芯片的左下部分。

+3.3V为顶层红色部分,GND为底层蓝色部分。

3.2DSP模块设计

  

图5 DSP模块

(1)

上图为TMS320VC5416芯片的设计,该芯片不用的输入引脚要拉高,输出引脚悬空。

①本设计用到了该芯片的数据信号线,初始化、中断和复位线,部分存储器控制信号线,部分振荡器/定时信号线,串口信号线,电源引脚线和JTAG测试引脚线。

②主CPU每个电源管脚旁边都有一个0.1uF的去耦电容,去耦电容可以提供较稳定的电源,同时也可以降低元件耦合到电源端的噪声,间接可以减少其他元件受此元件噪声的影响。

③CLKMOD1、CLKMOD2、CLKMOD3分别接1、1、0,表示锁相环一倍频

图6DSP模块

(2)

图6DSP模块(3)

3.3电源模块设计

图7电源模块

73HD316为DC-DC转换芯片,将+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复位电路

如图所示有两种复位方法:

(1)上电复位,利用RC的延迟特性,刚开始上电,由于电容电压不能突变,RESET处为低,直到电容充电完毕,变高,实现复位;

(2)手动复位,S1闭合,电容放电,电平变低,断开,电容充电过程与上电复位相同,实现复位。

发光二极管用来表示DSP的工作状态三个电源是否正常工作。

3.7仿真接口电路设计

图11仿真接口电路

JTAG仿真接口,用于将外部的程序、数据导入DSP内部,完成运算处理。

是外部存储器与DSP的一个媒介。

四软件设计

4.1软件总体流程

4.2核心模块及实现代码

(1)主要代码

//------------------头文件--------------------------------------

#include"

DspRegDefine.h"

//VC5402寄存器定义

stdio.h"

//输入输出接口定义

math.h"

//数学计算定义

//---------------------------------------------------------------

/*******************宏定义***************

************************************************************

*/

#defineUCHARunsignedchar

#defineUINT16unsignedint

#defineUINT32unsignedlong

#defineTRUE1

#defineFALSE0

#defineLength256//FFT的点数

//---------------LCD指令-----------------------------

//基本指令集RE=0

#defineCLEAR0x0001//清除显示

#defineRESAC0x0002//位址歸位

#defineSETPOINT0x0006//進入點設定,游標右移,DDRAM位址計數器(AC)加1

#defineCURSOR0x000F//整體顯示,游標顯示,游標位置反白

#defineMCURSOR0x0014//游標向右移動,AC=AC+1

#defineFUCSET0x0030//功能設定,BITMPU控制界面,基本指令集,默认设置

#defineCGRAMAC0x0040//設定CGRAM位址

#defineDDRAMAC0x0080//設定DDRAM位址

//第一行AC範圍為80H..8FH

//第二行AC範圍為90H..9FH

//第三行AC範圍為A0H..AFH

//第四行AC範圍為B0H..BFH

//#defineREADBFRS=0,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0

//BFAC6AC5AC4AC3AC2AC1AC0

//讀取忙碌旗標(BF)和位址

//就是读取指令寄存器,PORT8006,BF=1,表示LCD忙碌

//#defineWRITERAMRS=1,RW=0,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0

//D7D6D5D4D3D2D1D0

//寫入資料到RAM

//就是写数据寄存器:

PORT8005

//#defineREADRAMRS=1,RW=1,DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0

//讀取RAM的值

//就是从数据寄存器讀取資料,PORT8007

//擴充指令集RE=1

#defineIDLE0x01//待命模式

#defineCGRAMSET0x02//捲動位址或RAM位址選擇

#defineREVERSE0x04//反白選擇

#defineSLEEP0x0c//脫離睡眠模式

#defineEFUCSET0x66//擴充功能設定,8BITMPU控制界面,為擴充指令集動作,繪圖顯示ON

#defineSISA0x40//設定IRAM位址或捲動位址

#defineSETGDRAM0x80//設定繪圖RAM位址

//---------------------------------------------------------

/*端口定义*/

ioportUINT16port8002;

//定义输出AD端口为0x8002;

ioportUINT16port8004;

//写指令寄存器

ioportUINT16port8005;

//写数据寄存器

ioportUINT16port8006;

//读指令寄存器

ioportUINT16port8007;

//读数据寄存器

//----------------------------------------------------------

/*全局变量定义*/

intin_x[Length];

//数据缓冲数组Length

inti=0;

ints,m=0;

intintnum=0;

intflag=0;

//采集Length点的标志

doublexavg;

doublex[Length],mo[Length],mo2[Length],pr[Length],pi[Length];

intn,l,il;

intk=8;

//k为Length相对于2的幂次

doubledata_kfft[Length];

//数据缓冲256个数组

doubledata_re[Length];

doubledata_im[Length];

doubledata_buffim[Length];

doubledata_out[256];

doubledata_temp[256];

doubledata_out1[256];

doubleh[51];

intx1=0;

intx2=0;

doublefhz=0;

doublef1;

doublef2;

doublewc=0;

inti;

UINT16temp;

UCHARdata_buff1[10]="

低频:

"

;

UCHARdata_buff2[10]="

高频:

UCHARdata_buff3[10]="

滤波:

UCHARdata_buff4[16]="

liru12052203"

UCHARnum[11]="

0123456789."

inta;

intb;

intc;

intd;

/*

**********************************************************************

***************所使用的函数原型*****************

voidcpu_init(void);

//初始化CPU

voidDelay(UINT16numbers);

//延迟

voidxint2_init(void);

//外部中断2初始化子程序

voidkfft(doublepr[Length],doublepi[Length],intn,intk,doublefr[Length],doublefi[Length],intl,intil);

//基2快速傅立叶变换子程序

interruptvoidExtInt2();

//中断2中断子程序

voidfirdes(doublenpass);

//fir

voidConvolveok(//卷积函数

double*x,//原始输入数据

double*h,//冲击响应

double*y,//卷积输出结果

UINT16length,//序列长度

UINT16fLen

);

externvoiddelay_100us(void);

//100us延迟--指令之间的延迟

externvoiddelay_1us(void);

//1us延迟--时钟之间的延迟

voiddelay_50ms(void);

//50ms延迟--复位延迟

voiddelay_20ms(void);

//20ms延迟--清屏延迟

voidSendByte(UCHARdat);

//串行发送一字节数据

voidSendCMD(UCHARdat);

//写指令寄存器

voidSendDat(UCHARdat);

//写显示数据或单字节字符

voidDisplay(UCHARx_add,UCHARdat1,UCHARdat2);

//写汉字到LCD指定的位置

voidInitlcm(void);

//初始化LCM

//-------------------------------------------------------------------

************************************************************************

***********************函数定义******************

//--------------------------------------------------------------------

//函数名称:

voidcpu_init(void)

//函数说明:

初始化CPU

//输入参数:

//输出参数:

voidcpu_init(void)

{

asm("

nop"

//-------------------------------------------------------------------

//--------------------------------------------------------------------

*(unsignedint*)CLKMD=0x0;

//switchtoDIVmodeclkout=1/2clkin

while(((*(unsignedint*)CLKMD)&

01)!

=0);

*(unsignedint*)CLKMD=0x77ff;

//switchtoPLLX3mode

/*---------------------------------------------------------------------*/

*(unsignedint*)PMST=0x3FF2;

//---------------------------------------------------------------------

/*--------------------------------------------------------------------*/

*(unsignedint*)SWWSR=0x7fff;

*(unsignedint*)SWCR=0x0001;

*(unsignedint*)BSCR=0xf800;

ssbxintm"

//Disableallmaskinterrupts

*(unsignedint*)IMR=0x0;

/*--------------------------------------------------------------------*/

*(unsignedint*)IFR=0xffff;

}

***********************************************************

-函数名称:

voidDelay(intnumbers)

-函数说明:

延时

-输入参数:

numbers

-输出参数:

voidDelay(UINT16numbers)

UINT16i,j;

for(i=0;

i<

4000;

i++)

for(j=0;

j<

numbers;

j++);

}

//---------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

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

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