三、控制策略总体设计
好,咱们进入正题。控制策略的总体设计,说白了就是回答三个问题:用什么感知、谁来执行、怎么控制。我做了十几年航天机构控制,每次新项目启动,团队里最容易吵架的就是这一块。你想想看,太阳翼要是打不开,整个卫星就成了废铁,这压力可不小。
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 混合模式(我推荐的做法)
实际工程中,我很少只用一种模式。我的典型策略是:
- 开环启动:先以固定速度展开到80%位置。速度快,效率高。
- 闭环减速:进入最后20%行程,切换为闭环控制。用PID缓慢减速,避免冲击。
- 到位锁定:检测到到位信号后,立即停止驱动,并保持锁定力矩。
你想想看,这样既保证了展开速度,又保证了到位精度,还避免了冲击。一举三得。
混合模式伪代码:
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 总结一下
控制策略总体设计,我建议你记住三个关键词:冗余、隔离、混合。传感器要冗余,电路要隔离,控制模式要混合。别想着一个方案打天下,航天工程里没有银弹。
嗯,下一章我们会深入讲展开时序设计,包括怎么安排各个动作的先后顺序、时间窗口怎么算。到时候我会拿一个真实项目的时序图出来讲,保证干货满满。