搜索
bottom↓
回复: 678

形象解释PID算法+PID算法源代码

  [复制链接]

出0入0汤圆

发表于 2011-9-12 20:08:23 | 显示全部楼层 |阅读模式
小明接到这样一个任务:
有一个水缸点漏水(而且漏水的速度还不一定固定不变),
要求水面高度维持在某个位置,
一旦发现水面高度低于要求位置,就要往水缸里加水。

小明接到任务后就一直守在水缸旁边,
时间长就觉得无聊,就跑到房里看小说了,
每30分钟来检查一次水面高度。水漏得太快,
每次小明来检查时,水都快漏完了,离要求的高度相差很远
,小明改为每3分钟来检查一次,结果每次来水都没怎么漏
,不需要加水,来得太频繁做的是无用功。几次试验后,
确定每10分钟来检查一次。这个检查时间就称为采样周期。

开始小明用瓢加水,水龙头离水缸有十几米的距离,
经常要跑好几趟才加够水,于是小明又改为用桶加,
一加就是一桶,跑的次数少了,加水的速度也快了,
但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,
我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,
也不会让水溢出。这个加水工具的大小就称为比例系数。

小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多
,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,
每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,
但加水的速度又慢了,有时还赶不上漏水的速度。
于是他试着变换不同大小口径的漏斗来控制加水的速度
,最后终于找到了满意的漏斗。漏斗的时间就称为积分时间 。

小明终于喘了一口,但任务的要求突然严了,
水位控制的及时性要求大大提高,一旦水位过低,
必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。
小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,
一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。
他又在要求水面位置上面一点将水凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。
这个水漏出的快慢就称为微分时间。


大学时代做机器人时用的PID算法源代码:
#define PID_Uint struct pid_uint
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;
};

/********************************************************************
函 数 名: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;
}
/********************************************************************
函 数 名:void reset_Uk(PID_Uint *p)
功    能:初始化U_kk,ekk,ekkk
说    明:在初始化时调用,改变PID参数时有可能需要调用
入口参数:PID单元的参数结构体 地址
返 回 值:无
***********************************************************************/
void reset_Uk(PID_Uint *p)
{
        p->U_kk=0;
        p->ekk=0;
        p->ekkk=0;
}
/********************************************************************
函 数 名:int PID_commen(int set,int jiance,PID_Uint *p)
功    能:通用PID函数
说    明:求任意单个PID的控制量
入口参数:期望值,实测值,PID单元结构体
返 回 值:PID控制量
***********************************************************************/
int PID_common(int set,int jiance,PID_Uint *p)
{
        int ek,U_k=0;
        ek=jiance-set;
        if((ek>(p->Un))||(ek<-(p->Un)))                //积分不灵敏区
                U_k=(p->U_kk)+(p->k1)*ek-(p->k2)*(p->ekk)+(p->k3)*(p->ekkk);
        p->U_kk=U_k;
           p->ekkk=p->ekk;
        p->ekk=ek;
        if(U_k>(p->Ur))                                        //限制最大输出量,
                U_k=p->Ur;
        if(U_k<-(p->Ur))
                U_k=-(p->Ur);       
        return U_k/1024;
}

出0入0汤圆

发表于 2011-9-17 11:30:41 | 显示全部楼层
不错,谢谢

出0入0汤圆

发表于 2011-9-17 12:32:05 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-9-17 12:36:33 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-9-17 12:48:27 | 显示全部楼层
MAKE

出0入0汤圆

发表于 2011-9-17 12:55:22 | 显示全部楼层
mark

出500入0汤圆

发表于 2011-9-17 12:57:07 | 显示全部楼层
mark

出0入4汤圆

发表于 2011-9-17 12:58:59 | 显示全部楼层
好形象

出0入97汤圆

发表于 2011-9-17 14:33:44 | 显示全部楼层
mark 一下,解释好形象、

出0入0汤圆

发表于 2011-9-17 16:49:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-17 17:21:44 | 显示全部楼层
MARK。。。

出0入0汤圆

发表于 2011-9-17 17:25:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-20 21:20:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-23 16:42:19 | 显示全部楼层
牛人,不错,很有帮助!!谢了!

出0入0汤圆

发表于 2011-10-23 17:38:58 | 显示全部楼层
形象生动

出0入0汤圆

发表于 2011-10-24 16:14:42 | 显示全部楼层
楼主好形象

出0入0汤圆

发表于 2011-10-24 18:43:33 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2011-10-24 18:53:32 | 显示全部楼层
看看

出0入0汤圆

发表于 2011-10-24 19:01:58 | 显示全部楼层
谢谢楼主 一直搞不懂pid

出0入0汤圆

发表于 2011-10-24 19:05:31 | 显示全部楼层
珍藏了

出0入0汤圆

发表于 2011-10-24 19:08:42 | 显示全部楼层
哈哈···写得好····

出0入0汤圆

发表于 2011-10-24 19:11:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 19:51:54 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-10-24 19:59:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 20:13:00 | 显示全部楼层
确实很形象啊。

出0入0汤圆

发表于 2011-10-24 20:24:42 | 显示全部楼层
写书就要这样的人来写。谢谢。

出0入0汤圆

发表于 2011-10-24 20:31:56 | 显示全部楼层
够形象,不错!

出0入0汤圆

发表于 2011-10-24 21:23:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 21:58:49 | 显示全部楼层
PID解惑者

出0入0汤圆

发表于 2011-10-24 22:37:43 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-10-26 16:55:06 | 显示全部楼层
不错,很形象哈~

出0入0汤圆

发表于 2011-10-27 20:07:19 | 显示全部楼层
有意义!

出0入0汤圆

发表于 2011-10-28 20:45:52 | 显示全部楼层
回复【楼主位】au_business  
-----------------------------------------------------------------------

很形象的比喻,深入浅出,好贴呀,学习了

出0入0汤圆

发表于 2011-10-29 10:49:13 | 显示全部楼层
牛,这个真的很形象,感谢分享!

出0入0汤圆

发表于 2011-10-31 23:12:31 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2011-11-1 01:00:15 | 显示全部楼层
不错,形象极了。

出0入0汤圆

发表于 2011-11-1 03:13:14 | 显示全部楼层
来看看

出0入0汤圆

发表于 2011-11-1 07:06:30 | 显示全部楼层
厉害!

出0入0汤圆

发表于 2011-11-1 08:07:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-1 11:12:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-1 11:41:07 | 显示全部楼层
这样很容易理解了!

出0入0汤圆

发表于 2011-11-2 09:27:48 | 显示全部楼层
不错的啊

出0入0汤圆

发表于 2011-11-2 10:32:52 | 显示全部楼层
写得不错,顶

出0入0汤圆

发表于 2011-11-2 16:40:26 | 显示全部楼层
mark通俗易懂。。。谢谢。。

出0入0汤圆

发表于 2011-11-8 09:20:52 | 显示全部楼层
m

出0入0汤圆

发表于 2011-11-8 09:44:09 | 显示全部楼层
PID算法真的是很神奇的东西,一定要好好学啊。

出0入0汤圆

发表于 2011-11-8 10:59:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-8 11:03:35 | 显示全部楼层
mark通俗易懂。。。谢谢。。

出0入0汤圆

发表于 2011-11-8 13:53:09 | 显示全部楼层
这个描述的不错

出0入0汤圆

发表于 2011-11-8 14:05:21 | 显示全部楼层
留言支持下~~

出0入0汤圆

发表于 2011-11-8 14:11:11 | 显示全部楼层
文字描述的很形象。

出0入0汤圆

发表于 2011-11-8 15:20:06 | 显示全部楼层
受教

出0入0汤圆

发表于 2011-11-8 15:30:06 | 显示全部楼层
先收藏。。稍后看

出0入0汤圆

发表于 2011-11-8 15:30:10 | 显示全部楼层
不错 !

出0入0汤圆

发表于 2011-11-8 15:32:49 | 显示全部楼层
mk

出0入0汤圆

发表于 2011-11-8 15:59:49 | 显示全部楼层
不错不错

出330入1862汤圆

发表于 2011-11-8 22:30:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-10 20:58:58 | 显示全部楼层
学习一下。

出0入0汤圆

发表于 2011-11-19 14:51:18 | 显示全部楼层
通俗易懂!!!!!!!

出0入0汤圆

发表于 2011-11-19 16:40:34 | 显示全部楼层
经典哦,一下子就记住了。高!

出0入0汤圆

发表于 2011-11-19 18:35:05 | 显示全部楼层
有意思。

出0入0汤圆

发表于 2011-11-19 19:15:57 | 显示全部楼层
描述的真好~~~

出0入0汤圆

发表于 2011-11-19 19:32:18 | 显示全部楼层
Mark

出0入0汤圆

发表于 2011-11-19 20:46:10 | 显示全部楼层
微分的描述不好理解

出0入0汤圆

发表于 2011-11-19 20:50:03 | 显示全部楼层
积分量应该和累计误差成比例吧,咋个成了定量的了

出0入0汤圆

发表于 2011-11-23 19:16:24 | 显示全部楼层
很好,学习下

出0入0汤圆

发表于 2011-11-23 19:58:10 | 显示全部楼层
很生动,不错

出0入0汤圆

发表于 2011-11-23 20:49:17 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-11-23 21:56:45 | 显示全部楼层
谢谢。

出0入0汤圆

发表于 2011-11-23 21:58:09 | 显示全部楼层
很好,学习下

出0入0汤圆

发表于 2011-11-26 21:08:57 | 显示全部楼层
这学期刚学的。。

出0入0汤圆

发表于 2011-11-27 10:28:16 | 显示全部楼层
不错!

出0入0汤圆

发表于 2011-12-5 00:13:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-5 00:14:19 | 显示全部楼层
很好啊

出0入0汤圆

发表于 2011-12-11 20:47:06 | 显示全部楼层
PID学习中 MARK了

出0入0汤圆

发表于 2011-12-24 17:31:02 | 显示全部楼层
不错,学习了

出0入0汤圆

发表于 2011-12-24 22:29:43 | 显示全部楼层
是相当的形象

出0入0汤圆

发表于 2012-1-19 17:02:30 | 显示全部楼层
不错。很容易理解。

出0入0汤圆

发表于 2012-1-19 20:11:05 | 显示全部楼层
不错

出0入0汤圆

发表于 2012-1-19 22:43:55 | 显示全部楼层
看君一贴,胜看书一车!

出0入0汤圆

发表于 2012-1-20 22:28:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-20 22:44:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-20 22:47:29 | 显示全部楼层
比较好啊

出0入98汤圆

发表于 2012-1-20 23:24:50 | 显示全部楼层
说的很好,很容易理解!

出0入0汤圆

发表于 2012-1-20 23:47:14 | 显示全部楼层
谢谢 mark

出0入59汤圆

发表于 2012-1-21 00:09:32 | 显示全部楼层
(^_^)∠※

出0入0汤圆

发表于 2012-1-21 00:14:08 | 显示全部楼层
描述的太贴切了。。。

出10入12汤圆

发表于 2012-2-5 08:36:46 | 显示全部楼层
不错

出0入0汤圆

发表于 2012-2-5 14:40:08 | 显示全部楼层
还行

出0入0汤圆

发表于 2012-2-7 16:36:01 | 显示全部楼层
支持啊,呵呵

出0入0汤圆

发表于 2012-2-11 16:48:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-11 19:04:33 | 显示全部楼层
有意思

出0入0汤圆

发表于 2012-2-12 15:35:29 | 显示全部楼层
不错

出0入0汤圆

发表于 2012-2-12 17:18:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-12 18:55:21 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2012-2-12 18:58:55 | 显示全部楼层
学过PID

积分微分控制技术

但其实很多领域应用PID的成本偏高,尤其是小家电,单片机档次低而且研发需要投入经费的

像一般的酸奶机,豆浆机啥的,包括大多数洗衣机严格意义上都不是PID,很多都是模糊逻辑Fuzzy Logic

出0入0汤圆

发表于 2012-2-12 20:35:03 | 显示全部楼层
回复【楼主位】au_business
-----------------------------------------------------------------------

mark

出0入0汤圆

发表于 2012-2-12 20:56:36 | 显示全部楼层
必须当一回mark党!

出0入0汤圆

发表于 2012-2-12 21:08:40 | 显示全部楼层
解释好形象、

出0入0汤圆

发表于 2012-2-15 12:51:19 | 显示全部楼层
讲的不错!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 02:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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