1. 倾转机构动力学建模基础

倾转机构动力学建模基础 学习卡片

任务说明

本案例针对eVTOL倾转机构中的典型单通道倾转单元,建立可用于后续控制策略仿真的简化动力学模型。模型包含直流无刷电机电枢动态、减速器扭矩放大与摩擦损失、倾转臂负载转动惯量三部分,输出以倾转角度为状态变量的二阶微分方程,并给出可直接用于数值仿真的Python实现。

模型建立

设倾转臂绕转轴的转动惯量为\(J_L\),减速器减速比为\(N\)(\(N>1\)),电机转子惯量折算到负载侧后,等效总惯量为:

\[ J_{eq} = J_L + N^2 J_m \]

电机电枢回路方程为:

\[ L_a \frac{di_a}{dt} + R_a i_a + K_e \dot{\theta}_m = V_a \]

其中\(\theta_m = N \theta\)为电机轴转角,\(\theta\)为倾转臂输出角。电机电磁转矩\(T_m = K_t i_a\),经减速器后输出轴扭矩为:

\[ T_{out} = N T_m - T_f \]

\(T_f\)为减速器等效摩擦扭矩(含库仑与粘性项)。负载侧转动方程为:

\[ J_{eq} \ddot{\theta} + B_{eq} \dot{\theta} + T_g(\theta) = T_{out} \]

其中\(B_{eq}\)为折算到负载侧的粘性阻尼系数,\(T_g(\theta)\)为重力矩(倾转臂偏离水平位置时产生)。将上述方程联立,取状态变量\([x_1, x_2, x_3] = [\theta, \dot{\theta}, i_a]\),得到状态空间模型。

Python实现

import numpy as np
from scipy.integrate import solve_ivp

# 模型参数(单位:SI)
params = {
    'J_L': 0.8,      # 倾转臂转动惯量 kg·m²
    'J_m': 0.0002,   # 电机转子惯量 kg·m²
    'N': 50,         # 减速比
    'R_a': 0.5,      # 电枢电阻 Ω
    'L_a': 0.001,    # 电枢电感 H
    'K_t': 0.05,     # 扭矩常数 N·m/A
    'K_e': 0.05,     # 反电动势常数 V·s/rad
    'B_eq': 0.01,    # 等效粘性阻尼 N·m·s/rad
    'T_f': 0.5,      # 库仑摩擦扭矩 N·m
    'm_arm': 3.0,    # 倾转臂质量 kg
    'g': 9.81,
    'L_cg': 0.25     # 质心到转轴距离 m
}

def gravity_torque(theta):
    """重力矩:theta=0为水平位置"""
    return params['m_arm'] * params['g'] * params['L_cg'] * np.cos(theta)

def dynamics(t, x, V_a):
    theta, omega, i_a = x
    N = params['N']
    J_eq = params['J_L'] + N**2 * params['J_m']
    
    # 电机电枢电流动态
    di_a = (V_a - params['R_a']*i_a - params['K_e']*N*omega) / params['L_a']
    
    # 电机电磁转矩
    T_m = params['K_t'] * i_a
    
    # 输出轴扭矩(含摩擦)
    T_out = N * T_m - params['T_f'] * np.sign(omega) - params['B_eq']*omega
    
    # 负载角加速度
    domega = (T_out - gravity_torque(theta)) / J_eq
    
    return [omega, domega, di_a]

# 仿真参数
t_span = (0, 5.0)
t_eval = np.linspace(0, 5.0, 1000)
x0 = [0.0, 0.0, 0.0]  # 初始角度0rad,静止

# 阶跃电压输入:0-1s为0V,1s后为12V
def V_input(t):
    return 12.0 if t >= 1.0 else 0.0

# 数值积分
sol = solve_ivp(lambda t, x: dynamics(t, x, V_input(t)), 
                t_span, x0, t_eval=t_eval, method='RK45')

# 提取结果
theta = sol.y[0]
omega = sol.y[1]
i_a = sol.y[2]
time = sol.t

模型验证方法

运行上述代码后,通过以下观测点验证模型正确性:

  • 静态平衡验证:将电压设为0,初始角度设为0.2 rad,观察倾转臂应在重力矩作用下回到水平位置(θ→0)并因阻尼而停止;
  • 阶跃响应验证:施加12V阶跃电压后,倾转角度应持续增大(电机驱动倾转),电流先上升后随反电动势增大而回落;
  • 单位一致性检查:确认\(J_{eq}\)量纲为kg·m²,\(T_{out}\)量纲为N·m,角加速度量纲为rad/s²。

判定标准:若在零输入下倾转角最终稳定在0 rad(误差<0.01 rad),且阶跃输入下角度单调增加、电流曲线无发散振荡,则模型通过验证,可用于后续控制策略仿真。

倾转机构动力学模型结构 直流电机 电枢回路 + 电磁转矩 减速器 减速比 N=50 倾转臂负载 惯量 + 重力矩 T_m, ω_m T_out, ω V_a (输入) θ (输出) 反电动势反馈: K_e·N·ω J_eq·θ̈ + B_eq·θ̇ + T_g(θ) = N·K_t·i_a − T_f·sign(θ̇) J_eq = J_L + N²·J_m

落地与运行说明

本案例代码为独立Python脚本,依赖numpy和scipy。将代码保存为tilt_dynamics.py后,在Python 3.8+环境中执行python tilt_dynamics.py即可完成仿真。代码运行后变量theta、omega、i_a保存了完整时间序列,可直接用于绘图或作为后续控制律设计的被控对象模型。模型参数集中于params字典,便于后续案例调整参数进行控制策略对比。