| 香主:你好!我是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怎么会这么小?
 |