T=2s,yr(k)为史密斯预估器的预估输出。PID控制器中:Kp=0.5,Ki=0.01,Kd=0 被控对象传递函数:G=(e^(-15s))/(88.2s+1) 史密斯预估器的传递函数: G0(s)=(1一e^(-15s))/(88.2s+1) 对史密斯预估器进行离散化: yT(k) =ayT(k 一1)+ b[u(k)- u(k -N)] 其中: a=e88.2 ,b=1-e88.2。 计算史密斯预估器的输出: u(k)= u(k - 1)+Kp[e2(k)- e2(k -1)]+Kie2(k)+Kd[e2(k)一2e2(k -1)+e2(k 一2)]/////根据这些数据设计一个史密斯预估器,编写c语言程序,并画出结构框图
时间: 2023-12-27 21:02:28 浏览: 146
根据给出的数据,我们可以设计一个史密斯预估器的C语言程序,并画出结构框图。以下是程序和框图的代码:
```c
#include <stdio.h>
#define T 2.0
#define N 1
#define Kp 0.5
#define Ki 0.01
#define Kd 0.0
#define a exp(88.2*T*(-1.0))
#define b (1.0-a)
// 史密斯预估器的状态变量
double y[N+1];
double u[N+1];
// 史密斯预估器的输出
double yr;
// 史密斯预估器的计算
void smith_predictor(double e2)
{
int i;
double du, de2, de2_old, de2_old2;
// 计算控制量的增量
de2 = e2 - y[0];
de2_old = y[0] - y[1];
de2_old2 = y[1] - y[2];
du = Kp*(de2 - de2_old) + Ki*e2 + Kd*(de2 + 2.0*de2_old - de2_old2);
// 更新状态变量
for(i = N; i > 0; i--)
{
y[i] = y[i-1];
u[i] = u[i-1];
}
u[0] += du;
y[0] = a*y[0] + b*u[0];
// 更新输出
yr = y[0];
}
int main()
{
// 初始化状态变量和输出
int i;
for(i = 0; i <= N; i++)
{
y[i] = 0.0;
u[i] = 0.0;
}
yr = 0.0;
// 计算史密斯预估器的输出
smith_predictor(0.0); // 初始化
for(i = 1; i <= 100; i++)
{
double e2 = 1.0; // 输入信号
smith_predictor(e2);
printf("%.2f\n", yr);
}
return 0;
}
```
框图如下:
```
+-----+ +---+ +---+
u(k)----| |----| a |----| |----yr(k)
| | +---+ | 1 |
| Kp | | |
| Ki | | b |
| Kd | +---+
+-----+
```
其中,Kp、Ki和Kd分别为PID控制器的参数,a和b为离散化系数,N为时延,T为采样周期。
阅读全文