智能车制作

标题: 形象解释PID算法+PID算法源代码 [打印本页]

作者: qual9109    时间: 2012-12-21 19:38
标题: 形象解释PID算法+PID算法源代码
小明接到这样一个任务:
有一个水缸点漏水(而且漏水的速度还不一定固定不变),
要求水面高度维持在某个位置,
一旦发现水面高度低于要求位置,就要往水缸里加水。

小明接到任务后就一直守在水缸旁边,
时间长就觉得无聊,就跑到房里看小说了,
每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;
}

作者: microconfig    时间: 2012-12-21 19:43
真的蛮形象的
作者: feng~    时间: 2012-12-21 19:49
顶了
作者: 叶子一哥    时间: 2012-12-21 20:02

作者: 周旭春    时间: 2012-12-21 20:10
:lol瞬间理解了一点。
作者: qual9109    时间: 2012-12-21 20:11
周旭春 发表于 2012-12-21 20:10
瞬间理解了一点。

哈哈
作者: 1228463834    时间: 2012-12-21 20:34
这也太形象了吧,为啥我发现好多PID都用结构体啊,用结构体有啥好处啊
作者: 简单丹    时间: 2012-12-21 20:53
有点儿启发
作者: 卟李狗昕    时间: 2012-12-21 20:57
我顶
作者: 似水流年、    时间: 2012-12-21 21:32
学习了
作者: freescal00@163.    时间: 2012-12-21 21:34
挺好
作者: clown    时间: 2012-12-21 22:18
有点儿启发
作者: gxuan    时间: 2012-12-21 22:19
懂了,很好很形象
作者: qual9109    时间: 2012-12-22 01:05
1228463834 发表于 2012-12-21 20:34
这也太形象了吧,为啥我发现好多PID都用结构体啊,用结构体有啥好处啊

整洁,能把变量归类,一目了然
作者: ljzzhinengche    时间: 2012-12-22 11:17

作者: subingkiun    时间: 2012-12-22 11:32

作者: liuyuliuyu1216    时间: 2012-12-22 11:44

作者: qual9109    时间: 2012-12-22 12:14

作者: Mr_Q    时间: 2012-12-22 14:04
我们学校澡堂一会水烫得要命~一会水是凉的~请问大婶,这是哪个量没调好啊~
在学校洗个澡都火大得很~
作者: 莫莫珂珂    时间: 2012-12-22 16:23
真好!开创中国教育新理念
作者: 1508323954    时间: 2012-12-22 17:03
不错

作者: 飞天小猪    时间: 2012-12-22 19:36
给力啊!
作者: 随心而动    时间: 2012-12-22 21:05
这个故事讲得不错,听懂了!
作者: 缘来如此    时间: 2012-12-22 22:26
果断顶了
作者: xxyz987    时间: 2012-12-23 11:00
什么样的波形,才说明PID调的比较好呢
作者: 初来炸到    时间: 2012-12-23 21:34
顶顶
作者: qual9109    时间: 2012-12-24 00:21
xxyz987 发表于 2012-12-23 11:00
什么样的波形,才说明PID调的比较好呢

快速性与及稳定性
作者: 玻璃中的太阳    时间: 2012-12-25 18:01
顶看看。
作者: 圣者小圣人    时间: 2012-12-26 15:36

作者: lianghuihao    时间: 2012-12-26 18:28
bu cuo
作者: 老学童先生    时间: 2012-12-26 20:43

作者: tjy518    时间: 2012-12-26 21:43
嗯好
作者: melon_1    时间: 2013-1-19 21:07
经典!!!
作者: ㄟDemo''    时间: 2013-1-25 16:20
鼓掌~
作者: 蛋求无悔    时间: 2013-2-2 09:20
谢谢分享
作者: ^戀·陽、    时间: 2013-3-2 15:31

作者: 飞尘    时间: 2013-3-2 20:16

作者: 378110705    时间: 2013-3-3 13:29
形象

作者: 追风筝的人    时间: 2013-3-3 15:26
顶了
作者: 可欣    时间: 2013-3-9 13:08

作者: 雨子    时间: 2013-3-11 19:32
:不错
作者: 夜之冰木九羽    时间: 2013-3-12 12:28
学习了

作者: huanyefeng0809    时间: 2013-3-12 17:12
看看...
作者: cqhb小麦    时间: 2013-3-12 17:26

作者: cy0427    时间: 2013-3-12 18:14

作者: 战斗堡垒    时间: 2013-3-13 17:47
程序看不懂。。。

作者: 单核    时间: 2013-4-2 21:24
顶了
作者: yaohuan824    时间: 2013-4-5 15:09
不错不错、、
作者: 人生。。初见    时间: 2013-4-5 23:46
很形象!!
作者: 雨山107    时间: 2013-4-6 19:36
给力
作者: 蓝天下的心    时间: 2013-4-6 22:21
科技寒假湖广会馆
作者: song_pf    时间: 2013-4-9 18:15
ding
作者: 小小金刚    时间: 2013-4-9 20:58
顶!!!
作者: sky源鸣    时间: 2013-4-19 22:41
顶顶顶顶顶顶顶顶顶顶
作者: lejia    时间: 2013-4-19 22:56
学习了
作者: MJPS3C2440    时间: 2013-4-20 10:50

作者: zyj    时间: 2013-4-20 11:05
又看见小明了
作者: Shadows    时间: 2013-4-20 11:41
瞬间被启蒙了

作者: Need_U_now    时间: 2013-7-4 16:46
MARK MARK MARK
作者: 竹林清风    时间: 2013-7-6 14:03
,好!!!
作者: 小猪的奋斗    时间: 2013-9-5 15:01
好棒  正需要
作者: 头上两只角    时间: 2013-11-21 23:01
能收藏吗?
作者: 夜狼    时间: 2013-11-22 09:10
学习学习

作者: :└.未知數`    时间: 2014-3-1 16:29
谢谢。。。。。。。。。。。
作者: zhang116    时间: 2014-3-17 10:57
带上文档
作者: 愚生    时间: 2014-3-17 23:52
菜鸟第一天看PID就有一个形象的理解,不错感谢楼主的分享。赞一个
作者: zhangqingpei    时间: 2014-3-18 17:24
学习了

作者: ireview    时间: 2014-3-19 11:26
真的是很形象。

作者: 909885807    时间: 2014-3-20 20:32
哈哈 好形象
作者: nfdianzi    时间: 2014-4-6 14:46
十分形象
作者: eovlon    时间: 2014-4-18 08:04
好屌啊

作者: wgw5820974944    时间: 2014-8-8 08:44
厉害




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2