aci_se.c

来自「异步电机矢量控制c源程序」· C语言 代码 · 共 60 行

C
60
字号
/*=====================================================================================
 File name:        ACI_SE.C  (IQ version)                  
                    
 Originator:	Digital Control Systems Group
			Texas Instruments

 Description:  Open-loop Speed Estimator of Induction Motor                   

=====================================================================================
 History:
-------------------------------------------------------------------------------------
 04-15-2005	Version 3.20
-------------------------------------------------------------------------------------*/

#include "IQmathLib.h"         // Include header for IQmath library
// Don't forget to set a proper GLOBAL_Q in "IQmathLib.h" file
#include "dmctype.h"
#include "aci_se.h"

void aci_se_calc(ACISE *v)
{	

	_iq WSlip, WSyn;
					
// Slip computation
   v->SquaredPsi = _IQmpy(v->PsiDrS,v->PsiDrS)+_IQmpy(v->PsiQrS,v->PsiQrS);

   WSlip = _IQmpy(v->K1,(_IQmpy(v->PsiDrS,v->IQsS) - _IQmpy(v->PsiQrS,v->IDsS)));
   WSlip = _IQdiv(WSlip,v->SquaredPsi);

// Synchronous speed computation
   if ((v->ThetaFlux < DIFF_MAX_LIMIT)&(v->ThetaFlux > DIFF_MIN_LIMIT))
		// Q21 = Q21*(GLOBAL_Q-GLOBAL_Q)
   		WSyn = _IQmpy(v->K2,(v->ThetaFlux - v->OldThetaFlux));
   else  WSyn = v->WPsi;

// low-pass filter
   // Q21 = GLOBAL_Q*Q21 + GLOBAL_Q*Q21
   v->WPsi = _IQmpy(v->K3,v->WPsi) + _IQmpy(v->K4,WSyn);
    
   v->OldThetaFlux = v->ThetaFlux;

   // Q21 = Q21 - GLOBAL_Q
   v->WrHat = v->WPsi - _IQtoIQ21(WSlip);

   // Limit the estimated speed between -1 and 1 per-unit
   if (v->WrHat>_IQ21(1))
     v->WrHat = _IQ(1);
   else if (v->WrHat<_IQ21(-1))
     v->WrHat = _IQ(-1);      
   else
     v->WrHat = _IQ21toIQ(v->WrHat);

// Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q 
   v->WrHatRpm = _IQmpy(v->BaseRpm,v->WrHat);
   
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?