一种基于FPGA的科氏质量流量计数字驱动系统的制作方法

文档序号:11249114阅读:665来源:国知局
一种基于FPGA的科氏质量流量计数字驱动系统的制造方法与工艺
本发明涉及流量检测领域,是一种基于fpga的科氏质量流量计数字驱动系统,特别是一种对信号进行iir(无限冲击响应)数字滤波,过零检测判断信号过零点,三点反向lagrange插值算法拟合过零点计算所需驱动信号频率,非线性相位与线性相位结合做相位跟踪,利用dds(直接数字式频率合成器)输出驱动信号的频率、相位信息,非线性幅值控制算法做驱动幅值控制,利用mdac(乘法数模转换器)输出驱动信号的幅值信息的科氏质量流量计数字驱动系统。
背景技术
:科里奥利质量流量计(以下简称为科氏质量流量计)可以直接测量质量流量,是当前发展最为迅速的流量计之一,具有广阔的应用前景。科氏质量流量计由两部分组成,一是一次仪表,包括流量管、磁电式速度传感器、激振器和温度传感器,二是变送器(又称二次仪表),包括信号调理部分、处理部分和驱动部分。就驱动部分来说,要求驱动信号可以快速跟踪一次仪表中磁电式速度传感器的信号,使流量管工作在最佳状态。驱动部分的工作方式可分为模拟驱动、半数字驱动和数字驱动。当气液两相流或多相流发生时,需要快速地更新驱动信号,以便及时地向流量管提供足够的能量。合肥工业大学研究了基于dsp(数字信号处理器)的数字驱动系统(徐科军,候其立等.一种科氏质量流量计的数字驱动跟踪方法和系统,发明专利,专利号:zl201110331814.x,申请日:2011.10.28.,授权公告日:2013.5.1.)。在该系统中,dsp承担流量管驱动、信号处理、流量计算和外设控制等任务,正常工作时每500点(对于adc(模数转换器)采样频率为3.75khz,流量管固有频率为135hz的科氏质量流量计来说为133ms,约18个周期)更新一次驱动信号。当发生气液两相流时,流量管的固有频率会剧烈变化,驱动系统可能无法快速跟踪磁电式速度传感器信号,会使流量管振动幅值不稳定且平均振动幅值偏低。若每隔27ms(约3.6个周期)更新一次驱动信号,可能会对质量流量的计算造成影响。国内外研究了采用fpga(fieldprogrammablegatearray,现场可编程门阵列)对科氏质量流量计进行驱动。(1)基于fpga和奔腾ⅲ处理器的数字驱动方法英国牛津大学用fpga和奔腾ⅲ处理器双核系统来做驱动部分(zamoram,henrymp.anfpgaimplementationofadigitalcoriolismassflowmeteringdrivesystem[j].ieeetransactionsonindustrialelectronics,2008,55(7):2820—2831.)。利用fpga控制adc采集磁电式速度传感器信号,经过数字滤波后,存于ram(易挥发性随机存取存储器)中;待采集到一定数据后,传输给奔腾ⅲ处理器;奔腾ⅲ处理器通过sin/cos(正弦/余弦)运算得出驱动信号所需的频率和相位信息,通过pi(比例积分)控制得出驱动信号所需的幅值信息,然后,再传输给fpga;由fpga综合出驱动信号,并控制dac(数模转换器)输出,由激振器控制流量管的振动。但是,这些sin/cos运算加大了软件的运算量,并且需要开辟较大的存储空间存放波形数据;驱动信号由两个处理器共同得出,奔腾ⅲ处理器在计算完质量流量和密度后再去决定驱动参数值,然后传输给fpga控制外部dac输出驱动信号,控制的及时性有所欠佳;选用的奔腾ⅲ处理器成本较高。(2)基于fpga的科氏质量流量计数字闭环系统。国内北京航空航天大学设计了基于fpga的科氏质量流量计数字闭环系统(田婧,樊尚春,郑德智.基于fpga的科氏质量流量计数字闭环系统设计[j].仪表技术与传感器,2009,(z1):381-383,392.)。其采用单片fpga作为处理器,不仅承担了数字驱动任务,也承担了信号处理任务。fpga需完成数字滤波、数据缓存、fft计算幅值、幅值增益控制、驱动波形合成等任务,对于单片fpga来说,需要占用较多的逻辑资源,算法运算量大且需要较多的存储空间;其未给出驱动信号的更新速度,在流量管固有频率和阻尼比剧烈变化的气液两相流下,若驱动信号更新的不够快,驱动效果不会好。(3)基于fpga+dsp的半数字式驱动方法。北京化工大学设计了基于fpga+dsp的数字式科氏质量流量变送器(许爽.基于fpga和dsp的科氏质量流量计变送器设计[d].北京:北京化工大学,2013.)。其采用模拟电路与数字电路相结合的方式,由fpga通过pid(比例积分微分)算法得出驱动信号幅值的增益,再通过mdac(乘法数模转换器)让驱动信号乘以增益来实现驱动控制。其乘以增益前的驱动信号取自磁电式速度传感器,所以,属于半数字驱动方式,导致流量管启振速度较慢,而且还难以避免“磁电式速度传感器小幅值”乘以大增益仍为“小驱动幅值”的情况,即两相流发生时可能会导致停振。(4)合肥工业大学也研究过基于fpga的科氏质量流量计数字驱动方法(刘铮.科氏质量流量计驱动系统中关键技术研究[d].合肥:合肥工业大学,2016)。其对驱动系统做了概述,但是,只完成了单路信号采集和频率计算部分,其中,频率计算采用了等精度测量的方法。等精度测频法无法找到信号实际过零点,测频结果精度较低,会导致驱动信号不稳定。技术实现要素:本发明为了解决上述问题,采用以下技术方案:基于fpga的科氏质量流量计数字驱动系统,包括放大滤波电路、模数转换器adc1、模数转换器adc2、电压基准源、电压跟随器、模数转换器adc3、dds、mdac、功率放大电路、fpga最小系统、dsp最小系统、saram(单向访问随机存取存储器)、fram(铁电存储器)、人机接口、4~20ma电流、串口通信、脉冲输出和电源模块。系统上电后,fpga控制dds与mdac发出具有一定频率(流量管固有频率附近)、相位、幅值的驱动信号至激振器,使流量管做小幅度振动。位于流量管两侧的两个磁电式速度传感器输出两路正弦波信号,两路信号经两路参数相同的调理电路放大、滤波后分别被两个相同型号的模数转换器同时采样并转换为数字量,fpga通过io(输入输出)口读取两路采样数值。由于fpga具有并行执行的特性,一边将两路信号先存至片内ram,待dsp需要数据时传输给dsp进行质量流量计算、外设控制等;一边对一路磁电式速度传感器信号进行数字滤波,过零检测,然后利用三点反向lagrange插值算法得出拟合过零点、计算单周期内采样点数得到信号频率参数,求取滤波器造成的非线性相位和其它的线性相位得到相位参数,fpga通过io口控制dds输出驱动信号的频率、相位信息;在控制频率、相位的同时,利用非线性幅值控制算法得到驱动信号的幅值参数,fpga通过io口控制mdac输出驱动信号的幅值信息;dds输出的信号为驱动信号源,其输出经放大滤波后送入mdac的模拟输入端,mdac对其进行增益控制后,再经过功率放大,最终将驱动信号输出到激振器上,使得流量管在固有频率处稳幅振动。本发明专利的优点是:利用fpga的并行特性,快速更新驱动信号,半周期更新驱动信号的频率、相位信息,单周期更新驱动信号的幅值信息;利用三点反向lagrange插值算法计算频率参数,非线性相位与线性相位结合计算相位参数,用dds输出驱动信号的频率、相位信息,利用非线性幅值控制算法快速而稳定的控制幅值增益,用mdac输出驱动信号的幅值信息,相对于上述英国牛津大学和北京航空航天大学的驱动方法来说,本发明避免了波形合成需要的大量算法;fpga只负责驱动部分,无需计算质量流量,相对于上述英国牛津大学和北京航空航天大学的驱动方法来说,本发明加快了驱动信号的更新速度。附图说明图1为本发明系统的硬件总体框图。图2为本发明系统的信号调理、采集部分基准源电路。图3为本发明系统的数字驱动电路。图4为本发明系统的信号调理、采集电路。图5为本发明系统的fpga最小系统。图6为本发明系统的dsp最小系统。图7为本发明系统的fpga与dsp程序总体流程图。图8为本发明系统的fpga程序总体示意图。图9为本发明系统的信号采集传输过程示意图。图10为本发明系统的iir滤波算法的流程图。图11为本发明系统的过零检测算法的流程图。图12为有负偏置的磁电式速度传感器信号。图13为本发明系统的lagrange插值算法三点取样示意图。图14为本发明系统的计算正检测过零点对之间采样点数的流程图。图15为本发明系统的频率计算算法的流程图。图16为磁电式速度传感器信号与驱动信号的相位关系图。图17为本发明系统的相位跟踪算法的流程图。图18为本发明系统的幅值控制算法的流程图。本发明系统硬件框图如图1所示。本发明系统由科氏质量流量传感器(包括磁电式速度传感器a、磁电式速度传感器b、激振器、温度传感器)、放大滤波电路、adc1、adc2、电压基准源、电压跟随器、adc3、dds、mdac、功率放大电路、fpga最小系统、dsp最小系统、saram、fram、人机接口、4~20ma电流、串口通信、脉冲输出和电源模块组成。本发明系统工作过程为:系统上电后,fpga控制dds与mdac发出具有一定频率(流量管固有频率附近)、相位、幅值的驱动信号至激振器,使流量管做小幅度振动。位于流量管两侧的两个磁电式速度传感器输出两路正弦波信号,两路信号经两路参数相同的调理电路放大、滤波后分别被两个相同型号的adc1和adc2同时采样并转换为数字量,fpga通过io口读取两路采样值。由于fpga具有并行执行的特性,一边将两路信号先存至片内ram,待dsp需要数据时传输给dsp进行质量流量的计算、外设控制等;一边对一路磁电式速度传感器信号进行数字滤波,过零检测,然后利用三点反向lagrange插值算法得出拟合的过零点、计算单周期内采样点数得到信号频率参数,求取滤波器造成的非线性相位和其它的线性相位得到相位参数,fpga通过io口控制dds输出驱动信号的频率、相位信息;在控制频率、相位的同时,利用非线性幅值控制算法得到驱动信号的幅值参数,fpga通过io口控制mdac输出驱动信号的幅值信息。dds输出的信号为驱动信号源,其输出经放大滤波后送入mdac的模拟输入端,mdac对其进行增益控制后,再经过功率放大,最终将驱动信号输出到激振器上,使得流量管在固有频率处稳幅振动。图2为信号调理、采集部分电压基准源。u16为基准源,其输出经运放u17组成的电压跟随器,提高了电流输出能力;c42、c43为输入输出滤波电容;c47与u16内部电阻构成rc滤波器,对输出进行滤波;c44、c45、c46为输出滤波电容;c48为退耦电容。图3为数字驱动电路。u21的vout(10脚)发出具有一定频率、相位和幅值的信号,磁珠l3、电容c57对电源滤波,电容c63、c60、c61、c62为退耦电容;u21的时钟采用时钟源u23,磁珠l4、电容c69对电源滤波,电容c66和电阻r34用于滤除时钟信号中的高频尖脉冲;r28、c56、r30为隔直电路,对u21的输出信号隔直;u22a及r31、r32、c68对u21的输出信号放大、滤波,磁珠l5、l6、电容c54、c64对电源滤波;u22a的输出信号送至u19的vref(4脚),u19对其放大,c55为退耦电容,根据u19的数据手册,设置u22b和c59进行电流至电压转换;c58和r29对u19的输出信号隔直;u20及r33、r35对信号放大,电容c52、c53、c65、c67为退耦电容。图4为磁电式速度传感器信号调理、采集电路。信号rp+接入u2的输入端,经仪用放大器u2放大后送至由运放u3a及外围电阻、电容构成的二阶低通滤波器滤波后,再经r7、u32构成的限幅保护电路送入adc(u30)的输入端。通过r8输入信号,r2设置u2的放大倍数,c2、c5、c13、c15为退耦电容,r5、r6、r1、r11、c6、c10与运放u3a构成二阶低通滤波器,c3、c7、c12、c14为退耦电容,电容c11用来滤除u30中高频开关器件产生的高频干扰。u30为差分输入adc1,信号接至ain0(6脚),另一输入端ain1(7脚)接2.5v基准源;u30所需基准取至外部2.5v基准源;vrefp(4脚)接2.5v基准,vrefn(3脚)接地;u30的数据传输接口与fpga的io口连接,其中串联的电阻r3、r4、r9与u30相应管脚输入寄生电容构成rc滤波器,滤除尖峰脉冲;管脚dout接至fpga的io口;电容c8、c9为滤波电容,电容c1、c4、c16、c19为退耦电容。另一路信号lp+经过相同原理和结构的调理电路送到与u30相同型号的adc2(u31)中,不在赘述。u30、u31的时钟采用相同的时钟源:外部有源晶振u6;u6产生的时钟经施密特触发器u5以提高驱动能力,然后分两路送至u30和u31时钟输入管脚,磁珠l1、电容c26对电源滤波,电容c17和电阻r13用于滤除时钟信号中的高频尖脉冲,电阻r10、r22也是用于滤除尖脉冲。图5为fpga最小系统,包括晶振、jtag、as等。由于fpga引脚众多,所以分两幅图画出。其中,图5.1为fpga(u0)的iobank2、iobank3、iobank4、iobank5、iobank6、vcc_int的电路图,图5.2包括fpga的iobank1、iobank7、iobank8、pll、config、gnd的电路图和fpga最小系统相关的电路图;u8为有源晶振,电阻r45、电容c58、c59、c60对电源滤波,电阻r46用于滤除时钟信号中的高频尖脉冲;u7a和u7b为as配置方式所用芯片,r51、r52、r55、r56均为相应数据手册中要求连接的电阻,c61为退耦电容,p5为as接口,r53、r54、r57、r59均为相应数据手册中要求连接的电阻,r58为限流电阻,s6为as配置按键;p4为jtag接口,r47、r48、r49、r50均为手册中要求连接的电阻;d11至d21为数据手册中要求连接的保护二极管;r60、r61、r62均为分压电阻。图6为dsp最小系统,包括晶振、jtag、退耦电容等。u4为有源晶振,为dsp提供时钟;磁珠l1、电容c37对电源滤波;c38、r15滤除时钟信号中的尖峰脉冲;u1的57脚接的电阻r12为偏置电流提供通路,u1的的55脚、56脚为内部adc基准输出,需并联电容c27、c28到地;p1为jtag接口,r9、r10、r11均是数据手册中要求接的下拉、上拉电阻;电容c1至c10、c12至c26、c29至c34为退耦电容。本发明专利的程序工作流程如图7所示为:fpga控制两个相同型号的adc1和adc2同时采样并读取两路采样值,由于fpga具有并行执行的特性,一边将两路信号先存至片内ram,待dsp需要数据时传输给dsp进行质量流量的计算、外设控制等;一边对一路采样信号进行iir滤波,过零检测,然后利用三点反向lagrange插值算法得出拟合的过零点得到信号频率参数,从rom(只读存储器)读取非线性相位信息、计算线性相位信息得到相位参数,fpga控制dds输出驱动信号的频率、相位信息;在控制频率、相位的同时,利用非线性幅值控制算法得到驱动信号的幅值参数,fpga控制mdac输出驱动信号的幅值信息。与采用顺序执行方式的处理器不同,fpga具有并行执行的特点,在对信号进行数字滤波后,对频率参数、相位参数的计算和对幅值参数的计算是并行执行的。磁电式速度传感器信号是一个正弦波,可根据信号的检测过零点来对上述参数进行更新。对于频率参数和相位参数来说,在磁电式速度传感器信号的正检测过零点与负检测过零点都更新,例如,对于流量管固有频率为135hz的科氏质量流量计来说,其驱动信号的频率、相位参数更新的频率为270hz。对于幅值参数,只在负检测过零时更新,例如,对于流量管固有频率为135hz的科氏质量流量计来说,驱动信号的幅值参数更新的频率为135hz。这些参数的计算不会影响与dsp的通信。这样,频率、相位参数的计算更新、幅值参数的计算更新和与dsp的通信都是并行执行的,相较于顺序执行的处理器来说,自然可以加快驱动信号更新的速度。本发明系统中数字信号处理的任务主要是实时对采样数据进行处理,得出驱动信号所需的参数后借助外部器件输出驱动波形来维持流量管的振动。本发明系统除了完成驱动任务外,还将采集到的数据传输给dsp做进一步的流量计算、外设控制等。驱动程序以fpga为载体,使用veriloghdl硬件编程语言对整个系统进行了设计。设计fpga程序时,一般将其分为顶层文件和底层文件,在设计顶层文件时,采用原理图输入的方式,该方式便于识别各个组成功能块的作用,直观易懂。根据各部分的作用,顶层文件可分为多个模块。如图8所示,顶层文件中包含了整个驱动系统的内容,有adc控制与数据整形组合模块,dsp通信组合模块,滤波组合模块,过零检测模块,频率、相位计算组合模块,幅值控制组合模块,dds输出模块和mdac输出模块。其中,通过adc控制与数据整形组合模块控制两片adc对两路模拟磁电式速度传感器信号进行同步采样,并将读回的串行数据转换为并行数据;通过dsp通信组合模块先将两路adc采集的数据存储到fpga的片内ram中,再根据与dsp的应答信号实时地将数据传输给dsp;通过滤波组合模块对一路adc信号进行带通滤波处理;通过过零检测模块检测滤波后信号的正检测过零点与负检测过零点,并输出相应的方波便于后级模块应用;通过频率、相位计算组合模块计算出驱动信号所需的频率参数和相位参数;通过幅值控制组合模块比较出磁电式速度传感器信号正半周期内的幅值,然后运用非线性幅值控制算法计算出驱动信号所需的幅值参数;通过dds输出模块控制片外dds芯片合成具有相应频率、相位参数的驱动信号;通过mdac输出模块控制片外madc芯片合成具有相应幅值参数的驱动信号。图9为信号采集传输过程示意图。本发明系统选取一款24位的adc,其以15khz的采样频率对磁电式速度传感器信号进行采样。fpga在向其写命令以及读取采样值时都需通过spi通信方式。adc含有一个同步引脚sync,在对两片adc控制时,先拉高它们的sync引脚进行初始化配置,完成配置后再将它们的sync引脚同时拉低,延时一段时间后再同时拉高,即可控制两片adc同时采样。模数转换完成后,adc的drdy引脚电平会被拉低,此时由fpga发送串行时钟至adc的sclk引脚,在每个串行时钟的边沿adc会将数据发送到dout引脚由fpga读取,在sclk引脚接收完24个串行时钟后drdy引脚电平会被拉高,等待下一次的转换。利用fpga的并行特性,可同时读取两路数据。fpga需将采到的两路数据传输给dsp做质量流量的计算。由于运算速度的限制,dsp可以对采样频率为3.75khz的信号进行处理,而fpga控制的两路adc的采样频率为15khz,所以,需对传输给dsp的数据做抽样处理。例如,在每4个采样点中,fpga取一个传输给dsp,dsp对抽样后单路信号的每500点执行一次数据处理任务,两路信号共1000个点。fpga先将抽样后数据存至片内ram中,待dsp需要时传送出去。为此,以24位为一个单位,开辟两个含有1024个单位的内存空间ram1与ram2,ram1用于存取一路数据,ram2用于存取另一路数据。dsp需要数据时,会向fpga发送start信号,假设fpga准备好两路1000点数据并存至ram1和ram2的1至500地址空间,则先将ram1的500点发送至dsp,再将ram2的500点发送至dsp;在此期间会有新的抽样点传来,由于fpga的并行特性,新的数据从ram1和ram2的第501个地址开始存储,待存至第1000个地址时可再次发送给dsp。由于1至500地址的数据已经传输完成,有新的数据来时将从1地址开始存储。这样fpga即可连续与dsp通信。两路磁电式速度传感器信号频率、幅值相同,相位差很小,一般仅有0至4度,驱动信号可根据一路信号得出。现选取一路信号做相关驱动参数的计算。驱动任务用采样频率为15khz的数据来计算。由于各种干扰,adc采到的信号难免会混入噪声,这时就需要对信号进行预处理。磁电式速度传感器信号的频率一般小于300hz,在满水和满气的状态下固有频率一般相差不会超过10hz,为此设计三阶iir带通数字滤波器,其公式为例如,对于充满水后流量管的固有频率为135hz的科氏质量流量计设置数字滤波器,采样频率为15khz,通带范围由110hz至160hz,利用matlab得滤波器系数为:b1=0.010363824637108;b2=0;b3=-0.010363824637108;a1=1;a2=-1.976216940281179;a3=0.979272350725784。可见,滤波器系数皆为小数。小数可分为定点小数和浮点小数。浮点小数具有表示更加灵活的特点,其又可进一步分为单精度浮点小数和双精度浮点小数。在fpga中无法直接计算小数,需借助quartusⅱ(altera公司的综合开发工具)中相应的ip核函数(altera公司开发的供用户二次使用的接口函数)。浮点数计算要比整数计算消耗更多的资源,出于对计算精度和fpga资源消耗的考虑,本发明系统在进行小数运算时一般采用单精度浮点数的方式。在veriloghdl语言中需先将要计算的数转换成符合ieee标准的二进制数后才可做小数运算。ieee对于单精度浮点数的表示格式如表1所示。表1单精度浮点数表示格式浮点数符号阶码尾数单精度32位宽[31]-1位[30…23]-8位[22…0]-23位在表1中,阶码表示整数部分,尾数表示小数点后的部分。滤波流程如图10所示。由于fpga的并行特性,滤波算法的执行不会打断其它功能块的进行,因此,每读到一个采样值后立刻进行滤波处理,实时性很强。从adc读取来的是一个24位有符号的二进制数,滤波器系数都是小数,在进行滤波算法前,将adc的整数采样值和滤波器系数都转换为符合ieee标准的单精度浮点数格式。接着,在单精度浮点数的基础上,根据滤波器差分方程y(n)=b1x(n-1)+b2x(n-2)+b3x(n-3)-a2y(n-1)-a3y(n-2)做相应的运算。由于adc的采样周期远远大于滤波算法的执行时间,所以,只要有新的采样点传来,就可做新一点的滤波算法。在求得滤波结果后,由于表示形式仍然是单精度浮点数格式,需将其转换为整数格式fil(n)传输给后级做相应运算,而单精度浮点数格式的结果则可继续做下一点的滤波运算。磁电式速度传感器信号为一正弦信号,在做频率、幅值控制的时候,最及时的控制开始时刻就是在信号的检测过零点,此时刚好可以求得驱动信号的频率、相位和幅值信息。如图11所示为过零检测流程图,由于数据是24位的,且最高位为符号位,所以,将滤波后数据fil(n)的每一点与上一点fil(n-1)的符号位进行比较,若符号相反且当前点为正值则为正检测过零点,相应的标志位置0;若符号相反且当前点为负值则为负检测过零点,相应标志位置1。根据正检测过零点和负检测过零点则可以做后续算法的处理。驱动信号是根据磁电式速度传感器信号来的,一次仪表处于单相工作状态时,流量管会有一个固有频率点,此时频率易于跟踪,但若发生气液两相流,固有频率剧烈变化,需要驱动信号的更新速度能快速跟踪上磁电式速度传感器信号的变化速度。磁电式速度传感器信号为正弦信号,单周期内具有一个正检测过零点和一个负检测过零点,频率可以半周期更新一次。信号传输需经过硬件调理电路,可能会有偏置问题。假设磁电式速度传感器信号的偏置为负,如图12所示,t1、t2、t3、t4分别是信号的实际过零点。半周期更新时,假设在t2时刻计算t1至t2之间正半周信号的频率,t3时刻计算t2至t3之间负半周信号的频率,明显看出,通过这两个半周计算出来的频率不相同,这样计算出来的不是信号的真实频率。同样的,由于制作工艺的原因,在没有偏置的情况下,有些科氏质量流量计的磁电式速度传感器信号的正半周期和负半周期的时间不一样,若取半周期计算频率也不合适。在半周期更新时,在t3时刻计算t1至t3之间一个周期信号的频率,在t4时刻计算t2至t4之间一个周期信号的频率,即使信号存在偏置或正半周期与负半周期时间不一致,这样计算出的也都是单周期信号的频率值,计算结果是符合真实信号频率的。也就是说驱动信号的频率信息每半周期更新一次,且更新的频率值为磁电式速度传感器信号前一个周期内的频率。传统信号的频率测量方法一般有测频法、测周法、等精度测频法等。对于低频信号,一般采用等精度测频法,但是,由于在系统中处理的都是离散信号,无法刚好得到实际过零点,对频率的测量精度自然达不到要求。在这里采用三点反向lagrange插值算法进行曲线拟合寻找拟合过零点,从而计算频率。如图13所示,t1、t2、t3、t4为实际过零点,空心的点表示的是采样点。在实际过零点处做三点lagrange插值处理,公式为若用其做插值算法,拟合的曲线是二阶的,也就意味着要解二阶方程,需要消耗更多的时钟延时和fpga资源,所以,这里采用了三点反向lagrange插值算法来拟合过零点,将采样信号的数值与其对应的时刻值交换过来进行插值运算,即采样值由因变量变为自变量,时刻值由自变量转变为因变量。相应的插值公式为在每个实际过零点之前取两个点,在实际过零点之后取一个点进行曲线拟合,计算时令x等于0,为了让零点位置都在0至1之间,令n取1。这样执行插值算法后,拟合出来的过零点都在0至1之间。计算频率还需求出检测过零点对之间的滤波后采样点数(以下所述采样点皆为滤波后的),也就是求出正检测过零点对之间的采样点up_base和负检测过零点对之间的采样点数down_base。如图14所示,当检测到正过零点时,就将标志位up_flag置1,检测到下一个正过零点后就将up_flag置0,然后在小于采样周期的延时后将up_flag置1,进行下一轮的采样点计数。由于fpga的并行特性,在检测到up_flag置1后即进行采样点base1的计数,计数完成后将其赋给up_base,用于频率计算;在up_flag置0后即将base1清零,准备下一信号周期的计数。同理,负检测过零点对之间的采样点数可由上述方法求得。计算采样点数用整数即可完成,插值算法则需要整数计算和浮点数计算相结合。如图15,正检测过零点对之间的频率计算过程如下:先检测过零点,正检测过零后开始执行插值算法。在插值算法中将可以用整数运算的部分运算完成后,再用浮点数方式求出拟合过零点,由于是在正检测过零点后计算的,此时应处于正半周期,接着做正检测过零点对的两个拟合过零点位置的相关运算two_side_zero_up=[(1-zero_up2)+zero_up1]。此后一边等待负检测过零点,从而做负检测过零点对的插值运算,一边与正检测过零点对的单周期采样点数配合计算出频率f=fs/[(upbase-1)+two_side_zero_up],其中,fs为采样频率。同理,负检测过零点对之间的频率可按上述方法算出。查阅dds的数据手册可知,求出频率值f后还得转换成dds能识别的形式freqreg=f*228/fmclk,freqreg即为应载入dds的值,fmclk为dds外接的晶振频率值。相位补偿值的大小与磁电式速度传感器信号的频率值有关,每计算出一次频率值就可得到一个相位补偿值,所以驱动信号的相位信息也是半周期更新一次。磁电式速度传感器信号与驱动信号一般要求是同相的,如图16,t3为实际过零点。驱动信号1为不对驱动信号进行相位补偿的方式,在t4时刻更新时,其相位从零开始,磁电式速度传感器信号与驱动信号显然不同相,驱动效果会大打折扣。驱动信号2对驱动信号进行了相位补偿,在t4时刻更新时,其初始相位是经过补偿后的相位,并不是零相位,这样磁电式速度传感器信号与驱动信号会处在同相状态,驱动效果较佳。用fpga驱动时,由磁电式速度传感器的信号计算出驱动信号的频率、相位进而输出到激振器上需经过以下这些延时:(1)进入adc前的硬件延时以及adc的模数转换延时;(2)3阶iir数字滤波器造成的非线性相位滞后;(3)检测过零点时,检测出的离散信号的过零点与实际过零点之间的时间差;(4)dds的数模转换延时及其输出后级硬件造成的延时;(5)系统程序所造成的时钟延时。除了滤波器造成的相位差phase_iir是非线性的,其余部分所造成的相位差都与频率呈线性关系,即phase_other=(a+b)*f,f为磁电式速度传感器信号的频率。硬件延时、模数转换延时、数模转换延时和时钟延时造成的系数a是固定值,根据相关延时可计算出来。实际过零点和检测过零点的时间差造成的系数b是不定的,它需根据检测出的过零点和lagrange插值求出的拟合过零点比较得出。求取iir数字滤波器的相频特性得到其对信号造成的非线性相位差phase_iir为式中,f为信号频率,fs为采样频率。若用fpga计算式(4),将消耗许多时钟延时和fpga资源。为此,非线性相位差的求取可采用查表方式,在固有频率点周围每隔0.01hz存储一个相位值。由于dds中将360度相位分成了4096份,即每一个单位代表360/4096=0.08789度。而每0.01hz造成的相位差是小于0.08789度的,所以,取0.01hz的分辨率是可以的。如图17为相位跟踪的流程图,先由查表法得出数字滤波器造成的非线性相位,例如,对于固有频率为135hz的科氏质量流量计,在110hz至159.99hz之间(固有频率变化不会超过此范围)每隔0.01hz做一个相位补偿。在fpga内开辟一个容量为8192的16位单口rom,利用matlab得出每个频率点对应的相位值phase_iir,再根据phase_iir_dds=phase_iir*4096/360,将其转换成dds可接受的值存入rom中。该rom地址从0开始至8191,每个频率点对应的相位值的地址rom_address=f*100-11000,f为求得的信号频率。再研究phase_other=(a+b)*f,对于检测过零点造成的系数b可这样求出:设插值求得的拟合过零点为t,先求得时间差δt=(1-t)/fs,再由(δt*f*360)即可算出对应的相位值,所以,就有b=δt*360。a可根据硬件延时、模数转换延时、数模转换延时和程序时钟延时求得。由phase_other_dds=(a+b)*f*4096/360即可求得输出给dds的线性相位。最后即可将phase_dds=phase_iir_dda+phase_other_dds写入dds。fpga采用非线性幅值控制算法对流量管振动幅值进行灵活控制。磁电式速度传感器信号为正弦波,正弦波是一个奇函数,正幅值与负幅值绝对值大小相等,只需比较出正半周期的信号幅值。即便磁电式速度传感器信号存在微小偏置,也没什么影响。比较的方法为在正半周期内,每接收到一个新点则与上一点的值做大小比较,并保留较大的值,最后可得幅值ak。鉴于fpga的并行运算特性,对滤波后传过来的每一点都实时处理,这样就可以在单周期内比较出驱动信号的幅值。也就是说单周期更新一次驱动信号的幅值信息。对于期望幅值a0与实际幅值ak,求取误差一般为这样算的误差变化范围小。为此,引入自然对数,对期望幅值a0与实际幅值ak求取对数后再做差值,即ek=lna0-lnak,使得大时,ek更大;小时,ek更加小,以满足对动态特性和稳态特性的要求。控制器c(s)采用比例积分(pi)控制器。pi控制器是一种最常用的控制器。它的优点是反应快、控制及时,其缺点是控制结果有余差存在。积分控制的特点是控制缓慢,但是,能够消除余差,只要存在偏差,控制器输出就会不断地变化,直至偏差被消除。所以,pi控制器的特点是控制既及时,又能消除余差。其输出表达式为式中,tsam为采样周期,kp为比例系数,ki为积分系数。已知比例部分只与当前的偏差有关,积分部分与过去所有的偏差都有关。由于小时会导致ek很小,若采用固定kp或与差值变化方向同向的变比例系数kp法则会使系统即将达到稳态时的调节速度稍慢,故采用了与差值变化方向反向的变比例系数kp法,即ek越小,kp越大。如图18为非线性幅值控制算法的流程图。为了尽量减少fpga资源的消耗,算法的一部分采用单精度浮点数运算,一部分采用整数运算。检测到负过零点后说明信号的正半周期已结束,正半周期内的幅值已经比较出,此时可取幅值。自然对数的求取必须要使用浮点数,在此用单精度浮点数求取。求出的结果是小数,先将其放大214倍,并转换为整数。放大是为了后续算法都进行整数运算,而放大214倍的目的是其可使最后输出给mdac的码值最小变化量为1。对数误差ek得出后,则可算出变比例系数kp,最后执行pi算法,并将结果转换为madc芯片可接受的值输出。每半周期计算出一次频率、相位参数,dds更新一次驱动信号的频率、相位信息;每单周期计算出一次幅值参数,mdac更新一次驱动信号的幅值信息。其中对于频率、相位的控制和对于幅值的控制是并行的,二者的输出相乘后组成最终的驱动信号。驱动信号的更新频率是以磁电式速度传感器信号的频率为依据的,也就是说磁电式速度传感器信号的频率越大,驱动信号更新的越快。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1