产品类别
新闻分类导航
联系我们
厂家传真:022-83719059
企业邮箱:hjzhu0518@21cn.com 工厂所在地址: 天津市南开区华苑产业区鑫茂科技园D2座一层A单元
新闻详情
基于DSP的科氏流量计变送器设计及算法验证
1 引言
科氏流量计(以下简称CMF)是一种广泛应用的直接式质量流量计。目前此类流量计存在着许多问题,诸如:管子的振动会随流体密度的改变而发生频率漂移,给相位差测量带来困难;对噪声极敏感,现场测量精度低于实验室标定精度等。CMF的关键技术是通过变送器精确测量一次仪表信号的时间差。为此,科研机构及商业公司都致力于研制高性能的变送器。
提出了基于FPGA的全相位FFT方案,有效地抑制了频谱泄露,免去了传统FFT算法中频谱校正的烦琐步骤,精度及实时性都有提高,采用FPGA作为处理器,便于电路重构,但增加了成本。提出了基于DSP的过零检测方案,采用反向拉格朗日插值求解过零点,实现较简单,但信号过零点附近扰动较大,在滤波效果不理想时,测量精度较差。提出了基于MCU的方案,MCU没有硬件乘法器和浮点数处理器,实时性较差。提出了基于DSP的希尔伯特变换方案,但希尔伯特变换存在端点效应,未给出解决方案。此外,还有学者提出了基于现代谱分析、计及负频率的DT-FT、数字相关法、自适应滤波器等多种信号处理方法,但多停留在仿真阶段,未在变送器中实现,其实际效果未知。市场上成品的变送器禁止用户访问和修改内部程序,在一定程度上限制了前沿理论向应用的转化。
针对以上问题,设计了支持用户下载和调试程序的变送器,采用了基于改进的自适应格型陷波器(简称为MALNF)和重叠短汉宁窗滑动DTFT(简称为DOHW)的信号处理方法,通过实验,验证了变送器的有效性。
2 变送器功能设计
CMF由一次仪表和变送器组成。一次仪表包括导流管和安装于其上的激振器、拾振器等。激振器驱动导流管以某一频率振动,流体流经振动的导流管时受科氏力作用发生扭曲,反作用于导流管,拾振器检测出形变,输出两路具有时间差的信号。变送器具备以下功能:为激振器提供起振信号;接收拾振器输出信号,据此测量质量流量、密度、体积流量等,并通过反馈修正驱动信号,以维持激振器的稳定;以脉冲信号和电流信号将测量结果远传至其他智能仪表;与控制室上位机通信;实现现场人机交互。
变送器的主要功能模块分为:信号调理模块、运算控制模块、人机交互模块、工程量输出模块、通信模块、驱动模块及电源模块等,如图1所示。信号调理模块将拾振器输出的电压信号进行放大、滤波和模数转换,送入运算控制模块。运算控制模块通过特定算法,计算两路信号的频率及相位差,得到瞬时流量、累计流量、密度、体积流量等信息,并监控其他外设。人机交互模块由键盘和显示屏组成,用户可以选择菜单,输入参数,实时观察运算结果。工程量输出模块将计算结果转换为脉冲信号和电流信号,以供远端控制器和其他智能仪表使用。通信模块与控制室计算机通信,实时上传测量数据,接收控制人员的指令。驱动模块接收拾振器输出信号,通过反馈调节,输出激振器驱动信号,使激振器驱动导流管振动。
图1 功能模块
3 变送器硬件设计
变送器硬件结构如图2。拾振器输出幅值为0.3V,频率约为200Hz的正弦电压信号。为提高测量精度,需要经过幅值放大以适应ADC的量程。而后采用低通滤波器去除高频噪声,防止采样后发生频率混叠。ADC与DSP的通信基于SPI标准,将ADC与DSP的McBSP引脚连接,DSP作为主设备,提供串行时钟和同步信号,发送控制指令,ADC作为从设备,接收指令,将用户指定的数据传输给DSP。
图2 硬件结构
频率信号由DSP的ePWM产生。DSP的GPIO输出数字量,控制DAC,输出电流信号。DSP通过SCI模块与远程计算机通信。键盘和显示屏通过GPIO与DSP交换数据。
4 变送器软件设计
软件流程如图3所示,分为系统初始化、数据采集、信号处理算法、通信、人机交互等几个环节。
图3 软件流程
4.1 数据采集
ADC输出的数据首先进入DSP中McBSP数据接收寄存器DRR1,2,应及时将此数据转移到内存中,以防被新数据覆盖。DMA方式可实现外设与内存间的高速传输,能大大减轻CPU开销。因ADC输出为24位,DSP的最小内存单元为16位,故DMA缓存区设置为6000×32位数组,这样便可边采集数据,边处理之前的数据。以传输左拾振器的数据为例,为其在内存中开辟数组Uint32LS_CH[6000],对DMA控制器配置的关键代码如下:
DmaRegs.CH1.BURST_SIZE.all=1;
DmaRegs.CH1.SRC_BURST_STEP=1;
DmaRegs.CH1.DST_BURST_STEP=-1;
DmaRegs.CH1.TRANSFER_SIZE=49;
DmaRegs.CH1.SRC_TRANSFER_STEP=-1;
DmaRegs.CH1.DST_TRANSFER_STEP=3;
DmaRegs.CH1.SRC_ADDR_SHADOW=(un-signedlong)&McbspaRegs.DRR2.all;
DmaRegs.CH1.SRC_BEG_ADDR_SHADOW=(unsignedlong)&McbspaRegs.DRR2.all;
DmaRegs.CH1.DST_ADDR_SHADOW=(un-signedlong)&LS_CH[0]+1;
DmaRegs.CH1.DST_BEG_ADDR_SHADOW=(unsignedlong)&LS_CH[0]+1;
DmaRegs.CH1.MODE.bit.CHINTE=1;DmaRegs.CH1.MODE.bit.CHINTMODE=1;DmaRegs.CH1.MODE.bit.PERINTSEL=DMA_MREVTA;
DmaRegs.CH1.MODE.bit.CONTINUOUS=1;
DmaRegs.CH1.MODE.bit.PERINTE=1;
DMA的源指针初始指向McBSP_A的数据接收寄存器DRR2(其中存放的是ADC输出数据中的高8位),而目的指针初始指向DMA缓存区中偏移地址为1的内存单元,即LS_CH[0]的高字部分。传输数据过程为2层循环,内层循环为每个脉冲传输2个字,传输完第一个字,源指针指向DRR1,目的指针指向LS_CH[0];外层循环为每个转移传输50个脉冲,每个脉冲过后,源指针指向DRR2,目的指针指向3个偏移量后的内存单元。这样,数据在内存中以便于DSP处理的小端模式存储。McBSP_A每接收24位数据,就产生一次MREVTA中断,从而触发DMA控制器执行一次脉冲,而每完成一次转移又会触发一次DMA中断。在连续运行模式下,影子地址寄存器中的值重新装载到当前地址寄存器,开始新一轮转移。具体过程如图4所示。
图4 DMA运送数据过程
4.2 数据预处理
对采集到的数据预处理,每次取256点进行工程量转换,剔除奇异值。对数据进行筛选:设信号最大幅值为A,采样频率为2kSPS,当信噪比大于5dB时,绝对值位于(2/3)A~A区间内的点数应占总点数的22%~28%,若不满足此条件,直接舍弃。
4.3 频率估计算法实现
频率估计采用MALNF算法,该算法适合处理时变信号,能根据估计误差自动调整滤波器参数,可快速跟踪频率变化,并有效降噪。传统的自适应陷波器在误差曲线收敛至局部最优时便停止跟踪频率,改进的算法解决了这个问题。因算法存在收敛过程,下一时刻的参数须在之前时刻参数的基础上调整,才能尽快收敛,通过递推法可将幂运算化简为乘法运算,计算速度大大加快。为节约内存,采用原址存储。例如,中间变量v[n]与输入信号x[n]之间的传递函数为式(1):
(1)
对于变量υ,仅需3个存储单元。计算υ[n]的流程如图5所示,υ[n]、υ[n-1]与υ[n-2]按箭头方向滑动计算,循环存储在υ[0]、υ[1]、υ[2]3个内存单元中。
图5 计算v[n]的流程
当运算至第n(设n能被3整除)点时,计算υ的关键代码如下:
其中bufIndx代表本次参与运算的点在数组LV_CH中的索引,而smpIndx表示本次调用MALNF算法之前,已计算过的总点数,(smpIndx+bufIndx)表示当前参与计算的点在DMA缓存数组LS_CH中的索引,通过这种表示方法,可保证参与计算的数据的索引具有延续性,以持续跟踪频率的变化。
4.4 相位差估计算法实现
相位差估计采用DOHW法,该法考虑了负频率成分的影响,通过汉宁窗对数据截短,对频谱泄露有良好的抑制作用,利用滑动算法递推计算,增强了算法的实时性。加重叠短汉宁窗后的信号x(n)在ω^(短窗内最后采样时刻的频率估计值)处的DTFT如式(2):
(2)
因C语言不支持复数运算,需将复数分解为实数再运算,如exp(-jωi)拆分成实数cos(ωi)和sin(ωi)。为节约时间,尽量减少重复计算,例如,i每变换一次,需重复计算4次ωi,2次cos(ωi),若把ωi用中间变量eInd代替,cos(ωi)用p代替,只需计算1次ωi和1次cos(ωi)。具体代码如下:
a=bufIndx-WINDOW+i;
l=cos(Pi2*(float)i/WINDOW);
win=(1-l)/2.0;
eInd=-1*(float)i*omega;
p=cos(eInd);
q=sin(eInd);
dtftRe1+=LV_CH[a]*p*win;
dtftIm1+=LV_CH[a]*q*win;
4.5 代码优化
对代码的优化主要遵循以下几点原则:
1)运算尽量化简为加、减和乘法,如:整数次幂改用乘法,而不调用pow函数,整数乘以或除以2的整数次幂时,改用左移或右移运算;
2)使用浮点库rts2800_fpu32.lib;
3)常调用的函数在初始化时复制到RAM中运行,不被其他文件调用的函数尽量声明为内线函数,可减小函数跳转的开销;
4)使用CCS文件级优化:分配变量到寄存器;扩展对内线函数的调用;对返回值无用的函数进行化简;当调用某函数都向同一形参传递同一值时,在函数体内增加参数;
5)“见缝插针”,对某些硬件配置后必须待其稳定后才能启动,可在这个时间内插入其他程序,节约时间;
6)未用到的外设模块,关闭其时钟,节约功耗。
5 实验验证及分析
5.1 实验方案
利用AFG3000系列双通道任意波形/函数发生器产生两路同频不同相的正弦加噪信号模拟拾振器信号,将本文实现的信号处理方法与DFT法对信号进行对比处理。选择精度较高的算法,在科氏流量计实验平台上进行流量测量实验。实验平台由两款流量计串联而成,一款为进口流量计;另一款为国产流量计。将自制变送器连接到一次仪表上,比较国产变送器与自制变送器的精度。
CMF拾振器输出信号的频率通常在测量管固有频率±4Hz邻域内变化,而相位差一般小于4°。变送器参数设置如下:采样频率为2kSPS,每次取256点计算,遗忘因子λ(1)=0.9,λ(n)=0.0099+0.99λ(n-1),去偏置参数ρ(1)=0.9007,ρ(n)=0.009+0.99ρ(n-1),汉宁窗长度为25。具体实验步骤如下:
1)使信号发生器输出幅值为0.3V的连续正弦电压波,频率在[196,204]Hz区间内变化,步长为1Hz,进行频率估计;
2)保持频率为200Hz,使相位差在[0.4,4]°区间变化,步长为0.4°,进行相位差估计;
3)设定DSP定时时间为2s,每次运行算法前启动定时器,运行完算法后停止定时器,测定算法消耗时间;
4)在科氏流量计实验平台上进行流量测量实验,使阀门开度在[20%,100%]区间变化,步长为10%,以高精度进口变送器的示数作为准确值,对比国产变送器和自制变送器的精度。
5.2 实验结果及分析
滤波前后的信号波形如图6所示,当计算约130点后,波形基本稳定。频率估计结果如图6滤波前后的信号波形。
图6 滤波前后的信号波形
如表1和图7,可看出,采用MALNF法进行频率估计的误差基本稳定,至多是DFT法的1/10,而采用DFT法进行频率估计的误差具有周期性,当采样点数为信号周期的整数倍时无频谱泄露,因而误差较小。
表1 频率估计结果
图7 频率估计误差
若要提高DFT法的精度,则需降低采样频率或增加每次参与计算的点数。采样频率太低会导致频谱混叠,而增加每次参与计算的点数,势必会延长计算时间。由于DFT法求出的频率是一段时间内的平均值,参与运算的点数越多,算法对频率的变化越不敏感。DFT法在DSP上实现时,采用C28FPULibrary的RFFT_32函数,要求在内存中给输入数组分配2倍于其大小的空间。因此增加同样的输入点数,DFT法对内存的消耗是MALNF法的2倍,通过增加点数来提高频率分辨率的效果远远抵不过增加内存消耗带来的负面影响。
相位差估计结果如表2和图8,可看出,采用DOWH法估计相位差的误差约是DFT法的1/5,这是因为两种相位差估计方法都需要利用频率值,而采用DFT法估计的频率误差原本就比较大,该误差会累积到相位差中,DOWH法考虑了负频率的影响,汉宁窗比矩形窗具有更小的边瓣和更快的边瓣谱峰渐进衰减速度,能更有效地抑制频谱泄露。
表2 相位差估计结果
图8 相位差估计误差
对算法耗时进行测量,每次参与计算的点数为256时,DFT法耗时0.21ms,而本文实现的算法耗时0.96ms。这是由于DFT法可以使用FFT算法,将可能用到的三角函数值事先计算好保存在内存中,后续运算用到这些数值时直接查表,避免了重复计算,而本文实现的算法每次运行时都要多次调用三角函数,这就消耗了较多时间。
流量测量结果如表3和图9,可以看出,自制变送器相比实验平台上的国产变送器精度有所提高,相对误差随着阀门开度的增加而减小,这是因为阀门开度较小时,流体没有充满管道,属于气液两相流,干扰较大,因而误差也较大,而当流体充满导流管时,误差很小。根据《原油动态计量一般原则》,流量计精度不得低于0.2%,自制变送器的精度满足这个要求。
表3 流量测量结果
图9 流量测量误差
6 结论
本文进行了以DSP为核心的科氏流量计变送器设计,实现了一种基于改进的格型自适应滤波器和重叠短汉宁窗滑动DTFT的信号处理方法,并进行了实验验证。
实验结果表明:上述方法的精度优于DFT法,不受非整周期采样的影响,算法易于实现;自制变送器相比某款国产流量计,精度有所提高,符合国家标准,可以实时准确地测量流体的瞬时质量流量。