找回密码
 立即注册

QQ登录

只需一步,快速开始

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

pid温度调节

[复制链接]
跳转到指定楼层
楼主
ID:236397 发表于 2017-9-28 17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    if(set_temper>temper)
    {
       if(set_temper-temper>1)
       {
           high_time=100 ; //大于1°不进行PID运算
           low_time=0 ;
       }
       else
       {   //1°范围内进行PID运算
           for(i=0;i<10;i++)
           {
                //get_temper();
                rin=s;
                // Read Input
                rout=PIDCalc(&spid,rin); //执行PID运算
                // Perform PID Interation
           }
           if(high_time<=100) //限制最大值
           high_time=(unsigned char)(rout/800);\\为什么除以800
           else
           high_time=100;
           low_time=(100-high_time);

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 3#
ID:195542 发表于 2017-9-28 19:05 | 只看该作者
你单独放这么一段程序,除了作者谁也不能保证完全看的明白啊。我个人认为你这个程序是有些问题的,首先设定温度大于实时温度1度就不进行PID运算,那温度控制肯定是不理想的,由于惯性会有很大的超调,这里就需要微分环节的抑制。另外函数里面什么rin,s什么的变量你全都没有做说明,谁知道是写的是什么?看后面代码的意思应该是PID输出映射PWM控制占空比,但是输出限幅的位置就错了。最后至于为啥要除以800?多半是PID参数调的不好,不能直接映射。不过一看就有问题的程序,你再细扣其中几个数字的问题那也没什么意义。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

沙发
ID:151356 发表于 2017-9-28 18:16 | 只看该作者
仅凭这一小段程序无法得出为什么除以800的结论
回复

使用道具 举报

地板
ID:236426 发表于 2017-9-28 19:57 | 只看该作者
其实第一个if判断可以不要的吧
回复

使用道具 举报

5#
ID:123289 发表于 2017-9-28 23:44 | 只看该作者
因为在此之前扩大了800倍。
回复

使用道具 举报

6#
ID:236523 发表于 2017-9-29 11:06 | 只看该作者
这个程序根本不能判断为什么除800
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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