📄 pid.c
字号:
/****************************************************************************
* 文 件 名:PID.c
* 版 本: V1.0
* 连 接:
* 功 能:PID源文件
* 作者:黄振升
* 日期:2007/8/20
*---------------历史版本信息-------------------------------------------------
* 修 改 人: 黄振升
* 版 本:
* 日 期: 2007/8/20
* 描 述:
****************************************************************************/
/***********************************************************************
包含文件
***********************************************************************/
#include "config.h"
typedef struct
{
int32 Error_1; //K-1次误差
int32 P;
int32 IC;
int32 DC; //减少一点运算量
int32 Etotal; //误差累计
uint32 Carry_Frequency;
}Parameter;
Parameter PID_sbuf;
/***********************************************************************
* 名 称:void PID_Init(int32 P,int32 I,int32 D,int32 Frequendy)
* 功 能:PID初始化
* 入口参数: P参数,I参数,D参数
* 出口参数:无
* 说明 :
***********************************************************************/
void PID_Init(void)
{
PID_sbuf.Error_1 = 0;
PID_sbuf.Etotal = 0;
}
/***********************************************************************
* 名 称:void PID_Fix(int32 P,int32 I,int32 D,int32 Frequendy)
* 功 能:PID修订
* 入口参数: P参数,I参数,D参数
* 出口参数:无
* 说明 :
***********************************************************************/
void PID_Structuse(uint8 function,int32 Data)
{
if(function == 1) PID_sbuf.P = Data;
if(function == 2) PID_sbuf.IC = Data*PID_sbuf.Carry_Frequency;
if(function == 3) PID_sbuf.DC = Data*PID_sbuf.Carry_Frequency;
if(function == 0) PID_sbuf.Carry_Frequency = Data;
}
/***********************************************************************
* 名 称:void PID_Init(int32 P,int32 I,int32 D,int32 Frequendy)
* 功 能:PID初始化
* 入口参数: P参数,I参数,D参数
* 出口参数:无
* 说明 :带I环节的PID
***********************************************************************/
int32 PID_GetWI(int32 Error)
{
int32 p=0,i=0,d=0;
p = (PID_sbuf.P*Error)/1000;
PID_sbuf.Etotal +=Error;
i = (PID_sbuf.Etotal*1000/PID_sbuf.IC);
d = (PID_sbuf.DC*(Error - PID_sbuf.Error_1))/1000000;
PID_sbuf.Error_1 = Error;
return(p+i+d);
}
/***********************************************************************
* 名 称:void PID_InitUI(int32 P,int32 I,int32 D,int32 Frequendy)
* 功 能:PID初始化
* 入口参数: P参数,I参数,D参数
* 出口参数:无
* 说明 :不带I环节的PID
***********************************************************************/
int32 PID_GetUI(int32 Error)
{
int32 p=0,d=0;
p = (PID_sbuf.P*Error)/1000;
d = (PID_sbuf.DC*(Error - PID_sbuf.Error_1))/1000000; //进一步削弱微分作用
PID_sbuf.Error_1 = Error;
return(p+d);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -