差压式流量计设计说明书教程文件.docx
《差压式流量计设计说明书教程文件.docx》由会员分享,可在线阅读,更多相关《差压式流量计设计说明书教程文件.docx(15页珍藏版)》请在冰豆网上搜索。
差压式流量计设计说明书教程文件
差压式流量计设计说明书
一、流量测量的依据
1.流量与差压换算公式
依据流体力学公式,对于差压式流量计中流量和差压的关系式可以简化为
其中
即作为本设计中流量系数,修改
即可以修正
与
的关系。
2.流量与电流换算公式
本设计中流量范围为0~1000L/min,流量计输出信号4~20mA,依据流体力学公式和信号转换特点有如下关系式:
即可得到
与
的关系式:
若假设流量为500L/min,依据计算公式可知,
二、差压式流量计的结构设计
1.整体结构框图,如图所示
2.电容式差压传感器(差动电容)
如图所示,即为一种电容式差压传感器。
当流量计的两路过程压力从测量容室的两侧施加到隔离膜片后,经硅油灌冲液传至中心膜片上,中心膜片是一个边缘张紧的膜片,在压力作用下,产生相应的位移,该位移即形成差动电容变化。
将该差动电容接入一个LC振荡回路(或LRC振荡回路)中,差动电容的容值变化将会导致振荡电路的振荡频率改变。
3.f-V转换电路(频率-电压转换电路)
频率电压转换电路可实现频率到电压的转换。
这里选用美国NS公司生产的精密频率电压转换芯片LM331。
LM331性能价格比高、外围电路简单、可单电源供电、低功耗的集成电路。
LM331动态范围宽达100dB,工作频率低到0.1Hz时尚有较好的线性度,数字分辨率达12位。
LM331的输出驱动器采用集电极开路形式,因此可通过选择逻辑电流和外接电阻来灵活改变输出脉冲的逻辑电平,以适配TTL、DTL和CMOS等不同逻辑电路。
LM331可工作在4.0V~40V之间,输出可高达40V,而且可以防止VCC短路。
这里假设频率范围0~10KHz进行设计,电路图如图,转换后电压范围0~5V。
改变Rs的阻值可以调节转换后电压范围。
()
4.调理电路
由于f-V转换电路后的输出电压已经在0~5V范围内,故暂不需要放大电路。
调理电路部分只主要考虑抗混叠滤波电路。
根据设计要求总采样周期0.5s,共采集100个点,每个点采样周期为5ms,所以采样频率为200Hz。
根据抗混叠滤波器设计原理:
其中
为采样频率,
为截止频率。
考虑到AD转换位数m=12,这里取k=5,故低通滤波器的截止频率为40Hz。
低通滤波器采用巴特沃斯设计法,假设截止频率40Hz,通带最大衰减3dB,阻带起始频率50Hz,阻带最小衰减25dB。
首先确定巴特沃斯低通滤波器的阶数N:
取N=5。
低通滤波器3dB截止频率
则五阶巴特沃斯滤波器的传输函数为:
传递函数(已经归一化)确定后,根据sallen-key拓扑结构即可设计出模拟电路结构,此处不再详述。
5.A/D转换
A/D转换要求精度
,所以至少选用10位以上AD。
考虑到AD转换的精度特点(AD后两位精度不高),最终选用12位或以上的ADC。
这里可以有两种选择:
(1)TI生产的DSP系列中绝大部分已经内置了A/D转换模块,且精度足够。
TMS320F2812中自带12位ADC模块。
(2)选用外接的AD芯片。
若选用外接AD芯片,要求主要有两点:
1.转换精度为12位或更高;2.输出电压最好便于与DSP连接;3.转换时间小于5ms;4.仅需一个通道就能满足功能。
由于现在市面上的单通道12位AD芯片已经几乎不再生产,外接AD芯片最终选用16位的AD芯片AD977A。
AD977A工作电压为单电源供电0~5V,输入通道数1,内部基准电平2.5V。
6.DSP选型
DSP选择的主要指标有如下几点:
(1)运算精度。
定点精度就足够,不需要浮点运算,16位或32位均可。
(2)运算速率。
一般DSP运算速率在100MHz以上,设计中采样速率仅为200Hz,故一般DSP几乎都能满足数据处理要求。
(3)功耗。
TMS320C5000系列为低功耗系列,本设计没有功耗要求。
(4)硬件资源。
本设计中不使用DSP内部ADC,硬件资源要求不多。
主要考虑数字部分使用FIR滤波。
I/O引脚数一般也能达到要求。
(5)资料丰富程度,使用普及度。
TMS320F2812资料多,应用广泛。
(6)最好有JTAG口,便于调试。
经过查阅资料,TMS320C5000系列,像5404、5502是最低功耗的;TMS320C6000系列,是最佳处理的,但价格高;TMS320C2000系列,像2810、2812、2407是最佳控制的。
决定选用TMS320F2812作为选本设计的DSP芯片
7.DSP与AD接口电路
由于TMS320F2812管脚最高耐压为4.6V,查阅AD977A芯片资料后得知,
,若直接相连,也能使用,但为了安全起见,使用SN74LVTH245A转换电平后连接。
具体连接如图所示,其中/OE为低电平使能端,DIR为电平转换方向控制端,接DSP的一个I/O口进行控制。
8.D/A芯片以及EEPROM
由于信号经TMS320F2812处理后需要转换为4~20mA电流信号进行输出故选用D/A芯片进行数模转换。
选用D/A芯片为12位D/A芯片AD8522,它使用单电源0~5V供电,VIHmin=2.4V小于3.3V可以直接与DSP相连省去了电平转换过程。
由于采集和计算累计流量时会产生大量数据,需要进行存储,选用3.3V的EEPROM进行存储,连接如图。
9.总体电路图
三、差压式流量计的软件设计
1.系统程序框图
如图,本设计主要包含初始化程序、AD采集程序、数字滤波程序、流量计算程序、数据存储程序和232通讯程序。
初始化程序部分主要完成DSP系统初始化、各器件工作状态初始化以及从EEPROM中读取电压调整参数,设置AD977A的参考电源等工作。
AD采集程序负责控制AD977A采集信号,并将转换结果传输至TMS320F2812中,供DSP进行进一步处理。
利用DSP内部的定时器产生中断,定时启动AD977A采集信号和转换结果数据传输。
数字滤波程序是将因外界干扰使被测信号中混入的噪声脉冲滤掉,提高信号质量。
流量计算部分主要是依据从EEPROM读取出流量系数后,进行电压—压力——流量数值转换,先计算出瞬时流量,将瞬时流量叠加可得到累计流量。
数据存储程序主要是从EEPROM中读取数据,数据主要有电压调整参数、流量系数、显示设置、检测次数和累计流量的存储结果。
232通信程序(中断形式)是DSP与PC机之间的桥梁,通过232通信PC机可以修改流量系数、显示方式和检测次数等。
232通讯采用中断的方式进行(232中断优先级高于AD采集定时器中断的优先级),读取数据后立刻存入EEPROM中然后退出中断。
随后在主程序中从EEPROM中读出这些值,作出相应变化。
100点采样时间共0.5s作为一个采样大周期,采样后还得进行滤波、流量计算的步骤,整个程序一个大周期设为1s(系统周期),也就是该差压式流量计1s更新一次流量显示数值。
2.数字滤波部分设计
数字滤波主要有FIR、IIR两种滤波形式,这里考虑到信号特点和设计要求,选用FIR型数字滤波。
FIR数字滤波设计这里主要借助MATLAB中的滤波器设计和分析工具进行辅助设计。
如图,滤波器阶数设置为15阶,低通滤波器,采用窗函数的方法进行设计,窗函数选择Kaiser窗,采样频率设为200Hz,截止频率设为40Hz,设计好的滤波器如函数图所示。
改用汉宁窗设计的FIR滤波器如下图所示。
若进一步要求通带最大衰减3dB,阻带最小衰减25dB,发现汉宁窗更符合设计要求故最终采用汉宁窗进行FIR滤波器设计。
滤波器的的系数如上图所示。
再将MATLAB中的设计的滤波器通过Targets中的GenerateCheader进行导出,导出如下(考虑到DSP定点运算和运算精度,系数矩阵已经进行量化)
之后只需将该头文件导入TI提供的CCS软件中,就能得到DSP的FIR滤波程序。
FIR滤波后得到100个采样值再进行中值滤波,先将100个采样值按大小排序,去掉最大的20个和最小的20个,再对剩下的60个数据进行算术平均,最后所得的数值作为这个采样大周期(0.5s)的采集数据。
中值滤波程序如下:
#defineN100//定义获得的数据个数
charfilter()
{
charvalue_buff[N];//定义存储数据的数组
charcount,i,j,temp;
intsum=0;
for(count=0;count{
value_buf[count]=get_data();
delay();//如果采集数据比较慢,那么就需要延时或中断
}
for(j=0;j{
for(i=0;i{
if(value_buff[i]>value_buff[i+1]
{
temp=value_buff[i];
value_buff[i]=value_buff[i+1];
value_buff[i+1]=temp;
}
}
}
for(count=10;contsum+=value[count];
return(char)(sum/(N-20));
}
3.AD采集程序
AD转换器AD977A与F2812是通过三线I/0接口连接,即读取/转换控制引脚R/C、数据引脚DATA、时钟引脚DCLK。
工作时,利用F2812片内定时器产生的中断,定时启动AD977A工作,设定为每5ms采样转换一次。
根据AD977A器件时序,用F2812控制这三线I/O接口的高低电平来驱动AD转换和读取数据。
当引脚R/C为高电平时,AD977A为读取转换数据模式;当引脚R/C为低电平时,AD977A进入模数转换模式。
F2812通过改变R/C引脚状态来控制AD977A完成信号采集和数据传输工作。
相关的数据采集程序如下:
#inelude”DSP28lx_Deviee.h”
#defineADC_RCGPioDataRegs.GPBDAT.bit.GPIOB0
#defineADC_DATAGPioDataRegs.GPBDAT.bit.GPIOB1
#defineADC_CLKGPioDataRegs.GPBDAT.bit.GPIOB2
longintData;
intmark=0;
//初始化I/O口
VoidInitIO(void)
{
EALLOW;
GPioMuxRegs.GPBMUX.all=0x0000;
GPioMuxRegs.GPBDIR.all=0x0005;
EDIS;
}
//读取AD977A的转换结果数据
intReadADC(void)
{
inti;
intresult=0;
ADC_CLK=0;
ADC_RC=1;
ADC_CLK=1;
for(i=0;i<16;i++)
{
result<<=1;
ADC_CLK=0;
if(ADC_DATA&&0x0001)
result|=0x0001;//读1
else
result&=0xFFFE;//读0
ADC_CLK=1;
}
return(result);
}
//设置定时器
voidInitTimer()
{
EvaRegs.GPTCONA.all=0;
EvaRegs.T1PR=0x03D0;//定时周期为5.12us*(T1PR+1)=0.005s
EvaRegs.T1CNT=0x0000;
EvaRegs.EVAIMRA.bit.T1PINT=1;
EvaRegs.EVAIFRA.bit.T1PINT=1;
EvaRegs.T1CON.all=0x1740;
}
//中断服务程序
interruptvoideva_timer1_isr(void)
{
mark=1;//修改标记
EvaRegs.EVAIMRA.bit.T1PINT=1;
EvaRegs.EVAIFRA.bit.T1PINT=1;
PieCtrlRegs.PIEACK.all=PIEACK_GROUP2;
}
voidmain(void)
{
······
InitIO();
ADC_RC=0;//启动ADC转换
InitTimer();//初始化定时器,打开定时器
······
for(;;)
{
······
if(mark==1)
{
mark=0;//修改标记
Data=ReadADC();//读AD977A转换数据
ADC_RC=0;//启动ADC转换
}
······
}
}
4.流量计算程序
AD采样值经过数字滤波后,DSP从EEPROM中读出流量系数后,先计算瞬时流量(L/min),在计算累计流量(m3/h)。
累计流量为1h(这个系统周期与前3599个系统周期)瞬时流量的累积和。
程序如下:
voidshunshi()
{
result_filter=result_filter>>16;//右移16位,相当于除以2^16
shunshi=result_filter*1000*C;//乘以满量程1000L/min和流量系数C
returnsunshiflow;
}
voidleiji()
{
leijiflow=sunshiflow*60/1000/3600+leiji*3599/3600;//注意单位换算
returnleijiflow;
}
voidoutprint()
{
switch(print_type)//选择显示方式:
瞬时流量/累计流量
{
case0:
print(sunshiflow);break;
case1:
print(leijiflow);break;
default:
print(error);break;
}
}