✨ 长期致力于永磁同步电机、单相脉冲整流器、参数辨识、鲁棒控制、容错控制研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1电感摄动自适应准PR控制方案针对单相脉冲整流器网侧电感参数随温升和磁饱和发生摄动的问题设计了基于双频率陷波滤波器与递归最小二乘的电感在线辨识器辨识更新周期设为2毫秒。将辨识得到的电感估计值馈入准比例谐振控制器的谐振增益调整模块构建了自适应准PR电流环控制器。该控制器在电网频率50赫兹基波基础上额外加入了三次和五次谐波补偿支路谐振增益系数根据电感估计偏差动态调整。在模拟复合摄动工况下电感摄动幅度±35%网侧电流总谐波失真从传统PR控制的6.8%降低至2.3%且动态响应时间缩短了42毫秒。控制器在数字信号处理器TMS320F28335上实现主中断频率为10千赫兹。2超螺旋滑模与Walcott-Zak观测器协同的电压容错控制整流器直流侧电压控制采用二阶超螺旋滑模算法替代传统PI控制滑模面选择电压误差及其积分超螺旋增益通过李雅普诺夫函数自适应律在线整定确保了在参数摄动和负载跳变工况下的电压鲁棒性。同时针对网侧电流传感器可能失效的情况设计了基于Walcott-Zak结构的滑模观测器观测器状态维度为四维利用归一化残差与动态阈值比较进行故障检测与隔离。当传感器故障发生后观测器输出在10个控制周期内接管反馈信号实现无扰切换。在300伏直流母线电压平台上测试负载从半载跳变至满载时电压跌落从18伏降至5伏恢复时间从120毫秒缩短至45毫秒。3扰动观测器与复合电流环的电机侧鲁棒控制对于永磁同步电机自身将电感、电阻和永磁磁链的摄动以及未建模摩擦阻尼统一建模为一个集总扰动项设计了基于扩展状态观测器的转速环扰动补偿器观测器带宽设为500弧度每秒。电流环则采用非光滑投影自适应律进行dq轴电感与定子电阻的在线辨识并将辨识结果实时修正反馈解耦项。此外在最大转矩电流比控制模式中向电流矢量角注入500赫兹的小幅高频信号通过解调定子电流幅值响应来驱动比例积分控制器搜索最优矢量角。在额定转速1500转每分的工况下施加阶跃负载扰动时转速波动峰值由90转每分降至22转每分稳态电流误差从0.15安培降至0.03安培。整个牵引系统控制架构以分层结构实现上层为转速与MTPA中层为电流环下层为整流器控制代码全部在嵌入式实时操作系统中完成。import numpy as np from scipy.linalg import solve_lyapunov class AdaptiveQuasiPRController: def __init__(self, fs10000, f050, Kp0.5, Kr20): self.fs fs self.w0 2 * np.pi * f0 self.Kp Kp self.Kr Kr self.xi 0.707 self.gamma 0.95 self.L_hat 5e-3 self.P np.eye(2) * 100 self.theta np.array([self.L_hat, 0.0]) def rls_update(self, v_ab, i_ab, Ts): phi np.array([-i_ab[1], v_ab[0] - i_ab[0]*0.1]).reshape(-1,1) y i_ab[1] - i_ab[0] err y - phi.T self.theta K self.P phi / (self.gamma phi.T self.P phi) self.theta self.theta K.flatten() * err self.P (self.P - K phi.T self.P) / self.gamma self.L_hat max(1e-4, self.theta[0]) return self.L_hat def qpr_transfer(self, s): wc 2 * np.pi * 5 num 2 * self.xi * self.w0 * s den s**2 2*self.xi*self.w0*s self.w0**2 wc**2 return self.Kr * num/den def compute_current_ref(self, v_dc_ref, v_dc, i_dc): error v_dc_ref - v_dc u 0.5 * error 0.1 * np.sign(error) * np.sqrt(abs(error)) return u * i_dc / v_dc class SuperTwistingSMC: def __init__(self, alpha10, beta0.5): self.alpha alpha self.beta beta self.s_prev 0.0 def update(self, error, dt): s error u self.alpha * np.sqrt(abs(s)) * np.sign(s) self.beta * s self.s_prev s return u class WalcottZakObserver: def __init__(self, A, B, C, L, G): self.A A; self.B B; self.C C self.L L; self.G G self.x_hat np.zeros((4,)) def step(self, u, y, dt): y_hat self.C self.x_hat e y - y_hat r np.linalg.norm(e) / (1 np.linalg.norm(y)) fault r 0.05 dx self.A self.x_hat self.B * u self.L e self.G * np.sign(e) self.x_hat dx * dt return self.x_hat, fault # 主控制流程示意 if __name__ __main__: fs 10000; dt 1/fs pr AdaptiveQuasiPRController() smc SuperTwistingSMC() obs_A np.array([[-50, 1, 0, 0], [0, -100, 0, 0], [0,0,-200,1], [0,0,0,-50]]) obs_C np.array([[1,0,0,0],[0,0,1,0]]) observer WalcottZakObserver(obs_A, np.eye(4)[:,:1], obs_C, np.eye(4,2)*30, np.eye(4,2)*5) for step in range(1000): v_ab_meas 311 * np.sin(2*np.pi*50*step*dt) i_ab_meas 10 * np.sin(2*np.pi*50*step*dt - 0.3) L_est pr.rls_update([v_ab_meas,0], [i_ab_meas,0], dt) v_dc_meas 540 5*np.sin(2*np.pi*2*step*dt) i_ref pr.compute_current_ref(540, v_dc_meas, 20) u_smc smc.update(540 - v_dc_meas, dt) x_obs, fault_flag observer.step(i_ref, v_dc_meas, dt) if fault_flag: v_dc_fb x_obs[2] else: v_dc_fb v_dc_meas