|
1引言 流量儀表廣泛應(yīng)用于各工業(yè)生產(chǎn)過程中,為生產(chǎn)過程的自動(dòng)化提供重要的數(shù)據(jù)。特別在蒸汽、氣體、水等流量的貿(mào)易結(jié)算中,流量儀表起到仲裁的作用,流量的精確度直接關(guān)系到供方和用戶之間的經(jīng)濟(jì)利益,這就要求流量儀表的精確度要高。流量儀表運(yùn)行時(shí)的精確度可以通過對(duì)流量傳感器設(shè)計(jì)、二次儀表測(cè)量電路等改進(jìn)來實(shí)現(xiàn)。但是,普通的流量儀表大多用交流電供電,當(dāng)停電時(shí)是不能進(jìn)行計(jì)量的,此時(shí)的流量還存在,這就造成了累積流量很大的不確定性誤差,引起供方和用戶之間爭議,有時(shí)引起雙方很大的矛盾。為此,筆者設(shè)計(jì)的流量儀表增加了記錄掉電次數(shù)和掉電時(shí)間的功能,可以估算這段時(shí)間流量來補(bǔ)償累積流量,減小不確定性誤差。 2DS1302簡介 對(duì)掉電的記錄主要是通過對(duì)實(shí)時(shí)鐘DS1302進(jìn)行操作來實(shí)現(xiàn)。為此先對(duì)其加以介紹。DS1302是串行實(shí)時(shí)鐘電路,內(nèi)部具有實(shí)時(shí)鐘、日歷和靜態(tài)RAM。 2.1DS1302特點(diǎn) (1)實(shí)時(shí)鐘、日歷提供了秒、分、時(shí)、日、星期、月和年等數(shù)據(jù),可根據(jù)月份和閏年的情況自動(dòng)調(diào)整,其中時(shí)可以采用24h或12h格式; (2)31字節(jié)靜態(tài)RAM供用戶使用; (3)8腳DIP或SOIC封裝; (4)在2.5V工作時(shí),芯片電流小于300μA; (5)可選的涓流充電方式; (6)簡單的3線串聯(lián)I/O接口; (7)工作電源和備份電源雙引腳輸入。 2.2基本控制操作 為了初始化數(shù)據(jù)讀寫操作,必須在SCLK引腳為低電平時(shí),RST信號(hào)低變高來啟動(dòng)操作,先將具有地址和控制信息的8位數(shù)據(jù)(控制字節(jié))裝入芯片寄存器內(nèi),接著是讀出或?qū)懭氲臄?shù)據(jù)。根據(jù)控制字節(jié)的命令數(shù)據(jù)的讀、寫可以是單字節(jié)或多字節(jié)的突發(fā)方式進(jìn)行。所有的數(shù)據(jù)寫入DS1302時(shí),時(shí)鐘上升沿有效,而讀出的數(shù)據(jù)在時(shí)鐘下降沿輸出。 2.3命令字節(jié) 每次數(shù)據(jù)的傳輸都是由命令字節(jié)開始,最高位必須是1,傳輸始終從最低有效位開始。命令字節(jié)格式: (1)單字節(jié)讀、寫命令字節(jié); 
2.4讀寫實(shí)時(shí)鐘的時(shí)序及子程序 
根據(jù)上面的時(shí)序圖,對(duì)DS1302操作的子程序如下,其中READ為單字節(jié)讀,WRITE單字節(jié)寫,BUS-TRD多字節(jié)讀。 RSTBIT P1.0;P1.0接RST端 SCLK BIT P1.1;P1.1接SCLK端 DAT BIT P1.2;P1.2接I/O端 BUSTRD:CLR SCLK;多字節(jié)讀 NOP ; SETB RST ;RST為1 MOV A,#0BFH ;多字節(jié)命令 ACALL WBYTE ;寫入命令 RLOP:NOP ACALL RBYTE ;讀出1字節(jié) MOV@R0,A ;讀出數(shù)據(jù)轉(zhuǎn)存 INC R0 ;修改指針 DJNZ R3,RLOP ;直到讀完為止 CLR RST ;RST為0 RET WRITE:CLR SCLK;單字節(jié)寫,A寫入命令,R2 NOP;為寫入數(shù)據(jù) SETB RST ;RST為1 ACALL WBYTE ;寫命令字節(jié) MOV A, R3 ;寫入數(shù)據(jù)送A ACALL WBYTE ;寫數(shù)據(jù) CLR RST ;RST為0 RET READ:CLR SCLK;單字節(jié)讀,A讀出的命令,R NOP ;為數(shù)據(jù) SETB RST ;RST為1 ACALL WBYTE ;寫命令字節(jié) ACALL RBYTE ;讀出1字節(jié)數(shù)據(jù) CLR RST ;RST為0 RET WBYTE:MOV R7,#08H;移入1字節(jié)數(shù)據(jù) WBYTE1:RRC A ;輸出位送C MOV DAT,C ;C送到I/O端 SETB SCLK ;SCLK上升沿 CLR SCLK DJNZ R7,WBYTE1;8位輸出完為止 RET RBYTE:SETB DAT ;移出1字節(jié) MOV R7,#08H ;R7為位數(shù)計(jì)數(shù)器 LOP:CLR SCLK ;產(chǎn)生下降沿 MOV C,DAT ;讀取數(shù)據(jù)位 SETB SCLK RRC A ;讀取數(shù)據(jù)位送A DJNZ R7,LOP ;直到8位讀完 RET END 3掉電記錄設(shè)計(jì) 對(duì)掉電記錄的主要電路如圖1所示,RAM6116和實(shí)時(shí)鐘DS1302的備用電源由電池供電,DS1302內(nèi)有涓流充電電路,掉電后6116可以保存數(shù)據(jù),DS1302實(shí)時(shí)鐘可以繼續(xù)工作。 3.1影子時(shí)鐘設(shè)計(jì) CPU的T0作為定時(shí)器,采用方式1,設(shè)計(jì)定時(shí)時(shí)間100ms,其中斷程序再計(jì)數(shù)10次,即產(chǎn)生一個(gè)秒的定時(shí)器。在每個(gè)秒的中斷程序中將DS1302的時(shí)鐘數(shù)據(jù)(7字節(jié))讀出,再寫入DS1302的RAM內(nèi),程序運(yùn)行時(shí)DS1302內(nèi)RAM的數(shù)據(jù)(前7字節(jié))就是影子時(shí)鐘,它跟隨DS1302的時(shí)鐘變化而變化。 
3.2掉電次數(shù)和時(shí)間的記錄 當(dāng)?shù)綦姾?程序停止運(yùn)行,所以,影子時(shí)鐘也停止工作,影子時(shí)鐘記錄了掉電前1s的時(shí)刻。而DS1302的備用電池保證了其實(shí)時(shí)鐘繼續(xù)工作(計(jì)時(shí))。每次上電,程序首先將實(shí)時(shí)鐘數(shù)據(jù)讀出和影子時(shí)鐘進(jìn)行比較,若二者之差大于設(shè)定值,則表明有1次掉電,此時(shí)的實(shí)時(shí)鐘數(shù)據(jù)為上電的時(shí)刻,影子時(shí)鐘為掉電時(shí)刻,二者之差為這次掉電時(shí)間。將掉電前后的時(shí)刻、掉電次數(shù)計(jì)數(shù)器加1后以及掉電時(shí)間累積(掉電前后之差)保存數(shù)據(jù)到6116內(nèi)。估算掉電時(shí)間段的累計(jì)流量,若采用掉電前平均的瞬時(shí)流量進(jìn)行計(jì)算,就要計(jì)算平均瞬時(shí)流量,為此,要記錄第一次上電的時(shí)間,用現(xiàn)在的時(shí)間減去第一次上電時(shí)間為儀表工作時(shí)間(近似),用累計(jì)流量除以工作時(shí)間即為平均瞬時(shí)流量,平均瞬時(shí)流量乘以這次的掉電時(shí)間就是掉電時(shí)間段的累積流量。當(dāng)然,估算掉電時(shí)間段流量的方法很多種,設(shè)計(jì)一個(gè)參數(shù)來確定哪一種方案,由供方和用戶方協(xié)商來選擇。 3.3程序框圖 程序框圖如圖2所示,程序開始首先判斷實(shí)時(shí)鐘和影子時(shí)鐘之差是否大于設(shè)定值,不大于說明沒有掉電,繼續(xù)執(zhí)行;若大于設(shè)定值說明一次掉電,保存數(shù)據(jù),估算掉電時(shí)間段的流量。 
4結(jié)束語 通過對(duì)儀表的掉電次數(shù)和時(shí)間的記錄,估算掉電期間的流量,較好地解決貿(mào)易雙方的矛盾,這種方法不但適應(yīng)流量儀表,也可以應(yīng)用于其它有需要記錄掉電參數(shù)的儀表中。 摘自:中國計(jì)量測(cè)控網(wǎng)
|