找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1417|回复: 2
打印 上一主题 下一主题
收起左侧

请帮忙解读下单片机PID温度控制程序,看不懂

[复制链接]
跳转到指定楼层
楼主
ID:700941 发表于 2020-4-19 19:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u8 err = 0,last_err = 0,err_add = 0,err_weifen = 0;
void Timer1Interrupt(void) interrupt 3
{                  
        static u16 value1,cnt_10ms=0;
    TH1 = 0x3C;                                          //10ms
    TL1 = 0xB0;
        value1++;
        cnt_10ms = 0;
        if(tDisp < Set_Num)        //实际温度较低 升温
        {                 
                err = (Set_Num - tDisp)/10.0;         //误差
                err_add += err;                                         //累计误差
                err_weifen = err -         last_err;         //误差变化率
                last_err = err;                                         //更新误差
                PWM_SW = PID_P * err + PID_I * err_add + PID_D * err_weifen;
                if(PWM_SW == 1)PWM_SW = 2;
                Shengwen_IN1 = 1;        
                Shengwen_IN2 = 0;         
                Jiangwen_IN1 = 0;        
                Jiangwen_IN2 = 0;
                PWM_JW = 0;
        }
        else if(tDisp > Set_Num)        //实际温度较高 降温
        {                  
                err = (tDisp - Set_Num)/10.0;         //误差
                err_add += err;                                         //累计误差
                err_weifen = err -         last_err;         //误差变化率
                last_err = err;                                         //更新误差
                PWM_JW = PID_P * err + PID_I * err_add + PID_D * err_weifen;
                if(PWM_JW == 1)PWM_JW = 2;
                Shengwen_IN1 = 0;        
                Shengwen_IN2 = 0;         
                Jiangwen_IN1 = 1;        
                Jiangwen_IN2 = 0;
                PWM_SW = 0;                                
        }
        else
        {                                             
                PWM_SW = 0;               
                PWM_JW = 0;
        }
        if(value1<PWM_SW)
        {
                ENSW = 1;
        }
        else
        {
                ENSW = 0;
        }
        if(value1<PWM_JW)   //                                      
        {
                ENJW = 1;
        }
        else
        {
                ENJW = 0;
        }         
        if(value1>10)
        {
                value1 = 0;
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:700941 发表于 2020-4-20 08:58 | 只看该作者
有人帮忙解答下吗?
回复

使用道具 举报

板凳
ID:89515 发表于 2020-4-20 11:51 来自手机 | 只看该作者
这个是个复杂的问题,最好自己还是先学下理论。如果可以自己写更好,不能就调用别人写好的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表