您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 水箱水位遥测装置(含完整代码)
课程设计报告设计题目:水箱水位遥测装置的设计方案学院:专业:电子信息科学与技术班级:2011级1班学号:姓名:电子邮件:时间:2014年11月4日成绩:指导教师:华南农业大学理学院应用物理系课程设计(报告)任务书学生姓名指导教师职称副教授学生学号专业电子信息科学与技术题目水箱水位遥测装置的设计方案任务与要求1.利用水位探针和超声波测距检测水位。2.检测水位信号并通过红外信号发送并显示。3.掌握一些应用电子和光电等知识,懂得水位探针、超声波测距和红外传输的工作原理。4.掌握单片机的中断系统及红外编码解码的编写方法及程序调试的方法。5.掌握硬件设计及焊接工艺。开始日期2014年10月18日完成日期2014年11月09日水箱水位遥测装置的设计设计方案一、概述与应用背景本课程设计是利用水位探针、超声波测距和红外传输功能实现水箱水位遥测的功能。水位探针采用阴阳极导通产生触发性的水位信号;超声波测距用于实时检测水位的高低;红外传输可以进行远距离的信号显示。二、工作进度、组内分工与合作情况10-18至10-23:完成设计方案、实验器材购买;10-24至11-05:完成电路设计与仿真、实验装置制作;11-05至11-09:完成实验装置的调试并完成课程设计报告和实物展示准备。三、使用主要电子元件及个数STC89C52单片机2个、红绿黄LED各2只、万能实验板2块、水位探针、3位共阴数码管1个、超声波测距模块1个、蜂鸣器1只、红外发射二极管1只、红外接收器1个、5V电源、电容、电阻、导线插座若干。四、电路图以及仿真测试1、电路总设计图2、发射端:水位探针模块、超声波测距模块、红外发射模块3、接收端:红外接收模块、显示报警模块4、仿真测试本实验采用proteus模拟仿真电路是否工作正常,然后利用单片机开发板进行实物仿真。开发板实物仿真各个模块显示正常。低水位和高水位探针导通是D1、D3分别亮起,同时蜂鸣器报警,否则D2亮。超声波测量水位数据通过红外编码解码后在数码管上正常显示,单位为CM。五、程序流程图1、检测水位发射端程序流程图:version_final_transmit2、接收端显示程序流程图:version_final_receive六、作品演示1、演示效果图6.1水箱水位遥测装置6.2水箱以及检测发射端6.3接收显示报警端6.4接收端背面6.5发射端背面6.6低水位工作状态图6.7正常水位工作状态图6.8高水位工作状态图2、电路使用说明打开电源,将接收端放置与发射端垂直面,距离在10-100cm内能够正常工作。向水箱中放入浮块后即可加水进行测试。当水位低于低水位探针,红灯亮,蜂鸣器报警,表明此时水位过低;当水位高于低水位探针且低于高水位探针,绿灯亮,蜂鸣器关闭,表明此时水位正常;当水位高于高水位探针,黄灯亮,蜂鸣器报警表明此时水位过高。3、水位测量结果及误差分析接通电源,调试发射接收板工作正常,向水箱中缓慢注水,观测接收板数码管的显示,记录如下表1。表1测试结果记录表显示高度(CM)实际高度1(CM)实际高度2(CM)平均高度(CM)32.93.13444455.14.9566.25.86777.1788.18.38.299.299.11010.110.210.151111.21111.1121212.212.11312.91313141414.214.11515.115.315.2表2线性分析表通过表1取平均数进行线性分析得表2。由于传感器和其他器件本身并非理想线性,程序中对实测数据进行了线性补偿。误差分析:经校准,非线性补偿后,误差已基本达到要求。七、设计方案中的不足及改进1、此次设计方案中虽采用了水位探针和超声波液位测量互补的方式,克服了一定的缺点但是还存在测量精度的不佳的问题。改进:经费允许的情况下,可以采用电容式的水位探针可以进一步的改善水位的测量的精度。2、限于工艺问题,加水与倒水需要通过人工控制。改进:这可以通过设置继电器控制水的进出。3、由于浮块在加水的时候容易出现摇摆,导致超声波测距出现不稳定的跳动显示。改进:可以采用两点式垂直固定浮块以减轻浮块的波动。八、实验总结经过为期三周的光电子技术课程设计,我们完成了水箱水位遥测装置的设计,圆满完成了实验的基础要求和扩展要求。实验开展之前,我们小组先通过查询关键元件的资料来确定一套可行性比较高的方案。经过多次的讨论、斟酌以及修改后开始着手设计硬件电路和购买元器件。我们先通过在计算机上进行元件仿真和程序的编写完成最基础基本电路的运行以确认方案可行。同时利用单片机开发板进行实物确认各个模块设计的功能能够实现。接着我们对元器件进行焊接。在焊接过程中,我们采用先焊接最小电路已经把需要用到的引脚引出来,布线尽量做到不飞线,同时元器件放置尽量紧凑。而在编写程序的过程中,我们也遇到了一些问题,例如数据码位数弄错、数码管显示不稳定等问题。但是经过小组内讨论修改和其他小组交流经验的过程中,我们修正了我们程序中的错误,使之可以完成工作。同时软件编写过程中我们采用了版本更新的方式进行编写,对于一个功能的改动和新增都会保存成一个版本,方便我们在设计中的分析找错和还原。在整个过程中,我们不但巩固了红外传输系统、超声波测距原理和单片机等专业知识,同时也培养了小组合作精神以及个人吃苦耐劳的优良作风,获益良多。九、参考文献(1)江文杰、曾学文、施建华,《光电技术》,科学出版社,2009。(2)李朝青,《单片机原理及接口技术》,北京航空航天大学出版社,2006,p112-226。附录:程序清单version_final_transmit.c#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitout=P1^0;sbitRX=P0^0;sbitTX=P0^1;sbitls=P0^2;sbiths=P0^3;ucharS,X,C,i,a,num1,posit;uinttime,timer;voiddelayms(ucharaa)//延时程序{for(a=aa;a0;a--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}voidkhz(uchartime)//是发射38KHZ的程序{for(a=time;a0;a--){out=0;//低17usi=7;while(i0)i--;out=1;//高9us}}voidCount(){time=TH0*256+TL0;TH0=0;TL0=0;C=(time*1.7)/100;//C单位是CMif(ls==0){if(hs==0){X=0xc0;//高水位11}elseX=0x40;//正常水位01}elseX=0x80;//低水位10S=(C&0x3f)|X;}voidtransmit()//用38KHz载波发送数据{khz(116);delayms(125);for(num1=8;num10;num1--){khz(40);if(S&0x01)delayms(93);//延时1.5mselsedelayms(65);//延时1msS=S1;}khz(20);}voidzd3()interrupt3//800MS启动模块{TH1=0xf8;TL1=0x30;timer++;if(timer=400){timer=0;TX=1;//800MS启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;}}voidinit(){X=0;TMOD=0x11;//设T0为方式1TH0=0;TL0=0;TH1=0xf8;//2MS定时TL1=0x30;ET0=1;//允许T0中断TR1=1;//开启定时器EA=1;//开启总中断}voidmain(){init();while(1){while(!RX);//当RX为零时等待TR0=1;//开启计数while(RX);//当RX为1计数并等待TR0=0;//关闭计数Count();//计算transmit();//发射}}version_final_receive.c#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitin=P3^2;sbithsled=P1^2;sbitmsled=P1^1;sbitlsled=P1^0;bitflag;ucharS,C,X,num,i,a,posit;unsignedcharconstdiscode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharconstpositon[3]={0xfe,0xfd,0xfb};//百位十位个位unsignedchardisbuff[3]={0,0,0};voidinit(){flag=1;in=1;EA=1;EX0=1;IT0=1;S=0;}voiddelayms(ucharaa){for(i=aa;i0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}voidDisplay()//数码管扫描{P0=discode[disbuff[posit]];P2=positon[posit];if(++posit=3)posit=0;}voidCount(){C=(S&0x3f);disbuff[0]=C%1000/100;disbuff[1]=C%1000%100/10;disbuff[2]=C%1000%10%10;X=(S&0xc0);if(X==0x80)//10低水位{lsled=0;msled=1;hsled=1;}elseif(X==0x40)//01正常水位{lsled=1;msled=0;hsled=1;}elseif(X==0xc0)//11高水位{lsled=1;msled=1;hsled=0;}}voidmain(){init();while(1){Display();delayms(50);}}voidreceive()interrupt0{EX0=0;for(a=5;a0;a--){delayms(35);//延时0.5ms判断5次5*0.5=2.5msif(in)flag=0;}if(flag){delayms(72);//延时1ms判断是不是高电平if(in){delayms(115);//延时超过2ms;2.5+1+1.623=5.123ms开始读数据for(a=8;a0;a--){Display();while(!in);delayms(86);//延时1.188ms判断IO高低,从而得0或1num=num1;if(in){num=num|0x80;delayms(31);//延时0.6ms,延时1.2ms+0.6跳过1.5ms}}S=num;Display();}}flag=1;EX0=1;Count();}
本文标题:水箱水位遥测装置(含完整代码)
链接地址:https://www.777doc.com/doc-5710503 .html