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

📄 温度控制系统pid算法.txt

📁 基于51单片机的温度控制系统的PID算法
💻 TXT
字号:
/*
* 文件名称:pid_adj
* 摘    要:温度调整程序
* 使    用:1.使用PID_init和int_tb_pwm,初始化pid三个系数定时器1
*           2.调用PID_c,调用一次调整一次pwm值,以控制输出电压大小,进而控制温度
* 当前版本:1.0
* 完成日期:2008年8月19日
*/

unsigned int pid[3] = {2500,5,0};//pid[0]为Kp pid[1]为Ti pid[2]为Td
unsigned int pid_A,pid_B,pid_C;

void PID_init(void)//pid[0]为Kp pid[1]为Ti pid[2]为Td,Ts = 1
{                                      //初始值为Ki = 4000;Ti = 65534;Td = 0
    pid_A=pid[0]*1+pid[0]/pid[1]+pid[0]*pid[2];  //先不要积分环节即Ti=无穷大,Ts=1
    pid_B=pid[0]*(1+2*pid[2]);         //B=Kp(1+2Td/Ts)
    pid_C=pid[0]*pid[2] ;             //C=KpTd/Ts
}

void int_tb_pwm(void)
{
    PWM_TB_ON;
    TBCCR0 = 200;
    TBCCR1 = 50;
    TBCCTL1 = OUTMOD0+OUTMOD1+OUTMOD2; //输出模式选 
    TBCTL |= TBSSEL1+MC0;  
}

void control_pwm(unsigned char i)//i为占空比,值为0~40,响应TBCCR1为0~80
{
    if(i > 40) TBCCR1 = 80;
    else if(i > 0) TBCCR1 = i*2;
    else TBCCR1 = 0;
}

void PID_c(void)
{
 
    float U0=0,Ua,Ub,Uc;
    float static e0=0,e1=0,e2=0;  
    char pwm_value = 0;

    e0=((float)temperature - (float)end_temp)/100;//需根据实际调节
    Ua=pid_A*e0;
    Ub=pid_B*e1;
    Uc=pid_C*e2;
    U0=Ua-Ub+Uc;//增量u0=A*e0+B*e1+C*e2;
    U1 = U1+U0;

    if(U1<=0) U1 = 0;//防止U1过大,调节比较慢
    if(U1>4000) U1 = 4000;
    pwm_value = (char)(U1/100);
    control_pwm(pwm_value);
   
    e2=e1;
    e1=e0;
}

⌨️ 快捷键说明

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