电机控制PI调节器(速度闭环,PFC闭环)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
∑∑==+=+=k
j i p
k
j I
s
p j e K k e K
j e T T
k e K k u 0
)()(])()([)( (3.60)
= kp * e(k) + yn(k+1)
= kp * e(k) + ki * e(k) + yn(k)
= K1*(kp * e(k) + ki * e(k) + yn(k) )//K1为寄存器比例系数,下一程序取64.目的是能转化成MCU 调节
//**************************************************************************** // @Function
// C calling format: //
// int pi_controller32(long *pi_parameter,int reference,int actual) //
//---------------------------------------------------------------------------- // @Description //
// PI-Controller
// derived from transfer function G = kp + 1/(p*Ti)
//
// e(k) = reference - actual T0 =
// yn(k+1)= yn(k) + ki * e(k) ki = T0/Ti
// y(k+1) = yn(k+1) + kp * e(k) * 64
//----------------------------------------------------------------------------// Computing time 42 CPU-cycle
//
//----------------------------------------------------------------------------// @Returnvalue
//
// int "@4" Output of pi_controller64
//----------------------------------------------------------------------------// @Parameters
//
//--------------------------- Arguments -------------------------------------
// reference : reference value
// actual : actual value
//
// struct pi_parameter
// {
// long yn; Integral buffer
// int kp; Proportional Constant
// int ki; Integral Constant
// int ymin; Limit value min
// int ymax; Limit value max
// };
//
//----------------------------------------------------------------------------// @Date 27.11.2004
// Condition optimization off / one
//**************************************************************************** inline int pi_controller32( PI_array *pi_parameter, int reference, int actual)
//inline int pi_controller32(int *pi_parameter, int reference, int actual)
{
int retvalue;
__asm( "\n"
" mov r8,MCW ;Save MCW register \n"
" mov MCW,#0600h ;Set shift left \n"
" mov %0,ZEROS ;Load zero in R9 \n"
" CoLOAD %0,%2 ;Load Accumulator (High) with %2(reference \n"
" CoSUB %0,%3 ;error = reference - actual \n"
" CoSTORE r13 ,MAS ;Load error in @R5 \n"
" mov r12,[%1+] \n"
" CoLOAD r12,[%1+] ;Load yn (integral buffer) in accumulator \n"
" mov r11,%1 ;Save parameters addres in R1 \n"
" mov r12,[r11+] ;Load Kp (proportional Constant) in R5 \n"
" mov r10,[r11+] ;Load Ki = T0/Ti (integral Constant) in R6 \n"
" CoMAC r10,r13 ;yn = Ki * error + yn \n"
" mov r10,[r11+] ;Load ynmax (limit value max) \n"
" mov r9,[r11+] ;Load ynmin (limit value min) \n"
" CoMIN %0,r10 ;Limit max yn \n"
" CoMAX %0,r9 ;Limit min yn \n"
" CoSTORE %2,MAH ;Store yn-high in R4 \n"
" CoSTORE %3,MAL ;Store yn-low in R3 \n"
" mov [-%1],%2 ;Store R4 in integral buffer(High) \n"
" mov [-%1],%3 ;Store R3 in integral buffer(Low) \n"
" CoMUL r12,r13 ;Kp * error \n"
" CoSHL #6 ;64 * Kp * error \n"
" CoADD %3,%2 ;y = yn + (64 * Kp * error) \n"
" mov r10,[r11+] ;Load ymax (limit value max) \n"
" mov r9,[r11+] ;Load ymin (limit value min) \n"
" CoMIN %0,r10 ;Limit max y \n"
" CoMAX %0,r9 ;Limit min y \n"
" CoSTORE %0,MAH ;Store y-high in %0 (return register) \n"
" mov MCW,r8 ;Restore MCW register \n"