第二章 单自由度系统:运动方程建立、自由振动与阻尼、简谐激励下的响应分析

各位工程师朋友,大家好。欢迎来到《结构振动抑制》的第二讲。

今天咱们聊点最基础、也最核心的东西——单自由度系统。你别看它简单,我做了十几年振动控制,遇到的实际工程问题,十有八九最后都能简化成这个模型来思考。说白了,它就是振动世界的“九九乘法表”,不把这个吃透,后面多自由度、连续体那些东西,你学起来会非常吃力。

好,咱们直接进入正题。

2.1 运动方程的建立——从牛顿到拉格朗日

先问一个问题:一个振动系统,怎么用数学描述它?

我个人习惯,首选牛顿第二定律。你看下面这个图,一个质量块m,一根弹簧k,一个阻尼器c,外加一个外力F(t)。这就是最经典的单自由度系统。

m F(t) x(t) 弹簧 k 阻尼 c

对质量块做受力分析:弹簧力kx(t)向左拉,阻尼力cẋ(t)也向左拽,外力F(t)向右推。根据牛顿第二定律,合力等于质量乘以加速度:

mẍ(t) + cẋ(t) + kx(t) = F(t)

这就是单自由度系统的运动方程。一个二阶常微分方程,干净利落。

我的小经验: 在实际项目中,我很少直接用牛顿法去推复杂系统的方程,太容易漏力了。我建议你用拉格朗日方程,尤其是多自由度系统。拉格朗日法只关心动能T和势能U,不用管那些乱七八糟的约束力,写代码建模时特别方便。

拉格朗日方程长这样:

d/dt(∂L/∂ẋ) - ∂L/∂x = Q

其中L = T - U,Q是非保守力(比如阻尼力、外力)。对于咱们这个系统,T = ½mẋ²,U = ½kx²,Q = F(t) - cẋ。代入一算,结果跟牛顿法一模一样。

2.2 自由振动与阻尼——系统自己的“脾气”

好,现在把外力撤掉,让系统自己玩。方程变成:

mẍ + cẋ + kx = 0

这就是自由振动。系统会怎么动?完全取决于阻尼c的大小。

我定义一个参数——阻尼比ζ:

ζ = c / (2√(mk))

这个ζ,说白了就是衡量系统“有多想停下来”。

阻尼比 ζ 类型 运动特点 工程实例
ζ = 0 无阻尼 永远振动下去,振幅不变 理想情况,现实中不存在
0 < ζ < 1 欠阻尼 振幅逐渐衰减,来回振荡 大多数结构(桥梁、建筑)
ζ = 1 临界阻尼 最快回到平衡位置,不振荡 精密仪器、指针式仪表
ζ > 1 过阻尼 缓慢回到平衡位置,不振荡 某些重型机械底座
重点来了: 欠阻尼系统的自由振动解是:

x(t) = X₀e^(-ζωₙt) · sin(ωₙ√(1-ζ²)t + φ)

其中ωₙ = √(k/m) 是无阻尼固有频率。注意那个指数项e^(-ζωₙt),它决定了振幅衰减的速度。

我在项目中遇到过一件事。有一次给一个精密平台做减振设计,我算出来阻尼比大概0.02,觉得还行。结果现场一测,振动衰减得特别慢,操作员等半天才能开始下一个工序。后来我加了粘滞阻尼器,把阻尼比提到0.15,效果立竿见影。嗯,这就是理论到实践的差距——有时候你觉得“差不多”,现场会给你上一课。

2.3 简谐激励下的响应——共振是怎么来的

现在加上外力,而且是简谐力:F(t) = F₀sin(ωt)。

方程变成:

mẍ + cẋ + kx = F₀sin(ωt)

这个方程的解由两部分组成:通解(自由振动) + 特解(强迫振动)。通解会随时间衰减掉,我们关心的是稳态响应,也就是特解部分。

稳态响应也是简谐的,频率跟激励频率ω一样,但会有相位差:

x(t) = X · sin(ωt - θ)

振幅X和相位θ怎么算?直接上公式:

X = F₀ / √((k - mω²)² + (cω)²)

θ = arctan(cω / (k - mω²))

你想想看,当激励频率ω接近系统的固有频率ωₙ时,分母中的(k - mω²)趋近于0,振幅X会变得非常大。这就是共振。

我曾经踩过的坑: 有一次做风机基础振动分析,我算出来共振频率在12Hz,觉得跟风机工作频率15Hz差得远,没问题。结果安装后振动超标。一查才发现,我忽略了地基的柔性——实际系统刚度比计算值低了20%,共振频率掉到了13.5Hz,离工作频率太近了。从那以后,我每次做分析都会留至少30%的安全裕度,而且一定要做现场模态测试验证。

为了更直观地理解,我引入一个无量纲参数——放大因子β:

β = X / (F₀/k) = 1 / √((1 - r²)² + (2ζr)²)

其中r = ω/ωₙ是频率比。F₀/k是静位移,也就是如果力慢慢加上去,系统会移动多少。β就是动态放大倍数。

你看下面这个图,不同阻尼比下,β随r的变化:

频率比 r = ω/ωₙ 放大因子 β ζ=0.05 ζ=0.15 ζ=0.3 ζ=0.7 r=1

从图上能看出几个关键点:

  • r << 1(低频区): β ≈ 1,响应跟静位移差不多。说白了,力变化太慢,系统跟得上。
  • r ≈ 1(共振区): β达到峰值,阻尼越小峰值越高。ζ=0.05时β能到10以上。
  • r >> 1(高频区): β趋近于0,系统来不及响应。这就是为什么高频振动往往影响不大。
实用技巧: 如果你想快速估算一个系统的共振峰值,可以用这个近似公式:β_max ≈ 1/(2ζ)。比如阻尼比0.05,共振放大倍数大约10倍。我经常用这个公式做初步判断——如果算出来β太大,就得考虑加阻尼或者调频率了。

最后,咱们用Python写个小程序,把上面的东西串起来。你可以在自己的电脑上跑一下,改改参数看看效果。

import numpy as np
import matplotlib.pyplot as plt

# 系统参数
m = 1.0      # 质量 kg
k = 100.0    # 刚度 N/m
c = 2.0      # 阻尼 N·s/m

# 计算参数
wn = np.sqrt(k/m)          # 固有频率 rad/s
zeta = c / (2*np.sqrt(m*k)) # 阻尼比
print(f"固有频率: {wn:.2f} rad/s, 阻尼比: {zeta:.3f}")

# 频率范围
r = np.linspace(0.1, 3.0, 500)
w = r * wn

# 放大因子
beta = 1.0 / np.sqrt((1 - r**2)**2 + (2*zeta*r)**2)

# 相位
theta = np.arctan2(2*zeta*r, 1 - r**2)

# 绘图
plt.figure(figsize=(10, 4))
plt.subplot(1,2,1)
plt.plot(r, beta, 'b-', linewidth=2)
plt.xlabel('频率比 r')
plt.ylabel('放大因子 β')
plt.grid(True)
plt.title('幅频特性曲线')

plt.subplot(1,2,2)
plt.plot(r, theta*180/np.pi, 'r-', linewidth=2)
plt.xlabel('频率比 r')
plt.ylabel('相位角 θ (度)')
plt.grid(True)
plt.title('相频特性曲线')
plt.tight_layout()
plt.show()

运行这段代码,你会看到幅频曲线在r=1附近有个尖峰,相位从0°逐渐变到180°,在r=1时正好90°。这就是单自由度系统的全部秘密。

好了,这一章的内容就到这里。运动方程、自由振动、简谐响应——这三块是振动分析的基石。你把这些搞明白了,后面多自由度系统、连续体、随机振动,都是在这个基础上加加减减。

记住我的一句话:振动控制,本质上就是跟能量较劲。 要么把能量耗散掉(加阻尼),要么让能量进不来(隔振),要么让系统避开能量集中的频率(调频)。万变不离其宗。


公众号:蓝海资料掘金营,微信deep3321