流量積算儀的設(shè)計(jì)
摘要 本文中介紹了一個(gè)用單片機(jī)設(shè)計(jì)的流量積算儀,與流量計(jì)配合使用,能適用于各種介質(zhì),如氣體、液體等,并能在全流程范圍內(nèi)進(jìn)行非線性調(diào)節(jié),用各種介質(zhì)的標(biāo)準(zhǔn)儀表對(duì)該流量計(jì)進(jìn)行檢定后,即可使之成為該介質(zhì)的流量計(jì)。
一、測(cè)量原理
本文中介紹了一個(gè)用單片機(jī)設(shè)計(jì)的流量積算儀,它能適用于各種介質(zhì),如氣體、液體等,并能在全流程范圍內(nèi)進(jìn)行非線性調(diào)節(jié),用各種介質(zhì)的標(biāo)準(zhǔn)儀表對(duì)該流量計(jì)進(jìn)行檢定后,即可使之成為該介質(zhì)的流量計(jì)。
流量計(jì)由流量傳感器和流量積算儀兩部分組成,流量傳感器由旋渦發(fā)生體、傳感器探頭和產(chǎn)生輸出信號(hào)的相關(guān)電子電路組成。
當(dāng)以一定流速流動(dòng)介質(zhì)遇到流量傳感器的旋渦發(fā)生體時(shí),旋渦產(chǎn)生的頻率與流速成正比,因此與管道內(nèi)的流量成正比,因此我們用單片機(jī)設(shè)計(jì)的流量積算儀,根據(jù)傳感器送來的頻率信號(hào),進(jìn)行累計(jì),顯示,并將累計(jì)流量和瞬時(shí)流量通過串行口通訊送到計(jì)算機(jī)中進(jìn)行處理,如形成報(bào)表等。
為使用儀表更加準(zhǔn)確,我們可以通軟件的方法使儀表非常精確,基本上可達(dá)到0.05%左右。首先在儀表出廠前,非用標(biāo)準(zhǔn)設(shè)置對(duì)該流量計(jì)進(jìn)行檢定后,即可記錄在全流程范圍內(nèi)的若干段中,每段內(nèi)單個(gè)頻率的每秒流量系數(shù)。然后通過四個(gè)鍵的鍵盤設(shè)置流量參數(shù),由單片機(jī)程序?qū)⑾到y(tǒng)全程的頻率對(duì)應(yīng)的每秒流量計(jì)算出來后,寫入單片機(jī)的24C16中。
正常測(cè)量時(shí),根據(jù)不同的頻率取出24C16中的相應(yīng)每秒流量,送到單片機(jī)中經(jīng)運(yùn)算,得到當(dāng)時(shí)的瞬時(shí)流量(米3/小時(shí)),并進(jìn)行累計(jì)。
二、硬件電路原理圖(如附圖一和附圖二)
附圖一:
1、硬件中的核心是ATMEL生產(chǎn)的AT89C51/LV51單片機(jī),它是一種低功耗/低電壓、高性能的8位單片機(jī),片內(nèi)帶有一個(gè)4K字節(jié)的Flash可編程可擦除只讀存儲(chǔ)器,它采用了CMOS工藝和ATMEL公司的高密度非易失性存儲(chǔ)器技術(shù),而且其輸出引腳和指令系統(tǒng)都與MSC-51兼容。
2、存儲(chǔ)流量和參數(shù),用的存儲(chǔ)器是ATMEL生產(chǎn)的AT24C16系列,它是一種帶有閃2K字節(jié)的可電擦除、可編程的只讀存儲(chǔ)器。通過單片機(jī)的P0.0和P0.1口與它的SDA和SCL分別相連,進(jìn)行讀寫操作。
3、一秒硬件復(fù)位電路,使用MC14060(十四位二進(jìn)制計(jì)數(shù)器)、二個(gè)74HC132(兩輸入與非門)和二個(gè)雙JK觸發(fā)器CD4027,在CD4027的15腳形成一秒寬的時(shí)鐘脈沖。
4、CD4027的15腳接到RESET端,使單片機(jī)定時(shí)復(fù)位。單片機(jī)采用省電模式工作,每次輸入、累計(jì)、顯示處理后等待喚醒,這樣工作功耗非常小。設(shè)置補(bǔ)償系數(shù)時(shí),復(fù)位腳正常連接。
5、流量傳感器的輸入脈沖通過74HC393鎖存(雙四位二進(jìn)制計(jì)數(shù)器)后,送入單片機(jī)的P2口。輸入信號(hào):脈沖信號(hào)(0~255)HZ
6、在單片機(jī)內(nèi)經(jīng)過程序處理后,輸出顯示信號(hào)送到P1口(數(shù)據(jù)4位,選擇信號(hào)4位)。連到12針的插座上。
附圖二:
1、輸出顯示信號(hào)送到P1口(數(shù)據(jù)4位,選擇信號(hào)4位)連到12針插座,其中數(shù)據(jù)4位(高四位)送入MC14543(BCD--鎖存/7段譯碼/驅(qū)動(dòng)動(dòng)器)中,共有12個(gè)MC14543,分別控制著與累計(jì)流量8位及瞬時(shí)流量4位相連的液晶塊的顯示數(shù)據(jù)。數(shù)據(jù)中另外4位選擇信號(hào)(ABCD)直接送到CD4514譯碼器(4位鎖存/4-16線譯碼器),通過兩個(gè)MC14174B(帶清0端的6D觸發(fā)器),浮動(dòng)顯示的小數(shù)點(diǎn)位。
2、累積流量和瞬時(shí)流量的顯示使用兩個(gè)液晶塊:EDS806A 960827/DR(8位)、EDS805A 971218/DR(4位)
a、 累積流量顯示:八位浮點(diǎn)式,開始顯示小數(shù)點(diǎn)后五位:0.00000m3,最后顯示小數(shù)點(diǎn)后三位:0000.000m3。
b、 瞬時(shí)流量顯示:顯示為小數(shù)點(diǎn)后兩位:00.00 m3。
三、總框圖及主程序
程序根據(jù)開關(guān)的設(shè)置分三大部分:①正常使用即測(cè)量部分②測(cè)量輸入頻率部分③設(shè)置調(diào)整系數(shù)部分。
主程序如下:
ORG 0000H
LJMP L001E
ORG 0003H
LJMP L05E6
ORG 0023H
LJMP server
MOV C,P0.7
NOP
JC L001E
LJMP L052C ;
L001E: MOV C, P0.7 ;IC40開關(guān)1(ON),3(ON),寫系數(shù)
NOP
JC L002C ;IC40開關(guān)2(ON),4(ON),測(cè)流量
L0029: LJMP L037A ;IC40開關(guān)2(ON),4(OFF),測(cè)頻率
L002C: LCALL L003B ;初始化
LCALL L01D2 ;輸入頻率
LCALL L01B7H ;流量進(jìn)行累計(jì)
LCALL L0085 ;顯示
ORL 87H, #02H
L003B: MOV R0, #60H ;60H~6FH清0
MOV B, #10H
LCALL L005B
MOV C, P3.3
JC L005A
MOV R0, #40H ;40H~6FH清0
MOV B, #10H
LCALL L005B
MOV R0, #50H ;50H~6FH清0
MOV B, #10H
LCALL L005B
L005A: RET
L005B: MOV @R0, #00H
INC R0
DJNZ B, L005B
RET
ORG 0037EH
L037E: NOP
JNB P0.7, L0385
LJMP L052C ;寫系數(shù)
L0385: MOV 38H, #00H ;以下是測(cè)頻率
MOV 39H, #00H
MOV 3AH, #00H
MOV 3BH, #00H
MOV 3CH, #00H
MOV 3DH, #00H
MOV 3EH, #00H
MOV 3FH, #00H
L03A1: CLR C
MOV 2EH, #00H
MOV 2FH, #00H
ACALL L046E
MOV A, R0
NOP
MOV B, #64H
DIV AB
MOV 32H, A
MOV A, B
MOV B, #0AH
DIV AB
MOV 31H, A
MOV 30H, B
MOV 33H, #00H
MOV 34H, #00H
MOV 35H, #00H
MOV 36H, #00H
MOV 37H, #00H
ACALL L0411
ACALL L03EF
MOV C, P3.3
JC L03EC
MOV 38H, #00H
MOV 39H, #00H
MOV 3AH, #00H
MOV 3BH, #00H
MOV 3CH, #00H
MOV 3DH, #00H
MOV 3EH, #00H
MOV 3FH, #00H
L03EC: ORL 87H, #02H
L03EF: ORL P1, #0FFH
MOV B, #0EH
CLR A
MOV DPTR, #0359H ;顯示數(shù)據(jù)
L03F9: MOVC A, @A+DPTR
MOV R0, A
MOV A, @R0
ORL A, #0F0H
ANL P1, A
CLR A
INC DPTR
MOVC A, @A+DPTR
ANL P1, A
ORL P1, #0F0H
ORL P1, #0FFH
CLR A
INC DPTR
DJNZ B, L03F9
RET
L0411: MOV R0, #30H
MOV R1, #38H
MOV B, #08H
CLR C
L0419: MOV A, @R1
ADDC A, @R0
DA A
MOV C, ACC.4
CLR ACC.4
MOV @R1, A
INC R0
INC R1
DJNZ B, L0419
RET
ORG 0359
DB 4BH,0DFH,4AH,0CFH,49H,9FH,49H,8FH,47H,7FH,46H,6FH,45H,5FH,44H,4FH
DB 43H,3FH,38H,2FH,37H,1FH,36H,0FH,2FH,0AFH,2DH,0BFH
ORG 000BH
LJMP L05E6
ORG 052CH
L052C: MOV SP, #38H
MOV IE, #88H
MOV PSW, #00H
MOV TMOD, #15H
MOV TL0, #00H
MOV TH0, #00H
MOV TL1, #00H
MOV TH1, #00H
SETB TCON.TR0
SETB TCON.TR1
SETB P3.1
MOV P3, #0FFH
L0552: LCALL L0BD3 ;鍵盤輸入
L0579: CJNE A, #0FBH, L0552
LCALL L0814 ;寫系數(shù)
RET
ORG 05E6H ;定時(shí)顯示
L05E6: PUSH ACC
PUSH PSW
MOV PSW, #08H
MOV TL1, #00H
MOV TH1, #00H
CLR A
MOV 78H, A
SETB 01H
MOV R0, #25H
MOV R1, #00H
MOV R7, #0CH
L05FE: MOV A, #00H
ORL A, #0F0H
ANL P1, A
ANL P1, A
CLR A
MOV A, #0BFH
ANL P1, A
ORL P1, #0F0H
ORL P1, #0FFH
MOV A, #00H
ORL A, #0F0H
ANL P1, A
ANL P1, A
CLR A
MOV A, #0AFH
ANL P1, A
ORL P1, #0F0H
ORL P1, #0FFH
MOV A, R0
CJNE A, 00H, L0635
JNB 0AH, L0635
CPL 0BH
JNB 0BH, L0635
MOV A, #0FH
LJMP L0636
L0635: MOV A, @R0
L0636: ANL A, #0FH
SWAP A
ORL A, R1
SWAP A
MOV P1, A
ORL A, #0F0H
MOV P1, A
INC R0
INC R1
CJNE R1, #0AH, L0648
INC R1
INC R1
L0648: DJNZ R7, L05FE
POP PSW
POP ACC
RETI
四、接口及外設(shè)驅(qū)動(dòng)程序
1、輸入部分程序:
L01D2: MOV R0, P2 ;讀入P2中的頻率信號(hào)
CLR P3.7
NOP
NOP
NOP
SETB P3.7
NOP
NOP
NOP
MOV R1, #70H ;讀出的數(shù)據(jù)存入位置
MOV R6, #0A0H ;27C16中的設(shè)備地址
MOV R7, #08H
L01E4: LCALL L0223 ;根據(jù)相應(yīng)的頻率從27C16中讀取每秒流量參數(shù)
MOV @R1, A
INC R1
MOV A, R6
ADD A, #02H ;
MOV R6, A
DJNZ R7, L01E4 ;讀8位參數(shù)
PUSH 00H
MOV R1, #70H
MOV R0, #28H
MOV R3, #08H
L01F7: MOV A, @R1
MOV @R0, A
DEC R0
INC R1
DJNZ R3, L01F7 ;將70H中的數(shù)據(jù)送入20H~27H中
MOV R0, #20H ;將20H~27H中的數(shù)據(jù)送到60H~67H中。
MOV R1, #67H
MOV R3, #08H
L0203: MOV A, @R0
MOV @R1, A
INC R0
INC R1
DJNZ R3, L0203
MOV 60H, #36H ;將60H中的每秒流量換算成米3/小時(shí)
MOV R0, #20H
MOV R1, #60H
MOV R3, #07H
LCALL L02FC
MOV R0, #20H ;將瞬時(shí)流量換算成十進(jìn)制BCD送入到30H~3FH中
MOV R1, #3FH
MOV R2, #08H
LCALL L034A
POP 00H
RET
計(jì)算累計(jì)流量送入50H中,程序如下
L01B7: mov R0, #67H ;將60H~67H中的瞬時(shí)流量二進(jìn)制值累加到50H~57H
MOV R1, #57H
MOV B, #08H
CLR C
L01BF: MOV A, @R1
ADDC A, @R0
DA A
MOV @R1, A
DEC R0
DEC R1
DJNZ B, L01BF
MOV R0, #50H ;將50H~57H中的二進(jìn)制換算成十進(jìn)制BCD碼
MOV R1, #4FH ;送到40H~47H中
MOV R2, #08H
LCALL L034A
RET
2、顯示部分:
程序如下:
L0085: ORL P1, #0FFH ;P1口置1,4FH~40H中是要顯示的數(shù)據(jù)(高~低)
MOV A, 4FH ;最高位是否為0
NOP
NOP
MOV A, 4FH
ANL A, #0ffH
JZ L009E ;為0轉(zhuǎn)移
MOV DPTR, #0F10H ;第一段顯示數(shù)據(jù)(此時(shí)數(shù)據(jù)為最大)
MOV 2FH, #0a0h ;送小數(shù)點(diǎn)數(shù)據(jù)到2FH中
LJMP L00DD
L009E: MOV A, 4EH ;次高位是否為0
NOP
NOP
MOV A, 4EH
ANL A, #0FFH
JZ L00B1 ;為0轉(zhuǎn)移
MOV DPTR, #0F20H ;第二段顯示數(shù)據(jù)
MOV 2FH, #21H ;送小數(shù)點(diǎn)數(shù)據(jù)到2FH中
LJMP L00DD
L00B1: MOV A, 4DH
NOP
NOP
MOV A, 4DH
ANL A, #0FFH
JZ L00C4 ;為0轉(zhuǎn)移
MOV DPTR, #0F30H ;第三段顯示數(shù)據(jù)
MOV 2FH, #22H ;送小數(shù)點(diǎn)數(shù)據(jù)到2FH中
LJMP L00DD
L00C4: MOV A, 4CH
NOP
NOP
MOV A, 4CH
ANL A, #0FFH
JZ L00D7 ;為0轉(zhuǎn)移
MOV DPTR, #0F40H ;第四段顯示數(shù)據(jù)
MOV 2FH, #24H ;送小數(shù)點(diǎn)數(shù)據(jù)到2FH中
LJMP L00DD
L00D7: MOV DPTR, #0F50H ;第五段顯示數(shù)據(jù)
MOV 2FH, #28H ;送小數(shù)點(diǎn)數(shù)據(jù)到2FH中
L00DD: MOV B, #0DH ;顯示數(shù)據(jù)中的數(shù)據(jù)個(gè)數(shù)
MOV A, 2FH
ANL A, #0FH
MOV 2DH, A
MOV A, 2FH
ANL A, #0F0H
SWAP A
MOV 2FH, A
CLR A
L00EE: MOVC A, @A+DPTR ;取相應(yīng)段的數(shù)據(jù)進(jìn)行顯示
MOV R0, A
MOV A, @R0
ORL A, #0F0H
ANL P1, A
NOP
NOP
NOP
NOP
NOP
ANL p1,a
CLR A
INC DPTR
MOVC A, @A+DPTR
ANL P1, A
NOP
NOP
NOP
NOP
ANL P1, A
ORL P1, #0F0H
ORL P1, #0FFH
CLR A
INC DPTR
DJNZ B, L00EE
END
ORG 0F10H ;以下為顯示數(shù)據(jù),浮動(dòng)五位。
DB 4FH,0DFH,4EH,0CFH,4DH,9FH,4CH,8FH,4BH,7FH,4AH,6FH,49H,5FH,48H,4FH
DB 47H,3FH,38H,2FH,37H,1FH,36H,0FH,2FH,0AFH,2DH,0BFH
ORG 0F20 H
DB 4EH,0DFH,4DH,0CFH,4CH,9FH,4BH,8FH,4AH,7FH,49H,6FH,48H,5FH,47H,4FH
DB 46H,3FH,38H,2FH,37H,1FH,36H,0FH,2FH,0AFH,2DH,0BFH
ORG 0F30 H
DB 4DH,0DFH,4CH,0CFH,4BH,9FH,4AH,8FH,49H,7FH,48H,6FH,47H,5FH,46H,4FH
DB 45H,3FH,38H,2FH,37H,1FH,36H,0FH,2FH,0AFH,2DH,0BFH
ORG 0F40 H
DB 4CH,0DFH,4BH,0CFH,4AH,9FH,49H,8FH,48H,7FH,47H,6FH,46H,5FH,45H,4FH
DB 44H,3FH,38H,2FH,37H,1FH,36H,0FH,2FH,0AFH,2DH,0BFH
ORG 0F50 H
DB 4BH,0DFH,4AH,0CFH,49H,9FH,49H,8FH,47H,7FH,46H,6FH,45H,5FH,44H,4FH
DB 43H,3FH,38H,2FH,37H,1FH,36H,0FH,2FH,0AFH,2DH,0BFH
3、鍵盤部分:
L0BD3: SETB P3.2
SETB P3.3
SETB p3.4
SETB P3.5
MOV A, P3
ORL A, #0D7H
CJNE A, #0FFH, L0BF0
MOV R6, #10H
ACALL L0BFE
MOV A, P3
ORL A, #0D7H
CJNE A, #0FFH, L0BD3
CLR A
CLR 07H
SJMP L0BFD
L0BF0: MOV R6, #10H
ACALL L0BFE
MOV A, P3
ORL A, #0D7H
CJNE A, #0FFH, L0BFD
SJMP L0BD3
L0BFD: RET
L0BFE: NOP
LCALL L07D3 ;延時(shí)程序
DJNZ R6, L0BFE
RET
4、通訊程序:
采用中斷方式傳送數(shù)據(jù)給計(jì)算機(jī)。
ORG 0023H
server: push acc
push 00h
push 01h
push 02h ;保護(hù)斷點(diǎn)
JBC TI,server1 ;中斷程序?qū)⒗塾?jì)流量傳給算機(jī)
RETI
Server1: mov R1,#50h
Mov R0,#08h
mov a,@r1
MOV SBUF, A ;傳送一個(gè)位
Djnz R0,server1
JB P,ERROR ;偶校驗(yàn)
ANL A,#7FH ;去掉校驗(yàn)位
Server2: mov R1,#60h ; 中斷程序?qū)⑺矔r(shí)流量傳給算機(jī)
Mov R0,#08h
mov a,@r1
MOV SBUF, A ;傳送一個(gè)位
Djnz R0,server1
JB P,ERROR ;偶校驗(yàn)
ANL A,#7FH ;去掉校驗(yàn)位
ERROR: pop acc ;恢復(fù)斷點(diǎn)
pop 02h
pop 01h
pop 00h
RETI
四、結(jié)束語
流量計(jì)的抗干擾能力強(qiáng),在流量全范圍內(nèi)可非線性調(diào)整、內(nèi)部無可調(diào)件、使用維護(hù)簡(jiǎn)單等優(yōu)點(diǎn),可以用來測(cè)量、變送及現(xiàn)場(chǎng)顯示封閉工業(yè)管道中液體、氣體和蒸汽的流量及總量。從投用到現(xiàn)在,應(yīng)用的效果非常好,是一種理想的儀表。
參考文獻(xiàn):
1、 李華主編,MCG-51系列單片機(jī)實(shí)用接口技術(shù),北京航空航天大學(xué)出版社出版,1997,書號(hào):ISBN 7-81012-420-X/TP.091
2、 李廣弟主編,單片機(jī)基礎(chǔ),北京航空航天大學(xué)出版社出版,1994