采用DS18B20作温度补偿的超声波液位计 摘要:介绍一种利用 DS18B20 温度传感器作温度补偿实现超声波液位计的设计方案,在分析超声波测量液位的误差来源之后,详细介绍了系统硬件和软件的设计方法。实验结果表明,本测量方案工作稳定,性能良好,较之以往的测量方案有许多优点。 超声液位测量具有响应时间短、连续液位测量、实时性强等优点,在水利、气象和环保领域有广泛的应用,但是其测量结果受温度的影响大,必须采用温度补偿。温度补偿的方法很多,传统的补偿方案有许多不足之处,本研究采用了一种简洁且实用的温度补偿方案,实现了超声波液位计的准确测量。 1 超声波液位测量与温度补偿 1.1超声波液位计的测量原理 本液位计采用时差法测量原理,由单片机控制超声传感器连续发射超声波进行液位测量,计算公式如下L = H–V ×T / 2 式中,L 为液位高度;V 为超声波在空气中的传播速度;T 为超声波渡越时间;H 为超声传感器至液体容器底面的总距离。 1.2 温度补偿的必要性 超声波是一种声波,它的传播速度受空气密度的影响,密度越大,传播速度越快,而空气密度和温度有密切关系,所以温度变化时,声速也变化,导致测量不准确。超声波传播速度和温度有如下近似的关系V =331.5 + 0.607 × T (℃) 当温度为 20 ℃时,V=344 m/s ,当温度为 30 ℃时,V=350m/s,声速变化为 6 m/s。设超声波传播距离 S=1 m,若在 30℃以 20 ℃的声速进行测量时,误差达到 3.5 cm。可见要实现高精度的液位测量,必须对声速进行温度补偿。常用的测温补偿方法有:热敏电阻,铂电阻,热电偶以及IC 温度传感器补偿。使用传统的温度传感器,硬件电路复杂,而且输出为电压或是电流值,需要进行 A/D 转换。DS18B20 是 DALLAS 公司推出的数字式单总线温度传感器,硬件接口电路简单,分辨率可达到 0.062 5 ℃,能很好地补偿超声波在不同温度时的传播速度,从而保证了液位测量的精度。 2 用 DS18B20 实现温度补偿的方案 DS18B20 是单总线数字式温度传感器,分辨率可编程,分为 9 位、10 位、11 位和 12 位,测温范围是-55~+125 ℃,在-10~+85 ℃,准确度为±0.5 ℃,允许用户进行高低温报警设定。下面说明其操作方法。 (1)DS18B20 的引脚图与接线方法。 图 1 中,(a)为 TO-92 型封装的 DS18B20 的引脚图,其引脚:GND 为地;VDD 为电源;DQ 为数据输入/输出端。(b)为DS18B20 的典型接线图,就两种方式相比较而言,(1)寄生电源工作方式少用一根导线,但它完成温度测量所需的时间较长,而外部电源方式测量速度较快,工作可靠,推荐使用(2)外接电源工作方式。 (2)DS18B20 的读写。 DS18B20 遵 循 典 型 的1—Wire 总线读写时序:第一步初始化→第二步ROM 命令→第三步 DS18B20功能命令。 每次对 DS18B20 进行操作的时候必须严格按照上述时序,任何的步骤遗漏或者颠倒,DS18B20 都不会响应。但是搜索 ROM(F0H)和报警搜索(ECH)两个命令例外,在执行了这些命令后操作时序必须回第一步。DS18B20 对时序要求严格,程序一般用汇编语言编写;采用 C51 语言编程时最好使用定时器延时或是调用内部库函数_nop_( )来延时。DS18B20 的时序图以及部分程序可从数据手册上获得。 3 液位计的硬件结构 本超声波液位计的硬件框图如图 2 所示。整个电路分为一次电路部分和二次电路部分,一次部分包括超声波传感器、收发电路、测温电路及回波处理电路;二次部分为键盘和显示部分。AT89C2051 控制 NE555时基电路产生 40 kHz 方波,经 MOSFET 功率放大,驱动超声传感器发射超声波,超声波传感器型号为 T/R40-16;经液面反射回来的微弱信号由 CA3140 组成的二级交流运放放大后,通过检波电路和比较器产生一个下降沿,接入外部中断 INT0, 产生中断后,计数器停止计数,得到时间差;同时读取 DS18B20 所测得的温度,根据此温度修正声速,计算得到液位值。对此数值进行滤波处理,每 8 次数据排序,去掉最大和最小值,取中间 6 个数据求平均值,和温度数值一起送给二次部分 CPU,二次部分根据总距离H 计算液位值并负责显示。 串行通信电路的功能是把采集到的有效的液位信号和温度信号传送给二次部分,并接收其发送的联络命令。在这里利用 MAXIM 公司的芯片 MAX485 将 TTL 电平转为 RS485 电平。采用 RS485 通信接口数据传送距离远,便于实现远程监测。
4 软件编程 图 3 为液位计软件流程图 DS18B20 测量子程序及液位计主程序: #include #include #include /* enable the MCS51 instruction */ #define uchar unsigned char /*cpu P1^3 => DS18B20 data wire */ sbit DQ = P1^3; //DS18B20 初始化程序 // reset, return presence, if ready,presence=0 uchar ds_reset(void) { uchar presence; DQ = 0; _nop_(); //begin to reset delay5(96); //maintain DQ=0 for 480 μs DQ = 1; delay5(9) ; //wait for the presence presence = DQ; //get presence signal delay5(75); return(presence); //return the presence information // if has reply ,presence=0 // if not ,presence=1 } 液位计一次部分主程序: void main(void) { iniate(); //主程序初始化 comtest (); while (1) { transwv (); recwv (); //等待回波,出口为时间值 gettp(); //启动 DS18B20,获取温度 deal(); //计算声速和液位值 outdata(); //将温度和液位数据从串行口输出 } } 5 实验结果 实验结果如表 1 所示,温度条件(t =15 ℃)。
从表 1 可以看出,在补偿前所测的液位数据明显偏大,原因是没有进行声速补偿,采用的声速为 t =25 ℃ 时的值;采用DS18B20 补偿温度后,该液位计在 0.2~3 m 的有效范围内误差小于 0.5%FS,完全能够满足一般工程和环境监测部门的需求。 (责任编辑:admin) |