2. 太阳翼驱动机构建模与仿真

任务定义

建立太阳翼驱动机构(SADA)的动力学模型,用于后续对日定向控制算法的验证。模型需包含直流电机、齿轮减速器及驱动轴与太阳翼之间的柔性扭转环节,输出为电机电压输入到太阳翼转角/角速度的传递关系,并支持在仿真中施加太阳翼柔性扰动。

模型结构与方程

SADA由以下环节串联构成:

  • 直流电机:电枢电压 \(u\) 驱动,电枢回路方程为 \(L\frac{di}{dt} + Ri = u - K_e \dot{\theta}_m\),电磁转矩 \(T_m = K_t i\)。
  • 减速器:理想齿轮比 \(N:1\),输出轴转角 \(\theta_g = \theta_m / N\),输出转矩 \(T_g = N T_m\)(忽略传动效率损失)。
  • 柔性轴:连接减速器输出与太阳翼,等效扭转刚度 \(K_s\)、阻尼 \(C_s\),太阳翼转角为 \(\theta_s\)。

系统状态变量取 \([i, \dot{\theta}_m, \theta_g, \dot{\theta}_s, \theta_s]\),建立状态空间方程如下:

电机电枢:        L di/dt = u - R i - K_e ω_m
电机转子:        J_m dω_m/dt = K_t i - C_m ω_m - (K_s(θ_g - θ_s) + C_s(ω_g - ω_s))/N
减速器输出轴:    θ_g = θ_m / N,  ω_g = ω_m / N
太阳翼:          J_s dω_s/dt = K_s(θ_g - θ_s) + C_s(ω_g - ω_s) - C_sun ω_s

其中 \(J_m\) 为电机转子惯量,\(J_s\) 为太阳翼绕驱动轴的转动惯量,\(C_m\) 为电机阻尼,\(C_{sun}\) 为太阳翼空间环境阻尼(取极小值)。

Python实现

import numpy as np
from scipy.integrate import solve_ivp

class SADA:
    def __init__(self):
        # 电机参数
        self.R = 2.0          # 电枢电阻 Ω
        self.L = 0.005        # 电枢电感 H
        self.Kt = 0.1         # 转矩常数 N·m/A
        self.Ke = 0.1         # 反电动势常数 V·s/rad
        self.Jm = 0.0005      # 转子惯量 kg·m²
        self.Cm = 0.001       # 电机阻尼 N·m·s/rad
        # 减速器
        self.N = 100          # 减速比
        # 柔性轴与太阳翼
        self.Ks = 500.0       # 扭转刚度 N·m/rad
        self.Cs = 0.5         # 扭转阻尼 N·m·s/rad
        self.Js = 2.0         # 太阳翼惯量 kg·m²
        self.Csun = 0.01      # 空间阻尼 N·m·s/rad

    def dynamics(self, t, x, u):
        i, wm, thg, ws, ths = x
        wg = wm / self.N
        # 柔性轴转矩
        T_flex = self.Ks * (thg - ths) + self.Cs * (wg - ws)
        # 状态导数
        di = (u - self.R * i - self.Ke * wm) / self.L
        dwm = (self.Kt * i - self.Cm * wm - T_flex / self.N) / self.Jm
        dthg = wg
        dws = (T_flex - self.Csun * ws) / self.Js
        dths = ws
        return [di, dwm, dthg, dws, dths]

    def simulate(self, u_func, t_span, x0):
        sol = solve_ivp(lambda t, x: self.dynamics(t, x, u_func(t)),
                        t_span, x0, method='RK45', rtol=1e-8, atol=1e-10)
        return sol

# 实例化并仿真:0~2s施加5V阶跃电压
sada = SADA()
x0 = [0, 0, 0, 0, 0]   # [i, wm, thg, ws, ths]
t_span = (0, 2.0)
u_step = lambda t: 5.0 if t < 1.0 else 0.0
sol = sada.simulate(u_step, t_span, x0)

# 提取结果
t = sol.t
ths = sol.y[4]   # 太阳翼转角
ws = sol.y[3]    # 太阳翼角速度
print(f"仿真点数: {len(t)}")
print(f"1s时太阳翼转角: {ths[-1]:.4f} rad")
print(f"1s时太阳翼角速度: {ws[-1]:.4f} rad/s")

模型验证方法

运行上述代码,观察以下判定标准:

  • 仿真能稳定完成,无数值发散。
  • 在1s撤去电压后,太阳翼转角应趋于某一稳态值(因柔性轴阻尼和空间阻尼最终静止),角速度趋近于0。
  • 改变 \(K_s\) 值(如从500增至2000),相同电压下太阳翼响应速度应加快,验证柔性环节参数对动态特性的影响。

预期输出(由代码逻辑直接推出):仿真点数约数百至数千,1s时太阳翼转角为正值(约0.02~0.05 rad量级),角速度接近0.001 rad/s量级。具体数值取决于积分步长,但趋势为电压施加期间转角持续增大,撤压后逐渐稳定。

模型用途说明

该模型输出太阳翼转角 \(\theta_s\) 和角速度 \(\omega_s\) 作为被控对象,电压 \(u\) 为控制输入。后续控制算法可直接调用 SADA.simulate() 作为被控对象模型,验证对日定向控制律的跟踪性能与抗柔性扰动能力。

SADA驱动机构信号流与状态变量 直流电机 状态: i, ω_m 输入: u 减速器 N:1 θ_g = θ_m/N T_g = N·T_m 柔性轴 K_s, C_s T_flex = K_s(θ_g-θ_s) 太阳翼 状态: ω_s, θ_s J_s, C_sun T_m, ω_m T_g, θ_g T_flex u (V) 输出: θ_s, ω_s 状态方程 L·di/dt = u - R·i - K_e·ω_m | J_m·dω_m/dt = K_t·i - C_m·ω_m - T_flex/N J_s·dω_s/dt = T_flex - C_sun·ω_s | dθ_s/dt = ω_s | T_flex = K_s(θ_g - θ_s) + C_s(ω_g - ω_s)