三、控制策略总体设计

好,咱们进入正题。控制策略的总体设计,说白了就是回答三个问题:用什么感知、谁来执行、怎么控制。我做了十几年航天机构控制,每次新项目启动,团队里最容易吵架的就是这一块。你想想看,太阳翼要是打不开,整个卫星就成了废铁,这压力可不小。

3.1 控制系统架构

我个人习惯把架构分成三层,这样调试起来思路清晰:

  • 决策层:星载计算机或专用控制模块。负责逻辑判断、时序管理、故障处理。说白了就是大脑。
  • 执行层:电机驱动、火工品起爆电路、电磁阀驱动。负责把电信号变成机械动作。
  • 感知层:各类传感器,负责反馈状态。

我在项目中遇到过一种情况:决策层和执行层放在同一块板子上,结果电机启动时的大电流干扰直接把CPU复位了。嗯,后来我们强制要求光电隔离,从此再没出过这种低级问题。

架构设计要点

  • 决策层与执行层必须电气隔离
  • 关键指令(如火工品起爆)采用双冗余通道
  • 预留至少20%的IO口用于调试和扩展

3.2 传感器配置

传感器就是航天器的眼睛。眼睛瞎了,再好的算法也没用。我一般按功能分三类:

传感器类型典型器件作用我的经验
位置传感器霍尔传感器、微动开关检测展开到位、锁定状态霍尔传感器比微动开关可靠,但成本高
角度传感器电位计、旋转变压器实时监测展开角度电位计有磨损,长寿命任务慎用
电流/电压传感器霍尔电流传感器、分压电阻监测电机堵转、短路这个必须有,我吃过亏

避坑指南:我曾经在一个项目中只用了微动开关作为到位检测。结果发射振动导致开关触点松动,地面测试一切正常,上天后信号时有时无。后来我强制要求:每个到位信号至少用两种不同原理的传感器冗余。比如霍尔+微动开关,或者双霍尔。

3.3 执行机构选型

执行机构的选择,直接决定了太阳翼能不能「啪」一下展开到位。我常用的方案有这几种:

  • 步进电机:适合需要精确角度控制的场景。开环控制就能走得很准。但要注意,步进电机在低速时容易共振,我一般会避开共振区。
  • 直流有刷电机:便宜、控制简单。但电刷会磨损,长寿命任务(比如空间站)不建议用。
  • 火工品(爆炸螺栓/切割器):一次性动作,响应极快。用于解锁和初始展开。嗯,这东西一旦点火就不可逆,所以点火电路必须三取二表决
  • 形状记忆合金(SMA):新型执行器,靠温度驱动。我还没在正式型号上用过,但实验室测试效果不错,适合小载荷。

我的选型口诀

「大功率用直流,精定位用步进,一次性用火工,新方案先验证。」

3.4 控制模式:开环 vs 闭环

这是控制策略的核心。很多人一上来就想着闭环PID,其实没必要。我个人的经验是:能开环就别闭环,必须闭环才闭环。为什么?

3.4.1 开环控制

开环控制,说白了就是「我发指令,你执行,我不看结果」。适合以下场景:

  • 火工品解锁:点火信号一发,必须炸开,不需要反馈。
  • 初始展开阶段:弹簧或电机以固定速度推开,只要机械结构没问题,基本不会出错。
  • 简单到位锁定:电机转到极限位置,靠机械限位停止。

开环控制的优点是简单、可靠、抗干扰能力强。缺点嘛,一旦出现意外(比如卡滞),你完全不知道。

开环控制示例(步进电机)

// 步进电机开环展开控制
void deploy_solar_array_openloop() {
    // 以固定频率发送脉冲
    for (int i = 0; i < TOTAL_STEPS; i++) {
        STEP_PIN = HIGH;
        delayMicroseconds(STEP_DELAY);
        STEP_PIN = LOW;
        delayMicroseconds(STEP_DELAY);
    }
    // 不管结果,直接返回
    return;
}

3.4.2 闭环控制

闭环控制就是「我发指令,你看结果,不对就调整」。适合以下场景:

  • 精确角度控制:比如太阳翼需要停在某个特定角度对日定向。
  • 阻尼展开:防止展开速度过快导致冲击损坏。
  • 故障容错:当检测到卡滞时,自动尝试反向转动或增加力矩。

我常用的闭环策略是位置-速度双环PID。外环控制位置,内环控制速度。这样既保证到位精度,又防止速度过冲。

避坑指南:我曾经在闭环控制中把积分项设得太大,结果电机在到位后反复震荡,就是锁不住。后来我加了积分分离——误差小于阈值时,积分项清零。问题立刻解决。

3.4.3 混合模式(我推荐的做法)

实际工程中,我很少只用一种模式。我的典型策略是:

  1. 开环启动:先以固定速度展开到80%位置。速度快,效率高。
  2. 闭环减速:进入最后20%行程,切换为闭环控制。用PID缓慢减速,避免冲击。
  3. 到位锁定:检测到到位信号后,立即停止驱动,并保持锁定力矩。

你想想看,这样既保证了展开速度,又保证了到位精度,还避免了冲击。一举三得。

混合模式伪代码

void deploy_hybrid() {
    // 阶段1:开环快速展开
    while (current_position < 0.8 * total_angle) {
        step_motor_openloop(FAST_SPEED);
        current_position = read_angle_sensor();
    }
    
    // 阶段2:闭环减速
    while (current_position < 0.95 * total_angle) {
        pid_control(target_speed = SLOW_SPEED);
        current_position = read_angle_sensor();
    }
    
    // 阶段3:到位检测与锁定
    if (read_lock_sensor() == LOCKED) {
        disable_motor();
        engage_mechanical_lock();
    } else {
        // 故障处理:尝试反向转动再试
        retry_deploy();
    }
}

3.5 总结一下

控制策略总体设计,我建议你记住三个关键词:冗余、隔离、混合。传感器要冗余,电路要隔离,控制模式要混合。别想着一个方案打天下,航天工程里没有银弹。

嗯,下一章我们会深入讲展开时序设计,包括怎么安排各个动作的先后顺序、时间窗口怎么算。到时候我会拿一个真实项目的时序图出来讲,保证干货满满。