一个简单利用PID调节的控温程序
pid的参考文档:
这是我们学校的的课程设计,为了让我们学到跟多的东西,所以做的系统硬件都不是最简的。
控温部分的电路,看懂这个图就知道为什么DAC输出128的时候不升温也不降温看了。128对应的八位二进制送给D0~D7对应的Vout输出电压为0V,所以不升温也不降温。
这里我使用了PI调节,实验证明PI也就够了,通过测试,只通过PI调节温度的过冲会有点大,但是也能基本满足要求,要求较高的可以再把微分量加上。
初始化PID参数:
void Init_PID(void)
{
P_t=98;
I_t=0.022;
DAC=128; //初始化DAC的值,128表示不升温也不降温
DAC_f=128; //初始化通过PID调节后的DAC输出
set_t = 25; //把初始温度设置成25度
}
控制函数:
void control_t(void) //控制温度-10V降温 0000 0000 +10V升温1111 1111 0~255 不升不降 128
{
if(num[0]==10||num[1]==10)
{
DAC=128;
}
else
{
for(i=0;i<time;i++)
{
(float)cha = set_t - t_measure;
time_f = time_f + cha*0.005; //对时间积分
DAC_f= 128 + P_t*cha*0.05 + I_t*time_f;
if( DAC_f >255)
{
DAC_f=255;
}
if( DAC_f <=0 )
{
DAC_f=0;
}
DAC = DAC_f;
}
}
}
初学者可能写的比较粗糙后期闲下来了会慢慢修改此文章。
欢迎大家指正,有更好的算法欢迎大家交流学习,嘿嘿。