智能车制作

标题: PID控制,如果单纯用P控制该怎么写? [打印本页]

作者: 人车合一    时间: 2012-2-9 14:55
标题: PID控制,如果单纯用P控制该怎么写?



刚接触PID,看过一些资料,但是还是很难弄懂PID,下面是我写的只有P控制的程序。但换参数后就不对了。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,j;
float kp,now_data,std_data,out_data;//now_data当前数据,std_data设定数据,kp比例系数
while(1)
{
  printf("please input kp,now_data,std_data,i value.\n");
  scanf("%f %f %f %d",&kp,&now_data,&std_data,&i);
  for (j=0;j<i;j++)
  {
   out_data=kp*(now_data-std_data);
   printf("%f\n",out_data);
   now_data=out_data;
  }
}
}
[attach]17732[/attach]
0.5 2 10 30时
[attach]17733[/attach]
0.6 8 10 20时就不对了
还有kp应该是放大系数 也就意味着要大于1,但是我设大于1的值基本上都不能成功...
,不知道为什么,希望有人能指点一下。

作者: 人车合一    时间: 2012-2-9 16:09
自己看了一下有些地方写错了,修改后程序如下:
//只有比例作用
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i,j;
        float et,kp,now_data,std_data,ut;
        while(1)
        {
                printf("please input kp,std_data,now_data,i value.\n");
                scanf("%f %f %f %d",&kp,&std_data,&now_data,&i);
                for (j=0;j<i;j++)
                {
                        et=std_data-now_data;
                        ut=kp*et;
                        now_data=now_data+ut;
                        printf("%f\n",now_data);
                }
        }

}
但是kp的值要小于2大于0, 否则就不对了或者产生震荡不知道是为什么.....希望有人能解答
作者: chillms91    时间: 2012-2-9 16:44
我理解的PID不是这个样子的 不过LZ的方法我可以借鉴一下 用VC来看看自己的程序对不对
作者: 光电仔    时间: 2012-2-11 13:15
纠结PID   说到底  车子最核心的就是调节好它了
作者: welterstar    时间: 2012-2-23 20:16

作者: xufang    时间: 2012-3-5 10:52
你写反了吧???我都是用测出的减设定的再乘系数最后加测出的,如果你是用来控制速度的话,建议你用PID,如果是舵机的话,PD控制也比P控制强多了。




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2