电机控制PI调节器(速度闭环,PFC闭环)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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"

相关文档
最新文档