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
    评论
BLDC(无刷直流电机)滑膜观测器是一种用于监测无刷电机滑动摩擦状况的传感器。在C语言中,您可以按照以下步骤来实现BLDC滑膜观测器: 1. 引入必要的头文件:根据使用的硬件和传感器,引入相应的文件,例如ADC(模数转换器)和GPIO(通用输入输出)等。 2. 初始化硬件:根据您的硬件配置,进行初始化设置,包括ADC和GPIO的初始化。 3. 读取传感器数值:使用ADC模块读取与滑膜观测器连接的传感器的模拟数值。这些传感器可以是用于监测电机电流、速度或其他相关参数的传感器。 4. 转换数值:根据ADC的配置和参考电压等参数,将模拟数值转换为实际物理量,例如电压、电流或速度等。 5. 处理数据:根据实际需求,对转换后的数据进行处理。例如,可以使用滑动平均或滤波等算法对数据进行平滑处理。 6. 判断滑膜情况:根据处理后的数据,通过一定的算法或阈值判断滑膜的磨损情况或摩擦状态。这可以涉及比较当前数值与之前的数值,或者与预设的阈值进行比较。 7. 输出结果:根据判断结果,可以使用GPIO控制LED灯或其他设备来输出滑膜的状态或发出警报。 需要注意的是,具体的实现细节和代码将取决于您使用的硬件平台、传感器类型以及BLDC电机控制算法。您可能需要参考硬件和传感器的文档以及相关的C语言库函数来完成这个任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值