流量積算儀的設計
摘要 本文中介紹了一個用單片機設計的流量積算儀,與流量計配合使用,能適用于各種介質,如氣體、液體等,并能在全流程范圍內進行非線性調節(jié),用各種介質的標準儀表對該流量計進行檢定后,即可使之成為該介質的流量計。
一、測量原理
本文中介紹了一個用單片機設計的流量積算儀,它能適用于各種介質,如氣體、液體等,并能在全流程范圍內進行非線性調節(jié),用各種介質的標準儀表對該流量計進行檢定后,即可使之成為該介質的流量計。
流量計由流量傳感器和流量積算儀兩部分組成,流量傳感器由旋渦發(fā)生體、傳感器探頭和產生輸出信號的相關電子電路組成。
當以一定流速流動介質遇到流量傳感器的旋渦發(fā)生體時,旋渦產生的頻率與流速成正比,因此與管道內的流量成正比,因此我們用單片機設計的流量積算儀,根據(jù)傳感器送來的頻率信號,進行累計,顯示,并將累計流量和瞬時流量通過串行口通訊送到計算機中進行處理,如形成報表等。
為使用儀表更加準確,我們可以通軟件的方法使儀表非常精確,基本上可達到0.05%左右。首先在儀表出廠前,非用標準設置對該流量計進行檢定后,即可記錄在全流程范圍內的若干段中,每段內單個頻率的每秒流量系數(shù)。然后通過四個鍵的鍵盤設置流量參數(shù),由單片機程序將系統(tǒng)全程的頻率對應的每秒流量計算出來后,寫入單片機的24C16中。
正常測量時,根據(jù)不同的頻率取出24C16中的相應每秒流量,送到單片機中經運算,得到當時的瞬時流量(米3/小時),并進行累計。
二、硬件電路原理圖(如附圖一和附圖二)
附圖一:
1、硬件中的核心是ATMEL生產的AT89C51/LV51單片機,它是一種低功耗/低電壓、高性能的8位單片機,片內帶有一個4K字節(jié)的Flash可編程可擦除只讀存儲器,它采用了CMOS工藝和ATMEL公司的高密度非易失性存儲器技術,而且其輸出引腳和指令系統(tǒng)都與MSC-51兼容。
2、存儲流量和參數(shù),用的存儲器是ATMEL生產的AT24C16系列,它是一種帶有閃2K字節(jié)的可電擦除、可編程的只讀存儲器。通過單片機的P0.0和P0.1口與它的SDA和SCL分別相連,進行讀寫操作。
3、一秒硬件復位電路,使用MC14060(十四位二進制計數(shù)器)、二個74HC132(兩輸入與非門)和二個雙JK觸發(fā)器CD4027,在CD4027的15腳形成一秒寬的時鐘脈沖。
4、CD4027的15腳接到RESET端,使單片機定時復位。單片機采用省電模式工作,每次輸入、累計、顯示處理后等待喚醒,這樣工作功耗非常小。設置補償系數(shù)時,復位腳正常連接。
5、流量傳感器的輸入脈沖通過74HC393鎖存(雙四位二進制計數(shù)器)后,送入單片機的P2口。輸入信號:脈沖信號(0~255)HZ
6、在單片機內經過程序處理后,輸出顯示信號送到P1口(數(shù)據(jù)4位,選擇信號4位)。連到12針的插座上。
附圖二:
1、輸出顯示信號送到P1口(數(shù)據(jù)4位,選擇信號4位)連到12針插座,其中數(shù)據(jù)4位(高四位)送入MC14543(BCD--鎖存/7段譯碼/驅動動器)中,共有12個MC14543,分別控制著與累計流量8位及瞬時流量4位相連的液晶塊的顯示數(shù)據(jù)。數(shù)據(jù)中另外4位選擇信號(ABCD)直接送到CD4514譯碼器(4位鎖存/4-16線譯碼器),通過兩個MC14174B(帶清0端的6D觸發(fā)器),浮動顯示的小數(shù)點位。
2、累積流量和瞬時流量的顯示使用兩個液晶塊:EDS806A 960827/DR(8位)、EDS805A 971218/DR(4位)
a、 累積流量顯示:八位浮點式,開始顯示小數(shù)點后五位:0.00000m3,最后顯示小數(shù)點后三位:0000.000m3。
b、 瞬時流量顯示:顯示為小數(shù)點后兩位:00.00 m3。
三、總框圖及主程序
程序根據(jù)開關的設置分三大部分:①正常使用即測量部分②測量輸入頻率部分③設置調整系數(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開關1(ON),3(ON),寫系數(shù)
NOP
JC L002C ;IC40開關2(ON),4(ON),測流量
L0029: LJMP L037A ;IC40開關2(ON),4(OFF),測頻率
L002C: LCALL L003B ;初始化
LCALL L01D2 ;輸入頻率
LCALL L01B7H ;流量進行累計
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 ;以下是測頻率
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 ;定時顯示
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
四、接口及外設驅動程序
1、輸入部分程序:
L01D2: MOV R0, P2 ;讀入P2中的頻率信號
CLR P3.7
NOP
NOP
NOP
SETB P3.7
NOP
NOP
NOP
MOV R1, #70H ;讀出的數(shù)據(jù)存入位置
MOV R6, #0A0H ;27C16中的設備地址
MOV R7, #08H
L01E4: LCALL L0223 ;根據(jù)相應的頻率從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/小時
MOV R0, #20H
MOV R1, #60H
MOV R3, #07H
LCALL L02FC
MOV R0, #20H ;將瞬時流量換算成十進制BCD送入到30H~3FH中
MOV R1, #3FH
MOV R2, #08H
LCALL L034A
POP 00H
RET
計算累計流量送入50H中,程序如下
L01B7: mov R0, #67H ;將60H~67H中的瞬時流量二進制值累加到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中的二進制換算成十進制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轉移
MOV DPTR, #0F10H ;第一段顯示數(shù)據(jù)(此時數(shù)據(jù)為最大)
MOV 2FH, #0a0h ;送小數(shù)點數(shù)據(jù)到2FH中
LJMP L00DD
L009E: MOV A, 4EH ;次高位是否為0
NOP
NOP
MOV A, 4EH
ANL A, #0FFH
JZ L00B1 ;為0轉移
MOV DPTR, #0F20H ;第二段顯示數(shù)據(jù)
MOV 2FH, #21H ;送小數(shù)點數(shù)據(jù)到2FH中
LJMP L00DD
L00B1: MOV A, 4DH
NOP
NOP
MOV A, 4DH
ANL A, #0FFH
JZ L00C4 ;為0轉移
MOV DPTR, #0F30H ;第三段顯示數(shù)據(jù)
MOV 2FH, #22H ;送小數(shù)點數(shù)據(jù)到2FH中
LJMP L00DD
L00C4: MOV A, 4CH
NOP
NOP
MOV A, 4CH
ANL A, #0FFH
JZ L00D7 ;為0轉移
MOV DPTR, #0F40H ;第四段顯示數(shù)據(jù)
MOV 2FH, #24H ;送小數(shù)點數(shù)據(jù)到2FH中
LJMP L00DD
L00D7: MOV DPTR, #0F50H ;第五段顯示數(shù)據(jù)
MOV 2FH, #28H ;送小數(shù)點數(shù)據(jù)到2FH中
L00DD: MOV B, #0DH ;顯示數(shù)據(jù)中的數(shù)據(jù)個數(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 ;取相應段的數(shù)據(jù)進行顯示
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ù),浮動五位。
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 ;延時程序
DJNZ R6, L0BFE
RET
4、通訊程序:
采用中斷方式傳送數(shù)據(jù)給計算機。
ORG 0023H
server: push acc
push 00h
push 01h
push 02h ;保護斷點
JBC TI,server1 ;中斷程序將累計流量傳給算機
RETI
Server1: mov R1,#50h
Mov R0,#08h
mov a,@r1
MOV SBUF, A ;傳送一個位
Djnz R0,server1
JB P,ERROR ;偶校驗
ANL A,#7FH ;去掉校驗位
Server2: mov R1,#60h ; 中斷程序將瞬時流量傳給算機
Mov R0,#08h
mov a,@r1
MOV SBUF, A ;傳送一個位
Djnz R0,server1
JB P,ERROR ;偶校驗
ANL A,#7FH ;去掉校驗位
ERROR: pop acc ;恢復斷點
pop 02h
pop 01h
pop 00h
RETI
四、結束語
流量計的抗干擾能力強,在流量全范圍內可非線性調整、內部無可調件、使用維護簡單等優(yōu)點,可以用來測量、變送及現(xiàn)場顯示封閉工業(yè)管道中液體、氣體和蒸汽的流量及總量。從投用到現(xiàn)在,應用的效果非常好,是一種理想的儀表。
參考文獻:
1、 李華主編,MCG-51系列單片機實用接口技術,北京航空航天大學出版社出版,1997,書號:ISBN 7-81012-420-X/TP.091
2、 李廣弟主編,單片機基礎,北京航空航天大學出版社出版,1994