OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1839|回复: 9

PID 算法疑惑

[复制链接]

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
发表于 2017-1-12 17:19:34 | 显示全部楼层 |阅读模式
1金钱

http://www.eeskill.com/article/id/58061


函 数 名:void Init_PID_uint(PID_uint *p)

功 能:初始化PID参数

说 明:调用本函数之前,应该先对Kp,Ti,Td做设置 ,简化了公式

入口参数:PID单元的参数结构体 地址

返 回 值:无

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

void Init_PID_uint(PID_Uint *p)

{

p->k1=(p->Kp)+(p->Kp)*1024/(p->Ti)+(p->Kp)*(p->Td)/1024;

p->k2=(p->Kp)+2*(p->Kp)*(p->Td)/1024;

p->k3=(p->Kp)*(p->Td)/1024;

}

最后输出值为U_k,

U_k=(p->U_kk)+(p->k1)*ek-(p->k2)*(p->ekk)+(p->k3)*(p->ekkk);

链接在上,最后输出值是U_k ,U_k和k1,k2,k3相关,这里的k1,k2,k3 ,是怎么推导出来的?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-13 08:35:36 | 显示全部楼层
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1124
金钱
1124
注册时间
2015-8-4
在线时间
106 小时
发表于 2017-1-13 09:09:37 | 显示全部楼层
K1,K2,K3是P,I,D三个系数的变种,怎么来的你上面的Init函数不是写的很清楚了么
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-13 10:30:47 | 显示全部楼层
kingnike 发表于 2017-1-13 09:09
K1,K2,K3是P,I,D三个系数的变种,怎么来的你上面的Init函数不是写的很清楚了么

我就是想问,k1,k2,k3这3个系数是如何推导出来的。上面的式子不明白是什么原理。
回复

使用道具 举报

58

主题

6272

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11207
金钱
11207
注册时间
2014-4-1
在线时间
1230 小时
发表于 2017-1-13 10:38:01 | 显示全部楼层
li13158 发表于 2017-1-13 10:30
我就是想问,k1,k2,k3这3个系数是如何推导出来的。上面的式子不明白是什么原理。


这三个系数应当是人工设置的“权重”,
最多就是做了些数学上的变换。

至于怎么设置,p、i、d的权重各设多少,
这是经验、对系统特性的了解,是程序和电路以外的内容了。



回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1124
金钱
1124
注册时间
2015-8-4
在线时间
106 小时
发表于 2017-1-13 11:11:04 | 显示全部楼层
li13158 发表于 2017-1-13 10:30
我就是想问,k1,k2,k3这3个系数是如何推导出来的。上面的式子不明白是什么原理。

买本PID的书系统看一下,PID有很多种,看懂了自己都可以根据应用来改,这个没有一个定值。
活到老,学到老。
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-14 09:48:20 | 显示全部楼层
kingnike 发表于 2017-1-13 11:11
买本PID的书系统看一下,PID有很多种,看懂了自己都可以根据应用来改,这个没有一个定值。

你说的应该是Kp,Ti,Td 吧,这3个才是影响PID输出的系数,这里的k1,k2,k3应该是一个推导公式吧

PID_Uint

{

int U_kk;

int ekk;

int ekkk;

int Ur; //限幅输出值,需初始化

int Un; //不灵敏区

//int multiple; //PID系数的放大倍数,用整形数据的情况下,提高PID参数的设置精度 固定为256

int Kp; //比例,从小往大调

int Ti; //积分,从大往小调

int Td; //微分,用巡线板时设为0

int k1; //

int k2;

int k3;

};
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-14 09:48:50 | 显示全部楼层
xuande 发表于 2017-1-13 10:38
这三个系数应当是人工设置的“权重”,
最多就是做了些数学上的变换。

你说的应该是Kp,Ti,Td 吧,这3个才是影响PID输出的系数,这里的k1,k2,k3应该是一个推导公式吧

PID_Uint

{

int U_kk;

int ekk;

int ekkk;

int Ur; //限幅输出值,需初始化

int Un; //不灵敏区

//int multiple; //PID系数的放大倍数,用整形数据的情况下,提高PID参数的设置精度 固定为256

int Kp; //比例,从小往大调

int Ti; //积分,从大往小调

int Td; //微分,用巡线板时设为0

int k1; //

int k2;

int k3;

};
回复

使用道具 举报

13

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2016-11-15
在线时间
38 小时
发表于 2017-1-14 11:17:15 | 显示全部楼层
这个貌似是增量式PID
回复

使用道具 举报

36

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2016-3-26
在线时间
83 小时
 楼主| 发表于 2017-1-16 10:18:51 | 显示全部楼层
顶顶顶顶
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-4-20 21:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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