基于單片機(jī)鍋爐液位控制系 1設(shè)計(jì)目的 首先采用液體的導(dǎo)電性,以按鍵模擬液位,這樣可以很精確的檢測到液位系統(tǒng),同樣達(dá)到預(yù)期的目的,通過單片機(jī)系統(tǒng)使數(shù)碼管顯示相應(yīng)的數(shù)字。
系統(tǒng)采用5個按鈕模擬液位來進(jìn)行由下自上的液位檢測。上電復(fù)位后,各部分均初始化,P2.0、P3.5、P3.6、P3.7置高電平,報(bào)警器不發(fā)聲,電機(jī)不轉(zhuǎn)動,LED顯示燈不亮。顯示器顯示0時為復(fù)位情況,當(dāng)液位到達(dá)規(guī)定高度時由液體導(dǎo)通電路,實(shí)現(xiàn)按鈕的閉合后,再通過1位七段LED數(shù)碼管顯示液位位置,做出相應(yīng)的報(bào)警提示,提醒工作人員在接到自動上液報(bào)警后按時手工恢復(fù),保證液體供應(yīng)充足以及設(shè)備的安全。當(dāng)液位為最低液位時顯示黃燈并報(bào)警,按下復(fù)位鍵報(bào)警器不響,當(dāng)液位為5時報(bào)警器響,提醒工作人員液位已滿,此時電機(jī)停止工作,按下復(fù)位鍵報(bào)警器不響。
2設(shè)計(jì)方案
2.1單片機(jī)類型:AT89C51
AT89C51:AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。AT89C51是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機(jī)。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中。
2.2晶體振蕩電路 晶體振蕩電路有一個晶體振蕩器和兩個30pf的瓷片電容組成。晶振是改單片機(jī)提供工作信號脈沖的,為了穩(wěn)定,在晶振的兩端接入了10pf-50pf的瓷片電容接地來消減諧波對電路的穩(wěn)定性的影響。晶振與單片機(jī)的引腳XTAL0和引腳XTAL1構(gòu)成的振蕩電路中會產(chǎn)生諧波,但會降低電路穩(wěn)定性。電路圖如圖2.1所示。
file:///C:/Users/%E6%AD%A6%E7%A6%8F%E7%94%9F/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg
圖4.1 低液位仿真電路圖
4.2總結(jié)。 該系統(tǒng)設(shè)計(jì)是基于在單片機(jī)嵌入式系統(tǒng)而設(shè)計(jì)的,充分利用單片機(jī)強(qiáng)大控制功能和方便通信接口,該檢測控制系統(tǒng)實(shí)現(xiàn)液位檢測、電機(jī)故障檢測、處理和報(bào)警等功能,提高了實(shí)驗(yàn)的自動控制能力。因此,該系統(tǒng)在鍋爐工廠等冶煉領(lǐng)域有著廣闊的應(yīng)用前景。 課設(shè)初期,在選題上老師強(qiáng)調(diào)要找自己感興趣有了解的課題,然后上網(wǎng)查資料,了解與自己選題有關(guān)的電器元件。 在課設(shè)中期,在連接電機(jī)的電路中遇到了問題,后經(jīng)查詢,選定AJC--1000動態(tài)繼電器作為電機(jī)的開關(guān),在電路中又加入了PNP型三極管,作為控制繼電器的開關(guān)。 后期,在實(shí)驗(yàn)仿真過程中遇到調(diào)試與程序不符的情況,后經(jīng)改正程序中的置位接口電平高低使調(diào)試順利進(jìn)行。
參考文獻(xiàn)
[1] 陳海宴.51單片機(jī)原理及其應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2010.3
[2] 何希才.傳感器及其應(yīng)用實(shí)例[M].北京:機(jī)械工業(yè)出版社,2004.9
[4] 童詩白.數(shù)字電子技術(shù)[M].北京:高等教育出版社,2001.6
[5] 王思明,張金敏,茍軍年等.單片機(jī)原理及應(yīng)用[M].北京:科學(xué)出版社,2012.
附錄1
#include<reg51.h>//定義51單片機(jī)頭文件
unsigned char codetable[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//定義一個數(shù)組,使數(shù)碼管顯示的數(shù)字和數(shù)組元素的下標(biāo)相等
sbit yeman=P1^0;//液體自動充滿
sbit yw5=P1^1;//液位充滿
sbit yw4=P1^2;//液位4
sbit yw3=P1^3;//液位3
sbit yw2=P1^4;//液位2
sbit yw1=P1^5;//液位1
sbitshougong=P1^6;//手工填液
sbitdianji=P1^7;//電機(jī)控制位
sbitstate1=P3^7;//紅燈顯示
sbitstate2=P2^0;//蜂鳴器
sbitstate3=P3^6;//電機(jī)工作指示燈綠燈開啟
sbit state4=P3^5;//黃燈顯示
/*延時程序*/
voiddelay02s(void)
{
unsigned char i,j,k;
for(i=100;i>0;i--)
for(j=100;j>0;j--)
for(k=200;k>0;k--);
}
main()
{
P0=0;
P2=1;
while(1)
{
if(shougong==0) //當(dāng)按手動回復(fù)按鈕時
{ state1=0; //手動控制亮紅燈
dianji=0; //開電機(jī)
state2=0; //報(bào)警器響
state3=0; //液位顯示燈
state4=1;
P0=table[0]; //數(shù)碼管顯示
delay02s(); //延時
}
if(yeman==1&&yw5==1&&yw4==1&&yw3==1&&yw2==1&&yw1==0)//當(dāng)唯一的閉合一個傳感器單元:水位1時發(fā)生
{
dianji=0;//開電機(jī)
state1=1;//紅燈亮
state2=1; //報(bào)警不響
state3=0; //電機(jī)工作指示燈打開
state4=0; //液位為1時亮黃燈
P0=table[1]; //顯示液位深度:1
}
if(yeman==1&&yw5==1&&yw4==1&&yw3==1&&yw2==0&&yw1==1)//當(dāng)唯一的閉合一個傳感器單元:水位2時發(fā)生
{
P0=table[2];//顯示液位深度:2
state1=1; //紅燈不亮
dianji=0; //電機(jī)顯示亮
state2=1;
state3=0;
state4=1; //黃燈不亮
}
if(yeman==1&&yw5==1&&yw4==1&&yw3==0&&yw2==1&&yw1==1)//當(dāng)唯一的閉合一個傳感器單元:水位3時發(fā)生
{
P0=table[3]; //顯示液位深度:3
state1=1;
state2=1;
dianji=0;
state3=0;
state4=1;
}
if(yeman==1&&yw5==1&&yw4==0&&yw3==1&&yw2==1&&yw1==1)//當(dāng)唯一的閉合一個傳感器單元:水位4時發(fā)生
{
P0=table[4];
state1=1;
state2=1;
dianji=0;
state3=0;
state4=1;
}
if(yeman==1&&yw5==0&&yw4==1&&yw3==1&&yw2==1&&yw1==1)//當(dāng)唯一的閉合一個傳感器單元:水位5時發(fā)生
{
dianji=1; //關(guān)電機(jī)
state1=0; //紅燈開
state2=0;
state3=1; //電機(jī)工作指示燈熄滅
state4=1;
P0=table[5]; //顯示水位深度已滿
delay02s();
}
if(yeman==0&&yw5==1&&yw4==1&&yw3==1&&yw2==1&&yw1==1) {
P0=table[1];
dianji=0;
state1=1;
state2=1;
state3=0;
state4=0;
delay02s();
P0=table[2];
delay02s();
P0=table[3];
delay02s();
P0=table[4];
delay02s();
P0=table[5];
dianji=1;
state1=0;
state2=0;
state3=1;
state4=1;
}
}
}
|