油料液位监控系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
设计要求:设计一个油料液位监控系统。当液位高于X1时,鸣响振铃病点亮红色LED 灯;当液位低于X2时,鸣响振铃并点亮黄色LED灯;当液位处于X1和X2之间时,点亮绿色LED灯。
本次设计系统以 AT89S52 为核心,当测量液面超过设定的液面上下限时,启动蜂鸣器和指示灯报警显示稳定,从而达到自动报警的功能。随着社会的进步、生产工艺和生产技术的发展,人们对液位的检测提出了更高的要求。而新型电子技术微电子技术和微型计算机的广泛应用于普及,单片机控制系统以其控制精度高,性能稳定可靠,设置操作方便,造价低等特点,被应用到液位系统的控制中来。本文介绍了用液位检测集成芯片 LM1042 和A/D 转换芯片 A/D574A,以及 AT89C51 单片机作为主控元件的液位检测的原理、电路及监控程序。用 LM1042 液位检测集成芯片测量液位,具有测量精度高、速度快、可靠、稳定等优点;采用单片机来控制液位信息的采集,并且计算出真实液位值,通过运算判断是否超限报警,使检测具有更高的智能性。关键词:AT89C51 AD574A 液位检测 LM1402 超限报警AT89C51
一、方案选择与论证
1、液位传感器模块
方案一:此方案采用光电传感器来实现,光电传感器是利用光的转换来获取数据,在经过 AD 转换来实现可以在 LCD 可以显示的数据,这样的话,硬件和软件都会变得复杂,在加上光电传感器检查的原理可知,在此系统使用并不稳定。
方案二:此方案采用液位传感器来实现,液位传感器所采集到的数据能直接显示到LCD 上,不需要转换,这样的话,硬件和软件就能简化,而且液位传感器所检测到的数据稳定性好,精确度高。综上分析,我们采用了第二个方案。
2、显示模块
方案一:采用 8 位段数码管,将单片机得到的数据通过数码管显示出来。该方案简单易行,但所需的元件较多,且不容易进行操作,可读性差,一旦设定后,很难再加入其他的功能,显示格式受限制,且耗电量大,不宜用电池给系统供电。
方案二:采用液晶显示器件,液晶显示平稳、省电、美观,更容易实现题目要求,对后续的功能兼容性高,只需将软件作修改即可,可操作性强,也易于读数,采用LCD12864 四行十六个字符的显示,能同时显示日期、时间、星期、温度和液位的控制,更能体现人机对话。
3、微控制器模块
方案一:此方案采用 AT89C51 八位单片机实现。它内存较小,只有 4K 字节 Flash闪速存储器,128 字节内部 RAM,32 个 I/O 口线,两个 16 位定时/计数器,一个 5 向量两级中断结构,一个全双工串行通信口,无在线下载编程功能,也无在线仿真功能。只能通过编程器烧写成以.hex 为后缀名的文件。
方案二:此方案采用 AT89S52 八位单片机实现。它内存较大,有 8K 的字节 Flash闪速存储器,比 AT89C51 要多 4K。它可在线编程,可在线仿真的功能,这让调试变得方便。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。综上所述,我们采用了第二个方案,即 AT89S52。
二、系统的具体设计与实现
1、系统的总体设计方案
采用液位传感器LLE102000、光电耦合器控制,读取液位信号并进行计算处理,分析并作出是否进行报警的判断,同时读取时钟芯片DS1302 的时间,并送入液晶显示器LCD12864 显示,同时通过与PC 机的连接对整个系统的控制和显示。
图 1 系统设计框图
2、时钟模块
该模块的主要功能是向单片机提供时间的信息包括年、月、日、星期及时间。其是由DS1302、晶振、电容等组成。
图 2 时钟模块电路图
3、报警模块
当液位高于X1时,鸣响振铃病点亮红色LED灯;当液位低于X2时,鸣响振铃并点亮黄色LED灯;当液位处于X1和X2之间时,点亮绿色LED灯。如图
图3报警模块
4、主控程序代码段为:
com:process(current_state,eoc) --规定各种状态的转换方式begin
case current_state is
when st0=>next_state<=st1;ale<='0';start<='0';en<='0';
when st1=>next_state<=st2;ale<='1';start<='0';en<='0';
when st2=>next_state<=st3;ale<='0';start<='1';en<='0';
when st3=> ale<='0';start<='0';en<='0';
if eoc='1' then next_state<=st3; --检测EOC的下降沿
else next_state<=st4;
end if;
when st4=>ale<='0';start<='0';en<='0';
if eoc='0' then next_state<=st4; --检测EOC的上升沿else next_state<=st5;
end if;
when st5=>next_state<=st6;ale<='0';start<='0';en<='1';
when st6=>next_state<=st0;ale<='0';start<='0';en<='1';regl<=d; when others=> next_state<=st0;ale<='0';start<='0';en<='0';
end case;
end process;
转化时序代码段为:
clock:process(clk) --对系统时钟进行分频,得到ADC0809转换工作时钟begin
if clk'event and clk='1' then qq<=qq+ --在clk1的上升沿,转换至下一状态if QQ="01111111" THEN clk1<='1'; current_state <=next_state;
els if qq<="01111111" then clk1<='0';
end if;
end if;
end process;
q<=regl; abc_out<=abc_in;
end behav;