| 
积分322回帖0西莫币 贡献 威望 存款 阅读权限20最后登录1970-1-1 
 该用户从未签到 | 
 
| 
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有账号?立即注册 
  speed_fr->T = 0.00005;
 
 speed_fr->baseFreq = 230;
 
 speed_fr->polePairs = 4;
 
 speed_fr->filterCutoff =  (2 * MATH_PI * 100);
 
 speed_fr->K1 =  1.0f / (speed_fr->baseFreq * speed_fr->T);
 
 speed_fr->K2 =  1.0f / (1.0f + (speed_fr->T * speed_fr->filterCutoff) ) ;
 
 speed_fr->K3 =  1.0f - speed_fr->K2 ;
 
 
 
 //! \brief     Runs the Speed_FR module
 //! \param[in] Speed_frHandle  The Speed_FR handle
 //! \param[in] ElecTheta        The position of the motor
 //! \param[out] speed_out        The speed of the motor
 inline void SPEED_FR_run(SPEED_FR_Handle Speed_frHandle, const float32_t ElecTheta, float32_t* speed_out )
 {
 
 SPEED_FR_Obj *speed_fr = (SPEED_FR_Obj *)Speed_frHandle;
 
 if( (ElecTheta < (0.9f)) & (ElecTheta > 0.1f ) )
 {
 speed_fr->Tmp_fr = speed_fr->K1 * ( ElecTheta - speed_fr->OldElecTheta);
 }
 else
 {
 speed_fr->Tmp_fr = speed_fr->Speed;
 }
 
 // Low-pass filter
 speed_fr->Tmp_fr = (speed_fr->K2 * speed_fr->Speed) + (speed_fr->K3 * speed_fr->Tmp_fr);
 
 speed_fr->Tmp_fr = SPEED_FR_SAT(speed_fr->Tmp_fr, 1.0f, -1.0f);
 
 speed_fr->Speed = speed_fr->Tmp_fr;
 
 speed_fr->OldElecTheta = ElecTheta;
 
 speed_fr->SpeedRpm = ( speed_fr->BaseRpm * speed_fr->Speed);
 *speed_out = speed_fr->Speed;
 }// end of SPEED_FR_run() function
 
 上面这个函数中ElecTheta是编码器检测到的角度(电角度),为什么要对这个角度值进行处理呢,最后那个*speed_out 输出的是什么值呢?是速度还是角度?
 | 
 |