楼主: 对折之内

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初值都是零 能帮我看看吗
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    学习记录2,Blinker读取温湿度
    学习记录2,Blinker读取温
    开关现在是使用得很6了,准备进行下一步,读取数据。 找了下官方的例程,发现用的是w
    学生智能打卡系统(接入blinker)
    学生智能打卡系统(接入bl
    【项目名称】学生智能打卡系统(接入blinker) 一.感谢各位大佬 首先感谢社区的管理员
    关于红外控制空调的模块选型
    关于红外控制空调的模块选
    想问问这中模块能支持arduino吗
    LCD1602只亮 不显示
    LCD1602只亮 不显示
    #include // initialize the library by associating any needed LCD interface pin
    18脚的8x8LED点阵如何使用??
    18脚的8x8LED点阵如何使用
    本帖最后由 Creeper666 于 2018-8-14 12:24 编辑 这个点阵模块上面一排有12个脚,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表