3. 直流电机转速-电流双变量孪生模型构建

直流电机转速-电流双变量孪生模型构建 学习卡片

双变量耦合模型的结构与信号流

直流电机的数字孪生体需要同时跟踪两个状态量:电枢电流 i 与转子角速度 ω。二者通过电磁转矩 Te = Kt·i 与反电动势 e = Ke·ω 双向耦合,因此不能拆成两个独立的一阶模型分别辨识,必须联立求解。

电气侧方程(电枢回路):

di/dt = (U - R·i - Ke·ω) / L

机械侧方程(转子动力学):

dω/dt = (Kt·i - B·ω - TL) / J

其中 U 为实测电枢电压,TL 为负载转矩,R、L 为电枢电阻与电感,J、B 为转动惯量与粘性阻尼系数,Kt、Ke 在 SI 单位制下数值相等(Kt = Ke = K)。

直流电机双变量孪生模型:电气-机械耦合信号流 实测电压 U 数据接入 负载转矩 TL 数据接入 电气方程 di/dt = (U − R·i − Ke·ω)/L 状态量:i 机械方程 dω/dt = (Kt·i − B·ω − TL)/J 状态量:ω Te = Kt·i 电磁转矩耦合 e = Ke·ω 反电动势耦合 联立求解 RK4 / 定步长 步长 h 仿真 i(t) 对比实测 仿真 ω(t) 对比实测 模型参数(需辨识/给定) R, L, Kt=Ke=K, J, B 初始条件:i(0), ω(0)

数值求解与实测数据接入

采用四阶龙格-库塔法对上述耦合方程组进行定步长积分。以下 Python 代码实现完整的双变量孪生模型,并接入实测电压序列与负载转矩序列,输出仿真转速与电流,最后与实测值计算动态偏差。

import numpy as np

# ---- 电机参数(示例值,需根据实际电机铭牌或辨识获得)----
R  = 1.2      # 电枢电阻 (Ohm)
L  = 0.005    # 电枢电感 (H)
K  = 0.052    # 转矩常数 = 反电动势常数 (N·m/A = V·s/rad)
J  = 2.1e-5   # 转动惯量 (kg·m^2)
B  = 1.5e-6   # 粘性阻尼系数 (N·m·s/rad)

# ---- 仿真设置 ----
h    = 1e-4   # 积分步长 (s)
T    = 0.5    # 仿真总时长 (s)
N    = int(T / h)
t    = np.arange(N) * h

# ---- 实测输入序列(示例:阶跃电压 + 阶跃负载)----
U_meas = np.where(t < 0.1, 0.0, 12.0)          # 0.1s 时突加 12V
TL_meas = np.where(t < 0.3, 0.0, 0.008)        # 0.3s 时突加 8mN·m 负载

# ---- 状态导数函数 ----
def derivatives(i, w, U, TL):
    di = (U - R * i - K * w) / L
    dw = (K * i - B * w - TL) / J
    return di, dw

# ---- RK4 主循环 ----
i = np.zeros(N)
w = np.zeros(N)
i[0], w[0] = 0.0, 0.0

for k in range(N - 1):
    U_k, TL_k = U_meas[k], TL_meas[k]
    k1_i, k1_w = derivatives(i[k], w[k], U_k, TL_k)
    k2_i, k2_w = derivatives(i[k] + 0.5*h*k1_i, w[k] + 0.5*h*k1_w, U_k, TL_k)
    k3_i, k3_w = derivatives(i[k] + 0.5*h*k2_i, w[k] + 0.5*h*k2_w, U_k, TL_k)
    k4_i, k4_w = derivatives(i[k] + h*k3_i, w[k] + h*k3_w, U_k, TL_k)
    i[k+1] = i[k] + (h/6.0) * (k1_i + 2*k2_i + 2*k3_i + k4_i)
    w[k+1] = w[k] + (h/6.0) * (k1_w + 2*k2_w + 2*k3_w + k4_w)

# ---- 与实测值对比(此处用仿真值加噪声模拟实测,实际应替换为真实采集数据)----
np.random.seed(42)
i_meas = i + np.random.normal(0, 0.02, N)      # 电流实测(含噪声)
w_meas = w + np.random.normal(0, 1.5, N)       # 转速实测(含噪声)

# ---- 动态偏差指标 ----
err_i = i - i_meas
err_w = w - w_meas
rmse_i = np.sqrt(np.mean(err_i**2))
rmse_w = np.sqrt(np.mean(err_w**2))
max_i  = np.max(np.abs(err_i))
max_w  = np.max(np.abs(err_w))

print(f"电流 RMSE = {rmse_i:.4f} A, 最大偏差 = {max_i:.4f} A")
print(f"转速 RMSE = {rmse_w:.4f} rad/s, 最大偏差 = {max_w:.4f} rad/s")

结果判读与偏差分析

运行上述代码后,重点关注两个时间节点:t=0.1s 电压突加时电流的上升速率与峰值,以及 t=0.3s 负载突加时转速的跌落幅度与恢复时间。若电流 RMSE 明显大于转速 RMSE,通常说明电枢电感 L 或电阻 R 的给定值与实际不符;若转速在负载突加后恢复过慢,则应检查 J 与 B 的取值。

观察量物理含义偏差偏大时的排查方向
电流上升沿斜率电气时间常数 τe = L/RL 偏大或 R 偏小
电流稳态值稳态时 i ≈ (U − K·ω)/RR 或 K 不准确
转速跌落深度负载转矩对转速的瞬时影响J 偏小或 TL 接入时刻不同步
转速恢复时间机械时间常数 τm = J·R/(K² + B·R)J、B 或 K 需重新辨识
若实测数据采样周期大于积分步长 h,应对实测输入做零阶保持或线性插值,避免因输入更新不及时引入额外偏差。