请问一下我做永磁机无速度控制时,程序中估计的速度经过低通滤波之后就始终跟不上面板给定的速度,例如给定400rpm,电机只能转到300rpm,而且转速上升得明显慢了。但是程序中改为编码器测的实际速度时就跟得上。请指教谢谢!
HeiHei:
你好,请问你是用的什么例程调试的
一般来说,低通滤波会有延迟的,而且你的滤波系数越大,会导致延迟越久。你检查下比如在跑300转的时候 经过滤波,稳定以后,滤波输出是多少。
请问一下我做永磁机无速度控制时,程序中估计的速度经过低通滤波之后就始终跟不上面板给定的速度,例如给定400rpm,电机只能转到300rpm,而且转速上升得明显慢了。但是程序中改为编码器测的实际速度时就跟得上。请指教谢谢!
kun chen7:
回复 HeiHei:
谢谢,例程来自:
File name: SPEED_EST_LPF.C (IQ version)
void speed_est_LPF_calc(SPEED_ESTIMATION_LPF *v){ _iq Temp1; Temp1 = _IQtoIQ21(v->new_EstimatedSpeed);// Low-pass filter,对估算速度低通滤波 // Q21 = GLOBAL_Q*Q21 + GLOBAL_Q*Q21 Temp1 = _IQmpy(v->K2,_IQtoIQ21(v->EstimatedSpeed))+_IQmpy(v->K3,Temp1); if (Temp1>_IQ21(2)) v->EstimatedSpeed = _IQ(2); else if (Temp1<_IQ21(-2)) v->EstimatedSpeed = _IQ(-2); else v->EstimatedSpeed = _IQ21toIQ(Temp1);
// Change motor speed from pu value to rpm value (GLOBAL_Q -> Q0)// Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q v->EstimatedSpeedRpm = _IQmpy(v->BaseRpm,v->EstimatedSpeed);// wrFbk = WrfdFlt*(motPoles>>1); }
其中:
speed_LPF.K2 =_IQdiv(_IQ(1),_IQ(1)+(_IQ(2*PI)/(P.carryF/2))*P.SpeedLpf1/10); speed_LPF.K3 = _IQ(1)-speed_LPF.K2; speed_LPF.BaseRpm = 3000;
//P.carryF是载波频率
//P.SpeedLpf1是用于反馈和积分计算角度的校正速度计算滤波截止频率
请问如果想要减小延迟,是要调节P.SpeedLpf1吗还是有别的方法?