TMS320C54x_DSP的函数发生器的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

广东石油化工学院DSP综合实验报告课程名称:DSP系统开发与设计实验题目:函数信号发生器学号:姓名:班级:指导老师:实验日期:2012-6-11至2012-6-15基于TMS320C54xDSP的函数发生器的设计一、设计目的:1、了解数字波形产生的原理;2、学习用DSP产生各种波形的基本方法和步骤;3、掌握DSP与D/A转换器接口的使用。二、设计设备计算机、DSP仿真器、ZYE1801B实验箱、20M示波器三、设计原理波形产生是DSP的重要应用之一。而正弦信号发生器的设计则是波形产生应用的一个重要方面,它在通信领域有着广泛的应用。通常有两种方法可以产生正弦波,分别为查表法和泰勒级数展开法。查表法是通过查表的方式来实现正弦波,主要用于对精度要求不很高的场合。泰勒级数展开法是根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。本次主要用泰勒级数展开法来实现正弦波信号。产生正弦波的算法正弦函数和余弦函数可以展开成泰勒级数,其表达式:取泰勒级数的前5项,得近似计算式:!9!7!5!3)sin(9753xxxxxx!8!6!4!21)cos(8642xxxxx))))((((981761541321!9!7!5!3)sin(22229753xxxxxxxxxxx)))(((87165143121!8!6!4!21)cos(22228642xxxxxxxxx递推公式:sin(nx)=2cos(x)sin[(n-1)x]-sin[(n-2)x]cos(nx)=2cos(x)sin[(n-1)x]-cos[(n-2)x]由递推公式可以看出,在计算正弦和余弦值时,需要已知cos(x)、sin(n-1)x、sin(n-2)x和cos(n-2)x。为了减少使用的存储器,可以采用正弦信号的对称性,复制90~180度的正弦值和180~360度的正弦值。余弦信号的产生同样可以采用多种方法产生。一是采用公式计算得到,二是采用正弦信号变换得到。方波信号产生可以通过轮流输出两个不同大小的数值通过A/D转换得到。四、设计内容本设计题目以TMS320C54xDSP为目标器件,设计并实现基于迭代法的“正弦序列生成”算法及其DSP程序。设计步骤:1、熟悉正弦信号发生器的算法以及在DSP系统的实现2、熟悉A/D转换的原理及实验箱的链接3、掌握A/D转换的程序的编写4、编写DSP的正弦信号发生器的程序5、编写定时程序产生100HZ、1KHZ、10KHZ的正弦、余弦以及100K、1M的方波信号,每种类型的波形单周期360个点。6、编写按键程序,控制输出。用三个拨码开关对DSP进行输入,输入的0~7对应的8种不同的波形。7、用示波器观察各个波形8、分析波形失真的原因。五、实验步骤1.熟悉本实验原理。2.阅读本实验样例程序。3.依次连接主板上的PC10、PC11、TP32到PC15、PC16、GND;依次连接主板上的PC13、PC14、M58到插板上的DJ0、DJ1、S12。4.将计算机与ZYE1801C实验箱通过并口P1相连。5.运行CCS软件客户软件\DSP程序\test19,通过插板上的JP1,JP2,JP3来选择不同的波形。6.用示波器观察DA0的输出波形。六、设计的硬件结构框图七、实验代码先计算0~45°(间隔为0.5°)的sin和cos值,在利用sin2a=2sina*cosa求出sin值(间隔为1°)。然后,通过复制,获得0~359°的正弦值。重复向PA口输出,便可得到正弦波。3位数字量输入12位数字量输出模拟量输出DSP芯片D/A转换器.titlebxfsq.asm.mmregs.globalmain.defstart.refd_xs,d_sinx,d_xc,d_cosx,sinx,cosxsin_x:.usectsin_x,360cos_x:.usectcos_x,360fangbo:.usectfangbo,360STACK:.usectSTACK,10Hk_theta:.set286TIM0.set0024HPRD0.set0025HTCR0.set0026HPA.set0100H.textstart:;产生正弦波数据STMk_theta,AR0STM#0,AR1STM#sin_x,AR6STM#90,BRCRPTBloop1-1LDMAR1,ALD#d_xs,DPSTLA,@d_xsSTLA,@d_xcCALLsinxCALLcosxLD#d_sinx,DPLD@d_sinx,16,AMPYA@d_cosxSTHB,1,*AR6+MAR*AR1+0loop1:STM#sin_x+89,AR7STM#88,BRCRPTBloop2-1LD*AR7-,ASTLA,*AR6+loop2:STM#179,BRCSTM#sin_x,AR7RPTBloop3-1LD*AR7+,ANEGASTLA,*AR6+loop3:STM#sin_x+89,AR6STM#cos_x,AR7STM#269,BRCRPTBlcos-1LD*AR6+,ASTLA,*AR7+lcos:STM#sin_x,AR6STM#89,BRCRPTBloop4-1LD*AR6+,ASTLA,*AR7+;产生方波数据loop4:STM#fangbo,AR6STM#179,BRCRPTBlfangbo-1LD#7FFFH,ASTLA,*AR6+lfangbo:STM#179,BRCRPTBmain-1LD#0H,ASTLA,*AR6+main:STM#0,SWWSRSTM#STACK+10H,SPSTM#3FA0H,PMSTSTM#0010H,TCR0STM#0260H,TCR0STM#0008H,IFRSTM#0008H,IMRRSBXINTMPORTRPA,*AR2LD*AR2,AAND#01B,ABCfangbo_1m,ANEQLD*AR2,AAND#010B,ABCfangbo_100k,ANEQLD*AR2,AAND#0100B,ABCsin_10k,ANEQLD*AR2,AAND#01000B,ABCsin_1k,ANEQLD*AR2,AAND#010000B,ABCsin_100,ANEQLD*AR2,AAND#0100000B,ABCcos_10k,ANEQLD*AR2,AAND#01000000B,ABCcos_1k,ANEQLD*AR2,AAND#10000000B,ABCcos_100,ANEQend:Bendfangbo_1m:STM#10,TIM0STM#10,PRD0STM#fangbo,AR3Bmainfangbo_100k:STM#110,TIM0STM#110,PRD0STM#fangbo,AR3Bmainsin_10k:STM#2,TIM0STM#2,PRD0STM#sin_x,AR3Bmainsin_1k:STM#30,TIM0STM#30,PRD0STM#sin_x,AR3Bmainsin_100:STM#306,TIM0STM#306,PRD0STM#sin_x,AR3Bmaincos_10k:STM#2,TIM0STM#2,PRD0STM#sin_x,AR3Bmaincos_1k:STM#30,TIM0STM#30,PRD0STM#sin_x,AR3Bmaincos_100:STM#306,TIM0STM#306,PRD0STM#sin_x,AR3Bmain;定时器中断输出TINT_T0:STM#1,AR0STM#360,BKloop:PORTW*AR3+0%,PABloopRETEsinx:.defd_xs,d_sinx.datatable_s:.word01c7h;c1=1/(8*9).word030bh;c2=1/(6*7).word0666h;c3=1/(4*5).word1556h;c4=1/(2*3)coef_s:.usectcoef_s,4d_xs:.usectsin_vars,1squr_xs:.usectsin_vars,1temp_s:.usectsin_vars,1d_sinx:.usectsin_vars,1l_s:.usectsin_vars,1.textSSBXFRCTSTM#coef_s,AR5RPT#3MVPD#table_s,*AR5+STM#coef_s,AR3STM#d_xs,AR2STM#l_s,AR4ST#7FFFH,l_sSQUR*AR2+,ASTA,*AR2||LD*AR4,BMASR*AR2+,*AR3+,B,AMPYAASTHA,*AR2MASR*AR2-,*AR3+,B,AMPYA*AR2+STB,*AR2||LD*AR4,BMASR*AR2-,*AR3+,B,AMPYA*AR2+STB,*AR2||LD*AR4,BMASR*AR2-,*AR3+,B,AMPYAd_xsSTHB,d_sinxRETcosx:.defd_xc,d_cosx.datatable_c.word0249h;c1=1/(8*7).word0444h;c2=1/(6*5).word0aabh;c3=1/(4*3).word4000h;c4=1/(2*1)coef_c.usectcoef_c,4d_xc.usectcos_vars,1squr_xc.usectcos_vars,1temp_c.usectcos_vars,1d_cosx.usectcos_vars,1l_c.usectcos_vars,1.textSSBXFRCTSTM#coef_c,AR5RPT#3MVPD#table_c,*AR5+STM#coef_c,ar3STM#d_xc,AR2STM#l_c,AR4ST#7FFFH,l_cSQUR*AR2+,ASTA,*AR2||LD*AR4,BMASR*AR2+,*AR3+,B,AMPYAASTHA,*AR2MASR*AR2-,*AR3+,B,AMPYA*AR2+STB,*AR2||LD*AR4,BMASR*AR2-,*AR3+,B,ASFTAA,-1,ANEGAMPYA*AR2+MAR*AR2+RETDADD*AR4,16,BSTHB,*AR2RET.sect.vectors.align0x80RESET:BDmainSTM#200,SPnmi:RETENOPNOPNOPsint17.space4*16sint18.space4*16sint19.space4*16sint20.space4*16sint21.space4*16sint22.space4*16sint23.space4*16sint24.space4*16sint25.space4*16sint26.space4*16sint27.space4*16sint28.space4*16sint29.space4*16sint30.space4*16int0:RETENOPNOPNOPint1:RETENOPNOPNOPint2:RETENOPNOPNOPtint:BTINT_T0NOPNOPNOPrint0:RETENOPNOPNOPxint0:RETENOPNOPNOPrint1:RETENOPNOPNOPxint1:RETENOPNOPNOPint3:RETENOPNOPNOP.end2、cmd文件代码如下:说明系统中有哪些可用存储器、程序段、堆栈及复位向量和中断向量等安排在什么地方。其中MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系统中所包含的各种形式的存储器,以及它们占据的地址范围;SECTIONS段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规定输出段在存储器中的位置等。bxfsq.obj-obxfsq.out-mbxfsq.map-estartMEMORY{PAGE0:EPROM:origin=0E000h,length=1000hVECS:origin=0FF80h,l

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功