1、本实验采用 ICETEK-CT控R 制板。5TI的 DSP 开发集成环境 Code Composer Studio。本实验采用 CCS2.21 for C5000。6仿真器驱动程序。7实验程序及相关文档。三 实验设备通用计算机一台, ICETEK-VC5509-ED实U验 箱。四 实验原理1.将从信号源获取的模拟信号经过 A/D 转换后,再进行 FFT变换,然后输出。2.TMS320VC5509A 模 数 转 换 模 块 特 性 : 内置采样和保持的 10 位模数转换模块 ADC,最小转换时间为 500ns,最大采样率 为 21.5kHz 。 有 2 个 模 拟 输 入 通 道 ( AIN0A
2、IN1 ) 。 采样和保持获取时间窗口有单独的预定标控制。3.模 数 转 换 工 作 过 程 : 模数转换模块接到启动转换信号后,开始转换第一个通道的数据。 经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存。 转换结束,设置标志。 等待下一个启动信号。4.模 数 转 换 的 程 序 控 制 : 模数转换相对于计算机来说是一个较为缓慢的过程。 一般采用中断方式启动转换或保存结果,这样在 CPU 忙于其他工作时可以少占用处理时间。设 计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需 要选择适当的触发转换的手段,也要能及时地保存结果。由于 TMS320VC5509A DS
3、P芯片内的 A/D 转换精度是 10 位的,转换结果的低10 位为所需数值,所以在保留时应注意将结果的高 6 位去除 ,取出低 10 位 有效数字。5.FFT 的 原 理 和 参 数 生 成 公 式FFT 并不是一种新的变换,它是离散傅立叶变换( DFT)的一种快速算法。由于我 们在计算 DFT 时一次复数乘法需用四次实数乘法和二次实数加法; 一次复数加法 则需二次实数加法。每运算一个 X( k)需要 4N 次复数乘法及 2N+2(N-1) =2( 2N-1)次实数加法。所以整个 DFT 运算总共需要 4N2 次实数乘法和 N*2(2N- 1=2N(2N-1次实数加法。如此一来,计算时乘法次数
4、和加法次数都是和 N2 成正比 的,当 N很大时,运算量是可观的,因而需要改进对 DFT 的算法减少运算速度。我们先设序列长度为 N=2L,L 为整数。将 N=2L 的序列 x(n(n=0,1,, N-1,按 N 的奇偶分成两组,也就是说我们将一个 N 点的 DFT 分解成两个 N/2 点的 DFT,他 们 又 重 新 组 合 成 一 个 如 下 式 所 表 达 的 N 点 DFT :一般来说,输入被假定为连续的。当输入为纯粹的实数的时候,我们就可以利用左 右 对 称 的 特 性 更 好 的 计 算 DFT我们称这样的 RFFT 优化算法是包装算法:首先 2N 点实数的连续输入称为“进 包”。
5、其次 N点的 FFT 被连续运行。最后作为结果产生的 N 点的合成输出是“打 开 ” 成 为 最 初 的 与 DFT 相 符 合 的 2N 点 输 入 。使用这一思想,我们可以划分 FFT 的大小,它有一半花费在包装输入 O( N)的操 作和打开输出上。这样的 RFFT 算法和一般的 FFT 算法同样迅速,计算速度几乎都 达到了两次 DFT的连续输入。6.液晶显示屏的结构实验箱左上方有一个长方形液晶屏,由 64128 个点阵构成。显示时,每 个点阵对应一个 2 进制数,数为 0,显示一点;为 1,则不显示。通过不同位置 显示与不显示,可以显示数字、图形、汉字等。每个点阵对应的 2 进制数, 6
6、4128个点阵,则对应 64128bit 空间1)将液晶分为两块:左半屏和右半屏,每块 64642)每列 64 个点阵, 8 个点阵为一部分,分为 8 部分,用一个 byte 控制一个 部分,这个 byte 中哪个 bit 为 1,则显示;为 0,则不显示。3)每个半屏分为 8 页, 64 列。4)通过向某行的相邻 8 列输入显码,则可以显示数字五总体设计方案1.【系统总体设计思路】 本系统实现对输入的方波、正弦波、三角波等信号采集,经过 AD 转换后,对这些数字信号处理,最后通过 LCD 显示出来,达到基 本的示波器的效果。总体设计思路如图所示。系统包括信号源、 控制器模块 TMS320VC
7、5509A 、信号检测采集模块、显示模块四部 分。1.2【功能描述】 通过信号源输入的方波、正弦波、三角波等信号采集,经过AD 转换后,对这些数字信号处理,最后通过 LCD 显示出来,达 到基本的示波器的效果。之后,通过对信号进行 FFT 变换,将其 显示出来,同时显示 波形的最大值 /峰峰值,以及 XY 坐标网格。1.3【模块操作】AD采集部分 :1设置通道 0 信号源类型为正弦波,采集通道 0 的 128 个数据,并用 Graph 图形窗口观察。2对采集到的 128 个数据进行 FFT,得到其幅频特性数据,并用 Graph 图形 窗口观察。(额外验证的内容)3分别改变波形类型为:三角波和方
8、波,重复步骤 1,2。4 设置波形类型为正弦波,改变波形的频率和振幅,重复步骤 1、2,至少实验3 个不同频率和 3 个不同振幅。显示部分 :1将采集到的 128 列数据进行处理,进行运算。2将二维数组显示在 64*128 的 LCD 上,显码数组。1.4 【结构框图】系统由 TMS320VC5509为A CPU的控制器、 LCD显示模块、信号源输入、 AD 采集 转换等模块构成。六 实验结论1.三角波2.正弦波七相关代码AD 采集命令:void InitADC(;void wait(unsigned int cycles;void InitADC(ADCCLKCTL=0x23; / 4MHz
9、 ADCLKADCCLKDIV=0x4f00;void wait( unsigned int cyclesint i;for ( i = 0 ; i cycles ; i+ LCD 显示左半屏:LCD 是 64*128 的点阵,通过对 LCD 显示阵列的分析,由于输入信号的幅度范围 是 01024,故用 1024/16,得到 1 个点阵代表 64个幅度值,记为 buffer,然后用 buffer%8,得到该列的页数,而用 buffer/8 得到余数就是在页数上的具体点阵位buffer=nADCj/16; m=buffer/8;n=buffer%8;LCD 显示右半屏:对数据个数进行判断,若个数
10、大于等于 64,则设置起始列的位置为 CTRLCDCMDR=LCDCMDVERADDRESS+j-64;选择显示 FFT 的频谱图 将采集到的信号进行 FFT 变换后,得到 FFT 频谱图 void InitForFFT(for ( i=0;i sin_tabi=sin(PI*2*i/SAMPLENUMBER; cos_tabi=cos(PI*2*i/SAMPLENUMBER;void FFT(float dataRSAMPLENUMBER,float dataISAMPLENUMBER 得到的 FFT 频谱图,送入 LCD 显示,显示方法同 ADC-LCD 显示。 3.3程序代码:#incl
11、ude myapp.hICETEK-VC5509-EDU.hscancode.h#include#define PI 3.1415926 #define SAMPLENUMBER 128 #define LCDDELAY 1 void InitForFFT(; void lcd(;/int INPUTSAMPLENUMBER;int DATASAMPLENUMBER;float fWaveRSAMPLENUMBER,fWaveISAMPLENUMBER,wSAMPLENUMBER;float sin_tabSAMPLENUMBER,cos_tabSAMPLENUMBER; void InitF
12、orFFT(;void FFT(float dataRSAMPLENUMBER,float dataISAMPLENUMBER; void InitADC(;unsigned int nADC128;main(int j; unsigned int uWork;InitForFFT(; CLK_init(;SDRAM_init(;InitCTR(;/ CloseCTR(; SetDSPPLL(SPEED144MHz;TurnOnLCD(; / 打开显示屏LCDCLS(; / 清除显示内存while ( 1/ADfor ( j=0;j128;j+ /采集 128个数据ADCCTL=0x8000;
13、 / 启动 AD 转换,通道 0douWork=ADCDATA; while ( uWork&0x8000 ; nADCj=uWork&0x0fff;lcd(; fWaveRi=nADCi;fWaveIi=0.0f;wi=0.0f; FFT(fWaveR,fWaveI; /对采集到的数据进行 FFT 处理 for ( i=0;DATAi=wi;asm( nop;void FFT(float dataRSAMPLENUMBER,float dataISAMPLENUMBER /FFT 处理函数int x0,x1,x2,x3,x4,x5,x6,xx;int i,j,k,b,p,L;float TR
14、,TI,temp;x0=x1=x2=x3=x4=x5=x6=0;x0=i&0x01; x1=(i/2& x2=(i/4& x3=(i/8&x4=(i/16& x5=(i/32& x6=(i/64&xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6; dataIxx=dataRi;dataRi=dataIi; dataIi=0;for ( L=1;Lb=b*2; i-; /* b= 2(L-1 */=b-1;j+ /* for (2 */p=1; i=7-L;0 /* p=pow(2,7-L*j; */p=p*2;p=p*j;for ( k=j;kk=k+2*b /*
15、for (3 */TR=dataRk; TI=dataIk; temp=dataRk+b; dataRk=dataRk+dataRk+b*cos_tabp+dataIk+b*sin_tabp; dataIk=dataIk-dataRk+b*sin_tabp+dataIk+b*cos_tabp; dataRk+b=TR-dataRk+b*cos_tabp-dataIk+b*sin_tabp; dataIk+b=TI+temp*sin_tabp-dataIk+b*cos_tabp; /* END for (3 */ /* END for (2 */ /* END for (1 */wi=sqrt(
16、dataRi*dataRi+dataIi*dataIi;void InitForFFT(sin_tabi=sin(PI*2*i/SAMPLENUMBER;void lcd( /LCD 显示函数int j,buffer,m,n;设置显示起始行CTRLCDCMDR=LCDCMDSTARTLINE; /Delay(LCDDELAY;CTRLCDCR=0;for (j=0;j+ / 对 128 列数据进行显示 / 得到以 16 压缩后的信号幅值 m=buffer/8; / 得到页数 n=buffer%8; / 余数为具体页数内的点阵位置 if(jCTRLCDCMDR=LCDCMDVERADDRESS+
17、j; / 起始列 =0 Delay(LCDDELAY; CTRLCDCMDR=LCDCMDPAGE+7-m; / 设置操作页 =0 Delay(LCDDELAY;CTRLCDLCR=ledkey0n; / 页内的点阵位置 Delay(LCDDELAY;Delay(512;elseCTRLCDCMDR=LCDCMDVERADDRESS+j-64;CTRLCDCMDR=LCDCMDPAGE+7-m;CTRLCDRCR=ledkey0n;void LCDCLS( / 刷新清屏函数int i,j;LCDCMD(LCDCMDSTARTLINE;i8;i+LCDCMD(LCDCMDPAGE+i;LCDCMD(LCDCMDVERADDRESS;64;j+LCDWriteLeft(0; / 左半屏刷新Delay(1; LCDCMD(LCDCMDVERADDRESS; for ( j=0;LCDWriteRight(0; / 右半屏刷新
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2