- 积分
- 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 输出的是什么值呢?是速度还是角度? |
|