用matlab写一个二阶ADRC的代码
时间: 2023-10-10 20:04:38 浏览: 98
基于Matlab adrc源码
以下是一个简单的MATLAB代码示例,用于实现二阶ADRC(Active Disturbance Rejection Control)控制器:
```matlab
function u = adrc_controller(y, r)
persistent x_hat_prev
persistent d_hat_prev
if isempty(x_hat_prev)
x_hat_prev = zeros(size(y));
d_hat_prev = zeros(size(y));
end
% 控制器参数
observer_gain = 0.8;
controller_gain1 = 1.2;
controller_gain2 = 0.6;
disturbance_estimator_gain1 = 0.5;
disturbance_estimator_gain2 = 0.3;
% 系统状态估计
x_hat = y - observer_gain * (y - x_hat_prev);
% 一阶扰动估计
disturbance1 = y - x_hat - disturbance_estimator_gain1 * (x_hat - x_hat_prev);
% 一阶控制器输出
u1 = r - controller_gain1 * x_hat - disturbance_estimator_gain2 * disturbance1;
% 二阶扰动估计
disturbance2 = u1 - controller_gain2 * x_hat - disturbance_estimator_gain2 * (disturbance1 - d_hat_prev);
% 二阶控制器输出
u = r - controller_gain1 * x_hat - disturbance_estimator_gain2 * disturbance2;
% 更新状态
x_hat_prev = x_hat;
d_hat_prev = disturbance1;
end
```
在这个示例中,`adrc_controller`函数接受当前系统输出`y`和参考输入`r`作为输入,并返回控制器输出`u`。`persistent`关键字用于在调用函数时保持变量`x_hat_prev`和`d_hat_prev`的值不变,以实现状态估计和扰动估计的持续更新。
控制器的参数包括观测器增益(`observer_gain`)、一阶控制增益(`controller_gain1`)、二阶控制增益(`controller_gain2`)、一阶扰动估计器增益(`disturbance_estimator_gain1`)和二阶扰动估计器增益(`disturbance_estimator_gain2`)。这些参数可以根据系统特性和控制要求进行调整。
通过观测器增益,系统状态估计与实际输出进行比较和更新。一阶扰动估计通过估计器增益与状态估计之间的差异计算得出。一阶控制器输出通过参考输入、状态估计和一阶扰动估计进行计算。二阶扰动估计通过一阶扰动估计和上一时刻的估计值之间的差异计算得出。二阶控制器输出通过参考输入、状态估计和二阶扰动估计进行计算。
请注意,这只是一个简单的示例,实际的二阶ADRC控制器可能需要更复杂的结构和参数调整。具体的二阶ADRC实现可能需要根据系统特性和控制要求进行更详细的设计和调整。
阅读全文