📄 aci_se.c
字号:
/*=====================================================================================
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -