智能车制作
标题:
哪位大神给我看下这个06届飞思卡尔杭电的程序,pd控制舵机的部分
[打印本页]
作者:
mmelodious
时间:
2013-5-19 10:09
标题:
哪位大神给我看下这个06届飞思卡尔杭电的程序,pd控制舵机的部分
麻烦哪位大神给我看下后解释下,附件里的技术报告中舵机控制部分的变量error1怎样由传感器数据处理得来,代码如下,菜鸟再此先谢谢了!
void turn_DuoJ()
{
char i;
adzhi=New_value[0]+New_value[1]+New_value[2];
if(New_value[1]>400)
{
if(
error1
>100)
error1
=100;
else if(error1<-100)
error1=-100;
}
if(New_value[1]>350)
{
if(error1>200)
error1=200;
else if(error1<-200)
error1=-200;
}
for(i=4;i>0;i--)
E1
=E1[i-1];
E1[0]=(int)error1;
D1=KP1*E1[0]-KP1*E1[1];
D2=KP2*E1[0]-KP2*E1[1];
D3=KP3*E1[0]-KP3*E1[1];
if(D1>1000)
D1=1000;
else if(D1<-1000)
D1=-1000;
if(D2>1000)
D2=1000;
else if(D2<-1000)
D2=-1000;
if(D3>1000)
D3=1000;
else if(D3<-1000)
D3=-1000;
if(error1<=fanwei2&&error1>=-fanwei2) //fanwei2<fanwei
{
KP_temp=KP3;
KD_temp=KDc;
DD=D3;
}
else if(error1<=fanwei&&error1>=-fanwei)
{
KP_temp=KP1;
KD_temp=KDa;
DD=D1;
}
else
{
KP_temp=KP2;
KD_temp=KDb;
DD=D2;
}
if(DD>16000/KD_temp&&DD>0)
DD=16000/KD_temp;
else if(DD<-16000/KD_temp&&DD<0)
DD=-16000/KD_temp;
if(error1>26000/KP_temp&&error1>0)
error1=26000/KP_temp;
else if(error1<-26000/KP_temp&&error1<0)
error1=-26000/KP_temp;
if(lock==1&&New_value[2]>80)
{
if(DS>0&&New_value[2]>New_value[0]&&New_value[2]>90)
lock=0;
else if(DS<0&&New_value[0]>New_value[2]&&New_value[0]>90)
lock=0;
}
作者:
j715473086
时间:
2013-5-19 13:15
这是传说中的分段PD吗
作者:
haozi110
时间:
2013-5-19 17:35
用现在的减去以前的
作者:
j715473086
时间:
2013-5-19 22:25
研究了一下 删掉的东西太多 没借鉴意义
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2