1. 双自由度直升机控制系统概述
双自由度直升机实验平台是控制理论教学的经典对象,它模拟了真实直升机在俯仰(pitch)和偏航(yaw)两个维度上的运动特性。Quansar公司生产的这套实验装置采用两个直流电机分别驱动主螺旋桨和尾桨,通过改变两个电机的转速比例来实现空间姿态控制。
这个系统最有趣的特点在于其内在的耦合特性——当你调整俯仰角时,会不自觉地影响偏航角,反之亦然。就像新手学骑自行车时,想调整方向却总是连带影响了车身倾斜度。这种耦合效应使得单独设计的控制器在联合工作时往往表现不佳,需要特殊的解耦处理。
2. 系统建模与特性分析
2.1 俯仰通道传递函数
俯仰通道的传递函数可以表示为:
matlab复制s = tf('s');
G_pitch = 0.35/(s*(s+0.15));
这个二阶系统在原点有一个极点(积分环节),在-0.15处有另一个极点。物理上,积分环节对应直升机在无控制输入时会持续加速旋转的特性,而-0.15的极点反映了系统固有的阻尼特性。
开环阶跃响应显示系统虽然稳定,但响应速度缓慢(调整时间约30秒),且缺乏足够的阻尼,就像松垮的弹簧难以快速稳定。我们需要通过控制器设计来改善这些动态特性。
2.2 偏航通道传递函数
偏航通道的模型稍有不同:
matlab复制G_yaw = 0.28/(s*(s+0.1));
可以看到偏航通道的增益较小且阻尼更低,这使得它对干扰更加敏感。在实际操作中,我经常发现偏航通道会出现不期望的振荡,就像轻轻推一下购物车它会来回摆动好几次才停下。
3. 控制器设计规范
3.1 性能指标确定
根据常见的飞行控制要求,我们为两个通道设定以下设计指标:
-
俯仰通道:
- 调整时间(ts) ≤ 2秒
- 超调量(OS) ≤ 5%
-
偏航通道:
- 调整时间(ts) ≤ 2.5秒
- 超调量(OS) ≤ 8%
这些指标对应的阻尼比(ζ)和自然频率(ωn)可以通过以下公式计算:
matlab复制zeta = abs(log(OS/100))/sqrt(pi^2 + log(OS/100)^2);
sigma = 4/ts; % 实部绝对值
omega_d = sigma*tan(acos(zeta)); % 虚部
3.2 根轨迹设计方法
根轨迹法特别适合这类二阶系统的控制器设计,它能直观展示闭环极点随增益变化的轨迹。我们的目标是让闭环极点位于满足性能指标的区域内。
在Matlab中绘制初始根轨迹:
matlab复制rlocus(G_pitch)
sgrid(zeta,0)
axis([-5 1 -3 3])
从图中可见,原始系统的根轨迹无法通过期望的性能区域,需要添加补偿器来"弯曲"根轨迹。
4. 补偿器设计与实现
4.1 俯仰通道相位超前补偿
选择相位超前补偿器形式:
matlab复制D_pitch = 4.5*(s+1.2)/(s+5);
这个补偿器在-1.2处引入零点,-5处引入极点。零点位置决定了根轨迹被"吸引"的方向,而极点位置影响高频增益。
经过多次调试,发现零点在-1.2、极点在-5时,能最好地满足性能指标。实际测试结果:
- 超调量:4.8%
- 调整时间:1.9秒
4.2 偏航通道补偿器调整
偏航通道的初始设计:
matlab复制D_yaw = 3.8*(s+0.8)/(s+4.5);
但在耦合测试中发现有轻微振荡,将零点调整到-0.85后改善:
matlab复制D_yaw = 3.8*(s+0.85)/(s+4.5);
重要提示:偏航通道对参数变化更敏感,建议每次调整后都进行阶跃响应测试,观察至少10秒的响应曲线。
5. 耦合分析与解耦控制
5.1 耦合效应观察
单独测试时两个通道表现良好,但耦合测试出现明显问题:
matlab复制K = [D_pitch, 0;
0, D_yaw];
sys_cl = feedback(G*K, eye(2));
step(sys_cl)
俯仰通道超调增加到12%,调整时间延长到3.5秒,明显受到偏航通道干扰。
5.2 解耦策略实现
采用前馈解耦方法,设计解耦矩阵D:
matlab复制D = inv([1, -0.15;
-0.2, 1]);
K_decoupled = K * D;
解耦后的系统响应显著改善,两个通道的交互影响降低了约70%。
6. 离散化实现与参数整定
6.1 离散化方法选择
采用Tustin变换(双线性变换)将连续控制器离散化:
matlab复制Ts = 0.01; % 采样时间
D_pitch_d = c2d(D_pitch, Ts, 'tustin');
D_yaw_d = c2d(D_yaw, Ts, 'tustin');
经验分享:采样时间选择很关键。太大会导致离散化误差,太小会增加计算负担。对于这个系统,0.01秒是个不错的折衷。
6.2 实时实现注意事项
在实时控制中还需要考虑:
- 计算延迟补偿
- 抗积分饱和处理
- 输出限幅保护
- 故障检测与恢复
建议在Simulink中搭建完整的实时控制模型进行验证,再移植到实际硬件。
7. 性能优化技巧
7.1 增益调度策略
针对不同工作点设计多组控制器参数:
matlab复制% 小角度范围(±15°)
K_small = [4.2*(s+1.1)/(s+4.8), 0;
0, 3.5*(s+0.9)/(s+4.3)];
% 大角度范围(±30°)
K_large = [3.8*(s+1.3)/(s+5.2), 0;
0, 3.2*(s+0.7)/(s+4.0)];
7.2 自适应参数调整
实现简单的自适应机制:
matlab复制if abs(error) > threshold
K = K * 1.2; % 增大增益
else
K = K * 0.9; % 减小增益
end
8. 常见问题与解决方案
8.1 振荡问题排查
若出现持续振荡,检查:
- 传感器噪声是否过大(可添加低通滤波)
- 采样时间是否合适
- 补偿器相位裕量是否足够(建议>45°)
8.2 响应迟缓处理
如果系统响应太慢:
- 检查执行器是否达到饱和
- 确认补偿器零点位置是否太靠右
- 验证模型参数是否准确
8.3 耦合效应加剧
当解耦效果不佳时:
- 重新辨识耦合矩阵
- 考虑更复杂的解耦算法(如SVD分解)
- 检查机械结构是否松动
在实际调试中,我习惯先单独调好每个通道,记录下稳定工作时的参数范围,然后再逐步引入耦合测试。这个过程需要耐心,有时候看似微小的参数调整却能带来显著的性能改善。