积分分离PID控制算法程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
积分分离PID控制算法程序2007-01-05 15:23
;**********P10,积分分离PID控制算法程序********
;T、TD、TI、KP依次从30H,33H,36H,39H开始。
;A,B,C,A',的值依次存在BLOCK1,BLOCK2,BLOCK3 BLOCK4 的地址里;这里B'与C值相同
; 这里R(k)给的是定值
ORG 0000H
E EQU 20H ; 一阈值
GK EQU 23H ;G(k)
GK1 EQU 26H ;G(k-1)
FK EQU 29H ;F(k)
FK1 EQU 2CH ;F(k-1)
BLOCK1 EQU 50H ;A
BLOCK2 EQU 53H ;B
BLOCK3 EQU 56H ;C
BLOCK4 EQU 5AH ;A'
UK EQU 5DH ;存放结果
BUFF EQU 43H ;暂存区
BUFF1 EQU 46H
BUFF2 EQU 49H
BUFFR0 EQU 4CH
REC EQU 63H ;采样次数
RK EQU 66H ;R(k)
CK EQU 69H ;采样数据始址
EK EQU 6CH ;存放偏差值E(k)的始址
EK1 EQU 70H ;存放E(k-1)的始址
TEST: MOV RK,#01H ;常数Rk 1.25的BCD码浮点数
MOV RK+1,#12H
MOV RK+2,#50H
; MOV E,#7EH ;设定一阈值0.001的BCD码浮点数
; MOV E+1,#10H
; MOV E+2,#00H
MOV E,#00H ;阈值为0.3
MOV E+1,#30H
MOV E+2,#00H
MOV 3CH,#01H ;常数1的BCD码浮点数
MOV 3DH,#10H
MOV 3EH,#00H
MOV 40H,#01H ;常数2的BCD码浮点数
MOV 41H,#20H
MOV 42H,#00H
MOV 30H,#01H ;T 2.34的BCD 码浮点数
MOV 31H,#23H
MOV 32H,#40H
MOV 33H,#01H ;Td 3.54的BCD码浮点数MOV 34H,#35H
MOV 35H,#40H
MOV 36H,#01H ;Ti 1.12的BCD码浮点数MOV 37H,#11H
MOV 38H,#20H
MOV 39H,#01H ;Kp 1.25的BCD码浮点数MOV 3AH,#12H
MOV 3BH,#50H
MOV R0,#E ; 将其转换成二进制浮点操作数LCALL BTOF
MOV R0,#RK
LCALL BTOF
MOV R0,#3CH
LCALL BTOF
MOV R0,#40H
LCALL BTOF
MOV R0,#39H
LCALL BTOF
MOV R0,#36H
LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#33H ;指向BCD码浮点操作数Td LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#30H ;指向BCD码浮点操作数T LCALL BTOF ;将其转换成二进制浮点操作数MOV R1, #BUFFR0 ;保存30H中的值即T值LCALL FMOVR0
MOV R1, #36H ;计算A值(1+T/Ti+Td/T).Kp LCALL FDIV
MOV R1,#3CH ;常数1
LCALL FADD
MOV R0,#33H ;保存33H中的值
MOV R1,#BUFF
LCALL FMOVR0
MOV R1,#BUFFR0
LCALL FDIV
MOV R1,#30H ;30H里存的是T/Ti+1
LCALL FADD
MOV R1,#39H
LCALL FMUL
MOV R1 ,#BLOCK1 ;将结果保存在BLOCK1中LCALL FMOVR0
MOV R1,#BUFFR0 ;30H恢复原值
MOV R0,#30H
LCALL FMOV
MOV R1,#BUFF ;33H恢复原值
MOV R0,#33H
LCALL FMOV
MOV R0,#40H ;计算B的值Kp.(1+2.Td/T) MOV R1,#33H
LCALL FMUL
MOV R1,#30H
LCALL FDIV
MOV R1,#3CH
LCALL FADD
MOV R1,#39H
LCALL FMUL
MOV R1,#BLOCK2 ;保存B值到BLOCK2中LCALL FMOVR0
MOV R0,#39H ;计算C的值Kp.Td/T
MOV R1,#33H
LCALL FMUL
MOV R1,#30H
LCALL FDIV
MOV R1,#BLOCK3 ;保存C值到BLOCK3中LCALL FMOVR0
MOV R0,#33H ;计算A',保存33H中的值MOV R1,#BUFFR0
LCALL FMOVR0
MOV R1,#30H
LCALL FDIV
MOV R1,#3CH
LCALL FADD
MOV R1,#39H
LCALL FMUL
MOV R1,#BLOCK4 ;保存A'值到BLOCK4中LCALL FMOVR0
MOV R1,#BUFFR0 ;恢复33H中的值
LCALL FMOV
MOV R0,#EK1 ;将EK1,FK1,GK1设初值0 LCALL FCLR
MOV R0,#FK1
LCALL FCLR
MOV R0,#GK1
LCALL FCLR
MOV REC,#04H ;设置采样次数