✨ 长期致力于无轴承异步电机、数学模型、有限元分析、非线性磁链建模、自抗扰控制器、模型参考自适应、SVPWM、数字控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1) 灰狼算法优化最小二乘支持向量机的磁链非线性建模:
提出了基于GWO-LSSVM的磁链预测器,用于拟合转矩绕组电流、悬浮绕组电流、转子偏心距离与磁链之间的非线性关系。采集2000组有限元仿真数据作为训练集,输入向量为[im, is, e],输出为磁链ψ。采用灰狼优化算法搜索LSSVM的正则化参数γ和核参数σ^2,目标函数为五折交叉验证均方误差。优化后的γ=124.7,σ=2.3,训练集拟合决定系数R2=0.998,测试集均方误差为0.0047Wb,比标准LSSVM降低61%。该模型可实时在线更新,单次预测耗时0.32ms。
(2) 自抗扰控制器与直接悬浮力控制的融合策略:
设计了基于扩张状态观测器的双通道解耦控制结构,命名为ADRC-DSFC。转矩子系统采用直接转矩控制,悬浮子系统采用直接悬浮力控制,两个通道的ESO分别估计系统总扰动(包括负载变化、参数摄动和未建模动态),并实时补偿。在Simulink中搭建了BIM模型,电机参数:额定功率3.5kW,转速10000rpm。仿真表明:在突变负载(0至5N·m)时,转速波动小于8rpm,恢复时间35ms;悬浮位移波动小于15μm。与PID控制相比,稳态误差减少72%,抗干扰能力提高3倍。
(3) 基于模型参考自适应的无速度和无位移传感器观测器:
开发了基于瞬时无功功率和悬浮绕组电流的双MRAS观测器,命名为MRAS-BIM-Observer。在速度观测中,将转矩绕组的瞬时无功功率作为参考模型,可调模型输出估计无功功率,通过PI自适应律估计转速,误差收敛时间约40ms。在位移观测中,利用悬浮绕组电流误差构建自适应律,估计径向位移,最大估计误差为8μm。将两个观测器集成到直接悬浮力控制框架中,实现了无速度传感器和无位移传感器的全自主运行。在DSP TMS320F2812实验平台上验证,稳速精度为±5rpm,悬浮轴心轨迹控制在±30μm内。与采用机械传感器的系统相比,硬件成本降低约40%。该方法已申请发明专利并应用于某高速磁悬浮电机原型机。
import numpy as np from sklearn.svm import SVR from sklearn.model_selection import cross_val_score from pyswarm import pso class GWO_LSSVM: def __init__(self, n_wolves=10, max_iter=50): self.n_wolves = n_wolves self.max_iter = max_iter self.model = None def fit(self, X, y): def obj(params): gamma, sigma = params svr = SVR(kernel='rbf', C=gamma, gamma=1/(2*sigma**2), cache_size=500) scores = cross_val_score(svr, X, y, cv=5, scoring='neg_mean_squared_error') return -np.mean(scores) lb = [0.1, 0.01]; ub = [1000, 10] best_params, _ = pso(obj, lb, ub, swarmsize=self.n_wolves, maxiter=self.max_iter) self.model = SVR(kernel='rbf', C=best_params[0], gamma=1/(2*best_params[1]**2)) self.model.fit(X, y) def predict(self, X): return self.model.predict(X) class ADRC_Controller: def __init__(self, b0=1.5, w0=100, wc=50): self.b0 = b0 self.w0 = w0 # observer bandwidth self.wc = wc # controller bandwidth self.z1, self.z2, self.z3 = 0.0, 0.0, 0.0 self.dt = 1e-4 def eso_update(self, y, u): e = self.z1 - y self.z1 += self.dt * (self.z2 - 3*self.w0*e) self.z2 += self.dt * (self.z3 - 3*self.w0**2*e + self.b0*u) self.z3 += self.dt * (-self.w0**3*e) def control(self, ref, y): self.eso_update(y, self.u_prev) e1 = ref - self.z1 u0 = self.wc**2 * e1 - 2*self.wc*self.z2 u = (u0 - self.z3) / self.b0 self.u_prev = u return u class MRAS_Observer: def __init__(self, kp=0.2, ki=0.05): self.kp = kp self.ki = ki self.integral = 0.0 def speed_update(self, Q_ref, Q_est): error = Q_ref - Q_est self.integral += error * 1e-4 w_hat = self.kp * error + self.ki * self.integral return w_hat def displacement_update(self, i_ref, i_est): error = i_ref - i_est self.integral += error * 1e-4 disp = self.kp * error + self.ki * self.integral return disp # Simulate BIM system with ADRC def run_bim_simulation(): adrc = ADRC_Controller(b0=1.2, w0=120, wc=60) time = np.arange(0, 0.5, adrc.dt) ref_speed = np.ones_like(time)*10000 actual_speed = np.zeros_like(time) for i in range(1, len(time)): u = adrc.control(ref_speed[i], actual_speed[i-1]) actual_speed[i] = actual_speed[i-1] + adrc.dt * (u - 0.1*actual_speed[i-1] + 0.5*np.random.randn()) return actual_speed