液体点滴速度监控装置资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

液体点滴速度监控装置
[摘要]该装置实时地监测液体点滴速度,通过单片机对信息的分析和处理,由主机发出相应的指令,调整系统的工作平稳,构成了一个高性能的闭环控制系统。

实现了对点滴输液速度的直观监测,同时对一些异常情况的出现可实施报警。

利用该装置还能通过主控平台对各个分立系统信息实施自动化、智能化的集中处理。

能方便、简易的操作和使用,对医疗具有很强的实用性。

[关键词]实时监控红外传感闭环控制步进电机
一、方案设计与论证
根据题目要求和原输液装置的特点,提出以下三种方案:
1、方案一
直接在滴斗处用两电极棒的方法。

图1
此方案的传感器采用简单的液体导电原理,在滴斗处安装两个电极。

当水滴落下时,电极导通,从而使待测量的变化转化为高低电平电信号。

采用伺服电机改变系统装置中液瓶与受液瓶的高度,达到改变点滴速度,从而进行控制。

2、方案二
把通过电机改变系统装置高度的方法,改为控制步进电机对输液管进行压缩或缓松,从而实现对点滴速度的改变。

采用交流电动机控制H2的高度。

即采用红外传感器测量滴斗滴液,送至单片机接口计数,通过数字模拟转换,将其转换为4—20MA标准电流值,同时通过键盘输入给定每分钟的滴数,再将此滴数将其转换为4—20MA标准电流值,将此两个信息同时进入数字PID调节器。

通过偏差计算再输出一组4—20MA标准电流值,通过变频调速器控制电动机调节H2的高度,来控制滴斗滴数。

此方案的优点是,完全按目前电气工程标准化运作,可以在很短时间完成。

2、方案三
根据点滴装置的特点,通过对装置的某一位置进行监测和控制,达到对整个系统液体
点滴速度的监控。

(如图1)。

通过控制输液软管夹头的松紧来控制点滴速度,采用红外传感器测量滴斗滴数,送至单片机接口计数并显示,首先标定两个脉冲(两滴间)间的时间间隔(以10MS为时基单位)。

然后计算给定滴斗滴数(通过键盘)的时间间隔(以10MS为时基单位)。

将此两个时间间隔进行比较,以决定步进电机运行的方向。

该步进电机通过丝杠控制输液软管夹头的松紧,来控制滴斗滴数
4、方案比较
方案一的特点是:实现比较简单容易,原理上也是可行的,但由于本装置用于医疗,电弧的产生,可能对不同的药物有影响,同时传感器(电极)不能重复使用,以防止传染。

方案二通过改用红外传感器,弥补了方案一的不足。

但是还存在问题,利用改变高度的方法虽然容易实现,但可控性不好。

由此,我们采用了第三种方案,通过挤压输液管的办法来实现对点滴速度的控制。

二、系统原理框图如图2所示。

图2
本系统最主要的是充分利用单片机编程的灵活性和其强大的功能,使一些小的系统实现自动化和智能化成为了现实。

其中的器件都比较简单,尽大可能的利用各集成芯片的功能,如系统的键盘和显示原理电路。

通过红外传感器对水滴滴落的动态信息的感应,单片机对数据的采集分析和处理,同时使用小功率的步进电机进行机械调整,使装置能机智、即时的响应操作者的使用。

三、主要电路原理与设计
1、AT89C51单片机基本系统控制与数值信号处理的核心采用AT89C51单片机,采用
串口工作方式。

电路如图3。

图3
2、显示与键盘如图4
利用74LS164进行串行动态9位数码管显示,74LS164的主要功能是8bits的串入并出数据处理。

电路结构简单,功能强大。

采用中断和查询的方法,设计的4键键
图4
3、红外传感和信号处理采用红外线的发射和接收装置,它可用来检测包括液体在内的各种透明体、半透明体、不透明体,从而可以灵敏地反应水滴滴下。

利用光电耦合器对电信号进行处理,减少干扰。

4、步进电机驱动和控制如图5
图5
5、声光报警当检测到液面低于3cm时由单片机采集到报警信号,由报警芯片发出
声光报警。

5、主控制平台 可以组建一个小型的网络系统,由主机控制和监视各个从机的工作状态和各个装置的信息。

如图 6
图 6
四、系统软件工作流程 如图7 到 图12
1、软件设计:
软件部分参考流程图,这里主要讲述一下软件编写过程中的几个细节部分。

如前所述,我们计算滴水速度的原理是通过求出2个水滴之间的时间差,通过分析,我们通过定时器建立一个基准时钟,该基准时钟有2个字节单元,分别秒单位和10毫秒单位的数值。

在每次传感器送来中断的时候调用“传感测量”子程序,在该子程序中,我们在取当前触发时间时,先把上一个脉冲发生的时间保存在“历史寄存器”中,然后再更新“当前寄存器”的值,即取当前脉冲的发生时间。

这样我们就记录下了2个时间(连续)值。

历史寄存器 当前寄存器 基准时钟
中断前:
中断时:注:箭头方向为中断时的赋值方向 图7
由于基准时钟是以10毫秒为最小单位的,而对于频率范围在20Hz~150Hz 的脉冲而言,因为我们在后边的求滴速中要用到10
毫秒单位值,而水滴的下落并不能保证绝对的规则,经测试发现,每一次求差后的值总有几个单位毫秒的变动,这个变动就导致了最终运算出来的滴速值的大幅度变化,后来惊观察发现这种误差可以归为周期性误差,所以为了消除这个误差,我们不是简单地只取一个差值,相反,我们是取了10个差值,然后再求平均值,这样处理的最大一个好处是可以使周期性误差的正、负偏差互相抵消,在很大程度上消除上述误差。

前面的处理虽然可以提供一个比较接近真值,对于最终显示出来的影响不大,但当要用这个值去控制滴速夹时,很明显这样处理的结果降低了控制的响应度;而另一方面,对于滴速夹的控制,因为我们采用的是步进电机,而且我们对步进电机的转轴又进行了改造,加了一个螺纹栓,可以保持滴速夹控制端的位置,所以我们在每采集一个脉冲间隔时就进行滴速的更改控制,这样可以提高控制设备的响应速度。

所以在本系统中对于建立一个科
学合理的系统模型是很有必要的。

在对滴速进行控制时,我们借鉴了PID 算法,建立了一个闭环控制状态,利用类似于锁相环的模型:即把设定的滴速和当前的滴速进行比较,输出一个差值,利用这个差值的极性来决定电机的正反转,并拉小这个差值直至最小。

因为每检测到一个传感信号,我们就把设定值和当前值进行比较,这样不仅提高了设备的响应速度,而且由于我们这个系统的基准时钟是以10毫秒为单位了,因为我们能分辨到10毫秒的数量级,可以使当前值非常接近我们所设定的设定值。

这一点可以参照电机控制的流程图。

(图12)
1、运算过程:因为我们系统的基准时钟是以10毫秒为单位了,虽然加大了系统的精度,但是却给系统的数值运算带来了麻烦,直接用四则运算(特别是乘除的运算)很容易带来无法避免的运算误差,即在运算是因为运算位数的限制而带来的数据尾数的丢失。

前面说过这种误差将对我们对信号的处理和显示产生很大了影响,甚至会得到一个误差很大的最终输出,为避免这种情况,我们在保证精度的基础上采用了查表法,并且在建立表格时对数据进行一定的折中处理,使得最终得到了结果的误差能尽量小,实践证明我们这种方法还是有一定的实用性的。

而且查表法的结果便于以后系统误差的自我校正,因为它保存了一个恒值。

2、对数据表格的处理:前面说过我们这个系统的基准时钟有两个字节单元,而即使采用题目要求的滴速(20~150分/滴)也将需要260个字节,这已经超过了8位单片机的查表范围,所以怎样建立一个合理的查表算法是很有必要的。

通过对数据的观察,我们发现虽然每个时间量有两个字节,但是在秒字节的单元里,总共只能出现4种取值,即1、2和3以及0 ,所以我们可以以这4个值为标量对表格的数据进行划分,由于有了秒字节单元来做区分,我们只要在表格中写入10毫秒字节单元的值就行了,通过综合处理,在保证精度的基础上,我们所建立的表格的字节数为100多个,这样不仅满
足了8位单片机的查表范围,而且大大了节省了内存,有利于系统资源的优化分配。

3、通信的建立:在选择方案时,考虑到通信线的多少,我们采用了串行通信,直接利用单片机本身的串行通信口,在软件上我们考虑用串行通信的方式0来进行通信。

通信协议如下:先发送握手信号,然后发送被呼叫的从机号,每个从机在接收到地址时跟自身的地址进行比较,如果不是被呼叫机,则关闭通信链路;如果是则发送响应信号。

当确定了通信的链路后,就按照预定的数据包格式进行通信。

数据包格式如下:
2、程序流程图
图8
传感测量:时钟:
图9 图10
键盘:步进电机控制:
图11 图12
3、源程序:
时间基准缓冲区:秒55h 0.01秒56h
键盘设置缓冲区:秒57h 0.01秒58h
传感测量缓冲区:前次—秒51h 0.01秒52h 当前—秒53h 0.01秒54h 差值—秒4fh 0.01秒50h
最终显示缓冲区:选择值:54h测定值5ah 5bh 5ch 设置值 5dh 5eh 5fh
R4用于步进电机的步进记忆
org 0000h
ajmp main
org 0003h
ajmp jpint ;int0
org 000bh
ajmp times ;t0
org 0013h
ajmp cgint ;int1
org 0040h
main:mov sp,#60h ;设置堆栈
mov 41h,#00h
mov 42h,#00h
mov 43h,#00h
mov 44h,#00h
mov 45h,#00h
mov 46h,#00h
mov 47h,#00h
mov 48h,#00h
mov 4fh,#00h
mov 50h,#00h
mov 51h,#00h
mov 52h,#00h
mov 53h,#00h
mov 54h,#00h ;初值设置
mov 55h,#00h
mov 56h,#00h ;以上为时间初值
mov 54h,#00h
mov 57h,#00h ;初值显示为00 mov 58h,#00h
mov 59h,#00h
mov 5ah,#00h
mov 5bh,#00h
mov 5ch,#00h
mov 5dh,#00h mov 5eh,#00h
mov 5fh,#00h
mov r7,#00h
setb f0
clr p2.1
mov tmod,#01h ;T0为工作方式0
mov tl0,#0f0h ;计数器初值
mov th0,#0d8h
mov ie,#87h ;中断设置,除T1,
ES外全开中断
mov ip,#02h ;中断优先级
setb it0
setb it1 ;脉冲触发方式
setb tr0 ;启动定时
setb p1.4
disp:acall disp0 ;调用显示子程序
ajmp disp
disp0:
push acc
mov dptr,#table
jnb f0,disp1
mov a,54h ;选择值显示cjne a,#01h,zzz1
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#0ffh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
ajmp disp1
zzz1:cjne a,#02h,zzz2
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#0ffh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
ajmp disp1
zzz2:cjne a,#03h,zzz3
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#0ffh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
ajmp disp1
zzz3:mov 54h,#00h
disp1:mov a,5ah ;测定值显示
cjne a,#00h,disp2
ajmp disp3
disp2:cjne a,#01h,disp4
disp3:movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#0feh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
disp4:mov a,5bh
movc a,@a+dptr
mov sbuf,a jnb ti,$
clr ti
mov a,#0fdh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
mov a,5ch
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#0fbh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
mov a,5dh ;设置值显示movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#0dfh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
mov a,5eh
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#0bfh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
mov a,5fh
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
mov a,#7fh
mov sbuf,a
jnb ti,$
clr ti
acall dealy
pop acc
ret
dealy:
mov r0,#0fah
lll:
nop
nop
djnz r0,lll
ret
table:db 03h
db 9fh
db 25h
db 0dh
db 99h
db 49h
db 41h
db 1fh
db 01h
db 09h
jpint: ;键盘控制子程序push acc
push 07h
mov r2,#0ah
zzz:acall dealy
djnz r2,zzz
jb p1.0,x2 ;选择键子程序
inc 54h
clr ex1
setb f0
mov a,54h
cjne a,#04h,x1
mov 54h,#01h
x1:ajmp ret0
x2:jb p1.1,x3 ;加1键子程序mov a,54h
cjne a,#00h,lll1
ajmp ret0
lll1:cjne a,#01h,lll2
inc 5fh
mov a,5fh
cjne a,#0ah,zhongju
mov 5fh,#00h
ajmp ret0
lll2:cjne a,#02h,lll3
inc 5eh
mov a,5eh
cjne a,#0ah,ret0
mov 5eh,#00h
ajmp ret0
lll3:inc 5dh
mov a,5dh
cjne a,#0ah,ret0
mov 5dh,#00h
ajmp ret0
x3:jb p1.2,x4 ;减1键子程序
mov a,54h
cjne a,#00h,llll1
ajmp ret0
llll1:cjne a,#01h,llll2
dec 5fh
mov a,5fh
cjne a,#0ffh,ret0
mov 5fh,#09h
ajmp ret0
zhongju:ajmp ret0
llll2:cjne a,#02h,llll3
dec 5eh
mov a,5eh
cjne a,#0ffh,ret0
mov 5eh,#09h
ajmp ret0
llll3:dec 5dh
mov a,5dh
cjne a,#0ffh,ret0
mov 5dh,#09h
ajmp ret0
x4:jb p1.3,x5 ;确定键子程序
clr f0
acall enter ;因指令而修改
ret01: ;对整数进行修正
mov a,r7
cjne a,#14,ccc1
mov 57h,#03h ;为20置3
setb ex1
ajmp ret0
ccc1:cjne a,#1eh,ccc2
mov 57h,#02h ;为30置2
setb ex1
ajmp ret0
ccc2:cjne a,#3ch,ret02
mov 57h,#01h ;为60置1
setb ex1
ajmp ret0
x5:jb p2.0,ret0 ;报警监测setb p2.1 ;送报警声音ajmp ret0
ret02:setb ex1
ret0:pop acc
pop 07h
reti
enter:
mov 54h,#00h
clr c
mov a,5dh ;求时间段程序
mov b,#64h ;百位数
mul ab
mov r7,a
mov a,5eh
mov b,#0ah ;十位数
mul ab
add a,r7
mov r7,a
mov a,5fh
add a,r7
mov r7,a ;此时r7中为设定值
clr c
subb a,#14h ;查表前减20
mov dptr,#table1 ;由数值查时间段表
movc a,@a+dptr
mov 58h,a ret
times: ;时间设置
push acc
mov tl0,#0f0h
mov th0,#0d8h
setb tr0
inc 56h
mov a,56h
cjne a,#64h,quit0
mov 56h,#00h
inc 55h
quit0:pop acc
reti
cgint: ;传感测量
mov r2,#0ah
zzzz:acall dealy
djnz r2,zzzz
jnb p3.3,cgint1
reti
cgint1:push acc
push 03h
push 04h
push 05h
push 06h
inc r7
cjne r7,#0ah,zhongju1
mov r7,#00h
mov a,53h ;数值转移
mov 51h,a
mov a,54h
mov 52h,a
mov a,55h ;读取当前时间
mov 53h,a
mov a,56h
mov 54h,a
clr c ;求10个脉冲差值子程序
mov 47h,#00h ;10差值寄存区
mov 48h,#00h
mov a,53h
subb a,51h
mov 47h,a
clr c
mov a,54h
subb a,52h
jnc zero ;如果当前值大就跳转
dec 47h
clr c
mov a,#00h
mov a,54h
add a,#64h
subb a,52h
zero:mov 48h,a
mov a,47h ;平均差值mov b,#0ah
div ab
mov 4fh,a
mov a,b
mov r3,a ;秒余数暂存mov a,48h
mov b,#0ah
div ab
mov 50h,a
mov a,b
mov r4,a ;0.01秒暂存mov a,r3
mov b,#0ah
mul ab
add a,50h
mov 50h,a
zhongju1:mov a,44h
mov 42h,a
mov a,43h
mov 41h,a
mov a,55h
mov 43h,a
mov a,56h
mov 44h,a
clr c ;求差值子程序,供电机使用
mov 45h,#00h
mov 46h,#00h
mov a,43h
subb a,41h
mov 45h,a
clr c mov a,44h
subb a,42h
jnc zero1 ;如果当前值大就跳转
dec 45h
clr c
mov a,#00h
mov a,44h
add a,#64h
subb a,42h
zero1:mov 46h,a
mov a,45h
mov a,4fh
cjne a,#03,ddd1 ;送动态显示缓冲区
mov 5ah,#00h ;整值判断mov 5bh,#02h
mov 5ch,#00h
ajmp exit
ddd1:cjne a,#02h,ddd2
mov a,50h
jnz ddd01
mov 5ah,#00h
mov 5bh,#03h
mov 5ch,#00h
ajmp exit
ddd01:mov b,#0ah
div ab
mov dptr,#table2 ;秒值为2的表movc a,@a+dptr
mov r5,a
anl a,#0fh
mov 5ch,a
mov 5bh,#02h
mov 5ah,#00h
ajmp exit
ddd2:cjne a,#01h,ddd3
mov a,50h
jnz ddd02
mov 5ah,#00h
mov 5bh,#06h
mov 5ch,#00h
ajmp exit
ddd02:
mov b,#0ah
div ab
mov dptr,#table3 ;秒值为1的表movc a,@a+dptr
mov r5,a
anl a,#0fh
mov 5ch,a
mov a,r5
swap a
anl a,#0fh
mov 5bh,a
mov 5ah,#00h
ajmp exit
ddd3:
mov a,50h
cjne a,#3ch,ddd03
mov 5ah,#01h
mov 5bh,#00h
mov 5ch,#00h
ajmp exit
ddd03:
clr c
subb a,#3ch
jc lar100 ;大于100跳转
mov 5ah,#00h ;小于100
mov dptr,#table4 ;60到99的表movc a,@a+dptr
mov r5,a
anl a,#0fh
mov 5ch,a
mov a,r5
swap a
anl a,#0fh
mov 5bh,a
ajmp exit
lar100:
mov 5ah,#01h
clr c
mov r5,50h
mov a,#3ch
subb a,r5
mov dptr,#table5 ;100到150的表
movc a,@a+dptr mov r5,a
anl a,#0fh
mov 5ch,a
mov a,r5
swap a
anl a,#0fh
mov 5bh,a
exit:jb f0,exit1 ;F0为1时电机不工作
acall dianjic ;送步进电机子程序
exit1:pop 05h
pop 03h
pop 04h
pop acc
pop 06h
reti
dianjic: ;电机控制子程序.zhengzh为前进,fanzh为后退push acc
clr c
mov a,57h
subb a,45h
jz lowdc ;如果高位相等则进行低位比较
jc jcc1 ;当前滴速小于设定滴速,须反转放松
acall zhengzh ;当前滴速大于设定滴速,须正转挤压
ajmp out
jcc1:acall fanzh
ajmp out
lowdc:clr c
mov a,58h
subb a,46h
jz out
jc jcc2
acall zhengzh
ajmp out
jcc2:acall fanzh
out:pop acc
ret
zhengzh: ;前进挤压
mov dptr,#table0
inc r4
mov a,r4
cjne a,#06h,zhengz
mov r4,#00h
mov a,#00h
zhengz:movc a,@a+dptr mov p1,a
ret
fanzh: ;反转放松mov dptr,#table0
dec r4
mov a,r4
cjne a,#0ffh,fanz
mov r4,#05h
mov a,#05h
fanz:movc a,@a+dptr mov p1,a
ret
table0:
db 80h
db 0c0h
db 40h
db 60h
db 20h
db 0a0h
table1:
dB 00H
dB 86H
dB 73H
dB 61H
dB 50H
dB 40H
dB 31H
dB 22H
dB 14H
dB 07H
dB 00H
dB 94H
dB 88H
dB 82H
dB 76H
dB 71H
dB 67H dB 62H dB 58H dB 54H dB 50H dB 46H dB 43H dB 40H dB 36H dB 33H dB 30H dB 28H dB 25H dB 22H dB 20H dB 18H dB 15H dB 13H dB 11H dB 09H dB 07H dB 05H dB 03H dB 02H dB 00H dB 98H dB 97H dB 95H dB 94H dB 92H dB 91H dB 90H dB 88H dB 87H dB 86H dB 85H dB 83H dB 82H dB 81H dB 80H dB 79H dB 78H dB 77H dB 76H dB 75H
dB 74H dB 73H dB 72H dB 71H dB 71H dB 70H dB 69H dB 68H dB 67H dB 67H dB 66H dB 65H dB 65H dB 64H dB 63H dB 63H dB 62H dB 61H dB 61H dB 60H dB 59H dB 59H dB 58H dB 58H dB 57H dB 57H dB 56H dB 56H dB 55H dB 55H dB 54H dB 54H dB 53H dB 53H dB 52H dB 52H dB 51H dB 51H dB 50H dB 50H dB 50H dB 49H dB 49H dB 48H dB 48H dB 48H dB 47H dB 47H dB 47H dB 46H dB 46H dB 45H dB 45H dB 45H dB 44H dB 44H dB 44H dB 43H dB 43H dB 43H dB 43H dB 42H dB 42H dB 42H dB 41H dB 41H dB 41H dB 41H dB 40H dB 40H table2: db 29h db 28h db 27h db 26h db 25h db 24h db 23h db 22h db 21h table3: db 57h db 52h db 49h db 45h db 42h db 39h db 37h
db 35h db 33h db 31h table4: db 99h db 98h db 97h db 95h db 94h db 93h db 91h db 89h db 88h db 87h db 86h db 84h db 83h db 82h db 81h db 80h db 79h db 78h db 77h db 76h db 75h db 74h db 73h db 72h db 72h db 71h db 70h db 69h db 68h db 68h db 67h db 66h db 65h db 65h db 64h db 63h db 63h db 62h db 61h table5: db 00h db 02h db 04h db 06h db 08h db 10h db 12h db 14h db 16h db 18h db 20h db 22h db 25h db 28h db 30h db 33h db 36h db 39h db 43h db 46h db 49h end
四、系统测试
1、仪器
1)数字示波器
2)信号发生器
3)数字计数器
2、波形测试
利用示波器观察红外传感电信号是否规则。

若不规则,说明传感器转化的电信号需要进一步处理,或者是传感器本身有问题,需要检查。

直到有规则的方波输出为止。

用数字计数器对液滴计数。

在系统电路工作时,用数字计数器的表笔从传感器转化的电信号输出端相接,对点滴数计数与系统显示做比较,从而进一步校正电路测量的准确度。

3、测量数据
单机测量:与计数器比较:。

相关文档
最新文档