储水罐液位计算机控制系统设计Word格式文档下载.docx
《储水罐液位计算机控制系统设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《储水罐液位计算机控制系统设计Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
![储水罐液位计算机控制系统设计Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-12/14/3c37f9b2-bdb7-4797-9eba-aad41acc25bb/3c37f9b2-bdb7-4797-9eba-aad41acc25bb1.gif)
——表示储水罐中保留的水量;
——表示流出储水罐的水量。
假设A是储水罐的横截面积,h'
为储水罐中水位的高度则(2.1)可写成:
(2.2)
出水流量取决于储水罐的流量系数,储水罐的液位高度,储水罐的出水口面积,和重力常数。
即:
(2.3)
式中Cd——表示储水罐出口的流量系数;
a——表示储水罐的出水口面积;
g——表示重力常数(9.8m/s2)。
结合(2.2),(2.3)我们能得到
(2.4)
假设
是个常数则出水流量将达到一个稳态值
,水位高度也将能达到一个恒定值。
(2.5)
我们假设
有个小的扰动值,我们能得到:
(2.6)
同时液位高度也将会有小的扰动:
(2.7)
将(2.6)、(2.7)带入(2.4)我们可以得到:
(2.8)
应用泰勒级数将(2.8)线性化,泰勒级数:
(2.9)
取泰勒级数第一级得到:
(2.10)
或者
(2.11)
将(2.8)用(2.11)线性化后得到:
(2.12)
对(2.12)进行拉普拉斯变换,我们可以得到:
(2.13)
带入数据可得:
(2.14)
电机的电气方程:
(2.15)
电机的机械方程:
(2.16)
——表示电机电势系数;
——表示电枢电阻;
——表示电枢电压;
——表示电枢电流;
——表示电枢电感;
——表示折算到轴上的转动惯量;
T——表示电动机电磁转矩;
——表示负载转矩;
将(2.15)、(2.16)式进行拉式变换可以得到转速和输入电压的传递函数:
(2.17)
电机经验公式:
得出该电机的传递函数为:
由上式我们可以得到此液位系统的框图如图2-3
图2-3储水罐液位系统框图
3.硬件选择
3.1液体压力传感器选择
本设计中储水罐的高度液位高度最高为2M,根据
,可算出在此设计中最大压强为19.6Kpa。
可选择压力传感器量程为0—20Kpa,最终选用了PT500-500液体压力传感器,PT500-500采用高精度高稳定性电阻应变计做为变送器的感压芯片,选进的贴片工艺,配套带有零点、满量程补偿,温度补偿的高精度和高稳定性放大集成电路。
主要技术要求如表3-1所示。
表3-1PT500-500液体压力传感器技术参数
技术参数
参数值
被测介质
气体、液体及蒸气
量程
-100KPa-20Kpa~60Mpa~150Mpa间任意可选
输出
0~20mA(二线制)
综合精度
±
0.1%FS(量程60MPa以上)、±
0.25%FS、±
0.5%FS
供电
12~36VDC
绝缘电阻
≥1000MΩ/100VDC
负载电阻
最大800Ω
介质温度
-20~85℃、-20~150℃、-20~200℃、-20~300℃(可选)
环境温度
-20~85℃
相对湿度
0~95%RH
过载能力
150%FS
响应时间
≤10mS
电气连接
不锈钢防水密封端子、四芯航空接插件、赫丝曼接头等
此液体压力传感器完全可以满足控制的要求,选择此传感器主要因为:
供电要求12~36VDC,电压范围广,输出0~20mA标准电信号,方便A/D采集。
3.2水泵选择
此设计中应用了TPH2T6K离心式单相交流水泵,其技术参数如表3-2。
此水泵采用单相交流电,易于控制,流量50
/H=0.83
/min,在两分钟内可以达到要求。
表3-2TPH2T6K离心式单相交流水泵技术参数
工作电压
220V
工作频率
50HZ
流量
50m3/H
扬程
55m
进出口径
25cm
马达转速
2900RPM
3.3微控制器的选择
此设计采用ATMEL80C51作为控制芯片。
它是在MCS-48系列的基础上发展的高性能的8位单片机。
所出的系列产品有8051、8031、8751。
其代表就是8051。
其他系列的单片机都以它为核心,所以本设计采用的核心芯片是8051单片机。
CPU是它的核心设备,从功能上看,CPU包括两个部分:
运算器和控制器,它执行对输入信号的分析和处理。
每片80C51包括:
一个8位的微型处理器CPU;
128B的片内数据存储器RAM;
4KB片内程序存储器ROM;
四个8位并行的I/O接口P0-P3,每个接口既可以输入,也可以输出;
两个定时器/记数器;
五个中断源的中断控制系统;
一个全双工UART的串行I/O口;
片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。
最高允许振荡频率是12MHZ。
以上各个部分通过内部总线相连接。
整个系统电控部分以ATMEL公司的8051为核心芯片,控制信号采集、处理、输出三个过程。
这种芯片内置4KROM,因为系统要求控制线较多,如果采用8031外置EPROM程序控制结构,则造成控制线不够,而8051却可以利用P0、P2口作控制总线,大大简化了硬件结构,并可以直接控制LED数据显示,方便现场调试和维护,使整个系统的通用性和智能化得到了很大的提高。
现在介绍下在此设计中用到的引脚,引脚图如图3-1所示。
单片机的40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
3.3.180C51电源
VCC-芯片电源,接+5V;
VSS-接地端;
3.3.280C51时钟
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
3.3.380C51控制线
●ALE/PROG:
地址锁存允许/片内EPROM编程脉冲
ALE功能:
用来锁存P0口送出的低8位地址
PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
●PSEN:
外ROM读选通信号。
●RST/VPD:
复位/备用电源。
RST(Reset)功能:
复位信号输入端。
VPD功能:
在Vcc掉电情况下,接备用电源。
●EA/Vpp:
内外ROM选择/片内EPROM编程电源。
EA功能:
内外ROM选择端。
Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
3.3.480C51I/O接口
●P0口(39脚~32脚):
P0.0~P0.7统称为P0口。
当不接外部存储器与不扩展I/O接口时,它可作为准双向8位输入/输出接口。
当接有外部程序存储器或扩展I/O口时,P0口为地址/数据分时复用口。
它分时提供8位双向数据总线。
●P1口(1脚~8脚):
P1.0~P1.7统称为P1口,可作为准双向I/O接口使用。
对于MCS—52子系列单片机,P1.0和P1.1还有第2功能:
P1.0口用作定时器/计数器2的计数脉冲输入端T2;
P1.1用作定时器/计数器2的外部控制端T2EX。
对于EPROM编程和进行程序校验时,P0口接收输入的低8位地址。
●P2口(21脚~28脚):
P2.0~P2.7统称为P2口,一般可作为准双向I/O接口。
当接有外部程序存储器或扩展I/O接口且寻址范围超过256个字节时,P2口用于高8位地址总线送出高8位地址。
对于EPROM编程和进行程序校验时,P2口接收输入的8位地址。
●P3口(10脚~17脚):
P3.0~P3.7统称为P3口。
它为双功能口,可以作为一般的准双向I/O接口,也可以将每1位用于第2功能,而且P3口的每一条引脚均可独立定义为第1功能的输入输出或第2功能。
图3-180C51单片机引脚图图3-2ADC0808引脚图
3.4A/D转换器选择
本设计采用ADC0808作为A/D转换器,ADC0808是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
ADC0808转换器引脚图如图3-2所示
ADC0808转换器引脚介绍:
●IN0~IN7:
8路模拟量输入端。
●OUT1~OUT8:
8位数字量输出端。
●AL:
:
地址锁存允许信号,输入,高电平有效。
●START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
●EOC:
A/D转换结束信号,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
●OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
●CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
●VREF(+)和VREF(-):
参考电压输入端。
●Vcc:
主电源输入端5V。
●GND:
接地。
●ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路,通道选择表如表3-3所示。
●注意事项:
输出端out8为最低位out1为最高位,与单片机连接是要注意。
表3-3通道选择
ADDC
ADDB
ADDA
选择的通道
IN0
1
IN1
IN2
IN3
IN4
IN5
IN6
IN7
4.硬件电路设计
4.180C51单片机外围电路设计
4.1.1时钟电路
80C51用内部振荡电路,这时需要XTAL1、XTAL2来外接石英晶振和微调电容,如图4-1所示。
外接石英晶振为12MHZ,两个电容为30PF为起振电容。
图4-180C51外部时钟电路
4.1.2复位电路
80C51单片机有一个复位引脚RST,高电平有效。
在时钟电路工作以后,当外部电路使得RST端出现两个机器周期(24个时钟周期)以上的高电平,系统内部复位。
复位方式有两种:
上电复位和按钮复位。
本设计选用按钮复位,因为遇到特殊情况系统出错,可以及时复位保证系统损失减到最低。
复位电路如图4-2所示。
图4-280C51按钮复位电路
4.2水泵驱动电路设计
4.2.1继电器电路
因为本设计中用到的是单相交流水泵用的220V交流电属于强电范围,不能直接与单片机连接所以采用了继电器来充当开关。
继电器电路如图4-3所示。
继电器的触发电路应用了光耦隔离,当单片机的P2.2口输出控制低电平时,光耦输入端导通,使得光耦内部三极管导通,经过R4,R3电阻分压后使得Q1基极电压变高,使得Q1导通,从而使得继电器工作。
其中D1是为了消耗继电器中线圈中掉电后的剩余电流。
图4-3继电器开关电路
4.2.2双向晶闸管过零调功调速原理
本设计中应用双向晶闸管对水泵进行调速控制,根据
(4.1)
式中P——表示电功率KW;
T——表示外部阻力矩N·
m;
——表示角速度rad·
s-1。
当外部情况不变即T保持不变时,在规定时间内电功率的变化将导致角速度的改变,因此调电功就可达到调速的目的。
可控硅过零控制波形见图4-5。
可以看出,过零调功通过的工作电压是完整的正弦波形,过零导通且过零截止。
过零调功方式就是通过在给定的时间内改变加在负载上的交流正弦波个数来调节负载功率的一种控制方法。
图4-5双向晶闸管过零控制信号波形图
4.2.3过零检测电路
过零检测电路的最终目标是实现当50HZ的交流电压通过零点时取出其脉冲。
本设计中用两个光耦实现脉冲的检测,如图4-6所示。
交流电源经R7后加到两个反并联的二极管上,在交流电源的正、负半周,U2中二极管和U8中二极管轮流导通,从而使U1中三极管和U8中三极管也轮流导通,在导通期间光耦的5号输出引脚输出低电平,只有在交流电源过零的瞬间,两个二极管均截止,5号引脚输出高电平,因此5号引脚得到周期为10ms的脉冲信号,再将此信号通过7407逻辑门进行整流,从而得到图4-5中过零脉冲。
电路总R7的大小选取与索取的光耦触发电流有关,本设计中采用600
电阻。
图4-6过零检测电路图
4.2.4双向晶闸管触发电路
本设计中应用了光耦对双向晶闸管进行驱动,电路如图4-7所示。
此电路的工作原理是:
单片机响应用户的参数设置,在I/O口输出一个高电平,经反向器反向后,送出一个低电平,使光电耦合器导通,同时触发双向可控硅,使工作电路导通工作。
R5为触发限流电阻,R6为双向晶闸管门极电阻,防止误触发,提高抗干扰能力。
在本设计中负载是水泵属于感性交流负载,这样会使得双向可控硅承受的电压值远远超过电源电压,可能击穿并且烧坏晶闸管,所以双向晶闸管两极间并联一个RC阻容吸收电路,实现晶闸管的过电压保护。
各个电阻和电容值均为光耦推荐电路中值未加改动。
在给定的时间内水泵得到的功率为:
(4.2)
式中P——表示负载得到的功率;
n——表示给定时间内双向晶闸管导通的正弦波的个数;
N——表示给定时间内正弦波的总个数;
U——表示不加双向晶闸管时负载得到的电压有效值;
I——表示不加双向晶闸管时负载得到的电流有效值。
由(4.2)式可以看出只要N,U,I为定值,只要改变n就可以到达调速的目的。
图4-7双向晶闸管触发电路
4.3数码管电路
本设计中应用了7SEG-MPX2-CC8段式共阴极双数码管,段码引脚接入80C51的P1口,位选两条线分别接单片机的P2^0,P2^1口。
在本设计中采用了数码管的动态显示,利用了人的视觉暂留效应。
5.系统软件设计
5.1软件设计流程图
本系统程序主要有AD转换模块、数码管显示模块、PI调节模块、报警灯控制模块、电机控制模块组成。
工作流程如图5-1所示。
图5-1主程序工作流程图
5.2软件主函数
根据流程图设计出软件的主程序如下:
voidmain()
{
ik=0;
e1=0;
kp=2;
ki=4;
initdingshi();
//中断初始化
st=0;
while
(1)
{
ad();
//AD初始化
if(getdata>
=230)//判断是否水位超过1.8米如果超过
{//打开报警灯否则关闭报警灯
lamp=0;
kg=0;
}
else
lamp=1;
if(getdata<
127)//判断数位是否低于1米如果低于打开继电器,
{
kg=0;
//并设定双向晶闸管导通次数
EX1=1;
//外部中断1允许位打开
y=100-(100*uk)/127;
else
kg=1;
}
5.3软件水泵控制程序
水泵控制程序是在外部中断1、定时器0共同配合下进行的,他们实现了在1秒内控制通过双向晶闸管半波个数,从而精确控制水泵转速。
外部中断1每10MS触发一次,而定时器0要定时1S后才执行任务,所以时序问题很重要。
时序流程图如图5-2所示。
具体程序如下:
voiddingshi()interrupt1//定时器0定时50MS中断程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
w++;
while(w==20)//当到1S时打开外部中断1
{
EX1=1;
w=0;
}
}
voidwaibu()interrupt2//外部中断1,产生双向晶闸管触发脉冲,打开定时器0
TR0=1;
ET0=1;
chufa=1;
delay(8);
chufa=0;
x++;
if(x==y)//当过零脉冲到达调节数时关掉外部中断1并//关闭晶闸管触发脉冲
{
chufa=1;
x=0;
EX1=0;
}
图5-2中断时序流程图
6.结论
本系统主要介绍了水体的液位检测控制,介绍了8051单片机在液位控制系统中的应用,介绍了它们的引脚和在系统中的电路图,本设计还采用了液体压力传感器来对液位的信号采集,利用数码管来进行信号的输出显示,我设计的硬件系统的结构简化,系统精度高,具有良好的人机交互功能,并设有液位报警灯,有问题立即就能发现,减小损失。
通过自动调节控制液位并实现水体的液位报警。
液位控制在设定值上正常运行不需要人工干预,操作人员劳动强度小。
采用单片机设计出的工业水位控制器,能够针对水位的不同状态和不同外界条件进行控制,水位运行稳定、控制品质良好、控制效果明显改善;
同时大大提高了控制系统的抗干扰能力,保证了工业水体液位方面作业的稳定运行。
控制装置具有成本低、抗干扰能力强、控制性能好等优点,且系统硬、软件维护简单方便。
本系统采用双向晶闸管控制水泵,电路简单,实用性强,控制精确。
本设计在双向晶闸管驱动电路方面准备用MOC3041过零保护光耦合器,最终由于在PROTUES中仿真一直报错,最终没有找到解决办法,最终用了普通的NPN型光耦合器代替,增加了双向晶闸管的工作负担。
参考文献
[1]JohnWiley&
Sons,Ltd.MicrocontrollerBasedAppliedDigitalControl[M].TheAtrium,SouthernGate,Chichester,WestSussexPO198SQ,England.JohnWiley&
SonsLtd.2006.
[2]谢维成,杨加国.单片机原理与应用及C51程序设计[M].第二版.北京.北京国马印刷厂.2009-7.
[3]樊月珍.江发潮.基于AT89C51的交流电机调速控制系统设计[EB/OL].北京林业大学工学院网站.20082011-6.
[4]胡寿松.自动控制原理[M].第五版.北京.科学出版社.2007.
[5]余孟尝.数字电子技术基础简明教程[M].第三版.北京.高等教育出版社.2009.
附录
附录1
系统程序:
#include<
reg51.h>
intrins.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitw1=P2^0;
//数码管位选1
sbitw2=P2^1;
//数码管位选2
sbitst=P3^0;
//ADC0808启动信号
sbiteoc=P3^1;
//ADC0808转换标志位
sbitdian=P1^7;
//数码管点的控制I/O口
sbitkg=P2^2;
//继电器控制位
sbitchufa=P2^3;
//双向晶闸管触发控制位
sbitlamp=P2^4;
//报警灯控制位
ucharkp,ki,uk,pk,ik;
//PID系数定义
uintgetdata;
uinttemp;
uintqd=127;
//1M位置
floate,e1,e2,yk;
//PID中间量
intzkb,w=0,t=0,p=0,x=0,y=20;
//变量定义
uchardispbuf[3]={0,0,0};
//数码管缓冲数组
ucharcodetable[]={//段码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay(uchari)//1us定时
while(i--)
_nop_();
voidled();
voidpi();
voidad();
voidinitdingshi();
ik=0;
e1=0;
kp=0.8;
ki=1.5;
initdingshi();
st=0;
while
(1)
{
ad();
if(getdata>
{//打开报警灯否则关闭报警灯
lamp=0;
kg=0;
}
else
lamp=1;
if(getdata<
{
kg=0;
EX1=1;
//外部中断1允许位
y=100-(100*uk)/127;
if(y>
100);
y=100;
}
kg=1;
}
}
voidad()//AD初始化子程序
{
if(p==5)//每25MS进行采集一次