香主:你好!我是ST代理,请问STM32F103 2.0版的带编码异步电机库,调试中需要注意哪些?
问题;目前,我使用该异步电机库,使用手动转动电机,发现hRot_Freq_Hz值很小,怎么进行速度闭环控制?
代码如下:
void IFOC_CalcFluxTorqueRef(void)
{
s32 wRotFlxSlipFreq;
s16 hTempA;
s16 hTempB;
s16 hwe; //stator generated frequency (pulses/pwm period)
s16 hTorqueRefMax;
//////////////////////////////////////////////////////////
Ceshi_hRot_Freq_Hz = hRot_Freq_Hz;
/////////////////////////////////////////////////////////
hTempA = hSpeed_Reference;
hTempB = PID_Regulator(hTempA, hRot_Freq_Hz, &PID_Speed_InitStructure);
////////////////////////////////////////////////////////////////////////
CeShi_SpeedPIOut = hTempB;
CeShi_hFlux_Reference =hFlux_Reference;
//////////////////////////////////////////////////////////////////////////////
div_q31_q15_q15(K_RAD_HZ_HI,K_RAD_HZ_LOW,hFlux_Reference,&hTempA);
mul_q15_q15_q31(hTempB,hTempA,&wRotFlxSlipFreq);
hwe = (s16)(wRotFlxSlipFreq/65536 + hRot_Freq_Hz); //u16 to have absolute value of we
hwe = (hwe < 0 ? -hwe : hwe);
if (hwe > RATED_FREQ)
{
u8 bspeed_index;
s32 wtempindex;
if (hwe > MAX_FREQ)
{
hwe = MAX_FREQ;
}
wtempindex = (hwe - RATED_FREQ) * 255;
bspeed_index = (u8)(wtempindex / MAX_FREQ_INCR);
hFlux_Reference = hflux_reference[bspeed_index];
hTorqueRefMax = htorque_reference[bspeed_index];
}
else
{
hFlux_Reference = hflux_reference[0];
hTorqueRefMax = htorque_reference[0];
}
if (hTempB > hTorqueRefMax)
{
hTorque_Reference = hTorqueRefMax;
}
else if ( hTempB < -hTorqueRefMax)
{
hTorque_Reference = -hTorqueRefMax;
}
else
{
hTorque_Reference = hTempB;
}
}
该函数中,使用手转动hRot_Freq_Hz值范围大概在1~15之内,而hTempB = PID_Regulator(hTempA, hRot_Freq_Hz, &PID_Speed_InitStructure);中得到的hTempB 很大;
给定转子速度hTempA很小;反馈hTempB 值很大,直到上限值;
从代码上看,hTempA是给定转子目标转速,实际是不是?如果是hTempA怎么会这么小?
|