线性自抗扰控制c++代码
时间: 2023-09-04 22:16:07 浏览: 267
针对线性系统的一种通用自抗扰控制方法.doc
线性自抗扰控制(Linear Active Disturbance Rejection Control,LADRC)是一种新型的控制方法,适用于非线性、时变、耦合的复杂系统。以下是一个简单的C++代码示例。
```c++
#include <iostream>
#include <cmath>
using namespace std;
#define Ts 0.01 //采样周期
#define alpha1 0.5 //LADRC参数
#define alpha2 0.5
#define alpha3 0.5
#define alpha4 0.5
#define beta 1 //LADRC参数
class LADRC{
public:
double x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11; //状态量
double u, y, r, d; //控制量、输出量、参考量、干扰量
double Kp, Ki, Kd; //PID参数
double e, e1, e2, e3; //误差项
double de, de1; //误差导数项
LADRC(){
x1 = x2 = x3 = x4 = x5 = x6 = x7 = x8 = x9 = x10 = x11 = 0;
u = y = r = d = 0;
Kp = Ki = Kd = 0;
e = e1 = e2 = e3 = 0;
de = de1 = 0;
}
void update(double input){
//计算误差项
e = r - y;
e1 = de - y;
e2 = de1 - y;
e3 = d - x10;
//计算状态量
x1 += Ts * x2;
x2 += Ts * (alpha1 * x1 - alpha2 * x2 + Kp * e);
x3 += Ts * x4;
x4 += Ts * (alpha3 * x3 - alpha4 * x4 + Ki * e);
x5 += Ts * x6;
x6 += Ts * (alpha1 * x5 - alpha2 * x6 + Kd * e1);
x7 += Ts * x8;
x8 += Ts * (alpha1 * x7 - alpha2 * x8 + Kd * e2);
x9 += Ts * x10;
x10 += Ts * (alpha3 * x9 - alpha4 * x10 + beta * e3);
x11 += Ts * (d - x10);
//计算控制量
u = x1 - x5 - x7 - x11;
//更新误差导数项
de1 = de;
de = y;
}
};
int main(){
LADRC ladrc;
ladrc.Kp = 1;
ladrc.Ki = 0.5;
ladrc.Kd = 0.1;
double input = 0;
double output = 0;
for(int i = 0; i < 1000; i++){
//接收输入信号
cin >> input;
//模拟系统输出
output = sin(input);
//更新控制器状态
ladrc.y = output;
ladrc.update(input);
//输出控制量
cout << ladrc.u << endl;
}
return 0;
}
```
在上述代码中,LADRC类中包含了LADRC控制器的状态量和方法,其中update方法用于更新控制器状态。在实际应用中,需要根据具体系统进行参数调整。
阅读全文