BLDC-滑模观测器

SMO-滑模观测器参考代码:

void FOC_SMO_Observer(struct_smo_est *pHandle)
{ 	
	
	//---------------------------------------------------------------------------------------------------/	
	/* Sliding mode current observer */

	pHandle->Est_Ialpha = (((pHandle->Fs>>2) * (pHandle->Est_Ialpha)) + ((pHandle->Gs>>2) * (pHandle->Valpha - pHandle->Ealpha - pHandle->Zalpha)))>>13;   
 
	pHandle->Est_Ibeta  = (((pHandle->Fs>>2) * (pHandle->Est_Ibeta)) + ((pHandle->Gs>>2) * (pHandle->Vbeta - pHandle->Ebeta - pHandle->Zbeta)))>>13;
	
	//---------------------------------------------------------------------------------------------------/	
	/* Current errors */
 
	pHandle->IalphaError = pHandle->Est_Ialpha - pHandle->Ialpha;  
 
	pHandle->IbetaError  = pHandle->Est_Ibeta - pHandle->Ibeta;    
	
	//---------------------------------------------------------------------------------------------------/ 
	/* Ialpha Sliding control calculator */
 
	if (_IQabs(pHandle->IalphaError) < pHandle->E0)       

		pHandle->Zalpha = (pHandle->IalphaError*(pHandle->Kslide))/(pHandle->E0);  

	else if (pHandle->IalphaError > 0)   

		pHandle->Zalpha = pHandle->Kslide;

	else

		pHandle->Zalpha = -pHandle->Kslide;
 	
	//---------------------------------------------------------------------------------------------------/	
	/* Ibeta Sliding control calculator */ 
	
	if (_IQabs(pHandle->IbetaError) < pHandle->E0)

		pHandle->Zbeta = (pHandle->IbetaError*(pHandle->Kslide)/(pHandle->E0); 

	else if (pHandle->IbetaError > 0) 

		pHandle->Zbeta = pHandle->Kslide;

	else

		pHandle->Zbeta = -pHandle->Kslide;
 
	//---------------------------------------------------------------------------------------------------/ 
	/* Sliding control filter -> back EMF calculator */
 
	pHandle->Ealpha = pHandle->Ealpha + _IQmpy(pHandle->Kslf,(pHandle->Zalpha-pHandle->Ealpha)); 

	pHandle->Ebeta  = pHandle->Ebeta + _IQmpy(pHandle->Kslf,(pHandle->Zbeta-pHandle->Ebeta));


	//---------------------------------------------------------------------------------------------------/

	/* QPLL得到估算转速 */
	/* E(error) = -E(alfa)*Cosθ - E(beta)*Sinθ = K*▲θ */
	stru_SinCos_PLL = FOC_SinCos_Calc(pHandle->Angle);

	pHandle->PI_Error = ( ( ((-pHandle->Ealpha) * stru_SinCos_PLL.Cos) - (pHandle->Ebeta * stru_SinCos_PLL.Sin) )>>15);	
	pHandle->PI_Ui += (( pHandle->PI_Error * pHandle->PI_Ki ) >> 1 );
	if      ( pHandle->PI_Ui >  (pHandle->PI_Upper << 14) )  pHandle->PI_Ui =  pHandle->PI_Upper << 14;
	else if ( pHandle->PI_Ui <  (pHandle->PI_Lower << 14) )  pHandle->PI_Ui =  pHandle->PI_Lower << 14;
	
	pHandle->PI_Out = (( pHandle->PI_Error * pHandle->PI_Kp ) >> 15 ) + (pHandle->PI_Ui >> 14);		
	if      ( pHandle->PI_Out > pHandle->PI_Upper )  pHandle->PI_Out = pHandle->PI_Upper;
	else if ( pHandle->PI_Out < pHandle->PI_Lower )  pHandle->PI_Out = pHandle->PI_Lower;
	
	//计算角度
	pHandle->GWe    = pHandle->PI_Out; 
	pHandle->Angle += pHandle->GWe;  
	
	/* 角度限制处理 */
	if      ( pHandle->Angle <     0 )  pHandle->Angle += 65535;
	else if ( pHandle->Angle > 65535 )  pHandle->Angle -= 65535;

	//---------------------------------------------------------------------------------------------------/	

}
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值