转子分段,谐响应分析
转子系统作为旋转机械的核心部件,它的振动特性直接影响设备寿命。最近在帮工厂优化离心压缩机时,发现传统整体式转子的设计遇到瓶颈——高速旋转时总在特定转速区间出现剧烈振动。这时候就需要把转子拆分成若干段来分析,找出哪截儿是振动源。
举个实际例子,假设我们把一根长轴切成三段,每段材质不同。用Python做个简化模型验证思路。先导入必要的库:
import numpy as np from scipy.linalg import eigh import matplotlib.pyplot as plt L = [0.8, 1.2, 0.9] # 三段长度(m) m = [15, 20, 18] # 质量(kg) k = [2e6, 1.8e6, 2.2e6] # 刚度(N/m) damping_ratio = 0.02 # 阻尼比这里的刚度矩阵构建是关键。想象每段转子像用弹簧连接的积木,当某段刚度不足就容易成为薄弱环节:
# 组装刚度矩阵 K = np.zeros((3,3)) for i in range(3): K[i,i] = k[i] if i < 2: K[i,i+1] = -k[i] K[i+1,i] = -k[i] # 质量矩阵对角化 M = np.diag(m)接下来计算固有频率时,要注意阻尼的影响。很多教材会忽略这点,但实际设备都有能量损耗:
# 求解特征值 omega_n, phi = eigh(K, M) f_natural = np.sqrt(omega_n)/(2*np.pi) # 转换为Hz # 添加阻尼 C = damping_ratio * (2 * np.sqrt(np.outer(M.diagonal(), M.diagonal()) * omega_n))谐响应分析的核心是扫频计算。这里用正弦扫频法,观察特定频率下的振幅突变:
freq_range = np.linspace(0.8*f_natural.min(), 1.2*f_natural.max(), 500) amplitude = [] for f in freq_range: omega = 2 * np.pi * f dynamic_matrix = K - (omega**2)*M + 1j*omega*C response = np.linalg.solve(dynamic_matrix, np.array([10, 0, 0])) # 假设第一段受激振力 amplitude.append(np.abs(response[1])) # 观察中间段响应 plt.plot(freq_range, amplitude) plt.scatter(f_natural, [max(amplitude)]*3, c='red') # 标出固有频率 plt.xlabel('Frequency (Hz)') plt.ylabel('Amplitude (m/N)') plt.grid(True)跑出来的曲线会在固有频率处出现峰值,如果某段的响应幅值明显过高,就需要针对该段做结构强化。有个反直觉的现象是:有时增加局部刚度反而会改变系统振动模态,需要反复迭代计算。
实际工程中还可能遇到更复杂的情况,比如螺栓连接处的非线性刚度。这时候可以把连接段单独建模,在代码里引入非线性项。不过对于初步分析,线性模型已经能解决80%的问题。关键是要根据响应云图找到振动传递路径,这才是分段分析的价值所在。