智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

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

    [复制链接]

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
跳转到指定楼层
#
发表于 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;

}

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
103
威望
47
贡献
30
兑换币
32
注册时间
2017-11-7
在线时间
13 小时
67#
发表于 2017-11-7 21:34:38 | 只看该作者
66666666666
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
55
威望
32
贡献
15
兑换币
18
注册时间
2017-3-23
在线时间
4 小时
66#
发表于 2017-3-30 22:05:52 | 只看该作者
问一下,具体是怎么调呢?比如调舵机的PID的P
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
155
QQ
威望
81
贡献
40
兑换币
41
注册时间
2016-3-14
在线时间
17 小时
毕业学校
皖院
65#
发表于 2016-4-23 19:35:26 | 只看该作者
谢谢楼主
回复 支持 反对

使用道具 举报

17

主题

241

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2498
威望
1282
贡献
688
兑换币
843
注册时间
2014-10-25
在线时间
264 小时
毕业学校
哈根
64#
发表于 2014-11-23 01:35:21 | 只看该作者
赞一个、、、、、、、、、、、、
回复 支持 反对

使用道具 举报

6

主题

117

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1330
威望
651
贡献
419
兑换币
409
注册时间
2013-9-9
在线时间
130 小时
毕业学校
中国旅游大学
63#
发表于 2014-11-18 03:36:55 | 只看该作者
很好
回复 支持 反对

使用道具 举报

0

主题

52

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7237
威望
3658
贡献
2421
兑换币
1612
注册时间
2013-6-15
在线时间
579 小时
62#
发表于 2013-6-23 09:52:31 | 只看该作者
so good
回复 支持 反对

使用道具 举报

0

主题

90

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3815
QQ
威望
1971
贡献
1326
兑换币
1151
注册时间
2012-12-10
在线时间
259 小时
毕业学校
黑龙江工程学院
61#
发表于 2013-6-18 12:43:37 | 只看该作者
:):):):)
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
威望
121
贡献
55
兑换币
72
注册时间
2013-1-12
在线时间
23 小时
毕业学校
安科院
60#
发表于 2013-6-11 23:10:18 | 只看该作者
嗯哼
回复 支持 反对

使用道具 举报

1

主题

199

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4422
威望
2037
贡献
1315
兑换币
1099
注册时间
2012-10-30
在线时间
535 小时
59#
发表于 2013-4-29 20:09:31 | 只看该作者
回复 支持 反对

使用道具 举报

9

主题

71

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2728

优秀会员奖章活跃会员奖章在线王奖章

威望
1174
贡献
754
兑换币
772
注册时间
2013-3-8
在线时间
400 小时
58#
发表于 2013-4-26 18:27:47 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 06:50 , Processed in 0.976272 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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