This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PMSM FOC的速度的估算问题



#define SE_MACRO(v) \


if ((v.EstimatedTheta < SE_DIFF_MAX_LIMIT)&(v.EstimatedTheta > SE_DIFF_MIN_LIMIT)) 
Temp1 = _IQmpy(v.K1,(v.EstimatedTheta - v.OldEstimatedTheta)); 
/* Q21 = Q21*(GLOBAL_Q-GLOBAL_Q) */ 
else Temp1 = _IQtoIQ21(v.EstimatedSpeed); 

/* Low-pass filter */ 
/* Q21 = GLOBAL_Q*Q21 + GLOBAL_Q*Q21 */ 
Temp1 = _IQmpy(v.K2,_IQtoIQ21(v.EstimatedSpeed))+_IQmpy(v.K3,Temp1); 

/* Saturate the output */ 
Temp1=_IQsat(Temp1,_IQ21(1),_IQ21(-1)); 
v.EstimatedSpeed = _IQ21toIQ(Temp1); 

/* Update the electrical angle */ 
v.OldEstimatedTheta = v.EstimatedTheta; 

/* 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);


#endif // __SPEED_EST_H__

文档:speed_est

(1)k1 = 1 / (fb T ),是什么意思?

(2)BaseRpm:如果我不知道BaseRpm的值,或者电机实际可以转BaseRpm = 1500RPM,

          但是我只给了BaseRpm = 1000RPM,那么估算出的速度不就有问题吗?

  • 你好,

    你所问的是针对哪款芯片的哪个例程?

  • 你好。

    (1)K1是一个计算转速时的系数。(theta(k)-theta(k-1)/T算出来就是频率值(有名值),这个值除以fb(基值),得到的转速we就是标么值。

    (2)BasePRM并没有用于电机控制的环路运算,速度环只用到we(标么值)。如你所说,如果给的BaseRPM是不正确的,那么BaseRpm*we算出来的实际转速肯定不正确。如果你的其他计算用需要用到RPM的转速值,请确保BASERPM正确。

  • 感谢和 的答复,针对 的内容,

    今天和我们公司的工程师沟通发现如下内容,实际的角速度:

    Omega = 2 *π *(theta(k)-theta(k-1)/T = 2*π*f

    所以:f  = (theta(k)-theta(k-1)/T ,f是电气频率

    f / fb = RealRPM / RPM_BASE = (theta(k)-theta(k-1) / (T *fb),fb是给定的基准速度RPM_BASE 的电气频率

    所以:

     RealRPM = { (theta(k)-theta(k-1) / (T *fb) } *RPM_BASE 

    所以RPM_BASE 不需要确定其正确值


  • 你好。

    你上面的列的计算过程都没问题。

    RPM_BASE不参与速度环控制,所以其正确与否对于控制本身没有关系。

    但是,RPM_BASE用来计算电机转速以RPM为单位时的量RealRPM,这个量可以用于显示或监测(因为这个量看起来更直观)。如果有类似的需要使用这个变量时,那么RPM_BASE最好设置一个正确的值。

    RPM_BASE与fb之间有一个与电机极对数相关的一个关系式。