液体点滴速度监控装置资料Word格式文档下载.docx

上传人:b****5 文档编号:17244146 上传时间:2022-11-29 格式:DOCX 页数:35 大小:200.82KB
下载 相关 举报
液体点滴速度监控装置资料Word格式文档下载.docx_第1页
第1页 / 共35页
液体点滴速度监控装置资料Word格式文档下载.docx_第2页
第2页 / 共35页
液体点滴速度监控装置资料Word格式文档下载.docx_第3页
第3页 / 共35页
液体点滴速度监控装置资料Word格式文档下载.docx_第4页
第4页 / 共35页
液体点滴速度监控装置资料Word格式文档下载.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

液体点滴速度监控装置资料Word格式文档下载.docx

《液体点滴速度监控装置资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《液体点滴速度监控装置资料Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。

液体点滴速度监控装置资料Word格式文档下载.docx

采用中断和查询的方法,设计的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、源程序:

时间基准缓冲区:

秒55h0.01秒56h

键盘设置缓冲区:

秒57h0.01秒58h

传感测量缓冲区:

前次—秒51h0.01秒52h当前—秒53h0.01秒54h差值—秒4fh0.01秒50h

最终显示缓冲区:

选择值:

54h测定值5ah5bh5ch设置值5dh5eh5fh

R4用于步进电机的步进记忆

org0000h

ajmpmain

org0003h

ajmpjpint;

int0

org000bh

ajmptimes;

t0

org0013h

ajmpcgint;

int1

org0040h

main:

movsp,#60h;

设置堆栈

mov41h,#00h

mov42h,#00h

mov43h,#00h

mov44h,#00h

mov45h,#00h

mov46h,#00h

mov47h,#00h

mov48h,#00h

mov4fh,#00h

mov50h,#00h

mov51h,#00h

mov52h,#00h

mov53h,#00h

mov54h,#00h;

初值设置

mov55h,#00h

mov56h,#00h;

以上为时间初值

mov54h,#00h

mov57h,#00h;

初值显示为00

mov58h,#00h

mov59h,#00h

mov5ah,#00h

mov5bh,#00h

mov5ch,#00h

mov5dh,#00h

mov5eh,#00h

mov5fh,#00h

movr7,#00h

setbf0

clrp2.1

movtmod,#01h;

T0为工作方式0

movtl0,#0f0h;

计数器初值

movth0,#0d8h

movie,#87h;

中断设置,除T1,ES外全开中断

movip,#02h;

中断优先级

setbit0

setbit1;

脉冲触发方式

setbtr0;

启动定时

setbp1.4

disp:

acalldisp0;

调用显示子程序

ajmpdisp

disp0:

pushacc

movdptr,#table

jnbf0,disp1

mova,54h;

选择值显示

cjnea,#01h,zzz1

movca,@a+dptr

movsbuf,a

jnbti,$

clrti

mova,#0ffh

acalldealy

ajmpdisp1

zzz1:

cjnea,#02h,zzz2

zzz2:

cjnea,#03h,zzz3

zzz3:

mov54h,#00h

disp1:

mova,5ah;

测定值显示

cjnea,#00h,disp2

ajmpdisp3

disp2:

cjnea,#01h,disp4

disp3:

mova,#0feh

disp4:

mova,5bh

mova,#0fdh

mova,5ch

mova,#0fbh

clrti

mova,5dh;

设置值显示

mova,#0dfh

mova,5eh

mova,#0bfh

mova,5fh

mova,#7fh

popacc

ret

dealy:

movr0,#0fah

lll:

nop

djnzr0,lll

table:

db03h

db9fh

db25h

db0dh

db99h

db49h

db41h

db1fh

db01h

db09h

jpint:

;

键盘控制子程序

push07h

movr2,#0ah

zzz:

djnzr2,zzz

jbp1.0,x2;

选择键子程序

inc54h

clrex1

setbf0

mova,54h

cjnea,#04h,x1

mov54h,#01h

x1:

ajmpret0

x2:

jbp1.1,x3;

加1键子程序

cjnea,#00h,lll1

lll1:

cjnea,#01h,lll2

inc5fh

cjnea,#0ah,zhongju

mov5fh,#00h

lll2:

cjnea,#02h,lll3

inc5eh

cjnea,#0ah,ret0

mov5eh,#00h

lll3:

inc5dh

mova,5dh

mov5dh,#00h

x3:

jbp1.2,x4;

减1键子程序

cjnea,#00h,llll1

llll1:

cjnea,#01h,llll2

dec5fh

cjnea,#0ffh,ret0

mov5fh,#09h

zhongju:

llll2:

cjnea,#02h,llll3

dec5eh

mov5eh,#09h

llll3:

dec5dh

mov5dh,#09h

x4:

jbp1.3,x5;

确定键子程序

clrf0

acallenter;

因指令而修改

ret01:

对整数进行修正

mova,r7

cjnea,#14,ccc1

mov57h,#03h;

为20置3

setbex1

ccc1:

cjnea,#1eh,ccc2

mov57h,#02h;

为30置2

ccc2:

cjnea,#3ch,ret02

mov57h,#01h;

为60置1

x5:

jbp2.0,ret0;

报警监测

setbp2.1;

送报警声音

ret02:

ret0:

pop07h

reti

enter:

clrc

求时间段程序

movb,#64h;

百位数

mulab

movr7,a

movb,#0ah;

十位数

adda,r7

adda,r7

movr7,a;

此时r7中为设定值

subba,#14h;

查表前减20

movdptr,#table1;

由数值查时间段表

mov58h,a

times:

时间设置

movtl0,#0f0h

movth0,#0d8h

setbtr0

inc56h

mova,56h

cjnea,#64h,quit0

mov56h,#00h

inc55h

quit0:

cgint:

传感测量

zzzz:

djnzr2,zzzz

jnbp3.3,cgint1

cgint1:

push03h

push04h

push05h

push06h

incr7

cjner7,#0ah,zhongju1

movr7,#00h

mova,53h;

数值转移

mov51h,a

mov52h,a

mova,55h;

读取当前时间

mov53h,a

mov54h,a

clrc;

求10个脉冲差值子程序

mov47h,#00h;

10差值寄存区

mov48h,#00h

mova,53h

subba,51h

mov47h,a

subba,52h

jnczero;

如果当前值大就跳转

dec47h

mova,#00h

adda,#64h

zero:

mov48h,a

mova,47h;

平均差值

movb,#0ah

divab

mov4fh,a

mova,b

movr3,a;

秒余数暂存

mova,48h

movb,#0ah

mov50h,a

movr4,a;

0.01秒暂存

mova,r3

adda,50h

zhongju1:

mova,44h

mov42h,a

mova,43h

mov41h,a

mova,55h

mov43h,a

mov44h,a

求差值子程序,供电机使用

mov45h,#00h

mov46h,#00h

mova,43h

subba,41h

mov45h,a

subba,42h

jnczero1;

dec45h

zero1:

mov46h,a

mova,45h

mova,4fh

cjnea,#03,ddd1;

送动态显示缓冲区

mov5ah,#00h;

整值判断

mov5bh,#02h

mov5ch,#00h

ajmpexit

ddd1:

cjnea,#02h,ddd2

mova,50h

jnzddd01

mov5ah,#00h

mov5bh,#03h

ddd01:

movdptr,#table2;

秒值为2的表

movr5,a

anla,#0fh

mov5ch,a

mov5ah,#00h

ddd2:

cjnea,#01h,ddd3

jnzddd02

mov5bh,#06h

ddd02:

movdptr,#table3;

秒值为1的表

mova,r5

swapa

mov5bh,a

ddd3:

cjnea,#3ch,ddd03

mov5ah,#01h

mov5bh,#00h

ddd03:

subba,#3ch

jclar100;

大于100跳转

小于100

movdptr,#table4;

60到99的表

lar100:

movr5,50h

mova,#3ch

subba,r5

movdptr,#table5;

100到150的表

exit:

jbf0,exit1;

F0为1时电机不工作

acalldianjic;

送步进电机子程序

exit1:

pop05h

pop03h

pop04h

pop06h

dianjic:

电机控制子程序.zhengzh为前进,fanzh为后退

mova,57h

subba,45h

jzlowdc;

如果高位相等则进行低位比较

jcjcc1;

当前滴速小于设定滴速,须反转放松

acallzhengzh;

当前滴速大于设定滴速,须正转挤压

a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1