温度闭环控制
发布时间
阅读量:
阅读量
为了实现系统稳定性需求,在系统中人为地设定一个温度数值,并将其与由温控测量电路测得的反馈信号进行比较;计算其差分经过PID运算后即可得出控制指令并生成PWM脉冲信号;随后由温控驱动电路决定是否对温控单元施加加热指令;最终形成一个完整的温控闭环系统。
温度值与对应 AD 值的计算方法如下:
25℃: Rt=10K V
AD=5×500 / (10000+500)=0.238(V) 对应 AD 值: 0CH
30℃: Rt=5.6K V
AD=5×500 / (5600+500)=0.410(V) 对应 AD 值: 15H
40℃: Rt=3.8K V
AD=5×500 / (3800+500)=0.581(V) 对应 AD 值: 1EH
50℃: Rt=2.7K V
AD=5×500 / (2700+500)=0.781(V) 对应 AD 值: 28H
60℃: Rt=2.1K V
AD=5×500 / (2100+500)=0.962(V) 对应 AD 值: 32H
100℃: Rt=900 V
AD=5×500 / (900 +500)=1.786 (V) 对应 AD 值: 5AH
线路图:

程序:
SSTACK SEGMENT STACK
DW 256 DUP(?)
TOP LABEL WORD
SSTACK ENDS
DATA SEGMENT
TS DB 64H ;采样周期
SPEC DW 0030H ;温度给定值
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 ?
AAAA DB ?
VAA DB ?
BBB DB ?
VBB DB ?
R0 DW ?
R1 DW ?
R2 DW ?
R3 DW ?
R4 DW ?
R5 DW ?
R6 DW ?
R7 DB ?
R8 DW ?
;热敏电阻温度表
TAB DB 14H,14H,14H,14H,14H,14H,14H,14H,14H,14H,15H,16H,17H,18H,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,0B0H,0B0H,0B1H,0B2H,0B3H,0B4H,0B4H,0B5H,0B6H,0B7H
DB 0B8H,0B9H,0BAH,0BBH,0BDH,0BEH,0BEH,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H
DB 0C8H,0CAH,0CCH,0CEH,0CFH,0D0H,0D1H,0D2H,0D4H,0D5H,0D6H,0D7H,0D8H
DB 0D9H,0DAH,0DBH,0DCH,0DDH,0DEH,0E3H,0E6H,0E9H,0ECH,0F0H,0F2H,0F6H
DB 0FAH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX, DATA
MOV DS, AX
MAIN: CALL INIT ;初始化
STI
M1: CMP TKMARK, 01H ;判采样周期到否
JNZ M1
MOV TKMARK, 00H
M2: CMP ADMARK, 01H
JNZ M2
MOV ADMARK, 00H
MOV AX, 0000H ;查温度表
MOV AL, ADVALUE
MOV BX, OFFSET TAB
ADD BX, AX
MOV AL, [BX]
MOV YK, AX
CALL PID ;调用 PID 计算控制量 CK
MOV AL, CK ;根据 CK 产生 PWM 脉冲
SUB AL, 80H
JC IS0
MOV AAAA, AL
JMP COU
IS0: MOV AL, 00H
MOV AAAA, AL
COU: MOV AL, 7FH
SUB AL, AAAA
MOV BBB, AL
MOV AX, SPEC ;SPEC 存入 CH1
MOV CH1, AL
MOV AX, YK ;反馈 YK 存入 CH2
MOV CH2, AL
CALL PUT_COM ;调用 PUT_COM 显示给定与反馈的波形
JMP M1
PUT_COM: ;串口发送子程序
MOV DX, 03FBH
IN AL, DX
AND AL, 7FH
OUT DX, AL
MOV DX, 03FDH
WAIT1: IN AL, DX
TEST AL, 20H
JZ WAIT1
MOV DX, 03F8H
MOV AL, CH1
OUT DX, AL
MOV DX, 03FDH
WAIT2: IN AL, DX
TEST AL, 20H
JZ WAIT2
MOV DX, 03F8H
MOV AL, CH2
OUT DX, AL
RET
INIT: NOP
PUSH DS
XOR AX, AX
MOV DS, AX
MOV AX, OFFSET IRQ6 ;8259 IRQ6(T0:10ms)
MOV SI, 0038H
MOV [SI], AX
MOV AX, CS
MOV SI, 003AH
MOV [SI], AX
MOV AX, OFFSET IRQ7 ;8259 IRQ7(INT0:得到 ADvalue 值)
MOV SI, 003CH
MOV [SI], AX
MOV AX, CS
MOV SI, 003EH
MOV [SI], AX
CLI
POP DS
IN AL, 21H
AND AL, 3FH ;允许 IRQ6,IRQ7
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 BBB, 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 AAAA, 7FH
MOV VAA, 7FH
MOV TC, 00H
MOV DX, 606H
MOV AL, 80H ;初始化 8255-B 口
OUT DX, AL
MOV DX, 640H ;启动 ADC0809
OUT DX, AL
MOV DX, 6C6H
MOV AL, 36H ;8254 计数器 0 输出 OUT0
OUT DX, AL
MOV DX, 6C0H
MOV AL, 10H ;定时 10ms 方波
OUT DX, AL
MOV AL, 27H
OUT DX, AL
RET
IRQ7: NOP
PUSH AX
PUSH DX
MOV DX, 0640H
IN AL, DX ;读 ADC0809 采样值
MOV ADVALUE, AL
MOV ADMARK, 01H
MOV AL, 20H ;关闭 IRQ7
OUT 20H, AL
POP DX
POP AX
IRET
IRQ6: NOP
PUSH AX
PUSH DX
MOV DX, 0640H
OUT DX, AL ;启动 ADC0809
MOV AL, TC
CMP AL, TS
JNC TT2
INC TC
TT1: CALL KJ
MOV AL, 20H ;关闭 IRQ6
OUT 20H, AL
POP DX
POP AX
IRET
TT2: MOV TKMARK, 01H
MOV TC, 00H
JMP TT1
KJ: NOP ;PWM 子程序
PUSH AX
CMP FPWM, 01H
JNZ TEST2
CMP VAA, 00H
JNZ ANOT0
MOV FPWM, 02H
MOV AL, BBB
CLC
RCR AL, 01H
MOV VBB, AL
JMP TEST2
ANOT0: DEC VAA
MOV DX, 0602H ;加温
MOV AL, 01H
OUT DX, AL
TEST2: CMP FPWM, 02H
JNZ OUTT
CMP VBB, 00H
JNZ BNOT0
MOV FPWM, 01H
MOV AL, AAAA
CLC
RCR AL, 01H
MOV VAA, AL
JMP OUTT
BNOT0: DEC VBB
MOV DX, 0602H ;停止加温
MOV AL, 00H
OUT DX, AL
OUTT: POP AX
RET
;==============================================
;PID 算法子程序
;根据 SPEC, KPP, KII, KDD 及 YK 计算对应控制量 CK
;==============================================
PID: MOV AX, SPEC ;求偏差 EK
SUB AX, YK
MOV R0, AX
MOV R1, AX ;求偏差变化量 AEK
SUB AX, EK_1
MOV R2, AX ;求 BEK
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 AL, TS
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 AL, TS
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 AL, 7FH
JMP LLL2
LLL1: CMP CH, 0FFH
JZ LLL2
MOV AL, 80H ;CK=CK_1+CK
LLL2: MOV R7, AL
ADD AL, CK_1
JO L8
L18: MOV CK_1, AL
ADD AL, 80H
MOV CK, AL
RET ;PID 子程序返回
L8: TEST R7, 80H ;溢出处理程序
JNZ L17
MOV AL, 7FH
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
全部评论 (0)
还没有任何评论哟~
