智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12742|回复: 57
打印 上一主题 下一主题

PID经验代码

  [复制链接]

32

主题

289

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5311

论坛元老奖章

威望
603
贡献
4572
兑换币
10
注册时间
2011-3-10
在线时间
68 小时
跳转到指定楼层
1#
发表于 2011-3-19 13:55:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
完整 PID 代码:
//声明变量
//定义变量
float Kp; //PID 调节的比例常数
float Ti; //PID 调节的积分常数
float T; //采样周期
float Td; //PID 调节的微分时间常数
float a0;
float a1;
float a2;
float ek; //偏差e[k]
float ek1; //偏差e[k-1]
float ek2; //偏差e[k-2]
float uk; //u[k]
int uk1; //对uk 四舍五入求整
int adjust; //最终输出的调整量
//变量初始化,根据实际情况初始化
Kp=;
Ti=;
T=;
Td=;
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,根据实验调得的结果确定这些参数
ek=0;
ek1=0;
ek2=0;
uk=0;
uk1=0;
adjust=0;
int pid(float ek)
{
if(gabs(ek)<ee) //ee 为误差的阀值,小于这个数值的时候,不做PID 调整,避免误差较小
时频繁调节引起震荡。ee 的值可自己设
{
adjust=0;
}
else
{
uk=a0*ek+a1*ek1+a2*ek2;
ek2=ek1;
ek1=ek;
uk1=(int)uk;
if(uk>0)
{
if(uk-uk1>=0.5)
{
uk1=uk1+1;
}
}
if(uk<0)
{
if(uk1-uk>=0.5)
{
uk1=uk1-1;
}
}
adjust=uk1;
}
return adjust;
}
float gabs(float ek)
{
if(ek<0)
{
ek=0-ek;
}
return ek;
}

84

主题

707

帖子

2

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7106

优秀会员奖章活跃会员奖章资源大师奖章论坛元老奖章论坛骨干奖章

威望
1736
贡献
4796
兑换币
434
注册时间
2012-2-15
在线时间
287 小时
毕业学校
西南交通大学
58#
发表于 2013-7-19 17:01:49 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

高级会员

Rank: 4

积分
736
威望
385
贡献
147
兑换币
22
注册时间
2012-2-18
在线时间
102 小时
毕业学校
师大
57#
发表于 2012-8-17 20:58:49 | 只看该作者
回复 支持 反对

使用道具 举报

6

主题

174

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1284
威望
768
贡献
378
兑换币
98
注册时间
2011-10-26
在线时间
69 小时
56#
发表于 2012-5-4 21:11:48 | 只看该作者
学习
回复 支持 反对

使用道具 举报

6

主题

741

帖子

0

精华

常驻嘉宾

大坏蛋

Rank: 8Rank: 8

积分
3542

优秀会员奖章论坛元老奖章在线王奖章活跃会员奖章

威望
2051
贡献
627
兑换币
193
注册时间
2012-3-11
在线时间
432 小时
55#
发表于 2012-5-4 18:25:07 | 只看该作者
我是为看lz的头像才过来的。。。。
回复 支持 反对

使用道具 举报

0

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
976
威望
569
贡献
221
兑换币
58
注册时间
2012-2-3
在线时间
93 小时
54#
发表于 2012-3-19 22:09:54 | 只看该作者
回复 支持 反对

使用道具 举报

24

主题

128

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3525

优秀会员奖章热心会员奖章活跃会员奖章

QQ
威望
805
贡献
2486
兑换币
0
注册时间
2010-11-16
在线时间
117 小时
53#
发表于 2012-2-13 15:41:22 | 只看该作者

Kp=;
Ti=;
T=;
Td=;

可是要想确定以上几个参数又谈何容易呢?LZ能再具体说说吗?这四个值要是一个个测还真是头大的啊
回复 支持 反对

使用道具 举报

24

主题

128

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3525

优秀会员奖章热心会员奖章活跃会员奖章

QQ
威望
805
贡献
2486
兑换币
0
注册时间
2010-11-16
在线时间
117 小时
52#
发表于 2012-2-13 15:40:12 | 只看该作者
可是要想确定
Kp=;
Ti=;
T=;
Td=;
回复 支持 反对

使用道具 举报

4

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
威望
208
贡献
93
兑换币
0
注册时间
2011-12-5
在线时间
1 小时
51#
发表于 2011-12-18 17:45:28 | 只看该作者
楼主辛苦了
回复 支持 反对

使用道具 举报

4

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
威望
208
贡献
93
兑换币
0
注册时间
2011-12-5
在线时间
1 小时
50#
发表于 2011-12-18 17:45:06 | 只看该作者
我会好好学习的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-5-4 12:00 , Processed in 0.294332 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表