单片机组专业综合训练报告.docx
《单片机组专业综合训练报告.docx》由会员分享,可在线阅读,更多相关《单片机组专业综合训练报告.docx(23页珍藏版)》请在冰豆网上搜索。
![单片机组专业综合训练报告.docx](https://file1.bdocx.com/fileroot1/2023-4/17/3f4d3256-29f4-4e22-a4cd-c27fe8dd106c/3f4d3256-29f4-4e22-a4cd-c27fe8dd106c1.gif)
单片机组专业综合训练报告
测控技术及仪器专业综合训练报告
1、题目名称
基于单片机的Festo控制台的液位控制
2、摘要
介绍一种基于单片机实现的液位控制器的设计方法,该控制器以单片机为核心,通过Festo控制台来达到实现控制的目的。
可根据需要设定液位控制高度,同时LCD液晶显示等功能,由于增加了超声波传感器,使其具有与液面不接触的特点,可用于有毒、腐蚀性液体液位的控制,并且本系统结构紧凑、性能可靠、抗干扰能力强、运行效果良好。
关键词:
单片机;A/D转换;Festo控制台;外围硬件电路
3、系统设计
3.1系统设计方案比较说明
对于液位进行控制的方式有很多,而应用较多的主要有2种,一种是简单的机械式控制装置控制,一种是复杂的控制器控制方式。
两种方式的实现如下:
(1)简单的机械式控制方式。
其常用形式有浮标式、电极式等,这种控制形式的优点是结构简单,成本低廉。
存在问题是精度不高,不能进行数值显示,另外很容易引起误动作,且只能单独控制,与计算机进行通信较难实现。
(2)复杂控制器控制方式。
这种控制方式是通过安装在水泵出口管道上的压力传感器,把出口压力变成标准工业电信号的模拟信号,经过前置放大、多路切换、A/D变换成数字信号传送到单片机,经单片机运算和给定参量的比较,进行PID运算,得出调节参量;经由D/A变换给调压/变频调速装置输入给定端,控制其输出电压变化,来调节电机转速,以达到控制水箱液位的目的。
针对上述2种控制方式,以及设计需达到的性能要求,这里选择第二种控制方式,同时考虑到成本需要把PID控制去掉。
最终形成的方案是,利用单片机为控制核心,设计一个对供水箱水位进行监控的系统。
根据监控对象的特征,要求实时检测水箱的液位高度,并与开始预设定值做比较,由单片机控制固态继电器的开断进行液位的调整,最终达到液位的预设定值。
检测值若高于上限设定值时,要求报警,断开继电器,控制水泵停止上水;检测值若低于下限设定值,要求报警,开启继电器,控制水泵开始上水。
现场实时显示测量值,从而实现对水箱液位的监控。
此次专业综合训练在费斯托过程控制系统的实验台上,利用单片机完成液位和流量的控制问题。
Festo系统上的超声波传感器和流量传感器采集信号,信号通过测量转换器转换为电压信号,电压信号通过模拟端子及数据采集卡成为数字信号,到达计算机。
软件部分对液位和流量信号进行处理,采用两点控制模式控制液位的高低和流量的大小:
将采集到的实际值与设定范围进行比较,利用泵来控制液位的高低和流量的大小。
对于两点液位控制,若液位低于设定最小值则打开泵,若液位高于设定最大值则关闭泵,当液位在设定范围之间时则判断前一采集点液位值并据此控制打开或关闭泵。
3.2课题主要研究内容
本课题主要研究基于单片机的液位两点和连续控制系统,其研究主要内容为:
(1)德国festo过程控制系统的组成、工作原理及其与计算机之间的连接电路;
(2)系统中的超声波传感器测量被测信号,将其转换为电信号,信号处理电路将传感器输出的电信号进行整形、转换、滤波处理,变成标准信号;
(3)了解数据采集卡的原理,数据采集卡将采集到的电压信号转换为计算机能处理的数字信号;
(4)使用keilC软件进行编程,掌握PID控制算法,编写液位的两点和连续控制的程序;
(5)对整个系统进行硬件配置及外部电路连接;
(6)调试程序,实现信号的实时采集和液位的两点和连续控制。
3.3系统组成
本装置主要由89C52、逐次逼近式转换器MAX197、驱动电路、LCD显示器、Festo控制台等组成。
3.3过程控制原理
利用超声传感器或流量传感器把液位或流量信号变为0-10v的电压信号,经数据采集卡的模拟输入通道采集到计算机,由单片机根据实测信号和设定值发出控制信号,经NI-6221数据采集卡的模拟输出通道输出0-10v的信号控制泵的驱动器,从而改变泵的开启或关闭,达到控制液位或流量的目的,系统组成结构下图所示。
设定值
4、硬件设计
液位控制的硬件主要包括由单片机、Festo控制台、LCD液晶显示器、A/D转换器和输出控制电路等。
4.1FESTO过程控制系统介绍
德国FESTOPCS过程控制培训系统以模块化的结构详细地模拟了实际工业生产加工的控制过程。
FESTO紧凑型过程控制系统综合温度、流量、液位及压力四种工业过程控制中的典型环节,通过手动阀不同的开关组合,实现不同的控制回路。
根据不同的控制对象应用不同的程序,来完成对独立控制系统的控制。
图4-1FESTO过程控制系统
紧凑过程控制系统结构如图4-2所示。
B101超声波液位传感器,B102流量传感器,B103压力传感器、压力表,B104PT100温度传感器。
B113,B114电容式临近开关,S112浮子式液位开关,S111溢出报警液位开关。
P101离心泵、离心泵控制电机,V106比例控制阀,Eio4加热器,V1o2气动控制阀。
PressureTank102压力罐,Tank101,tank102上、下水箱,手动阀,I/O终端,Easyport。
图4-2紧凑过程控制系统结构示意图
4.2测量信号输入与控制信号输出
4.2.1数字信号输入
输入位
描述
0
流量传感器数字信号
1
下水箱溢出报警液位开关S111
2
上水箱液位开关S112
3
下水箱液位下限开关B113
4
下水箱液位上限开关B114
5
气动控制阀V102关闭
6
气动控制阀V102打开
7
未用到
表4-1数字信号输入
4.2.2数字信号输出
输出位
描述
0
气动控制阀V102打开/关闭标准值0
1
加热器E104打开/关闭标准值0
2
选择泵模拟量控制或数字量控制,为0时,泵处于数字量控制(标准值)为1时,泵处于模拟量控制
3
当泵为数字量控制时,控制泵打开/关闭
4
激活比例阀
5
未用到
6
未用到
7
未用到
表4-2数字信号输出
4.2.3模拟量输入
输入通道
描述
0
液位信号
1
流量信号
2
压力信号
3
温度信号
表4-3模拟信号输入
4.2.4模拟量输出
输出通道
描述
0
泵模拟量控制信号
要求泵处于模拟量控制状态
输出电压能在0~10V范围内变化
1
比例阀模拟量控制信号
要求比例阀处于激活状态
输出电压能在0~10V范围内变化
4.3单片机
单片机采用由蓝海微芯公司生产的40脚AT89C52芯片。
其中,P0口用于A/D转换和显示;P1口连接一个3×5的键盘;P2口用于控制电磁阀和水泵动作;P3口用于读写控制和中断等。
5、软件设计
7系统测试
单片机的程序设计调试分为两种,一种是使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。
为了解决软件调试的问题,第二种是硬件调试,硬件调试其实也需要计算机软件的配合,大致过程是这样的:
计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中(这个设备叫仿真器),仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。
同时,仿真器也会返回单片机内部内存与时序等情况给计算机的辅助软件,这样就可以在软件里看到真实的执行情况。
不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。
8、结论
本文设计了一套基于单片机的液位控制系统。
以LJD—51—A+单片机为开发环境,以德国FESTO过程控制系统教学实验台为控制对象,编写单片机程序实现了对液位的实时测量与控制。
设计的控制系统经过实际测试系统稳定可靠,控制响应速度快,曲线变化平稳,完全满足了液位控制要求,并运用LCD液晶显示器进行显示,克服了单片机人机交互差的缺点。
尤其是其扩展性很好,可以随时添加更加先进的控制算法以及其它如流量、压力控制功能,而且开发周期很短。
本文设计的液位控制系统已经成功的应用于教学和实验中,取得了良好的调节效果。
因此,该系统具有推广使用价值。
9、参考文献
【1】高锋.单片微型计算机原理与接口技术[M].北京:
科学出版社,2003.
【2】郑风翼.电工仪表与测量[M]一E京:
人民邮电出版社。
1999.
【3】房小翠,王金凤.单片机实用系统设计技术.北京:
国防工业出版社。
1999.
【4】李朝晖,吴新峰.单片机控制的自来水节能加热装置[J].自动化博览,1999.
【5】网络资源:
XX百科21IC中国电子网
10、附录
10.1LJD—51—A+单片机原理图
10.2液位控制电路图
10.3程序清单
10.3.1两点液位控制
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineADLOXBYTE[0x9000]
#defineADHIXBYTE[0x9001]
sbitM0=P1^2;
sbitM1=P1^3;
uchars1[]={0xf0,0x5a,0x15,0x00,0x25,0x80,0xa5,0xf0};
uchars2[]={0xf0,0x5a,0x82,0x00,0xff,0x00,0xa5,0xf0};
uchars3[]={0xf0,0x5a,0x85,0xff,0x25,0x80,0xa5,0xf0};
uchars4[]={0xf0,0x5a,0x89,0x4C,0x43,0x44,0xa5,0xf0};
uchardat;
ucharadbusy=0;
uintresult,oresult;
uchari=0;
voiddelay(ucharx)
{
while(x--);
}
voiddianji(ucharx)
{
switch(x)
{
case0:
M0=0;
M1=0;
break;
case1:
M0=1;
M1=0;
break;
default:
;break;
}
}
uintad197(void)
{ADLO=0X50;
while(adbusy==0);
adbusy=0;
result=(ADHI<<4)+(ADLO&0x0f);
result=result*30;
result=result/51;
return(result);
}
voidInit_Com(void)
{
TMOD=0x21;
PCON=0x00;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
voidinit_time0(void)
{
TH0=(65536-20000)/256;
TL0=(65563-20000)%256;
TR0=1;
ET0=1;
EA=1;
}
voidtimer0(void)interrupt1using2
{
TH0=(65536-20000)/256;
TL0=(65563-20000)%256;
i++;
}
voidsiod(void)interrupt4using1
{
if(RI)
{
dat=SBUF;
RI=0;
SBUF=dat;
}
if(TI)
TI=0;
}
voidinter1(void)interrupt2using0
{
adbusy=1;
}
main()
{
ucharj;
init_time0();
Init_Com();
EX1=1;
ES=1;
for(j=0;j<8;j++)
{
SBUF=s1[j];
delay(200);
}
ad197();
oresult=result;
delay(200);
while
(1)
{
if(i==10)
{
ad197();
i=0;
}
for(j=0;j<8;j++)
{
SBUF=s2[j];
delay(200);
}
for(j=0;j<8;j++)
{
SBUF=s3[j];
delay(200);
}
SBUF=0xf0;
delay(200);
SBUF=0X5A;
delay(200);
SBUF=0X89;
delay(200);
SBUF=result/100+0x30;
delay(200);
SBUF=result%100/10+0x30;
delay(200);
SBUF=result%100+0x30;
delay(200);
SBUF=0xa5;
delay(200);
SBUF=0Xf0;
delay(200);
if(result>oresult)
{
if(result<30)
dianji
(1);
else
dianji(0);
}
else
{
if(result>=100)
dianji(0);
else
dianji
(1);
}
oresult=result;
}
}
10.3.2连续液位控制
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineADLOXBYTE[0x9000]
#defineADHIXBYTE[0x9001]
sbitM0=P1^0;
sbitM1=P1^1;
ucharadbusy=0;
uintresult,oresult;
uinthigh,time,period=120;
ucharPWM;
uchari=0;
typedefstructPID
{
doubleSetPoint;
doubleProportion;
doubleIntegral;
doubleDerivative;
doubleLastError;
doublePrevError;
doubleSumError;
}PID;
doublePIDCalc(PID*pp,doubleNextPoint)
{
doubledError,Error;
Error=pp->SetPoint-NextPoint;
pp->SumError+=Error;
dError=Error-pp->LastError;
pp->PrevError=pp->LastError;
pp->LastError=Error;
return(pp->Proportion*Error+pp->Integral*pp->SumError+pp->Derivative*dError);
}
voidPIDInit(PID*pp)
{
memset(pp,0,sizeof(PID));
}
voiddelay(ucharx)
{
while(x--);
}
voiddianji(ucharx)
{
switch(x)
{
case0:
M0=0;
M1=0;
break;
case1:
M0=PWM;
M1=0;
break;
default:
;break;
}
}
uintad197(void)
{
ADLO=0X40;
while(adbusy==0);
adbusy=0;
result=(ADHI<<4)+(ADLO&0x0f);
result=result*30;
result=result/51;
return(result);
}
voidinit_time0(void)
{
TMOD=0x11;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
ET0=1;
EA=1;
}
voidinit_time1(void)
{
TH1=(65536-20000)/256;
TL1=(65563-20000)%256;
TR1=1;
ET1=1;
}
voidtimer0(void)interrupt1using0
{
TH0=(65536-1000)/256;
TL0=(65563-1000)%256;
if(++time==high)
PWM=0;
elseif(time==period)
{
time=0;
PWM=1;
}
}
voidtimer1(void)interrupt3using2
{
TH1=(65536-20000)/256;
TL1=(65563-20000)%256;
i++;
}
voidinter1(void)interrupt2using1
{
adbusy=1;
}
main()
{
PIDsPID;
doublerOut;
doublerIn;
PIDInit(&sPID);
sPID.Proportion=0.01;
sPID.Integral=0;
sPID.Derivative=0;
sPID.SetPoint=100.0;
init_time0();
init_time1();
EX1=1;
ad197();
oresult=result;
delay(200);
while
(1)
{if(i==10)
{rIn=ad197();
i=0;
}
rOut=PIDCalc(&sPID,rIn);
high=rOut*120;
if(high>=120)
dianji(0);
else
dianji
(1);
}
}
10.3.3AD转换(汇编)
AD197LEQU9000H
AD197HEQU9001H
ORG0000H
AJMPMAIN
ORG0013H
LJMPXAD
ORG0030H
MAIN:
MOVIE,#84H
MOVTCON,#00H
MOVDPTR,#AD197L
MOVA,#40H
MOVX@DPTR,A
SJMP$
**********************************
*A/D197的中断子程序*
**********************************
XAD:
CLREX1;关中断
PUSHDPH
PUSHDPL
PUSHACC
LCALLREADAD
POPACC
POPDPL
POPDPH
RETI
;*****************************************
;读AD结果
;*****************************************
READAD:
MOV40H,#00H
MOV41H,#00H
MOVDPTR,#9000H;读入高8位结果放入41H
MOVXA,@DPTR
MOV41H,A
INCDPTR
MOVXA,@DPTR;读入低4位结果放入40H
ANLA,#0FH
MOV40H,A
MOVA,41H
ANLA,#0FH
SWAPA
ORLA,40H
MOV40H,A
MOVA,41H
ANLA,#0F0H
SWAPA
MOV41H,A
RET
END
工作细分表
工作
人员
程序
PPT制作
电路图绘制
实验总报告
王云霄(组长)
部分程序
部分工作
进行监督
全部工作
卢爱青
主要程序
部分工作
提供意见
提供意见
张谦
部分了解
部分工作
主要负责
提供意见
袁大力
部分了解
部分工作
提供意见
辅助工作
姓名
成绩自评
王云霄
优
卢爱青
优
李远
良
张谦
良
袁大力
良