我使用的是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__
ya song:
压根就看不懂这个滤波器怎么来的,如果可以的话,请告诉我用到的知识点(比如通过什么方式计算出来的滤波器)
user4254532:
请问速度滤波是变换的
Fred zhu:
为了减小纯微分运算所造成的放大噪声,进行一阶低通滤波, v.Tmp = _IQmpy(v.K2,_IQtoIQ21(v.Speed))+_IQmpy(v.K3,v.Tmp); 这个就是低通滤波器的离散表达形式,具体推导书上有也可百度之
xu zhang11:
回复 Fred zhu:
您好,请问speed1.K1 = _IQ21(1/(BASE_FREQ*T))是什么意思,Temp1 = _IQmpy(v.K1,(v.EstimatedTheta – v.OldEstimatedTheta)); 这样得到的是角速度还是机械转速,非常感谢!!!
dingzhiyong:
大哥们,给个解释啊,给个知识点也行,小弟困惑死了。
wentao zhang:
回复 dingzhiyong:
blog.sina.com.cn/…/1219574564,上面有解释
user5229665:
回复 xu zhang11:
v.EstimatedTheta – v.OldEstimatedTheta:电角度的增量 2*(v.EstimatedTheta – v.OldEstimatedTheta)/P: 机械角度的增量 (p为极数) 2*(v.EstimatedTheta – v.OldEstimatedTheta)/PT:机械角速度 (T为采样周期),单位r/s 120*(v.EstimatedTheta – v.OldEstimatedTheta)/PT: 机械角速度 ,单位RPM 速度基准:120*BaseFreq/p 单位RPM {120*(v.EstimatedTheta – v.OldEstimatedTheta)/PT}/(120*BaseFreq/p)=(v.EstimatedTheta – v.OldEstimatedTheta)/(BaseFreq*T) =IQmpy(v.K1,(v.EstimatedTheta – v.OldEstimatedTheta)) 理解了上面,不难看出,得到的是机械转速的标幺值,当然之后还要进行数字滤波