eaglelpx 发表于 2008-6-4 09:51:29

为什么我的PID在离设订值还有10度的时候就关闭加热继电器了 ?

下面是我编的PID程序,PID输出控制继电器
;----------------------------------------------------------------------
DUM                        ;两个八位数乘法
      LD    CNT,#08H
      LD    TEMP3,A0
      LD    TEMP4,B0
      CLR   A0
      CLR    B0   
DUM2
      RCF
      RRC   TEMP4
      JR    NC,LOP3
DADD
       ADDA0,TEMP3
      
LOP3   
         RRCA0
         RRCB0
         DECCNT
         JR    NZ,DUM2
         ;LD P0,A0
         ;LD P0,B0
         RET
;-----------------------------------------------------------------------
PIDK
    LD ER_GW,KEY_GW_SET ;设定值的个位,十位,百位(非压缩BCD码) ,
    LD ER_SW, KEY_SW_SET ;分别放在 ER_GW,ER_SW,ER_BW中
    LD ER_BW, KEY_BW_SET
    rcf
    Sub ER_GW,ER_BUF_GW;当前值存在ER_BUF_GW (个位)
    SBC ER_SW,ER_BUF_SW   ;ER_BUF_SW(十位)
    Sbc ER_BW,ER_BUF_BW   ;ER_BUF_BW   (百位)
    LD Pi,#00h
    LD Pd,#00h
    LD Pp,#00h
    LD P,#00H
COMP             ;误差值小于零的输出零,停止加热
    CP ER_BW,#00H
    JR GT,PD
    JR EQ,COMP1
    LD P,#00H
    JP QUIT
COMP1
    CP ER_SW,#00H
    JR GT,PD
   JR EQ,COMP2
    LD P,#01H
    JP QUIT
COMP2
    CP ER_GW,#00H
    JR GE,PD
    LD P,#00H
    JP QUIT
;----------------------------------------------------------------------------
PD
    CP ER_BW,#00h;在20度范围内启动PID
    JP ULE,PO   
    LD P,#0C8H
    JP QUIT
PO
    CP ER_SW,#01H
    JR ULE,PID
    LDP,#0C8H
    JP QUIT
PID
;----------------------------------------------------
    ADD ER_GW1,ER_GW    ;误差求和
    ADC ER_SW1,ER_SW
    ADD ER_BW1,ER_BW
    RCF
    LD SUM_ER,ER_GW
    LD A0,#10
    LD B0,ER_SW1
    CALL DUM
    ADD SUM_ER,B0
;-------------------------------------------------------
    LD Pp,ER_GW
    LD A0,ER_SW
    LD B0,#0AH
    CALL DUM
    ADD Pp,B0
    LD A0,Pp
    LD B0,Kp
    CALL DUM
    LD Pp,B0   ;比例项
    LD A0,SUM_ER
    LD B0,Ki
    CALL DUM
    LD Pi,B0    ;积分项
    ;LD P0,Pi
    LD ER_BUF_GW,ER_GW
    LD ER_BUF_SW,ER_SW
    SUB ER_BUF_GW,ER_GW1
    SBC ER_BUF_SW,ER_SW1
    LD A0,#0AH
    LD B0,ER_BUF_SW
    CALL DUM
    ADD B0,ER_BUF_GW
    LD A0,Kd
    CALL DUM
    LD Pd,B0   ;微分项
    ;ld P0,Pd
    ADD P,Pp
    ADD P,Pi
    ADD P,Pd    ;控制器输?
   ;LD P0,P
    ; CP P,#0FEH
    ; JP ULT,QUIT
    ; LD P,#0C8H

QUIT
   CP P,#00H
   JR ULE,COMPENSATIONL ;控制器输出设定在0-200内
   CP P,#0C8H
   JR UGE,COMPENSATIONH
COMPENSATIONH
   CP P,#0C8H
   JP ULT,QUIT1
   LD P,#0C8H
COMPENSATIONL
         CP P,#00H
         JP UGT,QUIT1
         LD P,#00H
QUIT1
      LD ER_GW2,ER_GW;ERROR->ERROR2
      LD ER_SW2,ER_SW   ;新的误差覆盖旧的
      LD ER_BW2,ER_BW
      RET

xukaiming 发表于 2009-11-14 18:42:31

不然你等着过冲啊,肯定是你的微分系数选的太大了
页: [1]
查看完整版本: 为什么我的PID在离设订值还有10度的时候就关闭加热继电器了 ?