看不懂电机库这个static inline void SVGEN_run(SVGEN_Handle handle, const MATH_Vec2 *pVab_V, MATH_Vec3 *pVabc_pu)函数的原理,有没有相关资料可以分享参考一下,谢谢~
该函数位于 C2000Ware_MotorControl_SDK_4_00_00_00\libraries\transforms\svgen\include\svgen.h
//*****************************************************************************
//
//! \brief Implements a SVM that saturates at the level of MaxModulation.
//!
//! \param[in] handle The space vector generator (SVGEN) handle
//!
//! \param[in] pVab_V The pointer to the alpha/beta voltages, V
//!
//! \param[in] pVabc_pu The pointer to the three phase voltages, pu
//!
//! \return None
//
//*****************************************************************************
static inline void
SVGEN_run(SVGEN_Handle handle, const MATH_Vec2 *pVab_V, MATH_Vec3 *pVabc_pu)
{
float32_t Vmax_pu = 0,Vmin_pu = 0,Vcom_pu;
float32_t oneOverDcBus_invV = SVGEN_getOneOverDcBus_invV(handle);
SVM_Mode_e svmMode = SVGEN_getMode(handle);
float32_t Valpha_pu = pVab_V->value[0] * oneOverDcBus_invV;
float32_t Vbeta_pu = pVab_V->value[1] * oneOverDcBus_invV;
float32_t Va_tmp = (float32_t)(0.5f) * Valpha_pu;
float32_t Vb_tmp = MATH_SQRTTHREE_OVER_TWO * Vbeta_pu;
float32_t Va_pu = Valpha_pu;
//
// -0.5*Valpha + sqrt(3)/2 * Vbeta
//
float32_t Vb_pu = -Va_tmp + Vb_tmp;
//
// -0.5*Valpha - sqrt(3)/2 * Vbeta
float32_t Vc_pu = -Va_tmp - Vb_tmp;
//
// Find Vmax and Vmin
//
if(Va_pu > Vb_pu)
{
Vmax_pu = Va_pu;
Vmin_pu = Vb_pu;
}
else
{
Vmax_pu = Vb_pu;
Vmin_pu = Va_pu;
}
if(Vc_pu > Vmax_pu)
{
Vmax_pu = Vc_pu;
}
else if(Vc_pu < Vmin_pu)
{
Vmin_pu = Vc_pu;
}
// Compute Vcom = 0.5*(Vmax+Vmin)
Vcom_pu = 0.5f * (Vmax_pu + Vmin_pu);
if(svmMode == SVM_COM_C)
{
// Subtract common-mode term to achieve SV modulation
pVabc_pu->value[0] = (Va_pu - Vcom_pu);
pVabc_pu->value[1] = (Vb_pu - Vcom_pu);
pVabc_pu->value[2] = (Vc_pu - Vcom_pu);
}
else if(svmMode == SVM_MIN_C)
{
pVabc_pu->value[0] = (Va_pu - Vmin_pu) - 0.5f;
pVabc_pu->value[1] = (Vb_pu - Vmin_pu) - 0.5f;
pVabc_pu->value[2] = (Vc_pu - Vmin_pu) - 0.5f;
}
else if(svmMode == SVM_MAX_C)
{
pVabc_pu->value[0] = (Va_pu - Vmax_pu) + 0.5f;
pVabc_pu->value[1] = (Vb_pu - Vmax_pu) + 0.5f;
pVabc_pu->value[2] = (Vc_pu - Vmax_pu) + 0.5f;
}
return;
} // end of SVGEN_run() function
