基于压力传感器的水位报警器.docx
- 文档编号:25853530
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:31
- 大小:649.51KB
基于压力传感器的水位报警器.docx
《基于压力传感器的水位报警器.docx》由会员分享,可在线阅读,更多相关《基于压力传感器的水位报警器.docx(31页珍藏版)》请在冰豆网上搜索。
基于压力传感器的水位报警器
2016年测控专业创新实践
第二届自动化与电气工程学院仪器仪表设计竞赛
设计报告
设计题目:
基于压力传感器的水位控制报警器
队伍编号:
323
队员姓名:
陈昊、吴天剑、张赟、董嘉仪
年月日
摘要
控制器 单片机,液位控制高度,报警、高度显示等功能,主要元器件时应变片,使其附着在容器外壁,使其具有与液面不接触的特点,可用于有毒、腐蚀性液体液位的控制,具有较高的研究价值。
该控制器不仅可用于学校进行教学研究,还可用于生产实际,是目前比较缺少的一种产品。
由物理学原理可知,液体的压力是与液体的高度有关系的,当液体的高度越高,底部所受的压力也就越大,即P=ρhg,所以我们可以通过底部所受的压力来获取液面的高度,因此我们可以添加一个压力传感器,也就是常用的应变片,获取与液体地面所受的压力,由于应变片输出的电压量非常小,所以我们必须加放大器来将电压量变大,来提高他的灵敏度,由于单片机只能读取数字信号,而我们应变片输出的是模拟信号,所以得添加一个模数转换芯片来实现单片机对数据的读取,而后通过单片机实现对蜂鸣器和led报警灯的控制,实现液位报警,后期还可以在单片机的其他引脚添加点击可以实现自动的控制水位的高度,因为能力和时间有限,这里只做到报警,所以该作品还能继续改进,功能还能拓展。
关键词:
传感器;AD转换;控制器;外围硬件电路
1.系统方案设计1
1.1课题分析1
1.1.1设计目的1
1.1.2液位的获取1
1.2总体方案设计1
1.2.1系统框图1
1.2.1总体设计实现1
2.硬件设计2
2.1主要元器件原理2
2.1.1AT89C512
2.1.2应变片3
2.1.3模数转换芯片HX7115
2.1.4显示屏LCD16027
3.软件设计8
3.1主程序流程图8
3.2子程序流程图9
3.3仿真电路图11
4.实验结果12
5.设计心得14
参考文献15
附录A16
附录B17
附录C18
1.系统方案设计
1.1课题分析
1.1.1设计目的
运用目前所学的知识,设计一款可以实现无人监督的,液位报警器,利用51单片机,模数转换芯片,仪用放大器等元器件,运用自己所学的单片机技术,与模电技术等知识来实现目的,利用这次活动来是自己的所学的知识得到运用,加深所学的知识在脑海里的印象,并且可以通过实现来检验自己在课上所学的知识,对自己也是很大的锻炼。
1.1.2液位的获取
方案一:
采用浮子获取液位,通过杠杆和浮子的链接可以实现对变阻器的控制,来获取不同的电压值,后传输到单片机。
方案二:
通过对液体的压力会随高度的改变而改变,故可以在底部添加应变片来获取压力来获取液面的高度。
由于方案一会对场地要求比较大所以不方便选择,于是选择方案二
同时液位的显示也可以采用1602或者数码管,两者都可以做到,但都有利弊,可酌情选择。
1.2总体方案设计
1.2.1系统框图
AT89C51单片机
模数
转换器
应变片
蜂鸣器
显示屏
图1系统框图
1.2.2总体设计实现
将水箱放到应变片上,随着水位上升,总体重量也随之上升。
通过其按压应变片产生的微小变化,来测定重量。
通过模数转换器将模拟量转换成数字量并送到单片机中处理,然后根据其体积与高度的关系,进而来测定水位高度,显示在显示屏上,到一定高度通过蜂鸣器实现报警。
2.硬件设计
2.1主要元器件原理
2.1.1AT89C51
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器俗称单片机。
AT89C51提供以下标准功能:
4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
如图2所示。
图2AT89C51内部结构
图3AT89C51实物图
2.1.2应变片
一般的应变片是在称为基底的塑料薄膜(15-16μm)上贴上由薄金属箔材料制成的敏感栅(3-6μm),然后再覆盖上一层薄膜做成迭层构造。
图4应变片模型
将应变片贴在被测物上,使其随着被测定物的应变一起伸缩,这样里面的金属箔材就随着应变一起伸长或缩短。
很多金属在机械性的伸长或缩短时其电阻会随之变化。
应变片就是应用这个原理,通过测量电阻的变化而对应变进行测定。
一般应变片的敏感栅使用的是铜铬合金,其电阻变化率为常数,与应变成正比例关系。
即:
其中,R:
应变片原电阻值
K:
比例常数(应变片常数)
Ε:
应变
不同的金属材料有不同的比例常数K。
铜铬合金的K值约为2,这样应变的测量就通过应变片转换为对电阻变化的测量。
表1应变片的参数
量程(kg)
3,15
综合误差(%F.S)
0.05
额定输出温度漂移(%F.S/10℃)
<=0.15
灵敏度(mv/v)
1.0±0.1
零点输出(mv/v)
±0.1
非线性(%F.S)
0.05
输入电阻(Ω)
1000±50
重复性(%F.S)
0.05
输入电阻(Ω)
1000±50
滞后(%F.S)
0.05
绝缘电阻(MΩ)
>=2000
蠕变(%F.S/3min)
0.05
推荐激励电压(v)
5-10
零点漂移(%F.S/1min)
0.05
工作温度范围(℃)
-10~+50
零点温度漂移(%F.S/10℃)
0.2
过载能力(%F.S)
150
2.1.3模数转换芯片hx711
hx711采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24位A/D转换器芯片。
与同类型其他芯片相比,改芯片与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。
降低了电子秤的整机成本,提高了整机的性能和可靠性。
特点:
• 两路可选择差分输入
• 片内低噪声可编程放大器,可选增益为64和128
• 片内稳压电路可直接向外部传感器和芯片内A/D转换器提供电源
• 片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟
• 上电自动复位电路
• 简单的数字控制和串口通讯:
所有控制由管脚输入,芯片内寄存器无需编程
• 可选择10Hz或80Hz的输出数据速率
• 同步抑制50Hz和60Hz的电源干扰
• 耗电量(含稳压电源电路):
典型工作电流:
< 1.7mA, 断电电流:
< 1µA
• 工作电压范围:
2.6 ~ 5.5V
• 工作温度范围:
-20 ~ +85℃
• 16管脚的SOP-16封装
图5SOP-61L封装
表2管脚描述
注意事项
1.所有数字输入管脚,包括RATE,XI和PD_SCK管脚,芯片内均无内置拉高或拉低电阻。
这些管脚在使用时不应悬空。
2.建议使用通道A与传感器相连,作为小信号输入通道;通道B用于系统参数检测,如电池电压检测。
3.建议使用PNP管S8550与片内稳压电源电路配合。
也可根据需要使用其他MOS或双极晶体管,但应注意稳压电源的稳定性。
4.无论是采用片内稳压电源或系统上其他电源,建议传感器和A/D转换器使用同一模拟供电电源。
5.PD_SCK的输入时钟脉冲数不应少于25或多于27,否则会造成串口通讯错误。
2.1.4显示屏LCD1602
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。
本次设计采用16脚。
图61602字符型液晶显示器实物
3.软件设计
3.1主程序流程图
开始,AD转换器及显示器初始化,将数据送到AD转换器,之后判断AD转换是否完成,若完成则进行十进制转换调整,并输出。
如图7所示。
图7主程序流程图
3.2子程序流程图
十进制数据转换调整子程序流程图如图8所示
图8十进制数据转换调整子程序流程图
A/D转换流程图:
启动转换,若转换结束则读取数据。
如图9所示
图9A/D转换流程图
3.3仿真电路图
protel仿真电路如图10,图11所示
图10仿真电路图
(1)
图11仿真电路图
(2)
4.实验结果
当水位高度为5时,显示屏上显示501;水位达到12之后,由于应变片出现非线性的变化,所以显示的示数有一定误差;水位到达15之后,蜂鸣器开始报警。
图12水位高度为5
图13水位过限报警
5.设计心得
通过本次设计,主要掌握了以下几个方面的知识:
首先是各个芯片的功能和结构,其次是更加熟练的掌握了单片机方面的编程与调试。
作为一个学生,发现我们掌握的知识是多么的疏浅,很多东西都是要重新拾起课本学习。
另外自己钻研精神还不够,只想在一天之内得到满意的实验结果,不能沉下心一点点调试。
现在想起来很惭愧,在设计的过程中发现了自己的不足之处,比如编程问题,仿真图形的连接和怎样去调试。
经过这次设计实验,我收获了很多,除了一些新的知识外,还有就是一些新的领悟。
例如做事情时不能太急功近利,要注重过程,要能够静下心来做一件事情。
这次设计实验还验证了一个真理:
实践出真知。
通过自己亲手搜集资料、编程、仿真、调试、查错,整个过程下来虽然遇到过很多困难,但经过思考后的豁然开朗,以及对原有知识的更深层次的理解,是仅仅靠死读课本所学不来的。
参考文献
[1]刘军.单片机原理与接口技术.华东理工大学出版社
[2]柳春.Protel99se实用教程.高等教育出版社
[3]陈杰.传感器与检测技术.高等教育出版社
附录A
元器件清单
组别
器件名称
器件型号
个数
单片机最小系统
AT89c51
1
单片机最小系统(备用)
1
电阻包
2k2个,8k2个,10k4个
蜂鸣器
1
电位器
4.7k、10k
2
仪用放大器
1
三极管包
1
单片机
89c51
2
AD转换器
HX711
1
排阻
9脚
1
数码管
4位
若干
LED显示灯
1
应变片
2
显示器
1602
1
附录B
基于压力传感器的水位控制报警器的实物图如下图所示:
图1实物图
附录C
#include"main.h"
#include"HX711.h"
#include"uart.h"
#include"LCD1602.h"
#defineucharunsignedchar
#defineuintunsignedint
unsignedlongHX711_Buffer=0;
unsignedlongWeight_Maopi=0;
longWeight_Shiwu=0;
unsignedcharflag=0;
bitFlag_ERROR=0;
#if1
sbitBEEP=P2^0;
#endif
uintGapValue=716;
ucharflag2;
sbitsda_24c16=P3^1;
sbitscl_24c16=P3^0;
voiddisplay_weight();
voiddelay_3us();
voidup_Key();
voiddown_Key();
voidnack_24c16();
voidstop_24c16();
voidstar_24c16();
voidcack_24c16();
voidmack_24c16();
voidw1byte_24c16(ucharbyte1);
ucharrd1byte_24c16(void);
voidread_24c16();
voidwrite_24c16();
voidmain()
{
Uart_Init();
Send_Word("Welcometouse!
\n");
Send_Word("Madeby!
\n");
Init_LCD1602();
LCD1602_write_com(0x80);
//LCD1602_write_word("Welcometouse!
");
LCD1602_write_word("yeweixianshi");
Delay_ms(2000);
read_24c16();
Get_Maopi();
while
(1)
{
EA=0;
Get_Weight();
EA=1;
Scan_Key();
up_Key();
down_Key();
if(Flag_ERROR==1)
{
Send_Word("ERROR\n");
LCD1602_write_com(0x80+0x40);
LCD1602_write_word("waring");
}
else
{
display_weight();
}
}
}
//扫描按键
voidup_Key()
{
if(up_key==0)
{
Delay_ms(5);
while(up_key==0)
{
GapValue++;
Get_Weight();
display_weight();
}
write_24c16();
}
}
//减小键
voiddown_Key()
{
if(down_key==0)
{
Delay_ms(5);
while(down_key==0)
{
GapValue--;
Get_Weight();
display_weight();
}
write_24c16();
}
}
voiddisplay_weight()
{
Send_ASCII(Weight_Shiwu/1000+0X30);
Send_ASCII(Weight_Shiwu%1000/100+0X30);
Send_ASCII(Weight_Shiwu%100/10+0X30);
Send_ASCII(Weight_Shiwu%10+0X30);
Send_Word("10um\n");
LCD1602_write_com(0x80+0x40);
LCD1602_write_data(Weight_Shiwu*3/1000+0X30);
LCD1602_write_data(Weight_Shiwu*3%1000/100+0X30);
LCD1602_write_data(Weight_Shiwu*3%100/10+0X30);
LCD1602_write_data(Weight_Shiwu*3%10+0X30);
LCD1602_write_word("10u");
//下面5行显示的是校准参数,如果不显示直接删除下面5行
LCD1602_write_com(0x80+0x40+8);
LCD1602_write_data(GapValue/1000+0X30);
LCD1602_write_data(GapValue%1000/100+0X30);
LCD1602_write_data(GapValue%100/10+0X30);
LCD1602_write_data(GapValue%10+0X30);
}
//扫描按键
voidScan_Key()
{
if(KEY1==0)
{
Delay_ms(5);
if(KEY1==0)
{
while(KEY1==0);
Get_Maopi();
}
}
}
voidGet_Weight()
{
Weight_Shiwu=HX711_Read();
Weight_Shiwu=Weight_Shiwu-Weight_Maopi;
if(Weight_Shiwu>0)
{
Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/GapValue);
if(Weight_Shiwu*3>1500)
{
Flag_ERROR=1;
BEEP=0;
}
else
{
Flag_ERROR=0;
BEEP=1;
}
}
else
{
Weight_Shiwu=0;
}
}
voidGet_Maopi()
{
Weight_Maopi=HX711_Read();
}
voidDelay_ms(unsignedintn)
{
unsignedinti,j;
for(i=0;i for(j=0;j<123;j++); } voiddelay_3us() { ; ; } voidnack_24c16() { sda_24c16=1; delay_3us(); delay_3us(); scl_24c16=1; delay_3us(); delay_3us(); scl_24c16=0; sda_24c16=0; } voidstop_24c16() { sda_24c16=0; scl_24c16=1; delay_3us(); delay_3us(); sda_24c16=1; delay_3us(); delay_3us(); scl_24c16=0; } voidstar_24c16() { sda_24c16=1; scl_24c16=1; delay_3us(); delay_3us(); sda_24c16=0; delay_3us(); delay_3us(); scl_24c16=0; } //**************************************************** //功能: 判断应答或非应答 //说明: 通讯出错时标志为1,否则为0 voidcack_24c16() { scl_24c16=0; sda_24c16=1; delay_3us(); scl_24c16=1; flag2=0;//清除错误标志 if(sda_24c16)flag2=1; scl_24c16=0; } //**************************************************** //功能: 发送应答信号 voidmack_24c16() { sda_24c16=0; scl_24c16=1; delay_3us(); delay_3us(); scl_24c16=0; sda_24c16=1; } //************************************************* //功能: 向24C16写入一字节的数据 voidw1byte_24c16(ucharbyte1) { uchari=8; while(i--) { delay_3us(); delay_3us(); delay_3us(); if(byte1&0x80) {sda_24c16=1;} else {sda_24c16=0;} delay_3us(); delay_3us(); delay_3us(); scl_24c16=1; delay_3us(); delay_3us(); delay_3us(); scl_24c16=0; byte1<<=1; } } //**************************************************** //功能: 从24C16中读出一字节的数据 ucharrd1byte_24c16(void)//;读1字节子程序(通用)读出的数据存放在30H中 { uchari; ucharddata=0; sda_24c16=1;//置IO口为1,准备读入数据 for(i=0;i<8;i++) { ddata<<=1; delay_3us(); delay_3us(); delay_3us(); scl_24c16=1; if(sda_24c16)ddata++; delay_3us(); delay_3us(); delay_3us(); scl_24c16=0; } returnddata; } //*************************************************** //读数据操作 voidread_24c16() { ucharx1,x2; read1: nack_24c16(); star_24c16();//发送启动脉冲 w1byte_24c16(0xa0);//24C16的芯片地址,高四位固定为1010,选择第一区,写操作 cack_24c16()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 压力传感器 水位 报警器