智能车制作
标题:
PID
[打印本页]
作者:
一叶落尘
时间:
2012-2-15 15:10
标题:
PID
各位大神帮我看看,三个偏差值基本正确但输出chang1不正确,这是什么原因?
//申明变量
//定义变量
float Kp;//PID 比例系数常数
float Ti;//PID 积分系数常数
float Td;//PID 微分系数常数
#define T;//PID 采样周期
float pid_E0;//偏差e[k]
float pid_E1;//偏差e[k-1]
float pid_E2;//偏差e[k-2]
float a0;
float a1;
float a2;
float chang1;//变化量
int chang;//对chang1取整
int setpoint;//目标值
//PID初始化
void PID_init(void)
{
Kp=;
Ti=;
Td=;
T=;
a0=Kp*(1+T/Ti+Td/T);
a1=-Kp*(1+2*Td/T);
a2=Kp*Td/T;
// Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的
//结果确定这些参数
pid_E0=0;
pid_E1=0;
pid_E2=0;
chang1=0;
chang=0;
setpoint=0;
}
//增量计算
void PID_cal(int nextpoint)
{
pid_E0 = SetPoint - nextPoint;//当前误差
chang1 = ao* pid_E0 //E[k]项
- a1* pid_E1//E[k-1]项
+ a2 * pid_E2; //E[k-2]项
//存储误差,用于下次计算
pid_E2 = pid_E1;
pid_E1 = pid_E0;
gabs(float chang1);
//返回增量值
chang=(int)chang1;
return(chang);
}
//增量为负值时的处理
float gabs(float chang1)
{
if(chang1<0)
{
chang1=0-chang1;
}
return chang1;
}
作者:
◆|detrrr|
时间:
2012-2-21 21:06
void 怎么 return的??是这个 原因么。。。
作者:
qq185334563
时间:
2012-2-27 17:52
楼主好人 楼主一生平安
作者:
周洪水
时间:
2012-3-1 19:37
如二楼所说,你的无返回值函数哪来的返回值。。。
作者:
xu735456
时间:
2012-3-1 19:38
程序怎么这么简单??
作者:
樱花流年
时间:
2012-3-5 21:29
楼主的程序似乎有点问题,change1应该等于chang1 = ao* pid_E0+a1* pid_E1+ a2 * pid_E2吧,楼主试一下哈,我看的资料上这么写的哦!当然,void函数也是没有return的
作者:
xufang
时间:
2012-3-7 22:20
乱七八糟
作者:
王谦623
时间:
2012-3-8 21:34
作者:
一毛钱~~~~~~
时间:
2012-5-5 21:43
这是想干嘛、、、、
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2