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.

inline _iq CTRL_angleDelayComp(CTRL_Handle handle, const _iq angle_pu)

   if(EST_getState(obj->estHandle) >= EST_State_MotorIdentified)
            {
              // run the online controller
              CTRL_runOnLine_User(handle,pAdcData,pPwmData);
            }
          else
            {
              // run the online controller
              CTRL_runOnLine(handle,pAdcData,pPwmData);
            }

这两个函数  CTRL_runOnLine_User(handle,pAdcData,pPwmData);    CTRL_runOnLine(handle,pAdcData,pPwmData); 主要区别在什么地方?

inline _iq CTRL_angleDelayComp(CTRL_Handle handle, const _iq angle_pu)
{
  CTRL_Obj *obj = (CTRL_Obj *)handle;
  _iq angleDelta_pu = _IQmpy(EST_getFm_pu(obj->estHandle),_IQ(USER_IQ_FULL_SCALE_FREQ_Hz/(USER_PWM_FREQ_kHz*1000.0)));
  _iq angleUncomp_pu = angle_pu;
  _iq angleCompFactor = _IQ(1.0 + (float_t)USER_NUM_PWM_TICKS_PER_ISR_TICK * (float_t)USER_NUM_ISR_TICKS_PER_CTRL_TICK * ((float_t)USER_NUM_CTRL_TICKS_PER_EST_TICK - 0.5));
  _iq angleDeltaComp_pu = _IQmpy(angleDelta_pu, angleCompFactor);
  uint32_t angleMask = ((uint32_t)0xFFFFFFFF >> (32 - GLOBAL_Q));
  _iq angleTmp_pu;
  _iq angleComp_pu;

  // increment the angle
  angleTmp_pu = angleUncomp_pu + angleDeltaComp_pu;

  // mask the angle for wrap around
  // note: must account for the sign of the angle
  angleComp_pu = _IQabs(angleTmp_pu) & angleMask;

  // account for sign
  if(angleTmp_pu < 0)
    {
      angleComp_pu = -angleComp_pu;
    }

  return(angleComp_pu);
}

这个角度延时计算 原理 是什么?

请老师指导

 

 

  • 电机识别阶段使用 CTRL_runOnLine(handle,pAdcData,pPwmData),正常运行时CTRL_runOnLine_User(handle,pAdcData,pPwmData),因此你要修改的话,修改CTRL_runOnLine_User(handle,pAdcData,pPwmData)就好了。


    补偿的原理取决于观测器的实现方法,基本都是基于USER_PWM_FREQ_kHz和USER_IQ_FULL_SCALE_FREQ_Hz。

    因为观测器那一块是保密的,因此原理这一块不会有详细说明。