第二章 单自由度系统:运动方程建立、自由振动与阻尼、简谐激励下的响应分析
各位工程师朋友,大家好。欢迎来到《结构振动抑制》的第二讲。
今天咱们聊点最基础、也最核心的东西——单自由度系统。你别看它简单,我做了十几年振动控制,遇到的实际工程问题,十有八九最后都能简化成这个模型来思考。说白了,它就是振动世界的“九九乘法表”,不把这个吃透,后面多自由度、连续体那些东西,你学起来会非常吃力。
好,咱们直接进入正题。
2.1 运动方程的建立——从牛顿到拉格朗日
先问一个问题:一个振动系统,怎么用数学描述它?
我个人习惯,首选牛顿第二定律。你看下面这个图,一个质量块m,一根弹簧k,一个阻尼器c,外加一个外力F(t)。这就是最经典的单自由度系统。
对质量块做受力分析:弹簧力kx(t)向左拉,阻尼力cẋ(t)也向左拽,外力F(t)向右推。根据牛顿第二定律,合力等于质量乘以加速度:
mẍ(t) + cẋ(t) + kx(t) = F(t)
这就是单自由度系统的运动方程。一个二阶常微分方程,干净利落。
拉格朗日方程长这样:
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会变得非常大。这就是共振。
为了更直观地理解,我引入一个无量纲参数——放大因子β:
β = X / (F₀/k) = 1 / √((1 - r²)² + (2ζr)²)
其中r = ω/ωₙ是频率比。F₀/k是静位移,也就是如果力慢慢加上去,系统会移动多少。β就是动态放大倍数。
你看下面这个图,不同阻尼比下,β随r的变化:
从图上能看出几个关键点:
- r << 1(低频区): β ≈ 1,响应跟静位移差不多。说白了,力变化太慢,系统跟得上。
- r ≈ 1(共振区): β达到峰值,阻尼越小峰值越高。ζ=0.05时β能到10以上。
- r >> 1(高频区): β趋近于0,系统来不及响应。这就是为什么高频振动往往影响不大。
最后,咱们用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