智能车制作
标题:
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