无传感器矢量控制技术
8bit单片机FOC矢量控制PMSM电机无传感器

说明:下面程序取自IFX 8位机无传感器PMSM电机矢量控制程序。
整个程序是连续的矢量控制计算函数,其中有图片说明打断,便于更好的理解。
其中包括坐标系变换,磁链角估算,PI速度环电流环调节。
(单片机XC886,Keil编译器Cavin整理)坐标系变换说明:双电阻采样得到两相电流(ia, ib),由abc120°静止坐标系Clarke变换到直角坐标系(iα, iβ),由(iα, iβ)静止直角坐标系Park变换到直角旋转坐标系(iq, id)。
直流id不变,通过PI速度环电流环得到期望直流iq,进行限幅控制。
由旋转坐标系(vq, vd)经过Park逆变换到静止坐标系(vα, vβ),然后再经过矢量调制成PWM控制电机。
无传感器角度估算:由Clarke变换得到(iα, iβ)和由Park逆变换得到的(vα, vβ),经过低通滤波器PT1,再由直角坐标系变极坐标系得到磁链估算角无传感器开环启动策略:在定子中加入幅值及频率都受控的电流,若PLL收敛,切换到FOC闭环控制。
软件流程图:void FOC_Calculation (void) using 1{#pragma asm;**************************************;* FOC_Calculation;**************************************;*;* this function contains all calculations;* necessary for the field oriented control.;*;* register bank 1 is used;*;**************************************;* push registers;**************************************push ACCpush bpush dphpush dplpush PSWpush SYSCON0; use register bank 0x01mov PSW,#0x08;;anl SYSCON0,#0xFE ; use standard SFRsmov CCU6_PAGE,#0xA0 ; select CCU6-page 0 SST2;**************************************;* ResultRegister3 Control;**************************************;* Multiplex RESR3 for ADC channel;* ch0, ch1 and ch6 in sequential queue;* Add ADC channel ch3 in triggered mode;*;* input ADC_RESR3;* guc_adc_ch;* gui_adc_ch_val;*;* output ADC_QINR0 = {ch0 -> ch1 -> ch6};* gui_adc_ch_val[guc_adc_ch++] = ADC_RESR3;*mov ADC_PAGE,#0x86 ; switch to ADC_page 6 save ST0mov ADC_QINR0,#0x83 ; channel 3, no refill, external trigger//mov ADC_QINR0,#0x07 ; add channel7 to queue (I_pfc) mov ADC_QINR0,#0x00mov r0,#gui_adc_ch_valmov ADC_PAGE,#0x03 ; switch to ADC_page 3 save no ST0mov @r0,ADC_RESRA3H ; gui_adc_ch_val[guc_adc_ch] = RESRA3 (H)inc r0mov a,ADC_RESRA3Lanl a,#0xe0 ; mask ADC status informationmov @r0,a ; gui_adc_ch_val[guc_adc_ch] = RESRA3 (L)//mov gi_I_pfc,ADC_RESRA2H//mov a,ADC_RESRA2L//anl a,#0xe0 ; mask ADC status information//mov gi_I_pfc+1,a;************************************** ;* current_calculation;************************************** ;* Take ADC values from ADC result;* registers and multiply by 8;*;* input ADC_RESR0, ADC_RESR1;*;* output R2 = [ -I2_shunt * 8 ]H;* R3 = [ -I2_shunt * 8 ]L;* A = [ (I2_shunt - I1_shunt) * 8 ]H;* R5 = [ (I2_shunt - I1_shunt) * 8 ]L;* R6 = [ I1_shunt * 8 ]H;* R7 = [ I1_shunt * 8 ]L;*mov r5,ADC_RESRA1Hmov a,ADC_RESRA1Lanl a,#0xE0 ; mask ADC status informationmov r4,amov r7,ADC_RESRA0Hmov a,ADC_RESRA0Lanl a,#0xE0 ; mask ADC status informationmov r6,amov ADC_PAGE,#0xC2 ; switch to old page restore ST0orl SYSCON0,#1 ; switch to mapped SFRsmov MDU_MD0,r6 ; MD3 = ADCR2_H [ RES9 | RES8 | RES7 | RES6 | RES5 | RES4 | RES3 | RES2 ] mov MDU_MD1,r7 ; MD2 = ADCR2_L [ RES1 | RES0 | 0 | VF | DRC | CHNR2 | CHNR1 | CHNR0 ] mov MDU_MD2,r4 ; MD1 = ADCR3_H [ RES9 | RES8 | RES7 | RES6 | RES5 | RES4 | RES3 | RES2 ] mov MDU_MD3,r5 ; MD0 = ADCR3_L [ RES1 | RES0 | 0 | VF | DRC | CHNR2 | CHNR1 | CHNR0 ] mov MDU_MD4,#0x22 ; shift right ADCR2/ADCR3 by 2 bitsmov MDU_MDUCON,#0x13; ; start bit-shiftnop ; 4 MDU readyclr cmov a, MDU_MR0subb a, offsetLmov a, MDU_MR1subb a, offsetHmov r6, ajnc okclr amov R7, amov R6, aok:clr cmov a, MDU_MR2subb a, offsetLmov r5, amov a, MDU_MR3subb a, offsetHmov r4, ajnc ok1clr amov R5, amov R4, aok1://mov r7,MDU_MR0//mov r6,MDU_MR1//mov r5,MDU_MR2//mov r4,MDU_MR3 ;-----------clr csubb a,r5mov r3,aclr asubb a,r4mov r2,a ; R2/R3 = -I2_shuntclr cmov a,r5 ; A = I2_shunt_Lsubb a,r7mov r5,a ; R5 = I2_shunt_L - I1_shunt_L mov a,r4 ; A = I2_shunt_Hsubb a,r6 ; A/R5 = I2_shunt - I1_shunt;**************************************;* phase current;**************************************;* Calculate currents I_phaseA and I_phaseB;* according the sector of space vector;*;* input R2 = [ -I2_shunt * 8 ]H;* R3 = [ -I2_shunt * 8 ]L;* A = [ (I2_shunt - I1_shunt) * 8 ]H;* R5 = [ (I2_shunt - I1_shunt) * 8 ]L;* R6 = [ I1_shunt * 8 ]H;* R7 = [ I1_shunt * 8 ]L;*;* output R4 = [ gi_I_phaseB ]H;* R5 = [ gi_I_phaseB ]L;* R6 = [ gi_I_phaseA ]H;* R7 = [ gi_I_phaseA ]L;*djnz guc_sector_s,SV_sectorB ; Sector A I1_shunt = Iu , I2_shunt = -Iwmov gi_I_phaseA+1,r7mov gi_I_phaseA,r6 ; I_phaseA = I1_shuntmov gi_I_phaseB+1,r5mov gi_I_phaseB,a ; I_phaseB = -(Iw + Iu) = I2_shunt - I1_shunt sjmp phase_current_endSV_sectorB:djnz guc_sector_s,SV_sectorC ; Sector B I1_shunt = Iv , I2_shunt = -Iwmov gi_I_phaseB+1,r7mov gi_I_phaseB,r6 ; I_phaseB = I1_shuntmov gi_I_phaseA+1,r5mov gi_I_phaseA,a ; I_phaseA = -(Iv + Iw) = I2_shunt - I1_shunt sjmp phase_current_endSV_sectorC:djnz guc_sector_s,SV_sectorD ; Sector C I1_shunt = Iv , I2_shunt = -Iumov gi_I_phaseB+1,r7mov gi_I_phaseB,r6 ; I_phaseB = I1_shuntmov gi_I_phaseA+1,r3mov gi_I_phaseA,r2 ; I_phaseA = -I2_shuntsjmp phase_current_endSV_sectorD:djnz guc_sector_s,SV_sectorE ; Sector D I1_shunt = Iw , I2_shunt = -Iu mov gi_I_phaseA+1,r3mov gi_I_phaseA,r2 ; I_phaseA = -I2_shuntmov gi_I_phaseB+1,r5mov gi_I_phaseB,a ; I_phaseB = -(Iu + Iw) = I2_shunt - I1_shunt sjmp phase_current_endSV_sectorE:djnz guc_sector_s,SV_sectorF ; Sector E I1_shunt = Iw , I2_shunt = -Iv mov gi_I_phaseB+1,r3mov gi_I_phaseB,r2 ; I_phaseB = -I2_shuntmov gi_I_phaseA+1,r5mov gi_I_phaseA,a ; I_phaseA = -(Iv + Iw) = I2_shunt - I1_shunt sjmp phase_current_endSV_sectorF:mov gi_I_phaseA+1,r7 ; Sector F I1_shunt = Iu , I2_shunt = -Iv mov gi_I_phaseA,r6 ; I_phaseA = I1_shuntmov gi_I_phaseB+1,r3mov gi_I_phaseB,r2 ; I_phaseB = -I2_shuntphase_current_end:;**************************************;* clark transform;**************************************;* transform from three phase system;* to two phase system;* I_beta = [(I_phaseB*2 + I_phaseA)/(sqr(3)*2)]*2;*;* input gi_I_phaseB;* gi_I_phaseA;*;* output gi_I_alpha;* gi_I_beta;*;I_phaseB*2 + I_phaseAmov a,gi_I_phaseB+1add a,ACCxch a,gi_I_phaseBaddc a,ACCxch a,gi_I_phaseB ; I_phaseB = I_phaseB*2add a,gi_I_phaseA+1mov MDU_MD0,a ; MD0 = [I_phaseB*2 + I_phaseA]_L mov a,gi_I_phaseBaddc a,gi_I_phaseAmov MDU_MD1,a ; MD1 = [I_phaseB*2 + I_phaseA]_H;(I_phaseB*2 + I_phaseA)/(sqrt(3)*2)mov MDU_MD4,#0xE6 ; MD4 = [0.57735 * 2^15]_Lmov MDU_MD5,#0x49 ; MD5 = [0.57735 * 2^15]_Hmov MDU_MDUCON,#0x14; ;->MDU start;I_phaseA*2mov a, gi_I_phaseA+1add a, ACCxch a, gi_I_phaseAaddc a, ACCmov b, axch a, gi_I_phaseA+1mov gi_I_alpha+1, a ;oscilloscopemov gi_I_alpha, b;(I_phaseB*2 + I_phaseA)/(sqrt(3)*2) * 2mov MDU_MD2,MDU_MR2mov MDU_MD3,MDU_MR3mov MDU_MD4,#0x02 ; shift right ADCR2/ADCR3 by 2 bitsmov MDU_MDUCON,#0x13; ; start bit-shiftnopnopmov gi_I_beta+1,MDU_MR2 ; I_beta = (I_phaseB*2 + I_phaseA)/sqr(3) , I_alpha = I_phaseA*2 mov gi_I_beta,MDU_MR3;**************************************;* flux estimation;**************************************;*;* Calculate the flux and angle;* PSI_alpha = integral( V_alpha + I_alpha * STATOR_R ) dt + I_alpha * STATOR_L;* PSI_beta = integral( V_beta + I_beta * STATOR_R ) dt + I_beta * STATOR_L ;* phi = atan( PSI_alpha / PSI_beta );*;* input gi_V_alpha;* gi_I_alpha;* gi_V_beta;* gi_I_beta;* gi_angle;* gi2_Integrator_alpha[0,1,2,3] ; stored values from integration via PT1 ;* gi2_Integrator_beta[0,1,2,3] ; stored values from integration via PT1 ;*;* output gi2_Integrator_alpha[0,1,2,3];* gi2_Integrator_beta[0,1,2,3];* gi_Flux_alpha;* gi_Angle_mem;* gi_angle;*;**************************************;*clr amov CD_STATC,a ; clear keep bits - interrupt disabledmov CD_CON,#0x48 ; Linear rotation mode - auto start MPS = 1 mov CD_CORDYH,gi_V_alpha ; Y = Imov CD_CORDYL,gi_V_alpha+1 ;mov CD_CORDZH,gi_I_alpha ; Z = R I_max = +4096/-4096mov CD_CORDZL,gi_I_alpha+1 ;mov CD_CORDXH,#STATOR_R_H ; X = Vmov CD_CORDXL,#STATOR_R_L ; CORDIC starts automatically; Y = Y + X*Z*16;**************************************;* Calculation ( (I_alpha * 2^STATOR_L_SCALE)* STATOR_L );*mov MDU_MD0,gi_I_alpha+1 ;4mov MDU_MD1,gi_I_alpha ;8#if STATOR_L_SCALE > 0mov MDU_MD4,#STATOR_L_SCALE ;12 leftshiftmov MDU_MDUCON,#0x13; ;16 bitshift#endifmov MDU_MD4,#STATOR_L_L ;12/4mov MDU_MD5,#STATOR_L_H ;16/8 MDU ready (bitshift)#if STATOR_L_SCALE > 0mov MDU_MD0,MDU_MR0 ;20mov MDU_MD1,MDU_MR1 ;24#endifmov MDU_MDUCON,#0x14; ;28 MR = I * Lmov r0,#gi2_Integrator_alpha ;32/2mov MDU_MD4,#FLUX_PT1_Z1_L ;34/6mov MDU_MD5,#FLUX_PT1_Z1_H ;36/10clr F0 ;40/12 F0 = 0 for PT1 scalermov CD_CORDYL,gi_V_beta+1 ;42/16 MDU readymov r5,MDU_MR3 ;40 R5 = [I_alpha * STATOR_L]_Hmov r4,MDU_MR2 ;44 R4 = [I_alpha * STATOR_L]_L CORDIC readymov r7,CD_CORDYH ; R7 = [V_alpha + I_alpha * STATOR_R]_Hmov r6,CD_CORDYL ; R6 = [V_alpha + I_alpha * STATOR_R]_L;**************************************;* Calculation (V_beta + I_beta * STATOR_R);*mov CD_STATC,a ; clear keep bits - interrupt disabledmov CD_CORDYH,gi_V_beta ;mov CD_CORDZH,gi_I_beta ; Z = Imov CD_CORDZL,gi_I_beta+1 ; X = Rmov CD_CON,#0x59 ; Linear rotation mode , start / MPS = 1;**************************************;* integration by PT1 integral(r6,r7)dt;*mov r3,#FLUX_PT1_Z2_Hmov r2,#FLUX_PT1_Z2_Llcall PT1_MDU ; PT1-return value L = *R1 , H = *R0;**************************************;* Calculation (I_beta * STATOR_L);*mov MDU_MD0,gi_I_beta+1mov MDU_MD1,gi_I_beta#if STATOR_L_SCALE > 0mov MDU_MDUCON,#0x13; ; bitshift#endifmov MDU_MD4,#STATOR_L_L ;4mov MDU_MD5,#STATOR_L_H ;8 MDU ready (bitshift)#if STATOR_L_SCALE > 0mov MDU_MD0,MDU_MR0mov MDU_MD1,MDU_MR1#endifmov MDU_MDUCON,#0x14; ; MR = I * L;**************************************;* _gi3_Flux_alpha[4,5] = [R5 + *R0, R4 + *R1];*mov a,r4 ;2 R4 = [ I_alpha * STATOR_L ]_Ladd a,@r0 ;4 *R1 = [ integral(V_alpha + I_alpha * STATOR_R)dt ]_L mov gi_Flux_alpha+1,a ;6mov a,r5 ;8 R5 = [ I_alpha * STATOR_L]_Hdec r0addc a,@r0 ;10 *R0 = [ integral(V_alpha + I_alpha * STATOR_R)dt ]_H mov gi_Flux_alpha,a ;12mov r0,#gi2_Integrator_beta ;14mov MDU_MD4,#FLUX_PT1_Z1_L ;18 MDU readymov MDU_MD5,#FLUX_PT1_Z1_H ;mov r7,CD_CORDYH ; R7 = [V_beta + I_beta * STATOR_R]_Hmov r6,CD_CORDYL ; R6 = [V_beta + I_beta * STATOR_R]_Lmov r5,MDU_MR3 ; R5 = [I_beta * STATOR_L]_Hmov r4,MDU_MR2 ; R4 = [I_beta * STATOR_L]_L;**************************************;* integration by PT1 integral(r6,r7)dt;*clr F0 ; F0 = 0 for PT1 scalermov r3,#FLUX_PT1_Z2_Hmov r2,#FLUX_PT1_Z2_Llcall PT1_MDU ; PT1-return value L = *R1 , H = *R0;**************************************;* CD_CORDY = [R5 + *R0, R4 + *R1];*mov a,r4 ; R4 = [ I_beta * STATOR_L ]_Ladd a,@r0 ; *R1 = [ integral(V_beta + I_beta * STATOR_R)dt ]_L mov CD_CORDYL,a ;mov a,r5 ; R5 = [ I_beta * STATOR_L]_Hdec r0addc a,@r0 ; *R0 = [ integral(V_beta + I_beta * STATOR_R)dt ]_H mov CD_CORDYH,a;**************************************;* calculation angle = atan( Flux_beta / Flux_alpha );*clr amov CD_STATC,a ; clear keep bits - interrupt disabledmov CD_CON,#0x02 ; Circular vectoring mode - auto start MPS = 1 mov CD_CORDZH,a ; Z = 0mov CD_CORDZL,a ;mov CD_CORDXH,gi_Flux_alpha ; X = Flux_alphamov CD_CORDXL,gi_Flux_alpha+1 ; CORDIC starts automaticallymov r7,guc_SpeedControlCounter ;4cjne r7,#0,_fb_CD0 ;6mov gi_Angle_mem,gi_angle ;10 store previous angle in angle_memmov gi_Angle_mem+1,gi_angle+1 ;14;**************************************;* inverse vector rotation;**************************************_fb_CD0:mov CD_CORDYL,gi_I_alpha+1 ;18 Y = Alphamov CD_CORDYH,gi_I_alpha ;22mov CD_CORDXH,gi_I_beta ;26 X = Beta;**************************************;* flux estimation continued;**************************************_fb_CD1:jb CD_BSY,_fb_CD1 ; wait for CORDIC result of angle calculationjnb gb_closed_loop,_fb_CD2a ; if( gb_closed_loop == 1 )mov gi_angle+1,CD_CORDZL ; {mov gi_angle,CD_CORDZH ; angle = atan( Flux_alpha / Flux_beta )sjmp _fb_CD2 ; }_fb_CD2a: ; during startup turn motor in open loop mov gi_Flux_angle+1,CD_CORDZL ; elsemov gi_Flux_angle,CD_CORDZH ; angle1 = atan( Flux_alpha / Flux_beta )mov MDU_MD0,gi_delta_angle+1 ; gi_delta_angle * gi_V_q_vf_slewmov MDU_MD1,gi_delta_anglemov MDU_MD4,gi_V_q_vf_slew+1mov MDU_MD5,gi_V_q_vf_slewmov MDU_MDUCON,#0x14; ; start Multiplikationmov R0,#gi_delta_angle+1 ; gi_angle += gi_delta_anglemov a,gi_angle+1 ; add delta angle at start-upadd a,@R0mov gi_angle+1,amov a,gi_angledec R0addc a,@R0mov gi_angle,amov r1,#gt_Iq_control+2clr amov @r1,adec r1mov R0,#gi_V_q_vf_offset+1 ; gi_V_q = gi_V_q_vf_offset + gi_delta_angle * gi_V_q_vf_slew * 256 mov a,MDU_MD1add a,@R0mov gi_V_q+1,amov @r1,amov a,MDU_MD2dec R0dec R1addc a,@R0mov gi_V_q,amov @r1,a;**************************************;* inverse vector rotation continued;**************************************;*;* rotate I_alpha and I_beta by angle;*;* input gi_I_alpha;* gi_I_beta;* gi_angle;*;* output gi_Id;* gi_Iq;*_fb_CD2:mov CD_STATC,a ; clear keep bits - interrupt disabledmov CD_CON,#0x4A ; Circular rotation mode - auto start MPS = 2 mov CD_CORDZH,gi_angle ; Z = gi_anglemov CD_CORDZL,gi_angle+1mov CD_CORDXL,gi_I_beta+1 ; CORDIC starts autmatically_vdm_CD0:jb CD_BSY,_vdm_CD0 ; wait for CORDIC result of inverse vector rotationmov gi_I_q+1,CD_CORDXL ; _gi_Iqmov gi_I_q,CD_CORDXH ;mov gi_I_d+1,CD_CORDYL ; _gi_Idmov gi_I_d,CD_CORDYH ;// uncomment this if scaling of gi_I_q to fullscale (8000 ... 7fff) is required// mov MDU_MD0,gi_I_q+1 ; MD0 = gi_I_q_L// mov MDU_MD1,gi_I_q ; MD1 = gi_I_q_H// mov MDU_MD4,#0xB8 ; MD4 = 16/K / 256 *2 _L // mov MDU_MD5,#0x09 ; MD5 = 16/K / 256 *2 _H // mov MDU_MDUCON,#13H; ; Start multiplication// nop// nop// nop// nop// nop// mov gi_I_q+1,MDU_MR1// mov gi_I_q,MDU_MR2 ; gi_I_q = gi_I_q * 16/K;**************************************;* Speed Calculation;**************************************;*;* calculation of speed = (angle_mem - angle) / T12PERIODE_HALF;*;* speed calculation is executed every;* (SPEED_CONTROL_RATE/CURRENT_CONTROL_RATE) of control loop;*;* input gi_angle;* gi_Angle_mem;* gi_Speed;*;* output *R0 = gi_Speed_H;* *R1 = gi_Speed_L;inc guc_SpeedControlCountermov a,guc_SpeedControlCounter ; if( ++_guc_SpeedControlCounter != (SPEED_CONTROL_RATE/CURRENT_CONTROL_RATE) ) jmp _node3_int1 cjne a,#(SPEED_CONTROL_RATE/CURRENT_CONTROL_RATE),_node3_int1mov guc_SpeedControlCounter,#0x00 ; else _guc_SpeedControlCounter = 0;clr c ; C = 0mov a,gi_angle+1 ; A = angle_Lsubb a,gi_Angle_mem+1 ; A = angle_L - angle_mem_Lmov r6,a ; R6 = (angle - angle_mem)_L = angle_L - angle_mem_Lmov a,gi_angle ; A = angle_Hsubb a,gi_Angle_mem ; A = angle_H - angle_mem_Hmov r7,a ; R7 = angle_H - angle_mem_Hmov r0,#gi_Speed+2mov a,#SPEED_PT1_Z;**************************************;* PT1 with 24bit memory;**************************************;*;* calculation of Y_(k) = Y_(k-1) + 2^(-Z) * { X_(k) - Y_(k-1) };*;* input Y [HLh] *R0 = Y_h;* X R6 = L, R7 = H;* Z a [1..15];*;* output *R0 = Y_H;*;* remark no limitation of subtract and add;* => X must be smaller than 0x3fff;*setb acc.5 ; select right shiftmov MDU_MD4,a ; MD4 = number of bits to shiftclr cclr asubb a,@r0 ; A = e_h = 0 - Y_hmov MDU_MD1,a ; MD1 = e_hdec r0mov a,r6 ; A = X_Lsubb a,@r0 ; A = e_L = X_L - Y_Lmov MDU_MD2,a ; MD2 = e_Ldec r0mov a,r7 ; A = X_Hsubb a,@r0 ; A = e_H = X_H - Y_Hmov MDU_MD3,a ; MD3 = e_Hmov MDU_MDUCON,#0x17; ; Start right-shift (X - Y)_HLh >> Z //wait for XC88x - no ws no double clknopnopnopnop//...inc r0 ;4inc r0 ;8nop ;12mov a,@r0 ;16 a = Y_hadd a,MDU_MR1 ; A = Y_h(k-1) + MR1mov @r0,a ; Y_h(k) = Y_h(k-1) + MR1dec r0mov a,@r0 ; a = Y_Laddc a,MDU_MR2 ; A = Y_L(k-1) + MR2mov @r0,a ; Y_L(k) = Y_L(k-1) + MR2mov r4,adec r0mov a,@r0addc a,MDU_MR3 ; A = Y_H(k-1) + MR3 + Cmov @r0,a ; Y_H(k) = Y_H(k-1) + MR3 + Cmov r5,a;* end of PT1 with 24bit memory;**************************************;**************************************;* Speed and Current Control;**************************************jb gb_closed_loop,_node3_int0 ; if( _gb_closed_loop == 1 ) jmp _node3_int0 ajmp _node3_int2 ; else jmp _node3_int2_node3_int0: ;;**************************************;* Speed Control;**************************************;*;* Load parameters for speed control;* call PI_controller;* use output as Iq_reference;*mov r7,gi_Speed_referencemov r6,gi_Speed_reference+1mov r0,#gt_Speed_control+1+5#ifdef SPEED_PI_KP_GAIN_128setb F0 ;Kp gain = 128#elseclr F0 ;Kp gain = 8#endiflcall PI_controller;* Limitation of IQ to positive (do not active brake) ; mov a,r6; jnb acc.7,_limit_end; mov r6, #0h; mov r7, #0h_limit_end:#ifdef LIMIT_IQ;* Limitation of speed control outputmov a,r6jnb acc.7,_limit_positivemov a, #LIMIT_IQ_Ladd a,r7mov a, #LIMIT_IQ_Haddc a,r6jc _limit_endmov r6, #~LIMIT_IQ_Hmov r7, #~LIMIT_IQ_Lsjmp _limit_end_limit_positive:mov a, #LIMIT_IQ_Lclr csubb a,r7mov a, #LIMIT_IQ_Hsubb a,r6jnc _limit_endmov r6, #LIMIT_IQ_Hmov r7, #LIMIT_IQ_L_limit_end:#endifmov gi_Iq_reference,r6mov gi_Iq_reference+1,r7_node3_int1:;************************************** ;* Current Control Id;************************************** ;*;* Load parameters for Id control;* call PI_controller and;* store result in Vd;*;* input;* gi_Id_reference;* gi_Id;*;* output;* gi_V_d;*mov r7,gi_Id_referencemov r6,gi_Id_reference+1mov r5,gi_I_dmov r4,gi_I_d+1mov r0,#gt_Id_control+1+5clr F0 ;Kp gain = 8lcall PI_controllermov gi_V_d,r6mov gi_V_d+1,r7;************************************** ;* Current Control Iq;************************************** ;*;* Load parameters for Iq control;* call PI_controller;* store result in Vq;*;* input;* gi_Iq_reference;* gi_Iq;*;* output;* gi_V_q;*mov r7,gi_Iq_referencemov r6,gi_Iq_reference+1mov r5,gi_I_qmov r4,gi_I_q+1mov r0,#gt_Iq_control+1+5clr F0 ;Kp gain = 8lcall PI_controllermov gi_V_q,r6mov gi_V_q+1,r7_node3_int2:;**************************************;* vector rotation;**************************************;*;* rotate gi_V_q and gi_V_d by angle;*;* input gi_V_q;* gi_V_d;* gi_angle;*;* output gi_V_alpha;* gi_V_beta;*clr amov CD_STATC,a ; clear keep bits - interrupt disabledmov CD_CON,#0x8A ; Circular rotation mode - auto start MPS = 4 mov CD_CORDZH,gi_angle ; Z = gi_anglemov CD_CORDZL,gi_angle+1mov CD_CORDYL,gi_V_q+1 ; Y = Q_kompmov CD_CORDYH,gi_V_q ;mov CD_CORDXH,gi_V_d ; X = D_kompmov CD_CORDXL,gi_V_d+1 ; CORDIC starts autmaticallymov CD_CORDZH,a ; Z = 0mov CD_CORDZL,a_MD_0:jb CD_BSY,_MD_0 ; wait for CORDIC with vector rotationmov r7,CD_CORDXL ; R7 <- V_alpha_Lmov r6,CD_CORDXH ; R6 <- V_alpha_Hmov r5,CD_CORDYL ; R5 <- V_beta_Lmov r4,CD_CORDYH ; R4 <- V_beta;**************************************;* catresian to polar transform;**************************************;*;* calculate space vector amplitude (norm);*;* input gi_V_alpha;* gi_V_beta;* R7 <- V_alpha_L;* R6 <- V_alpha_H;* R5 <- V_beta_L;* R4 <- V_beta;*;* output gi_V_alpha_L;* gi_V_alpha_H;* gi_V_beta_L;* gi_V_beta;* R7 = gi_Amplitude_L;* R6 = gi_Amplitude_H;* CORDZ = Anglemov CD_STATC,a ; clear keep bits - interrupt disabledmov CD_CON,#0x82 ; Circular vectoring mode - auto start MPS = 4mov CD_CORDYL,r5 ; Y = gi_V_betamov CD_CORDYH,r4 ;mov CD_CORDXH,r6 ; X = gi_V_alphamov CD_CORDXL,r7 ; CORDIC starts autmaticallymov MDU_MD0,#0x06 ; MD0 = 6mov MDU_MD1,a ; MD1 = 0mov gi_V_alpha+1,r7 ; gi_V_alpha_L = R7mov gi_V_alpha,r6 ; gi_V_alpha_H = R6mov gi_V_beta+1,r5 ; gi_V_beta_L = R5mov gi_V_beta,r4 ; gi_V_beta = R4_MD_02:jb CD_BSY,_MD_02 ; wait for CORDIC result of amplitude and angle calculationmov r7,CD_CORDXLmov r6,CD_CORDXH;* limitation of Amplitudeclr c ; if ( MAX_AMPLITUDE - gi_Amplitude ) < 0mov a,#MAX_AMPLITUDE_L ;subb a,r7 ;mov a,#MAX_AMPLITUDE_H ;subb a,r6 ;jnc _MD_002 ;mov r7,#MAX_AMPLITUDE_L ; gi_Amplitude = MAX_AMPLITUDEmov r6,#MAX_AMPLITUDE_H_MD_002: ; elsemov gi_Amplitude+1,r7 ; R7 = gi_Amplitude_L mov gi_Amplitude,r6 ; R6 = gi_Amplitude_H;**************************************;* sv modulation;**************************************;*;* space vector modulation;*;* input guc_sector;* R7 = gi_Amplitude_L;* R6 = gi_Amplitude_H;* CORDZ = Angle;*;* output;* R0 = V_TA_H;* R1 = V_TA_L;* R2 = V_TB_H;* R3 = V_TB_L;* R4 = V_TC_H;* a = V_TC_L;* R5 = T1/2_L;* B = T1/2_H;* R6 = T2_H/2;* R7 = T2_L/2;*mov MDU_MD4,CD_CORDZL ; MD4 = Z = Anglemov MDU_MD5,CD_CORDZH ; MD5 = Z = Anglemov MDU_MDUCON,#0x10; ; start Multiplikation (gi_angle * 6) -> Sektor,gammamov MDU_MD4,r7 ;4 MD4 = amp_Lmov MDU_MD5,r6 ;8 MD5 = amp_H_MD_01:clr a ;10mov CD_STATC,a ;12 clear keep bits - interrupt disabledmov CD_CORDZL,a ;14 Z = 0mov dptr,#Sinus60_tab ; MDU ready / get pointer at Sinustablemov r2,MDU_MR1 ; R2 = gamma 8bitmov guc_sector,MDU_MR2 ; R3 = guc_sector 0 (5)mov a,r2 ; A = gamma 8bitadd a,ACC ; A = gamma 9bit 256 16Bits valuesmov r0,a ; R0 = gamma 9bit 256 16Bits valuesjnc _MD_1inc dph_MD_1:;*;* Calculate T2;*movc a,@a+dptr ; A = sinus_Hmov MDU_MD1,a ; MD1 = sinus_Hmov a,r0 ; A = gammainc amovc a,@a+dptr ; A = sinus_Lmov MDU_MD0,a ; MD0 = sinus_Lmov MDU_MDUCON,#0x14; ; start Multiplikation amp * sinus(gamma);*;* Calculate T1;*mov dptr,#Sinus60_tabmov a,r2cpl aadd a,ACCmov r2,ajnc _MD_2inc dph_MD_2:movc a,@a+dptr ; A = sinus_H , MDU fertigmov MDU_MD1,a ; MD1 = sinus_Hmov r5,MDU_MR2 ; R5 = T2_Lmov r4,MDU_MR3 ; R4 = T2_Hmov a,r2 ; A = gamma 8bitinc amovc a,@a+dptr ; A = sinus_Lmov MDU_MD0,a ; MD0 = sinus_Lmov MDU_MDUCON,#0x14; ; start Multiplikation amp * sinus(60 - gamma)mov CD_CON,#0x48 ;4 Linear rotation mode - auto start MPS = 2 mov CD_CORDZH,#0x08 ;8 Z = 1mov CD_CORDYH,r4 ;12 Y = T2jnb gb_closed_loop,_MD_3 ; ignore TMIN during start-upcjne r4,#0,_MD_3 ;16 , MDU readymov a,#T_MINsubb a,r5jc _MD_3mov r5,#T_MIN_MD_3:mov r2,MDU_MR3 ; R2 = T1_Hmov r1,MDU_MR2 ; R1 = T1_Ljnb gb_closed_loop,_MD_4 ; ignore TMIN during start-upcjne r2,#0,_MD_4mov a,#T_MINsubb a,r1jc _MD_4mov r1,#T_MIN_MD_4:mov CD_CORDYL,r5 ; Y = T2mov CD_CORDXH,r2 ; X = T1mov CD_CORDXL,r1 ; CORDIC starts autmaticallyclr c ;2 Berechnung T2 /2mov a,r4 ;4 A = T2_Hrrc a ;6 A = T2_H/2mov r6,a ;8 R6 = T2_H/2mov a,r5 ;10 A = T2_Lrrc a ;12 A = T2_L/2mov r7,a ;14 R7 = T2_L/2mov a,guc_sector ;16jb ACC.0,_MD_5 ;20mov a,r1mov r5,a ; R5 = T1_L/T2_Lmov a,r2mov r4,a ; R4 = T1_L/T2_L_MD_5:mov r2,#T12PERIODE_HALF_H ;22mov r1,#T12PERIODE_HALF_H ;24mov a,#T12PERIODE_HALF_L ;26mov r0,a ;28inc guc_sector ;30 preparation for djnz instruction mov guc_sector_s,guc_sector ;34_MD_6:jb CD_BSY,_MD_6 ;CORDIC readyadd a,CD_CORDYLxch a,r1 ; R1 = TT3_L A = 1addc a,CD_CORDYHxch a,r0 ; R0 = TT3_H A = 144;*;* Calculate TT1;*clr csubb a,CD_CORDYLmov r3,a ; R3 = TT1_Lxch a,r2 ; R2 = TT1_L A = 1subb a,CD_CORDYH ; A = TT1_Hxch a,r2 ; R2 = TT1_H / A = T1_Ladd a,r5 ; A = TT1_L + T1,2_Lxch a,r4 ; R4 = TT1_L + T1,2_Laddc a,r2 ; A = TT1_H + T1,2_Hxch a,r4 ; R4 = TT1_H + T1,2_Hmov r5,CD_CORDXL ; R5 = T1/2_Lmov b,CD_CORDXH ; B = T1/2_H;**************************************;* update compare values;**************************************;*;* Calculation and setup of compare;* values of PWM Unit CCU6;*;* input guc_sector;* R0 = V_TA_H;* R1 = V_TA_L;* R2 = V_TB_H;* R3 = V_TB_L;* R4 = V_TC_H;* a = V_TC_L;* R5 = T1/2_L;* B = T1/2_H;* R6 = T2_H/2;* R7 = T2_L/2;*;* output;* setup of CCU6 registers;*;*;* clr RMAP for normal operation;*anl SYSCON0,#0xFE ; switch to standard SFRsmov CCU6_PAGE,#0x00CV_SectorA:djnz guc_sector,CV_SectorBmov CCU6_CC60RH,r2mov CCU6_CC60RL,r3 ; CC60CR = V_TBmov CCU6_CC61RL,amov CCU6_CC61RH,r4 ; CC61CR = V_TCmov CCU6_CC62RH,r0mov CCU6_CC62RL,r1 ; CC60CR = V_TAmov CCU6_PAGE,#0x00mov a,#AD_TRIGGER_CM_L ; A = AD_TRIGGER_CM_Ladd a,r7 ; A = AD_TRIGGER_CM_L + T2/2_L mov CCU6_CC63RL,amov a,#AD_TRIGGER_CM_H ; A = AD_TRIGGER_CM_Haddc a,r6 ; A = AD_TRIGGER_CM_H + T2/2_Hmov CCU6_PAGE,#0x01mov a,#AD_TRIGGER_PM_L ; A = AD_TRIGGER_PM_Ladd a,r5 ; A = AD_TRIGGER_PM_L + T1/2_L mov CCU6_T13PRL,amov a,#AD_TRIGGER_PM_H ; A = AD_TRIGGER_PM_Haddc a,b ; A = AD_TRIGGER_PM_H + T1/2_H mov CCU6_T13PRH,aljmp compare_values_endCV_SectorB:djnz guc_sector,CV_SectorCmov CCU6_CC60RL,amov CCU6_CC60RH,r4 ; CC60CR = V_TCmov CCU6_CC61RH,r2mov CCU6_CC61RL,r3 ; CC61CR = V_TBmov CCU6_CC62RH,r0mov CCU6_CC62RL,r1 ; CC60CR = V_TAmov CCU6_PAGE,#0x00mov a,#AD_TRIGGER_CM_L ; A = AD_TRIGGER_CM_Ladd a,r5 ; A = AD_TRIGGER_CM_L + T1/2_L mov CCU6_CC63RL,amov a,#AD_TRIGGER_CM_H ; A = AD_TRIGGER_CM_Haddc a,b ; A = AD_TRIGGER_CM_H + T1/2_H mov CCU6_CC63RH,amov CCU6_PAGE,#0x01mov a,#AD_TRIGGER_PM_L ; A = AD_TRIGGER_PM_Ladd a,r7 ; A = AD_TRIGGER_PM_L + T2/2_Lmov a,#AD_TRIGGER_PM_H ; A = AD_TRIGGER_PM_Haddc a,r6 ; A = AD_TRIGGER_PM_H + T2/2_H mov CCU6_T13PRH,aljmp compare_values_endCV_SectorC:djnz guc_sector,CV_SectorDmov CCU6_CC60RH,r0mov CCU6_CC60RL,r1 ; CC60CR = V_TAmov CCU6_CC61RH,r2mov CCU6_CC61RL,r3 ; CC60CR = V_TBmov CCU6_CC62RL,amov CCU6_CC62RH,r4 ; CC61CR = V_TCmov CCU6_PAGE,#0x00mov a,#AD_TRIGGER_CM_L ; A = AD_TRIGGER_CM_Ladd a,r7 ; A = AD_TRIGGER_CM_L + T2/2_L mov CCU6_CC63RL,amov a,#AD_TRIGGER_CM_H ; A = AD_TRIGGER_CM_Haddc a,r6 ; A = AD_TRIGGER_CM_H + T2/2_H mov CCU6_CC63RH,amov CCU6_PAGE,#0x01mov a,#AD_TRIGGER_PM_L ; A = AD_TRIGGER_PM_Ladd a,r5 ; A = AD_TRIGGER_PM_L + T1/2_L mov CCU6_T13PRL,amov a,#AD_TRIGGER_PM_H ; A = AD_TRIGGER_PM_Haddc a,b ; A = AD_TRIGGER_PM_H + T1/2_H mov CCU6_T13PRH,a。
高速永磁同步电动机无速度传感器矢量控制

型离散控制问题进行 了深 入的分析 。文献 [4 分 1]
析了电 机参数误差对永磁同 步电机性能的 影响。文 菘
献 [5 2 ] 别 利 用 模 型 参 考 自适 应 、 波 变 换 和 1— 0 分 小 ;
和高频振动对 机械传感 器精度 造成较大影响 j 。 无速度传感器不但能准确估计转子速度 和转 子位 移, 而且能避免机械式传感器对高速电机转子动力 学 性 能的影 响 。因此无 速度 传感 器对 高速 和超高 速 电机而言具有重要的意义。 目前 , 无传感器 P S M M矢量控制中转子位置和 速度的估计方法有 多种。文献 [ ] 1 采用 一种基 于
如图2 所示, ∞会迫使 i 当 与i 趋于 趋近
致 时 , 逐渐 逼近
。
J
吼
一
R一 一
令:
划
表示 :
一
() 2
图2 M R A S估计转子速度和位置
2高速永磁 同步 电动机的参数计算
r
s
L
一
圈
r
() 3
高速永磁同步电动机的额 定转速为 6 0 / 000r mn 为了防止永磁体在巨大 的离心力作用下破坏 , i,
即:
RL
掌: 。一 A dt
一了一 L
s
() 5
高 速永磁 同步 电动机 在 6 0 / n时 的空载 000rmi
电压 E 如图 4所示 。由式 ( ) 。 9 可得其转子磁链约
r 尺L
一
为 0 0 4 Wb .7
,
式 中 : = A
W =J( )i, ∞一 J=
转速估计 :
1极磁步速估模 一 隐永同的度计型¨ 一一 d出 ¨
《异步电机无速度传感器矢量控制系统的设计与实现》

《异步电机无速度传感器矢量控制系统的设计与实现》一、引言异步电机在工业应用中占有重要地位,其运行性能的优劣直接影响到生产效率和产品质量。
随着现代控制理论的发展,无速度传感器矢量控制系统因其高精度、高效率的特性被广泛应用于异步电机控制。
本文将探讨异步电机无速度传感器矢量控制系统的设计与实现,旨在为相关领域的研究与应用提供参考。
二、系统设计1. 系统架构设计异步电机无速度传感器矢量控制系统主要由控制器、驱动器、逆变器、异步电机等部分组成。
其中,控制器是整个系统的核心,负责实现矢量控制算法和无速度传感器技术。
驱动器接收控制器的指令,将电压和电流信号输出给逆变器。
逆变器根据驱动器的指令,将直流电源转换为交流电源,驱动异步电机运行。
2. 矢量控制算法设计矢量控制算法是实现异步电机高效运行的关键。
本系统采用无速度传感器矢量控制算法,通过检测电机的电压和电流信号,估算电机的转速和转子位置,实现电机的精确控制。
该算法包括磁场定向控制(MTPA)和直接自控制(DTC)两种方法,具有较高的动态性能和稳态性能。
3. 无速度传感器技术设计无速度传感器技术是实现异步电机无机械传感器运行的关键技术。
本系统采用基于电流模型和电压模型的无速度传感器技术,通过检测电机的电流和电压信号,估算电机的转速和转子位置。
该方法具有较高的估算精度和可靠性,降低了系统的成本和复杂度。
三、系统实现1. 硬件实现硬件实现主要包括控制器、驱动器、逆变器等部分的选型和设计。
控制器采用高性能数字信号处理器(DSP),具有高速运算和强大的控制能力。
驱动器采用高精度、低噪声的功率模块,保证电机的稳定运行。
逆变器采用智能功率模块(IPM),具有较高的效率和可靠性。
2. 软件实现软件实现主要包括矢量控制算法和无速度传感器技术的编程实现。
本系统采用C语言编写程序,实现矢量控制算法和无速度传感器技术的实时运算和控制。
同时,为了方便调试和维护,系统还提供了友好的人机交互界面。
《永磁同步电机全速度范围无位置传感器控制技术的研究与实现》范文

《永磁同步电机全速度范围无位置传感器控制技术的研究与实现》篇一一、引言永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)是一种重要的电动传动系统部件,因其具有高效率、高功率密度和良好的调速性能等优点,被广泛应用于工业、汽车、航空航天等领域。
然而,传统的PMSM控制系统通常需要使用位置传感器来获取电机的位置信息,这不仅增加了系统的复杂性和成本,还可能降低系统的可靠性和稳定性。
因此,无位置传感器控制技术成为了近年来研究的热点。
本文旨在研究并实现永磁同步电机全速度范围无位置传感器控制技术,以提高电机控制系统的性能和可靠性。
二、永磁同步电机基本原理永磁同步电机的基本原理是利用永磁体产生的磁场与定子电流产生的磁场相互作用,产生转矩,使电机转动。
PMSM的转子不需要外部供电,具有结构简单、运行可靠等优点。
然而,要实现电机的精确控制,必须准确获取电机的位置和速度信息。
传统的PMSM控制系统通过位置传感器来获取这些信息,但无位置传感器控制技术则通过电机内部的电气信号来估算电机的位置和速度。
三、无位置传感器控制技术无位置传感器控制技术主要通过电机内部的电气信号来估算电机的位置和速度。
常见的无位置传感器控制技术包括基于反电动势法、模型参考自适应法、滑模观测器法等。
本文采用基于反电动势法的无位置传感器控制技术,通过检测电机的反电动势来估算电机的位置和速度。
四、全速度范围无位置传感器控制策略为了实现永磁同步电机全速度范围的无位置传感器控制,需要采用合适的控制策略。
本文采用基于矢量控制的策略,通过实时调整电机的电压和电流来控制电机的位置和速度。
在低速阶段,采用初始位置估算和误差补偿技术来提高位置的估算精度;在高速阶段,则采用反电动势法来准确估算电机的位置和速度。
此外,还采用了自适应控制技术来应对电机参数变化和外部干扰的影响。
五、实验与结果分析为了验证本文所提出的无位置传感器控制技术的有效性,进行了实验验证。
永磁同步电机无传感器控制技术

哈尔滨工业大学,电气工程系Departme nt of Electrical Engin eeri ngHarbin In stitute of Tech no logy电力电子与电力传动专题课报告报告题目:永磁同步电机无传感器控制技术哈尔滨工业大学电气工程系姓名:沈召源___________学号:14S0060402016年1月目录1.1研究背景 (1)1.2国内外研究现状 (1)1.3系统模型 (3)1.4控制方法设计 ....................................................... 5 ........1.5系统仿真 ........................................................... 9 ...............参考文献 1.6结论 ............................................................. 1.0 ......1.11.1研究背景永磁同步电机具有体积小、惯量小、重量轻等优点,在各领域的应用越来越广泛。
目前在永磁同步电机的各种控制算法中,使用最多的是矢量控制和直接转矩控制,而这两种控制方式都需要转子位置,但转子位置传感器的采用限制了系统使用范围。
永磁同步电机控制系统大多采用测速发电机或光电码盘等传感器检测速度和位置的反馈量,这不但提高了驱动装置的造价,而且增加了电机与控制系统之间的连接线路和接口电路,使系统易于受环境干扰、可靠性降低。
由于永磁同步电机无传感器控制系统具有控制精度高、安装、维护方便、可靠性强等一系列优点,成为近年来研究的一个热点。
1.2国内外研究现状无传感器永磁同步电机是在电机转子和机座不安装电磁或光电传感器的情况下,利用电机绕组中的有关电信号,通过直接计算、参数辨识、状态估计、间接测量等手段,从定子边较易测量的量如定子电压、定子电流中提取出与速度、位置有关的量,利用这些检测到的量和电机的数学模型推测出电机转子的位置和转速,取代机械传感器,实现电机闭环控制。
无位置传感器永磁同步电动机矢量控制系统综述

1基 于基波励磁和反 电动势的估测方法
这 些 方法 主 要 是基 于 电 动机 的电流 电压模 型 , 通过基 本 的电磁关 系或 反 电动势来 估测 转子 位置及
转速 , 动态性能较好 , 最低转 速可达到每分钟几 十 转, 低于此转速范围时由于电信号受噪声干扰 , 定子 电阻 随温升 变化 , 电流 反馈 环 节 的直 流 补偿 及 漂 移 等原因, 估测精度会大大下降。 11 . 基于永磁同步电动机电磁关系的估算方法 永磁 同步电动机的电流、 电压信号 中包含有 电 动机的转速及转子位置信息 , 我们可以通过检测电
模型参考 自 适应方法 中使用弱磁控制技术和解耦控 制技术改善 了控制系统低速段和高速段 的估计 精 争 并 舸¨ 厂 L — 划
度, 扩大 了 电动机 的调速 范 围。 13扩展 卡尔 曼滤波 器 .
型 扩展卡尔曼滤波器( K ) E F 是线性系统状态估计 圈
●
基于永磁同步电动机电磁关系的估算方法仅依 赖于电动机的基波方程 , 计算简单 , 易于工程实现, 但 这些 方法 大多工 作 在 开 环模 式 下 , 电机 受 到 噪 在 声干扰 , 由于温升 、 磁饱和效应等导致的电动机参数
为参考模 型 , 以电流模 型为 可调模 型 , 据 Ppv 根 oo 超
际值非常接近 , 由估算值构成的闭环系统在宽调速
范 围 内具 有 良好 的特性 。但扩展 卡尔 曼滤 波器 的算
法复杂 , 需要高阶矩阵求逆运算 , 计算量相当大。而
且这 种方 法是建 立在 对系 统误差 和测 量噪 声 的统 计
C N u n - u , ENG M i WE i n - o g HE G a g h i Z n, IL a g h n
基于改进的滑模观测器无传感器永磁同步电动机矢量控制

了无传感器永磁同步电动机矢量控制仿真模 型 , 并搭建 了实验平 台进行 实验验证 , 仿真 及实验结 果表 明改进 的滑 模观测器提高 了估算精度和系统控制性能 。 关键词 : 永磁 同步 电机 ; 滑模 观测器 ; 无传感器 ; 矢量 控制 ; 饱和 函数 ; 反 电动势观测器
d u c e d t o t h e o b s e ve r r t o o v e r c o me c h a t t e r i n g a n d t h e o b s e ve r r o f b a c k e l e c t r o mo t i v e f o r c e wa s i n s t e a d o f l o w— p a s s i f l t e r i n t r a d i t i o n a l me t h o d . T h e L y a p u n o v t h e o r e m w a s u s e d t o p r o v e t h e c o n v e r g e n c e o f t h e o b s e ve r r . T h e s i mu l a t i o n mo d e l o f s e n — s o r l e s s v e c t o r c o n t r o l o f P MS M w a s e s t a b l i s h e d i n MAT L A B, a n d t h e c o r r e s p o n d i n g e x p e r i me n t p l a t f o r m b a s e d DS P w a s s e t u p . T h e s i mu l a t i o n a n d e x p e r i me n t a l r e s u l t s s h o w t h a t t h e i mp r o v e d s l i d i n g mo d e o b s e ve r r i s a b l e t o i mp r o v e t h e e s t i ma t i o n
永磁同步电机无传感器矢量控制系统设计

- II -
哈尔滨工业大学工学硕士学位论文
目录
摘 要...........................................................................................................................I Abstract ....................................................................................................................... II
Two estimation methods are simulated and analyzed in Matlab/Simulink. According to the merits and demerits of two methods, a combined estimation is proposed. The simulation result proves that the combined method has good dynamic and steady performance at the same time.
关键词 永磁同步电机;无位置传感器;空间矢量脉宽调制;数字信号处理 器
-I-
哈尔滨工业大学工学硕士学位论文
Abstract
With the appearance of the new power electron apparatus and microprocessor, and the development of the modern control theory and computer technology, the control system of AC drives has been widely used in industry. Permanent magnet synchronous motor (PMSM), due to the high power efficiency and density, low rotor loss, has become the mainstream of AC drives. The installment of sensor will bring a range of issues such as high cost, large volume and easily disturbed. Therefore, sensorless system has become a research focus. Based upon the depth study of PMSM and vector control theory, a method of sensorless vector control system of PMSM is proposed in this paper.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、PG卡是变频器控制带编码器电机时的选件.构成闭环控制.主要是实现高精度的带编码器(PG)矢量闭环控制.PG卡和带编码器的电机是变频器实现最高的控制精度的方式.可实现电机速度控制和位置控制(定位).
2、变频器的无PG矢量控制怎么接线?
无PG矢量控制接线与其它的变频器一样接线。
(与PG矢量控制区别就是没有电机编码器的接线了。
)
主要是控制方式选择PG矢量控制,并且要进行电机的自学习,以供变频器采集电机的必要参数。
3、变频器中说的有PG矢量控制中的PG指的是什么啊?
PG:pulse Quantizer 就是脉冲编码器
有PG矢量控制,就是有编码器的矢量控制,也就是闭环矢量控制
4、变频器的VF控制和无PG 矢量控制什么区别怎么使用
区别在于无PG反馈矢量控制机械硬度较好,控制精度和调速范围更好些,但要求较多.V/F控制适用于大多数控制.
5、无PG矢量控制一般用在什么样的负载上呢?速度和转矩与VF控制有什么区别
回答
无PG反馈的矢量变频器通过变频器内部的检测电流测出三相输出电压和电流值矢量,通过变换电路得到两个相互垂直的电流信号,再用这两个信号通过运算调节器控制逆变电路的输出。
整个过程全部在变频器内完成,工程上称为无PG反馈的矢量变频器。
3.变频器矢量控制功能的设置只设置“用”或“不用”即可。
4.设置矢量控制功能时应符合的条件(1) 变频器只能连接一台电动机;(2) 电动机应使用变频器厂家的原配电动机,若不是原配电动机,应先进行自整定操作;(3) 所配备电动机的容量比应配备电动机的容量最多小一个等级;
(4) 变频器与电动机之间的电缆长度应不大于50m。
(5) 变频器与电动机之间接有电抗器时,应使用变频器的自整定功能改写数据。
在需要较高精度的控制场合下,可选用无PG反馈的控制,比如数控车床:作为主轴电动机的驱动系统,可以根据切削需要改变主轴的转速,随着工件直径的变化,主轴转速亦随着变化,保持刀具的恒线速切削。
还可以由数控系统控制主轴运行、停止,正、反转以及与进刀系统保持严格的传动比关系,完成工件的自动加工,从而大大提高工作效率和工件的成品率。
一般可选用普通U∕f控制变频器,为了提高控制精度选用矢量控制变频器效果更好。
V/F控制方式在低速下输出机械转矩有所下降(如需要可设置转矩补偿,升高输出电压),后者低速高速转矩都一样;在转速方面都是一样的,只是对V/F控制来说,当负载转矩波动时会出现转速的变化.。