基于模糊PID的桥式起重机防摇控制策略设计与Matlab仿真分析

张开发
2026/4/5 14:23:47 15 分钟阅读

分享文章

基于模糊PID的桥式起重机防摇控制策略设计与Matlab仿真分析
基于模糊PID桥式起重机防摇控制设计 基于模糊PID桥式起重机防摇控制设计 1.基本内容文中以桥式起重机小车—吊重系统为研究对象研究起重机的防摇摆控制方法基于拉格朗日方程建立了小车—吊重的动力学模型并求解出传递函数对位置控制和角度控制分别设计了二维模糊控制器并制定一套合理的模糊规则将模糊控制器与传统PID控制器结合设计出新的模糊PID控制器结合2种控制方式的优点能够实时改变PID控制器参数最后对大小车同时进行模糊PID控制得到了控制器不同初始条件下的吊重位移曲线大小车PID控制器初始参数相同时吊重位移近似直线当初始参数差别较大时吊重位移具有明显的弧度 2.适用软件Matlab2016及以上. 3.文章大概4400字15页. matlab仿真仿真模型截图课程报告桥式起重机这玩意儿在工地、码头、车间里随处可见但有个老问题一直挺让人头疼吊重在空中晃来晃去。你小车一停吊重还得荡半天秋千效率低不说安全隐患也大。传统 PID 控制虽然简单好用但碰上这种非线性、强耦合的系统往往就显得力不从心——参数调好了也只能在特定工况下凑合工况一变性能就垮掉。所以有人就想能不能让 PID 参数自己动起来适应不同状态这就引出了模糊 PID 控制。我们今天要聊的就是基于模糊 PID 的桥式起重机防摇控制设计全程用 MATLAB 2016 以上版本搞仿真。一、动力学模型是怎么建起来的要控制吊重的摇摆首先得知道它怎么动。这里用的是经典的小车-吊重系统把钢缆简化成刚性杆忽略空气阻力这些次要因素。建模方法选的是拉格朗日方程——这东西虽然看起来唬人但说白了就是能量法比牛顿第二定律省去了很多受力分析。系统的动能包括小车平动的动能和吊重摆动的动能势能主要是吊重的重力势能。拉格朗日函数 \( L T - V \) 一写再代入方程\[\frac{d}{dt} \left( \frac{\partial L}{\partial \dot{q}i} \right) - \frac{\partial L}{\partial qi} Q_i\]其中 \( qi \) 是广义坐标比如小车位移 \( x \) 和吊重摆角 \( \theta \)\( Qi \) 是对应的广义力。推导之后可以得到系统的非线性微分方程。为了设计控制器一般会在平衡点附近线性化得到传递函数。比如小车位移到摆角的传递函数可以写成\[G(s) \frac{\theta(s)}{X(s)} \frac{-s^2}{l(s^2 g/l)}\]其中 \( l \) 是绳长\( g \) 是重力加速度。这个模型虽然简化了但抓住了主要矛盾小车加速度会直接引发吊重摆动。二、模糊 PID 是怎么搭起来的传统 PID 的控制输出是\[u(t) Kp e(t) Ki \int e(t) dt K_d \frac{de(t)}{dt}\]基于模糊PID桥式起重机防摇控制设计 基于模糊PID桥式起重机防摇控制设计 1.基本内容文中以桥式起重机小车—吊重系统为研究对象研究起重机的防摇摆控制方法基于拉格朗日方程建立了小车—吊重的动力学模型并求解出传递函数对位置控制和角度控制分别设计了二维模糊控制器并制定一套合理的模糊规则将模糊控制器与传统PID控制器结合设计出新的模糊PID控制器结合2种控制方式的优点能够实时改变PID控制器参数最后对大小车同时进行模糊PID控制得到了控制器不同初始条件下的吊重位移曲线大小车PID控制器初始参数相同时吊重位移近似直线当初始参数差别较大时吊重位移具有明显的弧度 2.适用软件Matlab2016及以上. 3.文章大概4400字15页. matlab仿真仿真模型截图课程报告其中 \( Kp, Ki, K_d \) 是固定参数。但在吊重防摇问题里误差 \( e \) 和误差变化率 \( ec \) 在不同阶段需要不同的参数组合比如刚开始偏差大时希望快速响应接近目标时又希望柔和避免超调。模糊控制正好擅长这种“经验性”调整。我们设计一个二维模糊控制器输入是误差 \( e \) 和误差变化率 \( ec \)输出是 PID 参数的修正量 \( \Delta Kp, \Delta Ki, \Delta K_d \)。模糊集的划分很关键。比如把 \( e \) 和 \( ec \) 都分成 {负大, 负小, 零, 正小, 正大} 五个等级输出也类似。隶属度函数常用三角形或梯形这样计算简单响应快。% 创建模糊逻辑系统 fis newfis(fpid); % 添加输入变量 e 和 ec fis addvar(fis, input, e, [-3 3]); fis addvar(fis, input, ec, [-3 3]); % 添加输出变量 deltaKp, deltaKi, deltaKd fis addvar(fis, output, deltaKp, [-0.5 0.5]); fis addvar(fis, output, deltaKi, [-0.1 0.1]); fis addvar(fis, output, deltaKd, [-0.3 0.3]); % 定义隶属函数 fis addmf(fis, input, 1, NB, trapmf, [-3 -3 -2 -1]); fis addmf(fis, input, 1, NS, trimf, [-2 -1 0]); fis addmf(fis, input, 1, Z, trimf, [-1 0 1]); fis addmf(fis, input, 1, PS, trimf, [0 1 2]); fis addmf(fis, input, 1, PB, trapmf, [1 2 3 3]); % ... 类似定义 ec 和输出的隶属函数接下来是制定模糊规则。这步最体现“人肉智能”靠的是对系统行为的理解。比如如果 \( e \) 正大且 \( ec \) 负大说明误差在快速减小此时应减小 \( K_p \) 避免超调如果 \( e \) 负小且 \( ec \) 正大说明误差虽小但还在变大应加大 \( K_d \) 抑制变化。规则一般写成 if-then 形式在 MATLAB 里用矩阵表示% 规则格式: [e输入, ec输入, deltaKp输出, 权重, 运算符] ruleList [ 5 5 3 1 1 1; % 如果 ePB, ecPB, 则 deltaKpPS 5 4 2 1 1 1; % 如果 ePB, ecPS, 则 deltaKpZ ... % 更多规则 ]; fis addrule(fis, ruleList);最后用重心法解模糊得到精确的修正量实时更新 PID 参数\[Kp K{p0} \Delta Kp, \quad Ki K{i0} \Delta Ki, \quad Kd K{d0} \Delta K_d\]三、仿真模型怎么搭建在 Simulink 里我们需要把起重机模型、模糊推理系统、PID 控制器整合起来。模型部分用状态空间或者传递函数模块实现线性化后的方程模糊控制器用 Fuzzy Logic Controller 模块调用前面设计的 fis 文件。!上图是一个简化的仿真结构。上面一路控制小车位置下面一路控制吊重摆角。注意两者之间有耦合所以最好设计一个双输入双输出的模糊 PID 控制器或者分别设计但考虑耦合影响。为了模拟真实情况可以在控制输出后加上限幅和死区甚至加入钢丝绳弹性变形等非线性环节。% 仿真参数设置 T 10; % 仿真时间 x0 [0; 0; 0.1; 0]; % 初始状态 [x; dx/dt; theta; dtheta/dt] % 运行仿真 simout sim(crane_fuzzy_pid.slx, StopTime, num2str(T)); % 绘制结果 t simout.tout; x simout.logsout.get(x).Values.Data; theta simout.logsout.get(theta).Values.Data; figure; subplot(2,1,1); plot(t, x); title(小车位移); xlabel(时间(s)); ylabel(x(m)); subplot(2,1,2); plot(t, theta); title(吊重摆角); xlabel(时间(s)); ylabel(theta(rad));四、不同初始条件会怎样文章提到当大小车 PID 控制器初始参数相同时吊重位移近似直线当初始参数差别较大时吊重位移会有明显弧度。这其实反映了耦合控制的难点。如果大小车动力学特性差异大比如质量、摩擦系数不同却给了一样的初始 PID 参数必然有一个子系统响应过快或过慢导致吊重轨迹不协调。通过模糊自适应系统能慢慢调整到合适的参数组合使整体运动平滑。下图对比了两种情况下吊重的水平位移曲线!!显然模糊 PID 在参数适应性上表现更好。虽然刚开始可能因为参数不匹配有点“扭”但很快就能自己调好。五、总结与吐槽模糊 PID 在桥式起重机防摇控制中确实是个实用的思路。它不像纯模糊控制那样完全抛弃 PID 的精度也不像固定 PID 那样死板。通过模糊规则把人的经验融入参数调整实现了“软硬结合”。但也要注意模糊规则的设计很考验经验调不好反而会引入振荡而且实时计算量比固定 PID 大对硬件有一定要求。另外如果系统动力学参数变化剧烈比如吊重质量大变可能还需要更高级的自适应方法。最后扔个仿真文件结构供参考/project crane_model.slx % Simulink主模型 fuzzy_pid.fis % 模糊推理系统文件 init_params.m % 初始化参数脚本 run_simulation.m % 运行仿真的主脚本 plot_results.m % 绘图脚本代码和模型都调试通过跑起来就能看到吊重从“荡秋千”到“稳如老狗”的全过程。有兴趣的可以试着改改模糊规则感受一下参数对性能的影响——有时候调控制就像老中医开药方子差一点效果差千里。

更多文章