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

📄 pidoutput.c

📁 PID调节代码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                    思航科技有限公司
**                                      研  发  部 
**
**                                 http://www.sihangkeji.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: PidOutput.c
**创   建   人: 汪鑫
**最后修改日期: 
**描        述: 镇江溢阳温度检测仪
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 汪鑫
** 版  本: 
** 日 期: 2008-5-16
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版  本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <reg52.h>
#include <intrins.h>
#include "Main.h"

typedef unsigned char uchar;
typedef unsigned int uint;

uint SumTem = 0;    //平均温度

uchar All_ADC_En = 0;

struct PID 
{
	unsigned int SetTemperature;    //目标温度
	int Proportion;	    //比例常数
	int Integral;          //积分常数
	unsigned int Derivative;        //微分常数
	unsigned int LastError;         //采样的上次偏差
	unsigned int PrevError;         //此次偏差
	int SumError;          //总偏差
};

struct PID sPID; //= {700,32,1,0,0,0,0};    //为何要如此赋值?
/*********************************************************************************************************
** 函数名称: Sensor
** 功能描述: 获取200MS内总温度
** 输 入: A :
**         B :
**         C :
** 输 出: 
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Sensor(void) 
{	
	All_ADC_En++;
	SumTem += RealTem;		
}
/*********************************************************************************************************
** 函数名称: PIDCalc
** 功能描述: 计算得到PID调节的结果
** 输 入: A :
**         B :
**         C :
** 输 出: temp
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
idata int PIDError;//dError,
idata int PIDtemp ;
unsigned char PIDCalc(void)
{

	
	PIDError = sPID.SetTemperature - AverageTem;    //偏差

	if (sPID.SumError >= 30000)
	{
		sPID.SumError = 30000;
	}
	else if (sPID.SumError <= -30000)
	{
		sPID.SumError = -30000;
	}
	else
	{
	 //if(PIDError<100)
	 {
		  sPID.SumError += (PIDError>>4);    //当前积分
	 }	
	}
	
	//sPID.SumError >>= 1;

	/*if (sPID.SumError >= 100)
	{
		sPID.SumError = 100;	
	}
	else if (sPID.SumError <= -100)
	{
		sPID.SumError = -100;
	}*/

	//dError = sPID.LastError - sPID.PrevError;    //当前微分

	//sPID.PrevError = sPID.LastError;
	//sPID.LastError = Error;
		

	PIDtemp = sPID.Proportion * PIDError + sPID.Integral * sPID.SumError;	
	
	if (PIDtemp <= 0)
	{
		return 0;
	}
	else
	{
	    PIDtemp >>= 6;
		if (PIDtemp > 250) PIDtemp = 250;
		return ((unsigned char)PIDtemp); 
	}


	//sPID.SumError += Error;    //当前积分

	//dError = sPID.LastError - sPID.PrevError;    //当前微分

	//sPID.PrevError = sPID.LastError;
	//sPID.LastError = Error;
} 



⌨️ 快捷键说明

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