### PID算法经典资料知识点解析 #### 一、PID算法简介 PID 控制器是一种常用的反馈控制器,被广泛应用于工业过程控制系统中。它通过计算输入(测量值)与期望值(设定值)之间的误差,并根据这一误差调整系统输出,从而达到控制目的。PID 控制器包含三个独立的组成部分:比例项(P),积分项(I) 和微分项(D)。 - **比例项 (P)**:基于误差的当前值。 - **积分项 (I)**:基于误差的历史累计值。 - **微分项 (D)**:基于误差的变化率。 #### 二、自适应PID算法 自适应PID算法能够根据系统运行时的具体情况动态调整PID参数,以适应外部环境或内部状态的变化。本资料介绍了一种基于单片机实现的自适应PID算法,具体使用了51单片机作为硬件平台。 #### 三、单片机上的PID算法实现 在给定的部分代码中,我们可以看到一个结构体 `struct_pid` 的定义,用于存储PID控制器的相关变量。 ```c struct_pid { int pv; /* 过程值 */ int sp; /* 设定值 */ float integral; float pgain; float igain; float dgain; int deadband; int last_error; }; ``` 这里定义了一个PID控制器的基本结构,包括过程值(`pv`)、设定值(`sp`)、积分项(`integral`)以及PID的增益参数(`pgain`, `igain`, `dgain`)等。 #### 四、PID控制器初始化 初始化函数 `pid_init` 用于设置PID控制器的初始过程值和设定值。 ```c void pid_init(struct_pid *warm, int process_point, int set_point) { struct_pid *pid = warm; pid->pv = process_point; pid->sp = set_point; } ``` 该函数接收一个指向 `struct_pid` 结构体的指针和两个整型数值,分别代表过程值和设定值。 #### 五、PID参数调整 `pid_tune` 函数用于设置PID控制器的比例增益(`p_gain`)、积分增益(`i_gain`)、微分增益(`d_gain`)以及死区(`dead_band`)。 ```c void pid_tune(struct_pid *pid, float p_gain, float i_gain, float d_gain, int dead_band) { pid->pgain = p_gain; pid->igain = i_gain; pid->dgain = d_gain; pid->deadband = dead_band; pid->integral = integral_val; pid->last_error = 0; } ``` 这个函数可以灵活地调整PID参数,以便根据不同的控制需求进行优化。 #### 六、PID积分项设置 `pid_setinteg` 函数允许用户直接设置PID控制器中的积分项初始值。 ```c void pid_setinteg(struct_pid *pid, float new_integ) { pid->integral = new_integ; pid->last_error = 0; } ``` 在某些情况下,比如系统启动时,可能需要对积分项进行初始化,以避免出现较大的初始偏差。 #### 七、无扰动切换 `pid_bumpless` 函数提供了一种无扰动切换的方法,用于平滑处理因突然改变设定值或长时间暂停后重新启动PID控制器而引起的输出波动。 这部分代码没有完整展示,但从注释中可以看出其主要目的是减少因设定值突变导致的输出扰动。 ### 总结 通过对上述代码片段及描述的理解,我们可以看出这是一份关于51单片机上实现自适应PID控制的经典资料。通过对PID控制器的初始化、参数调整以及特定功能的实现(如积分项设置、无扰动切换等),该资料为读者提供了实用的编程示例和理论指导。此外,自适应PID算法的应用也为实际工程问题的解决提供了新的思路和技术支持。
#include<math.h>
struct _pid {
int pv; /*integer that contains the process value*/
int sp; /*integer that contains the set point*/
float integral;
float pgain;
float igain;
float dgain;
int deadband;
int last_error;
};
struct _pid warm,*pid;
int process_point, set_point,dead_band;
float p_gain, i_gain, d_gain, integral_val,new_integ;;
/*------------------------------------------------------------------------
pid_init
DESCRIPTION This function initializes the pointers in the _pid structure
to the process variable and the setpoint. *pv and *sp are
integer pointers.
------------------------------------------------------------------------*/
void pid_init(struct _pid *warm, int process_point, int set_point)
{
struct _pid *pid;
pid = warm;
pid->pv = process_point;
pid->sp = set_point;
}
/*------------------------------------------------------------------------
pid_tune
DESCRIPTION Sets the proportional gain (p_gain), integral gain (i_gain),
derivitive gain (d_gain), and the dead band (dead_band) of
a pid control structure _pid.
------------------------------------------------------------------------*/
void pid_tune(struct _pid *pid, float p_gain, float i_gain, float d_gain, int dead_band)
{
pid->pgain = p_gain;
pid->igain = i_gain;
pid->dgain = d_gain;
pid->deadband = dead_band;
pid->integral= integral_val;
pid->last_error=0;
}
/*------------------------------------------------------------------------
pid_setinteg
DESCRIPTION Set a new value for the integral term of the pid equation.
This is useful for setting the initial output of the
剩余5页未读,继续阅读
- happyffdd2012-12-21适合初学者学习~~
- ekeynes2012-12-29还不错,就是缺少文字说明
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 汇编语言入门与编程实践-低层开发者的必备技能
- WatchIO二进制固件和刷机工具(无需源码编译).zip
- 提取网页核心信息:Python中的Readability与Date Extraction技术
- Swift语言教程:从基础语法到高级特性的全面讲解
- 表白代码(发射爱心).zip学习资料程序
- 常用工具合集(包括汉字转拼音工具、常用数据格式相互转换工具、尺寸相关的工具类).zip
- Delphi编程教程:从入门到精通Windows应用程序开发
- 视觉化编程入门指南:Visual Basic语言教程及其应用领域
- 纯代码实现的3d爱心.zip学习资料语言
- 儿童编程教育中Scratch语言的基础教学及实战示例