第一篇:dsp报告
目
录
第一章、基本算术运算.....................................1 1.1、实验目的和要求...................................1 1.2、实验原理.........................................1 1.3、实验内容.........................................2 第二章、C54X的汇编语言程序设计...........................7 2.1、实验目的和要求...................................7 2.2、实验原理.........................................7 2.3、实验内容.........................................8 第三章、FFT算法的实现..................................13 3.1、实验目的和要求..................................13 3.2、实验原理........................................13 3.3、实验内容........................................14 第四章、ASK、PSK、FSK调制的实现........................16 4.1、实验目的........................................16 4.2、实验原理........................................16 4.3、实验内容........................................16 心得体会................................................20
0
第一章、基本算术运算
1.1、实验目的和要求
加、减、乘、除是数字信号处理中最基本的算术运算。DSP 中提供了大量的指令来 实现这些功能。本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法 和编程技巧。
1.2、实验原理
(1)、定点 DSP 中的数据表示方法
54X 是16 位的定点DSP。一个16 位的二进制数既可以表示一个整数,也可以表示一个小数。当它表示一个整数时,其最低位(D0)表示2,D1 位表示2,次高位(D14)表示2。如果表示一个有符号数时,最高位(D15)为符号位,0 表示正数,1 表示负 数。例如,07FFFH 表示最大的正数32767(十进制),而0FFFFH 表示最大的负数-1(负
数用2 的补码方式显示)。当需要表示小数时,小数点的位置始终在最高位后,而最高位D15)表示符号位。这样次高位(D14)表示2,然后是2,最低位(D0)表示2301141215。所以 04000H 表示小数 0.5,01000H 表示小数2 = 0.125,而0001H 表示16 位定点(DSP 能表示的最小的小数(有符号)215 =0.***。在后面的实验中,除非有特别说明,我们指的都是有符号数。在C54X 中,将一个小数用16 位定点格式来表示的方法是用2乘以该小数,然后取整。
从上面的分析可以看出,在DSP 中一个16 进制的数可以表示不同的十进制数,或 者是整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘 除时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。(2)实现 16 位定点加法
C54X 中提供了多条用于加法的指令,如ADD,ADDC,ADDM 和ADDS。其中
ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32 位扩展精度加 法),而ADDM 专用于立即数的加法。(3)实现 16 位定点减法
C54X 中提供了多条用于减法的指令,如SUB,SUBB,SUBC 和SUBS。其中SUBS 用于无符号数的减法运算,SUBB 用于带进位的减法运算(如32 位扩展精度的减法),而SUBC 为移位减,DSP 中的除法就是用该指令来实现的。SUB 指令与ADD 指令一样,有许多的寻址方式。
(4)实现 16 位定点整数乘法 15 1
在C54X 中提供了大量的乘法运算指令,其结果都是32 位,放在A 或B 寄存器 中。乘数在C54X 的乘法指令很灵活,可以是T 寄存器、立即数、存贮单元和A 或B 寄存器的高16 位。有关乘法指令的详细使用说明请参考《TMS320C54X 实用教程》。在C54X 中,一般对数据的处理都当做有符号数,如果是无符号数乘时,要使用MPYU 指令。这是一条专用于无符号数乘法运算的指令,而其它指令都是有符号数的乘法。5)实现 16 位定点小数乘法
在 C54X 中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X 中提供了一个状态位FRCT,将其设置为1 时,系统自动将乘积结果左移一位。但注意 整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT 清除。两个小数(16 位)相乘后结果为32 位,如果精度允许的话,可以只存高16 位,将低16 位丢弃,这样仍可 得到16 位的结果。
(6)实现 16 位定点整数除法
在 C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法 来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于 除以常数特别适用。另一种方法是使用SUBC 指令,重复16 次减法完成除法运算。下 面我们以temp1/temp2 为例,说明如何使用SUBC 指令实现整数除法。其中变量temp1为被除数,temp2 为除数,结果即商存放在变量temp3 中。在完成整数除法时,先判断
结果的符号。方法是将两数相乘,保存A 或B 的高16 位以便判断结果的符号。然后只 做两个正数的除法,最后修正结果的符号。为了实现两个数相除,先将被除数装入A 或 B 的低16 位,接着重复执行SUBC 指令,用除数重复减16 次后,除法运算的商在累加 器的低16 位,余数在高16 位。(7)实现 16 位定点小数除法
在 C54X 中实现16 位的小数除法与前面的整数除法基本一致,也是使用循环的 SUBC 指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数一定小于除数。这与整数除法正好相反。所以在执行SUBC 指令前,应将被 除数装入A 或B 寄存器的高16 位,而不是低16 位。其结果的格式与整数除法一样,A 或B 寄存器的高16 位为余数,低16 位为商。第二,与小数乘法一样,应考虑符号位对 结果小数点的影响。所以应对商右移一位,得到正确的有符号数。
1.3、实验内容
本实验需要使用C54X汇编语言实现加、减、乘、除的基本运算,并通过DES的存 贮器显示窗口观察结果。实验分两步完成:(1)编写实验程序代码
本实验的汇编源程序代码主要分为六个部分:加法、减法、整数乘法、小数乘法 整数除法和小数除法。每个部分后面都有一条需要加断点的标志语句:nop 当执行到这条加了断点的语句时,程序将自动暂停。这时你可以通过“存贮器窗口”检 查计算结果。当然你看到的结果都是十六进制的数。实验源程序请参见附录。(2)用ccs simulator调试运行并观察结果
在完成实验程序代码的输入,并使用ccs进行编译并连接,得到out文件后,就可 以在simulator 上调试运行。调试步骤如下:
a.启动ccs simulator。
b.点击file->load program,找到exer1.out(在产品光盘的codebase_operationdebug下)并装入。这时可在反汇编窗口看到程序代码。
c.打开“Memory”窗口,并在其中选择要查看的存贮器地址段:0x080-0x08e。
d.在反汇编窗口中在每个“nop”指令处都设一个断点,方法有两种:1.用鼠标双击该 指令将其点亮即可。2.在菜单栏中选择debugÆbreakpoint,然后在弹出的对话框中 键入欲加断点的地址即可(注意地址的格式)。e.单击Run快捷键(或者F5按钮),启动执行基本算术运算程序,程序在执行完加法 运算后自动暂停。通过register window窗口可以看到寄存器A的内容为0x46,这 正是加法运算的结果。(注意,若在硬件仿真器环境下调试,受DSP指令流水线的影响,断点处可能看不到A寄存器的变化。)同样,在Memory窗口中,可以看到0x81,0x82,0x88的内容为分别为0012,0034,0x46。执行加法运算后,将0x81和0x82的内容相加结果放在0x88单元。实验结果如下:
f.在Memory窗口中用鼠标左键双击0x81单元,这时可以修改该内存单元的内容。输 入新的数据0x0ffee(十进制的-18),编辑内容时请直接输入FFEE(十六进制),然 后回车确认,便完成对0x81单元的修改。
g.在register window窗口中修改PC值,方法也是鼠标左键双击PC寄存器的内容,输入新的PC值0x1085(编辑内容时直接输入1805),并用回车键确认。h.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,重新计算0x81和0x82 的和,结果在0x88中。当程序再次暂停时,可以看到A寄存器和0x88的内容为0x22(十进制的34),这正是我们希望的结果:-18+52=34。实验结果如下:
i.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成减法运算。当程 序再次暂停时(断点位于0x1093),可以看到0x83和0x84单元的内容分别为FFEE 和0012,B寄存器的内容为ffdc0000,而0x89的内容为0xffdc(十进制-36),这正
是我们希望的结果:-18-18=-36。注意,该减法操作使用了辅助寄存器寻址,所以计算结果在B寄存器的高16位。是实验结果如下:
j.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成整数乘法运算。当程序再次暂时(断点位于0x109d),可以看到0x81和0x82单元的内容分别为0012和0034,A寄存器的内容为000003A8,这正是我们希望的结果:18*52=936(0x3a8)。这时我们可以用1个16位的内容单元来保存结果,如将A寄存器的低16位存入0x8b单元。实验结果如下:
但如果将0x81的内容修改为0x2000(十进制的8192),在register window中将PC修改为1098,然后继续运行,重新计算乘法。当程序完成乘法暂停时,可以看到A寄存器的内容为00068000,这也是一个正确的结果:8192*52=425984(0x68000)。此时将无法用一个16位的存贮单元来保存A寄存器中的结果。
实验结果如下:
k.单击Run快捷键或者(F5按钮),程序从当前PC继续运行,完成小数乘法运算。当程序再次暂停时(断点位于0x10A6),可以看到0x83和0x84单元的内容分别为4000和b548,A寄存器的内容为40000000,乘法的结果在B寄存器中为daa40000,这正是我们希望的结果:0.5*(-0.58374)=-0.29187(0x0daa4)。对于小数乘法,一般情况都可以用1个16位的内容单元将B寄存器的高16保存(如存入0x8c单元)。实验结果如下:
l.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成整数除法运算。当程序再次暂时(断点位于0x10bb),可以看到0x81,0x82,0x8d和0x8e单元的内容分别为0034,0012,FFFE 和0010,这正是我们希望的结果:52 除以-18,商为-2(0xfffe),余数为16(0x10)。
m.单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成小数除法运算。当程序再次暂停时(断点位于0x10d2),可以看到0x81,0x82和0x8f单元的内容分别为4000,4ab8和6da3,这正是我们希望的结果:0.5/0.58374=0.8565457(0x6da3)。实验结果如下:
n.如果以上程序运行不正确,请检查代码是否输入正确,还可以在源代码中插入断点 调试,注意对中间结果的观察。思考题 :
(1)在减法操作中使用了辅助寄存器ar2,ar3,请说明在执行完减法计算后辅助寄存器 ar2和ar3的值为多少?
结果如下:
(2)在小数乘法中使用了置FRCT标志为1的指令。如果将该语句取消,那么B寄存器的结果是多少?想想什么时候应该设置FRCT标志? 结果如下:
取消之前:
取消之后:
(3)如何实现无符号数的乘法?
答:输入指令MPYU Smem,dst,输出结果为uns(T)*uns(Smem)(4)
请利用本实验程序计算以下算式的结果
①、0.25*0.58374
②、0.25/0.5
③、4653/345
④、0.789687/0.876
第二章、C54X的汇编语言程序设计
2.1、实验目的和要求
汇编语言程序设计是应用软件的基础,主要任务是利用汇编指令和伪指令编写源程序以完成指定的功能。本届实训我们将采用汇编语言指令、汇编伪指令、宏伪指令和规定的数字与字符来完成实验。通过实验帮助我们对汇编语言的理解和运用。
2.2、实验原理
1、汇编语言源程序由.asm为扩展名,可以用任意的编辑器编写源代码。源文件格式中助记符指令源语句的每行通常包含4个部分:标记区、助记符区、操作数区和注释区。
2、汇编语言中的常数与字符串
汇编器支持8种类型的常数:①二进制整数;②八进制整数;③十进制整数;④十六进制整数;⑤浮点数;⑥汇编时间常数;⑦字符常数;⑧字符串
3、汇编源程序中的符号用于标号、常数和替代字符。符号名最多可长达200个字符,由字母、数字以及下划线和美元符号等组成。
4、堆栈的使用方法
当程序调用中断服务程序或子程序时,需要将程序计数器PC的值和一些重要的寄存器值进行压栈保护,以便程序返回时能从间断处继续执行。
5、控制程序
TMS320C54x具有丰富的程序控制指令利用这些指令可以执行分支转移、子程序调用子程序返回、条件操作及循环操作等控制操作。控制程序包括:分支操作程序、循环操作程序。
6、算术运算程序
基本算术运算包括:加减法运算、乘法运算、除法运算、长字和并行运算。
7、实验中所需的“.cmd”文件如下: MEMORY { PAGE 0: EPROM: org=01000H len=01F80H VECS: org=0FF80H len=0004H PAGE 1: SPRAM: org=0060H len=0030H DARAM: org=0090H len=0200H } SECTIONS {.text :>EPROM PAGE 0.data :>EPROM PAGE 0.bss :>SPRAM PAGE 1 } 7
2.3、实验内容
1、计算z(xy)*8w
程序如下:
.title “mjj.asm”.mmregs STACK.usect “STACK”,10h.bss x,1.bss y,1.bss w,1.bss z,1.def _c_int00.data table:.word 6,7,9 _c_int00: 结果图如下:
start: STM #0,SWWSR
STM #STACK+10h,SP STM #x,AR1
MVPD table,*AR1+ LD @x,A ADD @y,A LD A,3 SUB @w,A STL A,@z.end
2、计算y
ax。iii14程序如下:
.title “jj.asm”.mmregs STACK.usect “STACK”,10h.bss a,4.bss x,4.bss y,1.def _c_int00.data table:.word 1,2,3,4.word 8,6,4,2.text _c_int00: start: STM #0,SWWSR 结果图如下:
STM #STACK+10h,SP STM #a,AR1 RPT #7
MVPD table,*AR1+ CALL SUM end: B end
SUM: STM #a,AR2 STM #x,AR3 RPTZ A,#3
MAC *AR2+,*AR3+,A STL A,@y RET.end
3、计算yax iii14程序如下:
.title “2xh.asm”.mmregs STACK.usect “STACK”,10H;a1=0.3 a2=0.2 a3=-0.4 a4=0.1;x1=0.6 x2=0.5 x3=-0.1 x4=-0.2.bss x,4.bss a,4.bss y,1.def _c_int00.data table:.word 3*32768/10.word 2*32768/10.word-4*32768/10
.word 1*32768/10
.word 6*32768/10
.word 5*32768/10 结果图如下:
.word-1*32768/10
.word-2*32768/10.text _c_int00:
start: SSBX FRCT STM #x,AR3
RPT #7
MVPD table,*AR3+
STM #x,AR4
STM #a,AR5 RPTZ A,#3
MAC *AR4+,*AR5+,A
STH A,@y end: B end.end
4、计算yx1*a1x2*a2 程序如下:
.title “cc.asm”.mmregs STACK.usect “STACK”,10h.bss x1,1.bss a1,1.bss x2,1.bss a2,1.bss y,1.def _c_int00.data table:.word 1,2,3,4 _c_int00: 结果图如下:
start: STM #0,SWWSR
STM #STACK+10h,SP STM #x1,AR1 MVPD table,*AR1+ LD @x1,T MPY @a1,B LD @x2,T MAC @a2,B STL B,@y STH B,@y+1.end 9
5、计算y
ax iii110.title “ cj.asm”.mmregs STACK.usect “STACK”,10h.bss a,10.bss x,10.bss y,1.def _c_int00.data table:.word 1,2,3,4,5,6,7,8,9,2.word 8,6,4,2,3,1,5,2,1,3.text _c_int00: start: STM #0,SWWSR
结果图如下:
STM #STACK+10h,SP STM #a,AR1 RPT #19
MVPD table,*AR1+ CALL SUM end: B end
SUM: STM #a,AR2 STM #x,AR3 RPTZ A,#9
MAC *AR2+,*AR3+,A STL A,@y RET.end
6、求一个数的绝对值 程序如下:
.title “jj.asm”.mmregs STACK.usect “STACK”,10h.bss x,1.def _c_int00.data table:.word-9.text _c_int00: start: STM #0,SWWSR 结果图如下:
STM #STACK+10h,SP STM #x,AR1 MVPD table,*AR1 LD *AR1,A BC end,AGT ABS A STL A,@x end: B end.end 10
7、aixi(i=1,2,3,4)找出最大值 程序如下:
.title “mm.asm”.mmregs STACK.usect “STACK”,10h.bss a,4.bss x,4.bss y,1.def _c_int00.data table:.word 1,2,3,4.word 6,4,5,3.text _c_int00: start: STM #0,SWWSR STM #STACK+10h,SP STM #2,AR4
结果图如下:
STM #a,AR1 RPT #7
MVPD table,*AR1+ STM #a,AR2 STM #x,AR3 LD *AR2+,T MPY *AR3+,A LOOP1: LD *AR2+,T MPY *AR3+,B MAX A STL A,@y
BANZ LOOP1,*AR4-end: B end.end
8、对一个数组进行初始化:x[8]={0,0,0,0,0,0,0,0}.程序如下:
.title “hh.asm” start: STM #0,SWWSR.mmregs STM #STACK+10h,SP STACK.usect “STACK”,10h STM #x,AR1.bss x,8 LD #0,A.def _c_int00 RPTZ A,#7.data STL A,*AR1+ table:.word 1,2,3,4,5,6,7,8 end: B end.text.end _c_int00: 结果图如下:
9、对数组X[8]中的每个元素加1.程序如下:
.title “hh.asm”.mmregs STACK.usect “STACK”,10h.bss x,8.def _c_int00.data table:.word 1,2,3,4,5,6,7,8.text _c_int00: start: STM #0,SWWSR STM #STACK+10h,SP STM #x,AR1 结果图如下:
RPT #7
MVPD table, *AR1+ LD #1,16,B STM #7,BRC STM #x,AR4 RPTB next-1
ADD *AR4,16,B,A STH A,*AR4+
next: LD #0,B end: B end.end
10、编写16348/512的程序段 程序如下:.title “mm.asm”.mmregs STACK.usect “STACK”,10h.bss num,1.bss den,1.bss quot,1.def _c_int00.def start.data table:.word 16384.word 512.text _c_int00: start: STM #0,SWWSR STM #STACK+10h,SP 结果图如下:
STM #num,AR1 RPT #1
MVPD table,*AR1+ LD @den,16,A MPYA @num ABS A
STH A,@den LD @num,A ABS A RPT #15 SUBC @den,A XC 1,BLT NEG A
STL A,@quot.end 12
第三章、FFT算法的实现
3.1、实验目的和要求
在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,甚至成为DSP 运 算能力的一个考核因素。FFT 是一种高效实现离散付氏变换的算法。离散付氏变换的目 的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由付氏逆 变换到时域。
本实验的目的在于学习FFT 算法,及其在TMS320C54X 上的实现,并通过编程掌握C54X的存储器管理、辅助寄存器的使用、位倒序寻址方式等技巧,同时练习使用CCS 的探针和图形工具。另外在BIOS 子目录下是一个使用DSP/BIOS 工具实现FFT 的程序。通过该程序,你可以使用DSP/BIOS 提供的分析工具评估FFT 代码执行情况。
3.2、实验原理
1、基 2 按时间抽取FFT 算法
对于有限长离散数字信号{x[n]},0 ≤ n ≤ N-1,其离散谱{x[k]}可以由离散付氏变换(DFT)求得。DFT 的定义为:X(K)N1n0x[n]en0nkNN1j(2)nkN K=0,1,.....N-1可以方便的把它改写为如下形式:X(K)x[n]W k=0,1,....,N-1不难看出,WN 是周期性(nmN)(kLN)nk的,且周期为N,即WN m,l=0,1,2....WN的周期性是DFT 的关WN键性质之一。为了强调起见,常用表达式WN取代W 以便明确其周期是N。
由 DFT 的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N 点DFT 需要(N1)2 次复数乘法和N(N-1)次加法。因此,对于一些相当大的N 值(如1024)来说,直接计算它的DFT 所作的计算量是很大的。FFT 的基本思想在于,将原有的N点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT。例如,若N 为偶数,将原有的N 点序列分成两个(N/2)点序列,那么计算N 点DFT 将只需要约
[(N/2)2 ·2]=N/2 次复数乘法。即比直接计算少作一半乘法。因子(N/2)2表示直接计算(N/2)点DFT 所需要的乘法次数,而乘数2 代表必须完成两个DFT。
上述处理方法可以反复使用,即(N/2)点的DFT 计算也可以化成两个(N/4)点的DFT(假定N/2 为偶数),从而又少作一半的乘法。这样一级一级的划分下去一直到最后就划分成两点的FFT 运算的情况。
2、实数 FFT 运算
对于离散傅立叶变换(DFT)的数字计算,FFT 是一种有效的方法。一般假定输入序列是复数。当实际输入是实数时,利用对称性质可以使计算DFT 非常有效。一个优化的实数FFT 算法是一个组合以后的算法。原始的2N 个点的实输入序列组合成一个N 点的复序列,之后对复序列进行N 点的FFT 运算,最后再由N 点的复数输出拆散成2N 点的复数序列,这2N 点的复数序列与原始的2N 点的实数输入序列的DFT输出一致。使用这种方法,在组合输入和拆散输出的操作中,FFT 运算量减半。这样利用实数FFT算法来计算实输入序列的DFT 的速度几乎是一般复FFT 算法的两倍。本实验就用这种方法实现了一个256 点实数FFT(2N = 256)运算。
a.实数 FFT 运算序列的存储分配
如何利用有限的 DSP 系统资源,合理的安排好算法使用的存储器是一个比较重要的问题。b.基二实数 FFT 运算的算法
该算法主要分为四步:第一步,输入数据的组合和位倒序;第二步,N 点复数FFT;第三步,分离复数 FFT 的输出为奇部分和偶部分;第四步,产生最后的 N = 256 点的复数FFT 结果。
3、计算所求信号的功率
由于最后所得的 FFT 数据是一个复数,为了能够方便的在虚拟频谱仪上观察该信号的特征,我们通常对所得的FFT 数据进行处理取其实部和虚部的平方和,即求得该信号的功率。23.3、实验内容
本实验在CCS 下完成256 点的实数FFT,并通过CCS 的图形显示工具观察结果。
其主程序为初始化,并通过探针工具读入256 点方波数据(在文件fft.dat 中,该数据文 件可以通过程序fft_data.c 修改,但注意数据的绝对值不要超过0x23ff)。FFT 的实现由 四个子程序代码bit_rev、fft、unpack 和power 代码完成。实验可以分为以下几步:(1)启动 CCS,在Project 菜单选项中打开FFT 目录下的fft.pjt 文件。(2)用鼠标展开左面项目栏,打开 fft.asm 源程序。
(3)使用 Bulid 命令完成编译、连接,并使用Load Program 将生成的fft.out 装入5410 片内存储器。
(4)将光标移动到“call get_input”行,并设置一个探针点。将光标移动到下一行“nop”语句,使用工具设置一个断点。
(5)在 File 菜单中打开选项“File I/O”,使用“Add File”在FFT 目录下打开数据文件 fft.dat,然后修改“Address”参数为0x2300,修改“Length”参数为256。这表示程序执行到探针点时,将从fft.dat 文件中读出256 个数据,并将数据放入0x2300开始的存储器中。你可以选择“Wrap Around”,循环使用该数据文件。(6)选择“Add Probe Point”,将探针点与数据文件连接起来。选择探针点,然后在“Connect”选项中选择需要使用的数据文件名,再选择“Replace”,按确定键完成。可以看到“Probe”项被自动修改为“Connected”,表示探针已经与数据文件成功相连。
(7)完成探针设置后,可以使用F5 或“Run”命令启动程序运行。程序执行到探针点时
自动从数据文件读出256 个点的数据放入输入缓冲0x2300。(8)在“View”菜单项下选择“Graph-> Time/Frequency”,打开一个图形工具以便显示 输入数据波形。将“Start Address”改为0x2300,将“Acquisition Buffer Size”改为128,将“DSP Data Type”改为“16-bit signed integer”,这样即可显示128 个输入点波形。实验结果图如下:
(9)调整窗口显示大小,将光标移动到源程序的“b _c_int00”这行,使用Debug 中的 “Run to Cursor”项,程序将执行到这行并停下。这时FFT 程序已经计算完成。
再打开一个波形显示窗口,这次仅仅将“Start Address”改为0x2200,便可以显示计算 完成后的谱波形。
(10)选择“Debug”下的“Animate”运行程序,这时程序将循环运行,不断从数据文件 fft.dat 中读出数据,并计算其频谱。这时你可以看到连续的输入/输出波形。
(11)选择原始数据波形窗口,单击鼠标右键,进入“Properties”属性对话框。你可以将 “Display Type”改为“FFT Magnitude”,这时输入数据将显示其频谱。
思考题:
||SUB *AR2+0%,B
答:SACDD B,*AR2,#1
DST B,*AR1,LD *AR2+0%,16,B
SUB AR1,B(1)ST B,*AR3+
||LD *AR2,A 答:SACDD B,*AR3+,#1
LD *AR2,16,A
(2)ST B,*AR2(3)ST B,*PX+ ||MPY *QX+,A 答:SACCD B,*PX+,BNEQ
MPY *QX+,A
第四章、ASK、PSK、FSK调制的实现
4.1、实验目的
数字调制信号又称为键控信号,其调制过程是用键控的方法由基带信号对载频信号的振幅、频率及相位进行调制。这种调制的最基本方法有三种:振幅键控(ASK)、相移键控(PSK)、频移键控(FSK)。本节实训将通过CCS软件来实现对ASK、PSK、FSK的调制,并掌握它们之间的联系与不同。
4.2、实验原理
1、FSK频移键控的基本原理:用数字基带信号来控制高频载波频率的变化,使载波的频率在f1和f2之间变化。二进制频移信号可以看成两个不同载波的二进制振幅键控信号的叠加。
2、PSK相移键控的基本原理:用数字调制信号的正负控制载波相位。当数字信号的振幅为正时载波起始相位取0;当数字信号的振幅为负时,载波起始相位取180度。相移键控抗干扰能力强,但在解调是需要有一个正确的参考相位,即需要相干解调。
3、ASK振幅键控的基本原理:是用调制信号去控制高频正弦载波的幅度,使其按调制信号的规律变化的过程。
4.3、实验内容
1、FSK的实现
汇编语言程序:
.title“fsk_asm.asm”.global _fsk;定义为全局变量,提供给C调用.global _y1;C程序变量.global _y2;C程序变量.global _Pulse;C程序变量.global _FskSignal;C程序变量.mmregs.text _fsk: rsbx CPL stm #8-1,AR1;循环变量 256/32=8 stm #_y1, AR4
stm #_y2, AR2 stm #_Pulse, AR3 stm #_FskSignal, AR5 loop: ld *AR3, A bc freq500, AEQ;若原始数字信号为0,则调频信号为频率为500Hz的正弦波 sub #1, A bc freq1000, AEQ;若原始数字信号为1,则调频信号为频率为1000Hz的正弦波 fskend: addm #32, AR3 banz loop, *AR1-ret freq500: rpt #32-1 freq1000: rpt #32-1 mvdd *AR4+, *AR5+ mvdd *AR2+, *AR5+ addm #-32,AR4 addm #-32,AR2 b fskend b fskend.end C语言程序:
extern void fsk();// fc=(0x2000/0x10000)*fs=1000Hz, fs#include “C54MATH.H” 固定在8000 DATA x[256];} DATA y1[256];//正弦信号1 sine(x, y2, N);DATA y2[256];//正弦信号2 //原始信号 DATA Pulse[256];//被调信号 for(i=0;i
//按照当前文件夹内给出的图 for(i=0;i { for(;;){};x[i]=i*0x2000;} 结果图如下: 2、PSK的实现 程序如下: extern void fsk(); #include “C54MATH.H” DATA x[256];DATA y1[256]; //正弦信号1 DATA y2[256]; //正弦信号2 DATA Pulse[256];//被调信号 DATA FskSignal[256];//2FSK调制信号 #define N 256 void main(){ int i,j; //产生一个500Hz的正弦信号作为调制信号 for(i=0;i x[i]=i*0x1000; // fc=(0x1000/0x10000)*fs=500Hz, fs固定在8000 } sine(x, y1, N);//产生一个1000Hz的正弦信号作为调制信号 for(i=0;i x[i]=-i*0x1000; // fc=(0x2000/0x10000)*fs=1000Hz, fs固定在8000 实验结果图如下: } sine(x, y2, N);//原始信号 for(i=0;i { j=i/32; switch(j%2) { case 0: Pulse[i]=0; break; case 1: Pulse[i]=1; break; } } fsk();//运行到此处后,打开View->Graph->Time/Frequency Graph,//按照当前文件夹内给出的图形属性设置,即可显示2FSK信号 for(;;){}; } 18 3、ASK的实现 extern void fsk();#include “C54MATH.H” DATA x[256];DATA y1[256];//正弦信号1 DATA y2[256];//正弦信号2 DATA Pulse[256];//被调信号 DATA FskSignal[256];//2FSK调制信号 #define N 256 void main(){ int i,j;//产生一个500Hz的正弦信号作为调制信号 for(i=0;i case 0: y1[i]=0;break;} } //产生一个1000Hz的正弦信号作为调制信号 for(i=0;i 实验结果图如下: // fc=(0x2000/0x10000)*fs=1000Hz, fs固定在8000 } sine(x, y2, N);//原始信号 for(i=0;i j=i/32; switch(j%2){ case 0: Pulse[i]=0;break; case 1: Pulse[i]=1;break;} } fsk();//运行到此处后,打开View->Graph->Time/Frequency Graph,//按照当前文件夹内给出的图形属性设置,即可显示2FSK信号 for(;;){};} 19 心得体会 为期两个星期的实训结束了,这两个周的实训让我收获颇多。在实训中我深深体会到了DSP技术及应用这门课的博大精深,里面包含的知识很多,紧靠平时的理论课程来理解是远远不够的。在理论课程中我们主要学习了TMS320C54x的硬件结构、它的指令系统,汇编语言程序的开发工具、汇编语言的程序设计还有应用程序设计等内容。这次实训的内容主要是基本算术运算、C54X算法的汇编语言程序设计、FFT算法的实现以及ASK、FSK、PSK调制的实现。 这次的实训课程说难也不是很难但说简单它也绝对不简单,看似简单是东西做起来就不一定了,在实验的过程中也出现不少的问题。因为之前没有接触过这个软件,所以在开始实验前我们是先对CCS软件进行了了解,再通过实际操作熟悉软件,然后再做实训内容。在这次实训中我学到了如何使用CCS软件来进行简单的运算,并且能通过该软件来查看实验结果和修改结果。我们还做了FFT算法的实现并且对ASK、FSK、PSK进行了简单的调制,调制过程中遇到了很多麻烦,比如图形出不来或是出现不规则图形等等的问题。但经过我们不懈的努力、重复的实验,在实验结果出来并且正确的时候我的心情是激动的。在实训过程中我们遇到了不少困难。因为对软件的不熟悉,导致不知道从什么地方查看结果,查看结果不正确也不知道该从哪修改,不过在老师耐心的讲解和同学的热心帮助下,我们还是顺利的完成了实训。 通过这次实训我收获了很多,也成长了很多,明白了理论联系实际的重要性,还知道了“团结就是力量”的真理,希望在以后的学习工作中我能将我所学到的知识发挥得淋漓尽致。最后感谢老师的谆谆教诲,没有您耐心的教导我们不可能这么顺利就完成任务。 中南大学 数字信号处理课程设计报告 专业班级: 通信工程1201 指导老师:李宏 姓 名: 学 号: 完成日期:2014年10月18日 前 言 现代信号处理是将信号表示并处理的理论和技术,而数字信号处理与模拟信号处理是信号处理的子集。在本次课程设计中主要以数字信号处理来解决问题。数字信号处理的目的是对真实世界的连续模拟信号进行测量或滤波,因此在进行数字信号处理之前需要将信号从模拟域转换到数字域,这通常通过模数转换器实现。而数字信号处理的输出经常也要变换到模拟域,这是通过数模转换器实现的。 数字信号处理的算法需要利用计算机或专用处理设备如数字信号处理器(DSP)和专用集成电路(ASIC)等。数字信号处理技术及设备具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等突出优点,这些都是模拟信号处理技术与设备所无法比拟的。数字信号处理的核心算法是离散傅立叶变换(DFT),是DFT使信号在数字域和频域都实现了离散化,从而可以用通用计算机处理离散信号。而使数字信号处理从理论走向实用的是快速傅立叶变换(FFT),FFT的出现大大减少了DFT的运算量,使实时的数字信号处理成为可能、极大促进了该学科的发展。 MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户接口、连接其它编程语言的程序等。 一、课程设计目的: 1.全面复习课程所学理论知识,巩固所学知识重点和难点,将理论与实践很好地结合起来。 2.掌握信号分析与处理的基本方法与实现 3.提高综合运用所学知识独立分析和解决问题的能力; 4.熟练使用一种高级语言进行编程实现。 二、课程设计题目: (一): 1)生成信号发生器:能产生频率(或基频)为10Hz的周期性正弦波、三角波和方波信号。绘出它们的时域波形 2)为避免频谱混叠,试确定各信号的采样频率。说明选择理由。3)对周期信号进行离散傅立叶变换,为了克服频谱泄露现象,试确定截取数据的长度,即信号长度。分析说明选择理由。4)绘出各信号频域的幅频特性和相频特性 5)以正弦周期信号为例,观察讨论基本概念(频谱混叠、频谱泄漏、整周期截取等)。 (二): 已知三个信号aip(n),经调制产生信号s(n)aip(n)cos(in/4),其中ai为 i1常数,p(n)为具有窄带特性的Hanning信号。将此已调信号通过信道传输,描述该信道的差分方程为 y(n)1.1172y(n1)0.9841y(n2)0.4022y(n3)0.2247y(n4)0.2247x(n)0.4022x(n1)0.9841x(n2)1.1172x(n3)x(n4) 得到接收信号y(n)s(n)*h(n) 1)分析Hanning信号p(n)的时域与频域特性 2)分析已调信号s(n)的时域与频域特性 3)分析系统的单位脉冲响应h(n)4)分析接收信号y(n)的频谱 5)设计带通滤波器从接收信号y(n)中还原出三个已调信号。 3(三):图像信号相关处理 1)读入一幅彩色图像 2)将彩色图像进行三原色分解,分解出R、G、B分量,并用图像显示出来 3)将彩色图像灰度化,转换为灰度图像并显示 4)对灰度图像用几种典型的边缘检测算子进行边缘检测,显示检测出的边缘。 三、调试及结果分析(截图): (一): 1) 频率为10Hz的周期性正弦波: 频率为10Hz的周期性三角波: 频率为10Hz的周期性方波: 2)采样频率不能过低,必须fs>=2fm,即采样频率必须大于或等于最高截止频率的二倍(对采样频率的要求,即采样频率要足够大,采样的值要足够多,才能不失真的恢复原信号)。题目中信号频率为10Hz,则采样频率应该大于或等于20Hz,这样的话采样离散信号才能够无失真的恢复到原来的连续信号。3)截取数据长度(即信号长度)N=T*fs=2 4) 频率为10Hz的周期性正弦波的幅频特性和相频特性: 频率为10Hz的周期性三角波的幅频特性和相频特性: 频率为10Hz的周期性方波的幅频特性和相频特性: 5) 频谱混叠:一个信号的最高频率比如是fmax,那它的频谱就是在-fmax~fmax之间有值。对这个信号进行时域采样(就是取离散的点),设采样率为fs。有一个定理:对信号进行时域fs的采样,信号的频谱就会在频域以fs为周期重复。那么如果fs>=2fmax,可想而知,频域宽度为fs的频带内,是可以放得下一整个完整的频谱的,所以不会混叠。如果fs<2fmax,频域每间隔fs就会出现一个频谱,必定会有相邻的频谱叠在一起的情况,就是混叠。 频谱泄露:对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱。但是,在利用DFT求它的频谱做了截短,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有谱线出现,它们可以理解为是从fs频率上“泄露”出去的,这种现象称 为频谱“泄露”。 整周泣截取:与周期函数一样,周期信号是每隔时间T以后,信号重复出现。T就称为信号的周期。 N取100时: N取200时: (二): 1)Hanning信号p(n)的时域与频域特性: 2)已调信号s(n)的时域与频域特性: 3)系统的单位脉冲响应h(n): 4)接收信号y(n)的频谱: 5)(设计带通滤波器)从接收信号y(n)中还原出三个已调信号: (三): 1)读入一幅彩色图像: 2)将彩色图像进行三原色分解,分解出R、G、B分量,并用图像显示出来: 3)将彩色图像灰度化,转换为灰度图像并显示: 4)对灰度图像用几种典型的边缘检测算子进行边缘检测,显示检测出的边缘: 四、源程序: (一): 1): 周期性正弦波: fs=10;w=2*pi*fs;t=0:0.01:2;y=sin(w*t);plot(t,y);grid on;axis([0 2-2 2]);title('正弦信号'); 周期性三角波: t=-0.3:0.01:0.3;y=sawtooth(10*pi*t,0.5);plot(t,y);grid on;axis([-0.3 0.3-1.5 1.5]);title('三角波信号') 周期性方波: t=0:0.001:0.5;y=square(2*pi*10*t,50);plot(t,y);grid on;axis([0 0.5-1.5 1.5]);title('周期方波信号') 4): 周期性正弦波: t=0:0.001:0.999;subplot(311)a=sin(20*pi*t);plot(t,a);grid on;title('sin20pi*t');xlabel('T');b=fft(a);subplot(312);stem(t*1000,abs(b)/1000,'fill');xlabel('Hz');axis([-10 50 0 0.5]);grid on;title('幅频特性')subplot(313)stem(t*1000,angle(b)/1000,'fill');xlabel('Hz');axis([0 100-0.004 0.004])grid on;title('相频特性') 周期性三角波: t=-0.3:0.01:0.3;a=sawtooth(10*pi*t,0.5);subplot(311)plot(t,a);grid on;axis([-0.3 0.3-1.5 1.5]);title('三角波信号')b=fft(a);subplot(312)stem(t*100,abs(b)/100,'fill');axis([0 50 0 0.5]);grid on;title('幅频特性')subplot(313)stem(t*100,angle(b)/100,'fill');axis([0 25-0.04 0.04]);grid on;title('相频特性')周期性方波: t=0:0.001:0.5;a=square(2*pi*10*t,50);subplot(311)plot(t,a);grid on;axis([0 0.5-1.5 1.5]);title('周期方波信号')b=fft(a);subplot(312)stem(t*100,abs(b)/100,'fill');axis([0 50 0 4]);grid on;title('幅频特性')subplot(313)stem(t*100,angle(b)/100,'fill');axis([0 5-0.04 0.04]);grid on;title('相频特性') 5): N=100(或:N=200);T=1; t=linspace(0,T,N);x=sin(2*pi*10*t);dt=t(2)-t(1);f=1/dt;X=fft(x);F=X(1:N/2+1);f=f*(0:N/2)/N;subplot(2,1,1)plot(t,x) title('x=sin(2*pi*50*t)')xlabel('t') ylabel('Amplitude')axis([0,1,-1,1]);subplot(2,1,2)plot(f,abs(F))xlabel('Frequency');ylabel('|X(e^{jw})|') (二): 1): N=100;n=0:99;Rn=[ones(1,N-1)zeros(1, 101-N)];pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;subplot(211);stem(n,pn);title('汉宁信号');[H,w]=freqz(pn,1,200);magH=abs(H);length(w);length(H);magHdB=20*log10(magH);subplot(212);plot(w/pi,magHdB);2): N=100;n=0:99; Rn=[ones(1,N-1)zeros(1,101-N)];pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn; sn=2*pn.*(cos(pi*n/4)+4*pn.*cos(pi*n/2)+6*pn.*cos(3*pi*n/4));subplot(211);stem(n,sn); title('已调信号'); [H,w]=freqz(sn,1,200);magH=abs(H);length(w);length(H); magHdB=20*log10(magH);subplot(212);plot(w/pi,magHdB); 3): a=[1-1.1172 0.9842-0.4022 0.2247];b=[0.2247-0.4022 0.9842-1.1172 1];n=1:49; hn=impz(b,a,n);stem(n,hn,'k','f');ylabel('脉冲响应 ¨h(n)');xlabel('序号(n)');title('单位脉冲响应'); 4): a=[1-1.1172 0.9842-0.4022 0.2247];b=[0.2247-0.4022 0.9842-1.1172 1];k=0:0.1:100;p=0.5-0.5*cos(2*pi*k./74);s=p.*(cos(pi*k/4)+2*cos(pi*k/2)+3*cos(3*pi*k/4));y=filter(b,a,s);z1=fft(y,256);plot([-128:127],fftshift(abs(z1)));axis([-30 30 0 120]);grid on; 5): wp=200;ws=200;wp1=[0.2,0.3];ws1=[0.1,0.4];wp2=[0.4,0.6];ws2=[0.3,0.7];wp3=[0.7,0.8];ws3=[0.6,0.9];ap=1;as=20;N=100;n=0:99; Rn=[ones(1,N-1)zeros(1,101-N)];pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn; sn=2*pn.*(cos(pi*n/4)+4*pn.*cos(pi*n/2)+6*pn.*cos(3*pi*n/4));a=[1-1.1172 0.9841-0.4022 0.2277];b=[0.2277-0.4022 0.9841-1.1172 1];yn=filter(b,a,sn); [n,wc]=cheb1ord(wp,ws,ap,as);[bz,az]=cheby1(n,ap,wc);subplot(311)bz1=bz;az1=az;x1=filter(bz1,az1,yn);plot(x1);subplot(312)bz2=bz;az2=az;x2=filter(bz2,az2,yn);plot(x2);subplot(313)bz3=bz;az3=az;x3=filter(bz3,az3,yn);plot(x3) (三): 1): clc;a=imread('F:星空.jpg');imshow(a),title('原彩色图像');2): clc;a=imread('F:星空.jpg');subplot(3,2,1),imshow(a),title('原彩色图像'); ar=a(:,:,1);ag=a(:,:,2);ab=a(:,:,3);subplot(3,2,4),imshow(ar),title('R'); subplot(3,2,5),imshow(ag),title('G');subplot(3,2,6),imshow(ab),title('B');3): clc;a=imread('F:星空.jpg');subplot(2,1,1),imshow(a),title('原彩色图像');b=rgb2gray(a);subplot(2,1,2),imshow(b),title('灰度图像');4): a=imread('F:星空.jpg');b=rgb2gray(a);b1=edge(b,'sobel');b2=edge(b,'prewitt');b3=edge(b,'roberts');b4=edge(b,'log');b5=edge(b,'canny');subplot(3,2,1);imshow(b);title('灰度图像');subplot(3,2,2);imshow(b1);title('Sobel边缘检测');subplot(3,2,3);imshow(b2);title('Prewitt边缘检测');subplot(3,2,4);imshow(b1);title('Roberts边缘检测');subplot(3,2,5);imshow(b1);title('LoG边缘检测');subplot(3,2,6);imshow(b1);title('Canny边缘检测'); 五、总结与心得体会: 在课程设计的这段时间,我获益匪浅,不但进一步掌握了数字信号处理的基础知识及MATLAB的基本操作,还详细了解并掌握了信号的产生、采样及频谱分析的方法。我进一步了解到凡事都需要耐心,细心仔细是成功的重要保证之一。虽然在做的过程中遇到了一些问题,但是在研究生学姐、班级同学的帮助以及自己的努力下,问题最终都得以解决。这次课程设计对我各方面的能力有了很大的提高,对我以后的工作、实践都有很大的帮助。 在此次课程设计当中,我经常把C语言的语法知识照搬到MATALAB设计中,从而导致调试失败,所以下次用此类语言做课程设计时,应事先学习下这类语言的基本语法,以免与其他语言相混淆。还有就是有些不定参数存在时,可先取定值,用于调试,这样可以节约调试时间,从而提高效率。 本次课程设计不但让我又学到了一些知识,而且也提高了我的综合能力,使我在各个方面都得到了锻炼。以后有这样的机会一定会更加的很好利用,它不仅可以提高学习的针对性而且可以很好的锻炼动手能力以及自己的逻辑设计能力和处理问题的能力,希望在以后的学习生活中会有更多的机会来加强这方面的能力。 参考文献: [1] 《数字信号处理(第二版)》.丁玉美等 西安电子科技大学出版社 [2] 《数字信号处理及其MATLAB实现》,陈怀琛等译,电子工业出版社; [3] 《MATLAB及在电子信息课程中的应用》,陈怀琛等,电子工业出版社 基于DSP的开关电源 摘要 本文以TMs320LF2407A为控制核心,介绍了一种基于DSP的大功率开关电源的设计方案。该电源采用半桥式逆变电路拓扑结构,应用脉宽调制和软件PID调节技术实现了电压的稳定输出。最后,给出了试验结果。试验表明,该电源具有良好的性能,完全满足技术规定要求。关键字:DSP;开关电源;PID调节 ABSTRACT In this paper,setting TMs320LF2407A as the control center, it describes a DSP-based high-power switching power source design.The power supply uses a half-bridge inverter circuit topology, applications and software PID regulator pulse width modulation technology to achieve a stable output voltage.Finally, the experimental results was given.The experimental results show that the power supply has a good performance, fully meeting the technical requirements.Key Words: DSP;Switching power supply;PID 0 引 言 信息时代离不开电子设备,随着电子技术的高速发展,电子设备的种类与日俱增,与人们的工作、生活的关系也日益密切。任何电子设备又都离不开可靠的供电电源,它们对电源供电质量的要求也越来越高。 目前,开关电源以具有小型、轻量和高效的特点而被广泛应用于电子设备中,是当今电子信息产业飞速发展不可缺少的一种电源。与之相应,在微电子技术发展的带动下,DSP芯片的发展日新月异,因此基于DSP芯片的开关电源拥有着广阔的前景,也是开关电源今后的发展趋势。电源的总体方案设计 本文所设计的开关电源的基本组成原理框图如图1所示,主要由功率主电路、DSP控制回路以及其它辅助电路组成。 开关电源的主要优点在“高频”上。通常滤波电感、电容和变压器在电源装置的体积和重量中占很大比例。从“电路”和“电机学”的有关知识可知,提高开关频率可以减小滤波器的参数,并使变压器小型化,从而有效地降低电源装置的体积和重量。以带有铁芯的变压器为例,分析如下: 图1.开关电源基本原理 设铁芯中的磁通按正弦规律变化,即φ= φMsinωt,则: eLWdWcostEMcost dt(1)式中,EM= ωWφ M=2πfWφM,在正弦情况下,EM=√2E,φM=BMS,故: E2fWM4.44fWBMS 2(2)式中,f为铁芯电路的电源频率;W 为铁芯电路线圈匝数;BM为铁芯的磁感应强度;S为铁芯线圈截面积。 从公式可以看出电源频率越高,铁芯截面积可以设计得越小,如果能把频率从50 Hz提高到50 kHz,即提高了一千倍,则变压器所需截面积可以缩小一千倍,这样可以大大减小电源的体积。 综合电源的体积、开关损耗以及系统抗干扰能力等多方面因素的考虑,本开关电源的开关频率设定为30 kHZ。系统的硬件设计 2.1 功率主电路 本电源功率主回路采用“AC-DC-AC—DC”变换的结构,主要由输入电网EMI滤波器、输人整流滤波电路、高频逆变电路、高频变压器、输出整流滤波电路等几部分组成,如图2所示。 图2.功率主电路原理图 图3.功军主回路的电压波形变化 本开关电源采用半桥式功率逆变电路。如图2所示,输入市电经EMI滤波器滤波,大大减少了交流电源输入的电磁干扰,并同时防止开关电源产生的谐波串扰到输入电源端。再经过桥式整流电路、滤波电路变成直流电压加在P、N两点问。P、N之间接人一个小容量、高耐压的无感电容,起到高频滤波的作用。半桥式功率变换电路与全桥式功率变换电路类似,只是其中两个功率开关器件改由两个容量相等的电容CA1和CA2代替。在实际应用中为了提高电容的容量以及耐压程度,CA1和CA2往往采用的是由多个等值电容并联组成的电容组。C A1、CA2 的容量选值应在电源体积和重量允许的条件下尽可能的大,以减小输出电压的纹波系数和低频振荡。CA1 和CA2 在这里同时起到了静态时分压的作用,使Ua =Uin/2。 在本电源的设计中,采用IGBT来作为功率开关器件。它既具有MOSFET的通断速度快、输入阻抗高、驱动电路简单及驱动功率小等优点,又具有GTR的容量大和阻断电压高的优点。 在IGBT的集射极间并接RC吸收网络,降低开关应力,减小IGBT关断产生的尖峰电压;并联二极管DQ实现续流的作用。二次整流采用全波整流电路,通过后续的LC滤波电路,消除高频纹波,减小输出直流电压的低频振荡。LC滤波电路中的电容由多个高耐压、大容量的电容并联组成,以提高电源的可靠性,使输出直流电压更加平稳。2.2 控制电路 控制电路部分实际上是一个实时检测和控制系统,包括对开关电源输出端电压、电流和IGBT温度的检测,对收集信息的分析和运算处理,对电源工作参数的设置和显示等。其控制过程主要是通过采集开关电源的相关参数,送入DSP芯片进行预定的分析和计算,得出相应的控制数据,通过改变输出PWM波的占空比,送到逆变桥开关器件的控制端,从而控制输出电压和电流。 控制电路主要包括DSP控制器最小系统、驱动电路、辅助电源电路、采样电路和保护电路。 (1)DSP控制器最小系统 DSP控制器是其中控制电路的核心采用TMS32OLF2407A DSP芯片,它是美国TEXAS INSTU—MENTS(TI)公司的最新成员。TMS30LF2407A基于C2xLP内核,和以前C2xx系列成员相比,该芯片具有处理性能更好(30MIPS)、外设集成度更高、程序存储器更大、A/D转换速度更快等特点,是电机数字化控制的升级产品,特别适用于电机以及逆变器的控制。DSP控制器最小系统包括时钟电路、复位电路以及键盘显示电路。时钟电路通过15 MHz的外接晶振提供;复位电路直接通过开关按键复位;由4×4的矩阵式键盘和SPRT12864M LCD构成了电源系统的人机交换界面。 (2)驱动放大电路 IGBT的驱动电路采用脉冲变压器和TC4422组成,其电路原理图如图4所示: 图4.IGBT驱动电路原理图 由于TMS320LF2407A的驱动功率较小,不能胜任驱动开关管稳定工作的要求,因此需要加上驱动放大电路,以增大驱动电流功率,提高电源系统的可靠性。如图4所示,采用两片TCA422组成驱动放大电路。 TC4421/4422是Microchip公司生产的9A高速MOsFET/IGBT驱动器,其中TC4421是反向输出,TC4422是同向输出,输出级均为图腾柱结构。 TC4421/4422具有以下特点: ①输出峰值电流大:9 A; ② 电源范围宽:4.5 V~18 V; ③连续输出电流大:最大2 A; ④快速的上升时间和下降时间:30 ns(负载4700pF),180 ns(负载47000 pF); ⑤传输延迟时间短:30 ns(典型); ⑥供电电流小:逻辑“1”输入~200μA(典型),逻辑“0”输入~55 μA(典型); ⑦输出阻抗低:1.4 Ω(典型); ⑧闭锁保护:可承受1.5 A的输出反向电流; ⑨输入端可承受高达5 V的反向电压; ⑩能够由TTL或CMOS电平(3 V~18 V)直接驱动,并且输人端采用有300 mV滞回的施密特触发电路。 当TMS320LF2407A输出的PWM1为高电平,PWM2为低电平时,经过TCA422驱动放大后输出,在脉冲变压器一次侧所流过的电流从PWMA流向PWMB,如图4中箭头所示,电压方向为上正下负。 根据变压器的同名端和接线方式,则开关管Q1的栅极电压为正,Q2的栅极电压为负。因此,此时是驱动QM1导通。反之若是PWM1为高电平,PWM2为低电平时,则是驱动Q2导通。四只二极管DQ1 ~DQ2的作用是消除反电动势对TCA422的影响。 (3)辅助电源电路 本开关电源电路设计过程中所需要的几路工作电源如下: ① TMS320LF2407 DSP所需电源:I/O 电源(3.3 V),PLL(PHSAELOCKED LOOP)电源(3.3 V),FIASH编程电压(5 V),模拟电路电源电压(3.3 V);②TCA422芯片所需电源:电源端电压范围4.5~18 V(选择15 V);③采样电路中所用运算放大器的工作电源为15 V。 因此,整个控制电路需要提供15 V、5 V和3.3 V三种制式的电压。设计中选用深圳安时捷公司的HAw 5-220524 AC/DC模块将220 V、50 Hz的交流电转换成24 V直流电,然后采用三端稳压器7815和7805获得15 V和5 V的电压。TMS320LF2407A所需的3.3 V由5 V通过TPS7333QD电压芯片得到。(4)采样电路 电压采样电路由三端稳压器TL431和光电耦合器PC817之问的配合来构成。电路设计如图5所示,TL431与PC817一次侧的LED串联,TL431阴极流过的电流就是LED的电流。输出电压Ud经分压网络后到参考电压UR与TL431中的2.5 V基准电压Uref进行比较,在阴极上形成误差电压,使LED的工作电流 If发生变化,再通过光耦将变化的电流信号转换为电压信号送人LF2407A的ADCIN00引脚。 图5.电压采样电路原理图 由于TMS320LF2407A的工作电压为3.3 V,因此输入DSP的模拟信号也不能超过3.3 V。为防止输入信号电压过高造成A/D输入通道的硬件损坏,我们对每一路A/D通道设计了保护电路,如图5所示,Cu2,CU3 起滤波作用,可以将系统不需要的高频和低频噪声滤除掉,提高系统信号处理的精度和稳定性。 另外,采用稳压管限制输入电压幅值,同时输入电压通过二极管与3.3 V电源相连,以吸收瞬间的电压尖峰。 当电压超过3.3 V时,二极管导通,电压尖峰的能量被与电源并联的众多滤波电容和去耦电容吸收。并联电阻Ru4的目的是给TL431提供偏置电流,保证TL431至少有1 mA的电流流过。Cu1 和RU3作为反馈网络的补偿元件,用以优化系统的频率特性。 电流采样的原理与电压采样类似,只是在电路中要通过电流传感器将电流信号转换为电压信号,然后再进行采集。 (5)保护电路 为保证系统中功率转换电路及逆变电路能安全可靠工作,TMs320LF2407A提供了PDPINTA,各种故障信号经或门CD4075B综合后,经光电隔离、反相及电平转换后输入到PDPINTA引脚,有任何故障时,CD4075B输出高电平,PDPINTA引脚相应被拉为低电平,此时DSP所有PWM输出管脚全部呈现高阻状态,即封锁PWM输出。整个过程不需要程序干预,由硬件实现。这对实现各种故障信号的快速处理非常有用。在故障发生后,只有在人为干预消除故障,重启系统后才能继续工作。系统的软件实现 为了构建DSP控制器软件框架,使程序易于编写、查错、测试、维护、修改、更新和扩充,在软件设计中采用了模块化设计,将整个软件划分为初始化模块、ADC信号采集模块、PID运算处理模块、PWM波生成模块、液晶显示模块以及按键扫描模块。各模块间的流程如图6所示。 图6.功能模块流程图 3.1 初始化模块 系统初始化子程序是系统上电后首先执行的一段代码,其功能是保证主程序能够按照预定的方式正确执行。系统的初始化包括所有DSP的基本输入输出单元的初始设置、LCD初始化和外扩单元的检测等。 3.2 ADC采样模块 TMS320LF2407A芯片内部集成了10位精度的带内置采样/保持的模数转换模块(ADC)。根据系统的技术要求,10位ADC的精度可以满足电压的分辨率、电流的分辨率的控制要求,因此本设计直接利用DSP芯片内部集成的ADC就可满足控制精度。另外,该10位ADC是高速ADC,最小转换时间可达到500 ns,也满足控制对采样周期要求。 ADC采样模块首先对ADC进行初始化,确定ADC通道的级联方式,采样时间窗口预定标,转换时钟预定标等。然后启动ADC采样,定义三个数组依次存放电压、电流和温度的采样结果,对每一个信号采样8次,经过移位还原后存储到相应的数组中,共得到3组数据。如果预定的ADC中断发生,则转人中断服务程序,对采样的数据进行分析、处理和传输。以电压采样为例,其具体的流程图如图7所示。 图7.程序流程图 3.3 PID运算模块 本系统借助DSP强大的运算功能,通过编程实现了软件PID调节。由于本系统软件中采用的是增量式PID算法,因此需要得到控制量的增量△un,式(3)为增量式PID算法的离散化形式: unKp(enen1)KienKd[en2en1en2] (3) 开关电源在进入稳态后,偏差是很小的。如果偏差e在一个很小的范围内波动,控制器对这样微小的偏差计算后,将会输出一个微小的控制量,使输出的控制值在一个很小的范围内,不断改变自己的方向,频繁动作,发生振荡,这既影响输出控制器,也对负载不利。 为了避免控制动作过于频繁,消除由于频繁动作所引起的系统振荡,在PID算法的设计中设定了一个输出允许带eo。当采集到的偏差|en|≤eo时,不改变控制量,使充电过程能够稳定地进行;只有当|en| >eo 时才对输出控制量进行调节。PID控制模块的程序流程如图8所示: 图8.PID运算程序流程图 TMS320LF2407A内部包括两个事件管理器模块EVA和EVB,每个事件管理器模块包括通用定时器GP、比较单元、捕获单元以及正交编码脉冲电路。通过TMS320LF2407A事件管理模块中的比较单元可以产生带死区的PWM波,与PWM 波产生相关的寄存器有:比较寄存器CMPRx、定时器周期寄存器Tx—PR、定时器控制寄存器TxCON、定时器增/减计数器TxCNT、比较控制寄存器COMCONA/B、死区控制寄存器DBTCONA/B。 PWM波的生成需对TMS320LF2407A的事件管理模块中的寄存器进行配置。由于选用的是PWM1/2,因此配置事件管理寄存器组A,根据需要生成带死区PWM波的设置步骤为: (1)设置并装载比较方式寄存器ACTRA,即设置PWM波的输出方式; (2)设置T1CON寄存器,设定定时器1工作模式,使能比较操作; (3)设置并装载定时器1周期寄存器T1PR,即规定PWM 波形的周期; (4)定义CMPR1寄存器,它决定了输出PWM 波的占空比,CMPR1中的值是通过计算采样值而得到的; (5)设置比较控制寄存器COMCONA,使能PD—PINTA 中断; (6)设置并装载死区寄存器DBTCONA,即设置死区时间。 图9.带死区PWM波的生成原理 3.5 键盘扫描及LCD显示模块 按键扫描执行模块的作用是判断用户的输入,对不同的输入做出相应的响应。本开关电源设计采用16个压电式按键组成的矩阵式键盘构成系统的输入界面。16个按键的矩阵式键盘需要DSP的8个I/O口,这里选用IOPA0~IOPA3作为行线,IOPF0~IOPF3作为列线。由于TMS320LF2407A都是复用的I/O口,因此需要对MCRA和MCRC寄存器进行设置使上述8个I/O口作为一般I/O端口使用。按键扫描执行模块采用的是中断扫描的方式,只有在键盘有键按下时才会通过外部引脚产生中断申请,DSP相应中断,进人中断服务程序进行键盘扫描并作相应的处理。 LCD显示模块需要DSP提供11个I/O口进行控制,包括8位数据线和3位控制线,数据线选用IOPB0~IOPB7,控制线选用IOPFO IOPF2,通过对PBDATDIR和PFDATDIR寄存器的设置实现DSP与LCD的数据传输,实时显示开关电源的运行状态。结论 本文介绍的基于DSP的大功率高频开关电源,充分发挥了DSP强大功能,可以对开关电源进行多方面控制,并且能够简化器件,降低成本,减少功耗,提高设备的可靠性。 参考文献 [1]何希才.新型开关电源的设计与应用[J].北京:科学出版社,2001 [2]刘和平,严利平,张学锋等.TMS320LF240xDSP结构、原理及应用[J].北京:航空航天大学出版社,2002 [3] 陈伟,马金平,杜志江,李永利.基于DSP的PWM型开关电源的设计[J].微计算机信息,2006,12(5):238-240 [4]周志敏,周纪海.开关电源实用技术——设计与应用[J].北京:人民邮电出版社,2003 [5] 毛晓波.交流采样技术及其DSP实现方法.微计算机信息[J].2005,11(5):36-39 .c图 实验二 #define UINT unsigned int UINT i,*p,*n;void main(void){ p=(UINT *)0x0300; for(i=0;i<20;i++) { if(*p==0x8888) n=p; p++; } }.cmd图 MEMORY { PAGE 0: PROG: origin = 1a00h, length = 2580h vectors: origin = 3f80h, length = 80h PAGE 1: DATA: origin = 0200h, length = 1800h } SECTIONS { .text > PROG PAGE 0 .cinit > PROG PAGE 0 //.switch > PROG PAGE 0 vect > vectors PAGE 0 .data > DATA PAGE 1 .bss > DATA PAGE 1 .const > DATA PAGE 1 .sysmem > DATA PAGE 1 .stack > DATA PAGE 1 } xf高低电平等时间循环变化截图如下所示: 找出由地址0x0300~0x0320中存储数据为0x8888的地址截图如下所示: 心得体会: 经过这次实验,理解了对地址0x0300~0x0320中存储数据为0x8888的寻找和设置。 关于dsp心得体会 篇一:dsp实验报告心得体会 TMS320F2812x DSP原理及应用技术实验心得体会 1.设置环境时分为软件设置和硬件设置,根据实验的需要设置,这次实验只是软件仿真,可以不设置硬件,但是要为日后的实验做准备,还是要学习和熟悉硬件设置的过程。 2.在设置硬件时,不是按实验书上的型号选择,而是应该按照实验设备上的型号去添加。 3.不管是硬件还是软件的设置,都应该将之前设置好的删去,重新添加。设置好的配置中只能有一项。 4.CCS可以工作在纯软件仿真环境中,就是由软件在PC机内存中构造一个虚拟的DSP环境,可以调试、运行程序。但是一般无法构造DSP中的外设,所以软件仿真通常用于调试纯软件算法和进行效率分析等。 5.这次实验采用软件仿真,不需要打开电源箱的电源。 6.在软件仿真工作时,无需连接板卡和仿真器等硬件。 7.执行write_buffer一行时。如果按F10执行程序,则程序在mian主函数中运行,如果按F11,则程序进入write_buffe函数内部的程序运行。 8.把str变量加到观察窗口中,点击变量左边的“+”,观察窗口可以展开结构变量,就可以看到结构体变量中的每个元素了。 9.在实验时,显示图形出现问题,不能显示,后来在Graph Title 把Input的大写改为input,在对volume进行编译执行后,就可以看到显示的正弦波图形了。 10.在修改了实验2-1的程序后,要重新编译、连接执行程序,并且必须对.OUT文件进行重新加载,因为此时.OUT文件已经改变了。如果不重新加载,那么修改执行程序后,其结果将不会改变。 11.再观察结果时,可将data和data1的窗口同时打开,这样可以便于比较,观察结果。 12.通过这次实验,对TMS320F2812x DSP软件仿真及调试有了初步的了解与认识,因为做实验的时候都是按照实验指导书按部就班的,与真正的理解和掌握还是有些距离的。但是这也为我们日后运用这些知识打下了基础,我觉得实验中遇到的问题,不要急于问老师或者同学,先自己想办法分析原因,想办法解决,这样对自身的提高更多吧。通过做实验,把学习的知识利用起来,也对这门课程更加有兴趣了。 组员:叶孝璐 冯焕芬 郑玮仪 庞露露 20xx年4月10号 篇二:DSP实验报告+心得体会 龙 岩 学 院 实 验 报 告 班 级 07电本(1)班 学号 2007050344 姓 名 杨宝辉 同组人 独立 实验日期 2010-5-18 室温 大气压 成 绩 基础实验 一、实验目的二、实验设备 三、实验原理 浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理1.一台装有CCS软件的计算机; 2.DSP实验箱的TMS320F2812主控板; 3.DSP硬件仿真器。1.掌握CCS实验环境的使用; 2.掌握用C语言编写DSP程序的方法。中经常用到的运算;C语言是现代数字信号处理表达的基础语言和通用语言。写实现程序时需要注意两点:(1)浮点数的范围及存储格式;(2)DSP的C语言与ANSI C语言的区别。 四、实验步骤 1.打开CCS 并熟悉其界面; 2.在CCS环境中打开本实验的工程(Example_base.pjt),编译并重建.out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中; 3. 把X0 , Y0 和Z0添加到Watch窗口中作为观察对象(选中变量名,单击鼠标右键,在弹出菜单中选择“Add Watch Window”命令); 4. 选择view->graph->time/frequency…。设置对话框中的参数: 其中“Start Address” 设为“sin_value”,“Acquisition buffer size”和“Display Data size”都设为“100”,并且把“DSP Data Type”设为“32-bit floating point”,设置好后观察信号序列的波形(sin函数,如图); 5. 单击运行; 6. 观察三个变量从初始化到运算结束整个过程中的变化;观察正弦波形从初始化到运算结束整个过程中的变化; 7. 修改输入序列的长度或初始值,重复上述过程。 五、实验心得体会 通过本次实验,加深了我对DSP的认识,使我对DSP实验的操作有了更进一步的理解。基本掌握了CCS实验环境的使用,并能够使用C语言进行简单的DSP程序设计。 从软件的安装到使用软件进行程序设计与仿真,锻炼了自己的动手能力,也遇到了不少的坎坷,例如芯片的选择,不能因为麻烦而省略该步骤,否则将会运行出错。 附录实验程序: #include “math.h” #include “stdio.h” #define N 100 #define pi 3.14159 float sin_value[100]; float X0,Y0,Z0; void main(void) { int i;for(i=0;i担保埃眨樱?仿真器驱动程序的安装以及相应的配置流程也有了一定的了解。仿真环境的配置,到工程的建立,文件的加载,到程序的仿真,与目标板的链接与调试,整个过程在摸索中逐渐熟悉。对已有程序进行修改,重复相应的过程也能实现预定的功能,在短短的时间里能掌握这些基本就差不多了,由于有的需要配置的文件的缺失,无法完成对相应工程的配置设置,所以采用的参考例程里的程序,完成整个过程,这也是一个学习的过程。做项目不是一个人的事,每个成员都应积极的参与,为整个项目的完成提供保障,团队的协作,尽可能的去发挥每个成员的专长,在整个项目的完成都能有所收获,这才应该是做项目的真正目的,加强同学之间的交流,用心付出,共同享受带给大家的成功的喜悦。相关课程的学习只是个基础,在此基础之上对相应的硬件与软件结合,切实去体验一个芯片所能实现的各种功能,去发现所学的知识会在哪些方面用到,是如何应用,有怎样可以改进的方法,更深层次去掌握跟其他相关课程的交叉点,提升学习能力,从近期来看,可以为我们将要开始的毕业设计做准备,当做是一次练手,争取出色完成毕业设计,为四年的大学交出一份完美的答卷。从长远看,为自己以后的工作也在一定程度的奠定基础,学习能力强了,自己就能比较快的接受新知识,更能适应社会对人的要求。 相信团队的力量,同时也要提高个人解决问题的能力,让自己在团队中发挥的作用,将个人融入团队中,才能让自己有更大的收获。好好珍惜每次锻炼学习的机会,不断提升自己,不断超越自己,成就人生美好的梦想! 专业班级:微电子学 姓 名 学 号: [关于dsp心得体会]第二篇:数字信号处理(DSP)课程设计报告
第三篇:基于DSP开关电源
第四篇:dsp作业
第五篇:关于dsp心得体会