• 43
•
快速傅里叶变换(FFT )采用时间抽取或频率抽取方式大大提高了傅里叶变换的运算效率。但在旋转变压器解码和电能质量分析等应用领域,由于信号采样率很高,同时这些应用中FFT 算法的运算量很大,在DSP 芯片中很难实现实时处理。本文介绍一种采用TMS320F28335DSP 实现高速信号采集并实时进行FFT 运算的方法,为基于FFT 的大运算量算法的实时应用提供一种解决方案。
1 系统构成
以采用DSP 解码的旋转变压器解码系统为例,其系统结构框图如图1所示。从图1可以看出,旋转变压器的三路信号V c 、V s 和V e 通过信号调理电路转换为满足DSP 内置AD 端口需要的电压信号V 1~V 3
有房产证可以贷款吗。
图1 旋转变压器解码系统框图
一般上述三路信号的频率为5KHz ~10KHz ,需要AD 的采样频率为50KHz ~200KHz 。以10KHz 信号频率和100KHz 采样频率为例,若在分析数据过程中截取10周期数据,则待分析信号的时长为0.1ms 。在上述条件下,若要做到实时运算,则芯片要在0.1ms 内要处理完数据采样、算法运算和其他数据通信等事务。如果每次数据采样都需要CPU 参与,而FFT 没有高效算法的情况下,一般的DSP 芯片很难做到实时性。TI 公司的TMS320F28335DSP 芯片设计了直接存储器访问技术(DMA ),AD 采样的数据直接传送到指定的数据缓冲区,不需要CPU 在每个采样周期都参与数据传输,只需在完成一定量的数据采集后,才通过中断通知CPU 执行相关操作。另外,该芯片的软件开发资源非常丰富,
包括开发环境CCS 和资源包controlSUITE ,为高数据采样率和大运算量的实时应用提供了支持。
2 TMS320F28335的DMA技术
2.1 DMA工作原理
DMA 提供了外设和存储器之间的一种直接硬件传输数据的方式,可以大大减少CPU 的开销。为了简要描述DMA 的工作原理,以ADC 采样结果传输到RAM 的过程为例,描述TMS320F28335的DMA 如何直接将AD 采样的数据传输到指定的RAM 中。
图2中DMA 的工作首先要分配好源地址和目的地址,在本例中,源地址就是AD 采样结果寄存器,而目的地址就是存放采样结果的数据缓冲区RAM 。DSP 传输数据要用到数据总线,而这些总线都是共享的,也就是说只有在传输数据时才能占用。而DMA 的传输触发是通过中断实现的,即AD 一旦完成了采样就发出中断信号,通知DMA 将结果寄存器的数据取走,这时DMA 就要占用数据总线,传完数据
就会自动释放总线。而当数据缓冲区填满的新的数据后,可以设置DMA 发出中断,通知CPU 对缓冲区的数据进行处理,这样,CPU 只需在DMA 中断时才提取数据,节省了大量的CPU中国立冬吃什么食物
时间。
图2 TMS320F28335DMA原理
2.2 DMA软件实现
根据上述DMA 原理,使用DMA 需要对相关寄存器做设置,在初始化程序中,主要利用如下几个C 语
言函数:(1)DMACH1AddrConfig( ):该函数用来配置DMA 的源地址和目的地址。(2)DMACH1BurstConfig( ):该函数用于配置每帧DMA 传输的数据量,以及每次传输源地址和目标地址改变的步长。(3)DMACH1TransferConfig( ):该函数用于配置传输帧数量,以及帧地址步长。(4)DMACH1Wrap-Config( ):该函数用于定义进行循环传输,以及相应的源地址和目的地址与步长。(5)DMACH1ModeConfig( ):这个函数有10个参数需要配置,关系到DMA 的中断使能和工作模式等。每个参数的具体含义需结合数据手册中的DMA 工作流程加以理解,限于篇幅,不再赘述。穿衣搭配图片
在DMA 完成DMACH1TransferConfig( )函数定义的数据帧后,就需要产生中断,执行interrupt void local_DINTCH1_ISR( )中断函数,在该函数中执行FFT 等算法程序。
3 快速实现FFT
剑侠情缘3职业介绍FFT 是很多应用中的算法。在DSP 中实现FFT 有两种方
采用DSP实现信号高速采集与实时FFT运算
湖南工业职业技术学院电气工程学院 贺力克
湖南工业大学交通工程学院 易吉良
• 44
•
案,一种是直接根据FFT 的定义编写程序;另一种是利用TI 的FFT 库函数实现。作者对两种方案进行了测试,发现库函数有更高的运算效率,下面主要介绍库函数的应用方法。3.1 库函数的使用
库函数利用压缩算法实现FFT ,使得计算效率得到了很大提高。其实整个库函数除了FFT 外,还有求IFFT 和求幅值等函数。库函数的源码在controlSUITE 目录下可以到,基本都是采用汇编语言编写。库函数的详细的使用方法可以从TI 公司下载文档C28x-FPU-LIB-UG.pdf 进行了解。这里主要介绍在使
存储单元,对齐的意思是该数据段的起始地址应保证最低的N 位为0,N 要满足:2N≥512。这样CCS 给FFTRAML3s 分配的地址最低9位就是0。这样做的目的是满足DSP 芯片的高效寻址方式,以使FFT 算法快速执行。
4 测试结果kris吴亦凡女友
采用T M S 320F 28335开发板进行测试,系统时钟频率位150MHz ,利用DMA 技术高速采样,采样频率100kHz 。利用库函数计算128点FFT ,测得需要机器周期为5926,如图3所示。可以算出做128点的FFT 时间为:5926×6.67ns=0.039766ms ,而128数据时间为0.128ms ,因此,在上述条件下能够实现FFT 的实时运算。
综上所述,利用TMS320F28335的DMA 技术和FFT 库函数,能够实现数据的高频采集和FFT 算法的快速运算,满足对信号采集和频谱分析的实时性要求极高的应用场合。
课题来源:湖南省自然科学科教联合基金(2018JJ5017)。作者简介:
贺力克(1966—),女,湖南人,硕士,副教授,主要研究方向:自动控制。
易吉良(1972—),男,湖南人,博士,副教授,主要研究方向:电能质量分析与DSP
技术。
图3 CCS调试界面
用库函数过程中需要注意一些细节,如输入数据是否对齐、处理结果存放在哪些缓冲区等。
使用库函数只要在CCS 工程中添加C28x_FPU_Lib.lib 库文件和FPU.h 头文件,然后就可以直接调用FFT 相关函数,包括:(1)CFFT_f32( ):该函数用于计算FFT ,注意该函数的参数是复数格式,在DSP 中需要用两个单元分别存放实部和虚部,且实部在前,虚部在后。(2)ICFFT_f32( ):该函数用于计算IFFT ,其参数要求与CFFT_f32( )一样。(3)abs_SP_CV_2( ):该函数用于求复数的幅值,三个参数分别是存放幅值结果,输入的复数和数据长度。3.2 cmd文件的处理
在使用库函数求FFT 时对数据存放的存储单元有特殊要求,即对齐某个地址,这就需要在存储器分配文件*.cmd 中对相应数据变量进行说明。*.cmd 文件中用到两条分配存储单元,即指令MEMORY 和SECTIONS 。其中MEMORY 用于说明系统中有哪些可用的存储器,而SECTIONS 用于将定义的变量分配到可用的存储器中。为了满足FFT 库函数的要求,在SECTIONS 指令中需要用到如下说明:
FFTRAML3s:>RAML3,PAGE=1,ALIGN(512)
该语句的含义是将FFTRAML3s 数据段定位到数据空间PAGE1的RAML3存储器中,当然PAGE1和RAML3是在MEMORY 指令中定义好的。同时可以注意到,该指令后面还有ALIGN(512)的说明,它是保证FFTRAML3s 对齐512个共产儿童团团歌
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论