李朝阳
(仲恺农业工程学院,广东广州 510550)
水是人类生命的源泉,身体健康需要保持良好的饮水习惯。然而,现代社会中,越来越多的人因为工作、学习等原因,常常忽视了饮水的重要性,导致身体出现脱水、口渴等症状,不利于身体健康。
为了解决这个问题,饮水量计量装置应运而生,可以测量人体摄入水分量,帮助人们更好地掌握自己的饮水量。随着现代人生活方式的改变,越来越多的人开始注重健康饮食和身体健康,因此饮水量计量装置的需求也越来越高。
HX711 是24 位A/D 转换器芯片,西安外事学院工学院汪显卫[1]、无锡商业职业技术学院物联网学院王小娟[2]、北京信息科技大学于飞[3]、中国电子科技集团公司第三十八研究所刘磊[4]、杭州职业技术学院信息工程学院葛海江[5]等,对HX711 进行研究分析并设计电子秤,武汉交通职业学院商林就精度与稳定性进行了实践[6]。
笔者在前人的基础上,设计了一种基于HX711的带记忆功能的饮水量计量装置,能够计量单次饮水量、饮水次数、总饮水量,并且用液晶显示,方便用户随时查看饮水量。
图1 总体设计
计量装置主要由悬臂梁、形变电阻桥式电路、HX711模数转换电路、STC89C52控制器、液晶显示电路、按键输入电路、DS1302 时钟电路等构成,如图1所示。
供电电路如图2所示,将+9V ~+12V电压转换成5V 电压,为单片机最小系统电路、液晶显示电路供电。
图2 供电电路
形变电阻桥式电路将应变计电阻变化转化为电压或电流的电信号,如图3所示,以电阻应变计作为桥臂组成电桥电路,当有重物放置到秤盘上时,桥臂发生弯曲,弯曲程度与放置物重量有关,电阻应变器感应到相应的信号后,输出微弱的电压信号。
图3 形变电阻桥式电路
基于HX711的模数转换电路如图4所示,电路将形变电阻桥式电路微弱电信号放大,并转变为数字信号,再传递给控制器。HX711 芯片具有集成度高、响应速度快、抗干扰性强等优点,芯片内部集成稳压电路,可直接供电于芯片内部连接的传感器和A/D 转换器。此外,时钟振荡器也被集成在芯片内部,不需要额外的外接设备。另外,芯片内部已整合上电自动复位电路,使开机初态的设定变得简单化。该器件中有通过输入选择开关随意选择信道A 或信道B 来完成信号放大的低噪声可编程放大器。连接可编程放大器,内部噪声小。可编程增益为128 或64 的通道A,分别对应±20mV 或±40mV 输入信号幅值的满量程差分。B 通道增益定值64,可检测系统参数[7]。
该芯片与后端MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无须对芯片内部的寄存器编程。HX711 是一款电子秤专用的高精度24位A/D 转换器芯片,可以降低电子秤的整机成本,提高整机的性能和可靠性。
图4 模数转换电路
单片机最小系统电路如图5,由晶振电路、复位电路、片外存储器选择电路构成。
表1 HX711芯片引脚
图5 单片机最小系统电路
DS1302 是美国DALLAS 公司低功耗实时时钟芯片,具有涓细电流充电能力,DS1302 时钟电路如图6所示。它可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。
图6 DS1302时钟电路
液晶显示电路如图7所示。LCD1602液晶内部控制器HD44780 是一款点阵式液晶显示控制器,接收STC89C52单片机控制器的指令、数据后,根据指令显示数据。
图7 液晶显示电路
按键电路如图8 所示,有三个独立按键K1、K2、K3,按下不同按键,STC89C52单片机控制器执行相应操作。
图8 按键电路
主函数主要是进行变量初始化、调用模数转换函数、采集当前称重值、调用液晶显示函数、调用FLASH存储函数,流程图如图9所示。
程序开始,进行液晶初始化、变量初始化,调用模数转换程序,读取当前称重值b0;调用时钟函数,读取当前时间;调用液晶显示函数,显示当前时间年月日时分秒、称重值、单次饮水量、饮水次数、总饮水量。按下K2,调用模数转换程序,读取当前称重值b1,b1减去b0为当前称重值。按下K3,调用模数转换程序,读取当前称重值b2,b2减去b0,为当前称重值。
饮水后,将水杯放在装置上,按下K3,STC89C52记录此时的称重值b3,饮水次数加1,计算出本次饮水量(b3-b2)、总饮水量,保存到FLASH。
图9 流程图
要使X711 芯片与单片机进行通信,需要使用PD_SCK 时钟引脚和Dout引脚进行数据输出。另外,输入通道选择也是有必要的。如果输出数据的管脚DOUT 是高电平,说明A/D 转换器还没有做好输出数据的准备。这时,串口时钟输入信号PD_SCK 要保持低电平状态。当Dout 从高电平变成低电平时,PD_SCK 需要输入25 到27 个不同的时钟脉冲。当第一个时钟脉冲上升沿发生时,会读出输出的最高位数据(即MSB),并将24 位数据逐位输出,从最高位(MSB)到最低位(MSB),直至第24 个脉冲完成。用于在接下来的A/D 转换中选择输入通道和增益的是第25 至27 个时钟脉冲[7]。
读取HX711 芯片,首先初始化引脚,然后数据引脚拉高,延时一段时间后,将时钟引脚拉低,等待AD转换结束,然后开始读取数据。接下来循环24次数据接收,在第25个脉冲将数据异或转换,并拉低时钟引脚结束AD 转换。模数转换函数HX711_Read(),读取24位数据,返回主函数:
通过形变电阻桥式电路获得的电信号,在外界因素干扰项,掺杂很多别的信号,比如磁场、抖动、空气流动之类的自然的或人为不可避免的信号。为了过滤干扰信号,采用了递推中位值平均滤波法。连续采集,对采集到的数据进行排序,选取其中的中位值作为滤波后的值,达到平滑信号的目的。该算法能有效地克服因偶然因素引起的波动干扰,使测得的数据更为准确。
液晶显示函数LCD_display(),显示当前重量、单次饮水量、饮水次数、总饮水量。
DS1302 时钟读取函数DS1302_read(),读取当前时间。
内部FLASH 存储空间读取函数FLASH_read()、FLASH_eraser()、FLASH_write(),分别完成存储空间读取、擦除、写入功能。
我们通过实验验证饮水量计量装置。连续几次按下K2、K3计算饮水次数、每次饮水量、总饮水量。
图10 装置工作过程
装置工作过程如图10所示:
1)装置通电
装置通电前,装置悬臂梁上面不能放置任何物品。通电后,STC89C52 调用模数转换函数HX711_Read(),并记录此时的称重值b0。如果需要饮水次数和总饮水量清空,请按下K1,此时液晶界面,称重值、饮水次数、总饮水量为0。液晶第一行显示时间5月1日10点30分,实时称重值0,第二行饮水次数0、本次饮水量0,总饮水量0。
图11 装置通电液晶显示
2)水杯装水放在装置上,实时称重值537
3)饮水
饮水前,水杯需要放在装置上,按下K2,STC89C52 记录此时的称重值b1。端起杯子饮水,此时实时称重值为0。
饮水后,将水杯放在装置上,按下K3,STC89C52记录此时的称重值b3,饮水次数加1,计算出本次饮水量(b3-b2)、总饮水量,保存到FLASH。
4)重复饮水动作
5)加水
6)重复饮水动作
7)重复饮水动作
此时实时称重值、饮水次数、本次饮水量、总饮水量,显示在液晶界面,实时称重值432g,饮水次数4,本次饮水量63g,总饮水量257g。
图12 运行过程液晶显示
随着现代人生活方式的改变,越来越多的人开始注重健康饮食和身体健康,因此饮水量计量装置的需求也越来越高。
用24 位高精度AD 数模转换芯片HX711 设计的带记忆功能的饮水量计量装置,可以实时准确计量饮水次数、每次饮水量、每天饮水总量。同时本装置有记忆功能,数据保存在FLASH 存储空间,平时不用可以关闭电源,下次打开从FLASH存储空间读取饮水次数、每次饮水量、饮水总量数据,具备节能绿色环保。本装置帮助人们更好地掌握自己的饮水量,为健康提供更好的指导和帮助,促进身体健康。