流量检测系统Word文档下载推荐.docx
- 文档编号:16357753
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:20
- 大小:1.03MB
流量检测系统Word文档下载推荐.docx
《流量检测系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《流量检测系统Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
2.3测量放大器方案:
2.4A/D转换器方案:
总体设计:
-4-
三、硬件设计-5-
3.1、单片机最小系统-5-
3.2、LCD液晶显示模块-6-
3.3、矩阵按键模块-6-
3.4、信号模拟模块-6-
3.5、信号放大模块-7-
3.6、AD转换模块-8-
3.7、报警模块-9-
四、软件设计-11-
五、系统仿真与调试-11-
5.1硬件调试过程:
-11-
5.2调试与仿真过程图-12-
5.3实物图-13-
5.4使用说明-13-
六、设计总结-13-
七、参考文献-14-
附录-14-
一、设计任务及要求
设计一个基于51单片机的流量测量系统
设计一个基于MCU的智能测控系统,对该系统有以下基本要求:
系统采用DXP(或PROTEL)软件设计电路原理及PCB图,设计布局必须合理美观,PCB图需要完整的丝印,并采用矩形布局;
不允许完全采用自动布线方式,如发现完全自动布线方式,板子重做,并要求制作印刷电路板,单双面不限,由于条件限制建议采用单面板,另一面尽量少走线,并飞线解决,不允许采用万能板;
系统需具有显示功能,并配以较为完善的功能按键;
系统需含有信号放大调理、数据采集等方面功能模块,严禁采用数字式传感器,如系统在这方面的内容有缺失,则系统复杂程度必须有较大提升;
系统软件部分需配套相关的数据处理方法,如平均滤波、中值滤波、非线性修正等;
实现工程应用中的某个具体功能(如PID直流电机调速系统、电阻测量仪、红外热释电检测系统、超声波测距系统、称重系统、
二、方案总体设计
流量的概念:
液体在单位时间内通过垂直于流速的横截面的数量称为流量。
当被测液体流过传感器时,在流体作用下,叶轮受力旋转,其转速与管道平均流速成正比。
叶轮的转动周期地改变磁回路的磁阻值,检测线圈中的磁通随之发生周期性变化,产生频率与叶片旋转频率相同的感应电动势,经放大后,进行转换和处理。
电磁流量计:
我们把在管道内流动的导电液休流动看成导休的运动。
当管道置于磁场内,在与磁场方向、管道的中心轴、管道的直径三者相互垂直的管道位置,装两个与液体相接触的电极.如图2一2所示。
那么,管道的直径可以看成导体的长度,液体相对于电极流动,这样就可以看成导体在磁场内做切割磁力线运动。
显然,这时候两电极能够感应出电动势米。
感应电动势大小遵循式(2-2)0如果能够侧量出两电极问的电动势,也就是电压,那么当磁感应强度B一定时,测量的感应电动势与管道内的平均流速成正比。
由于传感器输出的是小信号,故可以由分压原理来设计小信号的产生。
5伏电源,4.9千欧电阻再加上100欧变位器串联,就可以得到0~100mv电压。
至于流量变化,可以通过电位器来模拟不同的电压值,变化的速率及过程干扰可以通过电位器的变化速率来模拟。
这样对于管径为10mm的管路,假设磁感应为0.001T;
代入上述公式可得流量Q范围为:
0~0.785立方米每秒。
方案一:
直接采用高精度OP放大器。
此放大电路的特点是简单,实现起来对结构工艺要求不高,但是其输入阻抗低,共模抑制比、失调电压和失调电流等参数亦受到放大器本身性能限制不易进一步提高,且无法抑制放大器本身的温漂。
方案二:
采用仪用放大器结构。
此方案是由同相放大电路和差动放大电路构成的精密差动放大器。
只要同相放大器的性能对称,其温漂将大为减少,即使在电压增益很大时,输入阻抗和共模抑制比也很高。
LM331是美国NS公司生产的性能价格比较高的集成芯片,可用作精密频率电压转换器、A/D转换器、线性频率调制解调、长时间积分器及其他相关器件。
LM331采用了新的温度补偿能隙基准电路,在整个工作温度范围内和低到4.0V电源电压下都有极高的精度。
LM331的动态范围宽,可达100dB;
线性度好,最大非线性失真小于0.01%,工作频率低到0.1Hz时尚有较好的线性;
变换精度高,数字分辨率可达12位;
外接电路简单,只需接入几个外部元件就可方便构成V/F或F/V等变换电路,并且容易保证转换精度,但是此种转换器转换速度较慢。
由于本次设计对精度没有太大要求,故不选此A/D转换器。
采用ADC0809作为A/D转换器。
ADC0809为CMOS集成电路,属于逐位逼近比较型的转换器,分辨率为八位,转换时间为100um,数据输出端内部具有三态输出锁存器,可与单片机的数据总线直接连接;
而且有八路模拟开关,可直接连接八个模拟量,并可程控选择对其中一个模拟量进行转换。
它与单片机的接口简单使用方便。
此转换器较为熟悉,故采用此种方案。
设计总体框架图如图一所示:
1.总体方案工作原理:
通过模拟传感器产生的小信号,用仪用放大器放大后,经过AD转换器将连续的模拟信号离散化后传给单片机。
三、硬件设计
3.1、单片机最小系统
最小系统包括晶体振荡电路、复位开关和电源部分。
如图二所示:
复位口为P3.0口,当RST引脚有一个高电平并维持两个机器周期,则CPU就可以响应并将系统复位。
需要200欧,1000欧电阻各一个,22微法电容一个,按键一个。
时钟电路需要在XTAL1,2,两个端口跨接石英晶体及两个电容,电容一般取30pF左右。
3.2、LCD液晶显示模块
3.3、矩阵按键模块
本次采用2*2矩阵形式,如图四所示:
右图为2*2矩阵键盘扫描电路的接法,两行分别相连接P2.0,P2.3口,两列分别相连接P21,P2.2口。
先给所有行线一个低电平,然后将列线口的电平状态读入单片机,如果有按键按下,总有一根列线电平被拉至低电平,从而使输入不全为1.
判断键盘中哪一个键被按下是通过将行线逐行置低电平后,检查列输入状态实现的。
方法是:
依次给行线送低电平,然后查所有列线状态,称行扫描。
如果全为1,则所按下的键不在此行,如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。
3.4、信号模拟模块
采用可调电位器分压,来模拟产生100mv以下的电压。
如图五所示:
采用5v电压供电,0.1K可变电位器分压。
3.5、信号放大模块
采用内部集成四个放大器的LM324芯片,通过连接成仪用放大器来进行信号放大。
如图六所示:
LM324内部电路如图七所示:
3.6、AD转换模块
本次采用的是ADC0809芯片,如图八所示:
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
(1)ADC0809的内部逻辑结构
由图九可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2)ADC0809引脚结构
ADC0809各脚功能如下:
D7-D0:
8位数字量输出引脚。
IN0-IN7:
8位模拟量输入引脚。
VCC:
+5V工作电压。
GND:
地。
REF(+):
参考电压正端。
REF(-):
参考电压负端。
START:
A/D转换启动信号输入端。
ALE:
地址锁存允许信号输入端。
(以上两种信号用于启动A/D转换).
EOC:
转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。
OE:
输出允许控制端,用以打开三态数据输出锁存器。
CLK:
时钟信号输入端(一般为500KHz)。
A、B、C:
地址输入线。
3.7、报警模块
蜂鸣器报警如图十:
此电路由P2.4脚控制三极管的通断,来达到控制蜂鸣器的响和停。
要特别注意三级管的接法,分析其工作原理。
3.8、整体电路
整体电路如图十一所示:
四、软件设计
程序流程如图十二所示:
五、系统仿真与调试
在软件编写与调试时,我发现有很多我原来所没有注意到的问题,硬件完成焊接后,先用万用表简单的进行是否短路检测,没有问题后进行通电测试,发现上电指示灯亮,然后下程序到单片机内检测是否能下载程序;
刚开始的时候,我的不能下程序,我首先按照原理图检查了一遍最小系统,发现复位电路存在问题,经修改后还是不能下程序,怎么试都不行,我又检查了电路和最小系统发现都没有问题,最后听同学说可能是杜邦线的问题,经过检查后发现我的四根杜邦线有两根都是坏的。
这是我所没有想到的,换了好的后,就可以下程序了。
放大电路这一块也出了问题,就是上电几秒后芯片就发烫,我检查了电路发现没有问题,后来又看原理图封装等,发现时封装错了,与实物的管脚正好相反。
于是我又单独做了一个放大的小模块与主板相连,解决了芯片发热的问题。
独立的洞洞板放大小模块如图十三:
前面的电路都没有问题后,A/D转换芯片的各个引脚用万用表检测都很正常。
液晶显示模块出了点问题,把地和电源接反了。
小总结:
1,检查有没有断路,用万用表检查;
如果发现有断路,则用焊锡拖连或者用导线连;
2,上电检查单片机能否工作,如果不能检查最小系统,晶振有没有问题,可用万用表测试晶振端电压和单片机VCC电压;
或者是SIP设置不对
3,检查蜂鸣器是否正常,如果不正常可能是三极管连接有问题;
4,检查液晶显示是否有问题,主要是每根导线是否与单片机端口相连,电源地是否接通。
5,检查DAC0809是否有问题,时钟是否在500khz左右,如果晶振频率太大,单片机需要换小点的晶振。
6,放大部分的检测。
7,器件芯片发烫的原因,是由于大的电流引起的,导致大电流的原因可能是虚焊,或者是自己器件用错了,或者是其他导线导致短路等原因,细心排查总会解决。
5.2调试与仿真过程图
PROTEL仿真图如图十四:
5.3实物图
实物图如图十五:
5.4使用说明
上电自动实时检测,结果大于设定最大值时,或者小于最小设定值时,蜂鸣器报警。
这时一号键取消报警。
检测时,将测量结果通过LCD液晶显示出来。
六、设计总结
经过这接近两周的单片机课程设计,完成以STC89C51核心的流量测量系统的设计和制作,最后的调试还是没有出现我想要的结果。
从开始怀疑单片机有问题,怀疑程序有问题,怀疑液晶有问题,可是经过几天的检查验证修改,最后得出结论是因为我的硬件线路有问题,可是奇怪的是我依然找不到哪出了问题。
当我回首这几天的生活,发现除了最让我感到满足的充实之外,对所用到知识的不懂也很令我震撼,往日的知识就在使用的时候才显示出它的重要性,我对我往日的无知而深感惭愧。
但是,经过这几天老老实实,一步一步的用软件设计制作,学习掌握了电路板制作的流程,还是非常开心的。
只要能学到东西,我是不会害怕辛苦和麻烦的。
不是每个人都能随随便便成功。
只有通过勤学多看多思考,多动手把所学的东西用到实际生活中,才能真正感受到知识的力量。
静下心来,一步步去做,总会出现问题,然后想办法去解决,问题不可怕,现在我们需要的就是不断犯错,并不断改正,这样才能更快的进步。
非常感谢老师同学的帮助与指导!
路漫漫其修远兮,吾将上下而求索。
若非一番寒彻骨,怎得梅花扑鼻香!
七、参考文献
1、《电子基础》主编康光华
2、《单片机原理与接口技术》主编李朝青
3、《全国大学生电子设计竞赛获奖作品汇编》北京理工大学出版社;
4、《智能仪器》主编程德福林君
5、《感测技术基础》主编孙传友张一
6、《ADC0809资料》、《LM324资料》等
附录
源程序:
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineDATE_IOP1//P0口并行传输数据
sbitRS=P2^5;
//LCD1602寄存器选择端
sbitRW=P2^6;
//LCD1602读写控制端
sbitE=P2^7;
//LCD1602使能信号端
sbitoe=P3^5;
//0809输出允许控制端
sbiteoc=P3^6;
//0809转换结束信号端
sbitst=P3^7;
//与0809的ale相连,一起启动a/d转换
sbitguang=P2^4;
//发光二极管接口
uchargetdata=0;
//转换后得到数据
ucharqian,bai,shi,ge,num;
ucharcodetable1[]="
0123456789.L/S"
;
ucharcodetable2[]="
ERROR"
voidinitdingshi();
//初始化定时器0
voidadc0809();
//启动0809转换,并得到转换后的结果
voidinityejing();
//初始化LCD1602
//**************延时函数*****************************************
voiddelay_us(unsignedintn)
{
if(n==0)
returnwhile(--n);
}
voiddelay_ms(uinti)
unsignedchara,b;
for(a=1;
a<
i;
a++)
for(b=1;
b<
110;
b++);
}
voiddelay(uintz)
{
uintx,y;
for(x=110;
x>
0;
x--)
for(y=z;
y>
y--);
//********************************************************
voidkey()//按键扫描检测子程序
inttemp;
temp=P2;
P2=0x0A;
delay(10);
switch(temp){
case0x0D:
num=1;
break;
case0x07:
num=3;
P2=0X0A;
P2=0x0e;
switch(temp)
case0x05:
num=2;
break;
case0x0d:
num=4;
//**************控制LCD1602的函数*******************************
voidwrite_command(ucharcome)//写指令函数
RS=0;
//选择指令寄存器
DATE_IO=come;
E=1;
//由高电平跳变成低电平时,液晶执行命令
delay_us(5);
E=0;
RS=1;
voidwrite_date(uchardate)//写数据函数
//选择数据寄存器
//由高电平跳变成低电平时,液晶执行命令
DATE_IO=date;
//***********液晶初始化函数(基本上都是这个模式)*******************
voidinityejing()//液晶初始化函数
RW=0;
//低电平时进行写操作(高电平时进行读操作)
write_command(0x38);
//设置LCD两行显示,一个数据由5*7点阵表示,数据由8跟线传输
delay_ms(5);
write_command(0x01);
//清除屏幕显示
write_command(0x06);
//设定输入方式,增量不移位
write_command(0x0c);
//开整体显示,关光标,不闪烁
//**************************************************************
voidchufa()//将各位数字拆开函数
bai=(getdata)/100;
//求百位数字
shi=(getdata)%100/10;
//求十位数字
ge=(getdata)%10;
//求各位数字
write_command(0x80);
//设置显示地址为LCD第一行,一旦首地址确定,显示完第一个数字后,光标会自动加1右移
write_date(table1[bai]);
//第一位显示百位
write_date(table1[10]);
//第二位显示小数点
write_date(table1[shi]);
//第三位显示十分位
write_date(table1[ge]);
//第四位显示百分位
write_date(table1[11]);
//显示单位'
L'
write_date(table1[12]);
write_date(table1[13]);
delay(100);
//改变数值可以修改数字滚动的速度
//************已成使用0809的固定格式,拿来即可用*****************
voidadc0809()//启动0809转换,并得到转换后的结果
st=0;
//以下三表达式表示启动A/D转换
st=1;
while(!
eoc);
//等待转换结束
oe=1;
//为高电平时,转换的数据输送个单片机
getdata=P1;
//从P0引脚读转换后的信息
oe=0;
//***************************************************************
voidshujuchuli()//去极值平均滤波子程序
intB[8],i,sum,max,min;
for(i=0;
i++;
i<
8)
B[i]=getdata;
sum=sum+B[i];
max=B[i];
min=B[i];
while(B[i]<
=B[i+1])
max=B[i+1];
while(B[i]>
B[i+1])
min=B[i+1];
getdata=(sum-(min+max))/6;
}
voidbaojing()//光报警子程序;
if(getdata>
=0X0D&
&
getdata<
=0X00)
guang=1;
guang=0;
voidmain()
inityejing();
//调用液晶初始化函数
initdingshi();
//初始化定时器0
while
(1)//程序一直循环执行0-999的计数
uchari;
adc0809();
shujuchuli();
baojing();
chufa();
//调用将各位数字拆开函数
while(getdata>
100)
write_command(0x80+0x40);
5;
i++)
write_date(table2[i]);
delay(300);
if(num=1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 流量 检测 系统