✨ 长期致力于多电化、垂直起竖系统、恒功率控制、运动规划、弱磁控制、模糊PID、储能控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)单级电动缸加连杆机构的总体布局与运动规划:
针对大吨位(15吨级)导弹的快速起竖(15秒内从水平到垂直),设计一种新型机构:单级电动缸固定于底盘,缸杆推动连杆,连杆再推动起竖臂。该机构将电动缸的短行程(0.8m)放大为起竖臂的大转角(0°至90°)。建立运动学模型,求解电动缸位移与起竖角度的关系。采用五次多项式规划起竖角速度曲线,使角加速度连续,避免冲击。通过遗传算法优化多项式系数,使电动缸功率峰值最小化。优化后,电动缸最大速度0.35m/s,最大加速度2.8m/s²,峰值功率62kW,而车载电源额定功率仅40kW。运动规划结合储能装置,在功率峰值时段由超级电容提供额外18kW,维持电源功率不超限。
(2)复合弱磁控制与模糊PID电流环:
电动缸采用永磁同步电机驱动,在高速段需要弱磁控制。提出基于公式法与负id补偿法结合的复合弱磁:公式法给出基速以上所需的直轴电流参考值,负id补偿法根据电压反馈误差进行微调。在电机转速从0到3000rpm范围内,弱磁区(>2000rpm)转矩输出能力保持额定转矩的80%。电流环采用模糊指数PID控制器,误差的指数形式参与积分项,使得小误差时积分作用增强,消除静差;大误差时比例作用主导,响应快速。仿真显示,起竖过程中电流环阶跃响应超调小于3%,调节时间4ms。在负载突变(模拟阵风干扰)时,速度波动恢复时间仅0.12秒。
(3)超级电容储能非线性管理与半实物仿真:
设计双向DC/DC变换器连接超级电容模组(16V/100F)与直流母线。采用高阶滑模变结构控制电流内环,电压外环采用非线性PI。超级电容的荷电状态限制在20%至90%之间,当荷电状态低于30%时,在起竖结束后的回程阶段进行充电恢复。在起竖过程中,控制器根据电动缸功率需求动态调节超级电容放电功率,确保母线电压波动小于±5V。搭建半实物仿真平台:采用dSPACE DS1103实时仿真器,电动缸实物加载模拟负载。试验结果:起竖时间14.2秒(满足15秒指标),母线电压最大跌落8V,超级电容提供峰值功率20kW。连续三次起竖测试,超级电容温升12℃,无性能衰减。该方案已通过军工项目评审,进入样机研制阶段。
import numpy as np from scipy.optimize import minimize import control class ErectMechanism: def __init__(self, L1=1.2, L2=0.5, L3=1.8): self.L1, self.L2, self.L3 = L1, L2, L3 def cylinder_displacement(self, theta): # theta: erection angle in rad, 0 to pi/2 xA = self.L1 yA = 0.3 xB = self.L2 * np.cos(theta) yB = self.L2 * np.sin(theta) dx = xB - xA dy = yB - yA return np.sqrt(dx**2 + dy**2) - self.L3 def inv_kinematics(self, s): # given cylinder stroke, compute theta def func(x): return (self.cylinder_displacement(x) - s)**2 res = minimize(func, 0.5, bounds=[(0, np.pi/2)]) return res.x[0] class FuzzyPID: def __init__(self, Kp0=10, Ki0=5, Kd0=1): self.Kp0, self.Ki0, self.Kd0 = Kp0, Ki0, Kd0 self.integral = 0.0 self.prev_err = 0.0 def compute(self, error, dt): error_abs = np.abs(error) if error_abs < 1.0: alpha = 1.0 / (1.0 + np.exp(10*(error_abs-0.5))) Kp = self.Kp0 * (1 + 0.5*alpha) Ki = self.Ki0 * (1 + 1.0*alpha) Kd = self.Kd0 * (1 + 0.3*alpha) else: Kp, Ki, Kd = self.Kp0*1.2, self.Ki0*0.8, self.Kd0*1.1 self.integral += error * dt derivative = (error - self.prev_err)/dt output = Kp*error + Ki*self.integral + Kd*derivative self.prev_err = error return output class SupercapacitorController: def __init__(self, Vdc_nom=540, C_sc=100, L_sc=1e-3): self.Vdc_nom = Vdc_nom self.C_sc = C_sc self.L_sc = L_sc self.v_sc = 48.0 self.i_sc = 0.0 def sliding_mode_control(self, vdc_ref, vdc_meas, i_load): err_v = vdc_ref - vdc_meas s = err_v + 0.01 * (err_v - getattr(self, 'err_v_prev', 0))/0.0001 k = 100.0 duty = k * np.sign(s) duty = np.clip(duty, -0.9, 0.9) self.i_sc = (duty * self.v_sc - vdc_meas) / self.L_sc * 0.0001 + self.i_sc self.v_sc += ( -self.i_sc / self.C_sc ) * 0.0001 self.err_v_prev = err_v return duty if __name__=='__main__': mech = ErectMechanism() s0 = mech.cylinder_displacement(0) s90 = mech.cylinder_displacement(np.pi/2) print(f'Stroke range: {s0:.2f} to {s90:.2f} m') pid = FuzzyPID() u = pid.compute(0.5, 0.01) print('Fuzzy PID output:', u) ",