0 引言
随着科学技术的进步,单片机及相关电子技术飞速发展,应用领域不断拓展。利用单片机和传感器实现对重量的高精度测量,提高了生产的自动化程度,成本低廉,应用十分广泛。
1 系统组成
系统由单片机系统、称重传感器、A/D转换、通信接口和语音提示模块组成,硬件结构框图如图1。
1.1 单片机系统
系统采用AT89S52作为控制核心,配备键盘、液晶显示电路和扬声器。
AT89S52是Atmel公司新推出的一种低功耗、高性能CMOS 8位微控制器,它具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。其性能完全可以满足系统的要求。
液晶显示采用OCMJ4X8A液晶显示屏,它内带汉字字库,可以方便地显示汉字及图形;可以同时显示4行8列个单元,可以一次显示系统所有状态信息;显示的内容不需要刷新,节省了单片机的资源;电路结构简单,便于控制,功耗低。键盘用于输入预置信息,扬声器用于发出语音提示和超重报警。
1.2 称重传感器
系统采用悬臂梁式称重传感器。该传感器量程30kg;弹性体为弯曲悬臂梁结构,外形高度低,结构强度高;用于拉伸力或压缩力测量,抗偏、抗侧向力强;防尘密封,精度高,性能稳定可靠,安装使用方便。传感器外形如图2所示,单位:mm。
此传感器为电阻应变式称重传感器,它的主要组成部分有电阻应变片、弹性体和检测电路。工作原理:弹性体在外力作用下产生弹性变形,使粘贴在其表面的电阻应变片也随之产生变形,电阻应变片变形后,它的阻值将发生变化,再经相应的测量电路把这一电阻变化转换为电压,从而完成将外力变换为电信号的过程。其中,电阻应变片是把一根电阻丝机械地分布在一块有机材料制成的基底上,即成为一片应变片;弹性体是一个有特殊形状的结构件,它的功能有两个:首先是它承受称重传感器所受的外力,对外力产生反作用力,达到相对静平衡;其次,它要产生一个高品质的应变场,使粘贴在此区的电阻应变片比较理想地完成应变电信号的转换任务;检测电路采用全桥式等臂电桥把电阻应变片的电阻变化转变为电压输出。
1.3 高精度A/D转换
称重传感器的输出为mV级的微弱信号,传统的测量方法是在A/D转换之前加一级高精度的放大器,电路复杂。AD7714是美国Analog Devices(AD)公司推出的24-位ADC家族AD771X系列中的新品,适用于低频、高精度工业级转换。该器件具有完整的模拟前端,可以直接测量传感器输出的直流微弱信号,转换精度达到24位无误码。采用三线串行口与微控制器连接,通过软件编程可以对增益、信号极性、输入通道作出设置。该芯片具有自校准、系统校准和背景校准功能,可以消除零点误差、满量程误差及温度漂移的影响。
1.4 通信接口
将单片机采集的重量数据传输到上位机,利用单片机的RXD,TXD接口连接到RS232串行口接收或发送数据和指令,但是单片机的TTL电平和RS232不兼容,因此使用了MAX232进行电平转换,其连接线图如图3所示。
1.5 语音提示模块
语音提示由ISD1400芯片控制,它有20秒的录放时间。预先将0~9、点、十、百、千克、克的语音存入ISD1400,单片机将实际测量的重量值通过该语音芯片经由扬声器发出。
2 软件设计
2.1 单片机软件编程
对于51系列单片机,目前常用的语言有汇编和单片机C语言。本系统下位机软件采用Keil C51程序编写。主要由主程序、读取重量子程序、键盘扫描和液晶显示子程序、语音提示子程序、串口发送和接收子程序等部分组成。流程图如图4所示。
读取重力量程序功能。启动A/D转换,将称重传感器测量的重量值转换成数字信号并读取到单片机内部。
串口发送和接收子程序功能。完成下位机和上位机的通信。单片机读取的温度和湿度值通过发送子程序发送给上位机并等待命令,收到命令后再继续进行测量。接收子程序通过接收上位机传输的命令进行系统自检、参数修正等。上位机的命令发送采用间隔10ms反复发送的方式,直到单片机将接收到的命令返回为止。如在 1s内单片机没有响应,则设置超时,系统复位单片机。
2.2 上位机软件编程
本系统采用MSComm控件实现VB与单片机之间的数据交换,具有程序实现简便,程序模块化,工作可靠等优点,并能满足多数情况下的工控要求。使用MSComm控件主要是通过事件来处理串行口的交互。控件的OnComm事件负责捕获或处理这些通讯事件和通讯错误。
2.2.1 MSCOMM属性设置
MSComml.CommPort=1 '设置端口1
MSComml.Settings="2400,N,8,1" '2400 b/s,无校验,8位数据位,1位停止位
MSComml.InputLen=1 '一次从缓冲区中接收一个字节
MSComml.InBufferSize=1024 '接口收缓冲区大小
MSComml.PortOpen=Ture '打开端口
MSComml.Rthreshold=1 '接收一个字节触发一次ONCOMM事件
2.2.2 ONCOMM事件响应程序
Private Sub MSComml_OnComm()
Dim buffer As Variant '由缓冲区接收到的数据用Variant格式接收
Dim arr()As Byte '定义二进制数组
Dim i As Integer
Dim receivester As string '定义输出到接收文本框中的字符变量
'下段程序是comEvReceive事件触发后,将数据存入相应的数组,并在接收文本框中显示
Select Case MSComml.CommEvent CasecomEvReceive buffer="MSComml".Inpute
arr=buffer接收缓冲区内数据variant变量内
arr=buffer '转换为二进制数并送入相应数组
For i="1to8"
receivester arr(i)
Text1.Text=Text1.Text&receiverstr&"."
'在接收框中显示文本
Next i
End Select
End Sub
3 结束语
本重量测量系统,充分发挥了AT89S52单片机强大的控制能力和计算机的数据处理能力,通过称重传感器和24位分辨率的A/D转换器实现了对重量的高精度测量。系统在电子秤的实际应用中收到了满意的效果。