速度滤波问题(SPEED_FR_MACRO(v) )
我使用的是TMDSHVMTRPFCKIT开发板,在测算速度比时候用了低通滤波,如下:
/* Low-pass filter*/ \
/* Q21 = GLOBAL_Q*Q21 + GLOBAL_Q*Q21*/ \
v.Tmp = _IQmpy(v.K2,_IQtoIQ21(v.Speed))+_IQmpy(v.K3,v.Tmp);
没看懂这个滤波器的理论依据是什么(我试了巴特沃斯变换,不对),求解释
完整代码如下:
#define BASE_FREQ 100 // Base electrical frequency (Hz)
float32 T = 0.001/ISR_FREQUENCY; // Samping period (sec), see parameter.h
// Initialize the Speed module for QEP based speed calculation
speed1.K1 = _IQ21(1/(BASE_FREQ*T));
speed1.K2 = _IQ(1/(1+T*2*PI*5)); // Low-pass cut-off frequency
speed1.K3 = _IQ(1)-speed1.K2;
speed1.BaseRpm = 120*(BASE_FREQ/POLES);
#define SPEED_FR_MACRO(v) \
/* Differentiator*/ \
/* Synchronous speed computation */ \
if ((v.ElecTheta < _IQ(0.9))&(v.ElecTheta > _IQ(0.1))) \
/* Q21 = Q21*(GLOBAL_Q-GLOBAL_Q)*/ \
v.Tmp = _IQmpy(v.K1,(v.ElecTheta - v.OldElecTheta)); \
else v.Tmp = _IQtoIQ21(v.Speed); \
/* Low-pass filter*/ \
/* Q21 = GLOBAL_Q*Q21 + GLOBAL_Q*Q21*/ \
v.Tmp = _IQmpy(v.K2,_IQtoIQ21(v.Speed))+_IQmpy(v.K3,v.Tmp); \
/* Saturate the output */ \
v.Tmp=_IQsat(v.Tmp,_IQ21(1),_IQ21(-1)); \
v.Speed = _IQ21toIQ(v.Tmp); \
/* Update the electrical angle */ \
v.OldElecTheta = v.ElecTheta; \
/* Change motor speed from pu value to rpm value (GLOBAL_Q -> Q0)*/ \
/* Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q*/ \
v.SpeedRpm = _IQmpy(v.BaseRpm,v.Speed);
#endif // __SPEED_FR_H__
压根就看不懂这个滤波器怎么来的,如果可以的话,请告诉我用到的知识点(比如通过什么方式计算出来的滤波器)
请问速度滤波是变换的
为了减小纯微分运算所造成的放大噪声,进行一阶低通滤波, v.Tmp = _IQmpy(v.K2,_IQtoIQ21(v.Speed))+_IQmpy(v.K3,v.Tmp); 这个就是低通滤波器的离散表达形式,具体推导书上有也可百度之
您好,请问speed1.K1 = _IQ21(1/(BASE_FREQ*T))是什么意思,Temp1 = _IQmpy(v.K1,(v.EstimatedTheta - v.OldEstimatedTheta)); 这样得到的是角速度还是机械转速,非常感谢!
大哥们,给个解释啊,给个知识点也行,小弟困惑死了。