为什么我的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 不然你等着过冲啊,肯定是你的微分系数选的太大了
页:
[1]