PID算法应用于室内温度控制的C语言实现

我最近在学习PID算法,对此很感兴趣。所以与大伙分享下,有不足的地方欢迎指出,非常谢谢。

PID算法的基本内容本篇博客就不做阐述了,网上有很多资料。

文章的主题是用C语言实现PID算法。为了更好的理解,我采用软件模拟室内温度控制的方式与大伙分享。

模拟原理很简单,假定23摄氏度为人类舒适的环境。夏天室外温度为37度,我们想要室内保持23左右。所以需要用到PID算法调节。假设室内温度每分钟上升0.1摄氏度,我们拥有制冷剂,每释放一包可降低5摄氏度,有制热剂,同理每放出一包可升高五度(一切为理想状态,房间温度处处相同,每次释放温度控制包都能马上起作用)。

实现起来也很简单,假定放出初始时为37摄氏度,则调用制冷剂函数,使房间温度下降,直到23度左右时停止。转而使用PID算法精调,使之更接近于23摄氏度。到这里假如看懂了,我们可以发散思维,当实际温度在23正负0.5度之内,我们停止加热或者制冷,以节省资源,当温度超出此范围时再调用相应的函数。

具体请看代码,我写了详细的备注,变量名与函数名都是用单词的意思。

 


头文件如下:
#include 
#include
#include
#include
#include

typedef struct PID_Value
{
	float ErrVal[3];			// 三次误差值
	float Kp;					// 比例系数
	float Ki;					// integral 系数
	float Kd;					// derivative 系数
	float Integral;				// 积分
	float SetTemperature;
	float ActualTemperature;
}PID_ValueStr,*PID_ValueT;

PID_Value pid;

#define		outdoorTemperature		36.2
#define		TemperatureErr			3
#define		ComfortTemperature		0.5
#define		IncrementTemperature	1			// 每分钟房间上升的温度

int lastTimeFlag = 0;

void AcquireTemperature(int hour, int minute, int second);
void PID_controlTemperature();
void Refrigeration();
void init_PID();
void IncrementPID_realize();
void PositionPID_realize();

如需转载请标明出处,谢谢。

你可能感兴趣的:(算法类)