⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pid.c

📁 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 + -