Matlab_Simulink Bouc-Wen模型搭建的磁流变阻尼器 【类型】:磁流变阻尼器 【软件】:Matlab_Simulink 【状态】:模型搭建完成, 【描述】:根据论文搭建的Bouc-
2026/4/6 10:26:11
网站建设
项目流程
Matlab/Simulink Bouc-Wen模型搭建的磁流变阻尼器【类型】磁流变阻尼器【软件】Matlab/Simulink【状态】模型搭建完成【描述】根据论文搭建的Bouc-Wen模型基于Bouc-Wen模型的磁流变阻尼器MR Damper通常包含力学模型和磁滞非线性两部分。Simulink模型通常由积分器、乘法器和加法器组成但在代码层面我们主要关注描述其动态特性的微分方程。以下是基于Bouc-Wen模型的磁流变阻尼器的MATLAB Function代码可直接放入Simulink的MATLAB Function Block中以及参数说明。核心微分方程Bouc-Wen模型的标准形式通常如下ddot{x} 2zetaomega_ndot{x} omega_n^2 x F_{MR}(t)其中磁流变阻尼力 F_{MR} 由以下非线性微分方程描述F_{MR} c_0(dot{z} - dot{x}) k_0(z - x) alpha zdot{z} Adot{x} - beta|dot{x}| |z|^n text{sgn}(z) - gamma dot{x} |z|^nMATLAB Function 代码 (Simulink可用)你可以将以下代码放入 MATLAB Function Block 中输入为位移 x 和速度 dot{x}输出为阻尼力 F_{MR}。function Fmr fcn_BoucWen(x, dx, i) % x:位移, dx:速度, i:电流% 说明Bouc-Wen磁流变阻尼器模型% 输入: x (位移), dx (速度), i (控制电流)% 输出: Fmr (阻尼力)% % 1. 模型参数 (需要根据论文或实验数据标定)% % 力学参数c0 1500; % 油孔阻尼系数 (Ns/m)k0 1000; % 油孔刚度系数 (N/m)alpha 1e5; % 磁滞刚度增益 (N/m)% Bouc-Wen 磁滞参数A 1.0; % 幅值参数beta 0.5; % 硬化/软化参数 (正为硬化)gamma 0.5; % 磁滞形状参数n 2; % 光滑度指数 (通常取2)% 电流相关增益 (假设力与电流呈线性或非线性关系)% 有些模型会将 alpha 或 A 乘以电流函数k_i 1 0.5 * i; % 示例力随电流增大而增大% % 2. 积分状态 (需要在函数中保持状态)% % z 是内部状态变量需要记忆上一时刻的值persistent z dzif isempty(z)z 0; % 初始状态end% % 3. Bouc-Wen 非线性滞回计算% % 计算 dz/dt% dot{z} Adot{x} - beta|dot{x}| |z|^n text{sgn}(z) - gamma dot{x} |z|^ndz A * dx …beta * abs(dx) * (abs(z) ^ n) * sign(z) …gamma * dx * (abs(z) ^ n);% 使用欧拉法积分得到 z (在Simulink中通常用Integrator模块)% 这里为了代码演示简单积分实际建议用Simulink Integrator% z z dz * dt; (此处省略dtSimulink会自动处理)% % 4. 计算阻尼力% % F c0(dx - dz) k0(z - x) alpha * zFmr c0 * (dx - dz) k0 * (z - x) alpha * k_i * z;% % 5. 更新状态 (用于下一次调用)% % 注意在Simulink中通常将 dz 作为输出连接到 Integrator 模块% 而不是在这里手动积分。endSimulink 模型搭建建议在Simulink中搭建时通常不建议在MATLAB Function中做积分而是使用标准模块输入连接 Position (x) 和 Velocity (dot{x})。计算 z 的导数 (dot{z})使用 Math Function 模块计算 |dot{x}|。使用 Abs 和 Sign 模块处理非线性项。使用 Product 和 Sum 模块组合公式 dot{z} …。积分将计算出的 dot{z} 输入到 Integrator 模块得到状态 z。计算力 F_{MR}将 x, dot{x}, z, dot{z} 代入力方程计算最终输出力。参数标定参考如果你的论文中有具体的参数表可以直接替换上述代码中的 c0, k0, alpha, A, beta, gamma。通常这类模型的拟合效果如下图所示滞回曲线F ^ | /\ | / \ | / \------|/------____ x这个模型的逻辑是输入一个激励信号波形发生器。信号经过一个微分模块frac{Delta u}{Delta t}这通常代表加速度如果是位移输入或直接代表控制电压的变化率。位移信号和处理后的信号加速度或电压输入到一个封装的阻尼器模块中。模块输出阻尼力。Simulink 模型配置说明在搭建 Simulink 模型时你需要以下模块输入端Sine Wave 或 From Workspace。微分使用 Derivative 模块注意Simulink 的 Derivative 模块在仿真中可能不稳定建议用 Transfer Fcn s/(s1e-3) 代替。核心计算使用 MATLAB Function 模块代码如下。积分器为了得到“位移”你需要在输入信号后串联一个 Integrator 模块。微分器为了得到“速度”你需要将位移信号通过一个 Derivative 模块。MATLAB Function 代码 (Bouc-Wen 模型)这段代码实现了经典的 Bouc-Wen 模型输入为位移和电流输出为阻尼力。它会自动计算内部状态变量 z。function Fmr fcn(x, dx, i)% fcn - 磁流变阻尼器 Bouc-Wen 模型% 输入:% x : 位移 (m)% dx : 速度 (m/s)% i : 控制电流 (A)% 输出:% Fmr: 阻尼力 (N)% % 1. 参数初始化 (请根据你的论文或实验数据修改)% % 力学参数 (线性部分)c0 1500; % 油孔阻尼系数 (Ns/m)k0 1000; % 油孔刚度系数 (N/m)% Bouc-Wen 磁滞参数A 1.0; % 幅值参数 (无量纲)beta 0.5; % 磁滞形状参数gamma 0.5; % 磁滞形状参数n 2; % 光滑度参数 (通常取 1 或 2)alpha 1e5; % 磁滞刚度增益 (N/m)% 电流相关增益 (假设力与电流线性相关也可用非线性函数)% 这里假设电流从 0 到 2A力从 0 到 2000Nk_i 1000 * i;% % 2. 状态变量 z 的微分方程 (Bouc-Wen 核心)% dz/dt dx - beta|dx|z|^nsgn(z) - gammdx|z|^n% % 注意这里使用 persistent 变量来存储上一时刻的 z 值% 在 Simulink 中更推荐使用 “State” 定义或在 Simulink 层面使用 Integrator% 由于 MATLAB Function 无法直接积分这里演示计算 dzdt% 实际使用时你需要在 Simulink 中用 Integrator 积分 dzdt 得到 z% 这里为了完整性假设我们已经有了 z (在复杂模型中z 是状态变量)% 假设 z 是上一时刻的值简化演示实际需用 Integrator% 在真实模型中dzdt 应该连接到 Integrator输出 z 再反馈回来persistent z_valif isempty(z_val)z_val 0; % 初始状态end% 计算 dzdtabs_dx abs(dx);abs_z abs(z_val);sgn_z sign(z_val);dzdt A * dx - beta * abs_dx * (abs_z^n) * sgn_z - gamma * dx * (abs_z^n);% 更新 z (欧拉法近似实际用 Simulink Integrator 更好)% z_val z_val dzdt * dt; % (Simulink 会自动处理积分)% 这里我们假设 z_val 已经由外部积分器提供或者我们简单更新% 为了演示我们直接计算 z (仅用于测试)% 实际部署时请移除此行改为输入端口输入 zz_val z_val dzdt * 0.001;% % 3. 计算阻尼力 Fmr% % Fmr cdx k0x alpha*z k_i * (非线性项)% 简化版本考虑电流对刚度的影响Fmr c0 * dx k0 * x alpha * z_val k_i * z_val;end搭建建议积分器处理Bouc-Wen 模型中的 z 是一个状态变量dot{z} f(x, dot{x})。在 Simulink 中不要在 MATLAB Function 里用 persistent 变量做积分那样精度低且不稳定。正确做法在 Simulink 层面使用一个 Integrator 模块。输入是上面代码中的 dzdt输出是 z。然后将 z 反馈回 MATLAB Function 或用于力的计算。微分模块图中的 frac{Delta u}{Delta t} 如果是位移信号则代表加速度。在 Simulink 中直接用 Derivative 模块即可但要注意噪声问题。输入信号图中的波形发生器通常是正弦波Sine Wave用于模拟路面激励或振动台输入。完整的 Simulink 连接逻辑Sine Wave (幅值 0.01m, 频率 1Hz) - Integrator (得到位移 x)。Integrator 输出 - Derivative (得到速度 dx)。Constant (电流 0~2A) - 输入到阻尼器模块。位移 x 和 速度 dx 以及 电流 - 输入到 MATLAB Function (即上面的代码)。MATLAB Function 输出 力 Fmr - Scope。