针对传递函数 G(s) = 1/[(Ts+1)s²] 的ADRC深度设计指南

一、对象特性分析与ADRC设计思路

该传递函数表示一个带惯性环节的二阶积分系统

其核心特性:

低频特性:双积分特性(1/s²),需要速度+位置跟踪

高频特性:一阶惯性环节(1/(Ts+1)),带宽为 1/T rad/s

相对阶:3阶系统(分母3阶,分子0阶)

ADRC设计策略:

二、三阶ADRC控制器设计(推荐方案)

1. 系统方程重构

将原系统改写为:


定义扩张状态

x₁ = y(位置)
x₂ = ẏ(速度)
x₃ = ÿ(加速度)
x₄ = f = -ÿ/T(总扰动和)

则状态方程为:


2. 四阶扩张状态观测器(ESO)设计
// 离散四阶ESO更新方程
void ESO_Update(ADRC_4th *eso, float y, float u) {
    float e = y - eso->x1;
    
    eso->x1 += h * (eso->x2 + 4*wo*e);
    eso->x2 += h * (eso->x3 + 6*powf(wo,2)*e);
    eso->x3 += h * (eso->x4 + 4*powf(wo,3)*e + b0*u);
    eso->x4 += h * (powf(wo,4)*e);  // 关键扰动估计项
}

增益配置(带宽法):


3. 跟踪微分器(TD)设计

采用三阶TD生成平滑指令:

// 三阶最速跟踪微分器
void TD_3rdOrder(TD_3rd *td, float v) {
    float e1 = td->v1 - v;
    float e2 = td->v2;
    float e3 = td->v3;
    
    float u = fhan(e1, e2, e3, td->r, td->h0);
    
    td->v1 += h * td->v2;
    td->v2 += h * td->v3;
    td->v3 += h * u;
}
4. 非线性状态误差反馈(NLSEF)
// 三状态误差反馈
float u0 = 0;
u0 += beta1 * fal(v1 - x1, alpha1, delta);
u0 += beta2 * fal(v2 - x2, alpha2, delta);
u0 += beta3 * fal(v3 - x3, alpha3, delta);

// 扰动补偿
float u = (u0 - x4) * T;  // 注意T的补偿

三、关键参数整定表

参数 物理意义 计算公式 调试建议
ω_o ESO带宽 (5~8)/T 取惯性环节带宽5倍以上
ω_c 控制器带宽 (0.8~1.2)*目标带宽 参考上升时间 Tr≈2.2/ω_c
b₀ 名义增益 1/T 符号必须正确
β₁,β₂,β₃ 误差反馈增益 [ω_c³, 3ω_c², 3ω_c] 阻尼比ζ=1时取值

四、C语言实现核心代码

// 四阶ADRC结构体
typedef struct {
    // ESO状态
    float x1, x2, x3, x4;  
    
    // TD状态
    float v1, v2, v3;
    
    // 参数
    float T;      // 惯性时间常数
    float wo;     // 观测器带宽
    float wc;     // 控制器带宽
    float h;      // 控制周期
} ADRC_3rdOrder;

// 初始化
void ADRC3_Init(ADRC_3rdOrder *c, float T_val, float h_val) {
    c->T = T_val;
    c->h = h_val;
    c->wo = 5.0f / T_val;  // 默认5倍惯性带宽
    c->wc = 2.0f / T_val;  // 默认控制器带宽
    
    // 初始化状态
    c->x1 = c->x2 = c->x3 = c->x4 = 0;
    c->v1 = c->v2 = c->v3 = 0;
}

// 计算控制量
float ADRC3_Control(ADRC_3rdOrder *c, float target, float measure) {
    // 1. TD更新
    float fh = fhan3(c->v1 - target, c->v2, c->v3, 30.0, 5*c->h);
    c->v1 += c->h * c->v2;
    c->v2 += c->h * c->v3;
    c->v3 += c->h * fh;
    
    // 2. ESO更新
    float e = measure - c->x1;
    float wo = c->wo;
    c->x1 += c->h * (c->x2 + 4*wo*e);
    c->x2 += c->h * (c->x3 + 6*wo*wo*e);
    c->x3 += c->h * (c->x4 + 4*wo*wo*wo*e + (1.0f/c->T)*c->last_u);
    c->x4 += c->h * (wo*wo*wo*wo*e);
    
    // 3. NLSEF计算
    float wc = c->wc;
    float e1 = c->v1 - c->x1;
    float e2 = c->v2 - c->x2;
    float e3 = c->v3 - c->x3;
    
    float u0 = wc*wc*wc * fal(e1, 0.8, 0.05) 
               + 3*wc*wc * fal(e2, 0.7, 0.1)
               + 3*wc * fal(e3, 0.6, 0.2);
    
    // 4. 扰动补偿
    float u = (u0 - c->x4) * c->T;  // 关键补偿环节
    
    c->last_u = u;
    return u;
}

五、参数整定黄金法则

ESO带宽ω_o


示例:T=0.2s → ω_o ≥ 25 rad/s (≈4Hz)

每增加1倍带宽,扰动估计速度提高2倍

控制器带宽ω_c


                保守系统:ω_c = 0.5ω_o

                高性能系统:ω_c = ω_o

抗饱和处理

// 在输出前增加限幅和抗饱和
if(u > UMAX) {
    u = UMAX;
    c->x4 -= (u0 - c->x4 - UMAX/c->T) * 0.1f; // 反向修正ESO
}

六、不同T值的性能对比

T值(s) 推荐ω_o(rad/s) 上升时间(s) 扰动抑制比
0.01 500 0.005 >40dB
0.1 50 0.05 >35dB
0.5 10 0.25 >30dB
1.0 5 0.5 >25dB

测试条件:阶跃响应 + 20%负载扰动

七、工程调试技巧

T未知时的辨识方法

// 阶跃响应测T值
void identify_T(System *sys) {
    apply_step(1.0); // 施加单位阶跃
    delay(100);      // 等待稳定
    float y63 = get_response(); 
    float T_est = time_to_reach(0.63*y_final);
    sys->T = T_est * 0.8; // 保守估计
}

带宽自适应调整

// 根据性能动态调整ω_o
if(fabs(error) > threshold) {
    c->wo = BASE_WO * (1.0 + 2.0*fabs(error)); 
} else {
    c->wo = BASE_WO;
}

噪声敏感处理

// 增加ESO观测滞后
c->x4 += h * (powf(wo,4)*e * 0.7; // 增益衰减30%

八、总结

这种三阶ADRC结构完美匹配 1/(Ts+1)s² 型对象,通过四阶ESO精准估计惯性环节引入的扰动,实现近乎理想的双积分器控制效果。工程实践中,建议先用本文提供的参数关系初值,再微调ω_o和ω_c即可获得优异性能。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容