




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 液体点滴速度监控装置组员:李海豹 王会强 杨亚娟时间:2011年7月27日液体点滴速度监控装置 摘要:本系统设计是以单片机stc89c52为核心,以键盘及红外对射式传感器作为输入系统,以液晶显示屏及电动机作为输出系统的智能化输液控制及监测系统。键盘系统为矩阵式按键系统,红外传感器的功能为检测点滴的速度,红外对管监测储液瓶内液体剩余量,少于一定量时报警。报警系统用蜂鸣器。电动机具有转速可控功率大及输入脉冲不变时可保持大力矩等优点,这样就可以自如控制吊瓶的上、下缓移可以达到智能控制的目的。关键字:红外对射式传感器 矩阵式按键系统 智能化输液控制监测系统目录1 系统设计11.1 方案选择11.1.
2、1 点滴速度监测方案 .11.1.2 储液量监测方案.11.1.3 键盘显示模块方案设计11.1.4 电机控制系统模块11.2 系统最终方案确定.12 单元电路设计22.1 点滴速度测量电路设计.22.2 储液检测电路.22.3 键盘显示电路.32.4 点滴速度控制电路设计.33 系统软件设计53.1 检测点滴速度子程序.53.2 储液检测子程序.53.3点滴速度控制子程序.63.4键盘显示子程序.63.5系统的主程序设计.74 系统测试.85结论.9参考文献.10附录.111 系统设计1.1 方案选择1.1.1 点滴速度监测方案 方案一,采用红外对管测量点滴一段时间落下的液滴数,点滴落下时挡
3、住了红外发射管发出的光,接收管无法接受。此时计数一次。采用塑料泡沫将对管固定在滴斗上,简单轻巧,减小滴管摆动带来的采集误差,同时不影响电机工作。方案二, 采用电感式传感器测量点滴速度。在输液器的漏斗外围绕线圈作为敏感元件。当液滴滴下是电感量发生变化,通过lc振荡电路后输出变化的频率值,经过f/v变换电路及电压比较后输出ttl电平信号来检测点滴速度。此方案测量精度比较高,但是外围电路比较复杂。1.1.2 储液量监测方案方案一:同点滴速度测量模块,仍然采用红外对管发射接收。根据该接收管收到的光强的大小来判断液位是否达到警戒水位。方案二:采用称重传感器检测。利用称重传感器检测总质量,并与实际测量中当
4、液体液面达到设定位置时的总质量相比较,根据液体体积与质量的关系,当测量总质量与设定值相等时发出报警。1.1.3 键盘显示模块方案设计方案一:采用液晶显示屏和通用矩阵键盘。液晶显示屏用1602。液晶显示屏(lcd)具有功耗小、轻薄短小无辐射危险,平面直角显示以及影象稳定不闪烁,可视面积大,画面效果好,抗干扰能力强等特点。输入简单,灵活。方案二:采用三位led七段数码管显示点滴数目。按键采用单列三按键。数码管具有:低能耗、低损耗、低压、寿命长、耐老化,对外界环境要求较低。但数码管显示时,每个字符都要查询段码值,使用起来没有液晶显示方便。1.1.4 电机控制系统模块方案一:通过改变滴斗到受液瓶的高度
5、来调节点滴的速度。由电动机带动储液瓶使储液瓶上升或下降改变滴斗到受液瓶的高度,从而调节点滴速度。此种调节方法简单,容易实现。方案二:通过控制滴速夹的松紧来控制点滴的速度。不过滴速夹用于大范围的调节滴速,调节是不精确,1.2 最终方案确定综合考虑,最终方案确定为点滴速度和储液均用红外对管监测,键盘显示模块用44矩阵键盘和1602液晶显示,液滴速度控制用电机实现。2 单元电路设计2.1 点滴速度测量电路设计采用红外对管发射接收测量点滴速度,其电路原理图如图2.1.1.所示。 图2.1点滴速度测量电路由电路图可以看到,接收管与发射管正相对,无液滴滴下时,接收管收到信号,输出低电平;有液滴滴下时,下落
6、的水滴对红外光有较强的漫反射、吸收及一定的发散作用,导致接收光强的较大改变,接收管不能收到较强的信号,产生一个较长的脉动,但是波形不是太好,需要经过一级施密特触发器整形,输出一个正向的脉冲信号送给单片机中断口,据此就可以正确的测出液滴的滴数,即点滴的速度(滴/分)。 2.2 储液检测电路液检测电路图仍然是和点滴速度测量电路一样,只是所接单片机的接口不同。其电路图如2.2.2图所示。 2.2.1 储液检测电路 该电路图的原理和点滴雕塑度检测电路的原理是一样的。由于红外光在水中和空气中的吸收系数不同,从而通过空气和水后的光强也是不同的。其报警信号也是由储液信号来决定的。当储液的液面的高度为23cm
7、后,会由红外对管发射接收产生检测信号,即为报警信号。2.3 键盘显示电路 键盘采用44矩阵键盘,按键有09,+,-,=,on 字符, 采用1602液晶显示屏 2.4 点滴速度控制电路设计系统将点滴速度采集信号和储液信号进行处理后,在相应的单片机的i/o控制口输出对应的控制信号来驱动电动机的正反转,从而进行精确的控制。点滴的控制其实是靠单片机检测滴速,得到一个反馈量,输出一定信号驱动电动机,控制电动机的正转或反转,进而带动储液瓶的上升或下降来调节滴斗的高度即控制点滴的速度。电动机驱动电路就如图2.4.1示。图2.2. 4路是用uln20003来驱动电机,图2.4.1 电动机驱动电路点滴控制靠单片
8、机检测滴速,得到一个反馈量,输出一定信号控制电机上升或下降调节滴斗的高度。3 系统软件设计 系统的软件设计采用c语言,对单片机进行编程来实现各项功能。主程序对模块进行初始化,接收从传感器传来的信号,并对此信号进行处理,输出调整信号控制电动机的转动,扫描键盘进行动态显示。用的是循环查询方式,来显示和控制点滴的速度。3.1 监测点滴速度子程序检测点滴速度子程序主要是用与系统信号的采集。经过光电传感器采集,后由施密特触发器整形,输出到单片机的端口送入单片机内部。3.2 储液监测子程序本程序主要是用于测量储液瓶内部的液位高度的,当液位低于23cm时,发出报警信号。如果液位的高度不在此区间内,则点滴的速
9、度照常采集,并送入单片机内部。其储液子程序流程图如图3.2.1所示。开 始光电传感信号变化否?发出报警信号,储液面进入23cm的警戒水位进入检测点滴速度子程序yn发出报警信号,储液面进入23cm的警戒水位图3.2.1储液子程序流程图3.3 点滴速度控制子程序开 始当前值与设定值比较小于大于等于电动机正转,储出液瓶下降电动机维持,滴速稳定电动机反转,储液瓶上升先设定一个速度值,随着点滴数落下,检测到信号后。滴数值加一,同时定时器工作计时,每有液滴被检测到时,程序计算出当前液滴落下速,与之前设定的值比较,来控制电机是正转、反转还是停止。3.4 键盘显示子程序键盘及显示字程序主要是用于判断速度有没有
10、调整的动向和点滴速度的显示(包括当前值和设定值)。其程序流程图如3.4.1所示。开 始初始化继续扫描显示判断有没有键盘的按下延时子程序显 示数据转化成bcd码,查表送入显示缓冲区yn图3.4.1系统键盘显示子程序3.5 系统的主程序开 始初 始 化判断液位的高度,有没有产生中断有没有调整键按下调用按键处理程序数据的bcd码转换 显 示继续执行,等待4 系统测试4.1 系统测试数据表4.2.1液滴速度检测测试速据单片机检测速度(滴/分) 实际速度 30 30 52 53 23 23 34 35 85 85 73 74 133 133 144 145表4.2.2流速调整测试原始值(滴/分)预置值(
11、滴/分)调整后低速(滴/分)稳定时间秒2380833493120119781038077434.2 报警功能测试:将夹头放松,使瓶中的水快速流出至警戒线附近,稍稍夹紧夹头,可以看到当水位降至警戒水位时,从机蜂鸣器发出报警信号。此功能正常。4.3 测试结果分析从以上测试结果可以看出,本系统已基本完成题目中的各项要求并在此基础上有所发挥,其中点滴速度的测量比较精确,在全量程内其误差小于3(滴/分)。设置点滴速度功能中,控制精度在全量程范围内优于4(滴/分),但是还是有一定的误差,经分析主要是由以下原因造成的:1由于瓶中的水不断减少,造成水滴的下落速度不均匀。2中断处理的进入和中断处理程序都会有一定
12、时间的延时,这也是造成测量误差的一个因素。3在动态控制时,由于瓶处于运动状态,其上升、下降运动不可避免的会产生加速度,导致水滴下落时速度不稳定。5 结论 本系统完成了在滴斗处检测点滴速度,并制作了一个数码管显示装置,能动态显示点滴速度(滴/分)。通过改变高度控制点滴速度,点滴速度可用键盘设定并显示,设定范围为20150(滴/分),误差在要求范围内。当高度降到警戒值是能发出报警信号。每个从站都可以和主站通信。主站可以工作在定点和巡回检测两种方式下,可以显示从站传输来的从站号和点滴速度。参考文献:1郭天祥.51单片机c语言教程m.北京:电子工业出版社,20092谭浩强.c程序设计.北京:清华大学出
13、版社,19913单片机应用开发实用子程序. 边春元等 编著. 人民邮电出版社. 2005附录: 元器件明细表:序号元器件数量备注1stc89c512个2液晶显示16021个3红外对管2对444矩阵键盘1个528byj-48电机1个6lm3241个7iln20031个8电阻若干9晶振1个12mhz10排阻1个103程序清单:#include #define db0_db7 p0 #define busy 0x80 #define scanport p1 sbit e=p25; sbit rw=p26; sbit rs=p27; unsigned char uca_linescan4=0xef,0
14、xdf,0xbf,0x7f;/列线扫描电压,分为第1,2,3,4 根列线unsigned char key_ctt4=0; unsigned int time_sq4=0; / 连续测得的三点的时间unsigned char speed_bcd4=0; /unsigned int speed_ck4=0; /unsigned int di_xx2=0; unsigned char speed_sc2=0; unsigned char yy=0,temp; unsigned int ct=0,ttb=0,xx=0,tt3=0,speedct=0,speed=0,speedcd=10,cott=0
15、; typedef unsigned char uchar; uchar code lcd3=0123456789abcdef; uchar code lcdnow=now:000; uchar code lcdset=set:000; unsigned char control8=0x38,0x18,0x98,0x88,0xc8,0x48,0x68,0x28; unsigned char codes18=0xb8,0x98,0xd8,0xc8,0xe8,0x68,0x78,0x38;/9,18,36,45,54,63,72,81度顺时针/ unsigned char codes28=0x38
16、,0x78,0x68,0xe8,0xc8,0xd8,0x98,0xb8; /9,18,36,45,54,63,72,81度逆时针unsigned char counts,pt; bit flag=1; / 度数,正反转,速度控制 bit a_ac=0;/比较系统标志unsigned char uc_keytemp=0;/按键键码暂存。 unsigned char uc_clickcount=0; unsigned char uccount; void vkeyprocess(unsigned char uckeycode); void bleep();/报警 bit bleept=0;/报警标
17、准 bit moto=0;/电机标志位void ac();/电机速度比较 void akey();/功能处理a bit a_key=0; bit b_key=0; void getspeed();/速度检测 void stdisplay();/显示void delay(unsigned int t);/延时 void delay_50ms(unsigned int t); void sendcommand(unsigned char ch);/发送命令void vwritedata(unsigned char ch);/发送数据void initlcd();/初始化 void displayo
18、nechar(unsigned char x,unsigned y,unsigned char ddata);/按指定位置显示一个字符void displaylistchar(unsigned char x, unsigned char y, unsigned char *ddata);/按指定位置显示一串字符 /= void delay(unsigned int t) / delay 40us /for(;t!=0;t-) ; while(t-); void delay_50ms(unsigned int t) unsigned int j; /* 可以在此加少许延时补偿,以祢补大数值传递时
19、(如delay_50ms(1000))造成的误差, 但付出的代价是造成传递小数值(delay_50ms(1))造成更大的误差。 因为实际应用更多时候是传递小数值,所以补建议加补偿! */ for(;t0;t-) for(j=6245;j0;j-); void sendcommand(unsigned char ch)/发送命令 /*checkbusy();*/ rs=0; rw=0; db0_db7=ch; e=1; delay(1000); e=0; delay(1000); /delay 40us /= void vwritedata(unsigned char ch)/发送数据 /* c
20、heckbusy(); */ rs=1; rw=0; db0_db7=ch; e=1; delay(1000); e=0; delay(1000); /delay 40us /= void initlcd()/ sendcommand(0x38); delay(1000); sendcommand(0x08); / delay(10); sendcommand(0x01); /显示状态设置 delay(1000); sendcommand(0x06); /清屏 delay(2000); sendcommand(0x0c); /输入方式设置 /= void displayonechar(unsi
21、gned char x,unsigned y,unsigned char ddata)/按指定位置显示一个字符 y &= 0x1; x &= 0xf; /限制x不能大于15,y不能大于1 if (y) x |= 0x40; /当要显示第二行时地址码+0x40; x |= 0x80; /算出指令码 sendcommand(x); vwritedata(ddata); /= void displaylistchar(unsigned char x, unsigned char y, unsigned char *ddata)/按指定开始位置显示字符串 unsigned char listlengt
22、h; listlength = 0; y &= 0x1; x &= 0xf; /限制x不能大于15,y不能大于1 while (ddatalistlength0x20) /若到达字串尾则退出 if (x = 0xf) /x坐标应小于0xf displayonechar(x, y, ddatalistlength); /显示单个字符 listlength+; x+; void vshowonechar(unsigned char ucchar) switch(ucchar) case 0: vwritedata(0x30);break; case 1: vwritedata(0x31);brea
23、k; case 2: vwritedata(0x32);break; case 3: vwritedata(0x33);break; case 4: vwritedata(0x34);break; case 5: vwritedata(0x35);break; case 6: vwritedata(0x36);break; case 7: vwritedata(0x37);break; case 8: vwritedata(0x38);break; case 9: vwritedata(0x39);break; case a: vwritedata(0x61);break; case b: v
24、writedata(0x62);break; case c: vwritedata(0x63);break; case d: vwritedata(0x64);break; case e: vwritedata(0x65);break; case f: vwritedata(0x66);break; default: break; /= unsigned char uckeyscan() unsigned char uctemp=0; /扫描状态暂存。 unsigned char ucrow=0,ucline=0; /行号,列号。 for(ucline=0;ucline4;ucline+) /
25、列扫描 scanport=uca_linescanucline; /输出扫描电位。 uctemp=scanport&0x0f; /输入扫描电位,并屏蔽高4位。 if(uctemp!=0x0f) /判断该列是否有按键按下。 switch(uctemp) case 0x0e: ucrow=10;break; /如果有,则判断行号。 case 0x0d: ucrow=20;break; case 0x0b: ucrow=30;break; case 0x07: ucrow=40;break; default: ucrow=50;break; break; /恢复键扫描处理前初始状态 scanport
26、=0x0f; /恢复p1口 return ucrow+ucline+1; /返回按键编码。格式为2位数,高位为行号,低位为列号 void vkeyprocess(unsigned char uckeycode) sendcommand(0xc4+uc_clickcount); if(a_key=1) switch(uckeycode) case 41:vshowonechar(7);temp=7;break; /7 case 42:vshowonechar(8);temp=8;break; /8 case 43:vshowonechar(9);temp=9;break; /9 case 31:
27、vshowonechar(4);temp=4;break; /4 case 32:vshowonechar(5);temp=5;break; /5 case 33:vshowonechar(6);temp=6;break; /6 case 21:vshowonechar(1);temp=1;break; /1 case 22:vshowonechar(2);temp=2;break; /2 case 23:vshowonechar(3);temp=3;break; /3 case 12:vshowonechar(0);temp=0;break; /0 sendcommand(0xc4+uc_c
28、lickcount); sendcommand(0x0f); switch(uckeycode) case 44:/*vshowonechar(c);*/temp=12;break; / case 34:/*vshowonechar(d)*/temp=13;break; /* case 24:/*vshowonechar(e)*/temp=14;break; /- case 14:/*vshowonechar(f)*/temp=15;break; /+ case 13:/*vshowonechar(b);*/temp=11;break; /= case 11:/*vshowonechar(a)
29、;*/temp=10;break; /on/c default:break; if(temp=11) /判断按键与上一次所按的键是否相同 delay_50ms(100); if(uc_clickcount255) /同一个按连续按下的次数:1255 uc_clickcount+; sendcommand(0xc3+uc_clickcount); sendcommand(0x0f); if(uc_clickcount=3) uc_clickcount=0; sendcommand(0xc4+uc_clickcount); sendcommand(0x0f); if(temp=9) switch(
30、uc_clickcount) case 0:key_ctt0=temp;break; case 1:key_ctt1=temp;break; case 2:key_ctt2=temp;break; default:break; void int_timer0(void) tmod=0x10; tmod=0x01; th0=0x3c; tl0=0xb0; th1=0x3c; tl1=0xb0; et1=1; tr1=1; et0=1; tr0=1; ea=1; it1=1; ex1=1; void timer1() interrupt 3 th1=0x3c; tl1=0xb0; pt+; /控制
31、速度 if(pt=2) pt=0; if(flag=0&moto=1) p2=(p2&0x0f)|controlcounts; if(flag=0&moto=0) p2=(p2&0x0f)|codes2counts; counts+; if(counts=8)counts=0; /角度重置 void timer0() interrupt 1 th0=0x3c; tl0=0xb0; yy+; if(yy=2) ct+; tt3+; yy=0; if(ct=600)/60秒定时 ct=0; xx=0; if(tt3=20) tt3=0; di_xx1=di_xx0; di_xx0=xx; if(d
32、i_xx0=di_xx1)&a_ac=1) bleept=1;flag=1; void int1() interrupt 2 static cott=0; cott+; if(cott=2) xx+; time_sq2=time_sq1; /把当前检测到液滴的时间保存起来 time_sq1=time_sq0; time_sq0=ct; if(a_key=0) displayonechar(10,0,lcd3speed/100); displayonechar(11,0,lcd3speed%100/10); displayonechar(12,0,lcd3speed%10); displayon
33、echar(10,1,lcd3xx/100); displayonechar(11,1,lcd3xx%100/10); displayonechar(12,1,lcd3xx%10); sendcommand(0xc4+uc_clickcount); getspeed(); cott=0; void stdisplay() displaylistchar(0,0,lcdnow); displaylistchar(0,1,lcdset); displayonechar(14,0,0x4f); displayonechar(15,0,0x46); displaylistchar(8,0,s:); d
34、isplaylistchar(8,1,t:); void main(void) delay_50ms(1); int_timer0(); initlcd(); p2_3=1; scanport=0x0f; stdisplay(); while(1) bleep(); if(scanport!=0x0f) for(uccount=0;uccount=(speedcd+5) moto=0;flag=0; else if(speedct=(speedcd-5) moto=1;flag=0; else flag=1; void bleep() if(a_ac=1) if(bleept=1) p2_3=0; if(bleept=0) p2_3=1; void akey() if(a_key=1) sendcommand(0x0c); displayonechar(14,0,0x4f); displayonechar(15,0,0x4e); /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内衣套装企业ESG实践与创新战略研究报告
- 儿童安全药瓶解决方案企业制定与实施新质生产力战略研究报告
- 办公室用金属家具企业数字化转型与智慧升级战略研究报告
- 过渡金属化合物基复合材料的界面调控及其电化学性能研究
- 不规则及形变地形下基于触地感知的四足机器人运动控制研究
- 船东的合同范本
- 单间门面租房合同范本
- 电竞医疗领域创新技术应用分析
- 商铺抽成合同范本
- 硅胶加工合同范本
- 山西省2024年中考物理试题(含答案)
- 电子商务平台供货方案及风险控制措施
- 静脉治疗专科护士培训
- 【课件】Unit+6+section+B+1a~2b+课件人教版七年级英语上册
- 钉钉操作指南培训教育课件
- 人音版九下级下册音乐 5.2.2报花名 教案
- 2024年农业农村基础知识考试题库(附答案)
- 相互批评意见500条【5篇】
- 2023新一代变电站二次系统技术规范第3部分:综合应用主机
- 2024年高考真题-英语(新高考Ⅰ卷) 含解析
- TSHJX 061-2024 上海市域铁路工程施工监测技术规范
评论
0/150
提交评论