基于DSP的可调信号发生器设计.docx

上传人:b****6 文档编号:14231193 上传时间:2023-06-21 格式:DOCX 页数:23 大小:1.47MB
下载 相关 举报
基于DSP的可调信号发生器设计.docx_第1页
第1页 / 共23页
基于DSP的可调信号发生器设计.docx_第2页
第2页 / 共23页
基于DSP的可调信号发生器设计.docx_第3页
第3页 / 共23页
基于DSP的可调信号发生器设计.docx_第4页
第4页 / 共23页
基于DSP的可调信号发生器设计.docx_第5页
第5页 / 共23页
基于DSP的可调信号发生器设计.docx_第6页
第6页 / 共23页
基于DSP的可调信号发生器设计.docx_第7页
第7页 / 共23页
基于DSP的可调信号发生器设计.docx_第8页
第8页 / 共23页
基于DSP的可调信号发生器设计.docx_第9页
第9页 / 共23页
基于DSP的可调信号发生器设计.docx_第10页
第10页 / 共23页
基于DSP的可调信号发生器设计.docx_第11页
第11页 / 共23页
基于DSP的可调信号发生器设计.docx_第12页
第12页 / 共23页
基于DSP的可调信号发生器设计.docx_第13页
第13页 / 共23页
基于DSP的可调信号发生器设计.docx_第14页
第14页 / 共23页
基于DSP的可调信号发生器设计.docx_第15页
第15页 / 共23页
基于DSP的可调信号发生器设计.docx_第16页
第16页 / 共23页
基于DSP的可调信号发生器设计.docx_第17页
第17页 / 共23页
基于DSP的可调信号发生器设计.docx_第18页
第18页 / 共23页
基于DSP的可调信号发生器设计.docx_第19页
第19页 / 共23页
基于DSP的可调信号发生器设计.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于DSP的可调信号发生器设计.docx

《基于DSP的可调信号发生器设计.docx》由会员分享,可在线阅读,更多相关《基于DSP的可调信号发生器设计.docx(23页珍藏版)》请在冰点文库上搜索。

基于DSP的可调信号发生器设计.docx

基于DSP的可调信号发生器设计

目录

一、设计的目的3

二、设计的内容与要求3

三、设计方案4

四、软件、硬件设计(根据设计内容适当处理,硬件设计应包括PCB5

4.1、软件设计5

4.1.1按键矩阵模块5

4.1.2波形发生模块5

4.1.3数码管显示模块5

4.1.4点阵显示模块5

图3.3点阵模块及原理图6

4.2.14*5按键矩阵6

4.2.2数码管显示7

五、设计总结8

5.1调试结果8

5.2心得体会11

六、参考文献11

七、附录12

一、设计的目的

根据已掌握的《DSP技术及应用》课程知识,完成课程设计要求的项目。

了解正弦波的产生,以及正弦波幅值和频率的调整方法,掌握信号产生的一般方法并学习使用CCS图形显示功能进行程序调试。

通过硬件设计和程序编写过程,加深对《DSP技术及应用》课程知识的理解和掌握,培养应用系统设计的能力,以及分析问题和解决问题的方法,并进一步拓宽专业知识面,培养实践应用技能和创新意识。

二、设计的内容与要求

(一)、课程设计题目:

基于DSP的可调信号发生器设计

(二)、具体设计要求如下:

1)基础设计:

在CCS中运行调试程序代码,输出正弦信号波形,并使用CCS的图像显示窗口,实时显示输出的正弦波。

2)提高设计:

使用DSPF2812的GPIO功能,读取外部手动按键的信号,相应改变正弦信号的幅值、相位、频率和偏移(幅值,采用有符号16位整型变量定义)。

3)附加设计:

使用DSPF2812的GPIO功能,读取外部手动按键的信号,相应输出正弦波、三角波、方波、锯齿波。

并分别实现四种波形的幅值和频率的调节。

4)高级设计:

用8个七段数码管,每隔一秒依次循环显示三种信息,包括:

①日期(格式为2014-06-12);②自己的学号(格式为学号的低8位,例如学号为112033101的同学,应当显示:

12033101);③当前的幅值(格式为:

AP-00000~AP-32767);

频率即每周期的离散采样点数(格式为:

PEAD-012);

当前按键坐标(格式为:

XX)。

5)终极设计:

利用点阵循环显示本人姓名。

 

三、

设计方案

本次课程设计是基于DSP的可调信号发生器的设计,系统设计方案框图如图3.1所示。

通过读取外部手动按键的信号,转换显示CCS窗口的波形,按键控制波形如图3.2所示;同时在数码管上动态显示幅值、频率、学号、按键坐标和日期。

图3.1系统设计方案框图

图3.2按键控制波形

四、软件、硬件设计(根据设计内容适当处理,硬件设计应包括PCB

4.1、软件设计

软件设计模块包含了按键矩阵模块、波形发生模块、数码管显示模块、点阵显示模块和综合调试显示结果。

4.1.1按键矩阵模块

使用DSPF2812的GPIO功能,判断按键是否按下keypress=1。

再用标志位flag控制选择输出波形。

 

4.1.2波形发生模块

通过手动按键控制CCS窗口显示波形:

正弦波、方波、三角波、锯齿波。

(1)正弦波

(2)三角波

(3)锯齿波

 

(4)方波

 

4.1.3数码管显示模块

提取幅度的数值,分别放入Amp[]数组中,调用WriteLEDs()数码管显示,在数码管上显示幅度、频率、学号、日期和按键坐标。

4.1.4点阵显示模块

利用点阵循环显示本人姓名。

 

图3.3点阵模块及原理图

 

4.2、硬件设计

硬件电路设计模块包含了矩阵按键电路、数码管显示电路,以及点阵显示电路。

4.2.14*5按键矩阵

4*5的按键矩阵,通过9个GPIO端口来扫描控制,即可判断出哪一个按键被按下。

按键左端接GPIOA11-GPIOA15,按键右端接GPIOA7-GPIOA10。

通过对GPIOA端口进行初始化,按键左端为输出口,按键右端为输入口,将GPIOA11-GPIOA15赋值0,通过对按键右端进行扫描,如果某个按键被按下,则该按键右端对应的GPIO口值为0,否则应为1。

按键矩阵模块及原理图如图4.1所示。

图4.14*5按键矩阵模块及原理图

4.2.2数码管显示

实验箱上有8只8段数码管,使用74F164芯片(串入并出芯片)对数码管进行控制。

8只数码管的控制使用串行方式,实现8只流水数码管。

其中3只电路如图4.2所示,另外5只接线相同。

图4.2数码管模块及其硬件结构

五、设计总结

5.1调试结果

本次课程设计调试结果如下所示:

数码管轮流显示:

图5.1显示当前幅值

图5.3显示每周期的离散采样点数

图5.2显示学号

图5.4显示日期

图5.5显示按键坐标

输出各种波形:

图5.3显示每周期的离散采样点数

图5.6正弦波形

 

图5.7三角波

 

图5.8方波

 

图5.9锯齿波

 

 

 

图5.10波形的幅值与周期

 

3.点阵显示结果

(显示名字的截图)

 

5.2心得体会

 

六、参考文献

顾卫钢.手把手教你学DSP——基于TMS320X281x.北京:

北京航空航天大学出版社,2011.4

苏奎峰,吕强等.TMS320X281xDSP原理及C程序开发北京航空航天大学出版社,2008

TMS320F281xDataSheet.TexasInstruments.

TMS320F28xControlandInterruptsReferenceGuide.TexasInstruments.

TMS320F28xEventManager(EV)ReferenceGuide.TexasInstruments.

TMS320F28xOptimizingC/C++CompilerUser’sGuide.TexasInstruments.

TMS320F28xDSPCPUandInstructionSetReferenceGuide.TexasInstruments.

七、附录

/*************源代码**************/

#include"DSP28_Device.h"

#include

#defineSIZE512

#definepi3.14

intA=1000;//正弦信号幅度

intoffset=0;//正弦信号偏移量

intf=1;//正弦信号频率

ints=0,count=1,flag=0;//正弦信号初始相位

intsine[SIZE];//正弦信号数组

unsignedintt;

intstrnum[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E};/*0~9*/

intday[]={0xDA,0x60,0xBF,0xFC,0x67,0x60,0xFC,0xDA};//显示日期

intstudentnum17[]={0xE0,0x60,0x60,0xF2,0xF2,0xFC,0xDA,0x60};//显示学号

intAnum[]={0,0,0,0,0,0x02,0xCE,0xEE};

//显示幅度

intfnum[]={0,0,0,0x02,0x7A,0xEE,0x9E,0xCE};//显示频率

intkey[]={0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60};//显示按键坐标

intch[8]={0xFE,0x60,0x60,0xF2,0xF2,0xFC,0xDA,0x60};//缓存

intch1[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

intstr1[]={0x0900,0xFD08,0x0908,0x0910,0x0920,0x7940,0x4104,0x47FE,

0x4140,0x7940,0x0920,0x0920,0x0910,0x094E,0x5184,0x2100};//名字1

intstr2[]={0x0100,0x0100,0x0104,0xFFFE,0x0100,0x0100,0x0110,0x3FF8,

0x0000,0x0200,0x1180,0x5084,0x5012,0x9012,0x0FF0,0x0000};//名字2

intstr3[]={0x0100,0x0088,0x3FFC,0x2080,0x2080,0x2088,0x3FFC,0x2080,

0x2080,0x2140,0x2140,0x2220,0x2220,0x4410,0x880E,0x3004};//名字3

unsignedint*CPLDDREG=(unsignedint*)0x2004;

unsignedint*CPLDDREGL=(unsignedint*)0x2006;

unsignedint*LEDM_LC=(unsignedint*)0x2018;//16

unsignedint*LEDM_LR=(unsignedint*)0x201A;//16

unionCPLD_DREGLMYDREGL;//

unionCPLD_DREGMYDREG;//16

unsignedintkeypress=0;

unsignedintkeyx,keyy;

voiddelay(unsignedint);

voidldelay(unsignedint);

voidFB(void);//产生方波

voidSJ(void);//产生三角波

voidJC(void);//产生锯齿波

voidZX(void);//产生正弦波

voidWriteLED(unsignedint);

voidWriteLEDs(unsignedint*);

voidTime0();

voidKeyNO(int*ch2);

voidXueHao();

voidAp();

voidPead();

 

voidmain(void)

{

Uint16a=0x0800;

unsignedinti,j,x,y,l,g,k;

InitSysCtrl();//初始化系统

DINT;//关中断

IER=0x0000;

IFR=0x0000;

InitPieCtrl();//初始化PIE控制寄存器

InitPieVectTable();//初始化PIE矢量表

InitGpio();//初始化GPIO

EINT;

ERTM;

MYDREG.all=0xffff;//initDREG

MYDREG.bit.BUFFER_OEn=0;//BUFFER_OEn=0

*CPLDDREG=MYDREG.all;

MYDREGL.all=0xffff;//initDREGL

//MYDREGL.bit.LEDM_CSn=0;//LEDM_CSn=0

*CPLDDREG=MYDREG.all;

while

(1)

{

a=0x0800;

/**********逐行逐列按键扫描,将按键所在位置的坐标存入KEYX和KEYY****************************/

for(i=0;i<5;i++)

{

GpioDataRegs.GPADAT.all=0xffff;

GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all&(~(a<

delay(500);

if(GpioDataRegs.GPADAT.bit.GPIOA10==0){keypress=1;keyx=i;keyy=0;break;}

elseif(GpioDataRegs.GPADAT.bit.GPIOA9==0){keypress=1;keyx=i;keyy=1;break;}

elseif(GpioDataRegs.GPADAT.bit.GPIOA8==0){keypress=1;keyx=i;keyy=2;break;}

elseif(GpioDataRegs.GPADAT.bit.GPIOA7==0){keypress=1;keyx=i;keyy=3;break;}

}

if(keyx==0&&keyy==1&&keypress==1)

{keypress=0;A=A+500;

if(A>30000)A=30000;}

if(keyx==0&&keyy==0&&keypress==1)

{keypress=0;A=A-500;

if(A<0)A=500;}

if(keyx==1&&keyy==1&&keypress==1)

{keypress=0;f=f+1;}

if(keyx==1&&keyy==0&&keypress==1)

{keypress=0;f=f-1;

if(f<0)f=1;}

if(keyx==2&&keyy==1&&keypress==1)

{keypress=0;s=s+1;}

if(keyx==2&&keyy==0&&keypress==1)

{keypress=0;s=s-1;}

if(keyx==3&&keyy==1&&keypress==1)

{keypress=0;offset=offset+1;}

if(keyx==3&&keyy==0&&keypress==1)

{keypress=0;offset=offset-1;}

if(keyx==4&&keyy==0&&keypress==1)

{keypress=0;count=1;}

if(keyx==4&&keyy==1&&keypress==1)

{keypress=0;count=2;}

if(keyx==4&&keyy==2&&keypress==1)

{keypress=0;count=3;}

if(keyx==4&&keyy==3&&keypress==1)

{keypress=0;count=4;}

ch1[2]=strnum[keyx%10];ch1[4]=strnum[keyy%10];

ldelay(10);

switch(count)

{

case1:

FB();break;

case2:

SJ();break;

case3:

JC();break;

case4:

ZX();break;

}

switch(flag)

{

case0:

flag=1;Time0();break;

case1:

flag=2;Xuehao();break;

case2:

flag=3;Ap();break;

case3:

flag=4;Pead();break;

case4:

flag=0;KeyNO(ch1);break;

}

WriteLEDs(ch);

ldelay(1000);

for(i=1;i<17;i++)

{

for(j=0;j

{

l=i-j-1;

g=~(0x0001<

*LEDM_LR=g;

*LEDM_LC=(str1[j]>>8)|(str1[j]<<8);

delay(12000);

}

}

ldelay

(1);

for(i=1;i<17;i++)

{

for(j=0;j

{

l=i-j-1;

g=~(0x0001<

*LEDM_LR=g;

*LEDM_LC=(str2[j]>>8)|(str2[j]<<8);

delay(12000);

}

}

ldelay

(1);

for(i=1;i<17;i++)

{

for(j=0;j

{

l=i-j-1;

g=~(0x0001<

*LEDM_LR=g;

*LEDM_LC=(str3[j]>>8)|(str3[j]<<8);

delay(12000);

}

}

ldelay

(1);

}

}

voidFB(void)

{

for(t=0;t

{

sine[t]=A*sin(2*pi*f*t/512+s)+offset;

if(sine[t]>0)

sine[t]=A;

else

sine[t]=-A;

}

}

voidSJ(void)

{

intk,T;

T=SIZE/f/2;

k=A/T;

for(t=0;t

{

if((t/T)%2==0)

sine[t]=k*(t%T)+offset;

else

sine[t]=A-k*(t%T)+offset;

}

}

voidJC(void)

{

intk,T;

T=SIZE/f;

k=A/T;

for(t=0;t

sine[t]=k*(t%T)+offset;

}

voidZX(void)

{

for(t=0;t

sine[t]=A*sin(2*pi*f*t/512+s)+offset;

}

voidXueHao()

{

unsignedchari;

for(i=0;i<8;i++)

ch[i]=studentnum17[i];

}

voidKeyNO(int*ch2)

{

unsignedchari;

for(i=0;i<8;i++)

ch[i]=ch2[i];

}

voidTime0()

{

unsignedchari;

for(i=0;i<8;i++)

ch[i]=day[i];

}

 

voidAp()

{

ch[0]=Anum[A%10];

ch[1]=Anum[(A/10)%10];

ch[2]=Anum[(A/100)%10];

ch[3]=Anum[(A/1000)%10];

ch[4]=Anum[A/10000];

ch[5]=0x03;

ch[6]=0xCE;

ch[7]=0xEE;

 

}

voidPead()

{

 

ch[0]=fnum[f/10];

ch[1]=fnum[(f%100)/10];

ch[2]=fnum[(f%1000)/100];

ch[3]=0x03;

ch[4]=0x7A;

ch[5]=0xEE;

ch[6]=0x9E;

ch[7]=0xCE;

}

voidWriteLED(unsignedintindex)

{

unsignedinti;

for(i=0;i<8;i++)

{

if(index&(0x01<

MYDREGL.bit.LEDSAB=1;

else

MYDREGL.bit.LEDSAB=0;

(*CPLDDREGL)=MYDREGL.all;

MYDREGL.bit.LEDSCLK=0;

(*CPLDDREGL)=MYDREGL.all;

MYDREGL.bit.LEDSCLK=1;

(*CPLDDREGL)=MYDREGL.all;

}

}

voidWriteLEDs(unsignedint*index)

{

unsignedinti,ii;

for(ii=0;ii<8;ii++)

for(i=0;i<8;i++)

{

if(index[ii]&(0x01<

MYDREGL.bit.LEDSAB=1;

else

MYDREGL.bit.LEDSAB=0;

(*CPLDDREGL)=MYDREGL.all;

MYDREGL.bit.LEDSCLK=0;

(*CPLDDREGL)=MYDREGL.all;

MYDREGL.bit.LEDSCLK=1;

(*CPLDDREGL)=MYDREGL.all;

}

}

voidldelay(unsignedintk)

{

while(k>0)

{

k--;

delay(5000);

}

}

voiddelay(unsignedintt)

{

while(t>0)

t--;

}

 

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

当前位置:首页 > 人文社科 > 法律资料

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

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