智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 41647|回复: 393
打印 上一主题 下一主题

[编程类] PID算法

  [复制链接]

2

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
QQ
威望
253
贡献
49
兑换币
14
注册时间
2010-4-2
在线时间
3 小时
跳转到指定楼层
#
发表于 2010-4-4 18:36:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1贡献
//*****************************************************

//定义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[k-1]项

             + sptr->Derivative * sptr->PrevError; //E[k-2]项

    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;

}


这是从其他贴复制过来的,请问谁能帮我看看main函数里的错误。。。。。

或者谁有更好的PID程序。。能不能发给我~~

0

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
威望
186
贡献
26
兑换币
2
注册时间
2012-5-2
在线时间
14 小时
393#
发表于 2012-8-3 09:32:29 | 只看该作者
我都没看出来main函数的错误。。
回复

使用道具 举报

1

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
威望
182
贡献
29
兑换币
0
注册时间
2011-1-8
在线时间
3 小时
392#
发表于 2011-3-9 20:10:43 | 只看该作者
本来我对小车充满了信心和激情,可是一碰到PID算法,我就抑郁了
回复

使用道具 举报

2

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
威望
276
贡献
58
兑换币
0
注册时间
2010-9-5
在线时间
25 小时
391#
发表于 2010-10-4 16:54:52 | 只看该作者
悲哀!
回复

使用道具 举报

2

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
威望
276
贡献
58
兑换币
0
注册时间
2010-9-5
在线时间
25 小时
390#
发表于 2010-10-4 16:54:45 | 只看该作者
无人能解~!
回复

使用道具 举报

140

主题

1016

帖子

2

精华

功勋会员

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

Rank: 10Rank: 10Rank: 10

积分
32723

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

QQ
威望
4239
贡献
25778
兑换币
1456
注册时间
2009-12-9
在线时间
1353 小时
389#
发表于 2010-8-15 15:15:30 | 只看该作者
这个程序很经典 没有错误  注意下寄存器的名字
回复

使用道具 举报

10

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
QQ
威望
289
贡献
74
兑换币
0
注册时间
2010-6-26
在线时间
12 小时
388#
发表于 2010-8-14 16:40:45 | 只看该作者
难啊
回复

使用道具 举报

4

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
381
QQ
威望
309
贡献
44
兑换币
0
注册时间
2010-3-11
在线时间
14 小时
387#
发表于 2010-6-6 09:44:30 | 只看该作者
学习中···············
回复

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
QQ
威望
262
贡献
47
兑换币
0
注册时间
2010-4-21
在线时间
10 小时
386#
发表于 2010-5-26 13:11:13 | 只看该作者
来看下
回复

使用道具 举报

2

主题

44

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
11084

论坛元老奖章

威望
6682
贡献
4390
兑换币
0
注册时间
2010-3-10
在线时间
6 小时
385#
发表于 2010-5-13 22:00:03 | 只看该作者
自己仔细点 调试调试就能找出。。
回复

使用道具 举报

1

主题

788

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1042
威望
1014
贡献
28
兑换币
0
注册时间
2010-5-9
在线时间
0 小时
384#
发表于 2010-5-9 14:22:42 | 只看该作者
一起努力~
一起分享。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 06:19 , Processed in 0.440578 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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