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