用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏
你好,对折之内,我现在用Arduino uno做毕业设计,是通过点击控制太阳能板正反转。要求加入PID控制电机。Arduino 和PID都是初步接触,不是很熟,所以想请教一下。我是根据东西方向光敏电阻的分压值来控制转动方向的,我的PID的输入应该是两者之差吗?KP KI KD的值怎么确定啊?谢谢了
咳咳咳 发表于 2015-5-22 15:49
你好,对折之内,我现在用Arduino uno做毕业设计,是通过点击控制太阳能板正反转。要求加入PID控制电机。Ar ...

哦,你只要理解PID是一个封闭的系统。你输入一个现在被控制量的值和希望被控制量变成的值,PID就会很智能得把你现在需要怎么做告诉你。因此,你用一个光敏电阻,并设定一个希望光敏电阻读入的值。当光敏电阻读入的值和你希望的值有偏差的时候,pid就会输入一个值,这个值会告诉你电机转多少。pid参数的调试,你百度吧,有很多的。
请问楼主帖子中122行的代码起什么作用?
[C] 纯文本查看 复制代码
       if(iTemp) iTemp--;      //只有iTemp>0,才有必要减“1”

楼主厉害   不是理解很透彻无法举出这么形象的例子啊  支持楼主
感谢楼主!学到了
讲得非常好
看了楼主的帖子受益良多
看了这个帖子受益颇多

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

推荐主题 上一条 /4 下一条