安曉莉
(西安思源學(xué)院 電子信息工程學(xué)院, 陜西 西安 710038)
本文采用52單片機(jī)設(shè)計(jì)了一款紙張計(jì)數(shù)裝置,該裝置前端的兩塊50 mm×50 mm的平行板分別通過(guò)導(dǎo)線a和導(dǎo)線b連接到測(cè)量顯示電路,它可測(cè)量并顯示置于極板間的紙張的數(shù)量。
從設(shè)計(jì)任務(wù)可知,前端的兩塊50 mm×50 mm的平行板構(gòu)成平行板電容器。改變兩塊板之間的紙的張數(shù)(電容器極板中間的介質(zhì)發(fā)生改變),就會(huì)引起電容容量改變[1]。如果將此電容接到555定時(shí)器上構(gòu)成多諧振蕩器,電容量的改變就可以改變多諧振蕩器輸出脈沖的頻率。
如果采用52單片機(jī)的定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)200 m/s時(shí)間內(nèi)對(duì)555定時(shí)器輸出的振蕩脈沖進(jìn)行計(jì)數(shù),通過(guò)計(jì)算就可獲得振蕩脈沖的頻率。通過(guò)測(cè)試,將每增加一張紙所對(duì)應(yīng)的振蕩脈沖的頻率記錄下來(lái),列成表格,在程序中通過(guò)取表的辦法獲得紙的張數(shù)并顯示。
根據(jù)上述設(shè)計(jì)思路,得出設(shè)計(jì)框圖,如圖1所示。
圖1 系統(tǒng)設(shè)計(jì)框圖
單片機(jī)工作時(shí)鐘由晶振電路產(chǎn)生;復(fù)位電路完成單片機(jī)的初始化;555定時(shí)器用來(lái)輸出矩形波,該矩形波的寬度隨紙張數(shù)變化而變化;按鍵由啟動(dòng)測(cè)量按鍵和較準(zhǔn)按鍵組成;24C02存儲(chǔ)器用于存儲(chǔ)每增加一張紙所對(duì)應(yīng)的矩形波的頻率值;數(shù)碼管顯示電路顯示紙張數(shù);蜂鳴器用于電容兩極板短路時(shí)的報(bào)警和啟動(dòng)鍵按下后,給出測(cè)量結(jié)果時(shí)的鳴叫提示。
2.2.1 555定時(shí)器構(gòu)成的多諧振蕩器
平行板的一個(gè)極板接555定時(shí)器的2腳和6腳,另一個(gè)極板接地;555的7腳和6腳之間接200 K的電阻和二級(jí)管1N5817;8腳和4腳連在一起;8腳(4腳)經(jīng)200 K電阻和7腳相連;1腳接地、5腳通過(guò)0.01 μF的電容接地;3腳輸出矩形波[2],如圖2所示。
圖2 多譜振蕩器示意圖
本設(shè)計(jì)選擇R1和R2為200 kΩ,原因是此時(shí)數(shù)碼管顯示的數(shù)不龐大,且能反映出紙張的變化。
2.2.2 24C02存儲(chǔ)器
24C02是容量為256個(gè)字節(jié)的串行EEPROM存儲(chǔ)器。本設(shè)計(jì)中紙張數(shù)所對(duì)應(yīng)的頻率值為int型,在存儲(chǔ)時(shí)占兩個(gè)字節(jié)。除去兩極板短路時(shí)的頻率0外,可存儲(chǔ)127個(gè)頻率值,但是,隨著紙張數(shù)的增加,頻率的變化會(huì)越來(lái)越小,因此,本系統(tǒng)只能識(shí)別30張以?xún)?nèi)的紙的數(shù)量,誤差在一張以?xún)?nèi)。
2.2.3 數(shù)碼管顯示電路
數(shù)碼管采用動(dòng)態(tài)顯示方式實(shí)現(xiàn)紙張數(shù)的顯示。由PO口輸出的字段數(shù)據(jù)經(jīng)74LS245后驅(qū)動(dòng)數(shù)碼8個(gè)字段;P2.2、P2.3、P2.4接74LS138譯碼器A、B、C端,74LS138譯碼器的八路輸出作為選通信號(hào)接8位數(shù)碼管的公共端。采用“逐位點(diǎn)亮,輪流顯示”的方法實(shí)現(xiàn)穩(wěn)定顯示紙張數(shù)[3]。
本系統(tǒng)采用單片機(jī)的定時(shí)/計(jì)數(shù)器0定時(shí)200 m/s,在此期間,啟動(dòng)定時(shí)/計(jì)數(shù)器1對(duì)矩形波個(gè)數(shù)計(jì)數(shù),當(dāng)200 m/s定時(shí)時(shí)間到,停止定時(shí)/計(jì)數(shù)器1計(jì)數(shù)。計(jì)數(shù)值除以200 m/s即為頻率值。
為了使測(cè)量更準(zhǔn)確,采用一秒鐘采集5次頻率(每200 m/s采集一個(gè)頻率數(shù)據(jù)),把5個(gè)頻率數(shù)據(jù)加權(quán)平均,將其作為當(dāng)前紙張所對(duì)應(yīng)的頻率值。
主函數(shù)流程圖如圖3所示。
圖3 主函數(shù)流程圖
要能根據(jù)頻率范圍得出紙張數(shù),需事先將每增加一張紙所對(duì)應(yīng)的頻率值存儲(chǔ)進(jìn)24C02,在這里把這個(gè)過(guò)程叫校準(zhǔn) 。校準(zhǔn)按鍵接在P3.3引腳上,該鍵按下時(shí),CPU跳轉(zhuǎn)到外部中斷1中斷服務(wù)程序。在中服程序中,將頻率的高八位存入低位地址中,頻率的低八位存入高位地址中,每存完一個(gè)頻率,地址值加2。
程序代碼如下。
首先定義按鍵,聲明紙張計(jì)數(shù)變量。
sbit KeySure=P3^3; //定義按鍵
u16 NumOfTest = 0;//計(jì)數(shù)起始位
//外部中斷1的中斷函數(shù)
void Int1() interrupt 2
{
delay(3 000); //延時(shí)消抖
if(KeySure==0)
{
At24c02Write(NumOfTest,Freq_array[5]/255);
NumOfTest++;
delay(2 000);
At24c02Write(NumOfTest,Freq_array[5]%255);
NumOfTest++;
delay(2 000);
}
}
啟動(dòng)測(cè)量按鍵接在P3.2上,按下該鍵后,CPU跳轉(zhuǎn)到外部中斷0中斷服務(wù)程序,在該中服程序中調(diào)用一個(gè)計(jì)算紙張數(shù)函數(shù),實(shí)現(xiàn)根據(jù)頻率值計(jì)算出紙張數(shù),并將結(jié)果送數(shù)碼管顯示,啟動(dòng)蜂鳴器報(bào)警,提示一次測(cè)量結(jié)束[4]。
程序代碼如下。
//外部中斷0中斷函數(shù)
void Int0() interrupt 0
{
delay(1 000); //延時(shí)消抖
if(KeyAddNum==0)
{
Num = CalPNum(Freq_array[5]);
//數(shù)碼管顯示
DisplayData[7]=smgd[Num/10];
DisplayData[6]=smgd[Num%10];
//蜂鳴器報(bào)警
}
}
計(jì)算紙張數(shù)函數(shù)流程圖如圖4所示。
圖4 計(jì)數(shù)流程
程序代碼如下。
char Num = 0; //當(dāng)前紙張數(shù)量
#define AllNUM 60 //30張紙,需要60個(gè)字節(jié)存儲(chǔ)空間
sbit KeyAddNum=P3^2; //定義按鍵K
張數(shù)計(jì)算函數(shù)
unsigned char CalPNum(u16 frequence)
{
char i;
int freq1,num11,num12;//n-1 張紙時(shí)的頻率
int freq2,num21,num22;//n 張紙時(shí)的頻率
int freq3,num31,num32;//n+1 張紙時(shí)的頻率
unsigned char PNum;
for(i=2; i { num11 = At24c02Read(i-2); delay(1000); num12 = At24c02Read(i-1); delay(1000); freq1 = num11*255 + num12; //取出n-1張紙的頻率 num21 = At24c02Read(i); delay(1000); num22 = At24c02Read(i+1); delay(1000); freq2 = num21*255 + num22; //取出n張紙的頻率 num31 = At24c02Read(i+2); delay(1000); num32 = At24c02Read(i+3); delay(1000); freq3 = num31*255 + num32; //取出n+1張紙的頻率 //在頻率表內(nèi)查該頻率對(duì)照的紙張數(shù) if( (freq2 -(0.4) * (freq2 - freq1) <= frequence) && (frequence < freq2 + (0.6)*(freq3 - freq2)) ) { PNum = i/2; return PNum; } } return 0; } 由于本設(shè)計(jì)只能識(shí)別30張紙,即對(duì)應(yīng)的頻率只占60字節(jié),在判斷框中設(shè)置上限為60-3,是為了防止n+1張紙對(duì)應(yīng)的頻率超出地址上限而出錯(cuò)[5]。 頻率落在n張紙對(duì)應(yīng)得頻率范圍是依據(jù)試驗(yàn)得來(lái)的公式如下。 freq2-0.4(freq2-freq1)≤f≤freq2+0.6(freq3-freq2) 本設(shè)計(jì)能夠完成30張以?xún)?nèi)的紙的張數(shù)的測(cè)量與顯示,具有校準(zhǔn)、啟動(dòng)測(cè)量和蜂鳴器提示報(bào)警功能。不足之處是測(cè)試的紙張數(shù)較少,原因主要是52單片機(jī)運(yùn)算能力不夠。如果將52單片機(jī)更換為STM32,則測(cè)量速度和測(cè)量張數(shù)將會(huì)大幅度提高。4 總結(jié)