永磁同步电机扰动观测器无位置传感器控制该方法仅需要根据反电动势估计结果进行一次反正切计算即可得到转子位置只需要设计一个观测器增益非常好调试没有PLL等位置观测器参数整定简单。 模型控制器部分全部采用离散域设计模型可自由选择死区仿真使能和死区时间所有参数都统一到init里方便修改电机参数适配不同电机参数。最近在调永磁同步电机的无感方案时发现个宝藏设计——基于扰动观测器的位置观测方案。这玩意儿相比传统龙伯格观测器少了至少三倍工作量特别适合我这种手头有三台电机要调试的懒人。核心思路就像在玩消消乐把反电动势里的位置信息直接怼进观测器。传统的龙伯格要搞两个观测器还得配PLL锁相环这里直接把q轴反电动势当扰动项处理。关键代码就这五六行def disturbance_observer(v_alpha, v_beta, i_alpha, i_beta, dt): global x_obs # 观测器状态量 e np.array([i_alpha, i_beta]) - C x_obs # 输出误差 x_obs A x_obs B np.array([v_alpha, v_beta]) L * e # 观测器更新 return x_obs[2], x_obs[3] # 返回反电动势估计值观测器增益L直接决定动态响应实测取电机基频的2~5倍就能用。比如1.5kW电机基频50HzL取300rad/s时响应速度刚好够用。这比传统方案需要调PI参数锁相环带宽省事多了老司机闭着眼睛都能设参数。永磁同步电机扰动观测器无位置传感器控制该方法仅需要根据反电动势估计结果进行一次反正切计算即可得到转子位置只需要设计一个观测器增益非常好调试没有PLL等位置观测器参数整定简单。 模型控制器部分全部采用离散域设计模型可自由选择死区仿真使能和死区时间所有参数都统一到init里方便修改电机参数适配不同电机参数。位置解算更是省心到离谱直接把估计的反电动势扔给np.arctan2完事theta_est np.arctan2(-e_alpha_est, e_beta_est) # 位置解算参数配置统一在init文件这点必须点赞改电机型号时不用满世界找变量。像这样# init_params.py MOTOR { Rs: 1.2, # 定子电阻 Ld: 0.005, # d轴电感 Lq: 0.006, # q轴电感 flux: 0.12, # 永磁体磁链 deadtime: 2e-6 # 死区时间 } OBSERVER { L: 300, # 观测器增益 enable_deadtime: True # 死区仿真开关 }仿真时发现个有意思的现象当死区时间超过3us时位置估计波形会出现毛刺。这时候在电流采样后加个移动平均滤波立马见效# 电流预处理 def current_filter(raw_i): window np.ones(5)/5 # 5点移动平均 return np.convolve(raw_i, window, modesame)实测波形显示如图1位置跟踪误差能稳定在±0.15rad以内。红色是真实位置蓝色虚线是估计值在突加减载时也没出现明显振荡。个人觉得这个设计最爽的地方是参数物理意义明确——观测器增益直接对应系统带宽调参侠们不用再对着十几个PI参数怀疑人生了。!位置跟踪效果图真实位置与估计值曲线高度重合动态过程无明显超调当然这方案也不是万能的转速低于5%额定值时估计精度会下降。不过对于风机水泵这类不需要零速启停的场合已经比那些需要注入高频信号的方法实用多了。下次准备试试在观测器里加入磁饱和补偿看看能不能把低速段性能再提一提。