实验十 计算机控制综合应用实验之二
电热箱闭环控制实验
一 实验目的:
1.了解温度闭环控制方法
2.了解 PID 控制的规律及算法
3.了解计算机应用的闭环系统结构
二 实验设备
TDN86+ 教学实验系统
电热烤箱
三 实验原理
1.实验原理及接线
2.实验连线图
系统的 8255 B口的 PB0输出 PWM 脉冲信号为控制量,经驱动电路控制固态继电器的吸合以达到给烤箱升温的效果。温度测量使用了 10K 热敏电阻,经 A/D 转换构成反馈量,在参数给定的情况下,经 PID 运算产生相应的PWM脉冲控制量,使烤箱温度升温并稳定在给定值。OPCLK 为 1.193 MHz 时钟信号,经 8253 的 2 号通道分频输出 10 ms 的方波,一方面作为 A/D 的定时启动信号,另一方面接入 8259 的 IRQ6 产生中断,作为系统采样时钟。
烤箱温度控制范围在室温~ 250℃,不要过高,即设定 SPEC 范围在 14H(20℃)~ FAH (250℃ )之间,参考程序中设定温度为100℃ (SPEC = 64H)。采样参数为 100,即TS设为 64H,由于 8253 OUT2 接IRQ6 中断为 10 ms,故采样周期为1秒 (64 H* 10 = 1s)。 温度控制响应时间较长,一般一屏不能完全观测到整个响应过程,这样就需要更新显示,每增加一屏,实际控制时间要累加前面的。
3参考程序(提供的参考程序略有不足,可参考实验九的参考程序注释)(A20-2.ASM)
STACK
SEGMENT STACK
DW 256 DUP(?)
TOP LABEL WORD
STACK
ENDS
DATA SEGMENT
TS DB
64H
SPEC DW
0064H
IBAND DW
0060H
KPP DW 1F60H
KII DW 0010H
KDD DW 0020H
CH1 DB ?
CH2 DB ?
YK DW ?
CK DB ?
TC DB ?
TKMARK
DB ?
ADMARK DB ?
ADVALUE DB ?
FPWM DB ?
CK_1 DB ?
EK_1 DW ?
AEK_1 DW ?
BEK DW ?
AAAH DB ?
VAA DB ?
BBBL DB ?
VBB DB ?
R0 DW ?
R1 DW ?
R2 DW ?
R3 DW ?
R4 DW ?
R5 DW ?
R6 DW ?
R7 DB ?
R8 DW ?
TABLE DB
14H,14H,14H,14H,14H,14H,14H,14H,14H,14H,15H,16H,17H,18H
DB 19H,1AH
DB
1BH,1CH,1DH,1EH,1EH,1FH,20H,21H,23H,24H,25H,26H,27H,28H,29H,2AH
DB
2BH,2CH,2DH,2EH,2FH,31H,32H,32H,33H,34H,35H,36H,37H,38H,39H,3AH
DB
3BH,3CH,3DH,3EH,3FH,40H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH
DB
4CH,4DH,4EH,4FH,50H,4FH,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
DB
5AH,5BH,5CH,5DH,5EH,5FH,60H,61H,62H,63H,64H,64H,65H,65H,66H,66H
DB
67H,68H,69H,6AH,6BH,6CH,6DH,6EH,6EH,6FH,6FH,70H,71H,72H,73H,74H
DB
75H,76H,77H,78H,79H,7AH,7BH,7CH,7DH,7EH,7FH,80H,81H,82H,83H,84H
DB
84H,85H,86H,87H,88H,89H,8AH,8BH,8CH,8EH,8FH,90H,91H,92H,93H,94H
DB
95H,96H,97H,98H,99H,9AH,9BH,9BH,9CH,9CH,9DH,9DH,9EH,9EH,9FH,9FH
DB
0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H,0A8H,0A9H,0AAH,0ABH,0ACH
DB
0ADH,0AEH,0AFH
DB
0B0H,0B0H,0B1H,0B2H,0B3H,0B4H,0B4H,0B5H,0B6H,0B7H,0B8H,0B9H,0BAH
DB
0BBH,0BDH,0BEH
DB
0BEH,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C8H,0CAH,0CCH,0CEH,0CFH,0D0H
DB
0D1H,0D2H,0D4H
DB
0D5H,0D6H,0D7H,0D8H,0D9H,0DAH,0DBH,0DCH,0DDH,0DEH,0E3H,0E6H,0E9H
DB
0ECH,0F0H,0F2H
DB
0F6H,0FAH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB
0FFH,0FFH,0FFH
DB
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB
0FFH,0FFH,0FFH
DATA ENDS
CODE
SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CALL INIT ;Initiate
STI
M1: CMP TKMARK,01H
;Judge Ts=Tc ?
JNZ M1
MOV TKMARK,00H
M2: CMP ADMARK,01H
JNZ M2
MOV ADMARK,00H
MOV AX,0000H
MOV AL,ADVALUE
MOV BX,OFFSET TABLE
ADD BX,AX
MOV AL,[BX]
MOV YK,AX
CALL PID
;Count Ck
MOV AL,CK
;Translate Ck into PWM
SUB AL,80H
JC IS0
MOV
JMP COU
IS0: MOV AL,00H
MOV
COU: MOV
SUB AL,AAAH
MOV
MOV AX,SPEC
;SPEC to CH1
MOV CH1,AL
MOV AX,YK
;YK to CH2
MOV CH2,AL
CALL PUT_COM
;Display Wave
JMP M1
PUT_COM:
MOV AL,31H
OUT 0C1H,
MOV AL,CH1
OUT 0C0H,
WAIT1: IN
TEST AL,01H
JZ WAIT1
MOV AL,CH2
OUT 0C0H,
WAIT2: IN
TEST AL,01H
JZ WAIT2
MOV AL,34H
OUT 0C1H,
RET
INIT: NOP
PUSH DS
XOR
AX,AX
MOV
DS,AX
MOV
AX,OFFSET
IRQ6 ;8259 IRQ6(T0:10ms)
ADD AX,2000H
;LOAD IP adress=2000H
MOV SI,0038H
MOV [SI],AX
MOV AX,0000H
MOV SI,003AH
MOV [SI],AX
MOV AX,OFFSET IRQ7 ;8259 IRQ7(INT0:Get ADvalue)
ADD AX,2000H
;LOAD IP adress=2000H
MOV SI,003CH
MOV [SI],AX
MOV AX,0000H
MOV SI,003EH
MOV [SI],AX
CLI
POP DS
IN AL,21H
AND
OUT 21H,AL
MOV
CK,00H
MOV
YK,0000H
MOV
CK_1,00H
MOV
EK_1,0000H
MOV
AEK_1,0000H
MOV
BEK,0000H
MOV
BBBL,00H
MOV
VBB,00H
MOV
R0,0000H
MOV
R1,0000H
MOV
R2,0000H
MOV
R3,0000H
MOV
R4,0000H
MOV
R5,0000H
MOV
R6,0000H
MOV
R7,00H
MOV R8,0000H
MOV TKMARK,00H
MOV FPWM,01H
MOV ADMARK,00H
MOV ADVALUE,00H
MOV AAAH,7FH
MOV VAA,7FH
MOV TC,00H
MOV AL,80H
;Initiate
8255-B(out)
OUT 63H,AL
OUT 1FH,
MOV
OUT 43H,AL
MOV AL,69H
;10ms
OUT 42H,AL
MOV
OUT 42H,AL
RET
SYSTEM:
MOV AL,76H
OUT 43H,AL
MOV
OUT 41H,AL
MOV AL,00H
OUT 41H,AL
MOV AL,00H
OUT 0C1H,
CALL DALLY
OUT 0C1H,
CALL DALLY
OUT 0C1H,
CALL DALLY
OUT 0C0H,
CALL DALLY
OUT 0C0H,
CALL DALLY
MOV AL,40H
OUT 0C1H,
CALL DALLY
MOV
OUT 0C1H,
CALL DALLY
MOV AL,34H
OUT 0C1H,
CALL DALLY
IN AL,21H
OR
AL,01H
OUT 21H,AL
RET
DALLY: NOP
PUSH CX
MOV CX,3000H
B2: PUSH AX
POP AX
POP
CX
RET
IRQ7: NOP
PUSH AX
IN
MOV
MOV ADMARK,01H
MOV AL,20H ;Close IRQ7
OUT 20H,AL
POP AX
IRET
IRQ6: NOP
PUSH AX
OUT 1FH,
MOV AL,TC
CMP
JNC TT2
INC TC
TT1: CALL
KJ
MOV AL,20H
;Close IRQ6
OUT 20H,AL
POP AX
IRET
TT2: MOV TKMARK,01H
MOV TC,00H
JMP TT1
KJ: NOP
PUSH AX
CMP FPWM,01H
JNZ TEST2
CMP VAA,00H
JNZ ANOT0
MOV FPWM,02H
MOV AL,BBBL
CLC
RCR AL,01H
MOV
JMP TEST2
ANOT0:
DEC VAA
MOV AL,01H
OUT 61H,AL
TEST2:
CMP FPWM,02H
JNZ OUTT
CMP VBB,00H
JNZ BNOT0
MOV FPWM,01H
MOV AL,AAAH
CLC
RCR AL,01H
MOV
JMP OUTT
BNOT0:
DEC VBB
MOV AL,00H
OUT 61H,AL
OUTT: POP
AX
RET
PID: MOV
AX,SPEC
SUB AX,YK
MOV R0,AX
MOV R1,AX
SUB AX,EK_1
MOV R2,AX
SUB AX,AEK_1
MOV BEK,AX
MOV R8,AX
MOV AX,R1
MOV EK_1,AX
MOV AX,R2
MOV AEK_1,AX
TEST R1,8000H
JZ EK1
NEG R1
EK1: MOV
AX,R1
SUB AX,IBAND
JC II
MOV R3,00H
JMP DDD
II: MOV
MOV AH,00H
MOV CX,R1
MUL CX
MOV CX,KII
DIV CX
MOV R3,AX
TEST R0,8000H
JZ DDD
NEG R3
DDD: TEST
BEK,8000H
JZ DDD1
NEG BEK
DDD1:
MOV AX,BEK
MOV CX,KDD
MUL CX
PUSH AX
PUSH DX
MOV
MOV AH,00H
MOV CX,0008H
MUL CX
MOV CX,AX
POP DX
POP AX
DIV CX
MOV R4,AX
TEST R8,8000H
JZ DD1
NEG R4
DD1: MOV
AX,R3
ADD AX,R4
MOV R5,AX
JO L9
L2: MOV
AX,R5
ADD AX,R2
MOV R6,AX
JO L3
L5: MOV
AX,R6
MOV CX,KPP
IMUL CX
MOV CX,1000H
IDIV CX
MOV CX,AX
RCL AH,01H
PUSHF
RCR AL,01H
POPF
JC LLL1
CMP CH,00H
JZ LLL2
MOV
JMP LLL2
LLL1:
CMP CH,0FFH
JZ LLL2
MOV AL,80H
LLL2:
MOV R7,AL
ADD AL,CK_1
JO L8
L18: MOV
CK_1,AL
ADD AL,80H
MOV
RET
L8: TEST
R7,80H
JNZ L17
MOV
JMP L18
L17: MOV
AL,80H
JMP L18
L9: TEST
R3,8000H
JNZ L1
MOV R5,7FFFH
JMP L2
L1: MOV
R5,8000H
JMP L2
L3: TEST
R2,8000H
JNZ L4
MOV R6,7FFFH
JMP L5
L4: MOV
R6,8000H
JMP L5
CODE ENDS
END START
四 实验步骤
1. 按图接线,电热烤箱接在220V上,插好温度计
2. 装入参考程序,运行程序
3. 设定参数,注意:参考程序的头两条语句是 MOV AX,DATA , MOV DS,AX ,可以获知DS的确切值,根据参数的设置位置,可对参数进行设定和修改。
需要设定的参数值有:
l 烤箱期望达到的温度 SPEC
l PID算法中积分分离值积分分离值 IBAND
l PID算法中比例项系数 KPP
l PID算法中积分项系数值 KII
l PID算法中微分项系数值 KDD
4. 打开示波器窗口,观察温度变化
5. 修改PID参数,观察实验结果
项目 参数 |
IBAND |
KPP |
KII |
KDD |
超调 |
稳定<2%时间 |
参考程序中参数及响应特性 |
0060H |
1F60H |
0010H |
0020H |
10% |
10分钟 |
去掉 IBAND |
0000H |
1060H |
0010H |
0020H |
|
|
自测一组较好参数 |
|
|
|
|
|
|
五 参考程序参数表
符号 |
单位 |
取值范围 |
名称及作用 |
TS |
10mS |
00H~FFH |
采用周期,决定每采集一次数据的时间 |
SPEC |
℃ |
14H~FAH |
设定:期望电烤箱达到的温度 |
IBAND |
|
0000H~007FH |
积分分离值:PID算法中积分分离值 |
KPP |
|
0000H~1FFFH |
比例系数:PID算法中比例项系数 |
KII |
|
0000H~1FFFH |
积分系数:PID算法中积分项系数值 |
KDD |
|
0000H~1FFFH |
微分系数:PID算法中微分项系数值 |
CH1 |
|
00H~FFH |
通道1值:在示被器功能中所显示值需放入此单元中然后再调用 PUT_COM 发送子程序 |
CH2 |
|
00H~FFH |
通道2值:(同上) |
YK |
N/s |
0000H~0042H |
反馈:通过热敏电阻反馈算出的电烤箱的温度值 |
CK |
|
00H~FFH |
控制量:PID 算法产生用于控制的量 |
TKMARK |
|
00H~01H |
采样标志位 |
ADMARK |
|
00H~01H |
A/D转换结束标志位 |
ADVALUE |
|
00H~FFH |
A/D转换结果单元 |
TC |
|
00H~FFH |
采样周期变量 |
FPWM |
|
00H~01H |
PWM脉冲中间标志位 |
CK_1 |
|
00H~FFH |
控制量变量:记录上次控制量值 |
EK_1 |
|
0000H~FFFFH |
PID偏差:E(K) = SPEC(K) - YK(K) |
AER_1 |
|
0000H~FFFFH |
ΔE(K) = E(K) – E(K-1) |
BEK |
|
0000H~FFFFH |
ΔΔE(K) = ΔE(K) –ΔE(K-1) |
AAAH |
|
00H~FFH |
用于PWM 脉冲高电平时间计算 |
VAA |
|
00H~FFH |
AAAH变量 |
BBBL |
|
00H~FFH |
用于PWM 脉冲低电平时间计算 |
VBB |
|
00H~FFH |
BBBL变量 |
MARK |
|
00H~01H |
|
R0~R8 |
|
|
PID 计算用变量 |
六 技术支持: