基于DSP的可调信号发生器设计Word下载.docx
- 文档编号:17838242
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:21
- 大小:1.53MB
基于DSP的可调信号发生器设计Word下载.docx
《基于DSP的可调信号发生器设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于DSP的可调信号发生器设计Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
使用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心得体会
六、参考文献
[1].顾卫钢.手把手教你学DSP——基于TMS320X281x.北京:
北京航空航天大学出版社,2011.4
[2].苏奎峰,吕强等.TMS320X281xDSP原理及C程序开发北京航空航天大学出版社,2008
[3].TMS320F281xDataSheet.TexasInstruments.
[4].TMS320F28xControlandInterruptsReferenceGuide.TexasInstruments.
[5].TMS320F28xEventManager(EV)ReferenceGuide.TexasInstruments.
[6].TMS320F28xOptimizingC/C++CompilerUser’sGuide.TexasInstruments.
[7].TMS320F28xDSPCPUandInstructionSetReferenceGuide.TexasInstruments.
七、附录
/*************源代码**************/
#include"
DSP28_Device.h"
#include<
math.h>
#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;
unionCPLD_DREGLMYDREGL;
//
unionCPLD_DREGMYDREG;
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
while
(1)
{
a=0x0800;
/**********逐行逐列按键扫描,将按键所在位置的坐标存入KEYX和KEYY****************************/
for(i=0;
i<
5;
i++)
{
GpioDataRegs.GPADAT.all=0xffff;
GpioDataRegs.GPADAT.all=GpioDataRegs.GPADAT.all&
(~(a<
<
i));
delay(500);
if(GpioDataRegs.GPADAT.bit.GPIOA10==0){keypress=1;
keyx=i;
keyy=0;
break;
}
elseif(GpioDataRegs.GPADAT.bit.GPIOA9==0){keypress=1;
keyy=1;
elseif(GpioDataRegs.GPADAT.bit.GPIOA8==0){keypress=1;
keyy=2;
elseif(GpioDataRegs.GPADAT.bit.GPIOA7==0){keypress=1;
keyy=3;
}
if(keyx==0&
&
keyy==1&
keypress==1)
{keypress=0;
A=A+500;
if(A>
30000)A=30000;
if(keyx==0&
keyy==0&
A=A-500;
if(A<
0)A=500;
if(keyx==1&
f=f+1;
f=f-1;
if(f<
0)f=1;
if(keyx==2&
s=s+1;
s=s-1;
if(keyx==3&
offset=offset+1;
offset=offset-1;
if(keyx==4&
count=1;
count=2;
keyy==2&
count=3;
keyy==3&
count=4;
ch1[2]=strnum[keyx%10];
ch1[4]=strnum[keyy%10];
ldelay(10);
switch(count)
case1:
FB();
case2:
SJ();
case3:
JC();
case4:
ZX();
switch(flag)
case0:
flag=1;
Time0();
case1:
flag=2;
Xuehao();
case2:
flag=3;
Ap();
case3:
flag=4;
Pead();
flag=0;
KeyNO(ch1);
WriteLEDs(ch);
ldelay(1000);
for(i=1;
17;
i++)
for(j=0;
j<
i;
j++)
{
l=i-j-1;
g=~(0x0001<
l);
*LEDM_LR=g;
*LEDM_LC=(str1[j]>
>
8)|(str1[j]<
8);
delay(12000);
}
ldelay
(1);
for(i=1;
*LEDM_LC=(str2[j]>
8)|(str2[j]<
ldelay
(1);
*LEDM_LC=(str3[j]>
8)|(str3[j]<
}
}
voidFB(void)
for(t=0;
t<
SIZE;
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;
if((t/T)%2==0)
sine[t]=k*(t%T)+offset;
sine[t]=A-k*(t%T)+offset;
voidJC(void)
T=SIZE/f;
k=A/T;
sine[t]=k*(t%T)+offset;
voidZX(void)
voidXueHao()
unsignedchari;
for(i=0;
8;
ch[i]=studentnum17[i];
voidKeyNO(int*ch2)
ch[i]=ch2[i];
voidTime0()
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;
if(index&
(0x01<
i))
MYDREGL.bit.LEDSAB=1;
else
MYDREGL.bit.LEDSAB=0;
(*CPLDDREGL)=MYDREGL.all;
MYDREGL.bit.LEDSCLK=0;
MYDREGL.bit.LEDSCLK=1;
voidWriteLEDs(unsignedint*index)
unsignedinti,ii;
for(ii=0;
ii<
ii++)
for(i=0;
if(index[ii]&
voidldelay(unsignedintk)
while(k>
0)
k--;
delay(5000);
}
voiddelay(unsignedintt)
while(t>
t--;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP 可调 信号发生器 设计