楼主: 对折之内

PID算法完全讲解

  [复制链接]

该用户从未签到

发表于 2015-5-22 15:49 | 显示全部楼层
你好,对折之内,我现在用Arduino uno做毕业设计,是通过点击控制太阳能板正反转。要求加入PID控制电机。Arduino 和PID都是初步接触,不是很熟,所以想请教一下。我是根据东西方向光敏电阻的分压值来控制转动方向的,我的PID的输入应该是两者之差吗?KP KI KD的值怎么确定啊?谢谢了
  • TA的每日心情
    奋斗
    2016-5-17 22:16
  • 签到天数: 275 天

    [LV.8]以坛为家I

     楼主| 发表于 2015-5-23 09:09 | 显示全部楼层
    咳咳咳 发表于 2015-5-22 15:49
    你好,对折之内,我现在用Arduino uno做毕业设计,是通过点击控制太阳能板正反转。要求加入PID控制电机。Ar ...

    哦,你只要理解PID是一个封闭的系统。你输入一个现在被控制量的值和希望被控制量变成的值,PID就会很智能得把你现在需要怎么做告诉你。因此,你用一个光敏电阻,并设定一个希望光敏电阻读入的值。当光敏电阻读入的值和你希望的值有偏差的时候,pid就会输入一个值,这个值会告诉你电机转多少。pid参数的调试,你百度吧,有很多的。

    该用户从未签到

    发表于 2015-8-7 11:09 | 显示全部楼层
    请问楼主帖子中122行的代码起什么作用?

    kittenblock中小学创客名师推荐的图形化编程软件

           if(iTemp) iTemp--;      //只有iTemp>0,才有必要减“1”

    该用户从未签到

    发表于 2015-8-7 16:03 | 显示全部楼层
    楼主厉害   不是理解很透彻无法举出这么形象的例子啊  支持楼主
  • TA的每日心情

    2015-8-14 11:52
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2015-8-14 11:59 | 显示全部楼层
    感谢楼主!学到了

    该用户从未签到

    发表于 2015-9-29 10:24 | 显示全部楼层
    讲得非常好
  • TA的每日心情
    郁闷
    2015-12-5 19:34
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-12-3 19:10 | 显示全部楼层
    看了楼主的帖子受益良多
  • TA的每日心情
    郁闷
    2015-12-5 19:34
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-12-3 19:11 | 显示全部楼层
    看了这个帖子受益颇多

    该用户从未签到

    发表于 2015-12-17 12:06 | 显示全部楼层

            int rise,hold,fall;//PID算法控制升温降温
             rise = 0;
                    hold = 0;
                    fall = 0;
                if(AD_tem<set_tem)                      //如果板内温度小于设定温度,执行循环
                    {       
                    t=set_tem-AD_tem;                              
                               
                    if(t>3*t_gate)                              //大幅调节
                            {
                        if(rise==0)                     
                                    {
                            rise=1;                         //进行升温
                            hold=0;                             //系统不控温
                            tc_data=255;                            //标志位=255
                            DA_send(tc_data);           //??DAC????
                                    }
                            }
                               
                    else                                            //进行控温
                            {
                        if(hold==0)                     //???????????????
                                    {
                            if(set_tem>=t_room)   
             //?????????????
                                            {
                                tc_data=dbasa;          //?????????????????????
                                            }
                            else                                        //???????????
                                            {
                                tc_data=dbasb;          //???????????????????
                                            }
                            hold=1;                             //??????????
                            rise=0;                             //???????????
                                    }               
                        data_inc=1.0*(t-t_1)+1.5*t+3*(t-2*t_1+t_2);     //PID??????
                        tc_data=tc_data+data_inc;       //??DAC????
                        if(tc_data>255)  tc_data=255;   //??????????
                        if(tc_data<0)  tc_data=0;
                        DA_send(tc_data);               //??DAC????
                            }
                        }
       

                else                                            //????????????,????
                        {
                    t=AD_tem-set_tem;                               //??????
                               
                    if(t>3*t_gate)                              //???????????
                            {
                        if(fall==0)                                 //???????
                                    {
                            fall=1;                         //?????????????
                            hold=0;                             //??????????
                            tc_data=0;                              //??DAC???0
                            DA_send(tc_data);           //??DAC????
                                    }
                            }
                    else                                            //?????????????
                            {
                        if(hold==0)                                     //??????
                                    {
                            if(set_tem>=t_room)             //?????????????
                                            {
                                tc_data=dbasa;          //?????????????????????
                                            }
                            else                                        //???????????
                                            {
                                tc_data=dbasb;          //???????????????????
                                            }
                            hold=1;                             //??????????
                            fall=0;                             //???????????       
                                    }
                                   
                        t=-t;                                                   //???????
                        data_inc=1.0*(t-t_1)+1.5*t+3*(t-2*t_1+t_2);     //PID??????
                        tc_data=tc_data+data_inc;       //??DAC????
                        if(tc_data>255)  tc_data=255;   //??????????
                        if(tc_data<0)  tc_data=0;
                        DA_send(tc_data);               //??DAC????
                            }
                        }
                t_2=t_1;
                t_1=t;
                }
          
            
           }

      }
    t_1 t_2初值都是零 能帮我看看吗
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    [发布帖]RPG游戏 无人世界
    [发布帖]RPG游戏 无人世界
    视频攻略:https://www.bilibili.com/video/av43790997/ 剧情:主角是一只猫又,在逃
    arduino oled 时钟 可设置闹钟 表
    arduino oled 时钟 可设置
    呆板教程,固件是编译好的,有上传工具,这次不是IDE了
    Arduino 蓝牙机械臂
    Arduino 蓝牙机械臂
    蓝牙机械臂(这次没用BLINKER,改
    求助!!!!!!!!
    求助!!!!!!!!
    求助?????错在哪里了?谢谢
    max30102问题
    max30102问题
    最近网上买了个max30102的心率血氧模块,用卖家给的单个例程的时候数据还算准确,但是
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表