Advertisement

温度闭环控制

阅读量:

为了实现系统稳定性需求,在系统中人为地设定一个温度数值,并将其与由温控测量电路测得的反馈信号进行比较;计算其差分经过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)

还没有任何评论哟~