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

📄 pid.c

📁 基于TMS320LF2407A的PWM波产生的PID算法实现
💻 C
字号:
#include <string.h>
#include <stdio.h>

typedef struct PID {
 	int SetPoint; // 设定目标 Desired value          Q0
	
	int Proportion;  // 比例常数 Proportional Const   Q12
	int Integral;    // 积分常数 Integral Const         Q12
	int Derivative; // 微分常数 Derivative Const     Q12
	
	int LastError; // Error[-1]                      Q0
	int PrevError; // Error[-2]                      Q0
	int SumError; // Sums of Errors                  Q0
	
	int E1;       // e1>e2                           Q0         
	int E2;       //                                 Q0
	
	long int Pmax;//上限                                  Q0
	long int Pmin;//下限                                  Q0
	} PID;
/*====================================================================================================
PID计算部分,遇限消弱积分PID防饱和,积分分离算法实现
=====================================================================================================*/
long int PIDCalc( PID *pp, long int Feedback )        //Feedback  Q0
{
	int     	dError,Error;                          //Q0
	long int	PI,PD,PP;
	
	Error = pp->SetPoint - Feedback; 		//偏差	
	if((Error > pp->E1)||(Error < -pp->E1))
	{
		PP = pp->Proportion * Error;
		PI = 0;
		PD = 0;
	}
	else
	{
		if((Error > pp->E2)||(Error < -pp->E2))
			Error = pp->E2;
	 	dError =Error - pp->LastError; // 当前微分
		pp->LastError = Error;
		pp->SumError += Error; 		   // 积分	  
		if(pp->SumError >= 32000)
		 	pp->SumError = 32000;
		else if(pp->SumError <= -32000) 
			pp->SumError = -32000;
	
		PP = pp->Proportion * Error;   	 // 比例项
		PI = pp->Integral * pp->SumError;  // 积分项
		PD = pp->Derivative * dError;      // 微分项
	 }
	 return (PP+PI+PD);        //Q12
}
		

⌨️ 快捷键说明

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