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

📄 pid.c

📁 基于TMS320LF2407A的PWM波产生的PID算法实现
💻 C
字号:

typedef struct PID {

	int SetPoint; // 设定目标 Desired value

	int Proportion; // 比例常数 Proportional Const
	int Integral; // 积分常数 Integral Const
	int Derivative; // 微分常数 Derivative Const

	unsigned int LastError; // Error[-1]
	unsigned int PrevError; // Error[-2]
	unsigned int SumError; // Sums of Errors

//	double Lastout;  //上次输出
	unsigned int E1;       // e1>e2                                       
	unsigned int E2;       //
	
	int Pmax;//上限        
	int Pmin;//下限

	} PID;

/*====================================================================================================
PID计算部分,遇限消弱积分PID防饱和,积分分离算法实现
=====================================================================================================*/

int PIDCalc( PID *pp, unsigned int NextPoint )
{
	int     dError,
			Error;
			
	Error = pp->SetPoint - NextPoint; 		//偏差	
	if (Error<=-pp->E1)	return (pp->Pmin);  //饱和
	else if (Error>=pp->E1)
						return (pp->Pmax);
		 else 
		 {
		 	dError = pp->LastError - pp->PrevError; // 当前微分
		 	pp->PrevError = pp->LastError;
			pp->LastError = Error;
		 	if (Error>=pp->E2||Error<=-pp->E2) //分离	
		 			return (pp->Proportion * Error // 比例项
					+ pp->Derivative * dError );//PD,考虑限幅
		 	  else                                 //位置式
		 	  {
		 	  		pp->SumError += Error; 		   // 积分	  
					return (pp->Proportion * Error // 比例项
					+ pp->Integral * pp->SumError  // 积分项
					+ pp->Derivative * dError      // 微分项           //PID
					);
				}
			}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -