工業生產中過程控制是流量測量與儀表應用的一大領域,流量與溫度、壓力和物位一起統稱為過程控制中的四大參數,人們通過這些參數對生產過程進行監視與控制。對流體流量進行正確測量和調節是保證生產過程安全經濟運行、提高產品質量、降低物質消耗、提高經濟效益、實現科學管理的基礎。流量的檢測和控制在化工、能源電力、冶金、石油等領域應用廣泛。
系統工作原理
系統的工作原理是流量傳感器采集到流量信息,通過變換器,轉化為電信號,AD轉換器將模擬電信號轉化為離散信號,傳給單片機。單片機軟件系統根據事先的設定值對采集的信息進行處理,輸出離散的控制信號。DA轉換器將離散的控制信號轉化為模擬電量。通過模擬電量來控制閥門的動作,從而調節流量,實現流量的精確控制。
硬件構成
本系統主要由水泵、流量傳感器、電動閥門和MCS-51單片機控制系統以及液體管線和控制線、監視線等組成。
系統結構框圖如下所示:
流量是指單位時間內通過管道某一截面的物料數量。本控制系統的任務是對通過某一管道截面的物料數量即降粘劑流量進行控制。本系統采用單片機控制,通過流量計采集流量信息,傳給單片機。單片機通過預先設定值和系統軟件進行分析,發出相應的控制信號,驅動調節閥動作,從而確定降粘劑的配比與耗量,實現生產過程自動化。
系統硬件結構圖如圖所示:
其中,電磁流量計作為流量傳感器,采集流量信息,經放大器放大后送到AD轉換器。AD轉換器將連續的模擬量轉化為單片機能接受的離散的數字量。單片機收到流量信號后,在控制系統軟件的作用下,發出相應的執行命令給執行機構——步進電機。步進電機帶動閥門動作,對流體流量進行控制。軟件設計
軟件設計思路
該控制系統的軟件設計可以分為三部分:
1.主程序部分:該部分完成存儲器分區、數據定義和系統的初始化等,以及調用各個子程序,完成主要的控制功能。
2.流量控制程序:通過PID控制算法,編寫出相應的流量控制子程序,實現對流量的控制,達到預期的控制要求;
3.各子程序:各個子程序完成具體的實現方法,主要包括:設定值輸入、數碼管顯示、步進電機控制、AD轉換中斷、T0定時器中斷、采樣中斷等。 軟件流程圖如下
主程序設計
主程序部分,主要完成存儲器分配、系統初始化和系統整體控制等,并通過調用各子程序段,實現軟件的總體設計功能。
初始化:系統初始化程序的功能是對8155和89C51進行初始化,使D/A輸出為0,步進電機處于停機狀態,將RAM中的標志位和工作單元置為初始狀態,提示符CPUREADY寫入緩沖器。更新顯示器子程序的功能是將顯示緩沖器的內容,分別轉化為段數據,輸出到8155。顯示器0~12的顯示數據緩沖器分別為73H~7FH單元。當系統處于停機狀態時,顯示器0~4顯示參數,顯示器5~7顯示參數地址,所以73H~77H作為數據緩沖器,78H~7AH作為地址緩沖器,在運行狀態時,73H~77H作為瞬時流量緩沖器,78H~7FH作為累計流量緩沖器。 初始化程序的流程如圖所示:
流量控制子程序
在流量測試的基礎上,把流量設定值和實際測試得到的瞬時流量進行比較計算出誤差,采用數字PID調節算法,計算輸出到AD0809的變量Uio增量式PID控制算法的計算公式為
式中:ei為本次實際測得的流量和設定值之差;
P為比例系數;I為積分系數;D為微分系數;輸出控制變量表達式為:
程序的入口參數:偏差ek、ek-1、ek-2、測量值y、給定值r。這5個參數均為3字節的浮點數,分別將它們存放在RAM單元中。低字節存放浮點數的階數和符號,其中符號存放在最高位,階數以補碼的形式存放在另7位中。尾數以原碼的形式存放在另2個字節中。
中斷服務子程序
設定值輸入程序
本程序將4位BCD碼按千、百、十、個依次存放在89C51片內RAM的30H~33H單元中,每個地址單元的高4位為0,低4位為BCD碼。 程序代碼如下:
RDS:MOV R0,#30H;初始化,存放單元首址
MOV R2,#7FH;P1口高4位置控制字及低4位置輸入方式
MOV R3,#04H;讀入4個BCD碼 MOV A,R2
LOOP:MOV P1,A;P1口送控制字及低4位置輸入方式
MOV A,P1;讀如BCD碼 ANL A,
#0FH;屏蔽高4位
MOV @R0,A;送入存儲單元
INC R0;指向下個存儲單元
MOV A,R2;準備下一片撥盤的控制端置0
RR A;
MOV R2,A;
DJNZ R3,LOOP;未讀完返回
RET;讀完結束
A/D中斷子程序
A/D中斷子程序流程圖如下所示:
程序代碼如下:
INT0:PUSH ACC ;保護現場
PUSH DPH
PUSH DPL
PUSH PSW
SETB PSW.3 ;選工作寄存器區1
MOV DPTR,#0DF01H;讀取8155A口數據
MOVX A,@DPTR MOV R2, A
ANL A, #0F0H ;屏蔽低4位 JNZ ND5 ;
MOV A,R2
JNB 02H, D51 ;判斷是否采樣零信號
MOV C, ACC.0 ;
MOV 30H, C MOV C, ACC.7
MOV 37H,C AJMP D14
D51: MOV C,ACC.0 ;萬位和標志位→荷重信號緩沖器
MOV 48H,C
MOV C,ACC.7
MOV 4FH,C
AJMP D14
ND5: MOV A,R2 ;判斷是否讀出千位
JNB ACC.7,ND4
JNB 02H,D41 ;判斷是否采樣零信號
ANL A, #0FH ;千位→零信號緩沖器
SWAP A
MOV 25H,A
AJMP D14
D41: ANL A,#0FH
SWAP A
MOV 28H, A
AJMP D14
ND4: JNB ACC.6, ND3 ;判斷是否讀出百位
JNB 02H,D31 ;判斷是否采樣零信號
MOV R1, #25H ;百位→零信號緩沖器
ANL A,#0FH
XCHP A,@R1
AJMP D14
D31: MOV R1, #28H
ANL A,#0FH
XCHD A,@R1
AJMP D14
ND3: JNB ACC.5, ND2 ;判斷是否讀出十位
JNB 02H, D21 ;判斷是否采樣信號
ANL A, #0FH ;十位→零信號緩沖器
SWAP A
MOV 24H, A
AJMP D14
D21: ANL A, #0FH
SWAP A MOV 24H,A
AJMP D14
ND2: JNB 02H,D11 ;判斷是否采樣零信號
ANL A,#0FH ;個位→零信號緩沖器
MOV R,#24H
XCHD A,@R1 CLR 02H
MOV DPTR,#0DFF3H ;啟動A/D轉換
MOV A, #30H
MOVX @DPTR,
A ADS1:SETB P1.6
NOP
NOP
CLR P1.6
AJMP D14
D11: ANL A,#0FH
MOV R1,#27H
XCHD A,@R1
MOV 2AH,24H ; 采樣數據送處理緩沖器
MOV 2BH,25H
MOV 2CH,26H
MOV 2DH,27H
MOV 2EH,28H
MOV 2FH,29H
SETB 03H ;置一次A/D采樣結束標志
D14: POP PSW ;恢復現場
POP DPL
POP DPH
POP ACC
RETI
定時器中斷子程序
定時器T0中斷程序流程圖如下圖所示。
程序代碼如下
PIT0: PUSH PSW ;保護現場
PUSH ACC
PUSH DPH
PUSH DPL
JNB 00H, T01 ;允許采樣否?
DJNZ 10H, T02 ;采樣周期計數器減1,不為1轉T02
DJNZ 11H,T02
MOV 10H,#0A0H ;恢復采樣周期計數器初值
MOV 11H, #0FH
SETB 0FH
CLR 0DH
CLR P3.4
MOV DPTR, #0DFF3H ; 對零點采樣
MOV A, #00H
MOVX @DPTR, A
SETB 04H
SETB 04H
T02: JB 01H, T05
T01 SETB P1.7
NOP
CLR P1.7
T05:CLR P1.6
DJNZ 16H, T06 ;調試用脈沖周期計數器減1
CPL P1.4 ;使P1.4產生方波
MOV 16H,17H
T06: POP DPL ;恢復現場
POP DPH
POP ACC
POP PSW
ERTI
數碼管顯示子程序
程序流程圖如下所示:
15
在單片機內部RAM的20H和21H單元中有四位十六進制數(20H中為高兩位),以下是將其自左到右顯示出來的程序。 程序代碼如下:
ORG 2000H
SDIAPLAY:MOV A,20H ;20H中數送A
ANL A,#0F0H ;截取高4位
MOV P1,A ;送1#MC14495
MOV A,20H ;20H中數送A
SWAP A ;低4位送高4位
ANL A,#0F0H ;去掉低4位
INC A ;A1A0指向2#MC14495
MOV P1,A ;送2#MC14495
MOV A,21H ;21H中數送A
ANL A,#0F0H ;截取高4位
ADD A,#02H ;A1A0指向3#MC14495
MOV P1,A ;送3#MC14495
MOV A,21H ;21H中數送A
SWAP A ;低4位送高4位
ANL A,#0F0H ;去掉低4位
ADD A,#03 ;A1A0指向4#MC14495
MOV P1,A ;送4#MC14495
RET
步進電機控制程序
程序代碼如下: ORG 2100H
PUSH ACC ;保護現場
MOV R4,#N ;步進馬達步進數送R4
CLR C ;Cy清零
ORL C,PSW.5 ;轉向標志狀態送Cy
JC ROTE ;若為反轉,則轉ROTE
MOV R0,#20H ;正轉模型始址送R0
AJMP NEXT ; 轉入NEXT
ROTE:MOV R0,#27H ;反轉模型始址送R0
NEXT:MOV A,@R0 ;輸出控制模型的值
MOV P1,A ;輸出控制脈沖 ACALL DELA
Y ;延時(形成脈寬) INC R
0 ;準備下個模型指針 MOV A,#00
H ;判斷送完一遍模型值
ORL A,@R0 JZ TP
L ;若模型結束,則TPL LOOP:DJNZ R4,NEXT ;若步進數未走完,則N
EXT
POP AC
C ;恢復現場
RE
T :返回
TPL:MOV A,R0 CLR C
SUBB A,#06H MOV R0,A ;恢復模型始址
AJMP LOOP ;判斷步進馬達步數走完?
DELAY:MOV R2,#M1 ;延時
DELAY1:MOV R2,#M2
DELAY2:DEC A JNZ
DELAY2 DJNZ R2,DELAY1
RET
END
上述控制程序是利用程序延時來控制電機的通電時間(即形成控制脈沖)以達到正轉、反轉、啟動和停止的。這種控制的缺點是CPU因執行延時程序而降低了效率。為了提高CPU的使用效率,常常也可采用單片機內部定時/計數器編制上述程序。
評論
查看更多