2 气压计的结构 本文研究的气压计结构如图1所示。其中气压传感器用来将被测气压转换为电压信号;用V/F转换器则可把气压传感器输出的电压信号转换成具有一定频率的脉冲信号;以便用单片机接收该脉冲信号,并根据单位时间内得到的脉冲数,依据电压与频率的线性关系式计算出所对应的气压值,最后在单片机控制下由LED显示出来。 本气压计能够在气压传感器的线性范围内准确测量相应气压值。需要说明的是,其测量值是绝对气压值。本文研究的气压计的技术指标如下: ●测量范围:300hPa~1050hPa; ●测量精度:0.1%FS(20℃); ●显示精度:0.1%,由4个8段LED显示实现; ●工作温度范围:0~85℃; ●电源电压:9V。
3 系统实现 在系统构建过程中,需要考虑稳定性、复杂程度、造价和调试的难易程度等因素。图1所示框图中的每一部分就是一个单元电路,可完成各自的功能。模块之间没有复杂的信号传输,且干扰很少,因而系统整体比较稳定。 3.1 气压传感器 气压传感器在气压计中占据核心位置。设计时可根据测量精度、测量范围、温度补偿、测量绝对气压值等几个性能指标来选取气压传感器。 由于该气压计显示的是绝对气压值,因而需要选取测量绝对气压值的气压传感器。同时为了简化电路,提高稳定性和抗干扰能力,要求该气压传感器应带有温度补偿。 为此,笔者选用Motorola的MAX4100A气压传感器来测量绝对气压值。该传感器的温度补偿范围为-40~+125℃;压力范围为20kPa~1050kPa;输出电压信号(Vs=5.0V)范围为0.3~4.65V;测量精度为0.1%VFSS,同时在20kPa~1050kPa时具有良好的线性,具体输出关系如下: Vout=Vs(0.01059 P-0.1528)±Error 式中,Vs是工作电压, P是大气压值,Vout为输出电压。 3.2 V/F变换 V/F器件的作用是将输入电压的幅值转换成频率与输入电压幅值成正比的脉冲串。虽然V/F本身还不能算做量化器,但加上定时器与计数器以后也可以实现A/D转换。它的突出特点就是把模拟电压转换成抗干扰能力强,可远距离传送并能直接输入计算机的脉冲串,从而通过测量V/F的输出频率来实现A/D转换功能。 考虑到外围电路实现的难易程度和相应的性能指标,笔者选用了LM331电压/频率转换芯片。该器件使用了温度补偿能隙基准电路,因而具有极佳的温度稳定性,最大温漂为50ppm/℃,同时该器件的脉冲输出可与任何逻辑形式兼容;LM331可单、双电源供电,电压范围为5~40V;满量程范围1Hz~100kHz;最大非线性误差为0.01%。图2所示是该系统中LM331的外围电路。在该电路中,基于LM331的压频转换关系为: fo=K Vi 其中,K=Rs/(2.09 Rt Ct RL)?, Rs=Rs1+Rs2 实际上,电路中的Rs主要用于调节电路的转换增益?Rt, Ct,RL的典型值分别为6.8kΩ、0.01pF和100kΩ,K值则可由设计者自己决定。该设计中,取K=2000,Rs=28.424 kΩ?主要是考虑到单片机部分使用测频率法来测fo能够保证频率信号的测量精度。由于Rs、RL、Rt和电容Ct会直接影响fo的转换结果。因此,对这些元件的参数有一定的要求,设计时应根据转换精度适当选择。电容CL对转换结果虽然没有直接影响,但是应选择漏电流小的电容器。用电阻R1, 电容C1组成低通滤波器,可减少输入电压中的干扰脉冲,提高转换精度。
图3 3.3 单片机
4 软件实现 通过以上设计,便可通过fo来计算P的大小以得到实时的气压值。硬件电路设计完成之后,可使用AEDK5196PH仿真器的仿真环境进行仿真,并可用C51语言来编写处理程序。其基本程序流程如图4所示。 程序设定:T0为定时器,基本的定时时基为50ms。T1为计数器,运用内部中断0可保证T0定时满500 ms后就读取此时计数器的值,以计算气压值。如使T1、T0均工作于方式1,并在P1口送字型码,同时可用P3.0~P3.3做位选线,那么,其相应的函数如下: (1)定时器T0中断函数: void timer0(void) interrupt 1 using 1 {uint x, y; uint count_ pluse; ET0=0; //关闭T/C0中断 Tcount++; //中断次数 if?Tcount == 10){ TR1=0; //停止计数器计数 Tcount=0; x=TH1; y=TL1; count_pulse=(x*256+y)*2; ph=(uint)(10 * ((float)(count pulse+1520)/105.9? ?? //计算气压值 TH1 = 0x00; //重设计数初值 TL1=0x00; } TH0 = -50000/256; //重设50ms初值 TL0 = -50000%256; if(TL0!= 0) TH0--; ET0=1; TR1=1; return; } 该中断函数主要用于完成脉冲的读取和气压值的计算。ph是个全局变量,可用来保存气压值。 (2)在显示函数里,将气压值先按位进行分离并保存到数组,然后送段码和相应位选就可以显示出相应的气压值了。具体程序如下: void display(uint ph_in) { uchar i=0; uchar j=0; uchar select_bit=0; //位选 do { cur_buf[i]=ph_in%10; i++; j=i; }while(ph_in=ph_in/10);? //当高位为零时?结束循环 i=0; select_bit=0xfe; do { P1=tab[*p]; P3=select_bit; dl_ms();? select_bit=(select bit<<1)+1; //从最右边一位开始显示,循环左移 p++; i++; }while(i<j); p=cur_buf; //指针归位 return;} 这样,在主程序中,只要在程序第一次运行时进行初始化,然后再循环调用显示函数即可实现实时显示功能。 5 结束语 笔者曾用纯硬件电路设计过气压计。实践表明,由于受温度的影响及硬件参数的限制,实时显示时稳定性较差,并且精确度不高。而改用V/F变换信号及编程的方法实现该测量则完全克服了上述缺点。结果表明:该方法具有精度高、稳定性好、功能易于扩展等优点,可为仪器及电子产品设计提供一种新的思路。