(4)外部引脚:ADCSOC引脚 9.模拟输入范围:0~3V;
10.灵活的中断控制机制,允许在每一个或每隔一个转化序列结束(EOS)时产生中断;
11.排序器可工作在“启动/停止”模式,允许多个按时间排序的触发源同步转换;模数转换模块ADC排序器由两个独立的8状态排序器(SEQ1和SEQ2)构成,这两个排序器还可以级联构成一个16状态的排序器(SEQ)。这里的状态是指排序器内能够完成的ADC自动转换通道的个数。单排序器模式(级联构成16状态),双排序器模式(两个互相独立的8状态)。
3.5 调理电路设计
在系统中,调理电路主要负责调节输入的四路数据信号的信号电压,使之符合接下去信号的AD转换模块的电压要求范围,在0~3Vp-p之间。
同时考虑到实际情况,需采集的信号分交流和直流信号两种,因此系统为了能分别对交流信号或直流信号进行采集与处理,系统采用了一个三端口的跳线,作为直流信号和交流信号的采样转换选择装置,并通过这个跳线将调理后的信号输入到DSP中进行最后的采集和处理[22]。
在系统调理中,选用放大器ADOP37作为系统的调理电路的核心,由它对四路的数据信号进行调理。
在系统中选择ADOP37作为调理电路的放大器的理由是它具有如下这些优点[23]: 1.具有较低的噪声 2.频带宽度较宽
3.是一个高精度的运放 4.是个双极型的运放
5.模拟电压在15~-15V之间,输出的采样信号电压可在0~3V之间功耗较低,只有90mw当输入信号是交流信号时,系统的调理电路自动对其进行调理。图3-6所示,有两个变阻电阻,可对系统的调理放大倍数进行调节,增大或减小,在本系统中调理电路的反相增益0.1-10倍之间。
当输入信号是直流信号时,由于可以通过在数据采集时的整流电路进行调节数据电压的范围,所以可以直接跳过调理,而进入DSP中进行最后的采样处理。所以系统中,直接用一根导线将数据信号接入DSP。
系统调理电路如图3-6所示:
- 12 -
+15[max]R5C34.7uFAGNDRF-12.2KRF-220KR34.7KC21uFU12R1-220K635OP371R44.7K+3.3AC41uF100C54.7uFC61uFAGNDC114.7uFJP18ACINA0R1-12.2K7AGNDADCINA0321CON32.2KR6C7AGND4.7uFAGNDDCINA0C81uF100C94.7uF4R2-15[min]C101uFAGND 图3-8 调理电路图
此小节只介绍了十六路采集中的一路,其余十五路调理电路与此路调理电路原理一样,具体到各路设计在附录A的原理图中详细画出。
3.6 小结
本采集系统以TMS320F2812芯片为核心构建了数据采集系统平台,本章主要介绍了TMS320F2812上功能模块的简介,在硬件设计上更为细致的逐一对各硬件功能及连接进行介绍。通过硬件的设计和调试实现对输入信号的数据采集,为第4章进行FFT运算提供了正确的数据。
- 13 -
第4章 TMS320F2812的FFT研究及仿真
傅立叶变换是一种将信号从时域变换到频域的变换形式,是声学、语音、电信和信号处理等领域中一种重要的分析工具。离散傅立叶变换(DFT)是连续傅立叶变换在离散系统中的表示形式,由于DFT的计算量很大,因此在很长一段时间内其应用受到很大的限制[24]。本文采用的TMS320系列DSP芯片的硬件资源使得FFT的实现更为方便,T本章首先简要介绍数据采集的程序设计,然后分析FFT的基本原理最后是FFT在TMS320F2812上的实现及仿真。
4.1 数据采集的程序设计
运用TMS320F2812片内集成的12位A/D转换器进行数据采集。数集模块按照图3-5的主程序流程顺序,配合调用作者编写的相关子函数,完成信号的采集和传输。
开始 启用ADC,启用通用寄存器 初始化DSP 捕获中断程序 SP 关中断 比较中断 是 否 产 生 否 初始化AD 初始化串口 启动ADC 设置中断服务程序入口地址 否 否 是 图4-1 主程序流程图
结束 开中断 捕获引脚是否有变化 判断采集是否 完成 AD转换完成中断 清除各种标志位 数据采集模块进行必要的硬件连接之后,对模块加载规定范围内的电压,促使
- 14 -
DSP芯片开始工作[25]。DSP芯片F2812上电后,主程序首先调用初始化DSP内核的子程序,在该子程序中完成禁止看门狗[15];设定基于锁相环的时钟模式,使得F2812的主频达到150MHz;通过写高速外围时钟定标寄存器和低速外围时钟定标寄存器,完成系统时钟信号的设定;对外围时钟控制寄存器的第0、3、10位写1,使能各外设模块的时钟。紧接着,主程序禁止CPU中断,对中断使能寄存器IER和中断标志寄存器IFR赋值,清除中断。随着主程序调用一系列的初始化程序,完成了相关功能寄存器的参数设定,如初始化PIE中断程序、初始化PIE中断矢量表程序、初始化外部扩展接口程序、初始化片内A/D程序、初始化时间管理器EVA程序。随后,主程序将A/D中断入口地址、捕获中断入口地址装入PIE中断矢量表中,开中断。
4.2 FFT的基本原理 4.2.1 DFT的基本原理
DFT是连续傅立叶变换的离散形式。模拟信号x (t)的连续傅立叶变换(或 称为频谱)可表示为:
? ?jwt(4?1) -?x (t)经抽样后变为x( nT),T为抽样周期。离散信号x (nT)的傅立叶变换可以表示为: 1N ?(4?2)nk X(k)?x(n)wN,k?0,1,...,N?1
n?0
式中,WN?e?j2?/N称为蝶形因子。式(4-2)为N点的DFT。由上式可见,计算所有
X(?)=??(t)edt?X(k)约需要N2次乘法和N2次加法,运算量很大。根据WN蝶形因子的对称性和周期性:
对称性: kN?kW?W周期性: NNkk?N/2 WN??WN
图4-1是N=8时蝶形因子的对称性和周期性。
412w8?w8(4?4)(4?3)614w?w8w?w858138715w8?w808w8?w8
图4-2 WN的对称性和周期性示意图
210w8?w8311w8?w819w8?w8
FFT是DFT的一种快速算法,其基本思想在于将长序列的DFT分解为2个短序列
- 15 -
的DFT。这些序列的DFT可以组合就得到原来的DFT[26]。如N(为偶数)点的DFT先分解为2个N/2点的DFT序列,那么计算N点DFT就只需要N/2点的DFT所需的乘法次数。每个N/2点的DFT又可以分解为N/4点的DFT,从而又使乘法的计算量减少一半。上述方法可以反复使用。最小变换的点数即所谓的“基数”(radix)。基数为2的FFT算法最小变换(或称蝶形)是2点DFT。一般地,对N点FFT,对应于N个输入样值,有N个频域样值与之对应。
4.2.2 频率抽取FFT(DIF)
另一种FFT算法是按频率抽取算法(Decimation-In-Frequency,DIF)FFT,在FFT分级过程中的每一级都要将输出的频域序列分成较小序列来处理,即在每一级都要对输出序列进行抽取[16]。频率抽取FFT算法的特点是每一级处理都是在时域里把输入序列依次按奇、偶一分为二分成较短的序列,还有一种算法是在频域里把序列分解为奇、偶的形式来进行计算,这就是所谓的频率抽取FFT算法。
4.3 FFT在TMS320F2812上的实现
FFT变换是非常流行的一种频域分析方法,它利用蝶形因子的旋转性和周期性的特点,大大减少了运算量,提高了DFT的计算效率[17]。DSP在实现FFT方面具有自身的优势:一方面,针对FFT变换中需要对原始顺序进行码位倒序排列,DSP控制器专门设计了反序间接寻址;另一方面,FFT变换需要进行的蝶形运算,需要指令系统能满足查表以及短时间内的累加相乘的需要,而DSP的间接寻址方法可以实现增(减)1或增(减)一个变址量,并且能在一个周期内完成乘和累加,这些都满足了FFT的运算需求。
FFT的库函数实现
在各个系列的DSP专门设计有可以被C语言直接调用的傅立叶变换的内联库函数,针对C28系列的DSP的FFTLibrary函数库(sprc081)在TI的官方网站可以下载到。该函数库安装后含有复数FFT和实数FFT两种汇编程序和源文件和库文件。利用该库函数可以加快软件开发速度。实际计算时,TI公司为了加快实数FFT,巧妙地使用了压缩算法:对2N点的数做N点复数FFT,最后再劈分还原,得到实数2N点实数FFT计算的真正结果[27]。
RFFT的计算流程:
(1)将fft.lib库文件添加到工程项目中,并包含相应的头文件,在头文件中有关于FFT的一些结构及功能函数的声明。
(2)定义一个结构体RFFT32_fft=RFFT32_128P_DEFAULTS。该结构体为RFFT32类型。
(3)定义一个长整型数据长度为128的数组long DATA[128]用来存放数据,注意这里原始数据和经过FFT运算后的数据是放在同一数组里的,所以在进行FFT运算时要注意数据的保护问题。
(4)将采样后存放在数组中的复数序列进行位反序。 (5)进行FFT运算。
基于C28x的模块包括以下四个部:
(1)把2N 个实数包装成N个复数并且通过位反序方式使N个复数按“混序” 排列。 (2)N点基-2复数FFT运算。 (3)分离函数运算。
- 16 -