硬件原理:加热电阻为400,电源为市电,固态继电器控制通断,并提取市电的过零信号,单片机采用mega48,继电器通断最小时间为10ms,通断PWM的周期为100个过零信号.
本程序采用绝对式PID算法,当温度相差很多时,采用P算法(比例算法),当到达设定温度时,采用PID算法,实际实用稳定性还可以,上下波动在0.5度以内.
#include
#include "PID.h"
//static PID sPID;
//static PID *sptr=&sPID;
TADD Tadd1;
TADD Tadd2;
void IncPIDInit(PID *sptr)
{
sptr->SumError=0;
sptr->LastError=0;
sptr->PrevError=0;
//sptr->Proportion = 900;
//sptr->Integral=20;
//sptr->Derivative = 2;
//sptr->SetPoint = 0;
}
typedef struct
{
int SetPoint; //设定目标值
int32_t SumError; //误差累计
//int Proportion;
//int Integral; //积分常数
//int Derivative; //微分常数
int LastError; //Error[-1]
int PrevError; //Error[-2]
}PID;
#de