永磁同步电机(pmsm,全速度切换无位置传感器控制(高速可以是超螺旋滑模) 低速可以是脉振高频方波注入,if开环等仿真模型。 切换有加权切换和双坐标切换。 单个链接只有一种。 可以送单独卡尔曼滤波或者扩张状态观测器。
高速段的超螺旋滑模
别被论文里的数学推导吓到,核心就三行代码:
function [theta_hat] = Super_Twisting(e_omega) alpha = 0.8; % 滑模增益别贪心,容易振荡 lambda = 1.2; % 收敛速度看负载惯量 theta_hat = -lambda*abs(e_omega)^0.5*sign(e_omega) + integral(-alpha*sign(e_omega)); end这里的积分项要加抗饱和处理,实测中发现当转速突变超过300rad/s时,直接积分会爆表。建议用动态限幅:integralterm = min(max(integralterm, -1.2),1.2);
低速段的高频注入
方波注入的相位对齐是老大难,这段代码实现了自动相位补偿:
void HF_Injection(float Vh, float theta_est) { static uint8_t count = 0; float Vh_signal = (count++ < 5) ? Vh : -Vh; // 10kHz下5个采样点切换 if(count >= 10) count = 0; // 坐标变换里的相位补偿 float delta = 0.1*(theta_est - theta_real_prev); // 补偿量别超过0.3rad clarke_transform(Vh_signal, delta); }注意注入频率和PWM载波频率的互质关系,推荐用质数比如1973Hz。遇到过载波谐波干扰的,试试在SVPWM里加个随机载波偏移。
永磁同步电机(pmsm,全速度切换无位置传感器控制(高速可以是超螺旋滑模) 低速可以是脉振高频方波注入,if开环等仿真模型。 切换有加权切换和双坐标切换。 单个链接只有一种。 可以送单独卡尔曼滤波或者扩张状态观测器。
切换策略实战
双坐标切换比加权切换更抗揍,关键在q轴电流突变的处理:
def switch_strategy(omega): threshold = 0.15 * rated_omega # 切换阈值建议取10%-20%额定转速 if omega > threshold + hysteresis_band: enable_hfi = False kalman_enable = True current_ramp_rate = 50 # A/s 防止电流冲击 elif omega < threshold - hysteresis_band: enable_hfi = True kalman_enable = False current_ramp_rate = 20 # 低速时降电流变化率遇到过切换震荡的,把滞环带宽从5%调到8%立马见效。有个隐藏BUG:切换瞬间的磁链观测器要重置,否则会带着误差进新模式。
观测器选型心得
卡尔曼滤波在高速段稳如老狗,但别直接用现成库:
% 简化的扩展卡尔曼预测步 function [x_pred, P_pred] = EKF_predict(x_est, u, P_prev) F = [1 -Ts*R/L, Ts*we; -Ts*we, 1 -Ts*R/L]; % 状态矩阵必须在线计算 G = [Ts/L 0; 0 Ts/L]; x_pred = F*x_est + G*u; P_pred = F*P_prev*F' + Q; # Q矩阵别偷懒用单位阵 end实测发现Q矩阵取diag([0.01,0.01,1e-4])效果最佳。有个骚操作:把逆变器非线性压降作为扩张状态量,观测精度直接提升20%。
仿真模型建议用分段编译,高速低速模式分成独立子系统。遇到过仿真卡死的,把代数环检测级别调到最高,多半是反馈路径没加单位延迟。最后提醒:切换瞬间的电流环参数记得在线自整定,别一个PI参数走天下。