-
引用 xxxz 2008/9/18 15:59:34 发表于32楼的内容
-
-
-
tigersharc | 当前状态:离线
总积分:287 2024年可用积分:0
注册时间: 2008-09-19
最后登录时间: 2012-10-15
-
tigersharc 发表于 2008/9/19 11:58:35
引用 tigersharc 2008/9/19 11:58:35 发表于33楼的内容
-
-
-
-
laladolphin | 当前状态:离线
总积分:390 2024年可用积分:0
注册时间: 2008-07-17
最后登录时间: 2008-10-07
-
laladolphin 发表于 2008/9/26 18:03:25
引用 laladolphin 2008/9/26 18:03:25 发表于34楼的内容
-
-
引用 chyw_927 2008/9/26 20:13:52 发表于35楼的内容
-
-
yszhao 发表于 2008/9/27 13:48:03
;//**************************************************************************************************************
;//功 能: 电机控制的PID(积分分离) PID(void) 执行时间少于70uS/932-12MHz
;//**************************************************************************************************************
$NOMOD51
OCRAH equ 0EFh
OCRAL equ 0EEh
OCRBH equ 0FBh
OCRBL equ 0FAh
OCRCH equ 0FDh
OCRCL equ 0FCh
OCRDH equ 0FFh
OCRDL equ 0FEh
TCR21 equ 0f9h
$include (REG52.INC)
NAME PIDWork
?PR?PID?PIDWork SEGMENT CODE
?PR?PID_MUL?PIDWork SEGMENT CODE
?PR?PID_out?PIDWork SEGMENT CODE
?DT?PID_k?PIDWork SEGMENT DATAPUBLIC PID_Kp,PID_Ki,PID_Kd,PID_Umax,PID_Emax
PUBLIC PID_U,PID_En1,PID_En2,PID_Temp,PID_TempL
RSEG ?DT?PID_k?PIDWork
PID_Kp: DS 2 ;比例系数
PID_KpL data PID_Kp+1
PID_Ki: DS 2 ;积分系数
PID_KiL data PID_Ki+1
PID_Kd: DS 2 ;微分系数
PID_KdL data PID_Kd+1
PID_Umax: DS 2 ;期望最大值设定
PID_UmaxL data PID_Umax+1
PID_Emax: DS 2 ;积分分离的误差最大值设定
PID_EmaxL data PID_Emax+1
PID_U: DS 2 ;当前的采样值
PID_UL data PID_U+1
PID_En1: DS 2 ;上一次计算的误差值
PID_En1L data PID_En1+1
PID_En2: DS 2 ;上一次计算的误差的误差值
PID_En2L data PID_En2+1
PID_Temp: DS 4 ;计算过程中的暂存
PID_TempL data PID_Temp+1
PID_Temp1 data PID_Temp+2
PID_Temp1L data PID_Temp+3PUBLIC _PID
RSEG ?PR?PID?PIDWork
_PID: push acc
push psw
clr c ;有符号减法
mov a,PID_UmaxL ;计算当前的误差En(PID_U里暂存运算结果)
subb a,PID_UL
mov PID_UL,a
mov a,PID_Umax
subb a,PID_U
mov PID_U,a
jnb acc.7,PID_k
mov a,PID_UL
cpl a
add a,#1
mov r7,a
mov a,PID_U
cpl a
addc a,#0
xch a,r7
sjmp PID_g
PID_k: mov r7,PID_U
mov a,PID_UL
PID_g: clr c
subb a,PID_EmaxL
mov a,r7
subb a,PID_Emax
jnb acc.7,PID_a ;如果En>Emax则转
mov r7,PID_KiL ;Ki*En
mov r6,PID_Ki
mov r5,PID_UL
mov r4,PID_U
acall PID_MUL ;二字节伪有符号乘法(r4-r7里暂存结果)
mov a,PID_Temp1L ;PID加法子程序(将结果加入输出)
add a,r7
mov PID_Temp1L,a
mov a,PID_Temp1
addc a,r6
mov PID_Temp1,a
mov a,PID_TempL
addc a,r5
mov PID_TempL,a
mov a,PID_Temp
addc a,r4
mov PID_Temp,a
PID_a: mov a,PID_En1L ;更新PID_En1
xch a,PID_UL
mov PID_En1L,a
mov a,PID_En1
xch a,PID_U
mov PID_En1,a
clr c ;有符号减法
mov a,PID_En1L ;计算当前的误差差(En-En1)
subb a,PID_UL
mov PID_UL,a
mov a,PID_En1
subb a,PID_U
mov PID_U,a
mov r7,PID_KpL ;+Kp*(En-En1)
mov r6,PID_Kp
mov r5,PID_UL
mov r4,PID_U
acall PID_MUL
mov a,PID_Temp1L ;PID加法子程序(将结果加入输出)
add a,r7
mov PID_Temp1L,a
mov a,PID_Temp1
addc a,r6
mov PID_Temp1,a
mov a,PID_TempL
addc a,r5
mov PID_TempL,a
mov a,PID_Temp
addc a,r4
mov PID_Temp,a
clr c ;有符号减法
mov a,PID_UL ;计算误差差的差(En-En1-En2),同时更新En2
subb a,PID_En2L
mov PID_En2L,a
mov a,PID_U
subb a,PID_En2
mov PID_En2,a
mov r7,PID_KdL ;+Kd*(En-En1-En2)
mov r6,PID_Kd
mov r5,PID_En2L
mov r4,PID_En2
acall PID_MUL
mov a,PID_Temp1L ;PID加法子程序(将结果加入输出)
add a,r7
mov PID_Temp1L,a
mov a,PID_Temp1
addc a,r6
mov PID_Temp1,a
mov a,PID_TempL
addc a,r5
mov PID_TempL,a
mov a,PID_Temp
addc a,r4
mov PID_Temp,a
pop psw
pop acc
ret
ret
;//**************************************************************************************************************
;//**************************************************************************************************************
PUBLIC _PID_out
RSEG ?PR?PID_out?PIDWork
_PID_out: push acc
push psw
clr c
mov a,r6
rrc a
mov r6,a
mov a,r7
rrc a
mov r7,a
out_a: mov OCRAH,r6 ;PWM更新
mov OCRAL,r7
mov a,r7
add a,#25
mov OCRBL,a
mov a,r6
addc a,#0
mov OCRBH,a
orl TCR21,#080h ;PWM更新
out_b: pop psw
pop acc
ret
;//**************************************************************************************************************
;//**************************************************************************************************************
PUBLIC _PID_MUL
RSEG ?PR?PID_MUL?PIDWork
_PID_MUL:
PID_MUL: push acc
push psw
clr f0 ;符号判断
mov a,r4
jb acc.7,PID_Ma
sjmp PID_Md
PID_Ma: setb f0
mov a,r5
cpl a
add a,#1
mov r5,a
mov a,r4
cpl a
addc a,#0
mov r4,a
PID_Md:; mov a,r6
; mov c,acc.7
;jnb f0,PID_Mf
; cpl c
PID_Mf:; mov f0,c
; jb acc.7,PID_Mb
; sjmp PID_Mc
PID_Mb:; clr c
; mov a,r7
; subb a,#1
; cpl a
; mov r7,a
; mov a,r6
; subb a,#0
; cpl a
; mov r6,aPID_Mc: mov a,r5
mov b,r7
mul ab
xch a,r7
mov r3,b
mov b,r4
mul ab
add a,r3
mov r3,a
mov a,b
addc a,#0
xch a,r5
mov b,r6
mul ab
addc a,r3
xch a,r6
xch a,r5
addc a,b
xch a,r5
mov b,r4
mul ab
addc a,r5
mov r5,a
mov a,b
addc a,#0
mov r4,a
jb f0,PID_Me
pop psw
pop acc
ret
PID_Me: mov a,r7
cpl a
add a,#1
mov r7,a
mov a,r6
cpl a
addc a,#0
mov r6,a
mov a,r5
cpl a
addc a,#0
mov r5,a
mov a,r4
cpl a
addc a,#0
mov r4,a
pop psw
pop acc
ret
END
引用 yszhao 2008/9/27 13:48:03 发表于36楼的内容
-
-
-
shirley1010 | 当前状态:在线
总积分:998 2024年可用积分:0
注册时间: 2008-08-20
最后登录时间: 2019-06-16
-
shirley1010 发表于 2008/10/17 17:43:43
引用 shirley1010 2008/10/17 17:43:43 发表于37楼的内容
-
-
-
独影夜舞 发表于 2009/9/17 13:29:04
请问各位工控行业的前辈、师兄师姐们,我是刚入道的后生,我想请教你们是:PID的含义,若有答案,请发送至Emal-jixiewuzyh@sina.com
引用 独影夜舞 2009/9/17 13:29:04 发表于38楼的内容