PID调节即比例、积分、微分调节,是连续控制系统中技术最成熟、应用最广泛的一种调节控制方式。其表达式为: 式中 u-调节器输出信号 e-偏差信号(给定值与采样值的差) K-调节器的比例系数 Ti-调节器的积分时间 Td-调节器的微分时间 在计算机控制系统中,为实现数字控制,须对上式进行离散化处理:用数字形式的差分方程替代连续系统的微分方程。设系统的采样周期是T,在t=iT时刻进行采样,有: e=ei 式中的 ei为根据本次采样值得到的偏差,而ei-1为根据上次采样值得到的偏差。由以上四式可得位置式PID控制算式: ui=K[ei+ + (ei-ei-1)] 按该式计算,要计算累加项(第二项),不仅麻烦,且为保存历次偏差值要占用很多内存单元,仍很不方便。为此,再作进一步处理。 据递推原理,得ui-1的表达式为: ui-1=K[ei-1+ + (ei-1-ei-2)] 故 Δui=ui-ui-1=K[(ei-ei-1)+ ei+ (ei-2ei-1+ei-2)] 该式称为增量式PID控制算式,式中Δui是在第i-1次输出基础上的增加(或减少)量。这种算法在在生产实际中更为常用。 经简化,上式又可演变为: Δui=KP(ei-ei-1)+KIei+KD[(ei-ei-1)-(ei-1-ei-2)] 式中 KP=K KI=K KD=K 因K、TI、TD、T都是常数,可知KP、KI、KD也都是常数。至此,似乎PID控制算法的程序设计已不复杂,只要将给定值与每次经中值滤波、数据处理后得到的检测值相减,得到偏差ei,再与上次偏差ei-1(初值设为0)相减,得到ei-ei-1; 又通过上次偏差ei-1与前次偏差ei-2(初值也设为0)相减,得到ei-1-ei-2。有了ei、ei-ei-1、ei-1-ei-2及KP、KI,便可计算得Δui,再由Δui与ui-1相加得到ui。但,ei、ei-ei-1、ei-1-ei-2均可为正,可为负,给计算带来很**烦。 算法程序还是比较容易理解的: MOV A, 5CH ;取给定值 CLR C SUBB A, 4CH ;求给定值和采样值的差ei JNC PID1 CPL A ADD A, #01H SETB 30H SJMP PID2 PID1: CLR 30H PID2: MOV 6BH, A MOV R1, 6BH MOV C, 30H MOV 20H, C MOV R2, 6CH MOV C, 31H MOV 21H, C LCALL DJF MOV 6EH, R3 MOV C, 22H MOV 33H, C MOV R1, 6CH MOV C, 31H MOV 20H, C MOV R2, 6DH MOV C, 32H MOV 21H, C LCALL DJF MOV 6FH, R3 MOV C, 22H MOV 34H, C MOV R1, 6EH MOV C, 33H MOV 20H, C MOV R2, 6FH MOV C, 34H MOV 21H, C LCALL DJF MOV 70H, R3 MOV C, 22H MOV 35H, C MOV A, 6BH MOV B, 6EH MUL AB MOV 71H, B MOV 72H, A MOV A, 69H MOV B, 6BH MUL AB MOV 73H, B MOV 74H, A MOV A, 6AH MOV B, 70H MUL AB MOV 75H, B MOV 76H, A MOV R1, 71H MOV R2, 72H MOV C, 33H MOV 23H, C MOV R3, 73H MOV R4, 74H MOV C, 30H MOV 24H, C LCALL SJF MOV 77H, R5 MOV 78H, R6 MOV C, 25H MOV 36H, C MOV R1, 77H MOV R2, 78H MOV C, 36H MOV 23H, C MOV R3, 75H MOV R4, 76H MOV C, 35H MOV 24H, C LCALL SJF MOV 79H, R5 MOV 7AH, R6 MOV C, 25H MOV 37H, C MOV R1, 7DH MOV R2, 7EH CLR 23H MOV R3, 79H MOV R4, 7AH MOV C, 37H MOV 24H, C LCALL SJF JNB 25H, PID3 MOV 7BH, #00H MOV 7CH, #00H SJMP PID4 PID3: MOV 7BH, R5 MOV 7CH, R6 PID4: MOV 6DH, 6CH MOV 6CH, 6BH MOV 7DH, 7BH MOV 7EH, 7CH LCALL DAC DJF: JB 20H, DJF4 JB 21H, DJF2 CLR C MOV A, R1 SUBB A, R2 MOV R3, A JC DJF1 CLR 22H RET DJF1: MOV A, R3 CPL A ADD A, #01H MOV R3, A SETB 22H LCALL DAC DJF2: MOV A, R1 ADD A, R2 MOV R3, A JNC DJF3 MOV R3, #0FFH DJF3: CLR 22H RET DJF4: JB 21H, DJF6 MOV A, R1 ADD A, R2 MOV R3, A JNC DJF5 MOV R3, #0FFH DJF5: SETB 22H LCALL DAC DJF6: CLR C MOV A, R2 SUBB A, R1 MOV R3, A JC DJF1 CLR 22H RET SJF: JB 23H, SJF3 JB 24H, SJF2 MOV A, R2 ADD A, R4 MOV R6, A MOV A, R1 ADDC A, R3 MOV R5, A JNC SJF1 MOV R5, #0FFH MOV R6, #0FFH SJF1: CLR 25H RET SJF2: CLR C MOV A, R2 SUBB A, R4 MOV R0, A MOV A, R1 SUBB A, R3 MOV R5, A JC SJF4 CLR 25H RET SJF3: JB 24H, SJF5 CLR C MOV A, R4 SUBB A, R2 MOV R6, A MOV A, R3 SUBB A, R1 MOV R5, A JC SJF4 CLR 25H RET SJF4: MOV A, R6 CPL A ADD A, #01H MOV R6, A MOV A, R5 CPL A ADDC A, #00H MOV R5, A SETB 25H RET SJF5: MOV A, R2 ADD A, R4 MOV R6, A MOV A, R1 ADDC A, R3 MOV R5, A JNC SJF6 MOV R5, #0FFH MOV R6, #0FFH SJF6: SETB 25H RET
呵呵,我的毕业设计刚好用到,所以就发上来了,这是我从书上找的,应该没什么错误,我是初学者,以后大家多多交流吧!!!! |