[导读] 涡街流量计输出的频率信号能够在较宽流量范围内保持良好的重复性,但其仪表系数只能在较窄的范围内保持恒定,从而制约了其测量范围。本文提出一种基于CPLD的仪表系数非线性修正方法,即采用三次样条插值法对流量-仪表系数曲线进行逼近,通过优化CPLD查找表实现了对仪表系数的非线性修正。实验表明,该方法在保证精度的前提下可以有效地扩展量程。对于存在仪表系数非线性问题的其他流量仪表也同样适用,易于推广。
1 引言
涡街、涡轮等频率信号输出的流量传感器在较宽流量范围内都能获得具有良好重复性的输出信号。理想情况下其输出信号与瞬时流量成正比,而实际上其仪表系数只在相对较小的范围内能够基本保持恒定[1]。传统的方法是将平均仪表系数作为传感器仪表系数的唯一值来使用,这样导致流量计在保证测量精度前提下的测量范围较窄。基于此,文章针对存在这一问题的涡街流量计进行研究,以实现保证精度扩展测量范围的目的。
涡街流量计在正常流量范围内,其仪表系数基本为一常数,但在测量小流量时却表现出明显的非线性,制约了涡街流量计测量范围和测量精度。普通模拟涡街流量计确保仪表系数线性度在1%以内时的量程比只能达到10:1,远低于理论量程100:1[2]。随着工业技术的发展和进步,对于宽量程高精度涡街流量计的需求日渐迫切,各种仪表系数非线性修正方法和应用相继出现。
最早出现的是采用硬件电路进行修正[3]。在传感器前置放大电路中增加一些硬件电路,人为掺加(或减少)一个固定频率信号,从而使传感器实际输出信号频率得到修正,改善其仪表系数的非线性程度。此方法的缺点是只适用于单调上升(或下降)的曲线形状,而且硬件补偿灵活性差、补偿精度不高。但由于是硬件电路设计,保证了良好的稳定性和可靠性。随着电子技术特别是单片机技术的迅猛发展,这一问题得到了更好的解决。根据实际标定的结果可以回归出仪表系数与频率的函数表达式,将表达式存入单片机系统的程序存储器中。测量时测出传感器信号频率,根据函数表达式计算出此时的仪表系数来进行计算,从而达到对仪表系数非线性的修正[4]。这种方法操作简单,而且通用性好,补偿精度更高、更灵活。但由于该方法是靠软件补偿来实现,编程时出现的微小纰漏与应用现场复杂情况造成的不确定性,都易造成程序“跑飞”或者死机的现象,造成使用上的不稳定。近年来,随着FPGA(FieldProgrammableGateArray)与CPLD(ComplexProgrammableLogicDevice)技术的飞速发展及其广泛应用,因其具有高度的稳定性和可靠性,设计简单灵活等优点[5],本文提出了基于CPLD硬件结构实现涡街流量计仪表系数非线性修正的方法,该方法综合了上述两种方法的优点,具有良好的实用价值。①
2 修正算法比较
实现非线性修正的前提是需要得到涡街流量计流量Q与仪表系数K的关系曲线,再将超出线性度范围的仪表系数修正到合理的范围内。文章对三种常用的曲线逼近方法:线性插值法、三次样条插值法和最小二乘法进行了比较,具体方法介绍见文献[6]。
对于涡街流量计来说,由于在小流量时普遍存在着K-Q之间的非线性,即使在线性度范围内,K也很难保证为常数,这给用数学公式描述两者的之间关系带来很大困难,插值(或曲线拟和)方法能很好地解决这一问题。根据速度式流量计检定规程[7],可以将检定点作为插值函数的结点(或曲线拟和的观测点),即各检定流量点Qi(i=0,1,…,n),各结点(或观测点)对应的函数值为Ki(i=0,1,…,n),即各流量点对应的仪表系数。根据这些列表函数,可以利用插值多项式(或拟和多项式)对其他流量点的仪表系数进行逼近。
为了比较三种方法对涡街流量计K-Q关系描述的准确性,在标准水流量装置上对DN25涡街流量计进行实验,其流量测量范围为1~11m3/h,受装置条件的限制,最大流量只能做到9.3m3/h。实验中发现,当流量小于1m3/h时,虽然仪表的线性度已超出1%,但其重复性依然很好,这给仪表系数的非线性修正奠定了良好基础,而修正的前提是要得到K-Q关系曲线。因此,对表1中流量点进行了实验。
其中,涡街流量计平均仪表系数K:
(1)
式中:(Ki)max——各检定流量点Qi的仪表系数Ki中最大值;(Ki)min——各检定流量点Qi的仪表系数Ki中最小值。
线性度EL:
(2)
重复性Er:各检定点重复性的最大值:
(3)
各检定点重复性(Er)i:
(4)
式中:Ki——每个检定点平均仪表系数;Kij——第i检定点第j次检定的仪表系数。
选择流量点0.509、0.997、1.649、2.737、4.41、7.742和9.26m3/h作为插值函数的结点进行分段插值,采用线性插值法和三次样条插值法,同时作为最小二乘法的观测点进行曲线拟和,对剩余流量点0.601、0.696、0.801和0.898m3/h的仪表系数进行逼近,最后与实验结果进行比较得到表2与图1~图3。
图1 线性插值法
图2 三次样条插值法
图3最小二乘法,阶数为5
通过比较,利用三次样条插值法得到的逼近点误差相对较小,且能够很好反映曲线变化趋势。所以在利用CPLD进行仪表系数非线性修正 时,选择用三次样条插值法对各流量点的仪表系数进行逼近。
3 CPLD程序设计
以上讨论的修正算法都要通过CPLD程序语言来实现,选择了美国ALTERA公司最新推出的MAXII系列器件,这是迄今为止成本最低、功耗最小、密度最高的CPLD器件[8]。考虑到功耗和逻辑资源数两方面的影响,最终选取EPM570GT100这款芯片。
3.1 软件总体设计
由于CPLD的程序设计可以同时进行多个进程,因此将程序分为四个模块,即四个进程,提高了程序运行速度。
(1)时钟模块。
各模块的运行都要有一个时钟基准,此模块提供了时钟频率c。考虑到时钟频率的大小会影响到功耗,这里选择用一个1MHz的无源晶振经32分频后得到的c=31250Hz作为整个电路的时钟基准。
(2)频率采集模块。
由于涡街信号是一个脉冲信号,因此利用脉冲捕获方法进行计频。如图4所示,涡街信号相邻脉冲上升沿的时间间隔通过高频时钟c来进行计数。计数值N、涡街频率f和时钟c存在如下关系:
(5)
图4 脉冲捕获方法计频示意图
这样,通过对每个脉冲间隔进行计数,就间接获得了涡街频率。
(3)频率修正(查找表)模块。
对仪表系数进行修正实际上是对涡街频率进行修正。由式(5),对频率的修正可以转化为对计数值N的修正,即CPLD频率采集模块得到N值,经上位机生成查找表后,直接输出对应的修正值N'((如图5所示),查找表反映了N-N'的对应关系。此部分为整个程序设计的重点,将在3.2部分进行详细说明。
(4)脉冲(或PWM波)输出模块。
将修正后的计数值N',根据式(5),对高频时钟c进行N'分频,最终将修正后的涡街频率以方波(或PWM波)形式输出。
各模块之间关系如图5所示。
图5 模块关系图
3.2 基于查找表修正方法的设计
查找表法常用于FPGA的设计中。在FPGA设计中常常要实现一些复杂运算(如乘法、除法、三角函数等),而这些运算会占用大量的逻辑单元,且速度难以满足信号实时处理的要求,查找表法是解决这一问题的最简单、有效的方法。其基本原理[9]为:将函数所有输入变量的运算结果写入FPGA的存储单元中,同时以这些输入变量作为该存储单元的地址。当运算时,通过读取存储单元地址的方式获取计算结果,这样一来,不仅大幅减少了运算所需逻辑单元,又满足了实时运算的要求。
非线性修正方法的本质其实是对涡街频率的修正,也可以转化为对涡街信号周期长度计数值N的修正,即对于每个输入的周期长度计数值N(反映的是涡街频率的真实大小),总有一个修正后的周期长度计数值输出N'(反映的是修正后的涡街频率)与之对应,可见这种方法尤其适宜采用查找表方法来实现。
受CPLD资源数以及功耗的限制,要求在满足涡街流量计线性度的前提下,尽可能地利用较少的CPLD资源对仪表系数进行修正,使涡街流量计的量程可以扩展。而程序中查找表占据了CPLD的大部分资源,因此对其进行优化是十分必要的。
为了说明修正思想及如何优化查找表,仍以表1实验数据进行说明,采用三次样条插值法进行仪表系数曲线逼近。如图6所示,在正常流量范围内1~9.3m3/h(频率20.41~185.87Hz),线性度在1%以内,在此范围的流量点不需要仪表系数修正。流量在0.5~1m3/h(频率10.86~20.41Hz)时,可以保证良好的重复性,因此可以通过修正将仪表系数降到正常流量范围所在的仪表系数区间Kmin~Kmax。如式(6),其中K为正常流量范围1~9.3m3/h得到的平均仪表系数,EL为所要求的线性度误差即仪表的精度等级,对于液体涡街流量计EL=0.01,气体涡街流量计EL=0.015。
(6)
为保证各修正点的仪表系数Ki落在Kmin~Kmax区间,其计数值NI必须落在Nimin~Nimax,根据式(5)可得:
即每一个Ni都对应一个修正空间Nimin~Nimax,只要修正后的Ni'落在此区域内就可以实现仪表系数的修正。由于Kmin~Kmax是基于线性度误差的一个较宽范围,由式(7)和式(8)可以推测,Nimin~Nimax也应是一个较宽的范围,因此相邻几个修正点的Ni所对应的Ni'的允许范围一定存在重叠部分,可以将这几个修正点的查找表合并成一个,输出同一个修正值N'。这样既节约了查找表资源,也降低了功耗。
图6 仪表系数修正图,EL=0.01
基于以上思想,首先利用Matlab在上位机编写查找表生成程序,再将生成的查找表拷贝到CPLD程序中,最终完成整个CPLD程序的编写。由于查找表程序是整个程序设计的核心,兼顾着非线性算法实现以及资源优化的双重使命,因此以下将进行详细介绍。查找表程序流程图如图7所示。
图7 查找表程序流程图
对每一个步骤作具体说明:
(1)初始化:根据第一次实验结果(表1),设置插值结点,选择线性度范围内的6个检定点和最小流量点(图2);设置新插值点的插值步长sf,在整个量程范围内每0.01Hz插一个点;高频时钟频率c设置为31250Hz;仪表的精度等级EL=0.01。
(2)根据实验结果,计算在EL精度内的K,Kmin,Kmax(式6)。
(3)根据三次样条插值方法,对整个量程范围内步长间隔为sf的频率点fi进行插值,得到Ki,i=1,2,…,n,n为插值点数。按照式(5),得到相应的Ni。
(4)各插值点的Ki若要保证在线性度范围内,必须使Ki落在Kmin~Kmax区间,相应地,其Ni必须落在Nimin~Nimax(式7,式8)。
(5)若Nimin<Ni<Nimax,则不需要进行修正,Ni'=Ni。反之,则需要将不满足条件的m个点筛选出来,以备修正,m<n。
对于待修正的Ni,i=1,2,…,m,总有一个满足线性度条件的区间Nimin~Nimax与之对应。在计算中发现,相邻k个Ni的Nimin~Nimax区间存在重叠部分,因此可以将这k个Ni修正为同一个Ni',使得Ni'落在k个Nimin~Nimax区间的交集中。这种方法可以大幅度减少查找表的数量,使CPLD资源得到优化。
4 实验结果
为了检验提出的基于CPLD仪表系数非线性修正方法的测量效果,分别对DN25和DN50涡街流量计在水流量标准装置上进行实验,比较修正前后的实验效果。
DN25修正前的实验数据已在表1中给出,表3列出了修正后的实验数据。
DN50修正前、后的实验数据如表4、表5所示。
可见,两个口径在修正后其测量范围明显扩大。与DN25情况不同,从DN50实验数据来看,除小流量外,流量上限的重复性也很好,因此有仪表系数修正的空间,只需要将仪表系数修正到合理的线性度范围内即可,说明该方法不仅对扩展下限有很好的效果,在重复性良好的前提下,对于扩展流量上限也同样适用。由此,经CPLD仪表系数修正后,涡街流量计的测量范围在保证精度的前提下得到了明显扩展。
5 总结
本文提出了一种基于CPLD的硬件式仪表系数非线性修正方法,并将该方法应用于涡街流量计中,扩展其测量范围,即利用CPLD对超出线性度范围但重复性较好的流量点进行仪表系数非线性修正。采用三次样条插值法对K-Q曲线进行逼近,通过优化CPLD查找表资源,不仅实现了仪表系数的非线性修正,扩展了量程,而且为实现低功耗作足准备。该方法实现简单,效果明显,对于存在仪表系数非线性问题的其他流量仪表也同样适用,易于推广。