📄 pidoutput.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 + -