智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 30380|回复: 67
打印 上一主题 下一主题

飞思小车PID控制的通俗理解[3]

    [复制链接]

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
跳转到指定楼层
1#
发表于 2010-3-15 12:47:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

PID实际编程的过程的,要注意的东西还是有几点的。PID这东西可以做得很深。

1 PID的诊定。凑试法,临界比例法,经验法。

2 T的确定,采样周期应远小于过程的扰动信号的周期,在小车程序中一般是ms级别。

3 目标速度何时赋值问题,如何更新新的目标速度?这个问题一般的人都乎略了。目标速度肯定不是个恒定的,那么何时改变目标速度呢?

4 改变了目标速度,那么e(k) e(k-1) e(k-2)怎么改变呢?是赋0还是要怎么变?

5 是不是PID要一直开着?

6 error为多少时就可以当速度已达到目标?

7 PID的优先级怎么处理,如果和图像采集有冲突怎么办?

8 PID的输入是速度,输出是PWM,按理说PWM产生速度,但二者不是同一个东西,有没有问题?

9 PID计算如何优化其速度?指针,汇编,移位?都可以试!

//*****************************************************

//定义PID结构体

//*****************************************************

typedef struct PID

{

    int SetPoint; //设定目标 Desired Value

    double Proportion; //比例常数 Proportional Const

    double Integral; //积分常数 Integral Const

    double Derivative; //微分常数 Derivative Const

    int LastError; //Error[-1]

    int PrevError; //Error[-2]

} PID;

//*****************************************************

//定义相关宏

//*****************************************************

#define P_DATA 100

#define I_DATA
0.6

#define D_DATA
1

#define HAVE_NEW_VELOCITY 0X01

//*****************************************************

//声明PID实体

//*****************************************************

static PID sPID;

static PID *sptr = &sPID;

//*****************************************************

//PID参数初始化

//*****************************************************

void IncPIDInit(void)

{

sptr->LastError = 0; //Error[-1]

sptr->PrevError = 0; //Error[-2]

sptr->Proportion = P_DATA; //比例常数 Proportional Const

sptr->Integral = I_DATA; //积分常数Integral Const

sptr->Derivative = D_DATA; //微分常数 Derivative Const

sptr->SetPoint =100;
目标是100

}

//*****************************************************

//增量式PID控制设计

//*****************************************************

int IncPIDCalc(int NextPoint)

{

   int iError, iIncpid; //当前误差

   iError = sptr->SetPoint - NextPoint; //增量计算

   iIncpid = sptr->Proportion * iError //E[k]

             - sptr->Integral * sptr->LastError //E[k1]

             + sptr->Derivative * sptr->PrevError; //E[k2]

    sptr->PrevError = sptr->LastError;
//
存储误差,用于下次计算

    sptr->LastError = iError;

    return(iIncpid);
//
返回增量值

}

Int g_CurrentVelocity;

Int g_Flag;

void main(void)

{



DisableInterrupt

InitMCu();


IncPIDInit();

g_CurrentVelocity=0;
//
全局变量也初始化

g_Flag=0;
//
全局变量也初始化

EnableInterrupt;




While(1)

{


if (g_Flag& HAVE_NEW_VELOCITY)


{


PWMOUT+=
IncPIDCalc(CurrentVelocity);


g_Flag&=~ HAVE_NEW_VELOCITY;

}

}

}

//****************************************

//采样周期T

//****************************************

Interrrupt TIME void

{


CurrentVelocity =GetCurrentVelocity;


g_Flag|= HAVE_NEW_VELOCITY;

}

21

主题

1019

帖子

0

精华

常驻嘉宾

我爱雯婕

Rank: 8Rank: 8

积分
4657
威望
2223
贡献
1682
兑换币
4
注册时间
2009-3-4
在线时间
376 小时
2#
发表于 2010-3-15 14:10:07 | 只看该作者
回复 1# whut_wj
必须顶万哥
回复 支持 反对

使用道具 举报

140

主题

1016

帖子

2

精华

功勋会员

智能车八届元老!武汉岱默科技创始人!

Rank: 10Rank: 10Rank: 10

积分
32723

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
4239
贡献
25778
兑换币
1456
注册时间
2009-12-9
在线时间
1353 小时
3#
发表于 2010-3-15 14:25:09 | 只看该作者
顶师兄~~~
回复 支持 反对

使用道具 举报

0

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
威望
239
贡献
46
兑换币
6
注册时间
2010-1-13
在线时间
13 小时
4#
发表于 2010-3-15 17:41:07 | 只看该作者
狂顶
回复 支持 反对

使用道具 举报

2

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
578
威望
453
贡献
95
兑换币
16
注册时间
2010-3-13
在线时间
15 小时
5#
发表于 2010-3-15 22:19:06 | 只看该作者
受教了,谢谢!
回复 支持 反对

使用道具 举报

0

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
威望
228
贡献
31
兑换币
4
注册时间
2010-2-24
在线时间
7 小时
6#
发表于 2010-3-16 16:18:56 | 只看该作者
真是感谢万分啊
回复 支持 反对

使用道具 举报

6

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
397
QQ
威望
305
贡献
40
兑换币
0
注册时间
2010-3-13
在线时间
26 小时
7#
发表于 2010-3-16 17:29:49 | 只看该作者
再顶
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
威望
244
贡献
25
兑换币
0
注册时间
2010-3-6
在线时间
4 小时
8#
发表于 2010-3-17 08:48:06 | 只看该作者
顶一下!
回复 支持 反对

使用道具 举报

1

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
475
威望
371
贡献
88
兑换币
0
注册时间
2010-1-10
在线时间
8 小时
9#
发表于 2010-3-17 17:56:22 | 只看该作者
顶起
回复 支持 反对

使用道具 举报

1

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
QQ
威望
240
贡献
31
兑换币
0
注册时间
2010-3-10
在线时间
3 小时
10#
发表于 2010-3-18 08:53:14 | 只看该作者
很好
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-5 18:27 , Processed in 0.159810 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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