继续自己手写FOC控制算法之滑膜观测器的实现。
滑膜观测主要就是对电机参数没那么敏感,而且数学公式推导比较简单,就是基本的电机的数学哦公式加上一个滑模面函数,相较于龙伯格来说需要调试的参数很少。龙伯格我自己测试好了再发上来。
滑膜观测器的我理解的核心原理主要是构造滑膜面函数,然后根据李雅普诺夫定理来设定合适的增益实现滑模面函数的收敛。一般构造的滑膜面函数就是这个α-β坐标系下的电流。具体的电机公式及数学推导网络上有很多资料,自己去查阅。我这里直接贴代码。
这个是我自己对滑膜观测器的梳理。
滑膜观测器实现代码
结构体及宏定义
#define BEMF_VOL_FACTOR (5.0f) //电机反电势常数的电压
#define BEMF_FREQ_FACTOR (50) //电机反电势常数的电转速频率
struct SMO_Obs
{
float spd_filter; //滤波后的电转速
float spd; //电转速
float theta_Est; //估算的电角度
float ialpha; //电流α-β坐标系的α轴分量
float ibeta; //电流α-β坐标系的β轴分量
float ialpha_Est; //估算的电流α-β坐标系的α轴分量
float ibeta_Est; //估算的电流α-β坐标系的β轴分量
float ialpha_Err; //估算的和实际值误差
float ibeta_Err; //估算的和实际值误差
float ualpha; //电压α-β坐标系的α轴分量
float ubeta; //电压α-β坐标系的β轴分量
float Ts; //采样时间,FOC执行周期
float Rs; //电机内阻
float Ld; //电机D轴电感
float Lq; //电机Q轴电感
float gain; //滑膜增益
float bemfalpha; //反电动势α-β坐标系的α轴分量
float bemfbeta; //反电动势α-β坐标系的β轴分量
};
void SMO_Init(void);
void SMO_Handle(struct SMO_Obs* ptr);
函数实现,这里滑膜观测器的增益需要结合自己的工程调试,我这里为了实现原理是随便给的。
//滑膜控制器结构体
struct SMO_Obs SMO_Observer;
//锁相环
extern struct PLL_Handle PllCtrl;
static int8_t FuncSign(float in);
/*!
*@prototype void SMO_Init(void)
*@param[ih] none
*@return none
*@brief 滑膜观测器初始化
*/
void SMO_Init(void)
{
SMO_Observer.spd_filter = 0.0f;
SMO_Observer

最低0.47元/天 解锁文章
1万+





